From 8e1c10463fae429914fc7743a16f4d6fa5101d11 Mon Sep 17 00:00:00 2001 From: Cornel Punga Date: Thu, 11 Jun 2015 12:34:35 +0300 Subject: [PATCH 001/121] Update README.md with a new supported OS It also work on Fedora 22. Tested! --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 2ac7de5b0..246073b65 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ Source code is published under GPL v3, license is available [here](https://githu * Windows XP - Windows 8.1 (**not** RT) * Mac OS X 10.7 - Mac OS X 10.10 * Ubuntu 12.04 - Ubuntu 14.04 +* Fedora 22 ###Third-party From dfd5cb4f4ef07b6f009a466216df17f93ac31e2b Mon Sep 17 00:00:00 2001 From: John Preston Date: Sat, 20 Jun 2015 00:58:01 +0300 Subject: [PATCH 002/121] sticker set menu named Add Stickers, improved stickers panel --- Telegram/Resources/lang.strings | 1 + Telegram/Resources/style.txt | 32 +++++++++++++------------- Telegram/SourceFiles/config.h | 2 +- Telegram/SourceFiles/dropdown.cpp | 11 +++++---- Telegram/SourceFiles/historywidget.cpp | 2 +- Telegram/SourceFiles/structs.cpp | 15 ++++++++++++ Telegram/SourceFiles/structs.h | 2 ++ 7 files changed, 42 insertions(+), 23 deletions(-) diff --git a/Telegram/Resources/lang.strings b/Telegram/Resources/lang.strings index d0852fc38..6a064f23f 100644 --- a/Telegram/Resources/lang.strings +++ b/Telegram/Resources/lang.strings @@ -508,6 +508,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_context_open_audio" = "Open Audio"; "lng_context_save_audio" = "Save Audio As.."; "lng_context_pack_info" = "Pack Info"; +"lng_context_pack_add" = "Add Stickers"; "lng_context_open_file" = "Open File"; "lng_context_save_file" = "Save File As.."; "lng_context_forward_file" = "Forward File"; diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index 4a67b66a0..f4e0cf20d 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -1573,67 +1573,67 @@ rbEmoji: flatCheckbox { imagePos: point(8px, 12px); } rbEmojiRecent: flatCheckbox(rbEmoji) { - imageRect: emojiRecent; + imageRect: emojiRecentOver; chkImageRect: emojiRecentActive; overImageRect: emojiRecentOver; chkOverImageRect: emojiRecentActive; - disImageRect: emojiRecent; + disImageRect: emojiRecentOver; chkDisImageRect: emojiRecentActive; } rbEmojiPeople: flatCheckbox(rbEmoji) { - imageRect: emojiPeople; + imageRect: emojiPeopleOver; chkImageRect: emojiPeopleActive; overImageRect: emojiPeopleOver; chkOverImageRect: emojiPeopleActive; - disImageRect: emojiPeople; + disImageRect: emojiPeopleOver; chkDisImageRect: emojiPeopleActive; } rbEmojiNature: flatCheckbox(rbEmoji) { - imageRect: emojiNature; + imageRect: emojiNatureOver; chkImageRect: emojiNatureActive; overImageRect: emojiNatureOver; chkOverImageRect: emojiNatureActive; - disImageRect: emojiNature; + disImageRect: emojiNatureOver; chkDisImageRect: emojiNatureActive; } rbEmojiFood: flatCheckbox(rbEmoji) { - imageRect: emojiFood; + imageRect: emojiFoodOver; chkImageRect: emojiFoodActive; overImageRect: emojiFoodOver; chkOverImageRect: emojiFoodActive; - disImageRect: emojiFood; + disImageRect: emojiFoodOver; chkDisImageRect: emojiFoodActive; } rbEmojiCelebration: flatCheckbox(rbEmoji) { - imageRect: emojiCelebration; + imageRect: emojiCelebrationOver; chkImageRect: emojiCelebrationActive; overImageRect: emojiCelebrationOver; chkOverImageRect: emojiCelebrationActive; - disImageRect: emojiCelebration; + disImageRect: emojiCelebrationOver; chkDisImageRect: emojiCelebrationActive; } rbEmojiActivity: flatCheckbox(rbEmoji) { - imageRect: emojiActivity; + imageRect: emojiActivityOver; chkImageRect: emojiActivityActive; overImageRect: emojiActivityOver; chkOverImageRect: emojiActivityActive; - disImageRect: emojiActivity; + disImageRect: emojiActivityOver; chkDisImageRect: emojiActivityActive; } rbEmojiTravel: flatCheckbox(rbEmoji) { - imageRect: emojiTravel; + imageRect: emojiTravelOver; chkImageRect: emojiTravelActive; overImageRect: emojiTravelOver; chkOverImageRect: emojiTravelActive; - disImageRect: emojiTravel; + disImageRect: emojiTravelOver; chkDisImageRect: emojiTravelActive; } rbEmojiObjects: flatCheckbox(rbEmoji) { - imageRect: emojiObjects; + imageRect: emojiObjectsOver; chkImageRect: emojiObjectsActive; overImageRect: emojiObjectsOver; chkOverImageRect: emojiObjectsActive; - disImageRect: emojiObjects; + disImageRect: emojiObjectsOver; chkDisImageRect: emojiObjectsActive; } emojiPanPadding: 10px; diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 970c2ac11..103dffff5 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -325,7 +325,7 @@ enum { }; inline const QRegularExpression &cWordSplit() { - static QRegularExpression regexp(qsl("[\\s\\-\\+\\)\\(\\,\\.\\:\\!\\_\\;\\\"\\'\\x0]")); + static QRegularExpression regexp(qsl("[\\@\\s\\-\\+\\)\\(\\,\\.\\:\\!\\_\\;\\\"\\'\\x0]")); return regexp; } diff --git a/Telegram/SourceFiles/dropdown.cpp b/Telegram/SourceFiles/dropdown.cpp index eb83e4957..f1ed16f50 100644 --- a/Telegram/SourceFiles/dropdown.cpp +++ b/Telegram/SourceFiles/dropdown.cpp @@ -1794,11 +1794,11 @@ void EmojiPan::paintEvent(QPaintEvent *e) { const StickerIcon &s(_icons.at(i)); s.sticker->thumb->load(); QPixmap pix(s.sticker->thumb->pix(s.pixw, s.pixh)); - if (_iconSel == i) { - p.setOpacity(1); - } else { - p.setOpacity(1. * _iconHovers.at(i) + st::stickerIconOpacity * (1 - _iconHovers.at(i))); - } + //if (_iconSel == i) { + // p.setOpacity(1); + //} else { + // p.setOpacity(1. * _iconHovers.at(i) + st::stickerIconOpacity * (1 - _iconHovers.at(i))); + //} p.drawPixmapLeft(x + (st::rbEmoji.width - s.pixw) / 2, _iconsTop + (st::rbEmoji.height - s.pixh) / 2, width(), pix); x += st::rbEmoji.width; p.setOpacity(1); @@ -1939,6 +1939,7 @@ void EmojiPan::mouseReleaseEvent(QMouseEvent *e) { updateSelected(); if (wasDown == _iconOver && _iconOver >= 0) { + _iconSelX = anim::ivalue(_iconOver * st::rbEmoji.width, _iconOver * st::rbEmoji.width); s_inner.showStickerSet(_icons.at(_iconOver).setId); } } diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index c0515d56a..f29a15f08 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -726,7 +726,7 @@ void HistoryList::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { DocumentData *doc = sticker->document(); if (doc && doc->sticker && doc->sticker->set.type() != mtpc_inputStickerSetEmpty) { if (!_menu) _menu = new ContextMenu(this); - _menu->addAction(lang(lng_context_pack_info), historyWidget, SLOT(onStickerPackInfo())); + _menu->addAction(lang(doc->sticker->setInstalled() ? lng_context_pack_info : lng_context_pack_add), historyWidget, SLOT(onStickerPackInfo())); } } QString contextMenuText = item->selectedText(FullItemSel); diff --git a/Telegram/SourceFiles/structs.cpp b/Telegram/SourceFiles/structs.cpp index 56345676f..7b8de002c 100644 --- a/Telegram/SourceFiles/structs.cpp +++ b/Telegram/SourceFiles/structs.cpp @@ -502,6 +502,21 @@ void AudioCancelLink::onClick(Qt::MouseButton button) const { data->cancel(); } +bool StickerData::setInstalled() const { + switch (set.type()) { + case mtpc_inputStickerSetID: { + return (cStickerSets().constFind(set.c_inputStickerSetID().vid.v) != cStickerSets().cend()); + } break; + case mtpc_inputStickerSetShortName: { + QString name = qs(set.c_inputStickerSetShortName().vshort_name).toLower(); + for (StickerSets::const_iterator i = cStickerSets().cbegin(), e = cStickerSets().cend(); i != e; ++i) { + if (i->shortName.toLower() == name) return true; + } + } break; + } + return false; +} + AudioData::AudioData(const AudioId &id, const uint64 &access, int32 user, int32 date, const QString &mime, int32 duration, int32 dc, int32 size) : id(id), access(access), user(user), date(date), mime(mime), duration(duration), dc(dc), size(size), status(FileReady), uploadOffset(0), openOnSave(0), openOnSaveMsgId(0), loader(0) { location = Local::readFileLocation(mediaKey(AudioFileLocation, dc, id)); diff --git a/Telegram/SourceFiles/structs.h b/Telegram/SourceFiles/structs.h index f25d2d328..363c1af3c 100644 --- a/Telegram/SourceFiles/structs.h +++ b/Telegram/SourceFiles/structs.h @@ -440,6 +440,8 @@ struct StickerData { QString alt; MTPInputStickerSet set; + bool setInstalled() const; + StorageImageLocation loc; // doc thumb location }; From ea83f90e15ed2432ad53fb6d6b358ad14b80fb99 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sat, 20 Jun 2015 01:13:56 +0300 Subject: [PATCH 003/121] start button positioning fixed --- Telegram/SourceFiles/historywidget.cpp | 22 +++++++++++++--------- Telegram/SourceFiles/historywidget.h | 2 ++ 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index f29a15f08..3b155be68 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -2264,7 +2264,7 @@ void HistoryWidget::activate() { } } if (_list) { - if (_selCount || _recording || !_botStart.isHidden()) { + if (_selCount || _recording || isBotStart()) { _list->setFocus(); } else { _field.setFocus(); @@ -2829,8 +2829,7 @@ void HistoryWidget::updateControlsVisibility() { if (hist->readyForWork()) { if (!histPeer->chat || !histPeer->asChat()->forbidden) { checkMentionDropdown(); - bool botStart = !histPeer->chat && histPeer->asUser()->botInfo && (!histPeer->asUser()->botInfo->startToken.isEmpty() || (hist->isEmpty() && !hist->lastMsg)); - if (botStart) { + if (isBotStart()) { if (_botStart.isHidden()) { _botStart.clearState(); _botStart.show(); @@ -3462,7 +3461,7 @@ void HistoryWidget::animStop() { bool HistoryWidget::recordStep(float64 ms) { float64 dt = ms / st::btnSend.duration; bool res = true; - if (dt >= 1 || !_send.isHidden() || !_botStart.isHidden()) { + if (dt >= 1 || !_send.isHidden() || isBotStart()) { res = false; a_recordOver.finish(); a_recordDown.finish(); @@ -3768,6 +3767,11 @@ void HistoryWidget::updateDragAreas() { resizeEvent(0); } +bool HistoryWidget::isBotStart() const { + if (histPeer->chat || !histPeer->asUser()->botInfo) return false; + return !histPeer->asUser()->botInfo->startToken.isEmpty() || (hist->isEmpty() && !hist->lastMsg); +} + void HistoryWidget::dropEvent(QDropEvent *e) { _attachDrag = DragStateNone; updateDragAreas(); @@ -4431,7 +4435,9 @@ void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown, } int32 newScrollHeight = height(); - if (_botStart.isHidden()) { + if (isBotStart()) { + newScrollHeight -= _botStart.height(); + } else { if (hist->readyForWork() && (!histPeer->chat || !histPeer->asChat()->forbidden)) { newScrollHeight -= (_field.height() + 2 * st::sendPadding); } @@ -4441,8 +4447,6 @@ void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown, if (_kbShown) { newScrollHeight -= _kbScroll.height(); } - } else { - newScrollHeight -= _botStart.height(); } bool wasAtBottom = _scroll.scrollTop() + 1 > _scroll.scrollTopMax(), needResize = _scroll.width() != width() || _scroll.height() != newScrollHeight; if (needResize) { @@ -4544,7 +4548,7 @@ void HistoryWidget::updateBotKeyboard() { if (_keyboard.hasMarkup()) { if (_keyboard.singleUse() && _keyboard.forMsgId() == hist->lastKeyboardId && hist->lastKeyboardUsed) _kbWasHidden = true; - if (_botStart.isHidden() && (wasVisible || _replyTo || (_field.getLastText().isEmpty() && !_kbWasHidden))) { + if (!isBotStart() && (wasVisible || _replyTo || (_field.getLastText().isEmpty() && !_kbWasHidden))) { if (!_showAnim.animating()) { _kbScroll.show(); _attachEmoji.hide(); @@ -5043,7 +5047,7 @@ void HistoryWidget::updateTopBarSelection() { updateControlsVisibility(); updateListSize(); if (!App::wnd()->layerShown() && !App::passcoded()) { - if (_selCount || _recording || !_botStart.isHidden()) { + if (_selCount || _recording || isBotStart()) { _list->setFocus(); } else { _field.setFocus(); diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index 12a8d16ec..58868d4d6 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -613,6 +613,8 @@ private: MentionsDropdown _attachMention; + bool isBotStart() const; + FlatButton _send, _botStart; IconedButton _attachDocument, _attachPhoto, _attachEmoji, _kbShow, _kbHide; MessageField _field; From 0647bbba0e1033264fc7435172d6399361f40414 Mon Sep 17 00:00:00 2001 From: Severus Date: Sun, 21 Jun 2015 10:20:56 +0700 Subject: [PATCH 004/121] Add Ibus symbol to Qt5 inputmethod --- Telegram/SourceFiles/stdafx.cpp | 1 + Telegram/Telegram.pro | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Telegram/SourceFiles/stdafx.cpp b/Telegram/SourceFiles/stdafx.cpp index 2b0067974..79b7a48f8 100644 --- a/Telegram/SourceFiles/stdafx.cpp +++ b/Telegram/SourceFiles/stdafx.cpp @@ -35,5 +35,6 @@ Q_IMPORT_PLUGIN(QWbmpPlugin) Q_IMPORT_PLUGIN(QWebpPlugin) #elif defined Q_OS_LINUX Q_IMPORT_PLUGIN(QComposePlatformInputContextPlugin) +Q_IMPORT_PLUGIN(QIbusPlatformInputContextPlugin) Q_IMPORT_PLUGIN(QWebpPlugin) #endif diff --git a/Telegram/Telegram.pro b/Telegram/Telegram.pro index 8eabffcdc..5ee688029 100644 --- a/Telegram/Telegram.pro +++ b/Telegram/Telegram.pro @@ -303,7 +303,8 @@ INCLUDEPATH += "/usr/include/dee-1.0" INCLUDEPATH += "/usr/include/libdbusmenu-glib-0.4" LIBS += -lcrypto -lssl -lz -ldl -llzma -lexif -lopenal -lavformat -lavcodec -lswresample -lavutil -lopus -LIBS += ./../../../Libraries/QtStatic/qtbase/plugins/platforminputcontexts/libcomposeplatforminputcontextplugin.a +LIBS += ./../../../Libraries/QtStatic/qtbase/plugins/platforminputcontexts/libcomposeplatforminputcontextplugin.a \ + ./../../../Libraries/QtStatic/qtbase/plugins/platforminputcontexts/libibusplatforminputcontextplugin.a RESOURCES += \ ./SourceFiles/telegram.qrc \ From c113eafdc8af836d17e2775f4c859563be4ed6c8 Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 22 Jun 2015 11:49:55 +0300 Subject: [PATCH 005/121] langs updated --- Telegram/SourceFiles/langs/lang_de.strings | 1 + Telegram/SourceFiles/langs/lang_es.strings | 1 + Telegram/SourceFiles/langs/lang_it.strings | 1 + Telegram/SourceFiles/langs/lang_ko.strings | 1 + Telegram/SourceFiles/langs/lang_nl.strings | 1 + Telegram/SourceFiles/langs/lang_pt_BR.strings | 1 + 6 files changed, 6 insertions(+) diff --git a/Telegram/SourceFiles/langs/lang_de.strings b/Telegram/SourceFiles/langs/lang_de.strings index b659e74be..d6e0a71dd 100644 --- a/Telegram/SourceFiles/langs/lang_de.strings +++ b/Telegram/SourceFiles/langs/lang_de.strings @@ -508,6 +508,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_context_open_audio" = "Sprachnachricht öffnen"; "lng_context_save_audio" = "Sprachnachricht speichern unter.."; "lng_context_pack_info" = "Sticker-Paket"; +"lng_context_pack_add" = "Sticker hinzufügen"; "lng_context_open_file" = "Datei öffnen"; "lng_context_save_file" = "Datei speichern als.."; "lng_context_forward_file" = "Datei weiterleiten"; diff --git a/Telegram/SourceFiles/langs/lang_es.strings b/Telegram/SourceFiles/langs/lang_es.strings index f55238406..ede3fa516 100644 --- a/Telegram/SourceFiles/langs/lang_es.strings +++ b/Telegram/SourceFiles/langs/lang_es.strings @@ -508,6 +508,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_context_open_audio" = "Abrir audio"; "lng_context_save_audio" = "Guardar como..."; "lng_context_pack_info" = "Información del pack"; +"lng_context_pack_add" = "Añadir stickers"; "lng_context_open_file" = "Abrir archivo"; "lng_context_save_file" = "Guardar como..."; "lng_context_forward_file" = "Reenviar archivo"; diff --git a/Telegram/SourceFiles/langs/lang_it.strings b/Telegram/SourceFiles/langs/lang_it.strings index 1aaff7f38..777cd0609 100644 --- a/Telegram/SourceFiles/langs/lang_it.strings +++ b/Telegram/SourceFiles/langs/lang_it.strings @@ -508,6 +508,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_context_open_audio" = "Apri audio"; "lng_context_save_audio" = "Salva audio come.."; "lng_context_pack_info" = "Mostra sticker"; +"lng_context_pack_add" = "Aggiungi sticker"; "lng_context_open_file" = "Apri file"; "lng_context_save_file" = "Salva file come.."; "lng_context_forward_file" = "Inoltra file"; diff --git a/Telegram/SourceFiles/langs/lang_ko.strings b/Telegram/SourceFiles/langs/lang_ko.strings index 78c40a3c1..6bd0ccbd3 100644 --- a/Telegram/SourceFiles/langs/lang_ko.strings +++ b/Telegram/SourceFiles/langs/lang_ko.strings @@ -508,6 +508,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_context_open_audio" = "음성메시지 열기"; "lng_context_save_audio" = "음성메시지를 다른 이름으로 저장.."; "lng_context_pack_info" = "팩 정보"; +"lng_context_pack_add" = "스티커 추가"; "lng_context_open_file" = "파일 열기"; "lng_context_save_file" = "파일을 다른 이름으로 저장.."; "lng_context_forward_file" = "파일 전달"; diff --git a/Telegram/SourceFiles/langs/lang_nl.strings b/Telegram/SourceFiles/langs/lang_nl.strings index b56c5132e..2b9479b6f 100644 --- a/Telegram/SourceFiles/langs/lang_nl.strings +++ b/Telegram/SourceFiles/langs/lang_nl.strings @@ -508,6 +508,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_context_open_audio" = "Geluidsbestand openen"; "lng_context_save_audio" = "Geluidsbestand opslaan als"; "lng_context_pack_info" = "Bundelinformatie"; +"lng_context_pack_add" = "Stickers toevoegen"; "lng_context_open_file" = "Bestand openen"; "lng_context_save_file" = "Bestand opslaan als"; "lng_context_forward_file" = "Bestand doorsturen"; diff --git a/Telegram/SourceFiles/langs/lang_pt_BR.strings b/Telegram/SourceFiles/langs/lang_pt_BR.strings index 55ff771a6..29314e54a 100644 --- a/Telegram/SourceFiles/langs/lang_pt_BR.strings +++ b/Telegram/SourceFiles/langs/lang_pt_BR.strings @@ -508,6 +508,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_context_open_audio" = "Abrir Áudio"; "lng_context_save_audio" = "Salvar Áudio Como.."; "lng_context_pack_info" = "Informação do pacote"; +"lng_context_pack_add" = "Adicionar aos Stickers"; "lng_context_open_file" = "Abrir Arquivo"; "lng_context_save_file" = "Salvar Arquivo Como.."; "lng_context_forward_file" = "Encaminhar Arquivo"; From 607169cbda9fbe6f2c79413309306ee88854c6f1 Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 22 Jun 2015 11:51:39 +0300 Subject: [PATCH 006/121] version 0.8.29.dev with some more improvements --- Telegram/PrepareWin.bat | 8 +- Telegram/Resources/style.txt | 2 - Telegram/SourceFiles/app.cpp | 14 +- Telegram/SourceFiles/application.cpp | 2 +- Telegram/SourceFiles/config.h | 4 +- Telegram/SourceFiles/dropdown.cpp | 33 ++-- Telegram/SourceFiles/history.cpp | 81 +++++----- Telegram/SourceFiles/historywidget.cpp | 161 ++++++++++++------- Telegram/SourceFiles/historywidget.h | 6 +- Telegram/SourceFiles/mainwidget.cpp | 4 +- Telegram/SourceFiles/mtproto/mtpConnection.h | 2 + Telegram/SourceFiles/mtproto/mtpScheme.cpp | 27 +++- Telegram/SourceFiles/mtproto/mtpScheme.h | 110 +++++++++++-- Telegram/SourceFiles/mtproto/scheme.tl | 5 +- Telegram/SourceFiles/structs.cpp | 2 +- Telegram/SourceFiles/structs.h | 4 +- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 +- Telegram/Version.sh | 2 +- 20 files changed, 321 insertions(+), 160 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index 0ff3979ad..242dbf2d4 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,9 +1,9 @@ @echo OFF -set "AppVersion=8028" -set "AppVersionStrSmall=0.8.28" -set "AppVersionStr=0.8.28" -set "AppVersionStrFull=0.8.28.0" +set "AppVersion=8029" +set "AppVersionStrSmall=0.8.29" +set "AppVersionStr=0.8.29" +set "AppVersionStrFull=0.8.29.0" set "DevChannel=1" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index f4e0cf20d..4c0e021dd 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -1931,8 +1931,6 @@ mentionFg: #777; mentionFgOver: #707070; mentionFgActive: #0080c0; mentionFgOverActive: #0077b3; -botCommandFont: font(fsize semibold); -botDescFont: font(fsize italic); sessionsHeight: 440px; sessionHeight: 70px; diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index 935ba401a..119b295fd 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -1999,7 +1999,7 @@ namespace App { case mtpc_replyKeyboardMarkup: { const MTPDreplyKeyboardMarkup &d(markup.c_replyKeyboardMarkup()); data.flags = d.vflags.v; - + const QVector &v(d.vrows.c_vector().v); if (!v.isEmpty()) { commands.reserve(v.size()); @@ -2028,6 +2028,18 @@ namespace App { } } } break; + + case mtpc_replyKeyboardHide: { + const MTPDreplyKeyboardHide &d(markup.c_replyKeyboardHide()); + if (d.vflags.v) { + replyMarkups.insert(msgId, ReplyMarkup(d.vflags.v | MTPDreplyKeyboardMarkup_flag_ZERO)); + } + } break; + + case mtpc_replyKeyboardForceReply: { + const MTPDreplyKeyboardForceReply &d(markup.c_replyKeyboardForceReply()); + replyMarkups.insert(msgId, ReplyMarkup(d.vflags.v | MTPDreplyKeyboardMarkup_flag_FORCE_REPLY)); + } break; } } diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index d419a839e..113830001 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -640,7 +640,7 @@ void Application::checkMapVersion() { psRegisterCustomScheme(); if (Local::oldMapVersion()) { QString versionFeatures; - if (DevChannel && Local::oldMapVersion() < 8028) { + if (DevChannel && Local::oldMapVersion() < 8029) { versionFeatures = lang(lng_new_version_minor);// QString::fromUtf8("\xe2\x80\x94 IPv6 connections support\n\xe2\x80\x94 Bug fixes and minor stuff");// .replace('@', qsl("@") + QChar(0x200D)); } else if (!DevChannel && Local::oldMapVersion() < 8024) { versionFeatures = lng_new_version_text(lt_blog_link, qsl("https://telegram.org/blog/bot-revolution"));// lang(lng_new_version_text).trimmed(); diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 103dffff5..3205b6c56 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,8 +17,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8028; -static const wchar_t *AppVersionStr = L"0.8.28"; +static const int32 AppVersion = 8029; +static const wchar_t *AppVersionStr = L"0.8.29"; static const bool DevChannel = true; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; diff --git a/Telegram/SourceFiles/dropdown.cpp b/Telegram/SourceFiles/dropdown.cpp index f1ed16f50..edef4518a 100644 --- a/Telegram/SourceFiles/dropdown.cpp +++ b/Telegram/SourceFiles/dropdown.cpp @@ -2508,16 +2508,16 @@ void MentionsInner::paintEvent(QPaintEvent *e) { int32 addleft = 0, widthleft = htagwidth; QString first = (_parent->filter().size() < 2) ? QString() : ('/' + toHighlight.mid(0, _parent->filter().size() - 1)), second = (_parent->filter().size() < 2) ? ('/' + toHighlight) : toHighlight.mid(_parent->filter().size() - 1); - int32 firstwidth = st::botCommandFont->m.width(first), secondwidth = st::botCommandFont->m.width(second); + int32 firstwidth = st::mentionFont->m.width(first), secondwidth = st::mentionFont->m.width(second); if (htagwidth < firstwidth + secondwidth) { - if (htagwidth < firstwidth + st::botCommandFont->elidew) { - first = st::botCommandFont->m.elidedText(first + second, Qt::ElideRight, htagwidth); + if (htagwidth < firstwidth + st::mentionFont->elidew) { + first = st::mentionFont->m.elidedText(first + second, Qt::ElideRight, htagwidth); second = QString(); } else { - second = st::botCommandFont->m.elidedText(second, Qt::ElideRight, htagwidth - firstwidth); + second = st::mentionFont->m.elidedText(second, Qt::ElideRight, htagwidth - firstwidth); } } - p.setFont(st::botCommandFont->f); + p.setFont(st::mentionFont->f); if (!first.isEmpty()) { p.setPen((selected ? st::mentionFgOverActive : st::mentionFgActive)->p); p.drawText(htagleft, i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, first); @@ -2529,26 +2529,13 @@ void MentionsInner::paintEvent(QPaintEvent *e) { addleft += firstwidth + secondwidth + st::mentionPadding.left(); widthleft -= firstwidth + secondwidth + st::mentionPadding.left(); - QString params = command.params; - if (widthleft > st::mentionFont->elidew && !params.isEmpty()) { - p.setFont(st::mentionFont->f); - int32 paramswidth = st::mentionFont->m.width(params); - if (widthleft < paramswidth) { - params = st::mentionFont->m.elidedText(params, Qt::ElideRight, widthleft); - } - p.setPen((selected ? st::mentionFgOver : st::mentionFg)->p); - p.drawText(htagleft + addleft, i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, params); - - addleft += paramswidth + st::mentionPadding.left(); - widthleft -= paramswidth + st::mentionPadding.left(); - } QString description = command.description; - if (widthleft > st::botDescFont->elidew && !description.isEmpty()) { - p.setFont(st::botDescFont->f); - int32 descwidth = st::botDescFont->m.width(description); + if (widthleft > st::mentionFont->elidew && !description.isEmpty()) { + p.setFont(st::mentionFont->f); + int32 descwidth = st::mentionFont->m.width(description); if (widthleft < descwidth) { - description = st::botDescFont->m.elidedText(description, Qt::ElideRight, widthleft); - descwidth = st::botDescFont->m.width(description); + description = st::mentionFont->m.elidedText(description, Qt::ElideRight, widthleft); + descwidth = st::mentionFont->m.width(description); } p.setPen((selected ? st::mentionFgOver : st::mentionFg)->p); p.drawText(htagleft + addleft + (widthleft - descwidth), i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, description); diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 7210d0664..c12c7b341 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -821,24 +821,27 @@ HistoryItem *History::doAddToBack(HistoryBlock *to, bool newBlock, HistoryItem * } } if (adding->hasReplyMarkup()) { - if (peer->chat) { - peer->asChat()->markupSenders.insert(adding->from(), true); - } - if (App::replyMarkup(adding->id).flags & MTPDreplyKeyboardMarkup_flag_ZERO) { // zero markup means replyKeyboardHide - if (lastKeyboardFrom == adding->from()->id || (!lastKeyboardInited && !peer->chat && !adding->out())) { + int32 markupFlags = App::replyMarkup(adding->id).flags; + if (!(markupFlags & MTPDreplyKeyboardMarkup_flag_personal) || adding->notifyByFrom()) { + if (peer->chat) { + peer->asChat()->markupSenders.insert(adding->from(), true); + } + if (markupFlags & MTPDreplyKeyboardMarkup_flag_ZERO) { // zero markup means replyKeyboardHide + if (lastKeyboardFrom == adding->from()->id || (!lastKeyboardInited && !peer->chat && !adding->out())) { + lastKeyboardInited = true; + lastKeyboardId = 0; + lastKeyboardFrom = 0; + } + } else if (peer->chat && (peer->asChat()->count < 1 || !peer->asChat()->participants.isEmpty()) && !peer->asChat()->participants.contains(adding->from())) { lastKeyboardInited = true; lastKeyboardId = 0; lastKeyboardFrom = 0; + } else { + lastKeyboardInited = true; + lastKeyboardId = adding->id; + lastKeyboardFrom = adding->from()->id; + lastKeyboardUsed = false; } - } else if (peer->chat && (peer->asChat()->count < 1 || !peer->asChat()->participants.isEmpty()) && !peer->asChat()->participants.contains(adding->from())) { - lastKeyboardInited = true; - lastKeyboardId = 0; - lastKeyboardFrom = 0; - } else { - lastKeyboardInited = true; - lastKeyboardId = adding->id; - lastKeyboardFrom = adding->from()->id; - lastKeyboardUsed = false; } } } @@ -949,34 +952,40 @@ void History::addToFront(const QVector &slice) { lastAuthors->push_back(item->from()); } if (!lastKeyboardInited && item->hasReplyMarkup() && !item->out()) { // chats with bots - bool wasKeyboardHide = peer->asChat()->markupSenders.contains(item->from()); - if (!wasKeyboardHide) { - peer->asChat()->markupSenders.insert(item->from(), true); - } - if (!(App::replyMarkup(item->id).flags & MTPDreplyKeyboardMarkup_flag_ZERO)) { - if (!lastKeyboardInited) { - lastKeyboardInited = true; - if (wasKeyboardHide || ((peer->asChat()->count < 1 || !peer->asChat()->participants.isEmpty()) && !peer->asChat()->participants.contains(item->from()))) { - lastKeyboardId = 0; - lastKeyboardFrom = 0; - } else { - lastKeyboardId = item->id; - lastKeyboardFrom = item->from()->id; - lastKeyboardUsed = false; + int32 markupFlags = App::replyMarkup(item->id).flags; + if (!(markupFlags & MTPDreplyKeyboardMarkup_flag_personal) || item->notifyByFrom()) { + bool wasKeyboardHide = peer->asChat()->markupSenders.contains(item->from()); + if (!wasKeyboardHide) { + peer->asChat()->markupSenders.insert(item->from(), true); + } + if (!(markupFlags & MTPDreplyKeyboardMarkup_flag_ZERO)) { + if (!lastKeyboardInited) { + lastKeyboardInited = true; + if (wasKeyboardHide || ((peer->asChat()->count < 1 || !peer->asChat()->participants.isEmpty()) && !peer->asChat()->participants.contains(item->from()))) { + lastKeyboardId = 0; + lastKeyboardFrom = 0; + } else { + lastKeyboardId = item->id; + lastKeyboardFrom = item->from()->id; + lastKeyboardUsed = false; + } } } } } } else if (!lastKeyboardInited && item->hasReplyMarkup() && !item->out()) { // conversations with bots - lastKeyboardInited = true; - if (App::replyMarkup(item->id).flags & MTPDreplyKeyboardMarkup_flag_ZERO) { - lastKeyboardId = 0; - lastKeyboardFrom = 0; - } else { + int32 markupFlags = App::replyMarkup(item->id).flags; + if (!(markupFlags & MTPDreplyKeyboardMarkup_flag_personal) || item->notifyByFrom()) { lastKeyboardInited = true; - lastKeyboardId = item->id; - lastKeyboardFrom = item->from()->id; - lastKeyboardUsed = false; + if (markupFlags & MTPDreplyKeyboardMarkup_flag_ZERO) { + lastKeyboardId = 0; + lastKeyboardFrom = 0; + } else { + lastKeyboardInited = true; + lastKeyboardId = item->id; + lastKeyboardFrom = item->from()->id; + lastKeyboardUsed = false; + } } } } diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 3b155be68..8515732fa 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -1449,7 +1449,7 @@ void MessageField::focusInEvent(QFocusEvent *e) { emit focused(); } -BotKeyboard::BotKeyboard() : _wasForMsgId(0), _height(0), _maxOuterHeight(0), _maximizeSize(false), _singleUse(false), +BotKeyboard::BotKeyboard() : _wasForMsgId(0), _height(0), _maxOuterHeight(0), _maximizeSize(false), _singleUse(false), _forceReply(false), _sel(-1), _down(-1), _hoverAnim(animFunc(this, &BotKeyboard::hoverStep)), _st(&st::botKbButton) { setGeometry(0, 0, _st->margin, _st->margin); _height = _st->margin; @@ -1579,6 +1579,7 @@ bool BotKeyboard::updateMarkup(HistoryItem *to) { clearSelection(); _btns.clear(); const ReplyMarkup &markup(App::replyMarkup(to->id)); + _forceReply = markup.flags | MTPDreplyKeyboardMarkup_flag_FORCE_REPLY; _maximizeSize = !(markup.flags & MTPDreplyKeyboardMarkup_flag_resize); _singleUse = markup.flags & MTPDreplyKeyboardMarkup_flag_single_use; @@ -1609,7 +1610,7 @@ bool BotKeyboard::updateMarkup(HistoryItem *to) { return true; } if (_wasForMsgId) { - _maximizeSize = _singleUse = false; + _maximizeSize = _singleUse = _forceReply = false; _wasForMsgId = 0; clearSelection(); _btns.clear(); @@ -1622,6 +1623,10 @@ bool BotKeyboard::hasMarkup() const { return !_btns.isEmpty(); } +bool BotKeyboard::forceReply() const { + return _forceReply; +} + bool BotKeyboard::hoverStep(float64 ms) { uint64 now = getms(); for (Animations::iterator i = _animations.begin(); i != _animations.end();) { @@ -2279,8 +2284,8 @@ void HistoryWidget::onRecordError() { void HistoryWidget::onRecordDone(QByteArray result, qint32 samples) { App::wnd()->activateWindow(); int32 duration = samples / AudioVoiceMsgFrequency; - imageLoader.append(result, duration, histPeer->id, _replyToId, ToPrepareAudio); - cancelReply(); + imageLoader.append(result, duration, histPeer->id, replyToId(), ToPrepareAudio); + cancelReply(lastForceReplyReplied()); } void HistoryWidget::onRecordUpdate(qint16 level, qint32 samples) { @@ -2562,7 +2567,7 @@ bool HistoryWidget::kbWasHidden() { } void HistoryWidget::setKbWasHidden() { - if (_kbWasHidden || !_keyboard.hasMarkup()) return; + if (_kbWasHidden || (!_keyboard.hasMarkup() && !_keyboard.forceReply())) return; _kbWasHidden = true; if (!_showAnim.animating()) { @@ -2876,11 +2881,16 @@ void HistoryWidget::updateControlsVisibility() { _attachEmoji.hide(); _kbHide.show(); _kbShow.hide(); + } else if (_kbReplyTo) { + _kbScroll.hide(); + _attachEmoji.show(); + _kbHide.hide(); + _kbShow.hide(); } else { _kbScroll.hide(); _attachEmoji.show(); _kbHide.hide(); - if (_keyboard.hasMarkup()) { + if (_keyboard.hasMarkup() || _keyboard.forceReply()) { _kbShow.show(); } else { _kbShow.hide(); @@ -3275,6 +3285,7 @@ void HistoryWidget::onHistoryToEnd() { void HistoryWidget::onSend(bool ctrlShiftEnter, MsgId replyTo) { if (!hist) return; + bool lastKeyboardUsed = lastForceReplyReplied(replyTo); QString text = prepareMessage(_field.getLastText()); if (!text.isEmpty()) { App::main()->readServerHistory(hist, false); @@ -3297,7 +3308,7 @@ void HistoryWidget::onSend(bool ctrlShiftEnter, MsgId replyTo) { App::main()->finishForwarding(hist); } - if (replyTo < 0) cancelReply(); + if (replyTo < 0) cancelReply(lastKeyboardUsed); if (_previewData && _previewData->pendingTill) previewCancel(); _field.setFocus(); } @@ -3315,13 +3326,13 @@ void HistoryWidget::onBotStart() { MTP::send(MTPmessages_StartBot(histPeer->asUser()->inputUser, MTP_int(0), MTP_long(randomId), MTP_string(token)), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), App::main()->rpcFail(&MainWidget::addParticipantFail, histPeer->asUser())); histPeer->asUser()->botInfo->startToken = QString(); - if (_keyboard.hasMarkup()) { + if (_keyboard.hasMarkup() || _keyboard.forceReply()) { if (_keyboard.singleUse() && _keyboard.forMsgId() == hist->lastKeyboardId && hist->lastKeyboardUsed) _kbWasHidden = true; - if (!_kbWasHidden) _kbShown = true; + if (!_kbWasHidden) _kbShown = _keyboard.hasMarkup(); } - updateControlsVisibility(); - resizeEvent(0); } + updateControlsVisibility(); + resizeEvent(0); } void HistoryWidget::onShareContact(const PeerId &peer, UserData *contact) { @@ -3330,7 +3341,7 @@ void HistoryWidget::onShareContact(const PeerId &peer, UserData *contact) { App::main()->showPeer(peer, 0, false, true); if (!hist) return; - shareContact(peer, contact->phone, contact->firstName, contact->lastName, _replyToId, int32(contact->id & 0xFFFFFFFF)); + shareContact(peer, contact->phone, contact->firstName, contact->lastName, replyToId(), int32(contact->id & 0xFFFFFFFF)); } void HistoryWidget::shareContact(const PeerId &peer, const QString &phone, const QString &fname, const QString &lname, MsgId replyTo, int32 userId) { @@ -3345,18 +3356,20 @@ void HistoryWidget::shareContact(const PeerId &peer, const QString &phone, const PeerData *p = App::peer(peer); int32 flags = newMessageFlags(p); // unread, out + bool lastKeyboardUsed = lastForceReplyReplied(replyTo); + int32 sendFlags = 0; if (replyTo) { flags |= MTPDmessage::flag_reply_to_msg_id; sendFlags |= MTPmessages_SendMedia::flag_reply_to_msg_id; } - h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(peer), MTPint(), MTPint(), MTP_int(_replyToId), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaContact(MTP_string(phone), MTP_string(fname), MTP_string(lname), MTP_int(userId)), MTPnullMarkup)); + h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(peer), MTPint(), MTPint(), MTP_int(replyToId()), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaContact(MTP_string(phone), MTP_string(fname), MTP_string(lname), MTP_int(userId)), MTPnullMarkup)); h->sendRequestId = MTP::send(MTPmessages_SendMedia(MTP_int(sendFlags), p->input, MTP_int(replyTo), MTP_inputMediaContact(MTP_string(phone), MTP_string(fname), MTP_string(lname)), MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), RPCFailHandlerPtr(), 0, 0, hist->sendRequestId); App::historyRegRandom(randomId, newId); App::main()->finishForwarding(h); - cancelReply(); + cancelReply(lastKeyboardUsed); } void HistoryWidget::onSendPaths(const PeerId &peer) { @@ -3580,7 +3593,7 @@ void HistoryWidget::mouseMoveEvent(QMouseEvent *e) { QPoint pos(e ? e->pos() : mapFromGlobal(QCursor::pos())); bool inRecord = _send.geometry().contains(pos); bool inField = pos.y() >= (_scroll.y() + _scroll.height()) && pos.y() < height() && pos.x() >= 0 && pos.x() < width(); - bool inReply = QRect(st::replySkip, _field.y() - st::sendPadding - st::replyHeight, width() - st::replySkip - _replyForwardPreviewCancel.width(), st::replyHeight).contains(pos) && (_replyToId || _kbReplyTo); + bool inReply = QRect(st::replySkip, _field.y() - st::sendPadding - st::replyHeight, width() - st::replySkip - _replyForwardPreviewCancel.width(), st::replyHeight).contains(pos) && replyToId(); bool startAnim = false; if (inRecord != _inRecord) { _inRecord = inRecord; @@ -3646,6 +3659,8 @@ void HistoryWidget::sendBotCommand(const QString &cmd, MsgId replyTo) { // reply App::main()->readServerHistory(hist, false); hist->loadAround(0); + bool lastKeyboardUsed = (_keyboard.forMsgId() == hist->lastKeyboardId) && (_keyboard.forMsgId() == replyTo); + QString toSend = cmd; UserData *bot = histPeer->chat ? (App::hoveredLinkItem() ? (App::hoveredLinkItem()->toHistoryForwarded() ? App::hoveredLinkItem()->toHistoryForwarded()->fromForwarded() : App::hoveredLinkItem()->from()) : 0) : histPeer->asUser(); QString username = (bot && bot->botInfo) ? bot->username : QString(); @@ -3657,7 +3672,7 @@ void HistoryWidget::sendBotCommand(const QString &cmd, MsgId replyTo) { // reply App::main()->sendPreparedText(hist, toSend, replyTo ? ((histPeer->chat/* && (botStatus == 0 || botStatus == 2)*/) ? replyTo : -1) : 0); if (replyTo) { cancelReply(); - if (_keyboard.hasMarkup() && _keyboard.singleUse() && _keyboard.forMsgId() == replyTo) { + if (_keyboard.singleUse() && _keyboard.hasMarkup() && lastKeyboardUsed) { if (_kbShown) onKbToggle(false); hist->lastKeyboardUsed = true; } @@ -3788,7 +3803,7 @@ void HistoryWidget::onDocumentDrop(QDropEvent *e) { } void HistoryWidget::onKbToggle(bool manual) { - if (_kbShown) { + if (_kbShown || _kbReplyTo) { _kbHide.hide(); _kbShow.show(); _kbScroll.hide(); @@ -3801,6 +3816,21 @@ void HistoryWidget::onKbToggle(bool manual) { _replyForwardPreviewCancel.hide(); } if (manual) _kbWasHidden = true; + } else if (!_keyboard.hasMarkup() && _keyboard.forceReply()) { + _kbHide.hide(); + _kbShow.hide(); + _kbScroll.hide(); + _kbShown = false; + + _field.setMaxHeight(st::maxFieldHeight); + + _kbReplyTo = hist->peer->chat ? App::histItemById(_keyboard.forMsgId()) : 0; + if (_kbReplyTo && !_replyToId) { + updateReplyToName(); + _replyToText.setText(st::msgFont, _kbReplyTo->inDialogsText(), _textDlgOptions); + _replyForwardPreviewCancel.show(); + } + if (manual) _kbWasHidden = false; } else { _kbHide.show(); _kbShow.hide(); @@ -4038,7 +4068,7 @@ void HistoryWidget::uploadImage(const QImage &img, bool withText, const QString confirmImage = img; confirmWithText = withText; confirmSource = source; - confirmImageId = imageLoader.append(img, histPeer->id, _replyToId, ToPreparePhoto); + confirmImageId = imageLoader.append(img, histPeer->id, replyToId(), ToPreparePhoto); } void HistoryWidget::uploadFile(const QString &file, bool withText) { @@ -4046,7 +4076,7 @@ void HistoryWidget::uploadFile(const QString &file, bool withText) { App::wnd()->activateWindow(); confirmWithText = withText; - confirmImageId = imageLoader.append(file, histPeer->id, _replyToId, ToPrepareDocument); + confirmImageId = imageLoader.append(file, histPeer->id, replyToId(), ToPrepareDocument); } void HistoryWidget::shareContactConfirmation(const QString &phone, const QString &fname, const QString &lname, MsgId replyTo, bool withText) { @@ -4066,27 +4096,28 @@ void HistoryWidget::uploadConfirmImageUncompressed(bool ctrlShiftEnter, MsgId re if (confirmWithText) { onSend(ctrlShiftEnter, replyTo); } + bool lastKeyboardUsed = lastForceReplyReplied(replyTo); imageLoader.append(confirmImage, peerId, replyTo, ToPrepareDocument, ctrlShiftEnter); confirmImageId = 0; confirmWithText = false; confirmImage = QImage(); - cancelReply(); + cancelReply(lastKeyboardUsed); } void HistoryWidget::uploadMedias(const QStringList &files, ToPrepareMediaType type) { if (!hist) return; App::wnd()->activateWindow(); - imageLoader.append(files, histPeer->id, _replyToId, type); - cancelReply(); + imageLoader.append(files, histPeer->id, replyToId(), type); + cancelReply(lastForceReplyReplied()); } void HistoryWidget::uploadMedia(const QByteArray &fileContent, ToPrepareMediaType type, PeerId peer) { if (!peer && !hist) return; App::wnd()->activateWindow(); - imageLoader.append(fileContent, peer ? peer : histPeer->id, _replyToId, type); - cancelReply(); + imageLoader.append(fileContent, peer ? peer : histPeer->id, replyToId(), type); + cancelReply(lastForceReplyReplied()); } void HistoryWidget::onPhotoReady() { @@ -4360,7 +4391,7 @@ void HistoryWidget::resizeEvent(QResizeEvent *e) { _replyForwardPreviewCancel.move(width() - _replyForwardPreviewCancel.width(), _field.y() - st::sendPadding - _replyForwardPreviewCancel.height()); updateListSize(); - _field.resize(width() - _send.width() - _attachDocument.width() - _attachEmoji.width() - ((_kbShown || !_keyboard.hasMarkup()) ? 0 : _kbShow.width()), _field.height()); + _field.resize(width() - _send.width() - _attachDocument.width() - _attachEmoji.width() - ((_kbShown || (!_keyboard.hasMarkup() && !_keyboard.forceReply())) ? 0 : _kbShow.width()), _field.height()); _toHistoryEnd.move((width() - _toHistoryEnd.width()) / 2, _scroll.y() + _scroll.height() - _toHistoryEnd.height() - st::historyToEndSkip); @@ -4418,7 +4449,7 @@ void HistoryWidget::updateScrollColors() { } MsgId HistoryWidget::replyToId() const { - return _replyToId; + return _replyToId ? _replyToId : (_kbReplyTo ? _kbReplyTo->id : 0); } void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown, HistoryItem *resizedItem, bool scrollToIt) { @@ -4441,7 +4472,7 @@ void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown, if (hist->readyForWork() && (!histPeer->chat || !histPeer->asChat()->forbidden)) { newScrollHeight -= (_field.height() + 2 * st::sendPadding); } - if (_replyToId || _kbReplyTo || App::main()->hasForwardingItems() || (_previewData && _previewData->pendingTill >= 0)) { + if (replyToId() || App::main()->hasForwardingItems() || (_previewData && _previewData->pendingTill >= 0)) { newScrollHeight -= st::replyHeight; } if (_kbShown) { @@ -4536,7 +4567,7 @@ void HistoryWidget::addMessagesToBack(const QVector &messages) { void HistoryWidget::updateBotKeyboard() { bool changed = false; - bool wasVisible = _kbShown; + bool wasVisible = _kbShown || _kbReplyTo; if ((_replyToId && !_replyTo) || !hist) { changed = _keyboard.updateMarkup(0); } else if (_replyTo) { @@ -4546,18 +4577,25 @@ void HistoryWidget::updateBotKeyboard() { } if (!changed) return; - if (_keyboard.hasMarkup()) { + bool hasMarkup = _keyboard.hasMarkup(), forceReply = _keyboard.forceReply() && !_replyTo; + if (hasMarkup || forceReply) { if (_keyboard.singleUse() && _keyboard.forMsgId() == hist->lastKeyboardId && hist->lastKeyboardUsed) _kbWasHidden = true; if (!isBotStart() && (wasVisible || _replyTo || (_field.getLastText().isEmpty() && !_kbWasHidden))) { if (!_showAnim.animating()) { - _kbScroll.show(); - _attachEmoji.hide(); - _kbHide.show(); + if (hasMarkup) { + _kbScroll.show(); + _attachEmoji.hide(); + _kbHide.show(); + } else { + _kbScroll.hide(); + _attachEmoji.show(); + _kbHide.hide(); + } _kbShow.hide(); } - int32 maxh = qMin(_keyboard.height(), int(st::maxFieldHeight) - (int(st::maxFieldHeight) / 2)); + int32 maxh = hasMarkup ? qMin(_keyboard.height(), int(st::maxFieldHeight) - (int(st::maxFieldHeight) / 2)) : 0; _field.setMaxHeight(st::maxFieldHeight - maxh); - _kbShown = true; + _kbShown = hasMarkup; _kbReplyTo = hist->peer->chat ? App::histItemById(_keyboard.forMsgId()) : 0; if (_kbReplyTo && !_replyToId) { updateReplyToName(); @@ -4622,7 +4660,7 @@ void HistoryWidget::mousePressEvent(QMouseEvent *e) { a_recordOver.restart(); _recordAnim.start(); } else if (_inReply) { - App::main()->showPeer(histPeer->id, _replyToId ? _replyToId : _kbReplyTo->id); + App::main()->showPeer(histPeer->id, replyToId()); } } @@ -4693,18 +4731,20 @@ void HistoryWidget::onStickerSend(DocumentData *sticker) { hist->loadAround(0); + bool lastKeyboardUsed = lastForceReplyReplied(); + bool out = (histPeer->input.type() != mtpc_inputPeerSelf), unread = (histPeer->input.type() != mtpc_inputPeerSelf); int32 flags = newMessageFlags(histPeer); // unread, out int32 sendFlags = 0; - if (_replyToId) { + if (replyToId()) { flags |= MTPDmessage::flag_reply_to_msg_id; sendFlags |= MTPmessages_SendMedia::flag_reply_to_msg_id; } - hist->addToBackDocument(newId, flags, _replyToId, date(MTP_int(unixtime())), MTP::authedId(), sticker); + hist->addToBackDocument(newId, flags, replyToId(), date(MTP_int(unixtime())), MTP::authedId(), sticker); - hist->sendRequestId = MTP::send(MTPmessages_SendMedia(MTP_int(sendFlags), histPeer->input, MTP_int(_replyToId), MTP_inputMediaDocument(MTP_inputDocument(MTP_long(sticker->id), MTP_long(sticker->access))), MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), RPCFailHandlerPtr(), 0, 0, hist->sendRequestId); + hist->sendRequestId = MTP::send(MTPmessages_SendMedia(MTP_int(sendFlags), histPeer->input, MTP_int(replyToId()), MTP_inputMediaDocument(MTP_inputDocument(MTP_long(sticker->id), MTP_long(sticker->access))), MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), RPCFailHandlerPtr(), 0, 0, hist->sendRequestId); App::main()->finishForwarding(hist); - cancelReply(); + cancelReply(lastKeyboardUsed); if (sticker->sticker) App::main()->incrementSticker(sticker); @@ -4759,23 +4799,32 @@ void HistoryWidget::onReplyToMessage() { _field.setFocus(); } -void HistoryWidget::cancelReply() { - if (!_replyToId) return; - _replyTo = 0; - _replyToId = 0; - mouseMoveEvent(0); - if (!App::main()->hasForwardingItems() && (!_previewData || _previewData->pendingTill < 0) && !_kbReplyTo) { - _replyForwardPreviewCancel.hide(); +bool HistoryWidget::lastForceReplyReplied(MsgId replyTo) const { + return _keyboard.forceReply() && _keyboard.forMsgId() == hist->lastKeyboardId && _keyboard.forMsgId() == (replyTo < 0 ? replyToId() : replyTo); +} + +void HistoryWidget::cancelReply(bool lastKeyboardUsed) { + if (_replyToId) { + _replyTo = 0; + _replyToId = 0; + mouseMoveEvent(0); + if (!App::main()->hasForwardingItems() && (!_previewData || _previewData->pendingTill < 0) && !_kbReplyTo) { + _replyForwardPreviewCancel.hide(); + } + + updateBotKeyboard(); + + resizeEvent(0); + update(); + + _saveDraftText = true; + _saveDraftStart = getms(); + onDraftSave(); + } + if (_keyboard.singleUse() && _keyboard.forceReply() && lastKeyboardUsed) { + if (_kbReplyTo) onKbToggle(false); + hist->lastKeyboardUsed = true; } - - updateBotKeyboard(); - - resizeEvent(0); - update(); - - _saveDraftText = true; - _saveDraftStart = getms(); - onDraftSave(); } void HistoryWidget::cancelForwarding() { @@ -4912,7 +4961,7 @@ void HistoryWidget::updatePreview() { _previewTitle.setText(st::msgServiceNameFont, title, _textNameOptions); _previewDescription.setText(st::msgFont, desc, _textDlgOptions); } - } else if (!App::main()->hasForwardingItems() && !_replyToId && !_kbReplyTo) { + } else if (!App::main()->hasForwardingItems() && !replyToId()) { _replyForwardPreviewCancel.hide(); } resizeEvent(0); diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index 58868d4d6..2725941c1 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -214,6 +214,7 @@ public: bool updateMarkup(HistoryItem *last); bool hasMarkup() const; + bool forceReply() const; bool hoverStep(float64 ms); void resizeToWidth(int32 width, int32 maxOuterHeight); @@ -237,7 +238,7 @@ private: MsgId _wasForMsgId; int32 _height, _maxOuterHeight; - bool _maximizeSize, _singleUse; + bool _maximizeSize, _singleUse, _forceReply; QTimer _cmdTipTimer; QPoint _lastMousePos; @@ -430,7 +431,8 @@ public: MsgId replyToId() const; void updateReplyTo(bool force = false); - void cancelReply(); + bool lastForceReplyReplied(MsgId replyTo = -1) const; + void cancelReply(bool lastKeyboardUsed = false); void updateForwarding(bool force = false); void cancelForwarding(); // called by MainWidget diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index c891aff76..a0a4e3acf 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -1567,13 +1567,13 @@ void MainWidget::confirmShareContact(bool ctrlShiftEnter, const QString &phone, } void MainWidget::confirmSendImage(const ReadyLocalMedia &img) { + bool lastKeyboardUsed = history.lastForceReplyReplied(img.replyTo); history.confirmSendImage(img); - history.cancelReply(); + history.cancelReply(lastKeyboardUsed); } void MainWidget::confirmSendImageUncompressed(bool ctrlShiftEnter, MsgId replyTo) { history.uploadConfirmImageUncompressed(ctrlShiftEnter, replyTo); - history.cancelReply(); } void MainWidget::cancelSendImage() { diff --git a/Telegram/SourceFiles/mtproto/mtpConnection.h b/Telegram/SourceFiles/mtproto/mtpConnection.h index fc29b511f..ac41f9f73 100644 --- a/Telegram/SourceFiles/mtproto/mtpConnection.h +++ b/Telegram/SourceFiles/mtproto/mtpConnection.h @@ -41,6 +41,8 @@ enum { MTPDreplyKeyboardMarkup_flag_resize = (1 << 0), MTPDreplyKeyboardMarkup_flag_single_use = (1 << 1), + MTPDreplyKeyboardMarkup_flag_personal = (1 << 2), + MTPDreplyKeyboardMarkup_flag_FORCE_REPLY = (1 << 30), // client side flag for forceReply MTPDreplyKeyboardMarkup_flag_ZERO = (1 << 31) // client side flag for zeroMarkup }; diff --git a/Telegram/SourceFiles/mtproto/mtpScheme.cpp b/Telegram/SourceFiles/mtproto/mtpScheme.cpp index 74e7e58c8..2ff60009d 100644 --- a/Telegram/SourceFiles/mtproto/mtpScheme.cpp +++ b/Telegram/SourceFiles/mtproto/mtpScheme.cpp @@ -4294,8 +4294,7 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } switch (stage) { case 0: to.add(" command: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" params: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" description: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" description: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; @@ -4348,7 +4347,29 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP break; case mtpc_replyKeyboardHide: - to.add("{ replyKeyboardHide }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ replyKeyboardHide"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" flags: "); ++stages.back(); if (start >= end) throw Exception("start >= end in flags"); else flags.back() = *start; types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + + case mtpc_replyKeyboardForceReply: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ replyKeyboardForceReply"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" flags: "); ++stages.back(); if (start >= end) throw Exception("start >= end in flags"); else flags.back() = *start; types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } break; case mtpc_replyKeyboardMarkup: diff --git a/Telegram/SourceFiles/mtproto/mtpScheme.h b/Telegram/SourceFiles/mtproto/mtpScheme.h index 5ad499233..2acf51b10 100644 --- a/Telegram/SourceFiles/mtproto/mtpScheme.h +++ b/Telegram/SourceFiles/mtproto/mtpScheme.h @@ -380,12 +380,13 @@ enum { mtpc_stickerSet = 0xa7a43b17, mtpc_messages_stickerSet = 0xb60a24a6, mtpc_user = 0x22e49072, - mtpc_botCommand = 0xb79d22ab, + mtpc_botCommand = 0xc27ac8c7, mtpc_botInfoEmpty = 0xbb2e37ce, mtpc_botInfo = 0x9cf585d, mtpc_keyboardButton = 0xa2fa4880, mtpc_keyboardButtonRow = 0x77608b83, - mtpc_replyKeyboardHide = 0xced6ebbc, + mtpc_replyKeyboardHide = 0xa03e5b85, + mtpc_replyKeyboardForceReply = 0xf4108aa0, mtpc_replyKeyboardMarkup = 0x3502758c, mtpc_invokeAfterMsg = 0xcb9f372d, mtpc_invokeAfterMsgs = 0x3dc4b4f0, @@ -1078,6 +1079,8 @@ class MTPkeyboardButtonRow; class MTPDkeyboardButtonRow; class MTPreplyMarkup; +class MTPDreplyKeyboardHide; +class MTPDreplyKeyboardForceReply; class MTPDreplyKeyboardMarkup; @@ -7878,7 +7881,7 @@ public: private: explicit MTPbotCommand(MTPDbotCommand *_data); - friend MTPbotCommand MTP_botCommand(const MTPstring &_command, const MTPstring &_params, const MTPstring &_description); + friend MTPbotCommand MTP_botCommand(const MTPstring &_command, const MTPstring &_description); }; typedef MTPBoxed MTPBotCommand; @@ -7990,6 +7993,30 @@ public: read(from, end, cons); } + MTPDreplyKeyboardHide &_replyKeyboardHide() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_replyKeyboardHide) throw mtpErrorWrongTypeId(_type, mtpc_replyKeyboardHide); + split(); + return *(MTPDreplyKeyboardHide*)data; + } + const MTPDreplyKeyboardHide &c_replyKeyboardHide() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_replyKeyboardHide) throw mtpErrorWrongTypeId(_type, mtpc_replyKeyboardHide); + return *(const MTPDreplyKeyboardHide*)data; + } + + MTPDreplyKeyboardForceReply &_replyKeyboardForceReply() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_replyKeyboardForceReply) throw mtpErrorWrongTypeId(_type, mtpc_replyKeyboardForceReply); + split(); + return *(MTPDreplyKeyboardForceReply*)data; + } + const MTPDreplyKeyboardForceReply &c_replyKeyboardForceReply() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_replyKeyboardForceReply) throw mtpErrorWrongTypeId(_type, mtpc_replyKeyboardForceReply); + return *(const MTPDreplyKeyboardForceReply*)data; + } + MTPDreplyKeyboardMarkup &_replyKeyboardMarkup() { if (!data) throw mtpErrorUninitialized(); if (_type != mtpc_replyKeyboardMarkup) throw mtpErrorWrongTypeId(_type, mtpc_replyKeyboardMarkup); @@ -8011,9 +8038,12 @@ public: private: explicit MTPreplyMarkup(mtpTypeId type); + explicit MTPreplyMarkup(MTPDreplyKeyboardHide *_data); + explicit MTPreplyMarkup(MTPDreplyKeyboardForceReply *_data); explicit MTPreplyMarkup(MTPDreplyKeyboardMarkup *_data); - friend MTPreplyMarkup MTP_replyKeyboardHide(); + friend MTPreplyMarkup MTP_replyKeyboardHide(MTPint _flags); + friend MTPreplyMarkup MTP_replyKeyboardForceReply(MTPint _flags); friend MTPreplyMarkup MTP_replyKeyboardMarkup(MTPint _flags, const MTPVector &_rows); mtpTypeId _type; @@ -11224,11 +11254,10 @@ class MTPDbotCommand : public mtpDataImpl { public: MTPDbotCommand() { } - MTPDbotCommand(const MTPstring &_command, const MTPstring &_params, const MTPstring &_description) : vcommand(_command), vparams(_params), vdescription(_description) { + MTPDbotCommand(const MTPstring &_command, const MTPstring &_description) : vcommand(_command), vdescription(_description) { } MTPstring vcommand; - MTPstring vparams; MTPstring vdescription; }; @@ -11266,6 +11295,26 @@ public: MTPVector vbuttons; }; +class MTPDreplyKeyboardHide : public mtpDataImpl { +public: + MTPDreplyKeyboardHide() { + } + MTPDreplyKeyboardHide(MTPint _flags) : vflags(_flags) { + } + + MTPint vflags; +}; + +class MTPDreplyKeyboardForceReply : public mtpDataImpl { +public: + MTPDreplyKeyboardForceReply() { + } + MTPDreplyKeyboardForceReply(MTPint _flags) : vflags(_flags) { + } + + MTPint vflags; +}; + class MTPDreplyKeyboardMarkup : public mtpDataImpl { public: MTPDreplyKeyboardMarkup() { @@ -25792,7 +25841,7 @@ inline MTPbotCommand::MTPbotCommand() : mtpDataOwner(new MTPDbotCommand()) { inline uint32 MTPbotCommand::innerLength() const { const MTPDbotCommand &v(c_botCommand()); - return v.vcommand.innerLength() + v.vparams.innerLength() + v.vdescription.innerLength(); + return v.vcommand.innerLength() + v.vdescription.innerLength(); } inline mtpTypeId MTPbotCommand::type() const { return mtpc_botCommand; @@ -25803,19 +25852,17 @@ inline void MTPbotCommand::read(const mtpPrime *&from, const mtpPrime *end, mtpT if (!data) setData(new MTPDbotCommand()); MTPDbotCommand &v(_botCommand()); v.vcommand.read(from, end); - v.vparams.read(from, end); v.vdescription.read(from, end); } inline void MTPbotCommand::write(mtpBuffer &to) const { const MTPDbotCommand &v(c_botCommand()); v.vcommand.write(to); - v.vparams.write(to); v.vdescription.write(to); } inline MTPbotCommand::MTPbotCommand(MTPDbotCommand *_data) : mtpDataOwner(_data) { } -inline MTPbotCommand MTP_botCommand(const MTPstring &_command, const MTPstring &_params, const MTPstring &_description) { - return MTPbotCommand(new MTPDbotCommand(_command, _params, _description)); +inline MTPbotCommand MTP_botCommand(const MTPstring &_command, const MTPstring &_description) { + return MTPbotCommand(new MTPDbotCommand(_command, _description)); } inline uint32 MTPbotInfo::innerLength() const { @@ -25931,6 +25978,14 @@ inline MTPkeyboardButtonRow MTP_keyboardButtonRow(const MTPVector &_rows) { return MTPreplyMarkup(new MTPDreplyKeyboardMarkup(_flags, _rows)); diff --git a/Telegram/SourceFiles/mtproto/scheme.tl b/Telegram/SourceFiles/mtproto/scheme.tl index f424e8608..793d6d595 100644 --- a/Telegram/SourceFiles/mtproto/scheme.tl +++ b/Telegram/SourceFiles/mtproto/scheme.tl @@ -594,7 +594,7 @@ messages.stickerSet#b60a24a6 set:StickerSet packs:Vector documents: user#22e49072 flags:# id:int access_hash:flags.0?long first_name:flags.1?string last_name:flags.2?string username:flags.3?string phone:flags.4?string photo:flags.5?UserProfilePhoto status:flags.6?UserStatus bot_info_version:flags.14?int = User; -botCommand#b79d22ab command:string params:string description:string = BotCommand; +botCommand#c27ac8c7 command:string description:string = BotCommand; botInfoEmpty#bb2e37ce = BotInfo; botInfo#9cf585d user_id:int version:int share_text:string description:string commands:Vector = BotInfo; @@ -603,7 +603,8 @@ keyboardButton#a2fa4880 text:string = KeyboardButton; keyboardButtonRow#77608b83 buttons:Vector = KeyboardButtonRow; -replyKeyboardHide#ced6ebbc = ReplyMarkup; +replyKeyboardHide#a03e5b85 flags:# = ReplyMarkup; +replyKeyboardForceReply#f4108aa0 flags:# = ReplyMarkup; replyKeyboardMarkup#3502758c flags:# rows:Vector = ReplyMarkup; ---functions--- diff --git a/Telegram/SourceFiles/structs.cpp b/Telegram/SourceFiles/structs.cpp index 7b8de002c..791e35f20 100644 --- a/Telegram/SourceFiles/structs.cpp +++ b/Telegram/SourceFiles/structs.cpp @@ -244,7 +244,7 @@ void UserData::setBotInfo(const MTPBotInfo &info) { botInfo->commands.reserve(v.size()); for (int32 i = 0, l = v.size(); i < l; ++i) { if (v.at(i).type() == mtpc_botCommand) { - botInfo->commands.push_back(BotCommand(qs(v.at(i).c_botCommand().vcommand), qs(v.at(i).c_botCommand().vparams), qs(v.at(i).c_botCommand().vdescription))); + botInfo->commands.push_back(BotCommand(qs(v.at(i).c_botCommand().vcommand), qs(v.at(i).c_botCommand().vdescription))); } } diff --git a/Telegram/SourceFiles/structs.h b/Telegram/SourceFiles/structs.h index 363c1af3c..72f3f2f66 100644 --- a/Telegram/SourceFiles/structs.h +++ b/Telegram/SourceFiles/structs.h @@ -119,9 +119,9 @@ private: }; struct BotCommand { - BotCommand(const QString &command, const QString ¶ms, const QString &description) : command(command), params(params), description(description) { + BotCommand(const QString &command, const QString &description) : command(command), description(description) { } - QString command, params, description; + QString command, description; }; struct BotInfo { BotInfo() : inited(false), readsAllHistory(false), cantJoinGroups(false), version(0), text(st::msgMinWidth) { diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index d05afdb15..6a96f9bfb 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.28 + 0.8.29 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index 061f78a850c91b9922b0ab2540105cfb957a68fe..598b2eb1c4917b5ef737a7d18b1566bff07a3d6f 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_V diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index 49c556759..dd2793ed6 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -1701,7 +1701,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.28; + CURRENT_PROJECT_VERSION = 0.8.29; DEBUG_INFORMATION_FORMAT = dwarf; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -1719,7 +1719,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 0.8.28; + CURRENT_PROJECT_VERSION = 0.8.29; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = fast; GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h; @@ -1745,10 +1745,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.28; + CURRENT_PROJECT_VERSION = 0.8.29; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DYLIB_COMPATIBILITY_VERSION = 0.8; - DYLIB_CURRENT_VERSION = 0.8.28; + DYLIB_CURRENT_VERSION = 0.8.29; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -1888,10 +1888,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.28; + CURRENT_PROJECT_VERSION = 0.8.29; DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 0.8; - DYLIB_CURRENT_VERSION = 0.8.28; + DYLIB_CURRENT_VERSION = 0.8.29; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; diff --git a/Telegram/Version.sh b/Telegram/Version.sh index b405bce4c..057ea19a4 100755 --- a/Telegram/Version.sh +++ b/Telegram/Version.sh @@ -1,2 +1,2 @@ -echo 8028 0.8.28 1 +echo 8029 0.8.29 1 # AppVersion AppVersionStr DevChannel From 780d00bd8c498e4e0a5355dbb8f41d7fc7f65e33 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 24 Jun 2015 14:10:05 +0300 Subject: [PATCH 007/121] langs updated --- Telegram/SourceFiles/langs/lang_es.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Telegram/SourceFiles/langs/lang_es.strings b/Telegram/SourceFiles/langs/lang_es.strings index ede3fa516..79f5e12ea 100644 --- a/Telegram/SourceFiles/langs/lang_es.strings +++ b/Telegram/SourceFiles/langs/lang_es.strings @@ -464,7 +464,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_from_you" = "Tú"; "lng_bot_description" = "¿Qué puede hacer este bot?"; -"lng_bot_start" = "Empezar"; +"lng_bot_start" = "Iniciar"; "lng_bot_choose_group" = "Elegir grupo"; "lng_bot_no_groups" = "No tienes grupos"; "lng_bot_groups_not_found" = "No se encontraron grupos"; From 793a2ec90c4d149b333d6a34cf534b18851b7379 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 24 Jun 2015 20:24:48 +0300 Subject: [PATCH 008/121] version 0.8.30 with bots support and forward-by-dragndrop --- Telegram/PrepareWin.bat | 10 +- Telegram/Resources/style.txt | 18 +- Telegram/SourceFiles/app.cpp | 6 +- Telegram/SourceFiles/app.h | 2 +- Telegram/SourceFiles/application.cpp | 2 +- Telegram/SourceFiles/art/sprite.png | Bin 170813 -> 170995 bytes Telegram/SourceFiles/art/sprite_200x.png | Bin 224571 -> 225149 bytes Telegram/SourceFiles/boxes/contactsbox.cpp | 2 +- Telegram/SourceFiles/boxes/stickersetbox.cpp | 1 - Telegram/SourceFiles/config.h | 6 +- Telegram/SourceFiles/dialogswidget.cpp | 87 +++++++ Telegram/SourceFiles/dialogswidget.h | 10 + Telegram/SourceFiles/dropdown.cpp | 31 +-- Telegram/SourceFiles/gui/text.h | 2 +- Telegram/SourceFiles/history.cpp | 27 +- Telegram/SourceFiles/history.h | 1 + Telegram/SourceFiles/historywidget.cpp | 255 +++++++++++++++---- Telegram/SourceFiles/historywidget.h | 16 +- Telegram/SourceFiles/mainwidget.cpp | 4 + Telegram/SourceFiles/mainwidget.h | 2 + Telegram/SourceFiles/profilewidget.cpp | 7 +- Telegram/SourceFiles/structs.cpp | 2 + Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 +- Telegram/Version.sh | 2 +- 26 files changed, 396 insertions(+), 111 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index 242dbf2d4..042967670 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,10 +1,10 @@ @echo OFF -set "AppVersion=8029" -set "AppVersionStrSmall=0.8.29" -set "AppVersionStr=0.8.29" -set "AppVersionStrFull=0.8.29.0" -set "DevChannel=1" +set "AppVersion=8030" +set "AppVersionStrSmall=0.8.30" +set "AppVersionStr=0.8.30" +set "AppVersionStrFull=0.8.30.0" +set "DevChannel=0" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index 4c0e021dd..e04deadd6 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -993,15 +993,21 @@ btnAttachEmoji: iconedButton(btnAttachDocument) { width: 33px; } btnBotKbShow: iconedButton(btnAttachEmoji) { - icon: sprite(375px, 74px, 21px, 16px); - iconPos: point(6px, 16px); - downIcon: sprite(375px, 74px, 21px, 16px); - downIconPos: point(6px, 16px); + icon: sprite(375px, 74px, 21px, 21px); + iconPos: point(6px, 12px); + downIcon: sprite(375px, 74px, 21px, 21px); + downIconPos: point(6px, 12px); +} +btnBotCmdStart: iconedButton(btnAttachEmoji) { + icon: sprite(354px, 74px, 21px, 21px); + iconPos: point(6px, 12px); + downIcon: sprite(354px, 74px, 21px, 21px); + downIconPos: point(6px, 12px); } btnBotKbHide: iconedButton(btnAttachEmoji) { - icon: sprite(352px, 74px, 23px, 14px); + icon: sprite(373px, 95px, 23px, 14px); iconPos: point(5px, 17px); - downIcon: sprite(352px, 74px, 23px, 14px); + downIcon: sprite(373px, 95px, 23px, 14px); downIconPos: point(5px, 17px); } btnRecordAudio: sprite(363px, 366px, 16px, 24px); diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index 119b295fd..e9da3e487 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -312,7 +312,11 @@ namespace App { return lng_status_lastseen_date(lt_date, dOnline.date().toString(qsl("dd.MM.yy"))); } - bool onlineColorUse(int32 online, int32 now) { + bool onlineColorUse(UserData *user, int32 now) { + if (isServiceUser(user->id) || user->botInfo) { + return false; + } + int32 online = user->onlineTill; if (online <= 0) { switch (online) { case 0: diff --git a/Telegram/SourceFiles/app.h b/Telegram/SourceFiles/app.h index c76ac59ac..829ae4dc4 100644 --- a/Telegram/SourceFiles/app.h +++ b/Telegram/SourceFiles/app.h @@ -105,7 +105,7 @@ namespace App { int32 onlineForSort(UserData *user, int32 now); int32 onlineWillChangeIn(UserData *user, int32 nowOnServer); QString onlineText(UserData *user, int32 nowOnServer, bool precise = false); - bool onlineColorUse(int32 online, int32 now); + bool onlineColorUse(UserData *user, int32 now); UserData *feedUsers(const MTPVector &users); // returns last user ChatData *feedChats(const MTPVector &chats); // returns last chat diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index 113830001..a6ddaf945 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -642,7 +642,7 @@ void Application::checkMapVersion() { QString versionFeatures; if (DevChannel && Local::oldMapVersion() < 8029) { versionFeatures = lang(lng_new_version_minor);// QString::fromUtf8("\xe2\x80\x94 IPv6 connections support\n\xe2\x80\x94 Bug fixes and minor stuff");// .replace('@', qsl("@") + QChar(0x200D)); - } else if (!DevChannel && Local::oldMapVersion() < 8024) { + } else if (!DevChannel && Local::oldMapVersion() < 8030) { versionFeatures = lng_new_version_text(lt_blog_link, qsl("https://telegram.org/blog/bot-revolution"));// lang(lng_new_version_text).trimmed(); } if (!versionFeatures.isEmpty()) { diff --git a/Telegram/SourceFiles/art/sprite.png b/Telegram/SourceFiles/art/sprite.png index 329aeef7b1dc9d3975f357aae40aa65fb39ef5f9..5219d61a8d52e0426d44316488250aa35e08f17a 100644 GIT binary patch delta 50563 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

CT2|LPxb!^fy$&6NqOe|(y5juq|du9 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

k#y5b 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 delta 102747 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

9Q3L8S>Cw7N4f{2nWj(6{Y=s*C@cWac{XRy@+yC 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 #UAYn?LD*2aPU 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 diff --git a/Telegram/SourceFiles/boxes/contactsbox.cpp b/Telegram/SourceFiles/boxes/contactsbox.cpp index 4b6a1403d..4ade8efa1 100644 --- a/Telegram/SourceFiles/boxes/contactsbox.cpp +++ b/Telegram/SourceFiles/boxes/contactsbox.cpp @@ -249,7 +249,7 @@ void ContactsInner::paintDialog(QPainter &p, PeerData *peer, ContactData *data, } else { if (data->inchat || data->check) { p.setPen(st::white->p); - } else if (user && (uname || App::onlineColorUse(user->onlineTill, _time))) { + } else if (user && (uname || App::onlineColorUse(user, _time))) { p.setPen(st::profileOnlineColor->p); } else { p.setPen(st::profileOfflineColor->p); diff --git a/Telegram/SourceFiles/boxes/stickersetbox.cpp b/Telegram/SourceFiles/boxes/stickersetbox.cpp index f2b14fd16..4b9cd2c9b 100644 --- a/Telegram/SourceFiles/boxes/stickersetbox.cpp +++ b/Telegram/SourceFiles/boxes/stickersetbox.cpp @@ -235,7 +235,6 @@ void StickerSetBox::onAddStickers() { void StickerSetBox::onShareStickers() { QString url = qsl("https://telegram.me/addstickers/") + _inner.shortName(); - DEBUG_LOG(("Setting text to clipboard from stickerset box: %1").arg(url)); QApplication::clipboard()->setText(url); App::wnd()->showLayer(new ConfirmBox(lang(lng_stickers_copied), true), true); } diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 3205b6c56..da88b4608 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,9 +17,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8029; -static const wchar_t *AppVersionStr = L"0.8.29"; -static const bool DevChannel = true; +static const int32 AppVersion = 8030; +static const wchar_t *AppVersionStr = L"0.8.30"; +static const bool DevChannel = false; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index ce1fc89b7..94168759a 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -680,6 +680,26 @@ void DialogsListWidget::itemReplaced(HistoryItem *oldItem, HistoryItem *newItem) } } +PeerData *DialogsListWidget::updateFromParentDrag(QPoint globalPos) { + lastMousePos = globalPos; + selByMouse = true; + onUpdateSelected(true); + update(); + + if (_state == DefaultState) { + if (sel) return sel->history->peer; + } else if (_state == FilteredState || _state == SearchedState) { + if (filteredSel >= 0 && filteredSel < filterResults.size()) { + return filterResults[filteredSel]->history->peer; + } else if (peopleSel >= 0 && peopleSel < peopleResults.size()) { + return peopleResults[peopleSel]; + } else if (searchedSel >= 0 && searchedSel < searchResults.size()) { + return searchResults[searchedSel]->_item->history()->peer; + } + } + return 0; +} + void DialogsListWidget::itemRemoved(HistoryItem *item) { int wasCount = searchResults.size(); for (int i = 0; i < searchResults.size();) { @@ -1356,6 +1376,8 @@ MsgId DialogsListWidget::lastSearchId() const { DialogsWidget::DialogsWidget(MainWidget *parent) : QWidget(parent) , _drawShadow(true) +, _dragInScroll(false) +, _dragForward(false) , dlgOffset(0) , dlgCount(-1) , dlgPreloading(0) @@ -1388,6 +1410,8 @@ DialogsWidget::DialogsWidget(MainWidget *parent) : QWidget(parent) connect(&_newGroup, SIGNAL(clicked()), this, SLOT(onNewGroup())); connect(&_cancelSearch, SIGNAL(clicked()), this, SLOT(onCancelSearch())); + setAcceptDrops(true); + _searchTimer.setSingleShot(true); connect(&_searchTimer, SIGNAL(timeout()), this, SLOT(onSearchMessages())); @@ -1741,6 +1765,69 @@ bool DialogsWidget::addNewContact(int32 uid, bool show) { return true; } +void DialogsWidget::dragEnterEvent(QDragEnterEvent *e) { + if (App::main()->selectingPeer()) return; + + _dragInScroll = false; + _dragForward = cWideMode() && e->mimeData()->hasFormat(qsl("application/x-td-forward-selected")); + if (_dragForward) { + e->setDropAction(Qt::CopyAction); + e->accept(); + updateDragInScroll(scroll.geometry().contains(e->pos())); + } else if (false && App::main() && App::main()->getDragState(e->mimeData()) != DragStateNone) { + e->setDropAction(Qt::CopyAction); + e->accept(); + } +} + +void DialogsWidget::dragMoveEvent(QDragMoveEvent *e) { + if (scroll.geometry().contains(e->pos())) { + if (_dragForward) updateDragInScroll(true); + PeerData *p = list.updateFromParentDrag(mapToGlobal(e->pos())); + if (p) { + e->setDropAction(Qt::CopyAction); + } else { + e->setDropAction(Qt::IgnoreAction); + } + } else { + if (_dragForward) updateDragInScroll(false); + list.leaveEvent(0); + e->setDropAction(Qt::IgnoreAction); + } + e->accept(); +} + +void DialogsWidget::dragLeaveEvent(QDragLeaveEvent *e) { + if (_dragForward) updateDragInScroll(false); + list.leaveEvent(0); + e->accept(); +} + +void DialogsWidget::updateDragInScroll(bool inScroll) { + if (_dragInScroll != inScroll) { + _dragInScroll = inScroll; + if (_dragInScroll) { + App::main()->forwardLayer(1); + } else { + App::main()->dialogsCancelled(); + } + } +} + +void DialogsWidget::dropEvent(QDropEvent *e) { + if (scroll.geometry().contains(e->pos())) { + PeerData *p = list.updateFromParentDrag(mapToGlobal(e->pos())); + if (p) { + e->acceptProposedAction(); + if (e->mimeData()->hasFormat(qsl("application/x-td-forward-selected"))) { + App::main()->onForward(p->id, true); + } else { + App::main()->showPeer(p->id, 0, false, true); + } + } + } +} + void DialogsWidget::onListScroll() { // if (!App::self()) return; diff --git a/Telegram/SourceFiles/dialogswidget.h b/Telegram/SourceFiles/dialogswidget.h index 7d6fb8372..863570d9e 100644 --- a/Telegram/SourceFiles/dialogswidget.h +++ b/Telegram/SourceFiles/dialogswidget.h @@ -98,6 +98,8 @@ public: void itemRemoved(HistoryItem *item); void itemReplaced(HistoryItem *oldItem, HistoryItem *newItem); + PeerData *updateFromParentDrag(QPoint globalPos); + ~DialogsListWidget(); public slots: @@ -171,6 +173,12 @@ public: void peopleReceived(const MTPcontacts_Found &result, mtpRequestId req); bool addNewContact(int32 uid, bool show = true); + void dragEnterEvent(QDragEnterEvent *e); + void dragMoveEvent(QDragMoveEvent *e); + void dragLeaveEvent(QDragLeaveEvent *e); + void dropEvent(QDropEvent *e); + void updateDragInScroll(bool inScroll); + void resizeEvent(QResizeEvent *e); void keyPressEvent(QKeyEvent *e); void paintEvent(QPaintEvent *e); @@ -232,6 +240,8 @@ private: bool _drawShadow; + bool _dragInScroll, _dragForward; + void unreadCountsReceived(const QVector &dialogs); bool dialogsFailed(const RPCError &error); bool contactsFailed(const RPCError &error); diff --git a/Telegram/SourceFiles/dropdown.cpp b/Telegram/SourceFiles/dropdown.cpp index edef4518a..553882543 100644 --- a/Telegram/SourceFiles/dropdown.cpp +++ b/Telegram/SourceFiles/dropdown.cpp @@ -2425,7 +2425,8 @@ void MentionsInner::paintEvent(QPaintEvent *e) { QPainter p(this); int32 atwidth = st::mentionFont->m.width('@'), hashwidth = st::mentionFont->m.width('#'); - int32 availwidth = width() - 2 * st::mentionPadding.left() - st::mentionPhotoSize - 2 * st::mentionPadding.right(); + int32 mentionleft = 2 * st::mentionPadding.left() + st::mentionPhotoSize; + int32 mentionwidth = width() - mentionleft - 2 * st::mentionPadding.right(); int32 htagleft = st::btnAttachPhoto.width + st::taMsgField.textMrg.left() - st::dlgShadow, htagwidth = width() - st::mentionPadding.right() - htagleft - st::mentionScroll.width; int32 from = qFloor(e->rect().top() / st::mentionHeight), to = qFloor(e->rect().bottom() / st::mentionHeight) + 1; @@ -2445,9 +2446,9 @@ void MentionsInner::paintEvent(QPaintEvent *e) { UserData *user = _rows->at(i); QString first = (_parent->filter().size() < 2) ? QString() : ('@' + user->username.mid(0, _parent->filter().size() - 1)), second = (_parent->filter().size() < 2) ? ('@' + user->username) : user->username.mid(_parent->filter().size() - 1); int32 firstwidth = st::mentionFont->m.width(first), secondwidth = st::mentionFont->m.width(second), unamewidth = firstwidth + secondwidth, namewidth = user->nameText.maxWidth(); - if (availwidth < unamewidth + namewidth) { - namewidth = (availwidth * namewidth) / (namewidth + unamewidth); - unamewidth = availwidth - namewidth; + if (mentionwidth < unamewidth + namewidth) { + namewidth = (mentionwidth * namewidth) / (namewidth + unamewidth); + unamewidth = mentionwidth - namewidth; if (firstwidth < unamewidth + st::mentionFont->elidew) { if (firstwidth < unamewidth) { first = st::mentionFont->m.elidedText(first, Qt::ElideRight, unamewidth); @@ -2465,10 +2466,10 @@ void MentionsInner::paintEvent(QPaintEvent *e) { p.setFont(st::mentionFont->f); p.setPen((selected ? st::mentionFgOverActive : st::mentionFgActive)->p); - p.drawText(2 * st::mentionPadding.left() + st::mentionPhotoSize + namewidth + st::mentionPadding.right(), i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, first); + p.drawText(mentionleft + namewidth + st::mentionPadding.right(), i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, first); if (!second.isEmpty()) { p.setPen((selected ? st::mentionFgOver : st::mentionFg)->p); - p.drawText(2 * st::mentionPadding.left() + st::mentionPhotoSize + namewidth + st::mentionPadding.right() + firstwidth, i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, second); + p.drawText(mentionleft + namewidth + st::mentionPadding.right() + firstwidth, i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, second); } } else if (!_hrows->isEmpty()) { QString hrow = _hrows->at(i); @@ -2501,30 +2502,30 @@ void MentionsInner::paintEvent(QPaintEvent *e) { if (hasUsername || botStatus == 0 || botStatus == 2) { toHighlight += '@' + user->username; } - if (_parent->chat() || botStatus == 0 || botStatus == 2) { + if (true || _parent->chat() || botStatus == 0 || botStatus == 2) { user->photo->load(); p.drawPixmap(st::mentionPadding.left(), i * st::mentionHeight + st::mentionPadding.top(), user->photo->pixRounded(st::mentionPhotoSize)); } - int32 addleft = 0, widthleft = htagwidth; + int32 addleft = 0, widthleft = mentionwidth; QString first = (_parent->filter().size() < 2) ? QString() : ('/' + toHighlight.mid(0, _parent->filter().size() - 1)), second = (_parent->filter().size() < 2) ? ('/' + toHighlight) : toHighlight.mid(_parent->filter().size() - 1); int32 firstwidth = st::mentionFont->m.width(first), secondwidth = st::mentionFont->m.width(second); - if (htagwidth < firstwidth + secondwidth) { - if (htagwidth < firstwidth + st::mentionFont->elidew) { - first = st::mentionFont->m.elidedText(first + second, Qt::ElideRight, htagwidth); + if (widthleft < firstwidth + secondwidth) { + if (widthleft < firstwidth + st::mentionFont->elidew) { + first = st::mentionFont->m.elidedText(first + second, Qt::ElideRight, widthleft); second = QString(); } else { - second = st::mentionFont->m.elidedText(second, Qt::ElideRight, htagwidth - firstwidth); + second = st::mentionFont->m.elidedText(second, Qt::ElideRight, widthleft - firstwidth); } } p.setFont(st::mentionFont->f); if (!first.isEmpty()) { p.setPen((selected ? st::mentionFgOverActive : st::mentionFgActive)->p); - p.drawText(htagleft, i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, first); + p.drawText(mentionleft, i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, first); } if (!second.isEmpty()) { p.setPen((selected ? st::mentionFgOver : st::mentionFg)->p); - p.drawText(htagleft + firstwidth, i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, second); + p.drawText(mentionleft + firstwidth, i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, second); } addleft += firstwidth + secondwidth + st::mentionPadding.left(); widthleft -= firstwidth + secondwidth + st::mentionPadding.left(); @@ -2538,7 +2539,7 @@ void MentionsInner::paintEvent(QPaintEvent *e) { descwidth = st::mentionFont->m.width(description); } p.setPen((selected ? st::mentionFgOver : st::mentionFg)->p); - p.drawText(htagleft + addleft + (widthleft - descwidth), i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, description); + p.drawText(mentionleft + addleft + (widthleft - descwidth), i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, description); } } } diff --git a/Telegram/SourceFiles/gui/text.h b/Telegram/SourceFiles/gui/text.h index 55d11368a..e48417d02 100644 --- a/Telegram/SourceFiles/gui/text.h +++ b/Telegram/SourceFiles/gui/text.h @@ -289,7 +289,7 @@ public: QString encoded() const { QUrl u(_url), good(u.isValid() ? u.toEncoded() : QString()); - QString result(good.isValid() ? good.toEncoded() : _url); + QString result(good.isValid() ? QString::fromUtf8(good.toEncoded()) : _url); if (!QRegularExpression(qsl("^[a-zA-Z]+://")).match(result).hasMatch()) { // no protocol return qsl("http://") + result; diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index c12c7b341..25e9da417 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -326,6 +326,12 @@ History::History(const PeerId &peerId) : width(0), height(0) } } +void History::clearLastKeyboard() { + lastKeyboardInited = true; + lastKeyboardId = 0; + lastKeyboardFrom = 0; +} + void History::updateNameText() { nameText.setText(st::msgNameFont, peer->nameOrPhone.isEmpty() ? peer->name : peer->nameOrPhone, _textNameOptions); } @@ -632,9 +638,7 @@ HistoryItem *History::createItem(HistoryBlock *block, const MTPmessage &msg, boo case mtpc_messageActionChatDeleteUser: { const MTPDmessageActionChatDeleteUser &d(action.c_messageActionChatDeleteUser()); if (lastKeyboardFrom == App::peerFromUser(d.vuser_id)) { - lastKeyboardInited = true; - lastKeyboardId = 0; - lastKeyboardFrom = 0; + clearLastKeyboard(); } // App::peer(App::peerFromUser(d.vuser_id)); left } break; @@ -828,14 +832,10 @@ HistoryItem *History::doAddToBack(HistoryBlock *to, bool newBlock, HistoryItem * } if (markupFlags & MTPDreplyKeyboardMarkup_flag_ZERO) { // zero markup means replyKeyboardHide if (lastKeyboardFrom == adding->from()->id || (!lastKeyboardInited && !peer->chat && !adding->out())) { - lastKeyboardInited = true; - lastKeyboardId = 0; - lastKeyboardFrom = 0; + clearLastKeyboard(); } } else if (peer->chat && (peer->asChat()->count < 1 || !peer->asChat()->participants.isEmpty()) && !peer->asChat()->participants.contains(adding->from())) { - lastKeyboardInited = true; - lastKeyboardId = 0; - lastKeyboardFrom = 0; + clearLastKeyboard(); } else { lastKeyboardInited = true; lastKeyboardId = adding->id; @@ -960,11 +960,10 @@ void History::addToFront(const QVector &slice) { } if (!(markupFlags & MTPDreplyKeyboardMarkup_flag_ZERO)) { if (!lastKeyboardInited) { - lastKeyboardInited = true; if (wasKeyboardHide || ((peer->asChat()->count < 1 || !peer->asChat()->participants.isEmpty()) && !peer->asChat()->participants.contains(item->from()))) { - lastKeyboardId = 0; - lastKeyboardFrom = 0; + clearLastKeyboard(); } else { + lastKeyboardInited = true; lastKeyboardId = item->id; lastKeyboardFrom = item->from()->id; lastKeyboardUsed = false; @@ -976,10 +975,8 @@ void History::addToFront(const QVector &slice) { } else if (!lastKeyboardInited && item->hasReplyMarkup() && !item->out()) { // conversations with bots int32 markupFlags = App::replyMarkup(item->id).flags; if (!(markupFlags & MTPDreplyKeyboardMarkup_flag_personal) || item->notifyByFrom()) { - lastKeyboardInited = true; if (markupFlags & MTPDreplyKeyboardMarkup_flag_ZERO) { - lastKeyboardId = 0; - lastKeyboardFrom = 0; + clearLastKeyboard(); } else { lastKeyboardInited = true; lastKeyboardId = item->id; diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index ed92ee7a3..367650617 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -254,6 +254,7 @@ struct History : public QList { bool lastKeyboardInited, lastKeyboardUsed; MsgId lastKeyboardId; PeerId lastKeyboardFrom; + void clearLastKeyboard(); mtpRequestId sendRequestId; diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 8515732fa..5a09d0955 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -51,6 +51,7 @@ HistoryList::HistoryList(HistoryWidget *historyWidget, ScrollArea *scroll, Histo , _dragSelFrom(0) , _dragSelTo(0) , _dragSelecting(false) + , _wasSelectedText(false) , _touchScroll(false) , _touchSelect(false) , _touchInProgress(false) @@ -482,6 +483,7 @@ void HistoryList::dragActionCancel() { _dragAction = NoDrag; _dragStartPos = QPoint(0, 0); _dragSelFrom = _dragSelTo = 0; + _wasSelectedText = false; historyWidget->noSelectingScroll(); } @@ -542,6 +544,9 @@ void HistoryList::dragActionFinish(const QPoint &screenPos, Qt::MouseButton butt updateMsg(App::pressedItem()); App::pressedItem(0); } + + _wasSelectedText = false; + if (needClick) { DEBUG_LOG(("Clicked link: %1 (%2) %3").arg(needClick->text()).arg(needClick->readable()).arg(needClick->encoded())); needClick->onClick(button); @@ -573,6 +578,7 @@ void HistoryList::dragActionFinish(const QPoint &screenPos, Qt::MouseButton butt } else if (_dragAction == Selecting) { if (_dragSelFrom && _dragSelTo) { applyDragSelection(); + _dragSelFrom = _dragSelTo = 0; } else if (!_selected.isEmpty() && !_dragWasInactive) { uint32 sel = _selected.cbegin().value(); if (sel != FullItemSel && (sel & 0xFFFF) == ((sel >> 16) & 0xFFFF)) { @@ -595,6 +601,8 @@ void HistoryList::mouseReleaseEvent(QMouseEvent *e) { } void HistoryList::mouseDoubleClickEvent(QMouseEvent *e) { + if (!hist) return; + if (((_dragAction == Selecting && !_selected.isEmpty() && _selected.cbegin().value() != FullItemSel) || (_dragAction == NoDrag && (_selected.isEmpty() || _selected.cbegin().value() != FullItemSel))) && _dragSelType == TextSelectLetters && _dragItem) { bool afterDragSymbol, uponSelected; uint16 symbol; @@ -610,7 +618,7 @@ void HistoryList::mouseDoubleClickEvent(QMouseEvent *e) { _selected.clear(); } _selected.insert(_dragItem, selStatus); - } + } mouseMoveEvent(e); _trippleClickPoint = e->globalPos(); @@ -800,8 +808,9 @@ void HistoryList::onMenuDestroy(QObject *obj) { void HistoryList::copySelectedText() { QString sel = getSelectedText(); - DEBUG_LOG(("Setting selected text to clipboard: %1").arg(sel)); - QApplication::clipboard()->setText(sel); + if (!sel.isEmpty()) { + QApplication::clipboard()->setText(sel); + } } void HistoryList::openContextUrl() { @@ -814,7 +823,6 @@ void HistoryList::openContextUrl() { void HistoryList::copyContextUrl() { QString enc = _contextMenuLnk->encoded(); if (!enc.isEmpty()) { - DEBUG_LOG(("Setting text to clipboard from context url: %1").arg(enc)); QApplication::clipboard()->setText(enc); } } @@ -888,7 +896,6 @@ void HistoryList::copyContextText() { QString contextMenuText = item->selectedText(FullItemSel); if (!contextMenuText.isEmpty()) { - DEBUG_LOG(("Setting text to clipboard from context menu: %1").arg(contextMenuText)); QApplication::clipboard()->setText(contextMenuText); } } @@ -898,15 +905,21 @@ void HistoryList::resizeEvent(QResizeEvent *e) { } QString HistoryList::getSelectedText() const { - if (_selected.isEmpty()) return QString(); - if (_selected.cbegin().value() != FullItemSel) { - return _selected.cbegin().key()->selectedText(_selected.cbegin().value()); + SelectedItems sel = _selected; + + if (_dragAction == Selecting && _dragSelFrom && _dragSelTo) { + applyDragSelection(&sel); + } + + if (sel.isEmpty()) return QString(); + if (sel.cbegin().value() != FullItemSel) { + return sel.cbegin().key()->selectedText(sel.cbegin().value()); } int32 fullSize = 0; QString timeFormat(qsl(", [dd.MM.yy hh:mm]\n")); QMap texts; - for (SelectedItems::const_iterator i = _selected.cbegin(), e = _selected.cend(); i != e; ++i) { + for (SelectedItems::const_iterator i = sel.cbegin(), e = sel.cend(); i != e; ++i) { HistoryItem *item = i.key(); QString text, sel = item->selectedText(FullItemSel), time = item->date.toString(timeFormat); int32 size = item->from()->name.size() + time.size() + sel.size(); @@ -999,6 +1012,10 @@ void HistoryList::updateBotInfo(bool recount) { } } +bool HistoryList::wasSelectedText() const { + return _wasSelectedText; +} + void HistoryList::updateSize() { int32 ph = scrollArea->height(), minadd = 0; ySkip = ph - (hist->height + st::historyPadding); @@ -1236,6 +1253,61 @@ void HistoryList::onUpdateSelected() { if (item != _dragItem || (m - _dragStartPos).manhattanLength() >= QApplication::startDragDistance()) { if (_dragAction == PrepareDrag) { _dragAction = Dragging; + + bool uponSelected = false; + if (_dragItem) { + bool afterDragSymbol; + uint16 symbol; + if (!_selected.isEmpty() && _selected.cbegin().value() == FullItemSel) { + uponSelected = _selected.contains(_dragItem); + } else { + _dragItem->getSymbol(symbol, afterDragSymbol, uponSelected, _dragStartPos.x(), _dragStartPos.y()); + if (uponSelected) { + if (_selected.isEmpty() || + _selected.cbegin().value() == FullItemSel || + _selected.cbegin().key() != _dragItem + ) { + uponSelected = false; + } else { + uint16 selFrom = (_selected.cbegin().value() >> 16) & 0xFFFF, selTo = _selected.cbegin().value() & 0xFFFF; + if (symbol < selFrom || symbol >= selTo) { + uponSelected = false; + } + } + } + } + } + QString sel; + QList urls; + if (uponSelected) { + sel = getSelectedText(); + } else if (textlnkDown()) { + sel = textlnkDown()->encoded(); + if (!sel.isEmpty() && sel.at(0) != '/' && sel.at(0) != '@' && sel.at(0) != '#') { + urls.push_back(QUrl::fromEncoded(sel.toUtf8())); + } + } + if (!sel.isEmpty()) { + updateDragSelection(0, 0, false); + historyWidget->noSelectingScroll(); + + QDrag *drag = new QDrag(App::wnd()); + QMimeData *mimeData = new QMimeData; + + mimeData->setText(sel); + if (!urls.isEmpty()) mimeData->setUrls(urls); + if (uponSelected && !_selected.isEmpty() && _selected.cbegin().value() == FullItemSel && cWideMode()) { + QStringList ids; + ids.reserve(_selected.size()); + for (SelectedItems::const_iterator i = _selected.cbegin(), e = _selected.cend(); i != e; ++i) { + ids.push_back(QString::number(i.key()->id, 16)); + } + mimeData->setData(qsl("application/x-td-forward-selected"), "1"); + } + drag->setMimeData(mimeData); + drag->exec(); + return; + } } else if (_dragAction == PrepareSelect) { _dragAction = Selecting; } @@ -1247,7 +1319,12 @@ void HistoryList::onUpdateSelected() { uint16 second; _dragItem->getSymbol(second, afterSymbol, uponSymbol, m.x(), m.y()); if (afterSymbol && _dragSelType == TextSelectLetters) ++second; - _selected[_dragItem] = _dragItem->adjustSelection(qMin(second, _dragSymbol), qMax(second, _dragSymbol), _dragSelType); + uint32 selState = _dragItem->adjustSelection(qMin(second, _dragSymbol), qMax(second, _dragSymbol), _dragSelType); + _selected[_dragItem] = selState; + if (!_wasSelectedText && (selState == FullItemSel || (selState & 0xFFFF) != ((selState >> 16) & 0xFFFF))) { + _wasSelectedText = true; + setFocus(); + } updateDragSelection(0, 0, false); } else { bool selectingDown = (_dragItem->block()->y < item->block()->y) || ((_dragItem->block() == item->block()) && (_dragItem->y < item->y || (_dragItem == item && _dragStartPos.y() < m.y()))); @@ -1316,6 +1393,10 @@ void HistoryList::updateDragSelection(HistoryItem *dragSelFrom, HistoryItem *dra qSwap(_dragSelFrom, _dragSelTo); } _dragSelecting = dragSelecting; + if (!_wasSelectedText && _dragSelFrom && _dragSelTo && _dragSelecting) { + _wasSelectedText = true; + setFocus(); + } force = true; } if (!force) return; @@ -1324,9 +1405,14 @@ void HistoryList::updateDragSelection(HistoryItem *dragSelFrom, HistoryItem *dra } void HistoryList::applyDragSelection() { - if (!_selected.isEmpty() && _selected.cbegin().value() != FullItemSel) { - _selected.clear(); + applyDragSelection(&_selected); +} + +void HistoryList::applyDragSelection(SelectedItems *toItems) const { + if (!toItems->isEmpty() && toItems->cbegin().value() != FullItemSel) { + toItems->clear(); } + int32 fromy = _dragSelFrom->y + _dragSelFrom->block()->y, toy = _dragSelTo->y + _dragSelTo->block()->y + _dragSelTo->height(); if (_dragSelecting) { int32 fromblock = hist->indexOf(_dragSelFrom->block()), fromitem = _dragSelFrom->block()->indexOf(_dragSelFrom); @@ -1336,35 +1422,34 @@ void HistoryList::applyDragSelection() { HistoryBlock *block = (*hist)[fromblock]; for (int32 cnt = (fromblock < toblock) ? block->size() : (toitem + 1); fromitem < cnt; ++fromitem) { HistoryItem *item = (*block)[fromitem]; - SelectedItems::iterator i = _selected.find(item); + SelectedItems::iterator i = toItems->find(item); if (item->id > 0 && !item->serviceMsg()) { - if (i == _selected.cend()) { - if (_selected.size() >= MaxSelectedItems) break; - _selected.insert(item, FullItemSel); + if (i == toItems->cend()) { + if (toItems->size() >= MaxSelectedItems) break; + toItems->insert(item, FullItemSel); } else if (i.value() != FullItemSel) { *i = FullItemSel; } } else { - if (i != _selected.cend()) { - _selected.erase(i); + if (i != toItems->cend()) { + toItems->erase(i); } } } - if (_selected.size() >= MaxSelectedItems) break; + if (toItems->size() >= MaxSelectedItems) break; fromitem = 0; } } } else { - for (SelectedItems::iterator i = _selected.begin(); i != _selected.cend(); ) { + for (SelectedItems::iterator i = toItems->begin(); i != toItems->cend();) { int32 iy = i.key()->y + i.key()->block()->y; if (iy >= fromy && iy < toy) { - i = _selected.erase(i); + i = toItems->erase(i); } else { ++i; } } } - _dragSelFrom = _dragSelTo = 0; } void HistoryList::showLinkTip() { @@ -1579,9 +1664,9 @@ bool BotKeyboard::updateMarkup(HistoryItem *to) { clearSelection(); _btns.clear(); const ReplyMarkup &markup(App::replyMarkup(to->id)); - _forceReply = markup.flags | MTPDreplyKeyboardMarkup_flag_FORCE_REPLY; + _forceReply = markup.flags & MTPDreplyKeyboardMarkup_flag_FORCE_REPLY; _maximizeSize = !(markup.flags & MTPDreplyKeyboardMarkup_flag_resize); - _singleUse = markup.flags & MTPDreplyKeyboardMarkup_flag_single_use; + _singleUse = _forceReply || (markup.flags & MTPDreplyKeyboardMarkup_flag_single_use); const ReplyMarkup::Commands &commands(markup.commands); if (!commands.isEmpty()) { @@ -2034,6 +2119,8 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) , _attachEmoji(this, st::btnAttachEmoji) , _kbShow(this, st::btnBotKbShow) , _kbHide(this, st::btnBotKbHide) +, _cmdStart(this, st::btnBotCmdStart) +, _cmdStartShown(false) , _field(this, st::taMsgField, lang(lng_message_ph)) , _recordAnim(animFunc(this, &HistoryWidget::recordStep)) , _recordingAnim(animFunc(this, &HistoryWidget::recordingStep)) @@ -2126,7 +2213,7 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) _toHistoryEnd.installEventFilter(this); _attachMention.hide(); - connect(&_attachMention, SIGNAL(chosen(QString)), &_field, SLOT(onMentionHashtagOrBotCommandInsert(QString))); + connect(&_attachMention, SIGNAL(chosen(QString)), this, SLOT(onMentionHashtagOrBotCommandInsert(QString))); _field.installEventFilter(&_attachMention); _field.hide(); @@ -2139,6 +2226,7 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) _attachEmoji.hide(); _kbShow.hide(); _kbHide.hide(); + _cmdStart.hide(); _attachDocument.installEventFilter(&_attachType); _attachPhoto.installEventFilter(&_attachType); @@ -2146,6 +2234,7 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) connect(&_kbShow, SIGNAL(clicked()), this, SLOT(onKbToggle())); connect(&_kbHide, SIGNAL(clicked()), this, SLOT(onKbToggle())); + connect(&_cmdStart, SIGNAL(clicked()), this, SLOT(onCmdStart())); connect(_attachType.addButton(new IconedButton(this, st::dropdownAttachDocument, lang(lng_attach_file))), SIGNAL(clicked()), this, SLOT(onDocumentSelect())); connect(_attachType.addButton(new IconedButton(this, st::dropdownAttachPhoto, lang(lng_attach_photo))), SIGNAL(clicked()), this, SLOT(onPhotoSelect())); @@ -2164,6 +2253,15 @@ void HistoryWidget::start() { connect(App::api(), SIGNAL(fullPeerUpdated(PeerData*)), this, SLOT(onFullPeerUpdated(PeerData*))); } +void HistoryWidget::onMentionHashtagOrBotCommandInsert(QString str) { + if (str.at(0) == '/') { // bot command + App::sendBotCommand(str); + setFieldText(_field.getLastText().mid(_field.textCursor().position())); + } else { + _field.onMentionHashtagOrBotCommandInsert(str); + } +} + void HistoryWidget::onTextChange() { updateTyping(); @@ -2182,6 +2280,11 @@ void HistoryWidget::onTextChange() { a_recordCancel = anim::cvalue(st::recordCancel->c, st::recordCancel->c); } } + if (updateCmdStartShown()) { + updateControlsVisibility(); + resizeEvent(0); + update(); + } if (!hist || _synthedTextUpdate) return; _saveDraftText = true; @@ -2269,7 +2372,7 @@ void HistoryWidget::activate() { } } if (_list) { - if (_selCount || _recording || isBotStart()) { + if (_selCount || (_list && _list->wasSelectedText()) || _recording || isBotStart()) { _list->setFocus(); } else { _field.setFocus(); @@ -2574,6 +2677,7 @@ void HistoryWidget::setKbWasHidden() { _kbScroll.hide(); _attachEmoji.show(); _kbHide.hide(); + _cmdStart.hide(); _kbShow.show(); } _field.setMaxHeight(st::maxFieldHeight); @@ -2710,6 +2814,8 @@ void HistoryWidget::showPeer(const PeerId &peer, MsgId msgId, bool force, bool l App::contextItem(0); App::mousedItem(0); + _kbWasHidden = false; + if (peer) { App::forgetMedia(); serviceImageCacheSize = imageCacheSize(); @@ -2737,6 +2843,7 @@ void HistoryWidget::showPeer(const PeerId &peer, MsgId msgId, bool force, bool l _scroll.setWidget(_list); _list->show(); + updateBotKeyboard(); checkUnreadLoaded(); App::main()->peerUpdated(histPeer); @@ -2774,12 +2881,10 @@ void HistoryWidget::showPeer(const PeerId &peer, MsgId msgId, bool force, bool l connect(&_scroll, SIGNAL(geometryChanged()), _list, SLOT(onParentGeometryChanged())); connect(&_scroll, SIGNAL(scrolled()), _list, SLOT(onUpdateSelected())); } else { + updateBotKeyboard(); updateControlsVisibility(); } - _kbWasHidden = false; - updateBotKeyboard(); - emit peerShown(histPeer); App::main()->topBar()->update(); update(); @@ -2825,6 +2930,7 @@ void HistoryWidget::updateControlsVisibility() { _toHistoryEnd.hide(); _kbShow.hide(); _kbHide.hide(); + _cmdStart.hide(); _attachType.hide(); _emojiPan.hide(); return; @@ -2845,6 +2951,7 @@ void HistoryWidget::updateControlsVisibility() { _attachEmoji.hide(); _kbShow.hide(); _kbHide.hide(); + _cmdStart.hide(); _attachDocument.hide(); _attachPhoto.hide(); _kbScroll.hide(); @@ -2867,6 +2974,7 @@ void HistoryWidget::updateControlsVisibility() { _attachEmoji.hide(); _kbShow.hide(); _kbHide.hide(); + _cmdStart.hide(); _attachDocument.hide(); _attachPhoto.hide(); if (_kbShown) { @@ -2881,19 +2989,27 @@ void HistoryWidget::updateControlsVisibility() { _attachEmoji.hide(); _kbHide.show(); _kbShow.hide(); + _cmdStart.hide(); } else if (_kbReplyTo) { _kbScroll.hide(); _attachEmoji.show(); _kbHide.hide(); _kbShow.hide(); + _cmdStart.hide(); } else { _kbScroll.hide(); _attachEmoji.show(); _kbHide.hide(); - if (_keyboard.hasMarkup() || _keyboard.forceReply()) { + if (_keyboard.hasMarkup()) { _kbShow.show(); + _cmdStart.hide(); } else { _kbShow.hide(); + if (_cmdStartShown) { + _cmdStart.show(); + } else { + _cmdStart.hide(); + } } } if (cDefaultAttach() == dbidaPhoto) { @@ -2923,6 +3039,7 @@ void HistoryWidget::updateControlsVisibility() { _attachEmoji.hide(); _kbShow.hide(); _kbHide.hide(); + _cmdStart.hide(); _attachType.hide(); _emojiPan.hide(); if (!_field.isHidden()) { @@ -2948,6 +3065,7 @@ void HistoryWidget::updateControlsVisibility() { _attachEmoji.hide(); _kbShow.hide(); _kbHide.hide(); + _cmdStart.hide(); _attachType.hide(); _emojiPan.hide(); _replyForwardPreviewCancel.hide(); @@ -3302,6 +3420,7 @@ void HistoryWidget::onSend(bool ctrlShiftEnter, MsgId replyTo) { if (!_attachMention.isHidden()) _attachMention.hideStart(); if (!_attachType.isHidden()) _attachType.hideStart(); if (!_emojiPan.isHidden()) _emojiPan.hideStart(); + } else if (App::main()->hasForwardingItems()) { App::main()->readServerHistory(hist, false); hist->loadAround(0); @@ -3311,6 +3430,8 @@ void HistoryWidget::onSend(bool ctrlShiftEnter, MsgId replyTo) { if (replyTo < 0) cancelReply(lastKeyboardUsed); if (_previewData && _previewData->pendingTill) previewCancel(); _field.setFocus(); + + if (!_keyboard.hasMarkup() && _keyboard.forceReply() && !_kbReplyTo) onKbToggle(); } void HistoryWidget::onBotStart() { @@ -3326,7 +3447,7 @@ void HistoryWidget::onBotStart() { MTP::send(MTPmessages_StartBot(histPeer->asUser()->inputUser, MTP_int(0), MTP_long(randomId), MTP_string(token)), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), App::main()->rpcFail(&MainWidget::addParticipantFail, histPeer->asUser())); histPeer->asUser()->botInfo->startToken = QString(); - if (_keyboard.hasMarkup() || _keyboard.forceReply()) { + if (_keyboard.hasMarkup()) { if (_keyboard.singleUse() && _keyboard.forMsgId() == hist->lastKeyboardId && hist->lastKeyboardUsed) _kbWasHidden = true; if (!_kbWasHidden) _kbShown = _keyboard.hasMarkup(); } @@ -3415,6 +3536,7 @@ void HistoryWidget::animShow(const QPixmap &bgAnimCache, const QPixmap &bgAnimTo _attachMention.hide(); _kbShow.hide(); _kbHide.hide(); + _cmdStart.hide(); _field.hide(); _replyForwardPreviewCancel.hide(); _send.hide(); @@ -3783,10 +3905,26 @@ void HistoryWidget::updateDragAreas() { } bool HistoryWidget::isBotStart() const { - if (histPeer->chat || !histPeer->asUser()->botInfo) return false; + if (!hist || !histPeer || histPeer->chat || !histPeer->asUser()->botInfo) return false; return !histPeer->asUser()->botInfo->startToken.isEmpty() || (hist->isEmpty() && !hist->lastMsg); } +bool HistoryWidget::updateCmdStartShown() { + bool cmdStartShown = false; + if (hist && histPeer && ((histPeer->chat && histPeer->asChat()->botStatus > 0) || (!histPeer->chat && histPeer->asUser()->botInfo))) { + if (!isBotStart() && !_keyboard.hasMarkup() && !_keyboard.forceReply()) { + if (_field.getLastText().isEmpty()) { + cmdStartShown = true; + } + } + } + if (_cmdStartShown != cmdStartShown) { + _cmdStartShown = cmdStartShown; + return true; + } + return false; +} + void HistoryWidget::dropEvent(QDropEvent *e) { _attachDrag = DragStateNone; updateDragAreas(); @@ -3805,20 +3943,29 @@ void HistoryWidget::onDocumentDrop(QDropEvent *e) { void HistoryWidget::onKbToggle(bool manual) { if (_kbShown || _kbReplyTo) { _kbHide.hide(); - _kbShow.show(); - _kbScroll.hide(); - _kbShown = false; + if (_kbShown) { + _kbShow.show(); + if (manual) _kbWasHidden = true; - _field.setMaxHeight(st::maxFieldHeight); + _kbScroll.hide(); + _kbShown = false; - _kbReplyTo = 0; - if (!App::main()->hasForwardingItems() && (!_previewData || _previewData->pendingTill < 0) && !_replyToId) { - _replyForwardPreviewCancel.hide(); + _field.setMaxHeight(st::maxFieldHeight); + + _kbReplyTo = 0; + if (!App::main()->hasForwardingItems() && (!_previewData || _previewData->pendingTill < 0) && !_replyToId) { + _replyForwardPreviewCancel.hide(); + } + } else { + if (hist) { + hist->clearLastKeyboard(); + } + updateBotKeyboard(); } - if (manual) _kbWasHidden = true; } else if (!_keyboard.hasMarkup() && _keyboard.forceReply()) { _kbHide.hide(); _kbShow.hide(); + _cmdStart.show(); _kbScroll.hide(); _kbShown = false; @@ -3857,6 +4004,11 @@ void HistoryWidget::onKbToggle(bool manual) { updateField(); } +void HistoryWidget::onCmdStart() { + setFieldText(qsl("/")); + _field.moveCursor(QTextCursor::End); +} + void HistoryWidget::onPhotoDrop(QDropEvent *e) { if (!hist) return; @@ -4029,6 +4181,7 @@ void HistoryWidget::onFieldResize() { _attachEmoji.move(_send.x() - _attachEmoji.width(), height() - kbh - _attachEmoji.height()); _kbShow.move(_attachEmoji.x() - _kbShow.width(), height() - kbh - _kbShow.height()); _kbHide.move(_attachEmoji.x(), _attachEmoji.y()); + _cmdStart.move(_attachEmoji.x() - _cmdStart.width(), height() - kbh - _cmdStart.height()); _attachType.move(0, _attachDocument.y() - _attachType.height()); _emojiPan.move(width() - _emojiPan.width(), _attachEmoji.y() - _emojiPan.height()); @@ -4391,7 +4544,8 @@ void HistoryWidget::resizeEvent(QResizeEvent *e) { _replyForwardPreviewCancel.move(width() - _replyForwardPreviewCancel.width(), _field.y() - st::sendPadding - _replyForwardPreviewCancel.height()); updateListSize(); - _field.resize(width() - _send.width() - _attachDocument.width() - _attachEmoji.width() - ((_kbShown || (!_keyboard.hasMarkup() && !_keyboard.forceReply())) ? 0 : _kbShow.width()), _field.height()); + bool kbShowShown = hist && !_kbShown && _keyboard.hasMarkup(); + _field.resize(width() - _send.width() - _attachDocument.width() - _attachEmoji.width() - (kbShowShown ? _kbShow.width() : 0) - (_cmdStartShown ? _cmdStart.width() : 0), _field.height()); _toHistoryEnd.move((width() - _toHistoryEnd.width()) / 2, _scroll.y() + _scroll.height() - _toHistoryEnd.height() - st::historyToEndSkip); @@ -4400,6 +4554,7 @@ void HistoryWidget::resizeEvent(QResizeEvent *e) { _attachEmoji.move(_send.x() - _attachEmoji.width(), height() - kbh - _attachEmoji.height()); _kbShow.move(_attachEmoji.x() - _kbShow.width(), height() - kbh - _kbShow.height()); _kbHide.move(_attachEmoji.x(), _attachEmoji.y()); + _cmdStart.move(_attachEmoji.x() - _cmdStart.width(), height() - kbh - _cmdStart.height()); _attachType.move(0, _attachDocument.y() - _attachType.height()); _emojiPan.move(width() - _emojiPan.width(), _attachEmoji.y() - _emojiPan.height()); @@ -4575,11 +4730,12 @@ void HistoryWidget::updateBotKeyboard() { } else { changed = _keyboard.updateMarkup(hist->lastKeyboardId ? App::histItemById(hist->lastKeyboardId) : 0); } + updateCmdStartShown(); if (!changed) return; bool hasMarkup = _keyboard.hasMarkup(), forceReply = _keyboard.forceReply() && !_replyTo; if (hasMarkup || forceReply) { - if (_keyboard.singleUse() && _keyboard.forMsgId() == hist->lastKeyboardId && hist->lastKeyboardUsed) _kbWasHidden = true; + if (_keyboard.singleUse() && _keyboard.hasMarkup() && _keyboard.forMsgId() == hist->lastKeyboardId && hist->lastKeyboardUsed) _kbWasHidden = true; if (!isBotStart() && (wasVisible || _replyTo || (_field.getLastText().isEmpty() && !_kbWasHidden))) { if (!_showAnim.animating()) { if (hasMarkup) { @@ -4592,6 +4748,7 @@ void HistoryWidget::updateBotKeyboard() { _kbHide.hide(); } _kbShow.hide(); + _cmdStart.hide(); } int32 maxh = hasMarkup ? qMin(_keyboard.height(), int(st::maxFieldHeight) - (int(st::maxFieldHeight) / 2)) : 0; _field.setMaxHeight(st::maxFieldHeight - maxh); @@ -4608,6 +4765,7 @@ void HistoryWidget::updateBotKeyboard() { _attachEmoji.show(); _kbHide.hide(); _kbShow.show(); + _cmdStart.hide(); } _field.setMaxHeight(st::maxFieldHeight); _kbShown = false; @@ -4622,6 +4780,7 @@ void HistoryWidget::updateBotKeyboard() { _attachEmoji.show(); _kbHide.hide(); _kbShow.hide(); + _cmdStart.show(); } _field.setMaxHeight(st::maxFieldHeight); _kbShown = false; @@ -4822,8 +4981,9 @@ void HistoryWidget::cancelReply(bool lastKeyboardUsed) { onDraftSave(); } if (_keyboard.singleUse() && _keyboard.forceReply() && lastKeyboardUsed) { - if (_kbReplyTo) onKbToggle(false); - hist->lastKeyboardUsed = true; + if (_kbReplyTo) { + onKbToggle(false); + } } } @@ -4979,6 +5139,11 @@ void HistoryWidget::onFullPeerUpdated(PeerData *data) { checkMentionDropdown(); _list->updateBotInfo(); } + if (updateCmdStartShown()) { + updateControlsVisibility(); + resizeEvent(0); + update(); + } } void HistoryWidget::peerUpdated(PeerData *data) { @@ -5096,7 +5261,7 @@ void HistoryWidget::updateTopBarSelection() { updateControlsVisibility(); updateListSize(); if (!App::wnd()->layerShown() && !App::passcoded()) { - if (_selCount || _recording || isBotStart()) { + if (_selCount || (_list && _list->wasSelectedText()) || _recording || isBotStart()) { _list->setFocus(); } else { _field.setFocus(); diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index 2725941c1..bfdb609a8 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -81,6 +81,8 @@ public: void updateBotInfo(bool recount = true); + bool wasSelectedText() const; + ~HistoryList(); public slots: @@ -115,7 +117,6 @@ private: HistoryItem *prevItem(HistoryItem *item); HistoryItem *nextItem(HistoryItem *item); void updateDragSelection(HistoryItem *dragSelFrom, HistoryItem *dragSelTo, bool dragSelecting, bool force = false); - void applyDragSelection(); History *hist; @@ -133,6 +134,9 @@ private: Qt::CursorShape _cursor; typedef QMap SelectedItems; SelectedItems _selected; + void applyDragSelection(); + void applyDragSelection(SelectedItems *toItems) const; + enum DragAction { NoDrag = 0x00, PrepareDrag = 0x01, @@ -154,6 +158,7 @@ private: HistoryItem *_dragSelFrom, *_dragSelTo; bool _dragSelecting; + bool _wasSelectedText; // was some text selected in current drag action bool _touchScroll, _touchSelect, _touchInProgress; QPoint _touchStart, _touchPrevPos, _touchPos; @@ -460,6 +465,8 @@ public: bool eventFilter(QObject *obj, QEvent *e); void updateBotKeyboard(); + DragState getDragState(const QMimeData *d); + ~HistoryWidget(); signals: @@ -506,6 +513,7 @@ public slots: void onDocumentDrop(QDropEvent *e); void onKbToggle(bool manual = true); + void onCmdStart(); void onPhotoReady(); void onSendConfirmed(); @@ -514,6 +522,7 @@ public slots: void showPeer(const PeerId &peer, MsgId msgId = 0, bool force = false, bool leaveActive = false); void clearLoadingAround(); void activate(); + void onMentionHashtagOrBotCommandInsert(QString str); void onTextChange(); void onStickerSend(DocumentData *sticker); @@ -591,7 +600,6 @@ private: void setFieldText(const QString &text); QStringList getMediasFromMime(const QMimeData *d); - DragState getDragState(const QMimeData *d); void updateDragAreas(); @@ -616,9 +624,11 @@ private: MentionsDropdown _attachMention; bool isBotStart() const; + bool updateCmdStartShown(); FlatButton _send, _botStart; - IconedButton _attachDocument, _attachPhoto, _attachEmoji, _kbShow, _kbHide; + IconedButton _attachDocument, _attachPhoto, _attachEmoji, _kbShow, _kbHide, _cmdStart; + bool _cmdStartShown; MessageField _field; Animation _recordAnim, _recordingAnim; bool _recording, _inRecord, _inField, _inReply; diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index a0a4e3acf..03750f421 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -694,6 +694,10 @@ void MainWidget::dialogsActivate() { dialogs.activate(); } +DragState MainWidget::getDragState(const QMimeData *mime) { + return history.getDragState(mime); +} + bool MainWidget::leaveChatFailed(PeerData *peer, const RPCError &error) { if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false; diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index 2289a597a..c0ca4cc7a 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -262,6 +262,8 @@ public: void focusPeerSelect(); void dialogsActivate(); + DragState getDragState(const QMimeData *mime); + bool leaveChatFailed(PeerData *peer, const RPCError &e); void deleteHistory(PeerData *peer, const MTPUpdates &updates); void deleteHistoryPart(PeerData *peer, const MTPmessages_AffectedHistory &result); diff --git a/Telegram/SourceFiles/profilewidget.cpp b/Telegram/SourceFiles/profilewidget.cpp index 295c2cb1f..3f639d777 100644 --- a/Telegram/SourceFiles/profilewidget.cpp +++ b/Telegram/SourceFiles/profilewidget.cpp @@ -300,7 +300,6 @@ void ProfileInner::onMediaAudios() { } void ProfileInner::onInvitationLink() { - DEBUG_LOG(("Setting text to clipboard from invite url: %1").arg(_peerChat->invitationUrl)); QApplication::clipboard()->setText(_peerChat->invitationUrl); App::wnd()->showLayer(new ConfirmBox(lang(lng_group_invite_copied), true)); } @@ -512,7 +511,7 @@ void ProfileInner::paintEvent(QPaintEvent *e) { p.setPen(st::black->p); p.drawText(_left + st::profilePhotoSize + st::profileStatusLeft, top + st::profileStatusTop + st::linkFont->ascent, '@' + _peerUser->username); } - p.setPen((_peerUser && App::onlineColorUse(_peerUser->onlineTill, l_time) ? st::profileOnlineColor : st::profileOfflineColor)->p); + p.setPen((_peerUser && App::onlineColorUse(_peerUser, l_time) ? st::profileOnlineColor : st::profileOfflineColor)->p); p.drawText(_left + st::profilePhotoSize + st::profileStatusLeft, top + addbyname + st::profileStatusTop + st::linkFont->ascent, _onlineText); if (_chatAdmin && !_peerChat->invitationUrl.isEmpty()) { p.setPen(st::black->p); @@ -643,7 +642,7 @@ void ProfileInner::paintEvent(QPaintEvent *e) { p.setFont(st::linkFont->f); data->name.drawElided(p, _left + st::profileListPhotoSize + st::profileListPadding.width(), top + st::profileListNameTop, _width - _kickWidth - st::profileListPadding.width() - st::profileListPhotoSize - st::profileListPadding.width()); p.setFont(st::profileSubFont->f); - p.setPen((App::onlineColorUse(user->onlineTill, l_time) ? st::profileOnlineColor : st::profileOfflineColor)->p); + p.setPen((App::onlineColorUse(user, l_time) ? st::profileOnlineColor : st::profileOfflineColor)->p); p.drawText(_left + st::profileListPhotoSize + st::profileListPadding.width(), top + st::profileListPadding.height() + st::profileListPhotoSize - st::profileListStatusBottom, data->online); if (data->cankick) { @@ -906,12 +905,10 @@ void ProfileInner::onMenuDestroy(QObject *obj) { } void ProfileInner::onCopyPhone() { - DEBUG_LOG(("Setting text to clipboard from user phone: %1").arg(_phoneText)); QApplication::clipboard()->setText(_phoneText); } void ProfileInner::onCopyUsername() { - DEBUG_LOG(("Setting text to clipboard from username: @%1").arg(_peerUser->username)); QApplication::clipboard()->setText('@' + _peerUser->username); } diff --git a/Telegram/SourceFiles/structs.cpp b/Telegram/SourceFiles/structs.cpp index 791e35f20..1031af76e 100644 --- a/Telegram/SourceFiles/structs.cpp +++ b/Telegram/SourceFiles/structs.cpp @@ -258,6 +258,8 @@ void UserData::nameUpdated() { } void UserData::madeAction() { + if (botInfo || isServiceUser(id)) return; + int32 t = unixtime(); if (onlineTill <= 0 && -onlineTill < t) { onlineTill = -t - SetOnlineAfterActivity; diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index 6a96f9bfb..8aea00ec6 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.29 + 0.8.30 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index 598b2eb1c4917b5ef737a7d18b1566bff07a3d6f..c7e2775c06907a1c5186d82aa45d260299d33e4b 100644 GIT binary patch delta 61 zcmZ3Yy+nIM0WY&LgTdrtUPBPQc{y)C6FZQ>pa&G(D4@GJOMr_JNkDw^5<#KGO9WW} DpvPb^d82^t<}3j&MkE38$x8%<7B3NG F0RZW=4_*KO diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index dd2793ed6..a17f8fd68 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -1701,7 +1701,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.29; + CURRENT_PROJECT_VERSION = 0.8.30; DEBUG_INFORMATION_FORMAT = dwarf; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -1719,7 +1719,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 0.8.29; + CURRENT_PROJECT_VERSION = 0.8.30; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = fast; GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h; @@ -1745,10 +1745,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.29; + CURRENT_PROJECT_VERSION = 0.8.30; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DYLIB_COMPATIBILITY_VERSION = 0.8; - DYLIB_CURRENT_VERSION = 0.8.29; + DYLIB_CURRENT_VERSION = 0.8.30; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -1888,10 +1888,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.29; + CURRENT_PROJECT_VERSION = 0.8.30; DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 0.8; - DYLIB_CURRENT_VERSION = 0.8.29; + DYLIB_CURRENT_VERSION = 0.8.30; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; diff --git a/Telegram/Version.sh b/Telegram/Version.sh index 057ea19a4..f7ed0ea26 100755 --- a/Telegram/Version.sh +++ b/Telegram/Version.sh @@ -1,2 +1,2 @@ -echo 8029 0.8.29 1 +echo 8030 0.8.30 0 # AppVersion AppVersionStr DevChannel From 3f6664c82add4a9324a367da813051306e7c4649 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 24 Jun 2015 21:40:32 +0300 Subject: [PATCH 009/121] version 0.8.30.dev fixed commands list --- Telegram/SourceFiles/dropdown.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Telegram/SourceFiles/dropdown.cpp b/Telegram/SourceFiles/dropdown.cpp index 553882543..cf7dbc30b 100644 --- a/Telegram/SourceFiles/dropdown.cpp +++ b/Telegram/SourceFiles/dropdown.cpp @@ -2794,8 +2794,10 @@ void MentionsDropdown::updateFiltered(bool toDown) { for (MentionRows::const_iterator i = _chat->lastAuthors.cbegin(), e = _chat->lastAuthors.cend(); i != e; ++i) { UserData *user = *i; if (!user->botInfo) continue; + if (!bots.contains(user)) continue; if (!user->botInfo->inited) App::api()->requestFullPeer(user); if (user->botInfo->commands.isEmpty()) continue; + bots.remove(user); for (int32 j = 0, l = user->botInfo->commands.size(); j < l; ++j) { if (_filter.size() > 1) { QString toFilter = (hasUsername || botStatus == 0 || botStatus == 2) ? user->botInfo->commands.at(j).command + '@' + user->username : user->botInfo->commands.at(j).command; @@ -2803,9 +2805,6 @@ void MentionsDropdown::updateFiltered(bool toDown) { } crows.push_back(qMakePair(user, user->botInfo->commands.at(j))); } - if (!bots.isEmpty()) { - bots.remove(user); - } } } if (!bots.isEmpty()) { From 88c44caf9d4e8ce11516acc5bb175a7d08722c85 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 24 Jun 2015 23:05:14 +0300 Subject: [PATCH 010/121] 0.8.31.dev version ready --- Telegram/PrepareWin.bat | 10 +++++----- Telegram/SourceFiles/application.cpp | 4 ++-- Telegram/SourceFiles/config.h | 6 +++--- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 ++++++------ Telegram/Version.sh | 2 +- 7 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index 042967670..e1a9c96d8 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,10 +1,10 @@ @echo OFF -set "AppVersion=8030" -set "AppVersionStrSmall=0.8.30" -set "AppVersionStr=0.8.30" -set "AppVersionStrFull=0.8.30.0" -set "DevChannel=0" +set "AppVersion=8031" +set "AppVersionStrSmall=0.8.31" +set "AppVersionStr=0.8.31" +set "AppVersionStrFull=0.8.31.0" +set "DevChannel=1" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index a6ddaf945..0af586154 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -640,8 +640,8 @@ void Application::checkMapVersion() { psRegisterCustomScheme(); if (Local::oldMapVersion()) { QString versionFeatures; - if (DevChannel && Local::oldMapVersion() < 8029) { - versionFeatures = lang(lng_new_version_minor);// QString::fromUtf8("\xe2\x80\x94 IPv6 connections support\n\xe2\x80\x94 Bug fixes and minor stuff");// .replace('@', qsl("@") + QChar(0x200D)); + if (DevChannel && Local::oldMapVersion() < 8031) { + versionFeatures = QString::fromUtf8("\xe2\x80\x94 Bots support using the new bot API\n\xe2\x80\x94 Drag-n-drop selected text and links from messages\n\xe2\x80\x94 Forward selected messages by drag-n-drop");// .replace('@', qsl("@") + QChar(0x200D)); } else if (!DevChannel && Local::oldMapVersion() < 8030) { versionFeatures = lng_new_version_text(lt_blog_link, qsl("https://telegram.org/blog/bot-revolution"));// lang(lng_new_version_text).trimmed(); } diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index da88b4608..f8b83c672 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,9 +17,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8030; -static const wchar_t *AppVersionStr = L"0.8.30"; -static const bool DevChannel = false; +static const int32 AppVersion = 8031; +static const wchar_t *AppVersionStr = L"0.8.31"; +static const bool DevChannel = true; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index 8aea00ec6..29cd45c3f 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.30 + 0.8.31 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index c7e2775c06907a1c5186d82aa45d260299d33e4b..26a9199d7e9ed586ad357d5140439a06772cf643 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_R)3 diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index a17f8fd68..355b117c6 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -1701,7 +1701,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.30; + CURRENT_PROJECT_VERSION = 0.8.31; DEBUG_INFORMATION_FORMAT = dwarf; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -1719,7 +1719,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 0.8.30; + CURRENT_PROJECT_VERSION = 0.8.31; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = fast; GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h; @@ -1745,10 +1745,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.30; + CURRENT_PROJECT_VERSION = 0.8.31; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DYLIB_COMPATIBILITY_VERSION = 0.8; - DYLIB_CURRENT_VERSION = 0.8.30; + DYLIB_CURRENT_VERSION = 0.8.31; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -1888,10 +1888,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.30; + CURRENT_PROJECT_VERSION = 0.8.31; DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 0.8; - DYLIB_CURRENT_VERSION = 0.8.30; + DYLIB_CURRENT_VERSION = 0.8.31; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; diff --git a/Telegram/Version.sh b/Telegram/Version.sh index f7ed0ea26..fed753d6e 100755 --- a/Telegram/Version.sh +++ b/Telegram/Version.sh @@ -1,2 +1,2 @@ -echo 8030 0.8.30 0 +echo 8031 0.8.31 1 # AppVersion AppVersionStr DevChannel From 890352ef977c92cbc4436851880330d61ea76e50 Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 25 Jun 2015 13:12:38 +0300 Subject: [PATCH 011/121] version 0.8.32 crashfix + ipv6 disabled because of KIS --- Telegram/PrepareWin.bat | 10 +++++----- Telegram/SourceFiles/config.h | 6 +++--- Telegram/SourceFiles/gui/text.cpp | 11 +++++------ Telegram/SourceFiles/gui/text.h | 3 +++ .../SourceFiles/mtproto/mtpConnection.cpp | 2 +- Telegram/SourceFiles/structs.cpp | 3 +-- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 ++++++------ Telegram/Version.sh | 2 +- 10 files changed, 26 insertions(+), 25 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index e1a9c96d8..997f54058 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,10 +1,10 @@ @echo OFF -set "AppVersion=8031" -set "AppVersionStrSmall=0.8.31" -set "AppVersionStr=0.8.31" -set "AppVersionStrFull=0.8.31.0" -set "DevChannel=1" +set "AppVersion=8032" +set "AppVersionStrSmall=0.8.32" +set "AppVersionStr=0.8.32" +set "AppVersionStrFull=0.8.32.0" +set "DevChannel=0" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index f8b83c672..767eba9eb 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,9 +17,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8031; -static const wchar_t *AppVersionStr = L"0.8.31"; -static const bool DevChannel = true; +static const int32 AppVersion = 8032; +static const wchar_t *AppVersionStr = L"0.8.32"; +static const bool DevChannel = false; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; diff --git a/Telegram/SourceFiles/gui/text.cpp b/Telegram/SourceFiles/gui/text.cpp index 3ff93f7e5..d1de1358f 100644 --- a/Telegram/SourceFiles/gui/text.cpp +++ b/Telegram/SourceFiles/gui/text.cpp @@ -863,7 +863,7 @@ public: } void draw(int32 left, int32 top, int32 w, style::align align, int32 yFrom, int32 yTo, uint16 selectedFrom = 0, uint16 selectedTo = 0) { - if (_t->_blocks.isEmpty()) return; + if (_t->isEmpty()) return; _blocksSize = _t->_blocks.size(); if (!_textStyle) _initDefault(); @@ -1043,7 +1043,7 @@ public: } void drawElided(int32 left, int32 top, int32 w, style::align align, int32 lines, int32 yFrom, int32 yTo, int32 removeFromEnd) { - if (lines <= 0) return; + if (lines <= 0 || _t->isNull()) return; if (yTo < 0 || (lines - 1) * _t->_font->height < yTo) { yTo = lines * _t->_font->height; @@ -1057,7 +1057,7 @@ public: _lnkX = x; _lnkY = y; _lnkResult = &_zeroLnk; - if (_lnkX >= 0 && _lnkX < w && _lnkY >= 0) { + if (!_t->isNull() && _lnkX >= 0 && _lnkX < w && _lnkY >= 0) { draw(0, 0, w, align, _lnkY, _lnkY + 1); } return *_lnkResult; @@ -1067,7 +1067,7 @@ public: lnk = TextLinkPtr(); inText = false; - if (x >= 0 && x < w && y >= 0) { + if (!_t->isNull() && x >= 0 && x < w && y >= 0) { _lnkX = x; _lnkY = y; _lnkResult = &lnk; @@ -1081,8 +1081,7 @@ public: symbol = 0; after = false; upon = false; - - if (y >= 0) { + if (!_t->isNull() && y >= 0) { _lnkX = x; _lnkY = y; _getSymbol = &symbol; diff --git a/Telegram/SourceFiles/gui/text.h b/Telegram/SourceFiles/gui/text.h index e48417d02..cca0de8e0 100644 --- a/Telegram/SourceFiles/gui/text.h +++ b/Telegram/SourceFiles/gui/text.h @@ -485,6 +485,9 @@ public: bool isEmpty() const { return _text.isEmpty(); } + bool isNull() const { + return !_font; + } QString original(uint16 selectedFrom = 0, uint16 selectedTo = 0xFFFF, bool expandLinks = true) const; bool lastDots(int32 dots, int32 maxdots = 3) { // hack for typing animation diff --git a/Telegram/SourceFiles/mtproto/mtpConnection.cpp b/Telegram/SourceFiles/mtproto/mtpConnection.cpp index 6b34c2780..7b85e6732 100644 --- a/Telegram/SourceFiles/mtproto/mtpConnection.cpp +++ b/Telegram/SourceFiles/mtproto/mtpConnection.cpp @@ -1800,7 +1800,7 @@ void MTProtoConnectionPrivate::socketStart(bool afterConfig) { if (afterConfig && (_conn4 || _conn6)) return; - createConn(!noIPv4, !noIPv6); + createConn(!noIPv4, false/*!noIPv6*/); retryTimer.stop(); _waitForConnectedTimer.stop(); diff --git a/Telegram/SourceFiles/structs.cpp b/Telegram/SourceFiles/structs.cpp index 1031af76e..13615b966 100644 --- a/Telegram/SourceFiles/structs.cpp +++ b/Telegram/SourceFiles/structs.cpp @@ -126,10 +126,10 @@ void PeerData::updateName(const QString &newName, const QString &newNameOrPhone, NameFirstChars oldChars = chars; fillNames(); App::history(id)->updateNameText(); + nameUpdated(); if (App::main()) { emit App::main()->peerNameChanged(this, oldNames, oldChars); } - nameUpdated(); } void UserData::setPhoto(const MTPUserProfilePhoto &p) { @@ -198,7 +198,6 @@ void UserData::setName(const QString &first, const QString &last, const QString void UserData::setPhone(const QString &newPhone) { phone = newPhone; - ++nameVersion; } void UserData::setBotInfoVersion(int32 version) { diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index 29cd45c3f..5b11e71ea 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.31 + 0.8.32 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index 26a9199d7e9ed586ad357d5140439a06772cf643..94fdb429a469515c3d324e5344f695d1bbb2b008 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_B Date: Thu, 25 Jun 2015 21:04:40 +0300 Subject: [PATCH 012/121] added IPv6 setting checkbox in Connection Type box in Settings, version 0.8.33.dev --- Telegram/DeployLinux.sh | 15 +- Telegram/DeployLinux32.sh | 15 +- Telegram/DeployMacWin.sh | 62 +++--- Telegram/DeployWin.sh | 43 ++-- Telegram/PrepareLinux.sh | 28 +-- Telegram/PrepareLinux32.sh | 28 +-- Telegram/PrepareMac.sh | 31 +-- Telegram/PrepareWin.bat | 38 ++-- Telegram/Resources/lang.strings | 7 +- Telegram/SourceFiles/boxes/connectionbox.cpp | 33 +++- Telegram/SourceFiles/boxes/connectionbox.h | 1 + Telegram/SourceFiles/config.h | 6 +- Telegram/SourceFiles/dropdown.cpp | 4 +- Telegram/SourceFiles/historywidget.cpp | 2 +- Telegram/SourceFiles/localstorage.cpp | 11 +- .../SourceFiles/mtproto/mtpConnection.cpp | 184 ++++++++++++++---- Telegram/SourceFiles/mtproto/mtpConnection.h | 40 +++- Telegram/SourceFiles/settings.cpp | 5 + Telegram/SourceFiles/settings.h | 1 + Telegram/SourceFiles/settingswidget.cpp | 17 +- Telegram/SourceFiles/types.h | 5 +- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 +- Telegram/Version.sh | 4 +- 25 files changed, 405 insertions(+), 189 deletions(-) diff --git a/Telegram/DeployLinux.sh b/Telegram/DeployLinux.sh index 629f68693..db3478e4e 100755 --- a/Telegram/DeployLinux.sh +++ b/Telegram/DeployLinux.sh @@ -1,20 +1,21 @@ -AppVersion=`./Version.sh | awk -F " " '{print $1}'` -AppVersionStr=`./Version.sh | awk -F " " '{print $2}'` -DevChannel=`./Version.sh | awk -F " " '{print $3}'` +AppVersionStrMajor=`./Version.sh | awk -F " " '{print $1}'` +AppVersion=`./Version.sh | awk -F " " '{print $2}'` +AppVersionStr=`./Version.sh | awk -F " " '{print $3}'` +DevChannel=`./Version.sh | awk -F " " '{print $4}'` DevPostfix='' if [ "$DevChannel" != "0" ]; then DevPostfix='.dev' fi -if [ ! -f "./../Linux/Release/deploy/$AppVersionStr$DevPostfix/tlinuxupd$AppVersion" ]; then +if [ ! -f "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tlinuxupd$AppVersion" ]; then echo "tlinuxupd$AppVersion not found!"; exit 1 fi -if [ ! -f "./../Linux/Release/deploy/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.tar.xz" ]; then +if [ ! -f "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.tar.xz" ]; then echo "tsetup.$AppVersionStr$DevPostfix.tar.xz not found!" exit 1 fi -scp ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/tlinuxupd$AppVersion tmaster:tdesktop/www/tlinux/ -scp ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.tar.xz tmaster:tdesktop/www/tlinux/ +scp ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tlinuxupd$AppVersion tmaster:tdesktop/www/tlinux/ +scp ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.tar.xz tmaster:tdesktop/www/tlinux/ diff --git a/Telegram/DeployLinux32.sh b/Telegram/DeployLinux32.sh index 3540d3cbd..3280df52b 100755 --- a/Telegram/DeployLinux32.sh +++ b/Telegram/DeployLinux32.sh @@ -1,21 +1,22 @@ -AppVersion=`./Version.sh | awk -F " " '{print $1}'` -AppVersionStr=`./Version.sh | awk -F " " '{print $2}'` -DevChannel=`./Version.sh | awk -F " " '{print $3}'` +AppVersionStrMajor=`./Version.sh | awk -F " " '{print $1}'` +AppVersion=`./Version.sh | awk -F " " '{print $2}'` +AppVersionStr=`./Version.sh | awk -F " " '{print $3}'` +DevChannel=`./Version.sh | awk -F " " '{print $4}'` DevPostfix='' if [ "$DevChannel" != "0" ]; then DevPostfix='.dev' fi -if [ ! -f "./../Linux/Release/deploy/$AppVersionStr$DevPostfix/tlinux32upd$AppVersion" ]; then +if [ ! -f "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tlinux32upd$AppVersion" ]; then echo "tlinux32upd$AppVersion not found!" exit 1 fi -if [ ! -f "./../Linux/Release/deploy/$AppVersionStr$DevPostfix/tsetup32.$AppVersionStr$DevPostfix.tar.xz" ]; then +if [ ! -f "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup32.$AppVersionStr$DevPostfix.tar.xz" ]; then echo "tsetup32.$AppVersionStr$DevPostfix.zip not found!" exit 1 fi -scp ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/tlinux32upd$AppVersion tmaster:tdesktop/www/tlinux32/ -scp ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/tsetup32.$AppVersionStr$DevPostfix.tar.xz tmaster:tdesktop/www/tlinux32/ +scp ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tlinux32upd$AppVersion tmaster:tdesktop/www/tlinux32/ +scp ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup32.$AppVersionStr$DevPostfix.tar.xz tmaster:tdesktop/www/tlinux32/ diff --git a/Telegram/DeployMacWin.sh b/Telegram/DeployMacWin.sh index 1e8a06b12..f0a47cacb 100755 --- a/Telegram/DeployMacWin.sh +++ b/Telegram/DeployMacWin.sh @@ -1,38 +1,54 @@ -AppVersion=`./Version.sh | awk -F " " '{print $1}'` -AppVersionStr=`./Version.sh | awk -F " " '{print $2}'` -DevChannel=`./Version.sh | awk -F " " '{print $3}'` +AppVersionStrMajor=`./Version.sh | awk -F " " '{print $1}'` +AppVersion=`./Version.sh | awk -F " " '{print $2}'` +AppVersionStr=`./Version.sh | awk -F " " '{print $3}'` +DevChannel=`./Version.sh | awk -F " " '{print $4}'` DevPostfix='' if [ "$DevChannel" != "0" ]; then DevPostfix='.dev' fi -if [ ! -f "./../Mac/Release/deploy/$AppVersionStr$DevPostfix/tmacupd$AppVersion" ]; then - echo "tmacupd$AppVersion not found!" - exit 1 +if [ ! -f "./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tmacupd$AppVersion" ]; then + echo "tmacupd$AppVersion not found!" + exit 1 fi -if [ ! -f "./../Mac/Release/deploy/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.dmg" ]; then - echo "tsetup.$AppVersionStr$DevPostfix.dmg not found!" - exit 1 +if [ ! -f "./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.dmg" ]; then + echo "tsetup.$AppVersionStr$DevPostfix.dmg not found!" + exit 1 fi -if [ ! -f "./../../tother/tsetup/tupdate$AppVersion" ]; then - echo "tupdate$AppVersion not found!" - exit 1 +if [ ! -f "./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tupdate$AppVersion" ]; then + echo "tupdate$AppVersion not found!" + exit 1 fi -if [ ! -f "./../../tother/tsetup/tportable.$AppVersionStr$DevPostfix.zip" ]; then - echo "tportable.$AppVersionStr$DevPostfix.zip not found!" - exit 1 +if [ ! -f "./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tportable.$AppVersionStr$DevPostfix.zip" ]; then + echo "tportable.$AppVersionStr$DevPostfix.zip not found!" + exit 1 fi -if [ ! -f "./../../tother/tsetup/tsetup.$AppVersionStr$DevPostfix.exe" ]; then - echo "tsetup.$AppVersionStr$DevPostfix.exe not found!" - exit 1 +if [ ! -f "./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.exe" ]; then + echo "tsetup.$AppVersionStr$DevPostfix.exe not found!" + exit 1 fi -scp ./../Mac/Release/deploy/$AppVersionStr$DevPostfix/tmacupd$AppVersion tmaster:tdesktop/www/tmac/ -scp ./../Mac/Release/deploy/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.dmg tmaster:tdesktop/www/tmac/ -scp ./../../tother/tsetup/tupdate$AppVersion tmaster:tdesktop/www/tsetup/ -scp ./../../tother/tsetup/tportable.$AppVersionStr$DevPostfix.zip tmaster:tdesktop/www/tsetup/ -scp ./../../tother/tsetup/tsetup.$AppVersionStr$DevPostfix.exe tmaster:tdesktop/www/tsetup/ +if [ ! -d "./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor" ]; then + mkdir "./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor" +fi + +if [ ! -d "./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix" ]; then + mkdir "./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix" +fi + +scp ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tmacupd$AppVersion tmaster:tdesktop/www/tmac/ +scp ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.dmg tmaster:tdesktop/www/tmac/ +scp ./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tupdate$AppVersion tmaster:tdesktop/www/tsetup/ +scp ./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tportable.$AppVersionStr$DevPostfix.zip tmaster:tdesktop/www/tsetup/ +scp ./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.exe tmaster:tdesktop/www/tsetup/ + +mv -rv ./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/ + +cp -v ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tmacupd$AppVersion ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ +cp -v ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.dmg ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ +cp -rv ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram.app.dSYM ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ + diff --git a/Telegram/DeployWin.sh b/Telegram/DeployWin.sh index 1284d6da5..8a667e9fe 100644 --- a/Telegram/DeployWin.sh +++ b/Telegram/DeployWin.sh @@ -1,26 +1,39 @@ -AppVersion=`./Version.sh | awk -F " " '{print $1}'` -AppVersionStr=`./Version.sh | awk -F " " '{print $2}'` -DevChannel=`./Version.sh | awk -F " " '{print $3}'` +AppVersionStrMajor=`./Version.sh | awk -F " " '{print $1}'` +AppVersion=`./Version.sh | awk -F " " '{print $2}'` +AppVersionStr=`./Version.sh | awk -F " " '{print $3}'` +DevChannel=`./Version.sh | awk -F " " '{print $4}'` DevPostfix='' if [ "$DevChannel" != "0" ]; then DevPostfix='.dev' fi -if [ ! -f "./../Win32/Deploy/deploy/$AppVersionStr$DevPostfix/tupdate$AppVersion" ]; then - echo "tupdate$AppVersion not found!" - exit 1 +if [ ! -f "./../Win32/Deploy/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tupdate$AppVersion" ]; then + echo "tupdate$AppVersion not found!" + exit 1 fi -if [ ! -f "./../Win32/Deploy/deploy/$AppVersionStr$DevPostfix/tportable.$AppVersionStr$DevPostfix.zip" ]; then - echo "tportable.$AppVersionStr$DevPostfix.zip not found!" - exit 1 +if [ ! -f "./../Win32/Deploy/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tportable.$AppVersionStr$DevPostfix.zip" ]; then + echo "tportable.$AppVersionStr$DevPostfix.zip not found!" + exit 1 fi -if [ ! -f "./../Win32/Deploy/deploy/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.exe" ]; then - echo "tsetup.$AppVersionStr$DevPostfix.exe not found!" - exit 1 +if [ ! -f "./../Win32/Deploy/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.exe" ]; then + echo "tsetup.$AppVersionStr$DevPostfix.exe not found!" + exit 1 fi -cp -v ./../Win32/Deploy/deploy/$AppVersionStr$DevPostfix/tupdate$AppVersion /z/TBuild/tother/tsetup/ -cp -v ./../Win32/Deploy/deploy/$AppVersionStr$DevPostfix/tportable.$AppVersionStr$DevPostfix.zip /z/TBuild/tother/tsetup/ -cp -v ./../Win32/Deploy/deploy/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.exe /z/TBuild/tother/tsetup/ +if [ ! -d "/z/TBuild/tother/tsetup/$AppVersionStrMajor" ]; then + mkdir "/z/TBuild/tother/tsetup/$AppVersionStrMajor" +fi + +if [ ! -d "/z/TBuild/tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix" ]; then + mkdir "/z/TBuild/tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix" +fi + +cp -v ./../Win32/Deploy/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tupdate$AppVersion /z/TBuild/tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ +cp -v ./../Win32/Deploy/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tportable.$AppVersionStr$DevPostfix.zip /z/TBuild/tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ +cp -v ./../Win32/Deploy/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.exe /z/TBuild/tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ +cp -v ./../Win32/Deploy/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram.pdb /z/TBuild/tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ +cp -v ./../Win32/Deploy/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Updater.exe /z/TBuild/tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ +cp -v ./../Win32/Deploy/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Updater.pdb /z/TBuild/tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ + diff --git a/Telegram/PrepareLinux.sh b/Telegram/PrepareLinux.sh index 530fe2885..053d7092b 100755 --- a/Telegram/PrepareLinux.sh +++ b/Telegram/PrepareLinux.sh @@ -1,6 +1,7 @@ -AppVersion=`./Version.sh | awk -F " " '{print $1}'` -AppVersionStr=`./Version.sh | awk -F " " '{print $2}'` -DevChannel=`./Version.sh | awk -F " " '{print $3}'` +AppVersionStrMajor=`./Version.sh | awk -F " " '{print $1}'` +AppVersion=`./Version.sh | awk -F " " '{print $2}'` +AppVersionStr=`./Version.sh | awk -F " " '{print $3}'` +DevChannel=`./Version.sh | awk -F " " '{print $4}'` DevPostfix='' DevParam='' if [ "$DevChannel" != "0" ]; then @@ -8,12 +9,12 @@ if [ "$DevChannel" != "0" ]; then DevParam='-dev' fi -if [ -d "./../Linux/Release/deploy/$AppVersionStr.dev" ]; then +if [ -d "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr.dev" ]; then echo "Deploy folder for version $AppVersionStr.dev already exists!" exit 1 fi -if [ -d "./../Linux/Release/deploy/$AppVersionStr" ]; then +if [ -d "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr" ]; then echo "Deploy folder for version $AppVersionStr already exists!" exit 1 fi @@ -40,12 +41,17 @@ echo "Packer done!" if [ ! -d "./../Linux/Release/deploy" ]; then mkdir "./../Linux/Release/deploy" fi + +if [ ! -d "./../Linux/Release/deploy/$AppVersionStrMajor" ]; then + mkdir "./../Linux/Release/deploy/$AppVersionStrMajor" +fi + echo "Copying Telegram, Updater and tlinuxupd$AppVersion to deploy/$AppVersionStr$DevPostfix.."; -mkdir "./../Linux/Release/deploy/$AppVersionStr$DevPostfix" -mkdir "./../Linux/Release/deploy/$AppVersionStr$DevPostfix/Telegram" -mv ./../Linux/Release/Telegram ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/Telegram/ -mv ./../Linux/Release/Updater ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/Telegram/ -mv ./../Linux/Release/tlinuxupd$AppVersion ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/ -cd ./../Linux/Release/deploy/$AppVersionStr$DevPostfix && tar -cJvf tsetup.$AppVersionStr$DevPostfix.tar.xz Telegram/ && cd ./../../../../Telegram +mkdir "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix" +mkdir "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram" +mv ./../Linux/Release/Telegram ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram/ +mv ./../Linux/Release/Updater ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram/ +mv ./../Linux/Release/tlinuxupd$AppVersion ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ +cd ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix && tar -cJvf tsetup.$AppVersionStr$DevPostfix.tar.xz Telegram/ && cd ./../../../../../Telegram echo "Version $AppVersionStr$DevPostfix prepared!"; diff --git a/Telegram/PrepareLinux32.sh b/Telegram/PrepareLinux32.sh index ead20e14f..e0165bda6 100755 --- a/Telegram/PrepareLinux32.sh +++ b/Telegram/PrepareLinux32.sh @@ -1,6 +1,7 @@ -AppVersion=`./Version.sh | awk -F " " '{print $1}'` -AppVersionStr=`./Version.sh | awk -F " " '{print $2}'` -DevChannel=`./Version.sh | awk -F " " '{print $3}'` +AppVersionStrMajor=`./Version.sh | awk -F " " '{print $1}'` +AppVersion=`./Version.sh | awk -F " " '{print $2}'` +AppVersionStr=`./Version.sh | awk -F " " '{print $3}'` +DevChannel=`./Version.sh | awk -F " " '{print $4}'` DevPostfix='' DevParam='' if [ "$DevChannel" != "0" ]; then @@ -8,12 +9,12 @@ if [ "$DevChannel" != "0" ]; then DevParam='-dev' fi -if [ -d "./../Linux/Release/deploy/$AppVersionStr.dev" ]; then +if [ -d "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr.dev" ]; then echo "Deploy folder for version $AppVersionStr.dev already exists!" exit 1 fi -if [ -d "./../Linux/Release/deploy/$AppVersionStr" ]; then +if [ -d "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr" ]; then echo "Deploy folder for version $AppVersionStr already exists!" exit 1 fi @@ -40,12 +41,17 @@ echo "Packer done!" if [ ! -d "./../Linux/Release/deploy" ]; then mkdir "./../Linux/Release/deploy" fi + +if [ ! -d "./../Linux/Release/deploy/$AppVersionStrMajor" ]; then + mkdir "./../Linux/Release/deploy/$AppVersionStrMajor" +fi + echo "Copying Telegram, Updater and tlinux32upd$AppVersion to deploy/$AppVersionStr$DevPostfix.."; -mkdir "./../Linux/Release/deploy/$AppVersionStr$DevPostfix" -mkdir "./../Linux/Release/deploy/$AppVersionStr$DevPostfix/Telegram" -mv ./../Linux/Release/Telegram ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/Telegram/ -mv ./../Linux/Release/Updater ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/Telegram/ -mv ./../Linux/Release/tlinux32upd$AppVersion ./../Linux/Release/deploy/$AppVersionStr$DevPostfix/ -cd ./../Linux/Release/deploy/$AppVersionStr$DevPostfix && tar -cJvf tsetup32.$AppVersionStr$DevPostfix.tar.xz Telegram/ && cd ./../../../../Telegram +mkdir "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix" +mkdir "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram" +mv ./../Linux/Release/Telegram ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram/ +mv ./../Linux/Release/Updater ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram/ +mv ./../Linux/Release/tlinux32upd$AppVersion ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ +cd ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix && tar -cJvf tsetup32.$AppVersionStr$DevPostfix.tar.xz Telegram/ && cd ./../../../../../Telegram echo "Version $AppVersionStr$DevPostfix prepared!"; diff --git a/Telegram/PrepareMac.sh b/Telegram/PrepareMac.sh index e641309c6..97ab64414 100755 --- a/Telegram/PrepareMac.sh +++ b/Telegram/PrepareMac.sh @@ -1,6 +1,7 @@ -AppVersion=`./Version.sh | awk -F " " '{print $1}'` -AppVersionStr=`./Version.sh | awk -F " " '{print $2}'` -DevChannel=`./Version.sh | awk -F " " '{print $3}'` +AppVersionStrMajor=`./Version.sh | awk -F " " '{print $1}'` +AppVersion=`./Version.sh | awk -F " " '{print $2}'` +AppVersionStr=`./Version.sh | awk -F " " '{print $3}'` +DevChannel=`./Version.sh | awk -F " " '{print $4}'` DevPostfix='' DevParam='' if [ "$DevChannel" != "0" ]; then @@ -12,12 +13,12 @@ echo "" echo "Preparing version $AppVersionStr$DevPostfix.." echo "" -if [ -d "./../Mac/Release/deploy/$AppVersionStr.dev" ]; then +if [ -d "./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr.dev" ]; then echo "Deploy folder for version $AppVersionStr.dev already exists!" exit 1 fi -if [ -d "./../Mac/Release/deploy/$AppVersionStr" ]; then +if [ -d "./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr" ]; then echo "Deploy folder for version $AppVersionStr already exists!" exit 1 fi @@ -73,19 +74,23 @@ hdiutil convert tsetup.dmg -format UDZO -imagekey zlib-level=9 -ov -o tsetup.$Ap cd ./../../Telegram cd ./../Mac/Release && ./Packer.app/Contents/MacOS/Packer -path Telegram.app -version $AppVersion $DevParam && cd ./../../Telegram -if [ ! -d "./../Mac/Release/deploy/" ]; then +if [ ! -d "./../Mac/Release/deploy" ]; then mkdir "./../Mac/Release/deploy" fi -echo "Copying Telegram.app and tmacupd$AppVersion to deploy/$AppVersionStr.."; -mkdir "./../Mac/Release/deploy/$AppVersionStr$DevPostfix" -mkdir "./../Mac/Release/deploy/$AppVersionStr$DevPostfix/Telegram" -cp -r ./../Mac/Release/Telegram.app ./../Mac/Release/deploy/$AppVersionStr$DevPostfix/Telegram/ -mv ./../Mac/Release/Telegram.app.dSYM ./../Mac/Release/deploy/$AppVersionStr$DevPostfix/ +if [ ! -d "./../Mac/Release/deploy/$AppVersionStrMajor" ]; then + mkdir "./../Mac/Release/deploy/$AppVersionStrMajor" +fi + +echo "Copying Telegram.app and tmacupd$AppVersion to deploy/$AppVersionStrMajor/$AppVersionStr.."; +mkdir "./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix" +mkdir "./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram" +cp -r ./../Mac/Release/Telegram.app ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram/ +mv ./../Mac/Release/Telegram.app.dSYM ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ rm ./../Mac/Release/Telegram.app/Contents/MacOS/Telegram rm ./../Mac/Release/Telegram.app/Contents/Frameworks/Updater rm -rf ./../Mac/Release/Telegram.app/Contents/_CodeSignature -mv ./../Mac/Release/tmacupd$AppVersion ./../Mac/Release/deploy/$AppVersionStr$DevPostfix/ -mv ./../Mac/Release/tsetup.$AppVersionStr$DevPostfix.dmg ./../Mac/Release/deploy/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.dmg +mv ./../Mac/Release/tmacupd$AppVersion ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ +mv ./../Mac/Release/tsetup.$AppVersionStr$DevPostfix.dmg ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.dmg echo "Version $AppVersionStr$DevPostfix prepared!"; diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index 997f54058..f2b7a03c1 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,10 +1,11 @@ @echo OFF -set "AppVersion=8032" -set "AppVersionStrSmall=0.8.32" -set "AppVersionStr=0.8.32" -set "AppVersionStrFull=0.8.32.0" -set "DevChannel=0" +set "AppVersionStrMajor=0.8" +set "AppVersion=8033" +set "AppVersionStrSmall=0.8.33" +set "AppVersionStr=0.8.33" +set "AppVersionStrFull=0.8.33.0" +set "DevChannel=1" if %DevChannel% neq 0 goto preparedev @@ -23,8 +24,8 @@ echo. echo Preparing version %AppVersionStr%%DevPostfix%.. echo. -if exist ..\Win32\Deploy\deploy\%AppVersionStr%\ goto error_exist1 -if exist ..\Win32\Deploy\deploy\%AppVersionStr%.dev\ goto error_exist2 +if exist ..\Win32\Deploy\deploy\%AppVersionStrMajor%\%AppVersionStr%\ goto error_exist1 +if exist ..\Win32\Deploy\deploy\%AppVersionStrMajor%\%AppVersionStr%.dev\ goto error_exist2 if exist ..\Win32\Deploy\tupdate%AppVersion% goto error_exist3 set "PATH=%PATH%;C:\Program Files\7-Zip;C:\Program Files (x86)\Inno Setup 5" @@ -46,17 +47,18 @@ call Packer.exe -version %AppVersion% -path Telegram.exe -path Updater.exe %DevP if %errorlevel% neq 0 goto error1 if not exist deploy mkdir deploy -mkdir deploy\%AppVersionStr%%DevPostfix% -mkdir deploy\%AppVersionStr%%DevPostfix%\Telegram +if not exist deploy\%AppVersionStrMajor% mkdir deploy\%AppVersionStrMajor% +mkdir deploy\%AppVersionStrMajor%\%AppVersionStr%%DevPostfix% +mkdir deploy\%AppVersionStrMajor%\%AppVersionStr%%DevPostfix%\Telegram -move Telegram.exe deploy\%AppVersionStr%%DevPostfix%\Telegram\ -move Updater.exe deploy\%AppVersionStr%%DevPostfix%\ -move Telegram.pdb deploy\%AppVersionStr%%DevPostfix%\ -move Updater.pdb deploy\%AppVersionStr%%DevPostfix%\ -move tsetup.%AppVersionStr%%DevPostfix%.exe deploy\%AppVersionStr%%DevPostfix%\ -move tupdate%AppVersion% deploy\%AppVersionStr%%DevPostfix%\ +move Telegram.exe deploy\%AppVersionStrMajor%\%AppVersionStr%%DevPostfix%\Telegram\ +move Updater.exe deploy\%AppVersionStrMajor%\%AppVersionStr%%DevPostfix%\ +move Telegram.pdb deploy\%AppVersionStrMajor%\%AppVersionStr%%DevPostfix%\ +move Updater.pdb deploy\%AppVersionStrMajor%\%AppVersionStr%%DevPostfix%\ +move tsetup.%AppVersionStr%%DevPostfix%.exe deploy\%AppVersionStrMajor%\%AppVersionStr%%DevPostfix%\ +move tupdate%AppVersion% deploy\%AppVersionStrMajor%\%AppVersionStr%%DevPostfix%\ -cd deploy\%AppVersionStr%%DevPostfix% +cd deploy\%AppVersionStrMajor%\%AppVersionStr%%DevPostfix% 7z a -mx9 tportable.%AppVersionStr%%DevPostfix%.zip Telegram\ if %errorlevel% neq 0 goto error2 @@ -64,11 +66,11 @@ echo . echo Version %AppVersionStr%%DevPostfix% is ready for deploy! echo . -cd ..\..\..\..\Telegram +cd ..\..\..\..\..\Telegram goto eof :error2 -cd ..\.. +cd ..\..\.. :error1 cd ..\..\Telegram echo ERROR occured! diff --git a/Telegram/Resources/lang.strings b/Telegram/Resources/lang.strings index 6a064f23f..377de19c8 100644 --- a/Telegram/Resources/lang.strings +++ b/Telegram/Resources/lang.strings @@ -301,13 +301,14 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_connection_type" = "Connection type:"; "lng_connection_auto_connecting" = "Default (connecting..)"; -"lng_connection_auto" = "Default ({type} used)"; -"lng_connection_http_proxy" = "HTTP with proxy"; -"lng_connection_tcp_proxy" = "TCP with proxy"; +"lng_connection_auto" = "Default ({transport} used)"; +"lng_connection_proxy_connecting" = "Connecting through proxy.."; +"lng_connection_proxy" = "{transport} with proxy"; "lng_connection_header" = "Connection type"; "lng_connection_auto_rb" = "Auto (TCP if available or HTTP)"; "lng_connection_http_proxy_rb" = "HTTP with custom http-proxy"; "lng_connection_tcp_proxy_rb" = "TCP with custom socks5-proxy"; +"lng_connection_try_ipv6" = "Try connecting through IPv6"; "lng_connection_host_ph" = "Hostname"; "lng_connection_port_ph" = "Port"; "lng_connection_user_ph" = "Username"; diff --git a/Telegram/SourceFiles/boxes/connectionbox.cpp b/Telegram/SourceFiles/boxes/connectionbox.cpp index 76a9c130b..07e2f8845 100644 --- a/Telegram/SourceFiles/boxes/connectionbox.cpp +++ b/Telegram/SourceFiles/boxes/connectionbox.cpp @@ -33,7 +33,8 @@ ConnectionBox::ConnectionBox() : _passwordInput(this, st::inpConnectionPassword, lang(lng_connection_password_ph), cConnectionProxy().password), _autoRadio(this, qsl("conn_type"), dbictAuto, lang(lng_connection_auto_rb), (cConnectionType() == dbictAuto)), _httpProxyRadio(this, qsl("conn_type"), dbictHttpProxy, lang(lng_connection_http_proxy_rb), (cConnectionType() == dbictHttpProxy)), - _tcpProxyRadio(this, qsl("conn_type"), dbictTcpProxy, lang(lng_connection_tcp_proxy_rb), (cConnectionType() == dbictTcpProxy)) { + _tcpProxyRadio(this, qsl("conn_type"), dbictTcpProxy, lang(lng_connection_tcp_proxy_rb), (cConnectionType() == dbictTcpProxy)), + _tryIPv6(this, lang(lng_connection_try_ipv6), cTryIPv6()) { connect(&_saveButton, SIGNAL(clicked()), this, SLOT(onSave())); connect(&_cancelButton, SIGNAL(clicked()), this, SLOT(onClose())); @@ -51,6 +52,7 @@ void ConnectionBox::hideAll() { _autoRadio.hide(); _httpProxyRadio.hide(); _tcpProxyRadio.hide(); + _tryIPv6.hide(); _hostInput.hide(); _portInput.hide(); @@ -65,8 +67,9 @@ void ConnectionBox::showAll() { _autoRadio.show(); _httpProxyRadio.show(); _tcpProxyRadio.show(); + _tryIPv6.show(); - int32 h = st::boxTitleHeight + st::connectionSkip + _autoRadio.height() + st::connectionSkip + _httpProxyRadio.height() + st::connectionSkip + _tcpProxyRadio.height() + st::connectionSkip; + int32 h = st::boxTitleHeight + st::connectionSkip + _autoRadio.height() + st::connectionSkip + _httpProxyRadio.height() + st::connectionSkip + _tcpProxyRadio.height() + st::connectionSkip + st::lineWidth + st::connectionSkip + _tryIPv6.height() + st::connectionSkip; if (_httpProxyRadio.checked() || _tcpProxyRadio.checked()) { h += 2 * st::boxPadding.top() + 2 * _hostInput.height(); _hostInput.show(); @@ -99,6 +102,9 @@ void ConnectionBox::paintEvent(QPaintEvent *e) { paintTitle(p, lang(lng_connection_header), true); + // paint separator + p.fillRect(st::boxPadding.left(), _tryIPv6.y() - st::connectionSkip - st::lineWidth, width() - st::boxPadding.left() - st::boxPadding.right(), st::lineWidth, st::scrollDef.shColor->b); + // paint shadow p.fillRect(0, height() - st::btnSelectCancel.height - st::scrollDef.bottomsh, width(), st::scrollDef.bottomsh, st::scrollDef.shColor->b); @@ -128,10 +134,11 @@ void ConnectionBox::resizeEvent(QResizeEvent *e) { _passwordInput.move(width() - st::boxPadding.right() - _passwordInput.width(), _userInput.y()); } - int32 buttony = (_tcpProxyRadio.checked() ? (_userInput.y() + _userInput.height()) : (_tcpProxyRadio.y() + _tcpProxyRadio.height())) + st::connectionSkip; + int32 tryipv6y = (_tcpProxyRadio.checked() ? (_userInput.y() + _userInput.height()) : (_tcpProxyRadio.y() + _tcpProxyRadio.height())) + st::connectionSkip + st::lineWidth + st::connectionSkip; + _tryIPv6.move(st::boxPadding.left(), tryipv6y); - _saveButton.move(width() - _saveButton.width(), buttony); - _cancelButton.move(0, buttony); + _saveButton.move(width() - _saveButton.width(), _tryIPv6.y() + _tryIPv6.height() + st::connectionSkip); + _cancelButton.move(0, _saveButton.y()); } void ConnectionBox::onChange() { @@ -172,8 +179,16 @@ void ConnectionBox::onSave() { QNetworkProxyFactory::setUseSystemConfiguration(false); QNetworkProxyFactory::setUseSystemConfiguration(true); } - Local::writeSettings(); - MTP::restart(); - reinitImageLinkManager(); - emit closed(); + if (cPlatform() == dbipWindows && cTryIPv6() != _tryIPv6.checked()) { + cSetTryIPv6(_tryIPv6.checked()); + Local::writeSettings(); + cSetRestarting(true); + cSetRestartingToSettings(true); + App::quit(); + } else { + Local::writeSettings(); + MTP::restart(); + reinitImageLinkManager(); + emit closed(); + } } diff --git a/Telegram/SourceFiles/boxes/connectionbox.h b/Telegram/SourceFiles/boxes/connectionbox.h index 1550ace95..0f5168620 100644 --- a/Telegram/SourceFiles/boxes/connectionbox.h +++ b/Telegram/SourceFiles/boxes/connectionbox.h @@ -47,4 +47,5 @@ private: PortInput _portInput; FlatInput _userInput, _passwordInput; FlatRadiobutton _autoRadio, _httpProxyRadio, _tcpProxyRadio; + FlatCheckbox _tryIPv6; }; diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 767eba9eb..e93ad0206 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,9 +17,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8032; -static const wchar_t *AppVersionStr = L"0.8.32"; -static const bool DevChannel = false; +static const int32 AppVersion = 8033; +static const wchar_t *AppVersionStr = L"0.8.33"; +static const bool DevChannel = true; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; diff --git a/Telegram/SourceFiles/dropdown.cpp b/Telegram/SourceFiles/dropdown.cpp index cf7dbc30b..9be6f8c1a 100644 --- a/Telegram/SourceFiles/dropdown.cpp +++ b/Telegram/SourceFiles/dropdown.cpp @@ -2857,13 +2857,13 @@ void MentionsDropdown::recount(bool toDown) { int32 h = (_rows.isEmpty() ? (_hrows.isEmpty() ? _crows.size() : _hrows.size()) : _rows.size()) * st::mentionHeight, oldst = _scroll.scrollTop(), st = oldst; if (_inner.height() != h) { - st += h - _inner.height(); +// st += h - _inner.height(); _inner.resize(width(), h); } if (h > _boundings.height()) h = _boundings.height(); if (h > 4.5 * st::mentionHeight) h = 4.5 * st::mentionHeight; if (height() != h) { - st += _scroll.height() - h; +// st += _scroll.height() - h; setGeometry(0, _boundings.height() - h, width(), h); _scroll.resize(width(), h); } else if (y() != _boundings.height() - h) { diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 5a09d0955..480c84563 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -1670,7 +1670,7 @@ bool BotKeyboard::updateMarkup(HistoryItem *to) { const ReplyMarkup::Commands &commands(markup.commands); if (!commands.isEmpty()) { - int32 i = 0, l = qMin(commands.size(), 32); + int32 i = 0, l = qMin(commands.size(), 512); _btns.reserve(l); for (; i != l; ++i) { const QList &row(commands.at(i)); diff --git a/Telegram/SourceFiles/localstorage.cpp b/Telegram/SourceFiles/localstorage.cpp index 9745126ba..60bac4642 100644 --- a/Telegram/SourceFiles/localstorage.cpp +++ b/Telegram/SourceFiles/localstorage.cpp @@ -736,6 +736,14 @@ namespace { }; } break; + case dbiTryIPv6: { + qint32 v; + stream >> v; + if (!_checkStreamStatus(stream)) return false; + + cSetTryIPv6(v == 1); + } break; + case dbiSeenTrayTooltip: { qint32 v; stream >> v; @@ -1789,7 +1797,7 @@ namespace Local { cSetDcOptions(dcOpts); } - quint32 size = 10 * (sizeof(quint32) + sizeof(qint32)); + quint32 size = 11 * (sizeof(quint32) + sizeof(qint32)); for (mtpDcOptions::const_iterator i = dcOpts.cbegin(), e = dcOpts.cend(); i != e; ++i) { size += sizeof(quint32) + sizeof(quint32) + sizeof(quint32); size += sizeof(quint32) + _stringSize(QString::fromUtf8(i->ip.data(), i->ip.size())); @@ -1827,6 +1835,7 @@ namespace Local { const ConnectionProxy &proxy(cConnectionProxy()); data.stream << proxy.host << qint32(proxy.port) << proxy.user << proxy.password; } + data.stream << quint32(dbiTryIPv6) << qint32(cTryIPv6()); TWindowPos pos(cWindowPos()); data.stream << quint32(dbiWindowPosition) << qint32(pos.x) << qint32(pos.y) << qint32(pos.w) << qint32(pos.h) << qint32(pos.moncrc) << qint32(pos.maximized); diff --git a/Telegram/SourceFiles/mtproto/mtpConnection.cpp b/Telegram/SourceFiles/mtproto/mtpConnection.cpp index 7b85e6732..413c04dc0 100644 --- a/Telegram/SourceFiles/mtproto/mtpConnection.cpp +++ b/Telegram/SourceFiles/mtproto/mtpConnection.cpp @@ -606,7 +606,7 @@ void MTPabstractTcpConnection::socketRead() { } MTPautoConnection::MTPautoConnection(QThread *thread) : status(WaitingBoth), -tcpNonce(MTP::nonce()), httpNonce(MTP::nonce()), _tcpTimeout(MTPMinReceiveDelay) { +tcpNonce(MTP::nonce()), httpNonce(MTP::nonce()), _tcpTimeout(MTPMinReceiveDelay), _flags(0) { moveToThread(thread); manager.moveToThread(thread); @@ -615,6 +615,7 @@ tcpNonce(MTP::nonce()), httpNonce(MTP::nonce()), _tcpTimeo httpStartTimer.moveToThread(thread); httpStartTimer.setSingleShot(true); connect(&httpStartTimer, SIGNAL(timeout()), this, SLOT(onHttpStart())); + tcpTimeoutTimer.moveToThread(thread); tcpTimeoutTimer.setSingleShot(true); connect(&tcpTimeoutTimer, SIGNAL(timeout()), this, SLOT(onTcpTimeoutTimer())); @@ -628,7 +629,7 @@ tcpNonce(MTP::nonce()), httpNonce(MTP::nonce()), _tcpTimeo void MTPautoConnection::onHttpStart() { if (status == HttpReady) { - DEBUG_LOG(("Connection Info: Http-transport chosen by timer")); + DEBUG_LOG(("Connection Info: HTTP/%1-transport chosen by timer").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4")); status = UsingHttp; sock.disconnectFromHost(); emit connected(); @@ -639,7 +640,7 @@ void MTPautoConnection::onSocketConnected() { if (status == HttpReady || status == WaitingBoth || status == WaitingTcp) { mtpBuffer buffer(_preparePQFake(tcpNonce)); - DEBUG_LOG(("Connection Info: sending fake req_pq through tcp transport")); + DEBUG_LOG(("Connection Info: sending fake req_pq through TCP/%1 transport").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4")); if (_tcpTimeout < 0) _tcpTimeout = -_tcpTimeout; tcpTimeoutTimer.start(_tcpTimeout); @@ -677,7 +678,7 @@ void MTPautoConnection::onSocketDisconnected() { } else if (status == WaitingTcp || status == UsingTcp) { emit disconnected(); } else if (status == HttpReady) { - DEBUG_LOG(("Connection Info: Http-transport chosen by socket disconnect")); + DEBUG_LOG(("Connection Info: HTTP/%1-transport chosen by socket disconnect").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4")); status = UsingHttp; emit connected(); } @@ -750,19 +751,20 @@ void MTPautoConnection::connectToServer(const QString &addr, int32 port, int32 f _addr = addr; _port = port; + _flags = flags; connect(&sock, SIGNAL(readyRead()), this, SLOT(socketRead())); sock.connectToHost(QHostAddress(_addr), _port); mtpBuffer buffer(_preparePQFake(httpNonce)); - DEBUG_LOG(("Connection Info: sending fake req_pq through http transport")); + DEBUG_LOG(("Connection Info: sending fake req_pq through HTTP/%1 transport").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4")); httpSend(buffer); } -bool MTPautoConnection::isConnected() { - return status != FinishedWork && !address.isEmpty(); +bool MTPautoConnection::isConnected() const { + return (status == UsingTcp) || (status == UsingHttp); } void MTPautoConnection::requestFinished(QNetworkReply *reply) { @@ -792,13 +794,14 @@ void MTPautoConnection::requestFinished(QNetworkReply *reply) { status = HttpReady; httpStartTimer.start(MTPTcpConnectionWaitTimeout); } else { - DEBUG_LOG(("Connection Info: Http-transport chosen by pq-response, awaited")); + DEBUG_LOG(("Connection Info: HTTP/%1-transport chosen by pq-response, awaited").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4")); status = UsingHttp; sock.disconnectFromHost(); emit connected(); } } } catch (Exception &e) { + DEBUG_LOG(("Connection Error: exception in parsing HTTP fake pq-responce, %1").arg(e.what())); if (status == WaitingBoth) { status = WaitingTcp; } else { @@ -834,7 +837,7 @@ void MTPautoConnection::socketPacket(mtpPrime *packet, uint32 size) { status = WaitingHttp; sock.disconnectFromHost(); } else if (status == HttpReady) { - DEBUG_LOG(("Connection Info: Http-transport chosen by bad tcp response, ready")); + DEBUG_LOG(("Connection Info: HTTP/%1-transport chosen by bad tcp response, ready").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4")); status = UsingHttp; sock.disconnectFromHost(); emit connected(); @@ -853,16 +856,17 @@ void MTPautoConnection::socketPacket(mtpPrime *packet, uint32 size) { MTPResPQ res_pq = _readPQFakeReply(data); const MTPDresPQ &res_pq_data(res_pq.c_resPQ()); if (res_pq_data.vnonce == tcpNonce) { - DEBUG_LOG(("Connection Info: Tcp-transport chosen by pq-response")); + DEBUG_LOG(("Connection Info: TCP/%1-transport chosen by pq-response").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4")); status = UsingTcp; emit connected(); } } catch (Exception &e) { + DEBUG_LOG(("Connection Error: exception in parsing TCP fake pq-responce, %1").arg(e.what())); if (status == WaitingBoth) { status = WaitingHttp; sock.disconnectFromHost(); } else if (status == HttpReady) { - DEBUG_LOG(("Connection Info: Http-transport chosen by bad tcp response, awaited")); + DEBUG_LOG(("Connection Info: HTTP/%1-transport chosen by bad tcp response, awaited").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4")); status = UsingHttp; sock.disconnectFromHost(); emit connected(); @@ -902,7 +906,7 @@ void MTPautoConnection::socketError(QAbstractSocket::SocketError e) { if (status == WaitingBoth) { status = WaitingHttp; } else if (status == HttpReady) { - DEBUG_LOG(("Connection Info: Http-transport chosen by tcp error, ready")); + DEBUG_LOG(("Connection Info: HTTP/%1-transport chosen by tcp error, ready").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4")); status = UsingHttp; emit connected(); } else if (status == WaitingTcp || status == UsingTcp) { @@ -912,13 +916,59 @@ void MTPautoConnection::socketError(QAbstractSocket::SocketError e) { } } -MTPtcpConnection::MTPtcpConnection(QThread *thread) { +MTPtcpConnection::MTPtcpConnection(QThread *thread) : status(WaitingTcp), +tcpNonce(MTP::nonce()), _tcpTimeout(MTPMinReceiveDelay), _flags(0) { moveToThread(thread); + + tcpTimeoutTimer.moveToThread(thread); + tcpTimeoutTimer.setSingleShot(true); + connect(&tcpTimeoutTimer, SIGNAL(timeout()), this, SLOT(onTcpTimeoutTimer())); + sock.moveToThread(thread); App::setProxySettings(sock); connect(&sock, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(socketError(QAbstractSocket::SocketError))); - connect(&sock, SIGNAL(connected()), this, SIGNAL(connected())); - connect(&sock, SIGNAL(disconnected()), this, SIGNAL(disconnected())); + connect(&sock, SIGNAL(connected()), this, SLOT(onSocketConnected())); + connect(&sock, SIGNAL(disconnected()), this, SLOT(onSocketDisconnected())); +} + +void MTPtcpConnection::onSocketConnected() { + if (status == WaitingTcp) { + mtpBuffer buffer(_preparePQFake(tcpNonce)); + + DEBUG_LOG(("Connection Info: sending fake req_pq through TCP/%1 transport").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4")); + + if (_tcpTimeout < 0) _tcpTimeout = -_tcpTimeout; + tcpTimeoutTimer.start(_tcpTimeout); + + sendData(buffer); + } +} + +void MTPtcpConnection::onTcpTimeoutTimer() { + if (status == WaitingTcp) { + if (_tcpTimeout < MTPMaxReceiveDelay) _tcpTimeout *= 2; + _tcpTimeout = -_tcpTimeout; + + QAbstractSocket::SocketState state = sock.state(); + if (state == QAbstractSocket::ConnectedState || state == QAbstractSocket::ConnectingState || state == QAbstractSocket::HostLookupState) { + sock.disconnectFromHost(); + } else if (state != QAbstractSocket::ClosingState) { + sock.connectToHost(QHostAddress(_addr), _port); + } + } +} + +void MTPtcpConnection::onSocketDisconnected() { + if (_tcpTimeout < 0) { + _tcpTimeout = -_tcpTimeout; + if (status == WaitingTcp) { + sock.connectToHost(QHostAddress(_addr), _port); + return; + } + } + if (status == WaitingTcp || status == UsingTcp) { + emit disconnected(); + } } void MTPtcpConnection::sendData(mtpBuffer &buffer) { @@ -945,23 +995,43 @@ void MTPtcpConnection::disconnectFromServer() { } void MTPtcpConnection::connectToServer(const QString &addr, int32 port, int32 flags) { + _addr = addr; + _port = port; + _flags = flags; + connect(&sock, SIGNAL(readyRead()), this, SLOT(socketRead())); - sock.connectToHost(QHostAddress(addr), port); + sock.connectToHost(QHostAddress(_addr), _port); } void MTPtcpConnection::socketPacket(mtpPrime *packet, uint32 size) { + if (status == FinishedWork) return; + mtpBuffer data = _handleTcpResponse(packet, size); if (data.size() == 1) { bool mayBeBadKey = (data[0] == -404) && _sentEncrypted; emit error(mayBeBadKey); + } else if (status == UsingTcp) { + receivedQueue.push_back(data); + emit receivedData(); + } else if (status == WaitingTcp) { + tcpTimeoutTimer.stop(); + try { + MTPResPQ res_pq = _readPQFakeReply(data); + const MTPDresPQ &res_pq_data(res_pq.c_resPQ()); + if (res_pq_data.vnonce == tcpNonce) { + DEBUG_LOG(("Connection Info: TCP/%1-transport chosen by pq-response").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4")); + status = UsingTcp; + emit connected(); + } + } catch (Exception &e) { + DEBUG_LOG(("Connection Error: exception in parsing TCP fake pq-responce, %1").arg(e.what())); + emit error(); + } } - - receivedQueue.push_back(data); - emit receivedData(); } -bool MTPtcpConnection::isConnected() { - return sock.state() == QAbstractSocket::ConnectedState; +bool MTPtcpConnection::isConnected() const { + return (status == UsingTcp); } int32 MTPtcpConnection::debugState() const { @@ -969,7 +1039,7 @@ int32 MTPtcpConnection::debugState() const { } QString MTPtcpConnection::transport() const { - return qsl("TCP"); + return isConnected() ? qsl("TCP") : QString(); } void MTPtcpConnection::socketError(QAbstractSocket::SocketError e) { @@ -977,7 +1047,7 @@ void MTPtcpConnection::socketError(QAbstractSocket::SocketError e) { emit error(); } -MTPhttpConnection::MTPhttpConnection(QThread *thread) { +MTPhttpConnection::MTPhttpConnection(QThread *thread) : status(WaitingHttp), httpNonce(MTP::nonce()), _flags(0) { moveToThread(thread); manager.moveToThread(thread); App::setProxySettings(manager); @@ -1018,14 +1088,23 @@ void MTPhttpConnection::connectToServer(const QString &addr, int32 p, int32 flag address = QUrl(((flags & MTPDdcOption_flag_ipv6) ? qsl("http://[%1]:%2/api") : qsl("http://%1:%2/api")).arg(addr).arg(80));//not p - always 80 port for http transport TCP_LOG(("HTTP Info: address is %1").arg(address.toDisplayString())); connect(&manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(requestFinished(QNetworkReply*))); - emit connected(); + + _flags = flags; + + mtpBuffer buffer(_preparePQFake(httpNonce)); + + DEBUG_LOG(("Connection Info: sending fake req_pq through HTTP/%1 transport").arg((flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4")); + + sendData(buffer); } -bool MTPhttpConnection::isConnected() { - return !address.isEmpty(); +bool MTPhttpConnection::isConnected() const { + return (status == UsingHttp); } void MTPhttpConnection::requestFinished(QNetworkReply *reply) { + if (status == FinishedWork) return; + reply->deleteLater(); if (reply->error() == QNetworkReply::NoError) { requests.remove(reply); @@ -1034,8 +1113,23 @@ void MTPhttpConnection::requestFinished(QNetworkReply *reply) { if (data.size() == 1) { emit error(); } else if (!data.isEmpty()) { - receivedQueue.push_back(data); - emit receivedData(); + if (status == UsingHttp) { + receivedQueue.push_back(data); + emit receivedData(); + } else { + try { + MTPResPQ res_pq = _readPQFakeReply(data); + const MTPDresPQ &res_pq_data(res_pq.c_resPQ()); + if (res_pq_data.vnonce == httpNonce) { + DEBUG_LOG(("Connection Info: HTTP/%1-transport connected by pq-response").arg((_flags & MTPDdcOption_flag_ipv6) ? "IPv6" : "IPv4")); + status = UsingHttp; + emit connected(); + } + } catch (Exception &e) { + DEBUG_LOG(("Connection Error: exception in parsing HTTP fake pq-responce, %1").arg(e.what())); + emit error(); + } + } } } else { if (!requests.remove(reply)) { @@ -1061,12 +1155,17 @@ int32 MTPhttpConnection::debugState() const { } QString MTPhttpConnection::transport() const { - return qsl("HTTP"); + if (status == UsingHttp) { + return qsl("HTTP"); + } else { + return QString(); + } } void MTProtoConnectionPrivate::createConn(bool createIPv4, bool createIPv6) { destroyConn(); if (createIPv4) { + QWriteLocker lock(&stateConnMutex); if (cConnectionType() == dbictAuto) { _conn4 = new MTPautoConnection(thread()); } else if (cConnectionType() == dbictTcpProxy) { @@ -1078,6 +1177,7 @@ void MTProtoConnectionPrivate::createConn(bool createIPv4, bool createIPv6) { connect(_conn4, SIGNAL(receivedSome()), this, SLOT(onReceivedSome())); } if (createIPv6) { + QWriteLocker lock(&stateConnMutex); if (cConnectionType() == dbictAuto) { _conn6 = new MTPautoConnection(thread()); } else if (cConnectionType() == dbictTcpProxy) { @@ -1098,6 +1198,7 @@ void MTProtoConnectionPrivate::createConn(bool createIPv4, bool createIPv6) { void MTProtoConnectionPrivate::destroyConn(MTPabstractConnection **conn) { if (conn) { + QWriteLocker lock(&stateConnMutex); if (*conn) { disconnect(*conn, SIGNAL(disconnected()), 0, 0); disconnect(*conn, SIGNAL(receivedData()), 0, 0); @@ -1200,7 +1301,7 @@ int32 MTProtoConnectionPrivate::getDC() const { } int32 MTProtoConnectionPrivate::getState() const { - QReadLocker lock(&stateMutex); + QReadLocker lock(&stateConnMutex); int32 result = _state; if (_state < 0) { if (retryTimer.isActive()) { @@ -1214,18 +1315,21 @@ int32 MTProtoConnectionPrivate::getState() const { } QString MTProtoConnectionPrivate::transport() const { - if ((!_conn4 && !_conn6) || _state < 0) { + QReadLocker lock(&stateConnMutex); + if ((!_conn4 && !_conn6) || (_conn4 && _conn6) || (_state < 0)) { return QString(); } - return (_conn4 ? _conn4 : _conn6)->transport(); + QString result = (_conn4 ? _conn4 : _conn6)->transport(); + if (!result.isEmpty() && cTryIPv6()) result += (_conn4 ? "/IPv4" : "/IPv6"); + return result; } bool MTProtoConnectionPrivate::setState(int32 state, int32 ifState) { if (ifState != MTProtoConnection::UpdateAlways) { - QReadLocker lock(&stateMutex); + QReadLocker lock(&stateConnMutex); if (_state != ifState) return false; } - QWriteLocker lock(&stateMutex); + QWriteLocker lock(&stateConnMutex); if (_state == state) return false; _state = state; if (state < 0) { @@ -1784,15 +1888,15 @@ void MTProtoConnectionPrivate::socketStart(bool afterConfig) { port6 = dcIndex6->port; } } - bool noIPv4 = (!port4 || ip4.empty()), noIPv6 = (!port6 || ip6.empty()); + bool noIPv4 = (!port4 || ip4.empty()), noIPv6 = (!cTryIPv6() || !port6 || ip6.empty()); if (noIPv4 && noIPv6) { if (afterConfig) { if (noIPv4) LOG(("MTP Error: DC %1 options for IPv4 not found right after config load!").arg(dc)); - if (noIPv6) LOG(("MTP Error: DC %1 options for IPv6 not found right after config load!").arg(dc)); + if (cTryIPv6() && noIPv6) LOG(("MTP Error: DC %1 options for IPv6 not found right after config load!").arg(dc)); return restart(); } if (noIPv4) DEBUG_LOG(("MTP Info: DC %1 options for IPv4 not found, waiting for config").arg(dc)); - if (noIPv6) DEBUG_LOG(("MTP Info: DC %1 options for IPv6 not found, waiting for config").arg(dc)); + if (cTryIPv6() && noIPv6) DEBUG_LOG(("MTP Info: DC %1 options for IPv6 not found, waiting for config").arg(dc)); connect(mtpConfigLoader(), SIGNAL(loaded()), this, SLOT(onConfigLoaded())); mtpConfigLoader()->load(); return; @@ -1800,7 +1904,7 @@ void MTProtoConnectionPrivate::socketStart(bool afterConfig) { if (afterConfig && (_conn4 || _conn6)) return; - createConn(!noIPv4, false/*!noIPv6*/); + createConn(!noIPv4, !noIPv6); retryTimer.stop(); _waitForConnectedTimer.stop(); @@ -3479,7 +3583,7 @@ void MTProtoConnectionPrivate::sendRequestNotSecure(const TRequest &request) { onSentSome(buffer.size() * sizeof(mtpPrime)); - } catch(Exception &e) { + } catch (Exception &e) { return restart(); } } @@ -3516,7 +3620,7 @@ bool MTProtoConnectionPrivate::readResponseNotSecure(TResponse &response) { } const mtpPrime *from(answer + 5), *end(from + len - 5); response.read(from, end); - } catch(Exception &e) { + } catch (Exception &e) { return false; } return true; diff --git a/Telegram/SourceFiles/mtproto/mtpConnection.h b/Telegram/SourceFiles/mtproto/mtpConnection.h index ac41f9f73..c5268589f 100644 --- a/Telegram/SourceFiles/mtproto/mtpConnection.h +++ b/Telegram/SourceFiles/mtproto/mtpConnection.h @@ -141,7 +141,7 @@ public: virtual void sendData(mtpBuffer &buffer) = 0; // has size + 3, buffer[0] = len, buffer[1] = packetnum, buffer[last] = crc32 virtual void disconnectFromServer() = 0; virtual void connectToServer(const QString &addr, int32 port, int32 flags) = 0; - virtual bool isConnected() = 0; + virtual bool isConnected() const = 0; virtual bool usingHttpWait() { return false; } @@ -209,7 +209,7 @@ public: void sendData(mtpBuffer &buffer); void disconnectFromServer(); void connectToServer(const QString &addr, int32 port, int32 flags); - bool isConnected(); + bool isConnected() const; bool usingHttpWait(); bool needHttpWait(); @@ -256,7 +256,7 @@ private: Requests requests; QString _addr; - int32 _port, _tcpTimeout; + int32 _port, _tcpTimeout, _flags; QTimer tcpTimeoutTimer; }; @@ -271,7 +271,7 @@ public: void sendData(mtpBuffer &buffer); void disconnectFromServer(); void connectToServer(const QString &addr, int32 port, int32 flags); - bool isConnected(); + bool isConnected() const; int32 debugState() const; @@ -281,10 +281,29 @@ public slots: void socketError(QAbstractSocket::SocketError e); + void onSocketConnected(); + void onSocketDisconnected(); + + void onTcpTimeoutTimer(); + protected: void socketPacket(mtpPrime *packet, uint32 packetSize); +private: + + enum Status { + WaitingTcp = 0, + UsingTcp, + FinishedWork + }; + Status status; + MTPint128 tcpNonce; + + QString _addr; + int32 _port, _tcpTimeout, _flags; + QTimer tcpTimeoutTimer; + }; class MTPhttpConnection : public MTPabstractConnection { @@ -297,7 +316,7 @@ public: void sendData(mtpBuffer &buffer); void disconnectFromServer(); void connectToServer(const QString &addr, int32 port, int32 flags); - bool isConnected(); + bool isConnected() const; bool usingHttpWait(); bool needHttpWait(); @@ -311,6 +330,15 @@ public slots: private: + enum Status { + WaitingHttp = 0, + UsingHttp, + FinishedWork + }; + Status status; + MTPint128 httpNonce; + int32 _flags; + QNetworkAccessManager manager; QUrl address; @@ -414,7 +442,7 @@ private: void clearMessages(); bool setState(int32 state, int32 ifState = MTProtoConnection::UpdateAlways); - mutable QReadWriteLock stateMutex; + mutable QReadWriteLock stateConnMutex; int32 _state; bool _needSessionReset; diff --git a/Telegram/SourceFiles/settings.cpp b/Telegram/SourceFiles/settings.cpp index 51dfa9759..f9bc2de62 100644 --- a/Telegram/SourceFiles/settings.cpp +++ b/Telegram/SourceFiles/settings.cpp @@ -52,6 +52,11 @@ bool gSupportTray = true; DBIWorkMode gWorkMode = dbiwmWindowAndTray; DBIConnectionType gConnectionType = dbictAuto; ConnectionProxy gConnectionProxy; +#ifdef Q_OS_WIN +bool gTryIPv6 = false; +#else +bool gTryIPv6 = true; +#endif bool gSeenTrayTooltip = false; bool gRestartingUpdate = false, gRestarting = false, gRestartingToSettings = false, gWriteProtected = false; int32 gLastUpdateCheck = 0; diff --git a/Telegram/SourceFiles/settings.h b/Telegram/SourceFiles/settings.h index ed0a588e0..e6fc81913 100644 --- a/Telegram/SourceFiles/settings.h +++ b/Telegram/SourceFiles/settings.h @@ -109,6 +109,7 @@ DeclareSetting(TWindowPos, WindowPos); DeclareSetting(bool, SupportTray); DeclareSetting(DBIWorkMode, WorkMode); DeclareSetting(DBIConnectionType, ConnectionType); +DeclareSetting(bool, TryIPv6); DeclareSetting(DBIDefaultAttach, DefaultAttach); DeclareSetting(ConnectionProxy, ConnectionProxy); DeclareSetting(bool, SeenTrayTooltip); diff --git a/Telegram/SourceFiles/settingswidget.cpp b/Telegram/SourceFiles/settingswidget.cpp index 17e3c62bb..3089325d7 100644 --- a/Telegram/SourceFiles/settingswidget.cpp +++ b/Telegram/SourceFiles/settingswidget.cpp @@ -182,7 +182,7 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), _passwordEdit(this, lang(lng_cloud_password_set)), _passwordTurnOff(this, lang(lng_passcode_turn_off)), _hasPasswordRecovery(false), - _connectionType(this, lng_connection_auto(lt_type, QString())), + _connectionType(this, lang(lng_connection_auto_connecting)), _connectionTypeText(lang(lng_connection_type) + ' '), _connectionTypeWidth(st::linkFont->m.width(_connectionTypeText)), _showSessions(this, lang(lng_settings_show_sessions)), @@ -820,18 +820,19 @@ void SettingsInner::updateOnlineDisplay() { } void SettingsInner::updateConnectionType() { + QString connection; switch (cConnectionType()) { case dbictAuto: { QString transport = MTP::dctransport(); - if (transport.isEmpty()) { - _connectionType.setText(lang(lng_connection_auto_connecting)); - } else { - _connectionType.setText(lng_connection_auto(lt_type, transport)); - } + connection = transport.isEmpty() ? lang(lng_connection_auto_connecting) : lng_connection_auto(lt_transport, transport); + } break; + case dbictHttpProxy: + case dbictTcpProxy: { + QString transport = MTP::dctransport(); + connection = transport.isEmpty() ? lang(lng_connection_proxy_connecting) : lng_connection_proxy(lt_transport, transport); } break; - case dbictHttpProxy: _connectionType.setText(lang(lng_connection_http_proxy)); break; - case dbictTcpProxy: _connectionType.setText(lang(lng_connection_tcp_proxy)); break; } + _connectionType.setText(connection); } void SettingsInner::passcodeChanged() { diff --git a/Telegram/SourceFiles/types.h b/Telegram/SourceFiles/types.h index 1fed10b7b..e7f64078d 100644 --- a/Telegram/SourceFiles/types.h +++ b/Telegram/SourceFiles/types.h @@ -247,7 +247,7 @@ enum DataBlockId { dbiLastUpdateCheck = 0x0d, dbiWindowPosition = 0x0e, dbiConnectionType = 0x0f, -// 16 reserved +// 0x10 reserved dbiDefaultAttach = 0x11, dbiCatsAndDogs = 0x12, dbiReplaceEmojis = 0x13, @@ -258,7 +258,7 @@ enum DataBlockId { dbiRecentEmojisOld = 0x18, dbiLoggedPhoneNumber = 0x19, dbiMutedPeers = 0x1a, -// 27 reserved +// 0x1b reserved dbiNotifyView = 0x1c, dbiSendToMenu = 0x1d, dbiCompressPastedImage = 0x1e, @@ -271,6 +271,7 @@ enum DataBlockId { dbiEmojiVariants = 0x25, dbiRecentStickers = 0x26, dbiDcOption = 0x27, + dbiTryIPv6 = 0x28, dbiEncryptedWithSalt = 333, dbiEncrypted = 444, diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index 5b11e71ea..5ee755bee 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.32 + 0.8.33 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index 94fdb429a469515c3d324e5344f695d1bbb2b008..ce540572a90fbd187d52b57c1dcd46d951588ab1 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_h Date: Thu, 25 Jun 2015 21:08:20 +0300 Subject: [PATCH 013/121] version 0.8.33.dev changelog added --- Telegram/SourceFiles/application.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index 0af586154..f03ea43cb 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -640,8 +640,8 @@ void Application::checkMapVersion() { psRegisterCustomScheme(); if (Local::oldMapVersion()) { QString versionFeatures; - if (DevChannel && Local::oldMapVersion() < 8031) { - versionFeatures = QString::fromUtf8("\xe2\x80\x94 Bots support using the new bot API\n\xe2\x80\x94 Drag-n-drop selected text and links from messages\n\xe2\x80\x94 Forward selected messages by drag-n-drop");// .replace('@', qsl("@") + QChar(0x200D)); + if (DevChannel && Local::oldMapVersion() < 8033) { + versionFeatures = QString::fromUtf8("\xe2\x80\x94 IPv6 connection checkbox added to Connection Type box in Settings");// .replace('@', qsl("@") + QChar(0x200D)); } else if (!DevChannel && Local::oldMapVersion() < 8030) { versionFeatures = lng_new_version_text(lt_blog_link, qsl("https://telegram.org/blog/bot-revolution"));// lang(lng_new_version_text).trimmed(); } From ddac19788f8fea7d50b84ed96ecb41eedc020ae7 Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 25 Jun 2015 22:05:20 +0300 Subject: [PATCH 014/121] fixed ipv6 edit in mac/linux for version 0.8.33.dev --- Telegram/DeployMacWin.sh | 6 +----- Telegram/SourceFiles/boxes/connectionbox.cpp | 1 + 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/Telegram/DeployMacWin.sh b/Telegram/DeployMacWin.sh index f0a47cacb..4f537beff 100755 --- a/Telegram/DeployMacWin.sh +++ b/Telegram/DeployMacWin.sh @@ -36,17 +36,13 @@ if [ ! -d "./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor" ]; then mkdir "./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor" fi -if [ ! -d "./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix" ]; then - mkdir "./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix" -fi - scp ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tmacupd$AppVersion tmaster:tdesktop/www/tmac/ scp ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.dmg tmaster:tdesktop/www/tmac/ scp ./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tupdate$AppVersion tmaster:tdesktop/www/tsetup/ scp ./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tportable.$AppVersionStr$DevPostfix.zip tmaster:tdesktop/www/tsetup/ scp ./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.exe tmaster:tdesktop/www/tsetup/ -mv -rv ./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/ +mv -v ./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/ cp -v ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tmacupd$AppVersion ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ cp -v ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.dmg ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ diff --git a/Telegram/SourceFiles/boxes/connectionbox.cpp b/Telegram/SourceFiles/boxes/connectionbox.cpp index 07e2f8845..fca3a99e3 100644 --- a/Telegram/SourceFiles/boxes/connectionbox.cpp +++ b/Telegram/SourceFiles/boxes/connectionbox.cpp @@ -186,6 +186,7 @@ void ConnectionBox::onSave() { cSetRestartingToSettings(true); App::quit(); } else { + cSetTryIPv6(_tryIPv6.checked()); Local::writeSettings(); MTP::restart(); reinitImageLinkManager(); From d81d6bbeaaf4d9925129f702c7a96062a3b2c3e6 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 26 Jun 2015 12:07:59 +0300 Subject: [PATCH 015/121] drag-n-drop files to dialogs list --- Telegram/SourceFiles/config.h | 2 + Telegram/SourceFiles/dialogswidget.cpp | 25 ++++++++++-- Telegram/SourceFiles/dialogswidget.h | 3 ++ Telegram/SourceFiles/dropdown.cpp | 2 +- Telegram/SourceFiles/dropdown.h | 2 +- Telegram/SourceFiles/historywidget.cpp | 54 ++++++++++++++++---------- Telegram/SourceFiles/historywidget.h | 5 ++- Telegram/SourceFiles/mainwidget.cpp | 8 +++- Telegram/SourceFiles/mainwidget.h | 1 + 9 files changed, 73 insertions(+), 29 deletions(-) diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index e93ad0206..992b479ce 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -139,6 +139,8 @@ enum { WrongPasscodeTimeout = 1500, SessionsShortPollTimeout = 60000, + + ChoosePeerByDragTimeout = 1000, // 1 second mouse not moved to choose dialog when dragging a file }; inline bool isServiceUser(uint64 id) { diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index 94168759a..f0f4fdd9b 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -1410,6 +1410,9 @@ DialogsWidget::DialogsWidget(MainWidget *parent) : QWidget(parent) connect(&_newGroup, SIGNAL(clicked()), this, SLOT(onNewGroup())); connect(&_cancelSearch, SIGNAL(clicked()), this, SLOT(onCancelSearch())); + _chooseByDragTimer.setSingleShot(true); + connect(&_chooseByDragTimer, SIGNAL(timeout()), this, SLOT(onChooseByDrag())); + setAcceptDrops(true); _searchTimer.setSingleShot(true); @@ -1628,6 +1631,10 @@ void DialogsWidget::onNeedSearchMessages() { } } +void DialogsWidget::onChooseByDrag() { + list.choosePeer(); +} + void DialogsWidget::searchMessages(const QString &query) { if (_filter.text() != query) { _filter.setText(query); @@ -1774,15 +1781,20 @@ void DialogsWidget::dragEnterEvent(QDragEnterEvent *e) { e->setDropAction(Qt::CopyAction); e->accept(); updateDragInScroll(scroll.geometry().contains(e->pos())); - } else if (false && App::main() && App::main()->getDragState(e->mimeData()) != DragStateNone) { + } else if (App::main() && App::main()->getDragState(e->mimeData()) != DragStateNone) { e->setDropAction(Qt::CopyAction); e->accept(); } + _chooseByDragTimer.stop(); } void DialogsWidget::dragMoveEvent(QDragMoveEvent *e) { if (scroll.geometry().contains(e->pos())) { - if (_dragForward) updateDragInScroll(true); + if (_dragForward) { + updateDragInScroll(true); + } else { + _chooseByDragTimer.start(ChoosePeerByDragTimeout); + } PeerData *p = list.updateFromParentDrag(mapToGlobal(e->pos())); if (p) { e->setDropAction(Qt::CopyAction); @@ -1798,7 +1810,11 @@ void DialogsWidget::dragMoveEvent(QDragMoveEvent *e) { } void DialogsWidget::dragLeaveEvent(QDragLeaveEvent *e) { - if (_dragForward) updateDragInScroll(false); + if (_dragForward) { + updateDragInScroll(false); + } else { + _chooseByDragTimer.stop(); + } list.leaveEvent(0); e->accept(); } @@ -1815,6 +1831,7 @@ void DialogsWidget::updateDragInScroll(bool inScroll) { } void DialogsWidget::dropEvent(QDropEvent *e) { + _chooseByDragTimer.stop(); if (scroll.geometry().contains(e->pos())) { PeerData *p = list.updateFromParentDrag(mapToGlobal(e->pos())); if (p) { @@ -1822,7 +1839,7 @@ void DialogsWidget::dropEvent(QDropEvent *e) { if (e->mimeData()->hasFormat(qsl("application/x-td-forward-selected"))) { App::main()->onForward(p->id, true); } else { - App::main()->showPeer(p->id, 0, false, true); + App::main()->onFilesDrop(p->id, e->mimeData()); } } } diff --git a/Telegram/SourceFiles/dialogswidget.h b/Telegram/SourceFiles/dialogswidget.h index 863570d9e..1d1cf6661 100644 --- a/Telegram/SourceFiles/dialogswidget.h +++ b/Telegram/SourceFiles/dialogswidget.h @@ -236,11 +236,14 @@ public slots: bool onSearchMessages(bool searchCache = false); void onNeedSearchMessages(); + void onChooseByDrag(); + private: bool _drawShadow; bool _dragInScroll, _dragForward; + QTimer _chooseByDragTimer; void unreadCountsReceived(const QVector &dialogs); bool dialogsFailed(const RPCError &error); diff --git a/Telegram/SourceFiles/dropdown.cpp b/Telegram/SourceFiles/dropdown.cpp index 9be6f8c1a..edf365b07 100644 --- a/Telegram/SourceFiles/dropdown.cpp +++ b/Telegram/SourceFiles/dropdown.cpp @@ -384,7 +384,7 @@ void DragArea::dragLeaveEvent(QDragLeaveEvent *e) { void DragArea::dropEvent(QDropEvent *e) { static_cast(parentWidget())->dropEvent(e); if (e->isAccepted()) { - emit dropped(e); + emit dropped(e->mimeData()); } } diff --git a/Telegram/SourceFiles/dropdown.h b/Telegram/SourceFiles/dropdown.h index dff92377a..84968ca26 100644 --- a/Telegram/SourceFiles/dropdown.h +++ b/Telegram/SourceFiles/dropdown.h @@ -110,7 +110,7 @@ public: signals: - void dropped(QDropEvent *e); + void dropped(const QMimeData *data); public slots: diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 480c84563..4b76e8564 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -2243,8 +2243,8 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) _attachDragDocument.hide(); _attachDragPhoto.hide(); - connect(&_attachDragDocument, SIGNAL(dropped(QDropEvent*)), this, SLOT(onDocumentDrop(QDropEvent*))); - connect(&_attachDragPhoto, SIGNAL(dropped(QDropEvent*)), this, SLOT(onPhotoDrop(QDropEvent*))); + connect(&_attachDragDocument, SIGNAL(dropped(const QMimeData*)), this, SLOT(onDocumentDrop(const QMimeData*))); + connect(&_attachDragPhoto, SIGNAL(dropped(const QMimeData*)), this, SLOT(onPhotoDrop(const QMimeData*))); } void HistoryWidget::start() { @@ -3931,15 +3931,45 @@ void HistoryWidget::dropEvent(QDropEvent *e) { e->acceptProposedAction(); } -void HistoryWidget::onDocumentDrop(QDropEvent *e) { +void HistoryWidget::onPhotoDrop(const QMimeData *data) { if (!hist) return; - QStringList files = getMediasFromMime(e->mimeData()); + if (data->hasImage()) { + QImage image = qvariant_cast(data->imageData()); + if (image.isNull()) return; + + uploadImage(image, false, data->text()); + } else { + QStringList files = getMediasFromMime(data); + if (files.isEmpty()) return; + + uploadMedias(files, ToPreparePhoto); + } +} + +void HistoryWidget::onDocumentDrop(const QMimeData *data) { + if (!hist) return; + + QStringList files = getMediasFromMime(data); if (files.isEmpty()) return; uploadMedias(files, ToPrepareDocument); } +void HistoryWidget::onFilesDrop(const QMimeData *data) { + if (data->hasImage()) { + QImage image = qvariant_cast(data->imageData()); + if (image.isNull()) return; + + uploadImage(image, false, data->text()); + } else { + QStringList files = getMediasFromMime(data); + if (files.isEmpty()) return; + + uploadMedias(files, ToPrepareAuto); + } +} + void HistoryWidget::onKbToggle(bool manual) { if (_kbShown || _kbReplyTo) { _kbHide.hide(); @@ -4009,22 +4039,6 @@ void HistoryWidget::onCmdStart() { _field.moveCursor(QTextCursor::End); } -void HistoryWidget::onPhotoDrop(QDropEvent *e) { - if (!hist) return; - - if (e->mimeData()->hasImage()) { - QImage image = qvariant_cast(e->mimeData()->imageData()); - if (image.isNull()) return; - - uploadImage(image); - } else { - QStringList files = getMediasFromMime(e->mimeData()); - if (files.isEmpty()) return; - - uploadMedias(files, ToPreparePhoto); - } -} - void HistoryWidget::contextMenuEvent(QContextMenuEvent *e) { if (!_list) return; diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index bfdb609a8..61bf91ec5 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -509,8 +509,9 @@ public slots: void onPhotoSelect(); void onDocumentSelect(); - void onPhotoDrop(QDropEvent *e); - void onDocumentDrop(QDropEvent *e); + void onPhotoDrop(const QMimeData *data); + void onDocumentDrop(const QMimeData *data); + void onFilesDrop(const QMimeData *data); void onKbToggle(bool manual = true); void onCmdStart(); diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 03750f421..b3229f925 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -571,6 +571,11 @@ void MainWidget::onSendPaths(const PeerId &peer) { history.onSendPaths(peer); } +void MainWidget::onFilesDrop(const PeerId &peer, const QMimeData *data) { + showPeer(peer, 0, false, true); + history.onFilesDrop(data); +} + void MainWidget::noHider(HistoryHider *destroyed) { if (hider == destroyed) { hider = 0; @@ -616,12 +621,13 @@ void MainWidget::hiderLayer(HistoryHider *h) { hider = h; connect(hider, SIGNAL(forwarded()), &dialogs, SLOT(onCancelSearch())); - dialogsToUp(); if (cWideMode()) { hider->show(); resizeEvent(0); dialogs.activate(); } else { + dialogsToUp(); + hider->hide(); dialogs.enableShadow(false); QPixmap animCache = myGrab(this, QRect(0, 0, _dialogsWidth, height())); diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index c0ca4cc7a..cbeddd97d 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -257,6 +257,7 @@ public: void onForward(const PeerId &peer, bool forwardSelected); void onShareContact(const PeerId &peer, UserData *contact); void onSendPaths(const PeerId &peer); + void onFilesDrop(const PeerId &peer, const QMimeData *data); bool selectingPeer(bool withConfirm = false); void offerPeer(PeerId peer); void focusPeerSelect(); From 5182c58292501279b552720349defabd91a7f314 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 26 Jun 2015 12:08:14 +0300 Subject: [PATCH 016/121] langs updated --- Telegram/SourceFiles/langs/lang_de.strings | 7 ++++--- Telegram/SourceFiles/langs/lang_es.strings | 7 ++++--- Telegram/SourceFiles/langs/lang_it.strings | 7 ++++--- Telegram/SourceFiles/langs/lang_ko.strings | 7 ++++--- Telegram/SourceFiles/langs/lang_nl.strings | 7 ++++--- Telegram/SourceFiles/langs/lang_pt_BR.strings | 7 ++++--- 6 files changed, 24 insertions(+), 18 deletions(-) diff --git a/Telegram/SourceFiles/langs/lang_de.strings b/Telegram/SourceFiles/langs/lang_de.strings index d6e0a71dd..1864b1260 100644 --- a/Telegram/SourceFiles/langs/lang_de.strings +++ b/Telegram/SourceFiles/langs/lang_de.strings @@ -301,13 +301,14 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_connection_type" = "Verbindungsart:"; "lng_connection_auto_connecting" = "Standard (verbinden..)"; -"lng_connection_auto" = "Standard ({type} verwendet)"; -"lng_connection_http_proxy" = "HTTP mit Proxy"; -"lng_connection_tcp_proxy" = "TCP mit Proxy"; +"lng_connection_auto" = "Standard ({transport} verwendet)"; +"lng_connection_proxy_connecting" = "Verbinde über Proxy..."; +"lng_connection_proxy" = "{transport} mit Proxy"; "lng_connection_header" = "Verbindungsart"; "lng_connection_auto_rb" = "Auto (TCP wenn verfügbar oder HTTP)"; "lng_connection_http_proxy_rb" = "HTTP mit benutzerdef. http-Proxy"; "lng_connection_tcp_proxy_rb" = "TCP mit benutzerdef. socks5-Proxy"; +"lng_connection_try_ipv6" = "Über IPv6 verbinden"; "lng_connection_host_ph" = "Hostname"; "lng_connection_port_ph" = "Port"; "lng_connection_user_ph" = "Benutzername"; diff --git a/Telegram/SourceFiles/langs/lang_es.strings b/Telegram/SourceFiles/langs/lang_es.strings index 79f5e12ea..ef5804f26 100644 --- a/Telegram/SourceFiles/langs/lang_es.strings +++ b/Telegram/SourceFiles/langs/lang_es.strings @@ -301,13 +301,14 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_connection_type" = "Tipo de conexión:"; "lng_connection_auto_connecting" = "Por defecto (conectando...)"; -"lng_connection_auto" = "Por defecto ({type} en uso)"; -"lng_connection_http_proxy" = "HTTP con proxy"; -"lng_connection_tcp_proxy" = "TCP con proxy"; +"lng_connection_auto" = "Por defecto ({transport} en uso)"; +"lng_connection_proxy_connecting" = "Conectando a través de un proxy..."; +"lng_connection_proxy" = "{transport} con un proxy"; "lng_connection_header" = "Tipo de conexión"; "lng_connection_auto_rb" = "Automático (TCP si está disponible o HTTP)"; "lng_connection_http_proxy_rb" = "HTTP con http-proxy personalizado"; "lng_connection_tcp_proxy_rb" = "TCP con socks5-proxy personalizado"; +"lng_connection_try_ipv6" = "Intentar conectar a través de IPv6"; "lng_connection_host_ph" = "Nombre del host"; "lng_connection_port_ph" = "Puerto"; "lng_connection_user_ph" = "Alias"; diff --git a/Telegram/SourceFiles/langs/lang_it.strings b/Telegram/SourceFiles/langs/lang_it.strings index 777cd0609..1ba5f15e6 100644 --- a/Telegram/SourceFiles/langs/lang_it.strings +++ b/Telegram/SourceFiles/langs/lang_it.strings @@ -301,13 +301,14 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_connection_type" = "Tipo di connessione:"; "lng_connection_auto_connecting" = "Default (connessione..)"; -"lng_connection_auto" = "Default ({type} in uso)"; -"lng_connection_http_proxy" = "HTTP con proxy"; -"lng_connection_tcp_proxy" = "TCP con proxy"; +"lng_connection_auto" = "Predefinito ({transport} in uso)"; +"lng_connection_proxy_connecting" = "Connessione tramite proxy.."; +"lng_connection_proxy" = "{transport} con proxy"; "lng_connection_header" = "Tipo di connessione"; "lng_connection_auto_rb" = "Auto (TCP se disponibile o HTTP)"; "lng_connection_http_proxy_rb" = "HTTP con proxy-http personalizzato"; "lng_connection_tcp_proxy_rb" = "TCP con proxy-socks5 personalizzato"; +"lng_connection_try_ipv6" = "Prova a connettere tramite IPv6"; "lng_connection_host_ph" = "Hostname"; "lng_connection_port_ph" = "Porta"; "lng_connection_user_ph" = "Username"; diff --git a/Telegram/SourceFiles/langs/lang_ko.strings b/Telegram/SourceFiles/langs/lang_ko.strings index 6bd0ccbd3..7a9d80614 100644 --- a/Telegram/SourceFiles/langs/lang_ko.strings +++ b/Telegram/SourceFiles/langs/lang_ko.strings @@ -301,13 +301,14 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_connection_type" = "연결 유형:"; "lng_connection_auto_connecting" = "기본값 (연결중..)"; -"lng_connection_auto" = "기본값 ({type} 사용)"; -"lng_connection_http_proxy" = "HTTP 프록시"; -"lng_connection_tcp_proxy" = "TCP 프록시"; +"lng_connection_auto" = "기본값 ({transport} 사용)"; +"lng_connection_proxy_connecting" = "프록시 연결 중..."; +"lng_connection_proxy" = "{transport} 프록시 연결"; "lng_connection_header" = "연결 유형"; "lng_connection_auto_rb" = "자동 (사용 가능하다면 TCP 아니면 HTTP 사용)"; "lng_connection_http_proxy_rb" = "HTTP (커스텀 HTTP 프록시)"; "lng_connection_tcp_proxy_rb" = "TCP (커스텀 socks5-proxy)"; +"lng_connection_try_ipv6" = "IPv6로 연결 시도 중"; "lng_connection_host_ph" = "호스트네임"; "lng_connection_port_ph" = "포트"; "lng_connection_user_ph" = "아이디"; diff --git a/Telegram/SourceFiles/langs/lang_nl.strings b/Telegram/SourceFiles/langs/lang_nl.strings index 2b9479b6f..92202f48f 100644 --- a/Telegram/SourceFiles/langs/lang_nl.strings +++ b/Telegram/SourceFiles/langs/lang_nl.strings @@ -301,13 +301,14 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_connection_type" = "Verbindingstype:"; "lng_connection_auto_connecting" = "Standaard (verbinden)"; -"lng_connection_auto" = "Standaard ({type} wordt gebruikt)"; -"lng_connection_http_proxy" = "HTTP met proxy"; -"lng_connection_tcp_proxy" = "TCP met proxy"; +"lng_connection_auto" = "Standaard ({transport} wordt gebruikt)"; +"lng_connection_proxy_connecting" = "Verbinden via proxy.."; +"lng_connection_proxy" = "{transport} met proxy"; "lng_connection_header" = "Verbindingstype"; "lng_connection_auto_rb" = "Auto (TCP indien beschikbaar of HTTP)"; "lng_connection_http_proxy_rb" = "HTTP met aangepaste http-proxy"; "lng_connection_tcp_proxy_rb" = "TCP met aangepaste socks5-proxy"; +"lng_connection_try_ipv6" = "Verbinden via IPV6"; "lng_connection_host_ph" = "Hostnaam"; "lng_connection_port_ph" = "Poort"; "lng_connection_user_ph" = "Gebruikersnaam"; diff --git a/Telegram/SourceFiles/langs/lang_pt_BR.strings b/Telegram/SourceFiles/langs/lang_pt_BR.strings index 29314e54a..d5cd379fd 100644 --- a/Telegram/SourceFiles/langs/lang_pt_BR.strings +++ b/Telegram/SourceFiles/langs/lang_pt_BR.strings @@ -301,13 +301,14 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_connection_type" = "Tipo de conexão:"; "lng_connection_auto_connecting" = "Padrão (conectando..)"; -"lng_connection_auto" = "Padrão ({type} usado)"; -"lng_connection_http_proxy" = "HTTP com proxy"; -"lng_connection_tcp_proxy" = "TCP com proxy"; +"lng_connection_auto" = "Padrão ({transport} usado)"; +"lng_connection_proxy_connecting" = "Conectando via proxy..."; +"lng_connection_proxy" = "{transport} com proxy"; "lng_connection_header" = "Tipo de conexão"; "lng_connection_auto_rb" = "Auto (TCP se disponível ou HTTP)"; "lng_connection_http_proxy_rb" = "HTTP com http-proxy customizado"; "lng_connection_tcp_proxy_rb" = "TCP com socks5-proxy customizado"; +"lng_connection_try_ipv6" = "Tentando conexão via IPv6"; "lng_connection_host_ph" = "Nome do host"; "lng_connection_port_ph" = "Porta"; "lng_connection_user_ph" = "Nome de usuário"; From 8e82b8894d66e12aa3918277492e749b3cb93c3d Mon Sep 17 00:00:00 2001 From: John Preston Date: Sat, 27 Jun 2015 16:02:00 +0300 Subject: [PATCH 017/121] forward-by-drag-n-drop done for images, documents, stickers and messages-by-date --- Telegram/SourceFiles/audio.cpp | 2 +- Telegram/SourceFiles/boxes/sessionsbox.cpp | 10 +- Telegram/SourceFiles/dialogswidget.cpp | 11 +- Telegram/SourceFiles/dropdown.cpp | 1 + Telegram/SourceFiles/gui/filedialog.cpp | 6 +- Telegram/SourceFiles/gui/flattextarea.cpp | 4 +- Telegram/SourceFiles/gui/text.h | 18 +++ Telegram/SourceFiles/history.cpp | 127 ++++++++++++--------- Telegram/SourceFiles/history.h | 50 ++++---- Telegram/SourceFiles/historywidget.cpp | 101 ++++++++++++---- Telegram/SourceFiles/historywidget.h | 1 + Telegram/SourceFiles/intro/introphone.cpp | 2 + Telegram/SourceFiles/lang.cpp | 36 +++--- Telegram/SourceFiles/localstorage.cpp | 2 +- Telegram/SourceFiles/mainwidget.cpp | 40 +++++-- Telegram/SourceFiles/mainwidget.h | 11 +- Telegram/SourceFiles/mediaview.cpp | 32 +++--- Telegram/SourceFiles/overviewwidget.cpp | 6 +- Telegram/SourceFiles/profilewidget.cpp | 4 +- Telegram/SourceFiles/pspecific_linux.cpp | 4 +- Telegram/SourceFiles/settingswidget.cpp | 4 +- Telegram/SourceFiles/structs.cpp | 4 +- Telegram/SourceFiles/structs.h | 34 +++++- Telegram/SourceFiles/types.h | 1 + 24 files changed, 339 insertions(+), 172 deletions(-) diff --git a/Telegram/SourceFiles/audio.cpp b/Telegram/SourceFiles/audio.cpp index 3449fbabc..4303618e9 100644 --- a/Telegram/SourceFiles/audio.cpp +++ b/Telegram/SourceFiles/audio.cpp @@ -1249,7 +1249,7 @@ void AudioCaptureInner::onStart() { char err[AV_ERROR_MAX_STRING_SIZE] = { 0 }; AVOutputFormat *fmt = 0; while ((fmt = av_oformat_next(fmt))) { - if (fmt->name == QLatin1String("opus")) { + if (fmt->name == qstr("opus")) { break; } } diff --git a/Telegram/SourceFiles/boxes/sessionsbox.cpp b/Telegram/SourceFiles/boxes/sessionsbox.cpp index f85fe974b..c5250bdf2 100644 --- a/Telegram/SourceFiles/boxes/sessionsbox.cpp +++ b/Telegram/SourceFiles/boxes/sessionsbox.cpp @@ -264,12 +264,12 @@ void SessionsBox::gotAuthorizations(const MTPaccount_Authorizations &result) { QString appName, appVer = qs(d.vapp_version), systemVer = qs(d.vsystem_version), deviceModel = qs(d.vdevice_model); if (d.vapi_id.v == 2040 || d.vapi_id.v == 17349) { - appName = (d.vapi_id.v == 2040) ? qsl("Telegram Desktop") : qsl("Telegram Desktop (GitHub)"); - // if (systemVer == QLatin1String("windows")) { + appName = (d.vapi_id.v == 2040) ? qstr("Telegram Desktop") : qstr("Telegram Desktop (GitHub)"); + // if (systemVer == qstr("windows")) { // deviceModel = qsl("Windows"); - // } else if (systemVer == QLatin1String("os x")) { + // } else if (systemVer == qstr("os x")) { // deviceModel = qsl("OS X"); - // } else if (systemVer == QLatin1String("linux")) { + // } else if (systemVer == qstr("linux")) { // deviceModel = qsl("Linux"); // } if (appVer == QString::number(appVer.toInt())) { @@ -293,7 +293,7 @@ void SessionsBox::gotAuthorizations(const MTPaccount_Authorizations &result) { MTPint active = d.vdate_active.v ? d.vdate_active : d.vdate_created; data.activeTime = active.v; - data.info = qs(d.vdevice_model) + QLatin1String(", ") + (platform.isEmpty() ? QString() : platform + ' ') + qs(d.vsystem_version); + data.info = qs(d.vdevice_model) + qstr(", ") + (platform.isEmpty() ? QString() : platform + ' ') + qs(d.vsystem_version); data.ip = qs(d.vip) + (country.isEmpty() ? QString() : QString::fromUtf8(" \xe2\x80\x93 ") + country); if (!data.hash || (d.vflags.v & 1)) { data.active = QString(); diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index f0f4fdd9b..f81270584 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -1776,7 +1776,10 @@ void DialogsWidget::dragEnterEvent(QDragEnterEvent *e) { if (App::main()->selectingPeer()) return; _dragInScroll = false; - _dragForward = cWideMode() && e->mimeData()->hasFormat(qsl("application/x-td-forward-selected")); + _dragForward = e->mimeData()->hasFormat(qsl("application/x-td-forward-selected")); + if (!_dragForward) _dragForward = e->mimeData()->hasFormat(qsl("application/x-td-forward-pressed-link")); + if (!_dragForward) _dragForward = e->mimeData()->hasFormat(qsl("application/x-td-forward-pressed")); + if (_dragForward && !cWideMode()) _dragForward = false; if (_dragForward) { e->setDropAction(Qt::CopyAction); e->accept(); @@ -1836,11 +1839,7 @@ void DialogsWidget::dropEvent(QDropEvent *e) { PeerData *p = list.updateFromParentDrag(mapToGlobal(e->pos())); if (p) { e->acceptProposedAction(); - if (e->mimeData()->hasFormat(qsl("application/x-td-forward-selected"))) { - App::main()->onForward(p->id, true); - } else { - App::main()->onFilesDrop(p->id, e->mimeData()); - } + App::main()->onFilesOrForwardDrop(p->id, e->mimeData()); } } } diff --git a/Telegram/SourceFiles/dropdown.cpp b/Telegram/SourceFiles/dropdown.cpp index edf365b07..e42e4f55b 100644 --- a/Telegram/SourceFiles/dropdown.cpp +++ b/Telegram/SourceFiles/dropdown.cpp @@ -2784,6 +2784,7 @@ void MentionsDropdown::updateFiltered(bool toDown) { } } } else if (_user->botInfo) { + if (!_user->botInfo->inited) App::api()->requestFullPeer(_user); cnt = _user->botInfo->commands.size(); bots.insert(_user, true); } diff --git a/Telegram/SourceFiles/gui/filedialog.cpp b/Telegram/SourceFiles/gui/filedialog.cpp index 70fae16a0..8dd748747 100644 --- a/Telegram/SourceFiles/gui/filedialog.cpp +++ b/Telegram/SourceFiles/gui/filedialog.cpp @@ -25,9 +25,9 @@ void filedialogInit() { if (cDialogLastPath().isEmpty()) { #ifdef Q_OS_WIN // hack to restore previous dir without hurting performance - QSettings settings(QSettings::UserScope, QLatin1String("QtProject")); - settings.beginGroup(QLatin1String("Qt")); - QByteArray sd = settings.value(QLatin1String("filedialog")).toByteArray(); + QSettings settings(QSettings::UserScope, qstr("QtProject")); + settings.beginGroup(qstr("Qt")); + QByteArray sd = settings.value(qstr("filedialog")).toByteArray(); QDataStream stream(&sd, QIODevice::ReadOnly); if (!stream.atEnd()) { int version = 3, _QFileDialogMagic = 190; diff --git a/Telegram/SourceFiles/gui/flattextarea.cpp b/Telegram/SourceFiles/gui/flattextarea.cpp index 3b5a18e3a..1aaece3e7 100644 --- a/Telegram/SourceFiles/gui/flattextarea.cpp +++ b/Telegram/SourceFiles/gui/flattextarea.cpp @@ -303,7 +303,7 @@ void FlatTextarea::getSingleEmojiFragment(QString &text, QTextFragment &fragment } if (f.isImageFormat() && !t.isEmpty() && t.at(0).unicode() == QChar::ObjectReplacementCharacter) { QString imageName = static_cast(&f)->name(); - if (imageName.startsWith(QLatin1String("emoji://e."))) { + if (imageName.startsWith(qstr("emoji://e."))) { fragment = fr; text = t; return; @@ -387,7 +387,7 @@ QString FlatTextarea::getText(int32 start, int32 end) const { case QChar::ObjectReplacementCharacter: if (emojiText.isEmpty() && f.isImageFormat()) { QString imageName = static_cast(&f)->name(); - if (imageName.startsWith(QLatin1String("emoji://e."))) { + if (imageName.startsWith(qstr("emoji://e."))) { if (EmojiPtr emoji = emojiFromUrl(imageName)) { emojiText = emojiString(emoji); } diff --git a/Telegram/SourceFiles/gui/text.h b/Telegram/SourceFiles/gui/text.h index cca0de8e0..84d7da3aa 100644 --- a/Telegram/SourceFiles/gui/text.h +++ b/Telegram/SourceFiles/gui/text.h @@ -259,13 +259,23 @@ public: virtual QString encoded() const { return QString(); } + virtual const QLatin1String &type() const = 0; virtual ~ITextLink() { } }; + +#define TEXT_LINK_CLASS(ClassName) public: \ +const QLatin1String &type() const { \ + static const QLatin1String _type(qstr(#ClassName)); \ + return _type; \ +} + typedef QSharedPointer TextLinkPtr; class TextLink : public ITextLink { + TEXT_LINK_CLASS(TextLink) + public: TextLink(const QString &url, bool fullDisplayed = true) : _url(url), _fullDisplayed(fullDisplayed) { @@ -305,6 +315,8 @@ private: }; class EmailLink : public ITextLink { + TEXT_LINK_CLASS(EmailLink) + public: EmailLink(const QString &email) : _email(email) { @@ -335,6 +347,8 @@ private: }; class MentionLink : public ITextLink { + TEXT_LINK_CLASS(MentionLink) + public: MentionLink(const QString &tag) : _tag(tag) { @@ -361,6 +375,8 @@ private: }; class HashtagLink : public ITextLink { + TEXT_LINK_CLASS(HashtagLink) + public: HashtagLink(const QString &tag) : _tag(tag) { @@ -387,6 +403,8 @@ private: }; class BotCommandLink : public ITextLink { + TEXT_LINK_CLASS(BotCommandLink) + public: BotCommandLink(const QString &cmd) : _cmd(cmd) { diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 25e9da417..32dbe0947 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -1777,7 +1777,7 @@ bool HistoryPhoto::hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 w return (x >= 0 && y >= 0 && x < width && y < _height); } -void HistoryPhoto::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width) const { +void HistoryPhoto::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width) const { if (width < 0) width = w; if (width < 1) return; @@ -1812,7 +1812,7 @@ void HistoryPhoto::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, co } } else if (fwd) { if (y >= fwdFrom && y < fwdFrom + st::msgServiceNameFont->height) { - return fwd->getForwardedState(lnk, inText, x - st::mediaPadding.left(), width - st::mediaPadding.left() - st::mediaPadding.right()); + return fwd->getForwardedState(lnk, state, x - st::mediaPadding.left(), width - st::mediaPadding.left() - st::mediaPadding.right()); } } height -= st::mediaPadding.bottom(); @@ -1820,7 +1820,9 @@ void HistoryPhoto::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, co if (!_caption.isEmpty()) { height -= _caption.countHeight(width) + st::webPagePhotoSkip; if (x >= skipx && y >= height + st::webPagePhotoSkip && x < skipx + width && y < _height) { - return _caption.getState(lnk, inText, x - skipx, y - height - st::webPagePhotoSkip, width); + bool inText = false; + _caption.getState(lnk, inText, x - skipx, y - height - st::webPagePhotoSkip, width); + state = inText ? HistoryInTextCursorState : HistoryDefaultCursorState; } } } @@ -2128,7 +2130,7 @@ bool HistoryVideo::hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 w return (x >= 0 && y >= 0 && x < width && y < _height); } -void HistoryVideo::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width) const { +void HistoryVideo::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width) const { if (width < 0) width = w; if (width < 1) return; @@ -2180,7 +2182,7 @@ void HistoryVideo::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, co } } else if (fwd) { if (y >= fwdFrom && y < skipy) { - return fwd->getForwardedState(lnk, inText, x - st::mediaPadding.left(), width - st::mediaPadding.left() - st::mediaPadding.right()); + return fwd->getForwardedState(lnk, state, x - st::mediaPadding.left(), width - st::mediaPadding.left() - st::mediaPadding.right()); } } @@ -2190,7 +2192,9 @@ void HistoryVideo::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, co return; } if (!_caption.isEmpty() && x >= st::mediaPadding.left() && x < st::mediaPadding.left() + tw && y >= skipy + st::mediaPadding.top() + st::mediaThumbSize + st::webPagePhotoSkip) { - return _caption.getState(lnk, inText, x - st::mediaPadding.left(), y - skipy - st::mediaPadding.top() - st::mediaThumbSize - st::webPagePhotoSkip, tw); + bool inText = false; + _caption.getState(lnk, inText, x - st::mediaPadding.left(), y - skipy - st::mediaPadding.top() - st::mediaThumbSize - st::webPagePhotoSkip, tw); + state = inText ? HistoryInTextCursorState : HistoryDefaultCursorState; } } @@ -2617,7 +2621,7 @@ bool HistoryAudio::hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 w return (x >= 0 && y >= 0 && x < width && y < _height); } -void HistoryAudio::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width) const { +void HistoryAudio::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width) const { if (width < 0) width = w; if (width < 1) return; @@ -2665,7 +2669,7 @@ void HistoryAudio::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, co } } else if (fwd) { if (y >= fwdFrom && y < skipy) { - return fwd->getForwardedState(lnk, inText, x - st::mediaPadding.left(), width - st::mediaPadding.left() - st::mediaPadding.right()); + return fwd->getForwardedState(lnk, state, x - st::mediaPadding.left(), width - st::mediaPadding.left() - st::mediaPadding.right()); } } @@ -2959,7 +2963,7 @@ int32 HistoryDocument::countHeight(const HistoryItem *parent, int32 width) const return _height; } -void HistoryDocument::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width) const { +void HistoryDocument::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width) const { if (width < 0) width = w; if (width < 1) return; @@ -3013,7 +3017,7 @@ void HistoryDocument::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, } } else if (fwd) { if (y >= fwdFrom && y < skipy) { - return fwd->getForwardedState(lnk, inText, x - st::mediaPadding.left(), width - st::mediaPadding.left() - st::mediaPadding.right()); + return fwd->getForwardedState(lnk, state, x - st::mediaPadding.left(), width - st::mediaPadding.left() - st::mediaPadding.right()); } } @@ -3204,7 +3208,7 @@ int32 HistorySticker::countHeight(const HistoryItem *parent, int32 width) const return _minh; } -void HistorySticker::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width) const { +void HistorySticker::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width) const { if (width < 0) width = w; if (width < 1) return; @@ -3285,7 +3289,7 @@ bool HistoryContact::hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 return (x >= 0 && y <= 0 && x < w && y < _height); } -void HistoryContact::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width) const { +void HistoryContact::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width) const { if (width < 0) width = w; const HistoryReply *reply = toHistoryReply(parent); @@ -3318,7 +3322,7 @@ void HistoryContact::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, } } else if (fwd) { if (y >= fwdFrom && y < skipy) { - return fwd->getForwardedState(lnk, inText, x - st::mediaPadding.left(), width - st::mediaPadding.left() - st::mediaPadding.right()); + return fwd->getForwardedState(lnk, state, x - st::mediaPadding.left(), width - st::mediaPadding.left() - st::mediaPadding.right()); } } @@ -3468,7 +3472,7 @@ void HistoryWebPage::initDimensions(const HistoryItem *parent) { if (data->photo && data->type != WebPagePhoto && data->type != WebPageVideo) { if (data->type == WebPageProfile) { _asArticle = true; - } else if (data->siteName == QLatin1String("Twitter") || data->siteName == QLatin1String("Facebook")) { + } else if (data->siteName == qstr("Twitter") || data->siteName == qstr("Facebook")) { _asArticle = false; } else { _asArticle = true; @@ -3532,9 +3536,9 @@ void HistoryWebPage::initDimensions(const HistoryItem *parent) { QString text = textClean(data->description); if (!_asArticle && !data->photo) text += textcmdSkipBlock(parent->timeWidth(true), st::msgDateFont->height - st::msgDateDelta.y()); const TextParseOptions *opts = &_webpageDescriptionOptions; - if (data->siteName == QLatin1String("Twitter")) { + if (data->siteName == qstr("Twitter")) { opts = &_twitterDescriptionOptions; - } else if (data->siteName == QLatin1String("Instagram")) { + } else if (data->siteName == qstr("Instagram")) { opts = &_instagramDescriptionOptions; } _description.setText(st::webPageDescriptionFont, text, *opts); @@ -3689,7 +3693,7 @@ void HistoryWebPage::draw(QPainter &p, const HistoryItem *parent, bool selected, } if (data->type == WebPageVideo) { - if (data->siteName == QLatin1String("YouTube")) { + if (data->siteName == qstr("YouTube")) { p.drawPixmap(QPoint((pixwidth - st::youtubeIcon.pxWidth()) / 2, (pixheight - st::youtubeIcon.pxHeight()) / 2), App::sprite(), st::youtubeIcon); } else { p.drawPixmap(QPoint((pixwidth - st::videoIcon.pxWidth()) / 2, (pixheight - st::videoIcon.pxHeight()) / 2), App::sprite(), st::videoIcon); @@ -3814,7 +3818,7 @@ bool HistoryWebPage::hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 return (x >= 0 && y >= 0 && x < width && y < _height); } -void HistoryWebPage::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width) const { +void HistoryWebPage::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width) const { if (width < 0) width = w; if (width < 1) return; @@ -3855,11 +3859,14 @@ void HistoryWebPage::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, } else if (!data->photo) { articleLines = 3; } - if (y >= 0 && y < st::webPageDescriptionFont->height * articleLines) { + int32 desch = qMin(_description.countHeight(width), st::webPageDescriptionFont->height * articleLines); + if (y >= 0 && y < desch) { + bool inText = false; _description.getState(lnk, inText, x, y, availw); + state = inText ? HistoryInTextCursorState : HistoryDefaultCursorState; return; } - y -= qMin(_description.countHeight(width), st::webPageDescriptionFont->height * articleLines); + y -= desch; } if (_siteNameWidth || !_title.isEmpty() || !_description.isEmpty()) { y -= st::webPagePhotoSkip; @@ -4568,7 +4575,7 @@ bool HistoryImageLink::hasPoint(int32 x, int32 y, const HistoryItem *parent, int return (x >= 0 && y >= 0 && x < width && y < _height); } -void HistoryImageLink::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width) const { +void HistoryImageLink::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width) const { if (width < 0) width = w; int skipx = 0, skipy = 0, height = _height; const HistoryReply *reply = toHistoryReply(parent); @@ -4601,7 +4608,7 @@ void HistoryImageLink::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y } } else if (fwd) { if (y >= fwdFrom && y < fwdFrom + st::msgServiceNameFont->height) { - return fwd->getForwardedState(lnk, inText, x - st::mediaPadding.left(), width - st::mediaPadding.left() - st::mediaPadding.right()); + return fwd->getForwardedState(lnk, state, x - st::mediaPadding.left(), width - st::mediaPadding.left() - st::mediaPadding.right()); } } height -= st::mediaPadding.bottom(); @@ -5026,8 +5033,8 @@ bool HistoryMessage::hasPoint(int32 x, int32 y) const { return r.contains(x, y); } -void HistoryMessage::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) const { - inText = false; +void HistoryMessage::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const { + state = HistoryDefaultCursorState; lnk = TextLinkPtr(); int32 left = out() ? st::msgMargin.right() : st::msgMargin.left(), width = _history->width - st::msgMargin.left() - st::msgMargin.right(), mwidth = st::msgMaxWidth; @@ -5055,31 +5062,46 @@ void HistoryMessage::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) width = _maxw; } if (justMedia()) { - _media->getState(lnk, inText, x - left, y - st::msgMargin.top(), this); + _media->getState(lnk, state, x - left, y - st::msgMargin.top(), this); return; } QRect r(left, st::msgMargin.top(), width, _height - st::msgMargin.top() - st::msgMargin.bottom()); if (!out() && _history->peer->chat) { // from user left name - if (x >= r.left() + st::msgPadding.left() && y >= r.top() + st::msgPadding.top() && y < r.top() + st::msgPadding.top() + st::msgNameFont->height && x < r.right() - st::msgPadding.right() && x < r.left() + st::msgPadding.left() + _from->nameText.maxWidth()) { + if (x >= r.left() + st::msgPadding.left() && y >= r.top() + st::msgPadding.top() && y < r.top() + st::msgPadding.top() + st::msgNameFont->height && x < r.left() + r.width() - st::msgPadding.right() && x < r.left() + st::msgPadding.left() + _from->nameText.maxWidth()) { lnk = _from->lnk; return; } r.setTop(r.top() + st::msgNameFont->height); } - return getStateFromMessageText(lnk, inText, x, y, r); + + getStateFromMessageText(lnk, state, x, y, r); } -void HistoryMessage::getStateFromMessageText(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const QRect &r) const { +void HistoryMessage::getStateFromMessageText(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const QRect &r) const { + int32 dateX = r.right() - st::msgPadding.right() + st::msgDateDelta.x() - timeWidth(true) + st::msgDateSpace; + int32 dateY = r.bottom() - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgDateFont->height; + bool inDate = QRect(dateX, dateY, timeWidth(true) - st::msgDateSpace, st::msgDateFont->height).contains(x, y); + QRect trect(r.marginsAdded(-st::msgPadding)); TextLinkPtr medialnk; if (_media && _media->isDisplayed()) { if (y >= trect.bottom() - _media->height() && y < trect.bottom()) { - _media->getState(lnk, inText, x - trect.left(), y + _media->height() - trect.bottom(), this); + _media->getState(lnk, state, x - trect.left(), y + _media->height() - trect.bottom(), this); + if (inDate) state = HistoryInDateCursorState; return; } trect.setBottom(trect.bottom() - _media->height() - st::msgPadding.bottom()); } + bool inText = false; _text.getState(lnk, inText, x - trect.x(), y - trect.y(), trect.width()); + + if (inDate) { + state = HistoryInDateCursorState; + } else if (inText) { + state = HistoryInTextCursorState; + } else { + state = HistoryDefaultCursorState; + } } void HistoryMessage::getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const { @@ -5268,9 +5290,9 @@ bool HistoryForwarded::hasPoint(int32 x, int32 y) const { return HistoryMessage::hasPoint(x, y); } -void HistoryForwarded::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) const { +void HistoryForwarded::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const { lnk = TextLinkPtr(); - inText = false; + state = HistoryDefaultCursorState; if (!justMedia()) { int32 left = out() ? st::msgMargin.right() : st::msgMargin.left(), width = _history->width - st::msgMargin.left() - st::msgMargin.right(); @@ -5281,7 +5303,7 @@ void HistoryForwarded::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y if (!out() && _history->peer->chat) { // from user left photo if (x >= left && x < left + st::msgPhotoSize) { - return HistoryMessage::getState(lnk, inText, x, y); + return HistoryMessage::getState(lnk, state, x, y); } // width -= st::msgPhotoSkip; left += st::msgPhotoSkip; @@ -5296,28 +5318,28 @@ void HistoryForwarded::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y if (!out() && _history->peer->chat) { style::font nameFont(st::msgNameFont); if (y >= r.top() + st::msgPadding.top() && y < r.top() + st::msgPadding.top() + nameFont->height) { - return HistoryMessage::getState(lnk, inText, x, y); + return HistoryMessage::getState(lnk, state, x, y); } r.setTop(r.top() + nameFont->height); } QRect trect(r.marginsAdded(-st::msgPadding)); if (y >= trect.top() && y < trect.top() + st::msgServiceNameFont->height) { - return getForwardedState(lnk, inText, x - trect.left(), trect.right() - trect.left()); + return getForwardedState(lnk, state, x - trect.left(), trect.right() - trect.left()); } y -= st::msgServiceNameFont->height; } - return HistoryMessage::getState(lnk, inText, x, y); + return HistoryMessage::getState(lnk, state, x, y); } -void HistoryForwarded::getStateFromMessageText(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const QRect &r) const { +void HistoryForwarded::getStateFromMessageText(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const QRect &r) const { QRect realr(r); realr.setHeight(r.height() - st::msgServiceNameFont->height); - HistoryMessage::getStateFromMessageText(lnk, inText, x, y, realr); + HistoryMessage::getStateFromMessageText(lnk, state, x, y, realr); } -void HistoryForwarded::getForwardedState(TextLinkPtr &lnk, bool &inText, int32 x, int32 w) const { - inText = false; +void HistoryForwarded::getForwardedState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 w) const { + state = HistoryDefaultCursorState; if (x >= fromWidth && x < w && x < fromWidth + fwdFromName.maxWidth()) { lnk = fwdFrom->lnk; } else { @@ -5571,9 +5593,9 @@ bool HistoryReply::hasPoint(int32 x, int32 y) const { return HistoryMessage::hasPoint(x, y); } -void HistoryReply::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) const { +void HistoryReply::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const { lnk = TextLinkPtr(); - inText = false; + state = HistoryDefaultCursorState; if (!justMedia()) { int32 left = out() ? st::msgMargin.right() : st::msgMargin.left(), width = _history->width - st::msgMargin.left() - st::msgMargin.right(); @@ -5584,7 +5606,7 @@ void HistoryReply::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) co if (!out() && _history->peer->chat) { // from user left photo if (x >= left && x < left + st::msgPhotoSize) { - return HistoryMessage::getState(lnk, inText, x, y); + return HistoryMessage::getState(lnk, state, x, y); } // width -= st::msgPhotoSkip; left += st::msgPhotoSkip; @@ -5599,7 +5621,7 @@ void HistoryReply::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) co if (!out() && _history->peer->chat) { style::font nameFont(st::msgNameFont); if (y >= r.top() + st::msgPadding.top() && y < r.top() + st::msgPadding.top() + nameFont->height) { - return HistoryMessage::getState(lnk, inText, x, y); + return HistoryMessage::getState(lnk, state, x, y); } r.setTop(r.top() + nameFont->height); } @@ -5614,15 +5636,15 @@ void HistoryReply::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) co } y -= h; } - return HistoryMessage::getState(lnk, inText, x, y); + return HistoryMessage::getState(lnk, state, x, y); } -void HistoryReply::getStateFromMessageText(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const QRect &r) const { +void HistoryReply::getStateFromMessageText(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const QRect &r) const { int32 h = st::msgReplyPadding.top() + st::msgReplyBarSize.height() + st::msgReplyPadding.bottom(); QRect realr(r); realr.setHeight(r.height() - h); - HistoryMessage::getStateFromMessageText(lnk, inText, x, y, realr); + HistoryMessage::getStateFromMessageText(lnk, state, x, y, realr); } void HistoryReply::getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const { @@ -5861,9 +5883,9 @@ bool HistoryServiceMsg::hasPoint(int32 x, int32 y) const { return QRect(left, st::msgServiceMargin.top(), width, height).contains(x, y); } -void HistoryServiceMsg::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) const { +void HistoryServiceMsg::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const { lnk = TextLinkPtr(); - inText = false; + state = HistoryDefaultCursorState; int32 left = st::msgServiceMargin.left(), width = _history->width - st::msgServiceMargin.left() - st::msgServiceMargin.left(), height = _height - st::msgServiceMargin.top() - st::msgServiceMargin.bottom(); // two small margins if (width < 1) return; @@ -5873,10 +5895,11 @@ void HistoryServiceMsg::getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 } QRect trect(QRect(left, st::msgServiceMargin.top(), width, height).marginsAdded(-st::msgServicePadding)); if (trect.contains(x, y)) { - return _text.getState(lnk, inText, x - trect.x(), y - trect.y(), trect.width(), Qt::AlignCenter); - } - if (_media) { - _media->getState(lnk, inText, x - st::msgServiceMargin.left() - (width - _media->maxWidth()) / 2, y - st::msgServiceMargin.top() - height - st::msgServiceMargin.top(), this); + bool inText = false; + _text.getState(lnk, inText, x - trect.x(), y - trect.y(), trect.width(), Qt::AlignCenter); + state = inText ? HistoryInTextCursorState : HistoryDefaultCursorState; + } else if (_media) { + _media->getState(lnk, state, x - st::msgServiceMargin.left() - (width - _media->maxWidth()) / 2, y - st::msgServiceMargin.top() - height - st::msgServiceMargin.top(), this); } } diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index 367650617..50810501f 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -636,6 +636,12 @@ class HistoryReply; // dynamic_cast optimize class HistoryMessage; // dynamic_cast optimize class HistoryForwarded; // dynamic_cast optimize +enum HistoryCursorState { + HistoryDefaultCursorState, + HistoryInTextCursorState, + HistoryInDateCursorState +}; + class HistoryMedia; class HistoryItem : public HistoryElem { public: @@ -698,9 +704,9 @@ public: virtual bool hasPoint(int32 x, int32 y) const { return false; } - virtual void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) const { + virtual void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const { lnk = TextLinkPtr(); - inText = false; + state = HistoryDefaultCursorState; } virtual void getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const { // from text upon = hasPoint(x, y); @@ -788,6 +794,8 @@ protected: }; class MessageLink : public ITextLink { + TEXT_LINK_CLASS(MessageLink) + public: MessageLink(PeerId peer, MsgId msgid) : _peer(peer), _msgid(msgid) { } @@ -828,7 +836,7 @@ public: w = qMin(width, _maxw); return _height; } - virtual void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const = 0; + virtual void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const = 0; virtual void draw(QPainter &p, const HistoryItem *parent, bool selected, int32 width = -1) const = 0; virtual bool uploading() const { return false; @@ -891,7 +899,7 @@ public: const QString inHistoryText() const; const Text &captionForClone() const; bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; - void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; + void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; HistoryMedia *clone() const; PhotoData *photo() const { @@ -939,7 +947,7 @@ public: const QString inDialogsText() const; const QString inHistoryText() const; bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; - void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; + void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; bool uploading() const { return (data->status == FileUploading); } @@ -979,7 +987,7 @@ public: const QString inDialogsText() const; const QString inHistoryText() const; bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; - void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; + void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; bool uploading() const { return (data->status == FileUploading); } @@ -1022,7 +1030,7 @@ public: bool uploading() const { return (data->status == FileUploading); } - void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; + void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; HistoryMedia *clone() const; DocumentData *document() { @@ -1067,7 +1075,7 @@ public: const QString inHistoryText() const; bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; int32 countHeight(const HistoryItem *parent, int32 width = -1) const; - void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; + void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; HistoryMedia *clone() const; DocumentData *document() { @@ -1102,7 +1110,7 @@ public: const QString inDialogsText() const; const QString inHistoryText() const; bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width) const; - void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width) const; + void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width) const; HistoryMedia *clone() const; void updateFrom(const MTPMessageMedia &media); @@ -1132,7 +1140,7 @@ public: const QString inDialogsText() const; const QString inHistoryText() const; bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; - void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; + void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; HistoryMedia *clone() const; void regItem(HistoryItem *item); @@ -1225,7 +1233,7 @@ public: const QString inDialogsText() const; const QString inHistoryText() const; bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; - void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; + void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; HistoryMedia *clone() const; bool isImageLink() const { @@ -1267,8 +1275,8 @@ public: int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0); bool hasPoint(int32 x, int32 y) const; - void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) const; - virtual void getStateFromMessageText(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const QRect &r) const; + void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const; + virtual void getStateFromMessageText(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const QRect &r) const; void getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const; uint32 adjustSelection(uint16 from, uint16 to, TextSelectType type) const { @@ -1343,9 +1351,9 @@ public: void drawMessageText(QPainter &p, const QRect &trect, uint32 selection) const; int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0); bool hasPoint(int32 x, int32 y) const; - void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) const; - void getStateFromMessageText(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const QRect &r) const; - void getForwardedState(TextLinkPtr &lnk, bool &inText, int32 x, int32 w) const; + void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const; + void getStateFromMessageText(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const QRect &r) const; + void getForwardedState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 w) const; void getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const; QDateTime dateForwarded() const { @@ -1396,8 +1404,8 @@ public: void drawMessageText(QPainter &p, const QRect &trect, uint32 selection) const; int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0); bool hasPoint(int32 x, int32 y) const; - void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) const; - void getStateFromMessageText(TextLinkPtr &lnk, bool &inText, int32 x, int32 y, const QRect &r) const; + void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const; + void getStateFromMessageText(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const QRect &r) const; void getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const; UserData *replyTo() const { @@ -1437,7 +1445,7 @@ public: void draw(QPainter &p, uint32 selection) const; int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0); bool hasPoint(int32 x, int32 y) const; - void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) const; + void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const; void getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const; uint32 adjustSelection(uint16 from, uint16 to, TextSelectType type) const { return _text.adjustSelection(from, to, type); @@ -1478,9 +1486,9 @@ class HistoryDateMsg : public HistoryServiceMsg { public: HistoryDateMsg(History *history, HistoryBlock *block, const QDate &date); - void getState(TextLinkPtr &lnk, bool &inText, int32 x, int32 y) const { + void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const { lnk = TextLinkPtr(); - inText = false; + state = HistoryDefaultCursorState; } void getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const { symbol = 0xFFFF; diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 4b76e8564..b51c049c6 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -47,6 +47,7 @@ HistoryList::HistoryList(HistoryWidget *historyWidget, ScrollArea *scroll, Histo , _dragAction(NoDrag) , _dragSelType(TextSelectLetters) , _dragItem(0) + , _dragCursorState(HistoryDefaultCursorState) , _dragWasInactive(false) , _dragSelFrom(0) , _dragSelTo(0) @@ -396,8 +397,7 @@ void HistoryList::dragActionStart(const QPoint &screenPos, Qt::MouseButton butto _dragStartPos = mapMouseToItem(mapFromGlobal(screenPos), _dragItem); _dragWasInactive = App::wnd()->inactivePress(); if (_dragWasInactive) App::wnd()->inactivePress(false); - bool textLink = textlnkDown() && !textlnkDown()->encoded().isEmpty(); - if (textLink) { + if (textlnkDown()) { _dragAction = PrepareDrag; } else if (!_selected.isEmpty()) { if (_selected.cbegin().value() == FullItemSel) { @@ -451,18 +451,22 @@ void HistoryList::dragActionStart(const QPoint &screenPos, Qt::MouseButton butto if (uponSelected) { _dragAction = PrepareDrag; // start text drag } else if (!_dragWasInactive) { - if (afterDragSymbol) ++_dragSymbol; - uint32 selStatus = (_dragSymbol << 16) | _dragSymbol; - if (selStatus != FullItemSel && (_selected.isEmpty() || _selected.cbegin().value() != FullItemSel)) { - if (!_selected.isEmpty()) { - updateMsg(_selected.cbegin().key()); - _selected.clear(); - } - _selected.insert(_dragItem, selStatus); - _dragAction = Selecting; - updateMsg(_dragItem); + if (dynamic_cast(App::pressedItem()->getMedia()) || _dragCursorState == HistoryInDateCursorState) { + _dragAction = PrepareDrag; // start sticker drag or by-date drag } else { - _dragAction = PrepareSelect; + if (afterDragSymbol) ++_dragSymbol; + uint32 selStatus = (_dragSymbol << 16) | _dragSymbol; + if (selStatus != FullItemSel && (_selected.isEmpty() || _selected.cbegin().value() != FullItemSel)) { + if (!_selected.isEmpty()) { + updateMsg(_selected.cbegin().key()); + _selected.clear(); + } + _selected.insert(_dragItem, selStatus); + _dragAction = Selecting; + updateMsg(_dragItem); + } else { + _dragAction = PrepareSelect; + } } } } else if (!_dragWasInactive) { @@ -529,6 +533,18 @@ void HistoryList::dragActionFinish(const QPoint &screenPos, Qt::MouseButton butt if (textlnkOver()) { if (textlnkDown() == textlnkOver() && _dragAction != Dragging) { needClick = textlnkDown(); + + QLatin1String lnkType = needClick->type(); + bool lnkPhoto = (lnkType == qstr("PhotoLink")), + lnkVideo = (lnkType == qstr("VideoOpenLink")), + lnkAudio = (lnkType == qstr("AudioOpenLink")), + lnkDocument = (lnkType == qstr("DocumentOpenLink")), + lnkContact = (lnkType == qstr("PeerLink") && dynamic_cast(App::pressedLinkItem() ? App::pressedLinkItem()->getMedia() : 0)); + if (_dragAction == PrepareDrag && !_dragWasInactive && !_selected.isEmpty() && _selected.cbegin().value() == FullItemSel && button != Qt::RightButton) { + if (lnkPhoto || lnkVideo || lnkAudio || lnkDocument || lnkContact) { + needClick = TextLinkPtr(); + } + } } } if (textlnkDown()) { @@ -553,7 +569,7 @@ void HistoryList::dragActionFinish(const QPoint &screenPos, Qt::MouseButton butt dragActionCancel(); return; } - if (_dragAction == PrepareSelect && !needClick && !_dragWasInactive && !_selected.isEmpty() && _selected.cbegin().value() == FullItemSel) { + if (_dragAction == PrepareSelect && !_dragWasInactive && !_selected.isEmpty() && _selected.cbegin().value() == FullItemSel) { SelectedItems::iterator i = _selected.find(_dragItem); if (i == _selected.cend() && !_dragItem->serviceMsg() && _dragItem->id > 0) { if (_selected.size() < MaxSelectedItems) { @@ -566,11 +582,16 @@ void HistoryList::dragActionFinish(const QPoint &screenPos, Qt::MouseButton butt _selected.erase(i); } updateMsg(_dragItem); - } else if (_dragAction == PrepareDrag && !needClick && !_dragWasInactive && button != Qt::RightButton) { + } else if (_dragAction == PrepareDrag && !_dragWasInactive && button != Qt::RightButton) { SelectedItems::iterator i = _selected.find(_dragItem); if (i != _selected.cend() && i.value() == FullItemSel) { _selected.erase(i); updateMsg(_dragItem); + } else if (i == _selected.cend() && !_dragItem->serviceMsg() && _dragItem->id > 0 && !_selected.isEmpty() && _selected.cbegin().value() == FullItemSel) { + if (_selected.size() < MaxSelectedItems) { + _selected.insert(_dragItem, FullItemSel); + updateMsg(_dragItem); + } } else { _selected.clear(); parentWidget()->update(); @@ -1211,16 +1232,19 @@ void HistoryList::onUpdateSelected() { linkTipTimer.start(1000); Qt::CursorShape cur = style::cur_default; - bool inText = false, lnkChanged = false, lnkInDesc = false; + HistoryCursorState cursorState = HistoryDefaultCursorState; + bool lnkChanged = false, lnkInDesc = false; TextLinkPtr lnk; if (point.y() < ySkip) { if (botInfo && !botInfo->text.isEmpty() && botDescHeight > 0) { + bool inText = false; botInfo->text.getState(lnk, inText, point.x() - botDescRect.left() - st::msgPadding.left(), point.y() - botDescRect.top() - st::msgPadding.top() - st::botDescSkip - st::msgNameFont->height, botDescWidth); + cursorState = inText ? HistoryInTextCursorState : HistoryDefaultCursorState; lnkInDesc = true; } } else if (item) { - item->getState(lnk, inText, m.x(), m.y()); + item->getState(lnk, cursorState, m.x(), m.y()); } if (lnk != textlnkOver()) { lnkChanged = true; @@ -1244,10 +1268,13 @@ void HistoryList::onUpdateSelected() { } if (_dragAction == NoDrag) { + _dragCursorState = cursorState; if (lnk) { cur = style::cur_pointer; - } else if (inText && (_selected.isEmpty() || _selected.cbegin().value() != FullItemSel)) { + } else if (_dragCursorState == HistoryInTextCursorState && (_selected.isEmpty() || _selected.cbegin().value() != FullItemSel)) { cur = style::cur_text; + } else if (_dragCursorState == HistoryInDateCursorState) { +// cur = style::cur_cross; } } else if (item) { if (item != _dragItem || (m - _dragStartPos).manhattanLength() >= QApplication::startDragDistance()) { @@ -1307,6 +1334,38 @@ void HistoryList::onUpdateSelected() { drag->setMimeData(mimeData); drag->exec(); return; + } else { + HistoryItem *pressedLnkItem = App::pressedLinkItem(), *pressedItem = App::pressedItem(); + QLatin1String lnkType = (textlnkDown() && pressedLnkItem) ? textlnkDown()->type() : qstr(""); + bool lnkPhoto = (lnkType == qstr("PhotoLink")), + lnkVideo = (lnkType == qstr("VideoOpenLink")), + lnkAudio = (lnkType == qstr("AudioOpenLink")), + lnkDocument = (lnkType == qstr("DocumentOpenLink")), + lnkContact = (lnkType == qstr("PeerLink") && dynamic_cast(pressedLnkItem->getMedia())), + dragSticker = dynamic_cast(pressedItem ? pressedItem->getMedia() : 0), + dragByDate = (_dragCursorState == HistoryInDateCursorState); + if (lnkPhoto || lnkVideo || lnkAudio || lnkDocument || lnkContact || dragSticker || dragByDate) { + QDrag *drag = new QDrag(App::wnd()); + QMimeData *mimeData = new QMimeData; + + if (dragSticker || dragByDate) { + mimeData->setData(qsl("application/x-td-forward-pressed"), "1"); + } else { + mimeData->setData(qsl("application/x-td-forward-pressed-link"), "1"); + } + if (lnkDocument) { + QString already = static_cast(textlnkDown().data())->document()->already(true); + if (!already.isEmpty()) { + QList urls; + urls.push_back(QUrl::fromLocalFile(already)); + mimeData->setUrls(urls); + } + } + + drag->setMimeData(mimeData); + drag->exec(Qt::CopyAction); + return; + } } } else if (_dragAction == PrepareSelect) { _dragAction = Selecting; @@ -2000,7 +2059,7 @@ void HistoryHider::forward() { } else if (_sendPath) { parent()->onSendPaths(offered->id); } else { - parent()->onForward(offered->id, _forwardSelected); + parent()->onForward(offered->id, _forwardSelected ? ForwardSelectedMessages : ForwardContextMessage); } } emit forwarded(); @@ -2056,7 +2115,7 @@ bool HistoryHider::offerPeer(PeerId peer) { } else { PeerId to = offered->id; offered = 0; - parent()->onForward(to, _forwardSelected); + parent()->onForward(to, _forwardSelected ? ForwardSelectedMessages : ForwardContextMessage); startHide(); return false; } @@ -3834,7 +3893,7 @@ bool HistoryWidget::eventFilter(QObject *obj, QEvent *e) { } DragState HistoryWidget::getDragState(const QMimeData *d) { - if (!d) return DragStateNone; + if (!d || d->hasFormat(qsl("application/x-td-forward-pressed-link"))) return DragStateNone; if (d->hasImage()) return DragStateImage; diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index 61bf91ec5..ccd60b448 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -148,6 +148,7 @@ private: TextSelectType _dragSelType; QPoint _dragStartPos, _dragPos; HistoryItem *_dragItem; + HistoryCursorState _dragCursorState; uint16 _dragSymbol; bool _dragWasInactive; diff --git a/Telegram/SourceFiles/intro/introphone.cpp b/Telegram/SourceFiles/intro/introphone.cpp index 8336cfc34..96bd65a97 100644 --- a/Telegram/SourceFiles/intro/introphone.cpp +++ b/Telegram/SourceFiles/intro/introphone.cpp @@ -26,6 +26,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org namespace { class SignUpLink : public ITextLink { + TEXT_LINK_CLASS(SignUpLink) + public: SignUpLink(IntroPhone *widget) : _widget(widget) { diff --git a/Telegram/SourceFiles/lang.cpp b/Telegram/SourceFiles/lang.cpp index 6ee239eb0..0857788d7 100644 --- a/Telegram/SourceFiles/lang.cpp +++ b/Telegram/SourceFiles/lang.cpp @@ -71,28 +71,28 @@ void LangLoader::foundKeyValue(LangKey key) { } QString Translator::translate(const char *context, const char *sourceText, const char *disambiguation, int n) const { - if (QLatin1String("QMenuBar") == context) { - if (QLatin1String("Services") == sourceText) return lang(lng_mac_menu_services); - if (QLatin1String("Hide %1") == sourceText) return lng_mac_menu_hide_telegram(lt_telegram, qsl("%1")); - if (QLatin1String("Hide Others") == sourceText) return lang(lng_mac_menu_hide_others); - if (QLatin1String("Show All") == sourceText) return lang(lng_mac_menu_show_all); - if (QLatin1String("Preferences...") == sourceText) return lang(lng_mac_menu_preferences); - if (QLatin1String("Quit %1") == sourceText) return lng_mac_menu_quit_telegram(lt_telegram, qsl("%1")); - if (QLatin1String("About %1") == sourceText) return lng_mac_menu_about_telegram(lt_telegram, qsl("%1")); + if (qstr("QMenuBar") == context) { + if (qstr("Services") == sourceText) return lang(lng_mac_menu_services); + if (qstr("Hide %1") == sourceText) return lng_mac_menu_hide_telegram(lt_telegram, qsl("%1")); + if (qstr("Hide Others") == sourceText) return lang(lng_mac_menu_hide_others); + if (qstr("Show All") == sourceText) return lang(lng_mac_menu_show_all); + if (qstr("Preferences...") == sourceText) return lang(lng_mac_menu_preferences); + if (qstr("Quit %1") == sourceText) return lng_mac_menu_quit_telegram(lt_telegram, qsl("%1")); + if (qstr("About %1") == sourceText) return lng_mac_menu_about_telegram(lt_telegram, qsl("%1")); return QString(); } - if (QLatin1String("QWidgetTextControl") == context || QLatin1String("QLineEdit") == context) { - if (QLatin1String("&Undo") == sourceText) return lang((cPlatform() == dbipWindows) ? lng_wnd_menu_undo : ((cPlatform() == dbipMac) ? lng_mac_menu_undo : lng_linux_menu_undo)); - if (QLatin1String("&Redo") == sourceText) return lang((cPlatform() == dbipWindows) ? lng_wnd_menu_redo : ((cPlatform() == dbipMac) ? lng_mac_menu_redo : lng_linux_menu_redo)); - if (QLatin1String("Cu&t") == sourceText) return lang(lng_mac_menu_cut); - if (QLatin1String("&Copy") == sourceText) return lang(lng_mac_menu_copy); - if (QLatin1String("&Paste") == sourceText) return lang(lng_mac_menu_paste); - if (QLatin1String("Delete") == sourceText) return lang(lng_mac_menu_delete); - if (QLatin1String("Select All") == sourceText) return lang(lng_mac_menu_select_all); + if (qstr("QWidgetTextControl") == context || qstr("QLineEdit") == context) { + if (qstr("&Undo") == sourceText) return lang((cPlatform() == dbipWindows) ? lng_wnd_menu_undo : ((cPlatform() == dbipMac) ? lng_mac_menu_undo : lng_linux_menu_undo)); + if (qstr("&Redo") == sourceText) return lang((cPlatform() == dbipWindows) ? lng_wnd_menu_redo : ((cPlatform() == dbipMac) ? lng_mac_menu_redo : lng_linux_menu_redo)); + if (qstr("Cu&t") == sourceText) return lang(lng_mac_menu_cut); + if (qstr("&Copy") == sourceText) return lang(lng_mac_menu_copy); + if (qstr("&Paste") == sourceText) return lang(lng_mac_menu_paste); + if (qstr("Delete") == sourceText) return lang(lng_mac_menu_delete); + if (qstr("Select All") == sourceText) return lang(lng_mac_menu_select_all); return QString(); } - if (QLatin1String("QUnicodeControlCharacterMenu") == context) { - if (QLatin1String("Insert Unicode control character") == sourceText) return lang(lng_menu_insert_unicode); + if (qstr("QUnicodeControlCharacterMenu") == context) { + if (qstr("Insert Unicode control character") == sourceText) return lang(lng_menu_insert_unicode); return QString(); } return QString(); diff --git a/Telegram/SourceFiles/localstorage.cpp b/Telegram/SourceFiles/localstorage.cpp index 60bac4642..4d797463c 100644 --- a/Telegram/SourceFiles/localstorage.cpp +++ b/Telegram/SourceFiles/localstorage.cpp @@ -2780,7 +2780,7 @@ namespace Local { if (!QDir(di.filePath()).removeRecursively()) result = false; } else { QString path = di.filePath(); - if (!path.endsWith(QLatin1String("map0")) && !path.endsWith(QLatin1String("map1"))) { + if (!path.endsWith(qstr("map0")) && !path.endsWith(qstr("map1"))) { if (!QFile::remove(di.filePath())) result = false; } } diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index b3229f925..56ea3442c 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -409,17 +409,27 @@ _failDifferenceTimeout(1), _lastUpdateTime(0), _cachedX(0), _cachedY(0), _backgr _api->init(); } -void MainWidget::onForward(const PeerId &peer, bool forwardSelected) { +void MainWidget::onForward(const PeerId &peer, ForwardWhatMessages what) { history.cancelReply(); _toForward.clear(); - if (forwardSelected) { + if (what == ForwardSelectedMessages) { if (overview) { overview->fillSelectedItems(_toForward, false); } else { history.fillSelectedItems(_toForward, false); } - } else if (App::contextItem() && dynamic_cast(App::contextItem()) && App::contextItem()->id > 0) { - _toForward.insert(App::contextItem()->id, App::contextItem()); + } else { + HistoryItem *item = 0; + if (what == ForwardContextMessage) { + item = App::contextItem(); + } else if (what == ForwardPressedMessage) { + item = App::pressedItem(); + } else if (what == ForwardPressedLinkMessage) { + item = App::pressedLinkItem(); + } + if (dynamic_cast(item) && item->id > 0) { + _toForward.insert(item->id, item); + } } updateForwardingTexts(); showPeer(peer, 0, false, true); @@ -571,9 +581,17 @@ void MainWidget::onSendPaths(const PeerId &peer) { history.onSendPaths(peer); } -void MainWidget::onFilesDrop(const PeerId &peer, const QMimeData *data) { - showPeer(peer, 0, false, true); - history.onFilesDrop(data); +void MainWidget::onFilesOrForwardDrop(const PeerId &peer, const QMimeData *data) { + if (data->hasFormat(qsl("application/x-td-forward-selected"))) { + onForward(peer, ForwardSelectedMessages); + } else if (data->hasFormat(qsl("application/x-td-forward-pressed-link"))) { + onForward(peer, ForwardPressedLinkMessage); + } else if (data->hasFormat(qsl("application/x-td-forward-pressed"))) { + onForward(peer, ForwardPressedMessage); + } else { + showPeer(peer, 0, false, true); + history.onFilesDrop(data); + } } void MainWidget::noHider(HistoryHider *destroyed) { @@ -1429,7 +1447,7 @@ void MainWidget::audioPlayProgress(AudioData *audio) { audioPlayer()->clearStoppedAtStart(audio); QString already = audio->already(true); if (already.isEmpty() && !audio->data.isEmpty()) { - bool mp3 = (audio->mime == QLatin1String("audio/mp3")); + bool mp3 = (audio->mime == qstr("audio/mp3")); QString filename = saveFileName(lang(lng_save_audio), mp3 ? qsl("MP3 Audio (*.mp3);;All files (*.*)") : qsl("OGG Opus Audio (*.ogg);;All files (*.*)"), qsl("audio"), mp3 ? qsl(".mp3") : qsl(".ogg"), false); if (!filename.isEmpty()) { QFile f(filename); @@ -2560,18 +2578,18 @@ bool MainWidget::started() { void MainWidget::openLocalUrl(const QString &url) { QString u(url.trimmed()); - if (u.startsWith(QLatin1String("tg://resolve"), Qt::CaseInsensitive)) { + if (u.startsWith(qstr("tg://resolve"), Qt::CaseInsensitive)) { QRegularExpressionMatch m = QRegularExpression(qsl("^tg://resolve/?\\?domain=([a-zA-Z0-9\\.\\_]+)(&(start|startgroup)=([a-zA-Z0-9\\.\\_\\-]+))?(&|$)"), QRegularExpression::CaseInsensitiveOption).match(u); if (m.hasMatch()) { QString start = m.captured(3), startToken = m.captured(4); openUserByName(m.captured(1), (start == qsl("startgroup")), startToken); } - } else if (u.startsWith(QLatin1String("tg://join"), Qt::CaseInsensitive)) { + } else if (u.startsWith(qstr("tg://join"), Qt::CaseInsensitive)) { QRegularExpressionMatch m = QRegularExpression(qsl("^tg://join/?\\?invite=([a-zA-Z0-9\\.\\_\\-]+)(&|$)"), QRegularExpression::CaseInsensitiveOption).match(u); if (m.hasMatch()) { joinGroupByHash(m.captured(1)); } - } else if (u.startsWith(QLatin1String("tg://addstickers"), Qt::CaseInsensitive)) { + } else if (u.startsWith(qstr("tg://addstickers"), Qt::CaseInsensitive)) { QRegularExpressionMatch m = QRegularExpression(qsl("^tg://addstickers/?\\?set=([a-zA-Z0-9\\.\\_]+)(&|$)"), QRegularExpression::CaseInsensitiveOption).match(u); if (m.hasMatch()) { stickersBox(MTP_inputStickerSetShortName(MTP_string(m.captured(1)))); diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index cbeddd97d..acb09a70c 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -163,6 +163,13 @@ public: } }; +enum ForwardWhatMessages { + ForwardSelectedMessages, + ForwardContextMessage, + ForwardPressedMessage, + ForwardPressedLinkMessage +}; + class MainWidget : public QWidget, public Animated, public RPCSender { Q_OBJECT @@ -254,10 +261,10 @@ public: void shareContactLayer(UserData *contact); void hiderLayer(HistoryHider *h); void noHider(HistoryHider *destroyed); - void onForward(const PeerId &peer, bool forwardSelected); + void onForward(const PeerId &peer, ForwardWhatMessages what); void onShareContact(const PeerId &peer, UserData *contact); void onSendPaths(const PeerId &peer); - void onFilesDrop(const PeerId &peer, const QMimeData *data); + void onFilesOrForwardDrop(const PeerId &peer, const QMimeData *data); bool selectingPeer(bool withConfirm = false); void offerPeer(PeerId peer); void focusPeerSelect(); diff --git a/Telegram/SourceFiles/mediaview.cpp b/Telegram/SourceFiles/mediaview.cpp index 6275577ff..5ff944ea0 100644 --- a/Telegram/SourceFiles/mediaview.cpp +++ b/Telegram/SourceFiles/mediaview.cpp @@ -26,6 +26,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org namespace { class SaveMsgLink : public ITextLink { + TEXT_LINK_CLASS(SaveMsgLink) + public: SaveMsgLink(MediaView *view) : _view(view) { @@ -826,33 +828,33 @@ void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { style::sprite thumbs[] = { st::mvDocBlue, st::mvDocGreen, st::mvDocRed, st::mvDocYellow }; style::color colors[] = { st::mvDocBlueColor, st::mvDocGreenColor, st::mvDocRedColor, st::mvDocYellowColor }; QString name = _doc->name.toLower(), mime = _doc->mime.toLower(); - if (name.endsWith(QLatin1String(".doc")) || - name.endsWith(QLatin1String(".txt")) || - name.endsWith(QLatin1String(".psd")) || - mime.startsWith(QLatin1String("text/")) + if (name.endsWith(qstr(".doc")) || + name.endsWith(qstr(".txt")) || + name.endsWith(qstr(".psd")) || + mime.startsWith(qstr("text/")) ) { _docIcon = thumbs[0]; _docIconColor = colors[0]; } else if ( - name.endsWith(QLatin1String(".xls")) || - name.endsWith(QLatin1String(".csv")) + name.endsWith(qstr(".xls")) || + name.endsWith(qstr(".csv")) ) { _docIcon = thumbs[1]; _docIconColor = colors[1]; } else if ( - name.endsWith(QLatin1String(".pdf")) || - name.endsWith(QLatin1String(".ppt")) || - name.endsWith(QLatin1String(".key")) + name.endsWith(qstr(".pdf")) || + name.endsWith(qstr(".ppt")) || + name.endsWith(qstr(".key")) ) { _docIcon = thumbs[2]; _docIconColor = colors[2]; } else if ( - name.endsWith(QLatin1String(".zip")) || - name.endsWith(QLatin1String(".rar")) || - name.endsWith(QLatin1String(".ai")) || - name.endsWith(QLatin1String(".mp3")) || - name.endsWith(QLatin1String(".mov")) || - name.endsWith(QLatin1String(".avi")) + name.endsWith(qstr(".zip")) || + name.endsWith(qstr(".rar")) || + name.endsWith(qstr(".ai")) || + name.endsWith(qstr(".mp3")) || + name.endsWith(qstr(".mov")) || + name.endsWith(qstr(".avi")) ) { _docIcon = thumbs[3]; _docIconColor = colors[3]; diff --git a/Telegram/SourceFiles/overviewwidget.cpp b/Telegram/SourceFiles/overviewwidget.cpp index fede2bf1d..bb16f908a 100644 --- a/Telegram/SourceFiles/overviewwidget.cpp +++ b/Telegram/SourceFiles/overviewwidget.cpp @@ -824,9 +824,9 @@ void OverviewInner::onUpdateSelected() { } left += st::msgPhotoSkip; } - bool inText = false; + HistoryCursorState cursorState = HistoryDefaultCursorState; TextLinkPtr link; - media->getState(link, inText, m.x() - left, m.y() - y - st::msgMargin.top(), item, w); + media->getState(link, cursorState, m.x() - left, m.y() - y - st::msgMargin.top(), item, w); if (link) lnk = link; } } else { @@ -841,7 +841,7 @@ void OverviewInner::onUpdateSelected() { m = mapMouseToItem(m, _mousedItem, _mousedItemIndex); Qt::CursorShape cur = style::cur_default; - bool inText = false, lnkChanged = false; + bool lnkChanged = false; if (lnk != textlnkOver()) { lnkChanged = true; updateMsg(App::hoveredLinkItem()); diff --git a/Telegram/SourceFiles/profilewidget.cpp b/Telegram/SourceFiles/profilewidget.cpp index 3f639d777..983368798 100644 --- a/Telegram/SourceFiles/profilewidget.cpp +++ b/Telegram/SourceFiles/profilewidget.cpp @@ -1076,9 +1076,9 @@ void ProfileInner::updateInvitationLink() { } else { _createInvitationLink.setText(lang(lng_group_invite_create_new)); _invitationText = _peerChat->invitationUrl; - if (_invitationText.startsWith(QLatin1String("http://"), Qt::CaseInsensitive)) { + if (_invitationText.startsWith(qstr("http://"), Qt::CaseInsensitive)) { _invitationText = _invitationText.mid(7); - } else if (_invitationText.startsWith(QLatin1String("https://"), Qt::CaseInsensitive)) { + } else if (_invitationText.startsWith(qstr("https://"), Qt::CaseInsensitive)) { _invitationText = _invitationText.mid(8); } } diff --git a/Telegram/SourceFiles/pspecific_linux.cpp b/Telegram/SourceFiles/pspecific_linux.cpp index 75c20c365..73b656e08 100644 --- a/Telegram/SourceFiles/pspecific_linux.cpp +++ b/Telegram/SourceFiles/pspecific_linux.cpp @@ -352,7 +352,7 @@ namespace { public: _PsInitializer() { QString cdesktop = QString(getenv("XDG_CURRENT_DESKTOP")).toLower(); - noQtTrayIcon = (cdesktop == QLatin1String("unity")) || (cdesktop == QLatin1String("pantheon")) || (cdesktop == QLatin1String("gnome")); + noQtTrayIcon = (cdesktop == qstr("unity")) || (cdesktop == qstr("pantheon")) || (cdesktop == qstr("gnome")); if (noQtTrayIcon) cSetSupportTray(false); std::cout << "libs init..\n"; @@ -460,7 +460,7 @@ namespace { void setupUnity() { if (!useGtkBase || !noQtTrayIcon) return; - QLibrary lib_unity(QLatin1String("unity"), 9, 0); + QLibrary lib_unity(qstr("unity"), 9, 0); if (!loadLibrary(lib_unity, "unity", 9)) return; if (!loadFunction(lib_unity, "unity_launcher_entry_get_for_desktop_id", ps_unity_launcher_entry_get_for_desktop_id)) return; diff --git a/Telegram/SourceFiles/settingswidget.cpp b/Telegram/SourceFiles/settingswidget.cpp index 3089325d7..48a828e56 100644 --- a/Telegram/SourceFiles/settingswidget.cpp +++ b/Telegram/SourceFiles/settingswidget.cpp @@ -731,14 +731,14 @@ void SettingsInner::keyPressEvent(QKeyEvent *e) { int32 size = _secretText.size(), from = 0; while (size > from) { QStringRef str(_secretText.midRef(from)); - if (str == QLatin1String("debugmode")) { + if (str == qstr("debugmode")) { QString text = cDebug() ? qsl("Do you want to disable DEBUG logs?") : qsl("Do you want to enable DEBUG logs?\n\nAll network events will be logged."); ConfirmBox *box = new ConfirmBox(text); connect(box, SIGNAL(confirmed()), App::app(), SLOT(onSwitchDebugMode())); App::wnd()->showLayer(box); from = size; break; - } else if (str == QLatin1String("testmode")) { + } else if (str == qstr("testmode")) { QString text = cTestMode() ? qsl("Do you want to disable TEST mode?") : qsl("Do you want to enable TEST mode?\n\nYou will be switched to test cloud."); ConfirmBox *box = new ConfirmBox(text); connect(box, SIGNAL(confirmed()), App::app(), SLOT(onSwitchTestMode())); diff --git a/Telegram/SourceFiles/structs.cpp b/Telegram/SourceFiles/structs.cpp index 13615b966..5ffc01f14 100644 --- a/Telegram/SourceFiles/structs.cpp +++ b/Telegram/SourceFiles/structs.cpp @@ -455,7 +455,7 @@ void AudioOpenLink::onClick(Qt::MouseButton button) const { if (data->status != FileReady) return; - bool mp3 = (data->mime == QLatin1String("audio/mp3")); + bool mp3 = (data->mime == qstr("audio/mp3")); QString filename = saveFileName(lang(lng_save_audio), mp3 ? qsl("MP3 Audio (*.mp3);;All files (*.*)") : qsl("OGG Opus Audio (*.ogg);;All files (*.*)"), qsl("audio"), mp3 ? qsl(".mp3") : qsl(".ogg"), false); if (!filename.isEmpty()) { data->openOnSave = 1; @@ -476,7 +476,7 @@ void AudioSaveLink::doSave(AudioData *data, bool forceSavingAs) { } else { QFileInfo alreadyInfo(already); QDir alreadyDir(already.isEmpty() ? QDir() : alreadyInfo.dir()); - bool mp3 = (data->mime == QLatin1String("audio/mp3")); + bool mp3 = (data->mime == qstr("audio/mp3")); QString name = already.isEmpty() ? (mp3 ? qsl(".mp3") : qsl(".ogg")) : alreadyInfo.fileName(); QString filename = saveFileName(lang(lng_save_audio), mp3 ? qsl("MP3 Audio (*.mp3);;All files (*.*)") : qsl("OGG Opus Audio (*.ogg);;All files (*.*)"), qsl("audio"), name, forceSavingAs, alreadyDir); if (!filename.isEmpty()) { diff --git a/Telegram/SourceFiles/structs.h b/Telegram/SourceFiles/structs.h index 72f3f2f66..2cea3aab2 100644 --- a/Telegram/SourceFiles/structs.h +++ b/Telegram/SourceFiles/structs.h @@ -106,6 +106,8 @@ struct PeerData { static const uint64 UserNoAccess = 0xFFFFFFFFFFFFFFFFULL; class PeerLink : public ITextLink { + TEXT_LINK_CLASS(PeerLink) + public: PeerLink(PeerData *peer) : _peer(peer) { } @@ -234,6 +236,8 @@ struct PhotoData { }; class PhotoLink : public ITextLink { + TEXT_LINK_CLASS(PhotoLink) + public: PhotoLink(PhotoData *photo) : _photo(photo), _peer(0) { } @@ -313,6 +317,8 @@ struct VideoData { }; class VideoLink : public ITextLink { + TEXT_LINK_CLASS(VideoLink) + public: VideoLink(VideoData *video) : _video(video) { } @@ -325,6 +331,8 @@ private: }; class VideoSaveLink : public VideoLink { + TEXT_LINK_CLASS(VideoSaveLink) + public: VideoSaveLink(VideoData *video) : VideoLink(video) { } @@ -333,6 +341,8 @@ public: }; class VideoOpenLink : public VideoLink { + TEXT_LINK_CLASS(VideoOpenLink) + public: VideoOpenLink(VideoData *video) : VideoLink(video) { } @@ -340,6 +350,8 @@ public: }; class VideoCancelLink : public VideoLink { + TEXT_LINK_CLASS(VideoCancelLink) + public: VideoCancelLink(VideoData *video) : VideoLink(video) { } @@ -400,6 +412,8 @@ struct AudioData { }; class AudioLink : public ITextLink { + TEXT_LINK_CLASS(AudioLink) + public: AudioLink(AudioData *audio) : _audio(audio) { } @@ -412,6 +426,8 @@ private: }; class AudioSaveLink : public AudioLink { + TEXT_LINK_CLASS(AudioSaveLink) + public: AudioSaveLink(AudioData *audio) : AudioLink(audio) { } @@ -420,6 +436,8 @@ public: }; class AudioOpenLink : public AudioLink { + TEXT_LINK_CLASS(AudioOpenLink) + public: AudioOpenLink(AudioData *audio) : AudioLink(audio) { } @@ -427,6 +445,8 @@ public: }; class AudioCancelLink : public AudioLink { + TEXT_LINK_CLASS(AudioCancelLink) + public: AudioCancelLink(AudioData *audio) : AudioLink(audio) { } @@ -518,6 +538,8 @@ struct DocumentData { }; class DocumentLink : public ITextLink { + TEXT_LINK_CLASS(DocumentLink) + public: DocumentLink(DocumentData *document) : _document(document) { } @@ -530,6 +552,8 @@ private: }; class DocumentSaveLink : public DocumentLink { + TEXT_LINK_CLASS(DocumentSaveLink) + public: DocumentSaveLink(DocumentData *document) : DocumentLink(document) { } @@ -538,6 +562,8 @@ public: }; class DocumentOpenLink : public DocumentLink { + TEXT_LINK_CLASS(DocumentOpenLink) + public: DocumentOpenLink(DocumentData *document) : DocumentLink(document) { } @@ -545,6 +571,8 @@ public: }; class DocumentCancelLink : public DocumentLink { + TEXT_LINK_CLASS(DocumentCancelLink) + public: DocumentCancelLink(DocumentData *document) : DocumentLink(document) { } @@ -558,9 +586,9 @@ enum WebPageType { WebPageArticle }; inline WebPageType toWebPageType(const QString &type) { - if (type == QLatin1String("photo")) return WebPagePhoto; - if (type == QLatin1String("video")) return WebPageVideo; - if (type == QLatin1String("profile")) return WebPageProfile; + if (type == qstr("photo")) return WebPagePhoto; + if (type == qstr("video")) return WebPageVideo; + if (type == qstr("profile")) return WebPageProfile; return WebPageArticle; } diff --git a/Telegram/SourceFiles/types.h b/Telegram/SourceFiles/types.h index e7f64078d..2c7684f11 100644 --- a/Telegram/SourceFiles/types.h +++ b/Telegram/SourceFiles/types.h @@ -199,6 +199,7 @@ private: }; #define qsl(s) QStringLiteral(s) +#define qstr(s) QLatin1String(s, sizeof(s) - 1) static const QRegularExpression::PatternOptions reMultiline(QRegularExpression::DotMatchesEverythingOption | QRegularExpression::MultilineOption); From 405dfbebaeb635470941e90d46ded9a13a6388ff Mon Sep 17 00:00:00 2001 From: John Preston Date: Sun, 28 Jun 2015 15:37:10 +0300 Subject: [PATCH 018/121] forward by drag-n-drop from media overview, fixed video overview, stickers enlarged and optimized, preparing version 0.8.34.dev --- Telegram/PrepareWin.bat | 8 +- Telegram/Resources/style.txt | 15 +- Telegram/SourceFiles/apiwrap.cpp | 240 +++++++++--- Telegram/SourceFiles/apiwrap.h | 7 + Telegram/SourceFiles/app.cpp | 4 +- Telegram/SourceFiles/application.cpp | 4 +- Telegram/SourceFiles/boxes/stickersetbox.cpp | 33 +- Telegram/SourceFiles/boxes/stickersetbox.h | 1 + Telegram/SourceFiles/config.h | 4 +- Telegram/SourceFiles/dropdown.cpp | 194 ++++++---- Telegram/SourceFiles/dropdown.h | 22 +- Telegram/SourceFiles/history.cpp | 86 +++-- Telegram/SourceFiles/history.h | 9 +- Telegram/SourceFiles/historywidget.cpp | 371 ++++++------------- Telegram/SourceFiles/historywidget.h | 1 + Telegram/SourceFiles/localstorage.cpp | 74 +++- Telegram/SourceFiles/mainwidget.cpp | 10 +- Telegram/SourceFiles/mtproto/mtpConnection.h | 7 +- Telegram/SourceFiles/mtproto/mtpCoreTypes.h | 2 +- Telegram/SourceFiles/mtproto/mtpScheme.cpp | 18 +- Telegram/SourceFiles/mtproto/mtpScheme.h | 68 ++-- Telegram/SourceFiles/mtproto/scheme.tl | 8 +- Telegram/SourceFiles/overviewwidget.cpp | 162 ++++++-- Telegram/SourceFiles/overviewwidget.h | 5 +- Telegram/SourceFiles/settings.cpp | 2 - Telegram/SourceFiles/settings.h | 9 +- Telegram/SourceFiles/structs.h | 10 +- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 +- Telegram/Version.sh | 2 +- 31 files changed, 818 insertions(+), 572 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index f2b7a03c1..4d5e7f6c0 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,10 +1,10 @@ @echo OFF set "AppVersionStrMajor=0.8" -set "AppVersion=8033" -set "AppVersionStrSmall=0.8.33" -set "AppVersionStr=0.8.33" -set "AppVersionStrFull=0.8.33.0" +set "AppVersion=8034" +set "AppVersionStrSmall=0.8.34" +set "AppVersionStr=0.8.34" +set "AppVersionStrFull=0.8.34.0" set "DevChannel=1" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index e04deadd6..49d06f8ea 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -1565,7 +1565,7 @@ rbEmoji: flatCheckbox { bgColor: emojiPanCategories; disColor: emojiPanCategories; - width: 36px; + width: 42px; height: 46px; textTop: 0px; @@ -1576,7 +1576,7 @@ rbEmoji: flatCheckbox { cursor: cursor(pointer); disabledCursor: cursor(default); - imagePos: point(8px, 12px); + imagePos: point(11px, 12px); } rbEmojiRecent: flatCheckbox(rbEmoji) { imageRect: emojiRecentOver; @@ -1642,16 +1642,17 @@ rbEmojiObjects: flatCheckbox(rbEmoji) { disImageRect: emojiObjectsOver; chkDisImageRect: emojiObjectsActive; } -emojiPanPadding: 10px; -emojiPanSize: size(39px, 35px); -emojiPanFullSize: size(300px, 321px); +emojiPanPadding: 12px; +emojiPanSize: size(45px, 41px); +emojiPanWidth: 345px; +emojiPanMaxHeight: 366px; emojiPanDuration: 200; emojiPanHover: #f0f4f7; emojiPanHeader: 42px; emojiPanHeaderFont: font(fsize semibold); emojiPanHeaderColor: #999; -emojiPanHeaderLeft: 17px; +emojiPanHeaderLeft: 22px; emojiPanHeaderTop: 12px; emojiPanHeaderBg: #fffffff2; @@ -1665,7 +1666,7 @@ emojiSwitchStickers: sprite(318px, 328px, 8px, 12px); emojiSwitchEmoji: sprite(310px, 328px, 8px, 12px); emojiSwitchColor: #42a8db; -stickerPanSize: size(55px, 55px); +stickerPanSize: size(64px, 64px); stickerPanPadding: 11px; stickerPanDelete: sprite(123px, 132px, 12px, 12px); stickerPanDeleteOpacity: 0.5; diff --git a/Telegram/SourceFiles/apiwrap.cpp b/Telegram/SourceFiles/apiwrap.cpp index 56fcd6f5d..88f1813df 100644 --- a/Telegram/SourceFiles/apiwrap.cpp +++ b/Telegram/SourceFiles/apiwrap.cpp @@ -83,6 +83,54 @@ void ApiWrap::requestReplyTo(HistoryReply *reply, MsgId to) { if (!req.req) _replyToTimer.start(1); } +void ApiWrap::resolveReplyTo() { + if (_replyToRequests.isEmpty()) return; + + QVector ids; + ids.reserve(_replyToRequests.size()); + for (ReplyToRequests::const_iterator i = _replyToRequests.cbegin(), e = _replyToRequests.cend(); i != e; ++i) { + if (!i.value().req) { + ids.push_back(MTP_int(i.key())); + } + } + if (!ids.isEmpty()) { + mtpRequestId req = MTP::send(MTPmessages_GetMessages(MTP_vector(ids)), rpcDone(&ApiWrap::gotReplyTo)); + for (ReplyToRequests::iterator i = _replyToRequests.begin(), e = _replyToRequests.end(); i != e; ++i) { + i.value().req = req; + } + } +} + +void ApiWrap::gotReplyTo(const MTPmessages_Messages &msgs, mtpRequestId req) { + switch (msgs.type()) { + case mtpc_messages_messages: + App::feedUsers(msgs.c_messages_messages().vusers); + App::feedChats(msgs.c_messages_messages().vchats); + App::feedMsgs(msgs.c_messages_messages().vmessages, -1); + break; + + case mtpc_messages_messagesSlice: + App::feedUsers(msgs.c_messages_messagesSlice().vusers); + App::feedChats(msgs.c_messages_messagesSlice().vchats); + App::feedMsgs(msgs.c_messages_messagesSlice().vmessages, -1); + break; + } + for (ReplyToRequests::iterator i = _replyToRequests.begin(); i != _replyToRequests.cend();) { + if (i.value().req == req) { + for (QList::const_iterator j = i.value().replies.cbegin(), e = i.value().replies.cend(); j != e; ++j) { + if (*j) { + (*j)->updateReplyTo(true); + } else { + App::main()->updateReplyTo(); + } + } + i = _replyToRequests.erase(i); + } else { + ++i; + } + } +} + void ApiWrap::requestFullPeer(PeerData *peer) { if (!peer || _fullRequests.contains(peer)) return; mtpRequestId req; @@ -94,25 +142,6 @@ void ApiWrap::requestFullPeer(PeerData *peer) { _fullRequests.insert(peer, req); } -void ApiWrap::requestWebPageDelayed(WebPageData *page) { - if (page->pendingTill <= 0) return; - _webPagesPending.insert(page, 0); - int32 left = (page->pendingTill - unixtime()) * 1000; - if (!_webPagesTimer.isActive() || left <= _webPagesTimer.remainingTime()) { - _webPagesTimer.start((left < 0 ? 0 : left) + 1); - } -} - -void ApiWrap::clearWebPageRequest(WebPageData *page) { - _webPagesPending.remove(page); - if (_webPagesPending.isEmpty() && _webPagesTimer.isActive()) _webPagesTimer.stop(); -} - -void ApiWrap::clearWebPageRequests() { - _webPagesPending.clear(); - _webPagesTimer.stop(); -} - void ApiWrap::gotChatFull(PeerData *peer, const MTPmessages_ChatFull &result) { const MTPDmessages_chatFull &d(result.c_messages_chatFull()); const MTPDchatFull &f(d.vfull_chat.c_chatFull()); @@ -168,22 +197,143 @@ bool ApiWrap::gotPeerFailed(PeerData *peer, const RPCError &error) { return true; } -void ApiWrap::resolveReplyTo() { - if (_replyToRequests.isEmpty()) return; +void ApiWrap::scheduleStickerSetRequest(uint64 setId, uint64 access) { + if (!_stickerSetRequests.contains(setId)) { + _stickerSetRequests.insert(setId, qMakePair(access, 0)); + } +} - QVector ids; - ids.reserve(_replyToRequests.size()); - for (ReplyToRequests::const_iterator i = _replyToRequests.cbegin(), e = _replyToRequests.cend(); i != e; ++i) { - if (!i.value().req) { - ids.push_back(MTP_int(i.key())); +void ApiWrap::requestStickerSets() { + for (QMap >::iterator i = _stickerSetRequests.begin(), j = i, e = _stickerSetRequests.end(); i != e; i = j) { + if (i.value().second) continue; + + ++j; + int32 wait = (j == e) ? 0 : 10; + i.value().second = MTP::send(MTPmessages_GetStickerSet(MTP_inputStickerSetID(MTP_long(i.key()), MTP_long(i.value().first))), rpcDone(&ApiWrap::gotStickerSet, i.key()), rpcFail(&ApiWrap::gotStickerSetFail, i.key()), 0, wait); + } +} + +void ApiWrap::gotStickerSet(uint64 setId, const MTPmessages_StickerSet &result) { + _stickerSetRequests.remove(setId); + + if (result.type() != mtpc_messages_stickerSet) return; + const MTPDmessages_stickerSet &d(result.c_messages_stickerSet()); + + if (d.vset.type() != mtpc_stickerSet) return; + const MTPDstickerSet &s(d.vset.c_stickerSet()); + + StickerSets &sets(cRefStickerSets()); + StickerSets::iterator it = sets.find(setId); + if (it == sets.cend()) return; + + it->access = s.vaccess_hash.v; + it->hash = s.vhash.v; + it->shortName = qs(s.vshort_name); + QString title = qs(s.vtitle); + if ((it->flags & MTPDstickerSet_flag_official) && !title.compare(qstr("Great Minds"), Qt::CaseInsensitive)) { + title = lang(lng_stickers_default_set); + } + it->title = title; + it->flags = s.vflags.v; + + const QVector &d_docs(d.vdocuments.c_vector().v); + StickerSets::iterator custom = sets.find(CustomStickerSetId); + + QSet found; + int32 wasCount = -1; + for (int32 i = 0, l = d_docs.size(); i != l; ++i) { + DocumentData *doc = App::feedDocument(d_docs.at(i)); + if (!doc || !doc->sticker) continue; + + if (wasCount < 0) wasCount = it->stickers.size(); + if (it->stickers.indexOf(doc) < 0) { + it->stickers.push_back(doc); + } else { + found.insert(doc); + } + + if (custom != sets.cend()) { + int32 index = custom->stickers.indexOf(doc); + if (index >= 0) { + custom->stickers.removeAt(index); + } } } - if (!ids.isEmpty()) { - mtpRequestId req = MTP::send(MTPmessages_GetMessages(MTP_vector(ids)), rpcDone(&ApiWrap::gotReplyTo)); - for (ReplyToRequests::iterator i = _replyToRequests.begin(), e = _replyToRequests.end(); i != e; ++i) { - i.value().req = req; + if (custom != sets.cend() && custom->stickers.isEmpty()) { + sets.erase(custom); + custom = sets.end(); + } + + bool writeRecent = false; + RecentStickerPack &recent(cGetRecentStickers()); + + if (wasCount < 0) { // no stickers received + for (RecentStickerPack::iterator i = recent.begin(); i != recent.cend();) { + if (it->stickers.indexOf(i->first) >= 0) { + i = recent.erase(i); + writeRecent = true; + } else { + ++i; + } + } + cRefStickerSetsOrder().removeOne(setId); + sets.erase(it); + } else { + for (int32 j = 0, l = wasCount; j < l;) { + if (found.contains(it->stickers.at(j))) { + ++j; + } else { + for (RecentStickerPack::iterator i = recent.begin(); i != recent.cend();) { + if (it->stickers.at(j) == i->first) { + i = recent.erase(i); + writeRecent = true; + } else { + ++i; + } + } + it->stickers.removeAt(j); + --l; + } + } + if (it->stickers.isEmpty()) { + cRefStickerSetsOrder().removeOne(setId); + sets.erase(it); } } + + if (writeRecent) { + Local::writeUserSettings(); + } + + Local::writeStickers(); + + if (App::main()) emit App::main()->stickersUpdated(); +} + +bool ApiWrap::gotStickerSetFail(uint64 setId, const RPCError &error) { + if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false; + + _stickerSetRequests.remove(setId); + return true; +} + +void ApiWrap::requestWebPageDelayed(WebPageData *page) { + if (page->pendingTill <= 0) return; + _webPagesPending.insert(page, 0); + int32 left = (page->pendingTill - unixtime()) * 1000; + if (!_webPagesTimer.isActive() || left <= _webPagesTimer.remainingTime()) { + _webPagesTimer.start((left < 0 ? 0 : left) + 1); + } +} + +void ApiWrap::clearWebPageRequest(WebPageData *page) { + _webPagesPending.remove(page); + if (_webPagesPending.isEmpty() && _webPagesTimer.isActive()) _webPagesTimer.stop(); +} + +void ApiWrap::clearWebPageRequests() { + _webPagesPending.clear(); + _webPagesTimer.stop(); } void ApiWrap::resolveWebPages() { @@ -214,36 +364,6 @@ void ApiWrap::resolveWebPages() { if (m < INT_MAX) _webPagesTimer.start(m * 1000); } -void ApiWrap::gotReplyTo(const MTPmessages_Messages &msgs, mtpRequestId req) { - switch (msgs.type()) { - case mtpc_messages_messages: - App::feedUsers(msgs.c_messages_messages().vusers); - App::feedChats(msgs.c_messages_messages().vchats); - App::feedMsgs(msgs.c_messages_messages().vmessages, -1); - break; - - case mtpc_messages_messagesSlice: - App::feedUsers(msgs.c_messages_messagesSlice().vusers); - App::feedChats(msgs.c_messages_messagesSlice().vchats); - App::feedMsgs(msgs.c_messages_messagesSlice().vmessages, -1); - break; - } - for (ReplyToRequests::iterator i = _replyToRequests.begin(); i != _replyToRequests.cend();) { - if (i.value().req == req) { - for (QList::const_iterator j = i.value().replies.cbegin(), e = i.value().replies.cend(); j != e; ++j) { - if (*j) { - (*j)->updateReplyTo(true); - } else { - App::main()->updateReplyTo(); - } - } - i = _replyToRequests.erase(i); - } else { - ++i; - } - } -} - void ApiWrap::gotWebPages(const MTPmessages_Messages &msgs, mtpRequestId req) { const QVector *v = 0; switch (msgs.type()) { diff --git a/Telegram/SourceFiles/apiwrap.h b/Telegram/SourceFiles/apiwrap.h index 5b7daff30..40c453e09 100644 --- a/Telegram/SourceFiles/apiwrap.h +++ b/Telegram/SourceFiles/apiwrap.h @@ -36,6 +36,9 @@ public: void clearWebPageRequest(WebPageData *page); void clearWebPageRequests(); + void scheduleStickerSetRequest(uint64 setId, uint64 access); + void requestStickerSets(); + ~ApiWrap(); signals: @@ -71,4 +74,8 @@ private: WebPagesPending _webPagesPending; SingleTimer _webPagesTimer; + QMap > _stickerSetRequests; + void gotStickerSet(uint64 setId, const MTPmessages_StickerSet &result); + bool gotStickerSetFail(uint64 setId, const RPCError &error); + }; diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index e9da3e487..82a9e2248 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -741,6 +741,9 @@ namespace App { History *h = App::historyLoaded(peer); if (h) { h->outboxRead(upTo); + if (!h->peer->chat) { + h->peer->asUser()->madeAction(); + } } } @@ -1577,7 +1580,6 @@ namespace App { if (api()) api()->clearWebPageRequests(); cSetRecentStickers(RecentStickerPack()); cSetStickersHash(QByteArray()); - cSetEmojiStickers(EmojiStickersMap()); cSetStickerSets(StickerSets()); cSetStickerSetsOrder(StickerSetsOrder()); cSetLastStickersUpdate(0); diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index f03ea43cb..d0f213bfd 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -640,8 +640,8 @@ void Application::checkMapVersion() { psRegisterCustomScheme(); if (Local::oldMapVersion()) { QString versionFeatures; - if (DevChannel && Local::oldMapVersion() < 8033) { - versionFeatures = QString::fromUtf8("\xe2\x80\x94 IPv6 connection checkbox added to Connection Type box in Settings");// .replace('@', qsl("@") + QChar(0x200D)); + if (DevChannel && Local::oldMapVersion() < 8034) { + versionFeatures = QString::fromUtf8("\xe2\x80\x94 Forward photos, media and stickers with drag-n-drop\n\xe2\x80\x94 Drag-n-drop text messages by timestamp to forward them\n\xe2\x80\x94 Larger stickers panel");// .replace('@', qsl("@") + QChar(0x200D)); } else if (!DevChannel && Local::oldMapVersion() < 8030) { versionFeatures = lng_new_version_text(lt_blog_link, qsl("https://telegram.org/blog/bot-revolution"));// lang(lng_new_version_text).trimmed(); } diff --git a/Telegram/SourceFiles/boxes/stickersetbox.cpp b/Telegram/SourceFiles/boxes/stickersetbox.cpp index 4b9cd2c9b..dfc6c8986 100644 --- a/Telegram/SourceFiles/boxes/stickersetbox.cpp +++ b/Telegram/SourceFiles/boxes/stickersetbox.cpp @@ -27,7 +27,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "localstorage.h" StickerSetInner::StickerSetInner(const MTPInputStickerSet &set) : -_loaded(false), _setId(0), _setAccess(0), _bottom(0), +_loaded(false), _setId(0), _setAccess(0), _setCount(0), _setHash(0), _setFlags(0), _bottom(0), _input(set), _installRequest(0) { switch (set.type()) { case mtpc_inputStickerSetID: _setId = set.c_inputStickerSetID().vid.v; _setAccess = set.c_inputStickerSetID().vaccess_hash.v; break; @@ -57,6 +57,9 @@ void StickerSetInner::gotSet(const MTPmessages_StickerSet &set) { _setShortName = qs(s.vshort_name); _setId = s.vid.v; _setAccess = s.vaccess_hash.v; + _setCount = s.vcount.v; + _setHash = s.vhash.v; + _setFlags = s.vflags.v; } } @@ -84,13 +87,25 @@ bool StickerSetInner::failedSet(const RPCError &error) { void StickerSetInner::installDone(const MTPBool &result) { StickerSets &sets(cRefStickerSets()); - sets.insert(_setId, StickerSet(_setId, _setAccess, _setTitle, _setShortName)).value().stickers = _pack; - int32 index = cStickerSetsOrder().indexOf(_setId); - if (index > 0) { - cRefStickerSetsOrder().removeAt(index); - cRefStickerSetsOrder().push_front(_setId); - } else if (index < 0) { - cRefStickerSetsOrder().push_front(_setId); + sets.insert(_setId, StickerSet(_setId, _setAccess, _setTitle, _setShortName, _setCount, _setHash, _setFlags)).value().stickers = _pack; + + int32 insertAtIndex = 0; + StickerSetsOrder &order(cRefStickerSetsOrder()); + for (int32 s = order.size(); insertAtIndex < s; ++insertAtIndex) { + StickerSets::const_iterator i = sets.constFind(order.at(insertAtIndex)); + if (i == sets.cend() || !(i->flags & MTPDstickerSet_flag_official)) { + break; + } + } + int32 currentIndex = cStickerSetsOrder().indexOf(_setId); + if (currentIndex != insertAtIndex) { + if (currentIndex > 0) { + order.removeAt(currentIndex); + if (currentIndex < insertAtIndex) { + --insertAtIndex; + } + } + order.insert(insertAtIndex, _setId); } StickerSets::iterator custom = sets.find(CustomStickerSetId); @@ -193,7 +208,7 @@ QString StickerSetInner::shortName() const { void StickerSetInner::install() { if (_installRequest) return; - _installRequest = MTP::send(MTPmessages_InstallStickerSet(_input), rpcDone(&StickerSetInner::installDone), rpcFail(&StickerSetInner::installFailed)); + _installRequest = MTP::send(MTPmessages_InstallStickerSet(_input, MTP_bool(false)), rpcDone(&StickerSetInner::installDone), rpcFail(&StickerSetInner::installFailed)); } StickerSetInner::~StickerSetInner() { diff --git a/Telegram/SourceFiles/boxes/stickersetbox.h b/Telegram/SourceFiles/boxes/stickersetbox.h index c5c3661f8..136be0e48 100644 --- a/Telegram/SourceFiles/boxes/stickersetbox.h +++ b/Telegram/SourceFiles/boxes/stickersetbox.h @@ -57,6 +57,7 @@ private: bool _loaded; uint64 _setId, _setAccess; QString _title, _setTitle, _setShortName; + int32 _setCount, _setHash, _setFlags; int32 _bottom; MTPInputStickerSet _input; diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 992b479ce..edac8ac5d 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,8 +17,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8033; -static const wchar_t *AppVersionStr = L"0.8.33"; +static const int32 AppVersion = 8034; +static const wchar_t *AppVersionStr = L"0.8.34"; static const bool DevChannel = true; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; diff --git a/Telegram/SourceFiles/dropdown.cpp b/Telegram/SourceFiles/dropdown.cpp index e42e4f55b..38e78c7b2 100644 --- a/Telegram/SourceFiles/dropdown.cpp +++ b/Telegram/SourceFiles/dropdown.cpp @@ -684,10 +684,11 @@ void EmojiColorPicker::drawVariant(Painter &p, int variant) { p.drawPixmapLeft(w.x() + (st::emojiPanSize.width() - (esize / cIntRetinaFactor())) / 2, w.y() + (st::emojiPanSize.height() - (esize / cIntRetinaFactor())) / 2, width(), App::emojisLarge(), QRect(_variants[variant]->x * esize, _variants[variant]->y * esize, esize, esize)); } -EmojiPanInner::EmojiPanInner(QWidget *parent) : TWidget(parent), +EmojiPanInner::EmojiPanInner(QWidget *parent) : TWidget(parent), _maxHeight(int(st::emojiPanMaxHeight)), _top(0), _selected(-1), _pressedSel(-1), _pickerSel(-1), _picker(this), _switcherHover(0), _stickersWidth(st::emojiPanHeaderFont->m.width(lang(lng_switch_stickers))) { - resize(st::emojiPanFullSize.width(), countHeight()); + resize(st::emojiPanWidth, countHeight()); + setMouseTracking(true); setFocusPolicy(Qt::NoFocus); @@ -709,6 +710,11 @@ _switcherHover(0), _stickersWidth(st::emojiPanHeaderFont->m.width(lang(lng_switc connect(&_picker, SIGNAL(hidden()), this, SLOT(onPickerHidden())); } +void EmojiPanInner::setMaxHeight(int32 h) { + _maxHeight = h; + resize(st::emojiPanWidth, countHeight()); +} + void EmojiPanInner::setScrollTop(int top) { if (top == _top) return; @@ -1131,10 +1137,11 @@ void EmojiPanInner::showEmojiPack(DBIEmojiTab packIndex) { update(); } -StickerPanInner::StickerPanInner(QWidget *parent) : TWidget(parent), +StickerPanInner::StickerPanInner(QWidget *parent) : TWidget(parent), _maxHeight(st::emojiPanMaxHeight), _top(0), _selected(-1), _pressedSel(-1), _switcherHover(0), _emojiWidth(st::emojiPanHeaderFont->m.width(lang(lng_switch_emoji))) { - resize(st::emojiPanFullSize.width(), countHeight()); + resize(st::emojiPanWidth, countHeight()); + setMouseTracking(true); setFocusPolicy(Qt::NoFocus); @@ -1143,6 +1150,11 @@ _switcherHover(0), _emojiWidth(st::emojiPanHeaderFont->m.width(lang(lng_switch_e refreshStickers(); } +void StickerPanInner::setMaxHeight(int32 h) { + _maxHeight = h; + resize(st::emojiPanWidth, countHeight()); +} + void StickerPanInner::setScrollTop(int top) { if (top == _top) return; @@ -1154,9 +1166,9 @@ void StickerPanInner::setScrollTop(int top) { } int StickerPanInner::countHeight() { - int result = 0, minLastH = st::emojiPanFullSize.height() - st::rbEmoji.height - st::stickerPanPadding; + int result = 0, minLastH = _maxHeight - st::rbEmoji.height - st::stickerPanPadding; for (int i = 0; i < _sets.size(); ++i) { - int cnt = _sets.at(i).size(), rows = (cnt / StickerPanPerRow) + ((cnt % StickerPanPerRow) ? 1 : 0); + int cnt = _sets.at(i).pack.size(), rows = (cnt / StickerPanPerRow) + ((cnt % StickerPanPerRow) ? 1 : 0); int h = st::emojiPanHeader + rows * st::stickerPanSize.height(); if (i == _sets.size() - 1 && h < minLastH) h = minLastH; result += h; @@ -1174,21 +1186,21 @@ void StickerPanInner::paintEvent(QPaintEvent *e) { int32 y, tilly = 0; for (int c = 0, l = _sets.size(); c < l; ++c) { y = tilly; - int32 size = _sets.at(c).size(); + int32 size = _sets.at(c).pack.size(); int32 rows = (size / StickerPanPerRow) + ((size % StickerPanPerRow) ? 1 : 0); tilly = y + st::emojiPanHeader + (rows * st::stickerPanSize.height()); if (r.top() >= tilly) continue; - bool special = (_setIds[c] == DefaultStickerSetId || _setIds[c] == RecentStickerSetId); + bool special = (_sets[c].flags & MTPDstickerSet_flag_official); y += st::emojiPanHeader; - QString title = _titles[c]; + QString title = _sets[c].title; if (r.bottom() <= y) { p.setFont(st::emojiPanHeaderFont->f); p.setPen(st::emojiPanHeaderColor->p); p.drawTextLeft(st::emojiPanHeaderLeft, qMax(y - int(st::emojiPanHeader), _top) + st::emojiPanHeaderTop, width(), title); if (!special && y >= _top + 2 * st::emojiPanHeader) { - p.setOpacity(st::stickerPanDeleteOpacity + (1 - st::stickerPanDeleteOpacity) * _hovers[c][size]); + p.setOpacity(st::stickerPanDeleteOpacity + (1 - st::stickerPanDeleteOpacity) * _sets[c].hovers[size]); p.drawSpriteRight(QPoint(st::emojiPanHeaderLeft, y - (st::emojiPanHeader + st::notifyClose.icon.pxHeight()) / 2), width(), st::notifyClose.icon); p.setOpacity(1); } @@ -1201,9 +1213,9 @@ void StickerPanInner::paintEvent(QPaintEvent *e) { int32 index = i * StickerPanPerRow + j; if (index >= size) break; - float64 hover = _hovers[c][index]; + float64 hover = _sets[c].hovers[index]; - DocumentData *sticker = _sets[c][index]; + DocumentData *sticker = _sets[c].pack[index]; if (!sticker->sticker) continue; QPoint pos(st::stickerPanPadding + j * st::stickerPanSize.width(), y + i * st::stickerPanSize.height()); @@ -1244,8 +1256,8 @@ void StickerPanInner::paintEvent(QPaintEvent *e) { p.drawPixmapLeft(ppos, width(), sticker->sticker->img->pix(w, h)); } - if (hover > 0 && _setIds[c] == RecentStickerSetId && _custom.at(index)) { - float64 xHover = _hovers[c][_sets[c].size() + index]; + if (hover > 0 && _sets[c].id == RecentStickerSetId && _custom.at(index)) { + float64 xHover = _sets[c].hovers[_sets[c].pack.size() + index]; QPoint xPos = pos + QPoint(st::stickerPanSize.width() - st::stickerPanDelete.pxWidth(), 0); p.setOpacity(hover * (xHover + (1 - xHover) * st::stickerPanDeleteOpacity)); @@ -1258,7 +1270,7 @@ void StickerPanInner::paintEvent(QPaintEvent *e) { if (y - st::emojiPanHeader < _top) { p.fillRect(QRect(0, qMin(_top, tilly - int(st::emojiPanHeader)), width(), st::emojiPanHeader), st::emojiPanHeaderBg->b); } else if (!special && y >= _top + 2 * st::emojiPanHeader) { - p.setOpacity(st::stickerPanDeleteOpacity + (1 - st::stickerPanDeleteOpacity) * _hovers[c][size]); + p.setOpacity(st::stickerPanDeleteOpacity + (1 - st::stickerPanDeleteOpacity) * _sets[c].hovers[size]); p.drawSpriteRight(QPoint(st::emojiPanHeaderLeft, y - (st::emojiPanHeader + st::notifyClose.icon.pxHeight()) / 2), width(), st::notifyClose.icon); p.setOpacity(1); } @@ -1293,15 +1305,15 @@ void StickerPanInner::mouseReleaseEvent(QMouseEvent *e) { emit switchToEmoji(); return; } - if (_selected >= MatrixRowShift * _setIds.size()) { + if (_selected >= MatrixRowShift * _sets.size()) { return; } int tab = (_selected / MatrixRowShift), sel = _selected % MatrixRowShift; - if (_setIds[tab] == RecentStickerSetId && sel >= _sets[tab].size() && sel < _sets[tab].size() * 2 && _custom.at(sel - _sets[tab].size())) { + if (_sets[tab].id == RecentStickerSetId && sel >= _sets[tab].pack.size() && sel < _sets[tab].pack.size() * 2 && _custom.at(sel - _sets[tab].pack.size())) { clearSelection(true); bool refresh = false; - DocumentData *sticker = _sets[tab].at(sel - _sets[tab].size()); + DocumentData *sticker = _sets[tab].pack.at(sel - _sets[tab].pack.size()); RecentStickerPack &recent(cGetRecentStickers()); for (int32 i = 0, l = recent.size(); i < l; ++i) { if (recent.at(i).first == sticker) { @@ -1333,10 +1345,10 @@ void StickerPanInner::mouseReleaseEvent(QMouseEvent *e) { } return; } - if (sel < _sets[tab].size()) { - emit selected(_sets[tab][sel]); - } else if (sel == _sets[tab].size()) { - emit removing(_setIds[tab]); + if (sel < _sets[tab].pack.size()) { + emit selected(_sets[tab].pack[sel]); + } else if (sel == _sets[tab].pack.size()) { + emit removing(_sets[tab].id); } } @@ -1363,7 +1375,7 @@ void StickerPanInner::clearSelection(bool fast) { if (fast) { for (Animations::const_iterator i = _animations.cbegin(); i != _animations.cend(); ++i) { int index = qAbs(i.key()) - 1, tab = (index / MatrixRowShift), sel = index % MatrixRowShift; - (index == SwitcherSelected ? _switcherHover : _hovers[tab][sel]) = 0; + (index == SwitcherSelected ? _switcherHover : _sets[tab].hovers[sel]) = 0; } _animations.clear(); _selected = _pressedSel = -1; @@ -1377,14 +1389,9 @@ void StickerPanInner::refreshStickers() { clearSelection(true); const StickerSets &sets(cStickerSets()); - _setIds.clear(); _setIds.reserve(sets.size() + 1); _sets.clear(); _sets.reserve(sets.size() + 1); - _hovers.clear(); _hovers.reserve(sets.size() + 1); - _titles.clear(); _titles.reserve(sets.size() + 1); refreshRecent(false); - - appendSet(DefaultStickerSetId); for (StickerSetsOrder::const_iterator i = cStickerSetsOrder().cbegin(), e = cStickerSetsOrder().cend(); i != e; ++i) { appendSet(*i); } @@ -1400,10 +1407,10 @@ void StickerPanInner::refreshStickers() { void StickerPanInner::preloadImages() { uint64 ms = getms(); for (int32 i = 0, l = _sets.size(), k = 0; i < l; ++i) { - for (int32 j = 0, n = _sets.at(i).size(); j < n; ++j) { + for (int32 j = 0, n = _sets.at(i).pack.size(); j < n; ++j) { if (++k > StickerPanPerRow * (StickerPanPerRow + 1)) break; - DocumentData *sticker = _sets.at(i).at(j); + DocumentData *sticker = _sets.at(i).pack.at(j); if (!sticker || !sticker->sticker) continue; bool goodThumb = !sticker->thumb->isNull() && ((sticker->thumb->width() >= 128) || (sticker->thumb->height() >= 128)); @@ -1430,14 +1437,14 @@ void StickerPanInner::preloadImages() { uint64 StickerPanInner::currentSet(int yOffset) const { int y, ytill = 0; for (int i = 0, l = _sets.size(); i < l; ++i) { - int cnt = _sets.at(i).size(); + int cnt = _sets.at(i).pack.size(); y = ytill; ytill = y + st::emojiPanHeader + ((cnt / StickerPanPerRow) + ((cnt % StickerPanPerRow) ? 1 : 0)) * st::stickerPanSize.height(); if (yOffset < ytill) { - return _setIds.at(i); + return _sets.at(i).id; } } - return _setIds.isEmpty() ? RecentStickerSetId : _setIds.back(); + return _sets.isEmpty() ? RecentStickerSetId : _sets.back().id; } void StickerPanInner::appendSet(uint64 setId) { @@ -1450,11 +1457,9 @@ void StickerPanInner::appendSet(uint64 setId) { for (int32 i = 0, l = it->stickers.size(); i < l; ++i) { pack.push_back(it->stickers.at(i)); } - _setIds.push_back(it->id); - _sets.push_back(pack); - _hovers.push_back(QVector(it->stickers.size() + 1, 0)); int32 availw = width() - st::emojiPanHeaderLeft - st::emojiSwitchSkip - _emojiWidth - (st::emojiSwitchSkip - st::emojiSwitchImgSkip); - _titles.push_back(st::emojiPanHeaderFont->m.elidedText(it->title, Qt::ElideRight, availw)); + QString title = st::emojiPanHeaderFont->m.elidedText(it->title, Qt::ElideRight, availw); + _sets.push_back(DisplayedSet(it->id, it->flags, title, pack.size() + 1, pack)); } void StickerPanInner::refreshRecent(bool performResize) { @@ -1462,11 +1467,8 @@ void StickerPanInner::refreshRecent(bool performResize) { clearSelection(true); StickerSets::const_iterator customIt = cStickerSets().constFind(CustomStickerSetId); if (cGetRecentStickers().isEmpty() && (customIt == cStickerSets().cend() || customIt->stickers.isEmpty())) { - if (!_setIds.isEmpty() && _setIds.at(0) == RecentStickerSetId) { - _setIds.pop_front(); + if (!_sets.isEmpty() && _sets.at(0).id == RecentStickerSetId) { _sets.pop_front(); - _hovers.pop_front(); - _titles.pop_front(); } } else { StickerPack recent; @@ -1489,14 +1491,11 @@ void StickerPanInner::refreshRecent(bool performResize) { _custom.push_back(true); } } - if (_setIds.isEmpty() || _setIds.at(0) != RecentStickerSetId) { - _setIds.push_front(RecentStickerSetId); - _hovers.push_back(QVector(recent.size() * 2, 0)); - _sets.push_back(recent); - _titles.push_back(lang(lng_emoji_category0)); + if (_sets.isEmpty() || _sets.at(0).id != RecentStickerSetId) { + _sets.push_back(DisplayedSet(RecentStickerSetId, MTPDstickerSet_flag_official, lang(lng_emoji_category0), recent.size() * 2, recent)); } else { - _sets[0] = recent; - _hovers[0].resize(recent.size() * 2); + _sets[0].pack = recent; + _sets[0].hovers.resize(recent.size() * 2); } } @@ -1510,14 +1509,14 @@ void StickerPanInner::refreshRecent(bool performResize) { void StickerPanInner::fillIcons(QVector &icons) { icons.clear(); - if (_setIds.isEmpty()) return; + if (_sets.isEmpty()) return; icons.reserve(_sets.size()); int32 i = 0; - if (_setIds.at(0) == RecentStickerSetId) ++i; + if (_sets.at(0).id == RecentStickerSetId) ++i; if (i > 0) icons.push_back(StickerIcon()); for (int32 l = _sets.size(); i < l; ++i) { - DocumentData *s = _sets.at(i).at(0); + DocumentData *s = _sets.at(i).pack.at(0); int32 availw = st::rbEmoji.width - 2 * st::stickerIconPadding, availh = st::rbEmoji.height - 2 * st::stickerIconPadding; int32 thumbw = s->thumb->width(), thumbh = s->thumb->height(), pixw = 1, pixh = 1; if (availw * thumbh > availh * thumbw) { @@ -1529,7 +1528,7 @@ void StickerPanInner::fillIcons(QVector &icons) { } if (pixw < 1) pixw = 1; if (pixh < 1) pixh = 1; - icons.push_back(StickerIcon(_setIds.at(i), s, pixw, pixh)); + icons.push_back(StickerIcon(_sets.at(i).id, s, pixw, pixh)); } } @@ -1547,25 +1546,27 @@ void StickerPanInner::updateSelected() { } } else { int y, ytill = 0, sx = (rtl() ? width() - p.x() : p.x()) - st::stickerPanPadding; - for (int c = 0, l = _setIds.size(); c < l; ++c) { - int cnt = _sets[c].size(); - bool special = _setIds[c] == DefaultStickerSetId || _setIds[c] == RecentStickerSetId; + for (int c = 0, l = _sets.size(); c < l; ++c) { + const DisplayedSet &set(_sets.at(c)); + int cnt = set.pack.size(); + bool special = (set.flags & MTPDstickerSet_flag_official); + y = ytill; ytill = y + st::emojiPanHeader + ((cnt / StickerPanPerRow) + ((cnt % StickerPanPerRow) ? 1 : 0)) * st::stickerPanSize.height(); if (p.y() >= y && p.y() < ytill) { if (!special && p.y() >= y && p.y() < y + st::emojiPanHeader && sx + st::stickerPanPadding >= width() - st::emojiPanHeaderLeft - st::notifyClose.icon.pxWidth() && sx + st::stickerPanPadding < width() - st::emojiPanHeaderLeft) { - selIndex = c * MatrixRowShift + _sets[c].size(); + selIndex = c * MatrixRowShift + set.pack.size(); } else { y += st::emojiPanHeader; if (p.y() >= y && sx >= 0 && sx < StickerPanPerRow * st::stickerPanSize.width()) { selIndex = qFloor((p.y() - y) / st::stickerPanSize.height()) * StickerPanPerRow + qFloor(sx / st::stickerPanSize.width()); - if (selIndex >= _sets[c].size()) { + if (selIndex >= set.pack.size()) { selIndex = -1; } else { - if (_setIds[c] == RecentStickerSetId && _custom[selIndex]) { + if (set.id == RecentStickerSetId && _custom[selIndex]) { int32 inx = sx - (selIndex % StickerPanPerRow) * st::stickerPanSize.width(), iny = p.y() - y - ((selIndex / StickerPanPerRow) * st::stickerPanSize.height()); if (inx >= st::stickerPanSize.width() - st::stickerPanDelete.pxWidth() && iny < st::stickerPanDelete.pxHeight()) { - selIndex += _sets[c].size(); + selIndex += set.pack.size(); } } selIndex += c * MatrixRowShift; @@ -1579,13 +1580,13 @@ void StickerPanInner::updateSelected() { bool startanim = false; int oldSel = _selected, oldSelTab = oldSel / MatrixRowShift, xOldSel = -1, newSel = selIndex, newSelTab = newSel / MatrixRowShift, xNewSel = -1; - if (oldSel >= 0 && oldSelTab < _setIds.size() && _setIds[oldSelTab] == RecentStickerSetId && oldSel >= oldSelTab * MatrixRowShift + _sets[oldSelTab].size()) { + if (oldSel >= 0 && oldSelTab < _sets.size() && _sets[oldSelTab].id == RecentStickerSetId && oldSel >= oldSelTab * MatrixRowShift + _sets[oldSelTab].pack.size()) { xOldSel = oldSel; - oldSel -= _sets[oldSelTab].size(); + oldSel -= _sets[oldSelTab].pack.size(); } - if (newSel >= 0 && newSelTab < _setIds.size() && _setIds[newSelTab] == RecentStickerSetId && newSel >= newSelTab * MatrixRowShift + _sets[newSelTab].size()) { + if (newSel >= 0 && newSelTab < _sets.size() && _sets[newSelTab].id == RecentStickerSetId && newSel >= newSelTab * MatrixRowShift + _sets[newSelTab].pack.size()) { xNewSel = newSel; - newSel -= _sets[newSelTab].size(); + newSel -= _sets[newSelTab].pack.size(); } if (newSel != oldSel) { if (oldSel >= 0) { @@ -1630,10 +1631,10 @@ bool StickerPanInner::animStep(float64 ms) { int index = qAbs(i.key()) - 1, tab = (index / MatrixRowShift), sel = index % MatrixRowShift; float64 dt = float64(now - i.value()) / st::emojiPanDuration; if (dt >= 1) { - (index == SwitcherSelected ? _switcherHover : _hovers[tab][sel]) = (i.key() > 0) ? 1 : 0; + (index == SwitcherSelected ? _switcherHover : _sets[tab].hovers[sel]) = (i.key() > 0) ? 1 : 0; i = _animations.erase(i); } else { - (index == SwitcherSelected ? _switcherHover : _hovers[tab][sel]) = (i.key() > 0) ? dt : (1 - dt); + (index == SwitcherSelected ? _switcherHover : _sets[tab].hovers[sel]) = (i.key() > 0) ? dt : (1 - dt); ++i; } } @@ -1645,9 +1646,9 @@ void StickerPanInner::showStickerSet(uint64 setId) { clearSelection(true); int32 y = 0; - for (int c = 0; c < _setIds.size(); ++c) { - if (_setIds.at(c) == setId) break; - int rows = (_sets[c].size() / StickerPanPerRow) + ((_sets[c].size() % StickerPanPerRow) ? 1 : 0); + for (int c = 0; c < _sets.size(); ++c) { + if (_sets.at(c).id == setId) break; + int rows = (_sets[c].pack.size() / StickerPanPerRow) + ((_sets[c].pack.size() % StickerPanPerRow) ? 1 : 0); y += st::emojiPanHeader + rows * st::stickerPanSize.height(); } @@ -1658,7 +1659,7 @@ void StickerPanInner::showStickerSet(uint64 setId) { update(); } -EmojiPan::EmojiPan(QWidget *parent) : TWidget(parent), +EmojiPan::EmojiPan(QWidget *parent) : TWidget(parent), _maxHeight(st::emojiPanMaxHeight), _horizontal(false), _noTabUpdate(false), _hiding(false), a_opacity(0), _shadow(st::dropdownDef.shadow), _recent(this , qsl("emoji_group"), dbietRecent , QString(), true , st::rbEmojiRecent), _people(this , qsl("emoji_group"), dbietPeople , QString(), false, st::rbEmojiPeople), @@ -1679,12 +1680,12 @@ e_scroll(this, st::emojiScroll), e_inner(), s_scroll(this, st::emojiScroll), s_i s_scroll.setFocusPolicy(Qt::NoFocus); s_scroll.viewport()->setFocusPolicy(Qt::NoFocus); - _width = st::dropdownDef.padding.left() + st::emojiPanFullSize.width() + st::dropdownDef.padding.right(); - _height = st::dropdownDef.padding.top() + st::emojiPanFullSize.height() + st::dropdownDef.padding.bottom(); + _width = st::dropdownDef.padding.left() + st::emojiPanWidth + st::dropdownDef.padding.right(); + _height = st::dropdownDef.padding.top() + _maxHeight + st::dropdownDef.padding.bottom(); resize(_width, _height); - e_scroll.resize(st::emojiPanFullSize.width(), st::emojiPanFullSize.height() - st::rbEmoji.height); - s_scroll.resize(st::emojiPanFullSize.width(), st::emojiPanFullSize.height() - st::rbEmoji.height); + e_scroll.resize(st::emojiPanWidth, _maxHeight - st::rbEmoji.height); + s_scroll.resize(st::emojiPanWidth, _maxHeight - st::rbEmoji.height); e_scroll.move(st::dropdownDef.padding.left(), st::dropdownDef.padding.top()); e_scroll.setWidget(&e_inner); @@ -1696,8 +1697,8 @@ e_scroll(this, st::emojiScroll), e_inner(), s_scroll(this, st::emojiScroll), s_i s_inner.setAttribute(Qt::WA_OpaquePaintEvent); s_scroll.setAutoFillBackground(true); - int32 left = _iconsLeft = st::dropdownDef.padding.left() + (st::emojiPanFullSize.width() - 8 * st::rbEmoji.width) / 2; - int32 top = _iconsTop = st::dropdownDef.padding.top() + st::emojiPanFullSize.height() - st::rbEmoji.height; + int32 left = _iconsLeft = st::dropdownDef.padding.left() + (st::emojiPanWidth - 8 * st::rbEmoji.width) / 2; + int32 top = _iconsTop = st::dropdownDef.padding.top() + _maxHeight - st::rbEmoji.height; prepareTab(left, top, _width, _recent); prepareTab(left, top, _width, _people); prepareTab(left, top, _width, _nature); @@ -1735,6 +1736,41 @@ e_scroll(this, st::emojiScroll), e_inner(), s_scroll(this, st::emojiScroll), s_i // setAttribute(Qt::WA_AcceptTouchEvents); } +void EmojiPan::setMaxHeight(int32 h) { + h = qMin(int(st::emojiPanMaxHeight), h); + if (h == _maxHeight) return; + + int32 was = _maxHeight; + _maxHeight = h; + + _height = st::dropdownDef.padding.top() + _maxHeight + st::dropdownDef.padding.bottom(); + resize(_width, _height); + + if (was > _maxHeight) { + e_scroll.resize(st::emojiPanWidth, _maxHeight - st::rbEmoji.height); + s_scroll.resize(st::emojiPanWidth, _maxHeight - st::rbEmoji.height); + s_inner.setMaxHeight(_maxHeight); + e_inner.setMaxHeight(_maxHeight); + } else { + s_inner.setMaxHeight(_maxHeight); + e_inner.setMaxHeight(_maxHeight); + e_scroll.resize(st::emojiPanWidth, _maxHeight - st::rbEmoji.height); + s_scroll.resize(st::emojiPanWidth, _maxHeight - st::rbEmoji.height); + } + + _iconsTop = st::dropdownDef.padding.top() + _maxHeight - st::rbEmoji.height; + _recent.move(_recent.x(), _iconsTop); + _people.move(_people.x(), _iconsTop); + _nature.move(_nature.x(), _iconsTop); + _food.move(_food.x(), _iconsTop); + _celebration.move(_celebration.x(), _iconsTop); + _activity.move(_activity.x(), _iconsTop); + _travel.move(_travel.x(), _iconsTop); + _objects.move(_objects.x(), _iconsTop); + + update(); +} + void EmojiPan::prepareTab(int32 &left, int32 top, int32 _width, FlatRadiobutton &tab) { tab.moveToLeft(left, top, _width); left += tab.width(); @@ -2362,9 +2398,9 @@ void EmojiPan::onSwitch() { hideAll(); _moveStart = getms(); - a_toCoord = (_stickersShown != rtl()) ? anim::ivalue(st::emojiPanFullSize.width(), 0) : anim::ivalue(-st::emojiPanFullSize.width(), 0); + a_toCoord = (_stickersShown != rtl()) ? anim::ivalue(st::emojiPanWidth, 0) : anim::ivalue(-st::emojiPanWidth, 0); a_toAlpha = anim::fvalue(0, 1); - a_fromCoord = (_stickersShown != rtl()) ? anim::ivalue(0, -st::emojiPanFullSize.width()) : anim::ivalue(0, st::emojiPanFullSize.width()); + a_fromCoord = (_stickersShown != rtl()) ? anim::ivalue(0, -st::emojiPanWidth) : anim::ivalue(0, st::emojiPanWidth); a_fromAlpha = anim::fvalue(1, 0); if (!animating()) anim::start(this); @@ -2373,7 +2409,7 @@ void EmojiPan::onSwitch() { void EmojiPan::onRemoveSet(uint64 setId) { StickerSets::const_iterator it = cStickerSets().constFind(setId); - if (it != cStickerSets().cend() && setId != DefaultStickerSetId && setId != RecentStickerSetId) { + if (it != cStickerSets().cend() && !(it->flags & MTPDstickerSet_flag_official)) { _removingSetId = it->id; ConfirmBox *box = new ConfirmBox(lng_stickers_remove_pack(lt_sticker_pack, it->title)); connect(box, SIGNAL(confirmed()), this, SLOT(onRemoveSetSure())); @@ -2385,7 +2421,7 @@ void EmojiPan::onRemoveSet(uint64 setId) { void EmojiPan::onRemoveSetSure() { App::wnd()->hideLayer(); StickerSets::iterator it = cRefStickerSets().find(_removingSetId); - if (it != cRefStickerSets().cend() && _removingSetId != DefaultStickerSetId && _removingSetId != RecentStickerSetId) { + if (it != cRefStickerSets().cend() && !(it->flags & MTPDstickerSet_flag_official)) { if (it->id && it->access) { MTP::send(MTPmessages_UninstallStickerSet(MTP_inputStickerSetID(MTP_long(it->id), MTP_long(it->access)))); } else if (!it->shortName.isEmpty()) { diff --git a/Telegram/SourceFiles/dropdown.h b/Telegram/SourceFiles/dropdown.h index 84968ca26..7335a17ff 100644 --- a/Telegram/SourceFiles/dropdown.h +++ b/Telegram/SourceFiles/dropdown.h @@ -202,6 +202,7 @@ public: EmojiPanInner(QWidget *parent = 0); + void setMaxHeight(int32 h); void paintEvent(QPaintEvent *e); void mousePressEvent(QMouseEvent *e); @@ -244,6 +245,8 @@ signals: private: + int32 _maxHeight; + int32 countHeight(); void selectEmoji(EmojiPtr emoji); @@ -286,6 +289,7 @@ public: StickerPanInner(QWidget *parent = 0); + void setMaxHeight(int32 h); void paintEvent(QPaintEvent *e); void mousePressEvent(QMouseEvent *e); @@ -329,6 +333,8 @@ signals: private: + int32 _maxHeight; + void appendSet(uint64 setId); int32 countHeight(); @@ -339,10 +345,16 @@ private: int32 _top; - QList _titles; - QList _setIds; - QList _sets; - QList > _hovers; + struct DisplayedSet { + DisplayedSet(uint64 id, int32 flags, const QString &title, int32 hoversSize, const StickerPack &pack = StickerPack()) : id(id), flags(flags), title(title), hovers(hoversSize, 0), pack(pack) { + } + uint64 id; + int32 flags; + QString title; + QVector hovers; + StickerPack pack; + }; + QList _sets; QList _custom; int32 _selected, _pressedSel; @@ -359,6 +371,7 @@ public: EmojiPan(QWidget *parent); + void setMaxHeight(int32 h); void paintEvent(QPaintEvent *e); void enterEvent(QEvent *e); @@ -412,6 +425,7 @@ signals: private: + int32 _maxHeight; bool _horizontal; void leaveToChildEvent(QEvent *e); diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 32dbe0947..fc4afd44c 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -2123,15 +2123,55 @@ const QString HistoryVideo::inHistoryText() const { } bool HistoryVideo::hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width) const { + int32 height = _height; + if (width < 0) { + width = w; + } else if (!_caption.isEmpty()) { + height = countHeight(parent, width); + } + if (width >= _maxw) { + width = _maxw; + } + return (x >= 0 && y >= 0 && x < width && y < height); +} + +int32 HistoryVideo::countHeight(const HistoryItem *parent, int32 width) const { + if (_caption.isEmpty()) return _height; + if (width < 0) width = w; if (width >= _maxw) { width = _maxw; } - return (x >= 0 && y >= 0 && x < width && y < _height); + + int32 h = st::mediaPadding.top() + st::mediaThumbSize + st::mediaPadding.bottom(); + if (!parent->out() && parent->history()->peer->chat) { + h += st::msgPadding.top() + st::msgNameFont->height; + } + if (const HistoryReply *reply = toHistoryReply(parent)) { + h += st::msgReplyPadding.top() + st::msgReplyBarSize.height() + st::msgReplyPadding.bottom(); + } else if (const HistoryForwarded *fwd = toHistoryForwarded(parent)) { + if (parent->out() || !parent->history()->peer->chat) { + h += st::msgPadding.top(); + } + h += st::msgServiceNameFont->height; + } + if (!_caption.isEmpty()) { + int32 textw = width - st::mediaPadding.left() - st::mediaPadding.right(); + if (!parent->out()) { // substract Download / Save As button + textw -= st::mediaSaveDelta + _buttonWidth; + } + h += st::webPagePhotoSkip + _caption.countHeight(textw); + } + return h; } void HistoryVideo::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width) const { - if (width < 0) width = w; + int32 height = _height; + if (width < 0) { + width = w; + } else if (!_caption.isEmpty()) { + height = countHeight(parent, width); + } if (width < 1) return; const HistoryReply *reply = toHistoryReply(parent); @@ -2157,7 +2197,7 @@ void HistoryVideo::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x } if (!out) { // draw Download / Save As button - int32 h = _height; + int32 h = height; if (!_caption.isEmpty()) { h -= st::webPagePhotoSkip + _caption.countHeight(width - _buttonWidth - st::mediaSaveDelta - st::mediaPadding.left() - st::mediaPadding.right()); } @@ -2203,7 +2243,12 @@ HistoryMedia *HistoryVideo::clone() const { } void HistoryVideo::draw(QPainter &p, const HistoryItem *parent, bool selected, int32 width) const { - if (width < 0) width = w; + int32 height = _height; + if (width < 0) { + width = w; + } else if (!_caption.isEmpty()) { + height = countHeight(parent, width); + } if (width < 1) return; const HistoryReply *reply = toHistoryReply(parent); @@ -2235,7 +2280,7 @@ void HistoryVideo::draw(QPainter &p, const HistoryItem *parent, bool selected, i pressed = hovered && ((data->loader ? _cancell : _savel) == textlnkDown()); if (hovered && !pressed && textlnkDown()) hovered = false; - int32 h = _height; + int32 h = height; if (!_caption.isEmpty()) { h -= st::webPagePhotoSkip + _caption.countHeight(width - _buttonWidth - st::mediaSaveDelta - st::mediaPadding.left() - st::mediaPadding.right()); } @@ -2257,7 +2302,7 @@ void HistoryVideo::draw(QPainter &p, const HistoryItem *parent, bool selected, i style::color bg(selected ? (out ? st::msgOutSelectBg : st::msgInSelectBg) : (out ? st::msgOutBg : st::msgInBg)); style::color sh(selected ? (out ? st::msgOutSelectShadow : st::msgInSelectShadow) : (out ? st::msgOutShadow : st::msgInShadow)); RoundCorners cors(selected ? (out ? MessageOutSelectedCorners : MessageInSelectedCorners) : (out ? MessageOutCorners : MessageInCorners)); - App::roundRect(p, 0, 0, width, _height, bg, cors, &sh); + App::roundRect(p, 0, 0, width, height, bg, cors, &sh); if (!parent->out() && parent->history()->peer->chat) { p.setFont(st::msgNameFont->f); @@ -2334,9 +2379,9 @@ void HistoryVideo::draw(QPainter &p, const HistoryItem *parent, bool selected, i style::color date(selected ? (out ? st::msgOutSelectDateColor : st::msgInSelectDateColor) : (out ? st::msgOutDateColor : st::msgInDateColor)); p.setPen(date->p); - p.drawText(width + st::msgDateDelta.x() - fullTimeWidth + st::msgDateSpace, _height - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgDateFont->descent, parent->time()); + p.drawText(width + st::msgDateDelta.x() - fullTimeWidth + st::msgDateSpace, height - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgDateFont->descent, parent->time()); if (out) { - QPoint iconPos(width + 5 - st::msgPadding.right() - st::msgCheckRect.pxWidth(), _height + 1 - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgCheckRect.pxHeight()); + QPoint iconPos(width + 5 - st::msgPadding.right() - st::msgCheckRect.pxWidth(), height + 1 - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgCheckRect.pxHeight()); const QRect *iconRect; if (parent->id > 0) { if (parent->unread()) { @@ -3049,22 +3094,6 @@ HistorySticker::HistorySticker(DocumentData *document) : HistoryMedia() , pixw(1), pixh(1), data(document), lastw(0) { data->thumb->load(); - updateStickerEmoji(); -} - -bool HistorySticker::updateStickerEmoji() { - if (!data->sticker->alt.isEmpty()) { - _emoji = data->sticker->alt; - return true; - } - const EmojiStickersMap &stickers(cEmojiStickers()); - EmojiStickersMap::const_iterator i = stickers.constFind(data); - QString emoji = (i == stickers.cend()) ? QString() : emojiString(i.value()); - if (emoji != _emoji) { - _emoji = emoji; - return true; - } - return false; } void HistorySticker::initDimensions(const HistoryItem *parent) { @@ -5169,15 +5198,6 @@ QString HistoryMessage::notificationText() const { return msg; } -void HistoryMessage::updateStickerEmoji() { - if (_media) { - if (_media->updateStickerEmoji()) { - _history->textCachedFor = 0; - if (App::wnd()) App::wnd()->update(); - } - } -} - HistoryMessage::~HistoryMessage() { if (_media) { _media->unregItem(this); diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index 50810501f..c952e5f73 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -724,8 +724,6 @@ public: } virtual void updateMedia(const MTPMessageMedia &media) { } - virtual void updateStickerEmoji() { - } virtual QString selectedText(uint32 selection) const { return qsl("[-]"); @@ -856,10 +854,6 @@ public: return false; } - virtual bool updateStickerEmoji() { - return false; - } - virtual bool animating() const { return false; } @@ -947,6 +941,7 @@ public: const QString inDialogsText() const; const QString inHistoryText() const; bool hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; + int32 countHeight(const HistoryItem *parent, int32 width = -1) const; void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const; bool uploading() const { return (data->status == FileUploading); @@ -1086,7 +1081,6 @@ public: void unregItem(HistoryItem *item); void updateFrom(const MTPMessageMedia &media); - bool updateStickerEmoji(); private: @@ -1292,7 +1286,6 @@ public: _media->updateFrom(media); } } - void updateStickerEmoji(); QString selectedText(uint32 selection) const; QString inDialogsText() const; diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index b51c049c6..755d5f286 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -491,6 +491,90 @@ void HistoryList::dragActionCancel() { historyWidget->noSelectingScroll(); } +void HistoryList::dragExec() { + bool uponSelected = false; + if (_dragItem) { + bool afterDragSymbol; + uint16 symbol; + if (!_selected.isEmpty() && _selected.cbegin().value() == FullItemSel) { + uponSelected = _selected.contains(_dragItem); + } else { + _dragItem->getSymbol(symbol, afterDragSymbol, uponSelected, _dragStartPos.x(), _dragStartPos.y()); + if (uponSelected) { + if (_selected.isEmpty() || + _selected.cbegin().value() == FullItemSel || + _selected.cbegin().key() != _dragItem + ) { + uponSelected = false; + } else { + uint16 selFrom = (_selected.cbegin().value() >> 16) & 0xFFFF, selTo = _selected.cbegin().value() & 0xFFFF; + if (symbol < selFrom || symbol >= selTo) { + uponSelected = false; + } + } + } + } + } + QString sel; + QList urls; + if (uponSelected) { + sel = getSelectedText(); + } else if (textlnkDown()) { + sel = textlnkDown()->encoded(); + if (!sel.isEmpty() && sel.at(0) != '/' && sel.at(0) != '@' && sel.at(0) != '#') { + urls.push_back(QUrl::fromEncoded(sel.toUtf8())); + } + } + if (!sel.isEmpty()) { + updateDragSelection(0, 0, false); + historyWidget->noSelectingScroll(); + + QDrag *drag = new QDrag(App::wnd()); + QMimeData *mimeData = new QMimeData; + + mimeData->setText(sel); + if (!urls.isEmpty()) mimeData->setUrls(urls); + if (uponSelected && !_selected.isEmpty() && _selected.cbegin().value() == FullItemSel && cWideMode()) { + mimeData->setData(qsl("application/x-td-forward-selected"), "1"); + } + drag->setMimeData(mimeData); + drag->exec(); + return; + } else { + HistoryItem *pressedLnkItem = App::pressedLinkItem(), *pressedItem = App::pressedItem(); + QLatin1String lnkType = (textlnkDown() && pressedLnkItem) ? textlnkDown()->type() : qstr(""); + bool lnkPhoto = (lnkType == qstr("PhotoLink")), + lnkVideo = (lnkType == qstr("VideoOpenLink")), + lnkAudio = (lnkType == qstr("AudioOpenLink")), + lnkDocument = (lnkType == qstr("DocumentOpenLink")), + lnkContact = (lnkType == qstr("PeerLink") && dynamic_cast(pressedLnkItem->getMedia())), + dragSticker = dynamic_cast(pressedItem ? pressedItem->getMedia() : 0), + dragByDate = (_dragCursorState == HistoryInDateCursorState); + if (lnkPhoto || lnkVideo || lnkAudio || lnkDocument || lnkContact || dragSticker || dragByDate) { + QDrag *drag = new QDrag(App::wnd()); + QMimeData *mimeData = new QMimeData; + + if (dragSticker || dragByDate) { + mimeData->setData(qsl("application/x-td-forward-pressed"), "1"); + } else { + mimeData->setData(qsl("application/x-td-forward-pressed-link"), "1"); + } + if (lnkDocument) { + QString already = static_cast(textlnkDown().data())->document()->already(true); + if (!already.isEmpty()) { + QList urls; + urls.push_back(QUrl::fromLocalFile(already)); + mimeData->setUrls(urls); + } + } + + drag->setMimeData(mimeData); + drag->exec(Qt::CopyAction); + return; + } + } +} + void HistoryList::itemRemoved(HistoryItem *item) { SelectedItems::iterator i = _selected.find(item); if (i != _selected.cend()) { @@ -1280,93 +1364,7 @@ void HistoryList::onUpdateSelected() { if (item != _dragItem || (m - _dragStartPos).manhattanLength() >= QApplication::startDragDistance()) { if (_dragAction == PrepareDrag) { _dragAction = Dragging; - - bool uponSelected = false; - if (_dragItem) { - bool afterDragSymbol; - uint16 symbol; - if (!_selected.isEmpty() && _selected.cbegin().value() == FullItemSel) { - uponSelected = _selected.contains(_dragItem); - } else { - _dragItem->getSymbol(symbol, afterDragSymbol, uponSelected, _dragStartPos.x(), _dragStartPos.y()); - if (uponSelected) { - if (_selected.isEmpty() || - _selected.cbegin().value() == FullItemSel || - _selected.cbegin().key() != _dragItem - ) { - uponSelected = false; - } else { - uint16 selFrom = (_selected.cbegin().value() >> 16) & 0xFFFF, selTo = _selected.cbegin().value() & 0xFFFF; - if (symbol < selFrom || symbol >= selTo) { - uponSelected = false; - } - } - } - } - } - QString sel; - QList urls; - if (uponSelected) { - sel = getSelectedText(); - } else if (textlnkDown()) { - sel = textlnkDown()->encoded(); - if (!sel.isEmpty() && sel.at(0) != '/' && sel.at(0) != '@' && sel.at(0) != '#') { - urls.push_back(QUrl::fromEncoded(sel.toUtf8())); - } - } - if (!sel.isEmpty()) { - updateDragSelection(0, 0, false); - historyWidget->noSelectingScroll(); - - QDrag *drag = new QDrag(App::wnd()); - QMimeData *mimeData = new QMimeData; - - mimeData->setText(sel); - if (!urls.isEmpty()) mimeData->setUrls(urls); - if (uponSelected && !_selected.isEmpty() && _selected.cbegin().value() == FullItemSel && cWideMode()) { - QStringList ids; - ids.reserve(_selected.size()); - for (SelectedItems::const_iterator i = _selected.cbegin(), e = _selected.cend(); i != e; ++i) { - ids.push_back(QString::number(i.key()->id, 16)); - } - mimeData->setData(qsl("application/x-td-forward-selected"), "1"); - } - drag->setMimeData(mimeData); - drag->exec(); - return; - } else { - HistoryItem *pressedLnkItem = App::pressedLinkItem(), *pressedItem = App::pressedItem(); - QLatin1String lnkType = (textlnkDown() && pressedLnkItem) ? textlnkDown()->type() : qstr(""); - bool lnkPhoto = (lnkType == qstr("PhotoLink")), - lnkVideo = (lnkType == qstr("VideoOpenLink")), - lnkAudio = (lnkType == qstr("AudioOpenLink")), - lnkDocument = (lnkType == qstr("DocumentOpenLink")), - lnkContact = (lnkType == qstr("PeerLink") && dynamic_cast(pressedLnkItem->getMedia())), - dragSticker = dynamic_cast(pressedItem ? pressedItem->getMedia() : 0), - dragByDate = (_dragCursorState == HistoryInDateCursorState); - if (lnkPhoto || lnkVideo || lnkAudio || lnkDocument || lnkContact || dragSticker || dragByDate) { - QDrag *drag = new QDrag(App::wnd()); - QMimeData *mimeData = new QMimeData; - - if (dragSticker || dragByDate) { - mimeData->setData(qsl("application/x-td-forward-pressed"), "1"); - } else { - mimeData->setData(qsl("application/x-td-forward-pressed-link"), "1"); - } - if (lnkDocument) { - QString already = static_cast(textlnkDown().data())->document()->already(true); - if (!already.isEmpty()) { - QList urls; - urls.push_back(QUrl::fromLocalFile(already)); - mimeData->setUrls(urls); - } - } - - drag->setMimeData(mimeData); - drag->exec(Qt::CopyAction); - return; - } - } + dragExec(); } else if (_dragAction == PrepareSelect) { _dragAction = Selecting; } @@ -2478,9 +2476,6 @@ void HistoryWidget::stickersGot(const MTPmessages_AllStickers &stickers) { if (stickers.type() != mtpc_messages_allStickers) return; const MTPDmessages_allStickers &d(stickers.c_messages_allStickers()); - EmojiStickersMap map; - - const QVector &d_docs(d.vdocuments.c_vector().v); const QVector &d_sets(d.vsets.c_vector().v); QByteArray wasHash = cStickersHash(); @@ -2490,183 +2485,62 @@ void HistoryWidget::stickersGot(const MTPmessages_AllStickers &stickers) { setsOrder.clear(); StickerSets &sets(cRefStickerSets()); - StickerSets::iterator def = sets.find(DefaultStickerSetId); - if (def == sets.cend()) { - def = sets.insert(DefaultStickerSetId, StickerSet(DefaultStickerSetId, 0, lang(lng_stickers_default_set), QString())); + QMap setsToRequest; + for (StickerSets::iterator i = sets.begin(), e = sets.end(); i != e; ++i) { + i->access = 0; // mark for removing } for (int32 i = 0, l = d_sets.size(); i != l; ++i) { if (d_sets.at(i).type() == mtpc_stickerSet) { const MTPDstickerSet &set(d_sets.at(i).c_stickerSet()); StickerSets::iterator i = sets.find(set.vid.v); - setsOrder.push_back(set.vid.v); + QString title = qs(set.vtitle); + if (set.vflags.v & MTPDstickerSet_flag_official) { + if (!title.compare(qstr("Great Minds"), Qt::CaseInsensitive)) { + title = lang(lng_stickers_default_set); + } + setsOrder.push_front(set.vid.v); + } else { + setsOrder.push_back(set.vid.v); + } + if (i == sets.cend()) { - i = sets.insert(set.vid.v, StickerSet(set.vid.v, set.vaccess_hash.v, qs(set.vtitle), qs(set.vshort_name))); + i = sets.insert(set.vid.v, StickerSet(set.vid.v, set.vaccess_hash.v, title, qs(set.vshort_name), set.vcount.v, set.vhash.v, set.vflags.v | MTPDstickerSet_flag_NOT_LOADED)); + if (!(i->flags & MTPDstickerSet_flag_disabled)) { + setsToRequest.insert(set.vid.v, set.vaccess_hash.v); + } } else { i->access = set.vaccess_hash.v; - i->title = qs(set.vtitle); + i->title = title; i->shortName = qs(set.vshort_name); + i->flags = set.vflags.v; + if (i->count != set.vcount.v || i->hash != set.vhash.v) { + i->count = set.vcount.v; + i->hash = set.vhash.v; + i->flags |= MTPDstickerSet_flag_NOT_LOADED; // need to request this set + if (!(i->flags & MTPDstickerSet_flag_disabled)) { + setsToRequest.insert(set.vid.v, set.vaccess_hash.v); + } + } } } } - - StickerSets::iterator custom = sets.find(CustomStickerSetId); - - bool added = false, removed = false; - QSet found; - QMap wasCount; - for (int32 i = 0, l = d_docs.size(); i != l; ++i) { - DocumentData *doc = App::feedDocument(d_docs.at(i)); - if (!doc || !doc->sticker) continue; - - switch (doc->sticker->set.type()) { - case mtpc_inputStickerSetEmpty: { // default set - great minds - if (!wasCount.contains(DefaultStickerSetId)) wasCount.insert(DefaultStickerSetId, def->stickers.size()); - if (def->stickers.indexOf(doc) < 0) { - def->stickers.push_back(doc); - added = true; - } else { - found.insert(doc); - } - } break; - case mtpc_inputStickerSetID: { - StickerSets::iterator it = sets.find(doc->sticker->set.c_inputStickerSetID().vid.v); - if (it == sets.cend()) { - LOG(("Sticker Set not found by ID: %1").arg(doc->sticker->set.c_inputStickerSetID().vid.v)); - } else { - if (!wasCount.contains(it->id)) wasCount.insert(it->id, it->stickers.size()); - if (it->stickers.indexOf(doc) < 0) { - it->stickers.push_back(doc); - added = true; - } else { - found.insert(doc); - } - } - } break; - case mtpc_inputStickerSetShortName: { - QString name = qs(doc->sticker->set.c_inputStickerSetShortName().vshort_name).toLower().trimmed(); - StickerSets::iterator it = sets.begin(); - for (; it != sets.cend(); ++it) { - if (it->shortName.toLower().trimmed() == name) { - break; - } - } - if (it == sets.cend()) { - LOG(("Sticker Set not found by name: %1").arg(name)); - } else { - if (!wasCount.contains(it->id)) wasCount.insert(it->id, it->stickers.size()); - if (it->stickers.indexOf(doc) < 0) { - it->stickers.push_back(doc); - added = true; - } else { - found.insert(doc); - } - } - } break; - } - if (custom != sets.cend()) { - int32 index = custom->stickers.indexOf(doc); - if (index >= 0) { - custom->stickers.removeAt(index); - removed = true; - } - } - } - if (custom != sets.cend() && custom->stickers.isEmpty()) { - sets.erase(custom); - custom = sets.end(); - } - bool writeRecent = false; - RecentStickerPack &recent(cGetRecentStickers()); - for (StickerSets::iterator it = sets.begin(); it != sets.cend();) { - if (it->id == CustomStickerSetId || it->id == RecentStickerSetId) { - ++it; - continue; - } - QMap::const_iterator was = wasCount.constFind(it->id); - if (was == wasCount.cend()) { // no such stickers added - for (RecentStickerPack::iterator i = recent.begin(); i != recent.cend();) { - if (it->stickers.indexOf(i->first) >= 0) { - i = recent.erase(i); - writeRecent = true; - } else { - ++i; - } - } - setsOrder.removeOne(it->id); - it = sets.erase(it); - removed = true; + for (StickerSets::iterator i = sets.begin(), e = sets.end(); i != e;) { + if (i->id == CustomStickerSetId || i->access != 0) { + ++i; } else { - for (int32 j = 0, l = was.value(); j < l;) { - if (found.contains(it->stickers.at(j))) { - ++j; - } else { - for (RecentStickerPack::iterator i = recent.begin(); i != recent.cend();) { - if (it->stickers.at(j) == i->first) { - i = recent.erase(i); - writeRecent = true; - } else { - ++i; - } - } - it->stickers.removeAt(j); - --l; - removed = true; - } - } - if (it->stickers.isEmpty()) { - setsOrder.removeOne(it->id); - it = sets.erase(it); - } else { - ++it; - } - } - } - if (added || removed || cStickersHash() != wasHash) { - Local::writeStickers(); - } - if (writeRecent) { - Local::writeUserSettings(); - } - - const QVector &packs(d.vpacks.c_vector().v); - for (int32 i = 0, l = packs.size(); i != l; ++i) { - if (packs.at(i).type() == mtpc_stickerPack) { - const MTPDstickerPack &p(packs.at(i).c_stickerPack()); - QString emoticon(qs(p.vemoticon)); - EmojiPtr e = 0; - for (const QChar *ch = emoticon.constData(), *end = emoticon.constEnd(); ch != end; ++ch) { - int len = 0; - e = emojiFromText(ch, end, len); - if (e) break; - - if (ch + 1 < end && ch->isHighSurrogate() && (ch + 1)->isLowSurrogate()) ++ch; - } - if (e) { - const QVector docs(p.vdocuments.c_vector().v); - if (!docs.isEmpty()) { - for (int32 j = 0, s = docs.size(); j < s; ++j) { - DocumentData *doc = App::document(docs.at(j).v); - map.insert(doc, e); - } - } - } else { - LOG(("Sticker Error: Could not find emoji for string: %1").arg(emoticon)); - } + i = sets.erase(i); } } - cSetEmojiStickers(map); - - const DocumentItems &items(App::documentItems()); - for (EmojiStickersMap::const_iterator i = map.cbegin(), e = map.cend(); i != e; ++i) { - DocumentItems::const_iterator j = items.constFind(i.key()); - if (j != items.cend()) { - for (HistoryItemsMap::const_iterator k = j->cbegin(), end = j->cend(); k != end; ++k) { - k.key()->updateStickerEmoji(); - } + if (!setsToRequest.isEmpty()) { + for (QMap::const_iterator i = setsToRequest.cbegin(), e = setsToRequest.cend(); i != e; ++i) { + App::api()->scheduleStickerSetRequest(i.key(), i.value()); } + App::api()->requestStickerSets(); } + Local::writeStickers(); + if (App::main()) emit App::main()->stickersUpdated(); } @@ -4630,6 +4504,7 @@ void HistoryWidget::resizeEvent(QResizeEvent *e) { _cmdStart.move(_attachEmoji.x() - _cmdStart.width(), height() - kbh - _cmdStart.height()); _attachType.move(0, _attachDocument.y() - _attachType.height()); + _emojiPan.setMaxHeight(height() - st::dropdownDef.padding.top() - st::dropdownDef.padding.bottom() - _attachEmoji.height()); _emojiPan.move(width() - _emojiPan.width(), _attachEmoji.y() - _emojiPan.height()); switch (_attachDrag) { diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index ccd60b448..b14c50b82 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -59,6 +59,7 @@ public: void dragActionUpdate(const QPoint &screenPos); void dragActionFinish(const QPoint &screenPos, Qt::MouseButton button = Qt::LeftButton); void dragActionCancel(); + void dragExec(); void touchScrollUpdated(const QPoint &screenPos); QPoint mapMouseToItem(QPoint p, HistoryItem *item); diff --git a/Telegram/SourceFiles/localstorage.cpp b/Telegram/SourceFiles/localstorage.cpp index 4d797463c..0426f2e1b 100644 --- a/Telegram/SourceFiles/localstorage.cpp +++ b/Telegram/SourceFiles/localstorage.cpp @@ -2240,9 +2240,17 @@ namespace Local { void _writeStickerSet(QDataStream &stream, uint64 setId) { StickerSets::const_iterator it = cStickerSets().constFind(setId); - if (it == cStickerSets().cend() || it->stickers.isEmpty()) return; + if (it == cStickerSets().cend()) return; - stream << quint64(it->id) << quint64(it->access) << it->title << it->shortName << quint32(it->stickers.size()); + bool notLoaded = (it->flags & MTPDstickerSet_flag_NOT_LOADED); + if (notLoaded) { + stream << quint64(it->id) << quint64(it->access) << it->title << it->shortName << qint32(-it->count) << qint32(it->hash) << qint32(it->flags); + return; + } else { + if (it->stickers.isEmpty()) return; + } + + stream << quint64(it->id) << quint64(it->access) << it->title << it->shortName << qint32(it->stickers.size()) << qint32(it->hash) << qint32(it->flags); for (StickerPack::const_iterator j = it->stickers.cbegin(), e = it->stickers.cend(); j != e; ++j) { DocumentData *doc = *j; stream << quint64(doc->id) << quint64(doc->access) << qint32(doc->date) << doc->name << doc->mime << qint32(doc->dc) << qint32(doc->size) << qint32(doc->dimensions.width()) << qint32(doc->dimensions.height()) << qint32(doc->type) << doc->sticker->alt; @@ -2275,17 +2283,20 @@ namespace Local { } _writeMap(); } else { - if (!_stickersKey) { - _stickersKey = genKey(); - _mapChanged = true; - _writeMap(WriteMapFast); - } + int32 setsCount = 0; quint32 size = sizeof(quint32) + _bytearraySize(cStickersHash()); for (StickerSets::const_iterator i = sets.cbegin(); i != sets.cend(); ++i) { - if (i->stickers.isEmpty()) continue; + bool notLoaded = (i->flags & MTPDstickerSet_flag_NOT_LOADED); + if (notLoaded) { + if (!(i->flags & MTPDstickerSet_flag_disabled)) { // waiting to receive + return; + } + } else { + if (i->stickers.isEmpty()) continue; + } - // id + access + title + shortName + stickersCount - size += sizeof(quint64) * 2 + _stringSize(i->title) + _stringSize(i->shortName) + sizeof(quint32); + // id + access + title + shortName + stickersCount + hash + flags + size += sizeof(quint64) * 2 + _stringSize(i->title) + _stringSize(i->shortName) + sizeof(quint32) + sizeof(qint32) * 2; for (StickerPack::const_iterator j = i->stickers.cbegin(), e = i->stickers.cend(); j != e; ++j) { DocumentData *doc = *j; @@ -2295,10 +2306,16 @@ namespace Local { // thumb-width + thumb-height + thumb-dc + thumb-volume + thumb-local + thumb-secret size += sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(quint64) + sizeof(qint32) + sizeof(quint64); } + ++setsCount; + } + + if (!_stickersKey) { + _stickersKey = genKey(); + _mapChanged = true; + _writeMap(WriteMapFast); } EncryptedDescriptor data(size); - data.stream << quint32(cStickerSets().size()) << cStickersHash(); - _writeStickerSet(data.stream, DefaultStickerSetId); + data.stream << quint32(setsCount) << cStickersHash(); _writeStickerSet(data.stream, CustomStickerSetId); for (StickerSetsOrder::const_iterator i = cStickerSetsOrder().cbegin(), e = cStickerSetsOrder().cend(); i != e; ++i) { _writeStickerSet(data.stream, *i); @@ -2321,15 +2338,17 @@ namespace Local { StickerSets &sets(cRefStickerSets()); sets.clear(); - cSetStickerSetsOrder(StickerSetsOrder()); + + StickerSetsOrder &order(cRefStickerSetsOrder()); + order.clear(); RecentStickerPack &recent(cRefRecentStickers()); recent.clear(); cSetStickersHash(QByteArray()); - StickerSet &def(sets.insert(DefaultStickerSetId, StickerSet(DefaultStickerSetId, 0, lang(lng_stickers_default_set), QString())).value()); - StickerSet &custom(sets.insert(CustomStickerSetId, StickerSet(CustomStickerSetId, 0, lang(lng_custom_stickers), QString())).value()); + StickerSet &def(sets.insert(DefaultStickerSetId, StickerSet(DefaultStickerSetId, 0, lang(lng_stickers_default_set), QString(), 0, 0, MTPDstickerSet_flag_official)).value()); + StickerSet &custom(sets.insert(CustomStickerSetId, StickerSet(CustomStickerSetId, 0, lang(lng_custom_stickers), QString(), 0, 0, 0)).value()); QMap read; while (!stickers.stream.atEnd()) { @@ -2360,12 +2379,18 @@ namespace Local { if (value > 0) { def.stickers.push_back(doc); + ++def.count; } else { custom.stickers.push_back(doc); + ++custom.count; } if (recent.size() < StickerPanPerRow * StickerPanRowsPerPage && qAbs(value) > 1) recent.push_back(qMakePair(doc, qAbs(value))); } - if (def.stickers.isEmpty()) sets.remove(DefaultStickerSetId); + if (def.stickers.isEmpty()) { + sets.remove(DefaultStickerSetId); + } else { + order.push_front(DefaultStickerSetId); + } if (custom.stickers.isEmpty()) sets.remove(CustomStickerSetId); writeStickers(); @@ -2405,11 +2430,18 @@ namespace Local { for (uint32 i = 0; i < cnt; ++i) { quint64 setId = 0, setAccess = 0; QString setTitle, setShortName; - quint32 scnt = 0; + qint32 scnt = 0; stickers.stream >> setId >> setAccess >> setTitle >> setShortName >> scnt; + qint32 setHash = 0, setFlags = 0; + if (stickers.version > 8033) { + stickers.stream >> setHash >> setFlags; + } + if (setId == DefaultStickerSetId) { setTitle = lang(lng_stickers_default_set); + setFlags |= MTPDstickerSet_flag_official; + order.push_front(setId); } else if (setId == CustomStickerSetId) { setTitle = lang(lng_custom_stickers); } else if (setId) { @@ -2417,7 +2449,12 @@ namespace Local { } else { continue; } - StickerSet &set(sets.insert(setId, StickerSet(setId, setAccess, setTitle, setShortName)).value()); + StickerSet &set(sets.insert(setId, StickerSet(setId, setAccess, setTitle, setShortName, 0, setHash, setFlags)).value()); + if (scnt < 0) { // disabled not loaded set + set.count = -scnt; + continue; + } + set.stickers.reserve(scnt); QMap read; @@ -2465,6 +2502,7 @@ namespace Local { if (!doc->sticker) continue; set.stickers.push_back(doc); + ++set.count; } } diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 56ea3442c..b7cbfbfcd 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -1948,9 +1948,9 @@ void MainWidget::showMediaOverview(PeerData *peer, MediaOverviewType type, bool } overview = new OverviewWidget(this, peer, type); _mediaTypeMask = 0; - mediaOverviewUpdated(peer); _topBar.show(); resizeEvent(0); + mediaOverviewUpdated(peer); overview->animShow(animCache, animTopBarCache, back, lastScrollTop); history.animStop(); history.showPeer(0, 0, false, true); @@ -2920,7 +2920,7 @@ void MainWidget::incrementSticker(DocumentData *sticker) { } StickerSets &sets(cRefStickerSets()); for (StickerSets::const_iterator i = sets.cbegin(); i != sets.cend(); ++i) { - if (i->id == CustomStickerSetId || (setId && i->id == setId) || (!setName.isEmpty() && i->shortName.toLower().trimmed() == setName) || (!setId && setName.isEmpty() && i->id == DefaultStickerSetId)) { + if (i->id == CustomStickerSetId || i->id == DefaultStickerSetId || (setId && i->id == setId) || (!setName.isEmpty() && i->shortName.toLower().trimmed() == setName)) { for (int32 j = 0, l = i->stickers.size(); j < l; ++j) { if (i->stickers.at(j) == sticker) { found = true; @@ -2933,9 +2933,10 @@ void MainWidget::incrementSticker(DocumentData *sticker) { if (!found) { StickerSets::iterator it = sets.find(CustomStickerSetId); if (it == sets.cend()) { - it = sets.insert(CustomStickerSetId, StickerSet(CustomStickerSetId, 0, lang(lng_custom_stickers), QString())); + it = sets.insert(CustomStickerSetId, StickerSet(CustomStickerSetId, 0, lang(lng_custom_stickers), QString(), 0, 0, 0)); } it->stickers.push_back(sticker); + ++it->count; Local::writeStickers(); } history.updateRecentStickers(); @@ -3238,6 +3239,9 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { if (item->isMediaUnread()) { item->markMediaRead(); msgUpdated(item->history()->peer->id, item); + if (item->out() && !item->history()->peer->chat) { + item->history()->peer->asUser()->madeAction(); + } } } } diff --git a/Telegram/SourceFiles/mtproto/mtpConnection.h b/Telegram/SourceFiles/mtproto/mtpConnection.h index c5268589f..44eed5d6f 100644 --- a/Telegram/SourceFiles/mtproto/mtpConnection.h +++ b/Telegram/SourceFiles/mtproto/mtpConnection.h @@ -43,7 +43,12 @@ enum { MTPDreplyKeyboardMarkup_flag_single_use = (1 << 1), MTPDreplyKeyboardMarkup_flag_personal = (1 << 2), MTPDreplyKeyboardMarkup_flag_FORCE_REPLY = (1 << 30), // client side flag for forceReply - MTPDreplyKeyboardMarkup_flag_ZERO = (1 << 31) // client side flag for zeroMarkup + MTPDreplyKeyboardMarkup_flag_ZERO = (1 << 31), // client side flag for zeroMarkup + + MTPDstickerSet_flag_installed = (1 << 0), + MTPDstickerSet_flag_disabled = (1 << 1), + MTPDstickerSet_flag_official = (1 << 2), + MTPDstickerSet_flag_NOT_LOADED = (1 << 31), // client side flag for not yet loaded set }; static const MTPReplyMarkup MTPnullMarkup = MTP_replyKeyboardMarkup(MTP_int(0), MTP_vector(0)); diff --git a/Telegram/SourceFiles/mtproto/mtpCoreTypes.h b/Telegram/SourceFiles/mtproto/mtpCoreTypes.h index 90fdf7d91..950d5be3a 100644 --- a/Telegram/SourceFiles/mtproto/mtpCoreTypes.h +++ b/Telegram/SourceFiles/mtproto/mtpCoreTypes.h @@ -366,7 +366,7 @@ static const mtpTypeId mtpLayers[] = { mtpc_invokeWithLayer17, mtpc_invokeWithLayer18, }, mtpLayerMaxSingle = sizeof(mtpLayers) / sizeof(mtpLayers[0]); -static const mtpPrime mtpCurrentLayer = 31; +static const mtpPrime mtpCurrentLayer = 32; template class MTPBoxed : public bareT { diff --git a/Telegram/SourceFiles/mtproto/mtpScheme.cpp b/Telegram/SourceFiles/mtproto/mtpScheme.cpp index 2ff60009d..a79731ee7 100644 --- a/Telegram/SourceFiles/mtproto/mtpScheme.cpp +++ b/Telegram/SourceFiles/mtproto/mtpScheme.cpp @@ -3887,6 +3887,8 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } switch (stage) { case 0: to.add(" duration: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 2: to.add(" performer: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; @@ -3949,9 +3951,7 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } switch (stage) { case 0: to.add(" hash: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" packs: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" sets: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 3: to.add(" documents: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" sets: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; @@ -4262,10 +4262,13 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 3: to.add(" short_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 0: to.add(" flags: "); ++stages.back(); if (start >= end) throw Exception("start >= end in flags"); else flags.back() = *start; types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 2: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 3: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 4: to.add(" short_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 5: to.add(" count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 6: to.add(" hash: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; @@ -4885,6 +4888,7 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } switch (stage) { case 0: to.add(" stickerset: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" disabled: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; diff --git a/Telegram/SourceFiles/mtproto/mtpScheme.h b/Telegram/SourceFiles/mtproto/mtpScheme.h index 2acf51b10..2cebf65f9 100644 --- a/Telegram/SourceFiles/mtproto/mtpScheme.h +++ b/Telegram/SourceFiles/mtproto/mtpScheme.h @@ -338,13 +338,13 @@ enum { mtpc_documentAttributeAnimated = 0x11b58939, mtpc_documentAttributeSticker = 0x3a556302, mtpc_documentAttributeVideo = 0x5910cccb, - mtpc_documentAttributeAudio = 0x51448e5, + mtpc_documentAttributeAudio = 0xded218e0, mtpc_documentAttributeFilename = 0x15590068, mtpc_messages_stickersNotModified = 0xf1749a22, mtpc_messages_stickers = 0x8a8ecd32, mtpc_stickerPack = 0x12b299d4, mtpc_messages_allStickersNotModified = 0xe86602c3, - mtpc_messages_allStickers = 0x5ce352ec, + mtpc_messages_allStickers = 0xd51dafdb, mtpc_disabledFeature = 0xae636f24, mtpc_updateReadHistoryInbox = 0x9961fd5c, mtpc_updateReadHistoryOutbox = 0x2f2f21bf, @@ -377,7 +377,7 @@ enum { mtpc_inputStickerSetEmpty = 0xffb62b95, mtpc_inputStickerSetID = 0x9de7a269, mtpc_inputStickerSetShortName = 0x861cc8a0, - mtpc_stickerSet = 0xa7a43b17, + mtpc_stickerSet = 0xcd303b41, mtpc_messages_stickerSet = 0xb60a24a6, mtpc_user = 0x22e49072, mtpc_botCommand = 0xc27ac8c7, @@ -513,7 +513,7 @@ enum { mtpc_messages_checkChatInvite = 0x3eadb1bb, mtpc_messages_importChatInvite = 0x6c50051c, mtpc_messages_getStickerSet = 0x2619a90e, - mtpc_messages_installStickerSet = 0xefbbfae9, + mtpc_messages_installStickerSet = 0x7b30c3a6, mtpc_messages_uninstallStickerSet = 0xf96e55de, mtpc_messages_startBot = 0x1b3e0ffc }; @@ -7146,7 +7146,7 @@ private: friend MTPdocumentAttribute MTP_documentAttributeAnimated(); friend MTPdocumentAttribute MTP_documentAttributeSticker(const MTPstring &_alt, const MTPInputStickerSet &_stickerset); friend MTPdocumentAttribute MTP_documentAttributeVideo(MTPint _duration, MTPint _w, MTPint _h); - friend MTPdocumentAttribute MTP_documentAttributeAudio(MTPint _duration); + friend MTPdocumentAttribute MTP_documentAttributeAudio(MTPint _duration, const MTPstring &_title, const MTPstring &_performer); friend MTPdocumentAttribute MTP_documentAttributeFilename(const MTPstring &_file_name); mtpTypeId _type; @@ -7254,7 +7254,7 @@ private: explicit MTPmessages_allStickers(MTPDmessages_allStickers *_data); friend MTPmessages_allStickers MTP_messages_allStickersNotModified(); - friend MTPmessages_allStickers MTP_messages_allStickers(const MTPstring &_hash, const MTPVector &_packs, const MTPVector &_sets, const MTPVector &_documents); + friend MTPmessages_allStickers MTP_messages_allStickers(const MTPstring &_hash, const MTPVector &_sets); mtpTypeId _type; }; @@ -7819,7 +7819,7 @@ public: private: explicit MTPstickerSet(MTPDstickerSet *_data); - friend MTPstickerSet MTP_stickerSet(const MTPlong &_id, const MTPlong &_access_hash, const MTPstring &_title, const MTPstring &_short_name); + friend MTPstickerSet MTP_stickerSet(MTPint _flags, const MTPlong &_id, const MTPlong &_access_hash, const MTPstring &_title, const MTPstring &_short_name, MTPint _count, MTPint _hash); }; typedef MTPBoxed MTPStickerSet; @@ -10916,10 +10916,12 @@ class MTPDdocumentAttributeAudio : public mtpDataImpl { @@ -10958,13 +10960,11 @@ class MTPDmessages_allStickers : public mtpDataImpl { public: MTPDmessages_allStickers() { } - MTPDmessages_allStickers(const MTPstring &_hash, const MTPVector &_packs, const MTPVector &_sets, const MTPVector &_documents) : vhash(_hash), vpacks(_packs), vsets(_sets), vdocuments(_documents) { + MTPDmessages_allStickers(const MTPstring &_hash, const MTPVector &_sets) : vhash(_hash), vsets(_sets) { } MTPstring vhash; - MTPVector vpacks; MTPVector vsets; - MTPVector vdocuments; }; class MTPDdisabledFeature : public mtpDataImpl { @@ -11229,13 +11229,16 @@ class MTPDstickerSet : public mtpDataImpl { public: MTPDstickerSet() { } - MTPDstickerSet(const MTPlong &_id, const MTPlong &_access_hash, const MTPstring &_title, const MTPstring &_short_name) : vid(_id), vaccess_hash(_access_hash), vtitle(_title), vshort_name(_short_name) { + MTPDstickerSet(MTPint _flags, const MTPlong &_id, const MTPlong &_access_hash, const MTPstring &_title, const MTPstring &_short_name, MTPint _count, MTPint _hash) : vflags(_flags), vid(_id), vaccess_hash(_access_hash), vtitle(_title), vshort_name(_short_name), vcount(_count), vhash(_hash) { } + MTPint vflags; MTPlong vid; MTPlong vaccess_hash; MTPstring vtitle; MTPstring vshort_name; + MTPint vcount; + MTPint vhash; }; class MTPDmessages_stickerSet : public mtpDataImpl { @@ -16920,26 +16923,29 @@ public: class MTPmessages_installStickerSet { // RPC method 'messages.installStickerSet' public: MTPInputStickerSet vstickerset; + MTPBool vdisabled; MTPmessages_installStickerSet() { } MTPmessages_installStickerSet(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_installStickerSet) { read(from, end, cons); } - MTPmessages_installStickerSet(const MTPInputStickerSet &_stickerset) : vstickerset(_stickerset) { + MTPmessages_installStickerSet(const MTPInputStickerSet &_stickerset, MTPBool _disabled) : vstickerset(_stickerset), vdisabled(_disabled) { } uint32 innerLength() const { - return vstickerset.innerLength(); + return vstickerset.innerLength() + vdisabled.innerLength(); } mtpTypeId type() const { return mtpc_messages_installStickerSet; } void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_installStickerSet) { vstickerset.read(from, end); + vdisabled.read(from, end); } void write(mtpBuffer &to) const { vstickerset.write(to); + vdisabled.write(to); } typedef MTPBool ResponseType; @@ -16952,7 +16958,7 @@ public: } MTPmessages_InstallStickerSet(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed(from, end, cons) { } - MTPmessages_InstallStickerSet(const MTPInputStickerSet &_stickerset) : MTPBoxed(MTPmessages_installStickerSet(_stickerset)) { + MTPmessages_InstallStickerSet(const MTPInputStickerSet &_stickerset, MTPBool _disabled) : MTPBoxed(MTPmessages_installStickerSet(_stickerset, _disabled)) { } }; @@ -24857,7 +24863,7 @@ inline uint32 MTPdocumentAttribute::innerLength() const { } case mtpc_documentAttributeAudio: { const MTPDdocumentAttributeAudio &v(c_documentAttributeAudio()); - return v.vduration.innerLength(); + return v.vduration.innerLength() + v.vtitle.innerLength() + v.vperformer.innerLength(); } case mtpc_documentAttributeFilename: { const MTPDdocumentAttributeFilename &v(c_documentAttributeFilename()); @@ -24897,6 +24903,8 @@ inline void MTPdocumentAttribute::read(const mtpPrime *&from, const mtpPrime *en if (!data) setData(new MTPDdocumentAttributeAudio()); MTPDdocumentAttributeAudio &v(_documentAttributeAudio()); v.vduration.read(from, end); + v.vtitle.read(from, end); + v.vperformer.read(from, end); } break; case mtpc_documentAttributeFilename: _type = cons; { if (!data) setData(new MTPDdocumentAttributeFilename()); @@ -24927,6 +24935,8 @@ inline void MTPdocumentAttribute::write(mtpBuffer &to) const { case mtpc_documentAttributeAudio: { const MTPDdocumentAttributeAudio &v(c_documentAttributeAudio()); v.vduration.write(to); + v.vtitle.write(to); + v.vperformer.write(to); } break; case mtpc_documentAttributeFilename: { const MTPDdocumentAttributeFilename &v(c_documentAttributeFilename()); @@ -24967,8 +24977,8 @@ inline MTPdocumentAttribute MTP_documentAttributeSticker(const MTPstring &_alt, inline MTPdocumentAttribute MTP_documentAttributeVideo(MTPint _duration, MTPint _w, MTPint _h) { return MTPdocumentAttribute(new MTPDdocumentAttributeVideo(_duration, _w, _h)); } -inline MTPdocumentAttribute MTP_documentAttributeAudio(MTPint _duration) { - return MTPdocumentAttribute(new MTPDdocumentAttributeAudio(_duration)); +inline MTPdocumentAttribute MTP_documentAttributeAudio(MTPint _duration, const MTPstring &_title, const MTPstring &_performer) { + return MTPdocumentAttribute(new MTPDdocumentAttributeAudio(_duration, _title, _performer)); } inline MTPdocumentAttribute MTP_documentAttributeFilename(const MTPstring &_file_name) { return MTPdocumentAttribute(new MTPDdocumentAttributeFilename(_file_name)); @@ -25058,7 +25068,7 @@ inline uint32 MTPmessages_allStickers::innerLength() const { switch (_type) { case mtpc_messages_allStickers: { const MTPDmessages_allStickers &v(c_messages_allStickers()); - return v.vhash.innerLength() + v.vpacks.innerLength() + v.vsets.innerLength() + v.vdocuments.innerLength(); + return v.vhash.innerLength() + v.vsets.innerLength(); } } return 0; @@ -25075,9 +25085,7 @@ inline void MTPmessages_allStickers::read(const mtpPrime *&from, const mtpPrime if (!data) setData(new MTPDmessages_allStickers()); MTPDmessages_allStickers &v(_messages_allStickers()); v.vhash.read(from, end); - v.vpacks.read(from, end); v.vsets.read(from, end); - v.vdocuments.read(from, end); } break; default: throw mtpErrorUnexpected(cons, "MTPmessages_allStickers"); } @@ -25087,9 +25095,7 @@ inline void MTPmessages_allStickers::write(mtpBuffer &to) const { case mtpc_messages_allStickers: { const MTPDmessages_allStickers &v(c_messages_allStickers()); v.vhash.write(to); - v.vpacks.write(to); v.vsets.write(to); - v.vdocuments.write(to); } break; } } @@ -25105,8 +25111,8 @@ inline MTPmessages_allStickers::MTPmessages_allStickers(MTPDmessages_allStickers inline MTPmessages_allStickers MTP_messages_allStickersNotModified() { return MTPmessages_allStickers(mtpc_messages_allStickersNotModified); } -inline MTPmessages_allStickers MTP_messages_allStickers(const MTPstring &_hash, const MTPVector &_packs, const MTPVector &_sets, const MTPVector &_documents) { - return MTPmessages_allStickers(new MTPDmessages_allStickers(_hash, _packs, _sets, _documents)); +inline MTPmessages_allStickers MTP_messages_allStickers(const MTPstring &_hash, const MTPVector &_sets) { + return MTPmessages_allStickers(new MTPDmessages_allStickers(_hash, _sets)); } inline MTPdisabledFeature::MTPdisabledFeature() : mtpDataOwner(new MTPDdisabledFeature()) { @@ -25777,7 +25783,7 @@ inline MTPstickerSet::MTPstickerSet() : mtpDataOwner(new MTPDstickerSet()) { inline uint32 MTPstickerSet::innerLength() const { const MTPDstickerSet &v(c_stickerSet()); - return v.vid.innerLength() + v.vaccess_hash.innerLength() + v.vtitle.innerLength() + v.vshort_name.innerLength(); + return v.vflags.innerLength() + v.vid.innerLength() + v.vaccess_hash.innerLength() + v.vtitle.innerLength() + v.vshort_name.innerLength() + v.vcount.innerLength() + v.vhash.innerLength(); } inline mtpTypeId MTPstickerSet::type() const { return mtpc_stickerSet; @@ -25787,22 +25793,28 @@ inline void MTPstickerSet::read(const mtpPrime *&from, const mtpPrime *end, mtpT if (!data) setData(new MTPDstickerSet()); MTPDstickerSet &v(_stickerSet()); + v.vflags.read(from, end); v.vid.read(from, end); v.vaccess_hash.read(from, end); v.vtitle.read(from, end); v.vshort_name.read(from, end); + v.vcount.read(from, end); + v.vhash.read(from, end); } inline void MTPstickerSet::write(mtpBuffer &to) const { const MTPDstickerSet &v(c_stickerSet()); + v.vflags.write(to); v.vid.write(to); v.vaccess_hash.write(to); v.vtitle.write(to); v.vshort_name.write(to); + v.vcount.write(to); + v.vhash.write(to); } inline MTPstickerSet::MTPstickerSet(MTPDstickerSet *_data) : mtpDataOwner(_data) { } -inline MTPstickerSet MTP_stickerSet(const MTPlong &_id, const MTPlong &_access_hash, const MTPstring &_title, const MTPstring &_short_name) { - return MTPstickerSet(new MTPDstickerSet(_id, _access_hash, _title, _short_name)); +inline MTPstickerSet MTP_stickerSet(MTPint _flags, const MTPlong &_id, const MTPlong &_access_hash, const MTPstring &_title, const MTPstring &_short_name, MTPint _count, MTPint _hash) { + return MTPstickerSet(new MTPDstickerSet(_flags, _id, _access_hash, _title, _short_name, _count, _hash)); } inline MTPmessages_stickerSet::MTPmessages_stickerSet() : mtpDataOwner(new MTPDmessages_stickerSet()) { diff --git a/Telegram/SourceFiles/mtproto/scheme.tl b/Telegram/SourceFiles/mtproto/scheme.tl index 793d6d595..4e4d27e91 100644 --- a/Telegram/SourceFiles/mtproto/scheme.tl +++ b/Telegram/SourceFiles/mtproto/scheme.tl @@ -524,7 +524,7 @@ documentAttributeImageSize#6c37c15c w:int h:int = DocumentAttribute; documentAttributeAnimated#11b58939 = DocumentAttribute; documentAttributeSticker#3a556302 alt:string stickerset:InputStickerSet = DocumentAttribute; documentAttributeVideo#5910cccb duration:int w:int h:int = DocumentAttribute; -documentAttributeAudio#51448e5 duration:int = DocumentAttribute; +documentAttributeAudio#ded218e0 duration:int title:string performer:string = DocumentAttribute; documentAttributeFilename#15590068 file_name:string = DocumentAttribute; messages.stickersNotModified#f1749a22 = messages.Stickers; @@ -533,7 +533,7 @@ messages.stickers#8a8ecd32 hash:string stickers:Vector = messages.Stic stickerPack#12b299d4 emoticon:string documents:Vector = StickerPack; messages.allStickersNotModified#e86602c3 = messages.AllStickers; -messages.allStickers#5ce352ec hash:string packs:Vector sets:Vector documents:Vector = messages.AllStickers; +messages.allStickers#d51dafdb hash:string sets:Vector = messages.AllStickers; disabledFeature#ae636f24 feature:string description:string = DisabledFeature; @@ -588,7 +588,7 @@ inputStickerSetEmpty#ffb62b95 = InputStickerSet; inputStickerSetID#9de7a269 id:long access_hash:long = InputStickerSet; inputStickerSetShortName#861cc8a0 short_name:string = InputStickerSet; -stickerSet#a7a43b17 id:long access_hash:long title:string short_name:string = StickerSet; +stickerSet#cd303b41 flags:# id:long access_hash:long title:string short_name:string count:int hash:int = StickerSet; messages.stickerSet#b60a24a6 set:StickerSet packs:Vector documents:Vector = messages.StickerSet; @@ -767,6 +767,6 @@ messages.exportChatInvite#7d885289 chat_id:int = ExportedChatInvite; messages.checkChatInvite#3eadb1bb hash:string = ChatInvite; messages.importChatInvite#6c50051c hash:string = Updates; messages.getStickerSet#2619a90e stickerset:InputStickerSet = messages.StickerSet; -messages.installStickerSet#efbbfae9 stickerset:InputStickerSet = Bool; +messages.installStickerSet#7b30c3a6 stickerset:InputStickerSet disabled:Bool = Bool; messages.uninstallStickerSet#f96e55de stickerset:InputStickerSet = Bool; messages.startBot#1b3e0ffc bot:InputUser chat_id:int random_id:long start_param:string = Updates; diff --git a/Telegram/SourceFiles/overviewwidget.cpp b/Telegram/SourceFiles/overviewwidget.cpp index bb16f908a..5b9400e57 100644 --- a/Telegram/SourceFiles/overviewwidget.cpp +++ b/Telegram/SourceFiles/overviewwidget.cpp @@ -40,7 +40,7 @@ OverviewInner::OverviewInner(OverviewWidget *overview, ScrollArea *scroll, const , _photosInRow(1) , _photosToAdd(0) , _selMode(false) - , _width(0) + , _width(st::wndMinWidth) , _height(0) , _minHeight(0) , _addToY(0) @@ -73,7 +73,6 @@ OverviewInner::OverviewInner(OverviewWidget *overview, ScrollArea *scroll, const setAttribute(Qt::WA_AcceptTouchEvents); connect(&_touchScrollTimer, SIGNAL(timeout()), this, SLOT(onTouchScrollTimer())); - mediaOverviewUpdated(); setMouseTracking(true); } @@ -367,12 +366,11 @@ void OverviewInner::dragActionStart(const QPoint &screenPos, Qt::MouseButton but _dragStartPos = mapMouseToItem(mapFromGlobal(screenPos), _dragItem, _dragItemIndex); _dragWasInactive = App::wnd()->inactivePress(); if (_dragWasInactive) App::wnd()->inactivePress(false); - bool textLink = textlnkDown() && !textlnkDown()->encoded().isEmpty(); - if (textLink) { + if (textlnkDown() && _selected.isEmpty()) { _dragAction = PrepareDrag; } else if (!_selected.isEmpty()) { if (_selected.cbegin().value() == FullItemSel) { - if (_selected.constFind(_dragItem) != _selected.cend() && App::hoveredItem()) { + if (_selected.constFind(_dragItem) != _selected.cend() && textlnkDown()) { _dragAction = PrepareDrag; // start items drag } else { _dragAction = PrepareSelect; // start items select @@ -382,23 +380,25 @@ void OverviewInner::dragActionStart(const QPoint &screenPos, Qt::MouseButton but if (_dragAction == NoDrag && _dragItem) { bool afterDragSymbol = false , uponSymbol = false; uint16 symbol = 0; - if (textlnkDown()) { - _dragSymbol = symbol; - uint32 selStatus = (_dragSymbol << 16) | _dragSymbol; - if (selStatus != FullItemSel && (_selected.isEmpty() || _selected.cbegin().value() != FullItemSel)) { - if (!_selected.isEmpty()) { - updateMsg(_selected.cbegin().key(), -1); - _selected.clear(); + if (!_dragWasInactive) { + if (textlnkDown()) { + _dragSymbol = symbol; + uint32 selStatus = (_dragSymbol << 16) | _dragSymbol; + if (selStatus != FullItemSel && (_selected.isEmpty() || _selected.cbegin().value() != FullItemSel)) { + if (!_selected.isEmpty()) { + updateMsg(_selected.cbegin().key(), -1); + _selected.clear(); + } + _selected.insert(_dragItem, selStatus); + _dragAction = Selecting; + updateMsg(_dragItem, _dragItemIndex); + _overview->updateTopBarSelection(); + } else { + _dragAction = PrepareSelect; } - _selected.insert(_dragItem, selStatus); - _dragAction = Selecting; - updateMsg(_dragItem, _dragItemIndex); - _overview->updateTopBarSelection(); } else { - _dragAction = PrepareSelect; + _dragAction = PrepareSelect; // start items select } - } else { - _dragAction = PrepareSelect; // start items select } } @@ -461,6 +461,11 @@ void OverviewInner::dragActionFinish(const QPoint &screenPos, Qt::MouseButton bu if (i != _selected.cend() && i.value() == FullItemSel) { _selected.erase(i); updateMsg(_dragItem, _dragItemIndex); + } else if (i == _selected.cend() && _dragItem > 0 && !_selected.isEmpty() && _selected.cbegin().value() == FullItemSel) { + if (_selected.size() < MaxSelectedItems) { + _selected.insert(_dragItem, FullItemSel); + updateMsg(_dragItem, _dragItemIndex); + } } else { _selected.clear(); parentWidget()->update(); @@ -481,6 +486,71 @@ void OverviewInner::dragActionFinish(const QPoint &screenPos, Qt::MouseButton bu _overview->updateTopBarSelection(); } +void OverviewInner::dragExec() { + bool uponSelected = false; + if (_dragItem) { + bool afterDragSymbol; + uint16 symbol; + if (!_selected.isEmpty() && _selected.cbegin().value() == FullItemSel) { + uponSelected = _selected.contains(_dragItem); + } else { + uponSelected = false; + } + } + QString sel; + QList urls; + bool forwardSelected = false; + if (uponSelected) { + forwardSelected = !_selected.isEmpty() && _selected.cbegin().value() == FullItemSel && cWideMode(); + } else if (textlnkDown()) { + sel = textlnkDown()->encoded(); + if (!sel.isEmpty() && sel.at(0) != '/' && sel.at(0) != '@' && sel.at(0) != '#') { + urls.push_back(QUrl::fromEncoded(sel.toUtf8())); + } + } + if (!sel.isEmpty() || forwardSelected) { + updateDragSelection(0, -1, 0, -1, false); + _overview->noSelectingScroll(); + + QDrag *drag = new QDrag(App::wnd()); + QMimeData *mimeData = new QMimeData; + + if (!sel.isEmpty()) mimeData->setText(sel); + if (!urls.isEmpty()) mimeData->setUrls(urls); + if (forwardSelected) { + mimeData->setData(qsl("application/x-td-forward-selected"), "1"); + } + drag->setMimeData(mimeData); + drag->exec(); + return; + } else { + HistoryItem *pressedLnkItem = App::pressedLinkItem(), *pressedItem = App::pressedItem(); + QLatin1String lnkType = (textlnkDown() && pressedLnkItem) ? textlnkDown()->type() : qstr(""); + bool lnkPhoto = (lnkType == qstr("PhotoLink")), + lnkVideo = (lnkType == qstr("VideoOpenLink")), + lnkAudio = (lnkType == qstr("AudioOpenLink")), + lnkDocument = (lnkType == qstr("DocumentOpenLink")); + if (lnkPhoto || lnkVideo || lnkAudio || lnkDocument) { + QDrag *drag = new QDrag(App::wnd()); + QMimeData *mimeData = new QMimeData; + + mimeData->setData(qsl("application/x-td-forward-pressed-link"), "1"); + if (lnkDocument) { + QString already = static_cast(textlnkDown().data())->document()->already(true); + if (!already.isEmpty()) { + QList urls; + urls.push_back(QUrl::fromLocalFile(already)); + mimeData->setUrls(urls); + } + } + + drag->setMimeData(mimeData); + drag->exec(Qt::CopyAction); + return; + } + } +} + void OverviewInner::touchScrollUpdated(const QPoint &screenPos) { _touchPos = screenPos; _overview->touchScroll(_touchPos - _touchPrevPos); @@ -866,6 +936,7 @@ void OverviewInner::onUpdateSelected() { if (_mousedItem != _dragItem || (m - _dragStartPos).manhattanLength() >= QApplication::startDragDistance()) { if (_dragAction == PrepareDrag) { _dragAction = Dragging; + dragExec(); } else if (_dragAction == PrepareSelect) { _dragAction = Selecting; } @@ -1021,7 +1092,7 @@ void OverviewInner::leaveEvent(QEvent *e) { void OverviewInner::resizeEvent(QResizeEvent *e) { _width = width(); - showAll(); + showAll(true); onUpdateSelected(); update(); } @@ -1304,7 +1375,7 @@ void OverviewInner::onTouchScrollTimer() { } } -void OverviewInner::mediaOverviewUpdated() { +void OverviewInner::mediaOverviewUpdated(bool fromResize) { int32 oldHeight = _height; if (_type != OverviewPhotos) { History::MediaOverview &o(_hist->_overview[_type]); @@ -1312,6 +1383,7 @@ void OverviewInner::mediaOverviewUpdated() { _items.reserve(2 * l); // day items int32 y = 0, in = 0; + int32 w = _width - st::msgMargin.left() - st::msgMargin.right(); bool allGood = true; QDate prevDate; for (int32 i = 0; i < l; ++i) { @@ -1319,14 +1391,36 @@ void OverviewInner::mediaOverviewUpdated() { if (allGood) { if (_items.size() > in && _items.at(in).msgid == msgid) { prevDate = _items.at(in).date; - y = _items.at(in).y; + if (fromResize) { + HistoryItem *item = App::histItemById(msgid); + HistoryMedia *media = item ? item->getMedia(true) : 0; + if (media) { + y += media->countHeight(item, w) + st::msgMargin.top() + st::msgMargin.bottom(); // item height + } + _items[in].y = y; + } else { + y = _items.at(in).y; + } ++in; continue; } if (_items.size() > in + 1 && !_items.at(in).msgid && _items.at(in + 1).msgid == msgid) { // day item + if (fromResize) { + y += st::msgServiceFont->height + st::msgServicePadding.top() + st::msgServicePadding.bottom() + st::msgServiceMargin.top() + st::msgServiceMargin.bottom(); // day item height + _items[in].y = y; + } ++in; prevDate = _items.at(in).date; - y = _items.at(in).y; + if (fromResize) { + HistoryItem *item = App::histItemById(msgid); + HistoryMedia *media = item ? item->getMedia(true) : 0; + if (media) { + y += media->countHeight(item, w) + st::msgMargin.top() + st::msgMargin.bottom(); // item height + } + _items[in].y = y; + } else { + y = _items.at(in).y; + } ++in; continue; } @@ -1353,7 +1447,6 @@ void OverviewInner::mediaOverviewUpdated() { } else { prevDate = date; } - int32 w = _width - st::msgMargin.left() - st::msgMargin.right(); media->initDimensions(item); y += media->countHeight(item, w) + st::msgMargin.top() + st::msgMargin.bottom(); // item height if (_items.size() > in) { @@ -1378,8 +1471,10 @@ void OverviewInner::mediaOverviewUpdated() { } if (_height != y) { _height = y; - _addToY = (_height < _minHeight) ? (_minHeight - _height) : 0; - resize(width(), _minHeight > _height ? _minHeight : _height); + if (!fromResize) { + _addToY = (_height < _minHeight) ? (_minHeight - _height) : 0; + resize(width(), _minHeight > _height ? _minHeight : _height); + } } } @@ -1388,9 +1483,11 @@ void OverviewInner::mediaOverviewUpdated() { fixItemIndex(_mousedItemIndex, _mousedItem); fixItemIndex(_dragItemIndex, _dragItem); - resizeEvent(0); - if (_height != oldHeight) { - _overview->scrollBy(_height - oldHeight); + if (!fromResize) { + resizeEvent(0); + if (_height != oldHeight) { + _overview->scrollBy(_height - oldHeight); + } } } @@ -1503,7 +1600,7 @@ void OverviewInner::msgUpdated(const HistoryItem *msg) { } } -void OverviewInner::showAll() { +void OverviewInner::showAll(bool recountHeights) { int32 newHeight = height(); if (_type == OverviewPhotos) { _photosInRow = int32(width() - st::overviewPhotoSkip) / int32(st::overviewPhotoMinSize + st::overviewPhotoSkip); @@ -1518,10 +1615,13 @@ void OverviewInner::showAll() { } int32 rows = ((_photosToAdd + count) / _photosInRow) + (((_photosToAdd + count) % _photosInRow) ? 1 : 0); newHeight = _height = (_vsize + st::overviewPhotoSkip) * rows + st::overviewPhotoSkip; - _addToY = (_height < _minHeight) ? (_minHeight - _height) : 0; } else { + if (recountHeights && _type == OverviewVideos) { // recount heights because of captions + mediaOverviewUpdated(true); + } newHeight = _height; } + _addToY = (_height < _minHeight) ? (_minHeight - _height) : 0; if (newHeight < _minHeight) { newHeight = _minHeight; } diff --git a/Telegram/SourceFiles/overviewwidget.h b/Telegram/SourceFiles/overviewwidget.h index 963844bbd..bad5d1dd4 100644 --- a/Telegram/SourceFiles/overviewwidget.h +++ b/Telegram/SourceFiles/overviewwidget.h @@ -44,6 +44,7 @@ public: void dragActionUpdate(const QPoint &screenPos); void dragActionFinish(const QPoint &screenPos, Qt::MouseButton button = Qt::LeftButton); void dragActionCancel(); + void dragExec(); void touchScrollUpdated(const QPoint &screenPos); QPoint mapMouseToItem(QPoint p, MsgId itemId, int32 itemIndex); @@ -57,7 +58,7 @@ public: void setSelectMode(bool enabled); - void mediaOverviewUpdated(); + void mediaOverviewUpdated(bool fromResize = false); void changingMsgId(HistoryItem *row, MsgId newId); void msgUpdated(const HistoryItem *msg); void itemRemoved(HistoryItem *item); @@ -107,7 +108,7 @@ private: void applyDragSelection(); QPixmap genPix(PhotoData *photo, int32 size); - void showAll(); + void showAll(bool recountHeights = false); OverviewWidget *_overview; ScrollArea *_scroll; diff --git a/Telegram/SourceFiles/settings.cpp b/Telegram/SourceFiles/settings.cpp index f9bc2de62..74814cbfa 100644 --- a/Telegram/SourceFiles/settings.cpp +++ b/Telegram/SourceFiles/settings.cpp @@ -99,8 +99,6 @@ EmojiColorVariants gEmojiVariants; QByteArray gStickersHash; -EmojiStickersMap gEmojiStickers; - RecentStickerPreload gRecentStickersPreload; RecentStickerPack gRecentStickers; StickerSets gStickerSets; diff --git a/Telegram/SourceFiles/settings.h b/Telegram/SourceFiles/settings.h index e6fc81913..39d789b4a 100644 --- a/Telegram/SourceFiles/settings.h +++ b/Telegram/SourceFiles/settings.h @@ -189,9 +189,6 @@ struct DocumentData; typedef QVector StickerPack; DeclareSetting(QByteArray, StickersHash); -typedef QMap EmojiStickersMap; -DeclareSetting(EmojiStickersMap, EmojiStickers); - typedef QList > RecentStickerPackOld; typedef QVector > RecentStickerPreload; typedef QVector > RecentStickerPack; @@ -202,12 +199,14 @@ RecentStickerPack &cGetRecentStickers(); DeclareSetting(uint64, LastStickersUpdate); -static const uint64 DefaultStickerSetId = 0, CustomStickerSetId = 0xFFFFFFFFFFFFFFFFLLU, RecentStickerSetId = 0xFFFFFFFFFFFFFFFELLU; +static const uint64 DefaultStickerSetId = 0; // for backward compatibility +static const uint64 CustomStickerSetId = 0xFFFFFFFFFFFFFFFFLLU, RecentStickerSetId = 0xFFFFFFFFFFFFFFFELLU; struct StickerSet { - StickerSet(uint64 id, uint64 access, const QString &title, const QString &shortName) : id(id), access(access), title(title), shortName(shortName) { + StickerSet(uint64 id, uint64 access, const QString &title, const QString &shortName, int32 count, int32 hash, int32 flags) : id(id), access(access), title(title), shortName(shortName), count(count), hash(hash), flags(flags) { } uint64 id, access; QString title, shortName; + int32 count, hash, flags; StickerPack stickers; }; typedef QMap StickerSets; diff --git a/Telegram/SourceFiles/structs.h b/Telegram/SourceFiles/structs.h index 2cea3aab2..8df51561e 100644 --- a/Telegram/SourceFiles/structs.h +++ b/Telegram/SourceFiles/structs.h @@ -466,11 +466,11 @@ struct StickerData { }; enum DocumentType { - FileDocument, - VideoDocument, - AudioDocument, - StickerDocument, - AnimatedDocument + FileDocument = 0, + VideoDocument = 1, + AudioDocument = 2, + StickerDocument = 3, + AnimatedDocument = 4, }; struct DocumentData { DocumentData(const DocumentId &id, const uint64 &access = 0, int32 date = 0, const QVector &attributes = QVector(), const QString &mime = QString(), const ImagePtr &thumb = ImagePtr(), int32 dc = 0, int32 size = 0); diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index 5ee755bee..d5e5a1859 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.33 + 0.8.34 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index ce540572a90fbd187d52b57c1dcd46d951588ab1..26abef2e61e5780b2813734e501b7fadcbc4292e 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_3 Date: Sun, 28 Jun 2015 16:15:07 +0300 Subject: [PATCH 019/121] fixed overview for 0.8.34.dev --- Telegram/SourceFiles/overviewwidget.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Telegram/SourceFiles/overviewwidget.cpp b/Telegram/SourceFiles/overviewwidget.cpp index 5b9400e57..239c1b8d7 100644 --- a/Telegram/SourceFiles/overviewwidget.cpp +++ b/Telegram/SourceFiles/overviewwidget.cpp @@ -65,6 +65,8 @@ OverviewInner::OverviewInner(OverviewWidget *overview, ScrollArea *scroll, const , _touchTime(0) , _menu(0) { + resize(_width, height()); + App::contextItem(0); _touchSelectTimer.setSingleShot(true); @@ -73,6 +75,7 @@ OverviewInner::OverviewInner(OverviewWidget *overview, ScrollArea *scroll, const setAttribute(Qt::WA_AcceptTouchEvents); connect(&_touchScrollTimer, SIGNAL(timeout()), this, SLOT(onTouchScrollTimer())); + mediaOverviewUpdated(); setMouseTracking(true); } From 9c91bc16770892ce4905c627198ad2f743abd6c8 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sun, 28 Jun 2015 16:16:25 +0300 Subject: [PATCH 020/121] QDrag exec moved to timeout for 0.8.34.dev --- Telegram/SourceFiles/historywidget.cpp | 7 +++++-- Telegram/SourceFiles/historywidget.h | 2 +- Telegram/SourceFiles/localstorage.cpp | 2 +- Telegram/SourceFiles/overviewwidget.cpp | 7 +++++-- Telegram/SourceFiles/overviewwidget.h | 3 ++- 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 755d5f286..50f1dca0d 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -491,7 +491,9 @@ void HistoryList::dragActionCancel() { historyWidget->noSelectingScroll(); } -void HistoryList::dragExec() { +void HistoryList::onDragExec() { + if (_dragAction != Dragging) return; + bool uponSelected = false; if (_dragItem) { bool afterDragSymbol; @@ -1168,6 +1170,7 @@ void HistoryList::leaveEvent(QEvent *e) { HistoryList::~HistoryList() { delete _menu; + _dragAction = NoDrag; } void HistoryList::adjustCurrent(int32 y) { @@ -1364,7 +1367,7 @@ void HistoryList::onUpdateSelected() { if (item != _dragItem || (m - _dragStartPos).manhattanLength() >= QApplication::startDragDistance()) { if (_dragAction == PrepareDrag) { _dragAction = Dragging; - dragExec(); + QTimer::singleShot(1, this, SLOT(onDragExec())); } else if (_dragAction == PrepareSelect) { _dragAction = Selecting; } diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index b14c50b82..e5204709c 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -59,7 +59,6 @@ public: void dragActionUpdate(const QPoint &screenPos); void dragActionFinish(const QPoint &screenPos, Qt::MouseButton button = Qt::LeftButton); void dragActionCancel(); - void dragExec(); void touchScrollUpdated(const QPoint &screenPos); QPoint mapMouseToItem(QPoint p, HistoryItem *item); @@ -107,6 +106,7 @@ public slots: void onMenuDestroy(QObject *obj); void onTouchSelect(); void onTouchScrollTimer(); + void onDragExec(); private: diff --git a/Telegram/SourceFiles/localstorage.cpp b/Telegram/SourceFiles/localstorage.cpp index 0426f2e1b..feafd3cc2 100644 --- a/Telegram/SourceFiles/localstorage.cpp +++ b/Telegram/SourceFiles/localstorage.cpp @@ -2458,7 +2458,7 @@ namespace Local { set.stickers.reserve(scnt); QMap read; - for (uint32 j = 0; j < scnt; ++j) { + for (int32 j = 0; j < scnt; ++j) { quint64 id, access; QString name, mime, alt; qint32 date, dc, size, width, height, type, typeOfSet; diff --git a/Telegram/SourceFiles/overviewwidget.cpp b/Telegram/SourceFiles/overviewwidget.cpp index 5b9400e57..2122ba6b5 100644 --- a/Telegram/SourceFiles/overviewwidget.cpp +++ b/Telegram/SourceFiles/overviewwidget.cpp @@ -486,7 +486,9 @@ void OverviewInner::dragActionFinish(const QPoint &screenPos, Qt::MouseButton bu _overview->updateTopBarSelection(); } -void OverviewInner::dragExec() { +void OverviewInner::onDragExec() { + if (_dragAction != Dragging) return; + bool uponSelected = false; if (_dragItem) { bool afterDragSymbol; @@ -936,7 +938,7 @@ void OverviewInner::onUpdateSelected() { if (_mousedItem != _dragItem || (m - _dragStartPos).manhattanLength() >= QApplication::startDragDistance()) { if (_dragAction == PrepareDrag) { _dragAction = Dragging; - dragExec(); + QTimer::singleShot(1, this, SLOT(onDragExec())); } else if (_dragAction == PrepareSelect) { _dragAction = Selecting; } @@ -1631,6 +1633,7 @@ void OverviewInner::showAll(bool recountHeights) { } OverviewInner::~OverviewInner() { + _dragAction = NoDrag; } OverviewWidget::OverviewWidget(QWidget *parent, const PeerData *peer, MediaOverviewType type) : QWidget(parent) diff --git a/Telegram/SourceFiles/overviewwidget.h b/Telegram/SourceFiles/overviewwidget.h index bad5d1dd4..f280f1ac8 100644 --- a/Telegram/SourceFiles/overviewwidget.h +++ b/Telegram/SourceFiles/overviewwidget.h @@ -44,7 +44,6 @@ public: void dragActionUpdate(const QPoint &screenPos); void dragActionFinish(const QPoint &screenPos, Qt::MouseButton button = Qt::LeftButton); void dragActionCancel(); - void dragExec(); void touchScrollUpdated(const QPoint &screenPos); QPoint mapMouseToItem(QPoint p, MsgId itemId, int32 itemIndex); @@ -89,6 +88,8 @@ public slots: void onTouchSelect(); void onTouchScrollTimer(); + void onDragExec(); + private: void fixItemIndex(int32 ¤t, MsgId msgId) const; From ef9aaf659c993ae3ed3f6b2044117ebc2c04e35e Mon Sep 17 00:00:00 2001 From: John Preston Date: Sun, 28 Jun 2015 18:41:13 +0300 Subject: [PATCH 021/121] fixed drag-n-drop in OS X for 0.8.34.dev version --- Telegram/SourceFiles/historywidget.cpp | 4 ++-- Telegram/SourceFiles/overviewwidget.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 50f1dca0d..4e4fe1813 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -524,7 +524,7 @@ void HistoryList::onDragExec() { } else if (textlnkDown()) { sel = textlnkDown()->encoded(); if (!sel.isEmpty() && sel.at(0) != '/' && sel.at(0) != '@' && sel.at(0) != '#') { - urls.push_back(QUrl::fromEncoded(sel.toUtf8())); +// urls.push_back(QUrl::fromEncoded(sel.toUtf8())); // Google Chrome crashes in Mac OS X O_o } } if (!sel.isEmpty()) { @@ -540,7 +540,7 @@ void HistoryList::onDragExec() { mimeData->setData(qsl("application/x-td-forward-selected"), "1"); } drag->setMimeData(mimeData); - drag->exec(); + drag->exec(Qt::CopyAction); return; } else { HistoryItem *pressedLnkItem = App::pressedLinkItem(), *pressedItem = App::pressedItem(); diff --git a/Telegram/SourceFiles/overviewwidget.cpp b/Telegram/SourceFiles/overviewwidget.cpp index 84ef1a164..e3801a826 100644 --- a/Telegram/SourceFiles/overviewwidget.cpp +++ b/Telegram/SourceFiles/overviewwidget.cpp @@ -510,7 +510,7 @@ void OverviewInner::onDragExec() { } else if (textlnkDown()) { sel = textlnkDown()->encoded(); if (!sel.isEmpty() && sel.at(0) != '/' && sel.at(0) != '@' && sel.at(0) != '#') { - urls.push_back(QUrl::fromEncoded(sel.toUtf8())); +// urls.push_back(QUrl::fromEncoded(sel.toUtf8())); // Google Chrome crashes in Mac OS X O_o } } if (!sel.isEmpty() || forwardSelected) { @@ -526,7 +526,7 @@ void OverviewInner::onDragExec() { mimeData->setData(qsl("application/x-td-forward-selected"), "1"); } drag->setMimeData(mimeData); - drag->exec(); + drag->exec(Qt::CopyAction); return; } else { HistoryItem *pressedLnkItem = App::pressedLinkItem(), *pressedItem = App::pressedItem(); From 9926357af5ce6ff92353ca9f2dc99a72427f9fea Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 29 Jun 2015 15:25:28 +0300 Subject: [PATCH 022/121] fixed one deadlock, langs change name -> username --- Telegram/Resources/lang.strings | 10 ++++---- Telegram/Resources/style.txt | 6 ++--- Telegram/SourceFiles/art/sprite.png | Bin 170995 -> 171747 bytes Telegram/SourceFiles/art/sprite_200x.png | Bin 225149 -> 226322 bytes Telegram/SourceFiles/history.cpp | 4 ++-- Telegram/SourceFiles/historywidget.cpp | 2 ++ .../SourceFiles/mtproto/mtpConnection.cpp | 22 +++++++++++------- 7 files changed, 26 insertions(+), 18 deletions(-) diff --git a/Telegram/Resources/lang.strings b/Telegram/Resources/lang.strings index 377de19c8..4f85b5cd7 100644 --- a/Telegram/Resources/lang.strings +++ b/Telegram/Resources/lang.strings @@ -166,11 +166,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_username_title" = "Change username"; "lng_username_about" = "You can choose a username on Telegram.\nIf you do, other people will be able to find\nyou by this username and contact you\nwithout knowing your phone number.\n\nYou can use a-z, 0-9 and underscores.\nMinimum length is 5 characters."; -"lng_username_invalid" = "This name is invalid."; -"lng_username_occupied" = "This name is already occupied."; -"lng_username_too_short" = "This name is too short."; -"lng_username_bad_symbols" = "This name has bad symbols."; -"lng_username_available" = "This name is available."; +"lng_username_invalid" = "This username is invalid."; +"lng_username_occupied" = "This username is already occupied."; +"lng_username_too_short" = "This username is too short."; +"lng_username_bad_symbols" = "This username has bad symbols."; +"lng_username_available" = "This username is available."; "lng_username_not_found" = "User @{user} not found."; "lng_settings_section_contact_info" = "Contact info"; diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index 49d06f8ea..89b40c441 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -961,9 +961,9 @@ btnSend: flatButton(btnDefFlat) { width: -32px; height: 46px; - textTop: 13px; - overTextTop: 13px; - downTextTop: 14px; + textTop: 12px; + overTextTop: 12px; + downTextTop: 13px; font: font(16px); overFont: font(16px); diff --git a/Telegram/SourceFiles/art/sprite.png b/Telegram/SourceFiles/art/sprite.png index 5219d61a8d52e0426d44316488250aa35e08f17a..3e973cd2a70328cdf7c79c04a7413a59dab7bdca 100644 GIT binary patch delta 51286 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 IyjkG?2OiMZi~s-t delta 50526 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 Gg8mOqsdI<` diff --git a/Telegram/SourceFiles/art/sprite_200x.png b/Telegram/SourceFiles/art/sprite_200x.png index 442d7e3d34307c8c2f08d218c450d1a187b632fe..97e9e24032a0eb97fd9f91c6921666719c6fc609 100644 GIT binary patch delta 104605 zcma&NbyQT}7e0K47KV~WO1c>aq*LhzX^BBvq+4Q!Mp9}dq*1z&lopUikP;A(ZUkwC z_xkz%*808gfA3neSaXNF?mcIpeV)CaXYcd(2VwFyVGRZrzPP@iu!JyN0w$6I#gh7e zU+Q5=v%*B}Y^-gCMER`j#Nd3wcA|oOVzzc7e8R#)B7%at?KKsHVFQI-Iec;xPb{g7_)z(4aUKTT#vmhR1yGpBs2j?On4HXB z{B^@3`iM}q-X%F}{U*5m2i=@&I@MKPD%R8)=s#Pz;a*Vt6abXrbXZ2ofy$f1mI&VaNoTobtxB+{QsJ zcFj|NXAHMctT3h?yhy7O61-g4d8MncKjz)f`8FCg(f5*OQ<{FtZ)Vk}AW&dJnG}lj z!00jscmO&=FZp9HZZa(7|DLP-4Rb=9G}Z|tJ%Jry(6K;r71ZKy+8G8%y*~|QdK`vL zK*JRN+d!$+?l`dwF;`@>qhyZv|W#XlSm;dtn!~ zybmspdx_UpqZoYxBtx0>hw45VlJ{NUK&fjI)X+?L$WW&JN%Af~ASnMY?%69~9>Bpg z##|8s1~9p)54IQzpML4&kRwZ1CUd|$Rl)o<#G~fF12N9gA^_rmp|n}H^d|@^1cOx` z-e#lUx9)!JeTJQjC`{wVmnP-W(b4gA18f07EGt(kK$w@rQr<_W*|F>W`tg1~vu2$l z7IhLNXjPORM}SIc4em212<4`oSrEXBbIdhT`1HyWhBy5hV}fY&;gBA{%7d&9^|uN6 z5Tj5cFOISX#(+8EJd(|aV`GpxOavqFnn?9cu8yv5ZrMYsMmIXqSBuT=#gzPJm&|E! z(8{EnFaQUV4ls#)IqiW^mwo9E0MOk?W#U3rSl|<0)E-5K13nX(9Bw)b`7INz+_Meu z*z6;1j5!E`Y9uM49T4fIqj(sKnl3j=+z>mo%Uuc)bD4~x;F;0&EIrPvYc1me6lj@m zizbl)p;-70{2dO~jN;RBpHNT&x!+6xc$HwiVCW+Nv=9 zSjL#{jq_*U69`{rc3lJYB4G(w)dkHvHm-MMq+GOqIIErI^Ea6bT?KGxx{7}P%z zlRF@Miq-2W0ole_Axd9pz(xi{ND+3yHn7vP3@S0+5FZf8&AT- z&y>+?64+10f16JTJuH>q&HR1l%bWZ5<35G!fAa`u*d$HIi5h%QPPjtxUQ3dm`=ebx zUSvQ6#xcf-W=tdICB~+YfBt2IEKOGsK-sluzh(s7;k;2R4mmPzf91{CZgFRwx6wl( zmasQkw=b|9bYaepq;Fa2HRP{g3uC4UpCMKJ^<}5Wv#H{C{HbESMYBDcGum3}2bw7% z%Qdu1FI~BYSwGY&y_6R@j5E4TE;YVqYZ6Sesgko?tAOK| zGme3ZjxK3Rt9CiDX_0%c&EsLkM?*fy#Op^Z{>#=T$}0VXqiSgwFoJ(SlqAg$>q0fB~{%hlhVatbG;w~#! z5u^esbYPM2^yv)?@B`1YrKTTPF$M0zTB-*<0MVzlB}x;Dn8s*l?I=D!H+HI-WceiM zwqx zA?rOXtq?ylISA@bj|PWQo`llC$jH)nud?aG+0N9~%rn>av;6=5$OK*6fIo43wSg~j z$1oGhKTvAs`9IbfPF{6k4O3z;itR*K6Ug_P6gc|X`B_%-z|kto=>C-8~3^* zLAgRcAqhc52uFVYS-~0e;%;k$Qhjr@kY*yF( zl2VtP*ucQxtcHV%fRfjt2GJeLlc{)igj`0p4BE76k%T|y?w;s-(4yn{0Bco!(2eqc z&u6CDY#DmKz3Z+Pr)S7@SV8VW8n*zEf--7wKK?d{IkZOrF!uJI2Zmd-s&WfvX!t^D zg}0kG>i_)tql6Q-N{_Y;sO4S217@ns1F*Ux)!*`K(uuq@eh4i3EI79rRUnPsMNw%l zE+D!DF=l>Ig&bcKzMoG860FLXjD8!fLGe@B`bxdh0VQB2PU;4vV!E zkfJ_oolZV7t+pYOyUtv5Mh85z%0bKI#5|E!&9 zKsWGcOU%V9Fz`=~LAl`)((Wn{ym5~@@+wp<83fQM5SJEIlvD;IRB6|e&E`z_b#|tx z$9sB%v8~1)0qiZUZY9dF0*DkQ0zaE7^QUb($3XyOQ`H<#fCOuGzd!!La{VXEk1wX3 z=>|qi_Xbk7u53U@sy6+&i!-dT_?F*1la7&5Hgn5ASCh_v3ORBC4?%8*xt)hEFDDUL zzE5O|MyV)OmP9D>f66{vcyM^@s3VJB#T^|r{S!Tqc9Df1`yVD)L*@Lm3W_OxyZ+?) zMbu+I5fA+(0NkkZ3#;RgtnuFA2n?7K`GWI$vHPu52}qanugh6$CN}ej51f7iza{b= zrLjLn4wow23uOvqp`sh$-}IA`^7xx4#Wxi39h@|wRe}Y{k6#sfXzy9U$FMa=n6FYx z>{v+NiUiPxa3Q{;1CnAsgSK8oTy@%y=LCr*I34b`(hb-K-~GKfaBVwiTpCjD#GpPb zZ!l%XM04Dt@leI2_dc@Vy(ms(3Wa>M+eOYy2GTduxAOT(tToZrKxLzCN$&x4B#tyPb~vXcVZ3@GmM=E)_Eiv!b>hCBsC=pUT00 z?mG`t8Rr}?C;_}jPA(cm%$R@eks`hCbU#>||HC{i(lG}sVXgoVtJj8p@U^Bg-f%Ih z;eq%-FA}jFMrVW91B(?K*6)x8KccGI_&irfmtD_H*p`QXJEn^P+7lFI5{a0`xOty{ zyv--+ZYJnjW~F-A#{&3ZZfhv6((S39*qF%d9bV7u!Jtp9L&>m6Q@^oMZ4RBJ6{=rJ zC)bkvTuekK*2j}C)>|DfwsIe_1XF)g9^Vy_cm_IjSj)X+Lw`Iu=~m=p{bGiZ(W3oX z%}^;%M!+vF!Cl3JaD;_I3UbPu9F7UDDFH$NahTYBdT2faLdaePR<8j4A-y6#@0=12 z&e-j5ZvbU+f%N7BLq922zH>`W5_D7%Zk#}G)vi+crLU}`(pb7J&elX4i27%l7&8a& z!*?HG+Slrrk;s?8DL~ism)V$wS`+xA;z4=>i&5Bwtdxk+k>BtArf_r(f?_#m%rmoF zUCO?rN{%gS6SQ3;2Ocx)MvoF)>Ddn_w&Yb6TFT(s>u6rp)9io4a5UxzR^-cMFUg5E z@xD@ES!1pF0G7Rr9}@70l`yw45acL&eL5ppU^g-pn=Fd(fgu*4ROtRrt9Zd-$!mxq zl!@HXz+gJgyTfZ|QUuz&xIZ4gpoITYw&{)RZa!7&Mpd~J7?%@uaFOwk6@=2Fs?Fw9 zA~%_73RD9xva-;lCl3F@cAGG!8;?1gOfm7u6cOFWTi6^kwRVrx1JOan%de14_NPIm zNY0lz_m2ZLKs*{oUo$K~+&qeYpgDIUMJ7B7=xZU(0YO!D7Je6*0ZuYa)*Z=lb zS6A1Pl8UMtufW3&vgoO}#2O8k`-|kmqwL}a?r=}dIKtl}jL&O9RIEIhtzN#M90W1L zV|K5q?NAVe@ouT2ce?0}$~xZay@jSD`~pV_6Vi8LqQa!!Gc7F* z2XL4yQnhk)bcC@X0aPMDj+=t`3>f3A*pY;1TmUw2+-B}W6Sl6zc?>I>twGd&0LW!5 z-I#A|yaAK)PKGS}OM>4uf2nv*+T0y;Yp9Hx7*Bo#p{q3znrFl7tlgf?|Tt`+ZV z?VSV?J?OngtWzn03=Q_N6C?@xY6U?W=atTJ?4UJ^ytj&KL*%4a%K{-Wm@EDk#4Fhr z?XRRiy*k^~E-NpmGP$S+MzUK93knV~j;Y5_2}{0#G&Y*#=Zp75H2T|K5~X!@@bqD6 zbFP~pQ_47Ky5#T4BFk{0+xPEymH_Hfu@N`A*_gFvUyy!DI?YsYSyS7|0$=JDEs{t= znR<|Pw3@Max}hG;-U(|j29-$O{*{r-YTuJgHY0JFgmmTReeK)tISqskxMzUC4*m){ z;X|z&qM?V+1|#YAZL1%3Z(|`I3}UZB4t5qF{u^7(2f>jPL0phEEc})I;!r?`sd-Nc z2NjR^W4`Zo*AzyV9q_d~6CzI%TAP7~`txM_fP)Cf*;Y`@i?`0h?k>Syu?K3sH1H_ctj%HU z;Cfy=swRhS4n{EH*@B)m{*_A^9Jd21p*zzp((1*v`L5T4lnuV%-ZN{lZ3;8PD6ct4QeUB z<6w#Df3m_OH+=!`kZTyRIb&+Wi|O6^-YDV$47p)6pE@zU#BT%%W4}zup<-R+dg$@P zUf><>u^)`B)v^;A{0y-9y2|qJ8E+lwANyN{O8un?A&(P){4UxHITlQW%n`3V;l^kF zcKlN{*A+=a6G@c7n8=tWDi6Rewg^q3I8R3JB(nMEwn`isN@S?VAtQRkyB6Ek%f@JW6avT7fU#F~J1xr2|_rxp$BFwFIszEUwS z7g9m~+Fv5aXTrN5haylS(QYvE}fBy=o@%#0>x-ly|o6uJB0@x-%X!!Uv4wLaEWXa?b5y^*h1yTLh zP-^8H4 zhZy_W7aLXHd=P+OXuOdDEW!60$I2$#0=EQtvLj(^MVQn8D3)vlYpJ)?Eko2KGP!oH ztCO`tb+SREc)^W< z@F?!W6wnTqac@RCi!)-@cr5Pp{m8^3;YuxN?lGeb_m# zhuQl@USxV<_STvM>`6%@r{rIF@qw!XUbO`+`p)Cw-;y8Rz7S{R(0Zq$qOShT8lHjP z^O6`<0F2S24T0?HlU&+wr%YRWDcUW-0N@kEN1XzA6(Xl1Cpd|F{^-AY(rg3Ss3FSm?}7L?yb}=E-o(B@oHD73kS+!phAGE`cw0YlNUHE?4V2+xM%(K zQi~KiW(rTelTL#^Ye6wnUC~Mypn>L_)7QQ636z(CKaZEzK8!O0hqbv}C)#0v15HMo9Kr?>6M$>7lVNbt zoOAE67dkGAif$oS2R%&Ho8Ia(MHf=fj20j(lvDBbxC6PU2_c_Uy^SBQ@#=9;S@nMZ z=oD}&)tPQPk7b13604F%rM0xQ90i{Ya*z?=<0~+72x4}1h9J4wwH&Zk?xic2-cX`; zdv9#*?VmAI)*B>4l|2OEl9B--N?K{1khn&4toziKD25vkK+}~8F0gE+{(kv@CNdW( zi{b-JZa7=Ni5>cY78!Dscu-Ii-V{0IJ&bT z(D^&z6u+ZBKd(n|DIPGW$cI$G63rJTPTU@rp(ZFjRKtR(!bFeo2!bzHqZa&f?!Fqd z)R4v(Gx)D32?V|Sd=BJzJ>jpoqCyFFs2ThCoYMh?FM~hxCa-Gc#@+0HiO3Ud0Z?yc zbH)DD8ARO501Ln$VmSts^S{Nny1E73Ar_)>u4~H9v(Qvz8=j0rOR-5Wr2aOU^q}b) zHf_75neJ+K5I*#k)M8h zsx2NE(^I$q1>6v-GHTChQMDxjRqvv7d^^KcEPpt zuUYjha?srjbMFWwcs#0;h8t|A=1xgcDYr;j~IQ$h0G7xKj(G=;W0npf4h&PMgI9nx-7 z30P=f`e0Fg!FgXmb@J%o`^OvW(acA`WbgiX1|I!rM-oifdJR&Al2-pg-B-|=?tCI0 z24W*7+IH>J647woQ%mIEGea4bpG&|u>QdW0O+{m#WKv%6by<9xh5eej<2~-eD9G_7 zIDeY1MSc7(JI12-rm6&(D{Nv&7q#QMWDCxn<%)=&{fYc13v^uv{%Hc0@`1l%^3vb--#xl{C*KGwfPFve!4qoTINl{Ow8i&hiM#~Gf2Ps(-LrT z_zF#I3RVGHt$HKn2phaioxwbD1yWXiUw&vrXOw!l?!~x;%sO(ABUj(k?DB!WmZd!) zL$9((IM~d%*@1Ds{} z3a(J#WSaL;>t5B}y-+u!_(!LKonXNPI{9-Dl$GC?SN!B1f|D$;vc31^1Yx;0R-A!2 z(M*a+B-wGVo_(SLqYA_=_9w zS@R};FsXZ_JJ#sDfIeLA?8HP>LAX;=UJ&#{%L?zyLvazNCAKfNC-UF%4wsD)bk)7I zF*VIJ4Wc&&oDIeriMk#Ib6VIZuj=sU9fZJ;+)lF>Ota>U6=y;3ha9awsi@1ne*M}% z#CD!qk>BUv(v7#(-h}J1?`9?sp5SBn(ReL2I6l32;QFa{?xZ{Ok<(9HDD|os3Ud%<_w~oHxe5p-^2=b zYZ!|KQ%`_{?c3~vjmZxuhIajlK4eGHUmEeX|W+ur0DB-^69?pn+ z74Nwb2(ieUtF2t8^#afz*+7&qVjr$s!Zf4Ao&NLCFKYLLLNxMCxjx1djBKshFH7EZ z@vLWuZAYfE^oCBiZ~Ta7+=Y|B6&v2&)E8#i%0L(V;Rt1Z%Bw5#OM*>~08n>a@K~m* zoHTx~->;a?Q7&O;j*D4CC#Rl%Gc;E?vWxs^<3o(xYS(|yZ@4#Am z;oE*X&YBXpuUmXxR#p~FH$Vuo&qTk6R2`+{0{>rm$>e|XlELKvRhI&6e++xwB&h>q zy-{I-&2mv7X|6|N;u0+$FZnLB8MCs0>B172@QTYtgpiEv)58#5;~--!b-l_1)xEw4 zqAvT8JayC&?iPf+l#RL&kz??d>2XLKINL8_(HM1ACc& zztj9nw6Ir*fPeggVe>-`@xpChT$Y7XRX0^&(jgK|MFjM#w2h{2`B1KVDox`Elg1!T z^Lh1$H4FwZR_W(f?o^Zy{g|mFvRwp+>yp@0xb%vr;=jh3iIr9?*IU&y^NcF)349Z?d zzS^toD>tg{VDL^n-}3F&DJ1SU26prr*&fHWLA(ee;sSs5Q6UG|RJrv6+LBohbR3^5 z0z*M>&d7rKcLNYPaS8R$%;Cx+hrc{C`EL+e6sazq)n{XME5AjLh_#gvotX-aN2`&O3} zwY7rCNl&fCEl}w;{mK8-r3KW$UND@DW(XDEwqN{cqxAMtYnn3KU5O@T2~L+q2FII0 zY2ZZ;eK8a!$DVg^qv2&xxOXm*?!GS{e&1KVoyY{Dm|Uc-|M%D1jp`qMYw`CfL|f!H zcwHlr*S+s&*r@8QkPRiev~Qry0Cjvnz2R(Z6ASNoi)gGn1z-;mb%;_$|PFyUGg^i`V-j~>l%9f9xPgN<}6I{hZO03mpy>92- z9ajJ4z*9}-gf&o?H8M1;nl!aoKD_a1;TBo9AR1Mc~6l0b+YSlT%@$0f4}{H16)l73D2 z%`rfhF?f5W-S5}Wn|EI#u%nR4wV-&A95=D~WLQ>eyz_2UblJtY0LmXZX}}!RTXs)H$-=@SR1q$g zP=Da73w!ac#MHwboQIidv)gKA&6KJcCLLyt5n;Dq%9s^1G#bYZX~}6*1iE{%g6^j$ z<_r%4;EiXA=_W?4Y;ux!3JiwpLy*mB%=al>76V6Af{HjVMOvAfc7{P~& zE!tS}V%Pxhut+@`n~G;pz@2WE3`Q)u=wqMKe0#3?X$n=YziU)#Y<3Q_U+LVQB|dM)qZ4QqKqlK>g1D9CKaH|-E160 ziMuOs5x$8(UMkKFro8~O%Uh%3srKjIgquVUL|#UrhYzoi?f$h5%`n_LTuk0CVmhW~ z>8F1>e|##j%dB8s6G|EUU7}SSkU4fzvm)ttQ8QGW{HycsZ*}KK8!;BV^`9{x26OQH zpLiYKw?ck?1l&?^XY7EI_8}REmKUYsFK?p)nq<~WIBk43sAgQ|=O+8%Z~ChkHeX`a zDx2JL$bRYj%P@ouj=#sLn!2092f00?aV11s)NFrDWI%KPQz5DiWR&Ky;zbHXa z(gzUNVV%nbzIY;y8 zg+2|6s`Kyp!eVoCvkdR>xi$5Nl#Kurv^He!xiBqN`*9D!4d!oQ8yeIj*u_OFj+}KC zV`3rDh#|I>h{ffRWUtJB=&lPkQDBxxuQe&c-(+V?M;%IqD57m)(6uw44)EDup}m1) z?sNnIxX@DL^)Y@@{qBp_uaNBwU`^P&nNXKp_RnUPD?6yV=s?jY&%|ElyFaAlPj7zt zb0~83en36%EH*R+kA`o=Fa+bviK6QLrfeA>_uhZ9)1-;=B}yFD)M)i6v*S0h%;k!R zE_vtOdW!bGR-U-sNP0nrko`Gss*`e-3b6S-c>6WND{>n8Uco^P8NmdhDpxS8xKCPb zKOxA4G5Xw}mD<>iH%u=jeC<7kNKR?^2+V=9Jd7!#!S=Ua71hI3xc64JFB}PN+0o^`=sY$)%(ruv& zD3%v^{g_^3kql5w6}XN*TS1MU0{M8JXEKC7xj?YNfVaw(`rgbKS^H69s@2I6Rc-ZL zw8*bl>5q-z&%uiQ3Z}%fp5zYhp$MVD=ILEYW;s8yz8WM46FIRc%6|I5|(8#r@_P5|eP;nzRn1?FJ z#2$LS=Wb3@4mB^AWNVrpC3cU-7f$%jtM2o|^G$deheqEYvUlS>J2VQ;i{ugg761}g zDqf3EbLH`1#x}0oXq6Nvu5zwutByK$UNKFV!%u^DY z3kZ;bciZQy_1#%yjq9gCk(VD#z72rt7?ON57k)3Hb&c zS^fHNnTa_=TF$x&yv|F8Zq(*M`v?L`PyKPIlA+{=F`T88q?OhaeDkOz=iOCH&4LLr z!{Xfz3D(`D3ty8GsvYC|Q0C}u90bApg(hC(8id#&HfagSzXxq-i)Z&bk8Q*&-!DY* zVowlnqVd8nUPh!0LYGM6WMJAg$_~^@j+ovZdY|9FAl0P{(^AEOI-4_^C$qRYn--0q zj}9~YsazI6G*t1R7_pie_G%=>f&gIMC##^aP#bJNNnH0o9dB7g8z3f-F}P4;W4EAo=7O^{(nXSo;@ zlnOZI(P>x_B26ITkc3BoiYL8*fIuf$jM`wO!WxXQoARXXdgdkKKl)6~WahObY1~8o z58spVm6BpkDKHdNm5Nz051q*p54lL2+x>-qze6Io&|HtyNNmLEVvytwlCEII1drGL=~j8Jp!he8>%%XYw!~Tf$$ld|n74RhV0LErn~pF$>Q$Gxj5p z<3R!k+fdKgb~hG`&tk7aCxcxot(+M{{nG`Q0k=5+&3#V_j3LeYRWY;quJsN!><=bn zrD;`@LKr_fj_*9T;gg6dTDLi_BO!`n!|akD&RSy0(p6*&PqOt;<;xvDPe_z>Jo5>v zJULM&D4sCcleF;nDp}Zg1{T*7*P7)evXO^Lh-3oGBFV0c1#+N1wKLpvtXFDc%HPPy z?W5gy^w3Oa4OEBgi`cV=1>ZOeY^CX4v=bjEe#3)0(Z?zYe&2QNT=nDP*M|^_%i$Ar zcJa-G%9AJ{`UV>Hp8H$A zj(=4r+ESP-WW_UGS(T0M>4(&5e_uln0~n6p)wMErnIcW!^nH9DY~h$qcc&B;FI5qQ z@t$!*%&e2hfoyK+J!@^W?T(R*m4qq$*R`=Yba#nJUD- zlFHfBW8}dR`CI@Y{1w=wpgG)kPNrz=UIdL_VsJQquoJ6otAYRK4}w>=CwtO3`0n?+J? z{k4uE@kZ!5OsbGUf}N(Tw)>Pt6lqDS#zrKe6iF=;C5X}W2oNc6Uj;Qy?6mi_ys=u@ z67$kl7e~vC`u>hnAL5q+>BQWaN=}lJl1N29+I(cb&q^6yZPM(PkB3-XZ1L3kl1ON;8P1r^06KACM#e>?T>^=w(M1e!kwrOh8`C z1m@vb@-X0wo4#swS=nyk)J_K(*6Kp*KbjF1y#(}QrbF_O^69xB?5z^a=uYfds_<|O z3ObH5K83xrT? ztHBBC$qG~w`Qj~1{!F2&VE+HWsy)t|t-YwIC{3&QS$|yx1FH8Q7iL-~8DU{-k39}* z?x5R zu?@M`w5dz^YHD7KfewG)i6XzOgjs0P1$nb3blL?;IJFZ?44>_8mtqZj3wJL!*{48aRf_AReI zQS*=wud~4mJ+5+QTbllF!u@zF2Ea3luhB%mp4OU?#!|d+`Idn&Q*QzWjFnJGiDwUg z>ZL_f=XCSMvwSVrWqtKtu^=Gq%bT&g)-bA?U++jOA53E^JfzbOp#~};`$gp;c$9YI zIoYMNdw2S`M`dW6k<3Tsc5PtIW_Oq1U)SPeV|ZL0@6ortGsb}We^h?GLMM2cqxX-T zAo)BFf*bX;Y&I!75J_l$+lZ94+3bu+V?H+%F36jUJ{)}Y$=jS6z5IhD*3~tnI7J42cl(7YIoux&#-MDnO4v$mahgqQENUEjx& z2S3TSG$I0T&jn(hXA4OFT&MJ6kIJzD`wpVs8BCg+|I?d2v><*+yskZ1Vg)&OD!2cu zFH{~7u|$Neyo_ezb zf4NJl=%CWgx#tBR6U3O{-_e3UwNLD^Q)pfEx&b67l?@#qMa^9@DUP91Cwo%*S+#z} zgGp*eyZ6j(-Y<=Zv4N5K0MZq2#Ci>5!Ef%?t^3{VG)jfF44Jhb$rC_NQbk6jU2?*@x=&ls$(b;5T=8KP{oVc+8%h|ET3yWI%n}+dydP{IElJ$>RkszA*B{KZ0^O_3({&D-H6u05Ht`(pO2)}>M6silC zdTpZvCN6jdly8AR!WDkt0`n5T>oric7G8IBlhzPO&)EX(CLo0G*|q?fblif>Y{`92 z()ZofQ#id;U*`>f#@;+?!)mu6{=!TV>Hp!z4rtWTCF$m*IaGjS@KKF1QzTp?xtkY? zdvuGsbQ$jrOUa>C!kj;MFGWYQdFUD%;s7O8RaGC&Lz#q!EjG?_^g!t;j|DZRgIp;( z1sZ#$QV%}>s`1L9NtAV=-9SKWTywdt@CVD>IQCld_iky)C*1p=So7pTv%Z#~>sd^N zy^iTl+e_Hw#6K${3IU(BeegkaPrt zRwH$nB2b(*`*6dcXk#QQ8?kMSBgwCC?e>a%^Q=&HXvucxmYG~1IM}OSm657^^iXuT z*rHn5%#047fWTnEPAmbnwxh91`R9>!v(RA8A4blWns~bAo7s7B_Gr*gnm%@$U{pfJKU>_m!keC0)|WlAz1v*<~3x ziY%)`I%!c3`<@-d%{^QgRaf?qQ!^v0H4Jq%)N!Wf|6uQaT)2+Z{1}?x($x_EC-j^A zy!m;qK;H}jyRb_-U{cW7Wf(rva4-YrvV^q4UGLSAZ(rmT-CyOR2}vd}Vj*uVd?cPJ z+cO_{zj04eJ<%Df_kN3trsf%UXX64JUXOF_HvXwjT~qhfJJ%Tn;ESGx>*nUzB}12! zxHws;6Ku)g5w=0rl3?<`R?A%?kS3pV+hQ7x&`4S z7hwG#n$Jm9$6J_}hguJ1WnuD=C$YkrEmTf?7|PU;Z0j$JT3TpymMlv9Ob8x-x&ft* zs2bh{HS)f{)6>&!Yd?PyIaZRSMfV{QE>&xMQYcAaF)2&Z8iL}$r1GQGoCarW?FPd=CFU&4W4N31t@BeTm%V4`upUF8%fm^#g2^f(|Ml{*^b$1ggny z>t9ICIs!8i_(?AVn!>(>w4LfSOH4HupCbHd-4PC0;Wg|+LZ>2VTT5UfW$UgK?S1qk z=qsA<*O5@S z+&!dfdC(=3E~)vJCs(m|k#FS%a6n%n3hisgFKu#NJGL-G8!1o8_a-FcaaT= zRMLFdU$AZ|*^`f9RrQwnTys&^W0bsFXC_uo9buC-(f?J-kiN2O#9YzK-ZP1j*z)sv ztP-;5v)-0pr3DX8Sis*ARen69jpyG=be}25(|(-JOkdL8%*ge$6LP zRM#;u*zmyWB_;1>lIq$KTLGJtiEhNa_GX;@5*eg@AjV%#|7?L)4*;*w^6xuBz-}&0 zOIzFby}!ZZG{i?=3kUeyEjo3Ir-B&hk@W3L;J$cPg9w@386M3Ryw`;(!gvSC3(y)1 zC;lcOH`Lh5v(UH+VI!1DBG?Pa=1H~+`<}dtHWMR@d-GD6br7D(Mt!{af#C9#+~9+m z)o=?p3@p-FeEUVh{YEk|F>zqp$TEI?-6omfu{VfL7fm)K3StO&hL6}ykhnkc#3m!` zh#3+HoQ_P)K!-*~=*pF@vE=7g70UWFvqa`Km%$?)EGFo`DBF3{9gsqX;Se+I8(e#M z+M5xq7-S{RVp6|L5wdFgKA<|kiLhmy`BYZa$JbI)epOtlVa$;C?aWQF!BY0AI(!iw zTSE?|kqgbi_M^Y%lZ-gJ<3|=rn$f2k8iLLV7uJf-A3WQYsl<5v@+I%&)KoVNN(&ZU z_2K)2it_Rh@C=h;wuhC~@9nRU*EV8%r-+5Eo&}Z24evf;_F*{hF#J_}&ey#&4Gj$_ z85vnGD;t}js;a66xa-sHMl%Ir%8&M5kzxT%%*;RSIAYz*TfJ(LZ5m2SN*Kd+KCai$ zUN1eCAh7Z=_PdsM7>o~JtgiiXjHH9qmZR?SeV*Q~0Sv!4V0A-{1Kc-tU6_}-JbwlE z<1Mx-?xia7?%#_b2+fbQ@nfYL!z$#q$)#3-XZE`xprq6tn^He6H^hK4sRe8EZnpha z2Zg_QIrxPMPq~pglKcV!%8H7Lqc^Rry-8-NX!Im0Yl|B46wek*p3}WCj#bqs zi;G^&t!tG`FVaf?b;WR<+0Vxe`yX7vLy6wf-Dm7UWC#YmnasBy9_(~pPxSh?Hpkw0 zdfMxQ@rn8<(uN%H8{AwgPZRb(TlvgP>#Z8T@i68==qfVa#*dduZi&8S_(`i0=a2*4 z=xSX)gT-Y%xoox+O1bKF@0)W+uYvlXO+sla%*>95v8{qQF9woXSHWf>hv_m3P-Ajp z#RR}i1Kd3Z8$G6Q(AM64Hi0h)t@d8_y9`?nCzfqg+cLzkYi9ZdnUjWF21~{Dd(U`U z&WTeY6OZOF z){mKmn!n3GZX{THryss-PbSDa#8Xl&u|&>+Q8zPfqSi|KWot$6@${D4a$T5l^B$D5 z0FtV&Z{;t~Ma!Y^^prCmKk}nZ>f5_hjV_5~FlPZ-K8SE7%>O&}7J8fjb^{%W(8ga# zUR#j&3A!CO$cl)d>p7@^E||vCN0U@!WKZp{ha z6va=JQfvYPXsH`_d0ldmB%Y1AI7P?VLe_^>r*lZvyiMJ)QampVI#nf8Q(8D2j_}7& z^pN++k2Je{24Bp^4MQ@8z6PtCghYpXwqT;Mu;S1j8X9_EH90}j*f-2{hetr5sf|yb zWazN-E;#DOalQ_OF+u2>|Kuo|v_{KaecFh3wH27Rjv)eJFv?Ji2%g zr^d(H!%Smqdk5YAnkSE$Oi-XDl}2En3`&en)X+#ZUGmxQEybNg96=Ny6xSW-+h{v4 zwVp{+V3$nVz$-tVPVXfYP?7|z-qZdXeuA)?)%P^JPk_a-v&Jh#5B zswdI-P{SGJ$wqN`@QyV8XW>J2;ee)kTq#r4XjWCRz)Ls2!J2ootW>ugEG)g{Z@qWeoirT_z-h!MFdR+V_L1y){n9I&_uKo|M})=h%5 z@c%HET(0nNaqU=TYuSqifoiU(WQ*uNiK2VwsCUOU*z9%68WiOGL*QT7meLu}oWH=} za8xkwS*>y~zB_|^JbP>72a+7DH4QP#<2q<`DC&ct)OQiB&sAkAamE1*?cf5uqet57 z7&t?B{*2F?NB6QZKR@HeD>j?dd(N9|<;c%A3@2ig(eRM}mJI#4-eU*{mx9?(Rb4e& z-Su5E^|n`$sFtb*cuDY~Ztq*^Qx4T+2G8H^TE#aFV8f9#eb92P^*|2r;>;64&2Ccp zn@h-5)-Z}L$W&K%6&3{cupM$ChwDst_Uuk?jR@&_EVGMh(fV_H`_7UV5ohnH4uw-r z0MLzTPd*_QshslawV0XR=b%0Ql}g#MwTuy)#aTgYDAlVV@>|{t zB^wP^))(XZagPBGVc#Fzqwja8%W>sNs-hi8SZO-us;WQte09)EPa*N@bI{T z$I4~UwtE_k!*!L+NEQ}R{LmUOlhaIyi>pvw25(OGmRRyyXn}z$nj<_zZ7fIn=6MRc z=Avru!9>H&Co!y01NynFnk^X)$A$n#&zWkCWL9D4@4_WVgx=CQG7yyAa-D=AE6C@` zqt4^W+|coTmzMnbd;6WgcF-vgr@eL+bZLU6pT;ZwNW?N1H&g(%+PeV!u{@QlYxHsS+oZRiRGimE}ak!+t>($C= zf~G%E;IH60X*WTeFM}ELfq9!x_6$g5#{F_+`|Dn6;||NdL!rN^=kI_uc2Y_b){sX3os)v(JvT z*7mFfmN8}2=#a7g>dqO$wi39iveMF511D|6dm94PUeeN^eUk=1E`c|~m!X_nR9Hy9 z;j{c2oWyXmL8<(PpU0>)sIMizl2ZUWJl0tsc|xD?%uNEL=NZ#|x0PB1}8iQiLXZxi*Mqv)SI z&iTfYCGAE#p?WdxP@@e2%yNTLV_%}LPk%~#8o9FdwNgz=W_q<V7e1J@*w-X`+$IWKL|Ss3}V_ zY&WkoqV{(vd;a9c=L_0i+79T$<@lH`JbzyPB)f#ymSPG)(?w!%lInK8_I5X8#eN35 zCK&`oY3RQn({9e*7H{T*>Z*yA!6*`L#P&n9xDC_cuV1g43hoUJ4}Yp-f1Cg!Ci_*N z8~%ccGbg6#+443Jp&#n;HOEr~STH?siIeV0)Sp)j|G7#On2JTWn0vH9*FCPiqXTn9 z%Yv%*!&rjDCLZLm*DPNitdRFid)#BLD7|0({kTQ*poN`|;c0NDTuUDkD{`>5zc2Fy!}< z_)~y-k=4cz1ht-3@5Bl;@CCnFbfd{e*Sf`YZ+0)kwosPaHa#aIX$v`LSwE&NAkD>V zUtjo}2%$zIo}r4!(|48PipGzmBMq;cF%$$O&JF@!-S*FZBM_(MM)0_Ho!Tbl%=YT? zP9G%U#ef0`I3D|zV90dx)rGrYcJWk+I+XW*<`Ua`KG|$fi$^Q$NrN*&w&u4N_+nT@ zgSAa@N&&p@GJaUMI{F&wprcBNBan8d+40icPY>6BGwfb~z)H}xa`1_hm_cxRniak5 z{{Am(8GW;4^fHnN@eP?=jbL>hUVqX-4BZxL?cOaKi|YtjPHN}--_FAimOwuML^vAs zy#}ZoT+kP2eXs2=xdg7d8G2zM)4KQvJcAX={@-5pyUDt0T6^!>_mQJyh(<_$G#t== zO4$!_P6S9!by19X7k-2UsxGfT-d!miazN%@{t>_h<)R9xw7)Cl8TV$ryN&1FZF)mn z7vKZD*XH=BmeU(~@p0YPV(;V>Qo=##%-|rX7l!7dfh$9nIV%(Ro)%PDn>Bf-V=NPl zaqo+LZ=*`h5~4G&pJ2J9+@_E1X1}|tE`4vxsPGf*s!RmUpsh}P|1T_B(eFBy8SdAC zZK!@+O7antA>ZX%OdYgQQP)He^n#ua#iq_8U;Vzk44)r9)J zvXCcvv*+cYvkZ4>Y|9V^A}0LE_p6w8oNLlkGP;0{6XEi%5T+Jqbc7Qqlu{`GnFouv zT#n0P=~+U(zw7(iF8#+9zW;bvweU?z%5^Q#vYA)p!Vsz%e_q8om`LuKQvvsse2PBO zPWv2GTvS?l-#%V1PeBryo=jwj;_vy30+1qMW>9`|{QeO$vdz-cQl0A+RnLjAQW0(| zVof0z8-dk>bc@1GDqeovK@(&H3GeK<3x|9!kjd7XM1%M{iIGTB=Ji}H*hp0`Et?T1 zBM|4^y%F?u{JL*jE{Ad9-H02il40lX12l$XQ*T_dSCAfQ@&K};KpM6eEh#;5C>_XX zv{Aelwl@?&RR8Or9$9jLO5ORHBZK3c&vSQ|_K@W@)~WCpteTNQ8>dF}&SK4Yd-<7{ zXr|XUVYGEavc;oIuT9N?mkW(T+*KvI(3|V-bytAP8Nz20oQ9D1%=SirVkYv4y4XNi z1%l_RPWQa*PW^>^T}(KS;MYa1`z+$UY&o6AZ*o{4~Yf(Zarg%WN-J;*Cy z5I(@Y3Jna|sHfIDNY%Y+v~B0KZ)iKcC5Q03MlDqQ5%CXC;xGBBK9RrEleU!)|GBFP zObR{b9`2j(1j|RzGCT&-gU4NZVDqK=FcWz}%{X1zo*kxn2S(AL;FZh%A%)Z{{J}*w zYOmLH{N`bI^^4B?ec=Q}&Fp&#qsWiCoTII@QP)6+BOxWK$)jkoeD+H1i*Z>DUzGl| z_HxQC=@tVoHuZ3V!L0FzRI6Hc`y17=X_Re?hYVK6?nKYf!F~xO@ zBmAzRFXSbS(4N zpjZ^GT1cx=_AdT&3LX{~5Het8vO#XJEJg7`-9TsMT%jJ`#w+qPsq72BW+0hm9HsL6 zlDV-J0Y^uN(<4lpyX_#GQj#7lC7CQO)@lAEYJ;3sHnsh#+<7-_6p6BAzB+8xZ>lOL zrsoe4s7l)Jb+@uU_;@=dq9|o1mqNYVxEu?btf%jDa5xgu(ui{t61X$1zIB6&$_sUH9D`Id9VwJE zG?M)RrK=yxcO+`j^=Z!qHEp4<1oF8k>ec>K4^G<1s*t8<-~#e4I`HK>3N^jrghc$t zg2F3KDXeo6oE%Gwex zOEzNNPu-S5)PW+)Hggbzt2w_?1**6%yqH>}$WOW# z`OS=(JN%FTd(^KcC-+h!E*;>-W**IvtzhjZ9jFO!*yJ?piut~dlu^F*;fz)oy6t^8 z@TCa?4#v2DDPzVOnMD4}cF6r0>?aZHwH38w!&pPkdi%bjODo%agvto37@sW%wh#iie8nsilWG{3_$GqYidsV z#%&0;wm$54X@4HK(BXf6%oBq4AXCN*sUIOxv`YH_(^^~g+Dt}uZf-7r&;R-J=P?kJ zLZ$}V2t?aEsLDt|(fQ1;g?#_)a_O0P=#)`0Y&;42bXP8{80dARoc7?r;Kor9Q<0*R z39B@R9SUhrsx0Z{PP}av7_jX~vEoj3Ze>Z?;!;)P6F}bJDP!yv&VBi0K$561IG#dBKhpHXo8@Z8GiZ?-yqcp$@WW~Lp;zn zSTX}*Dz@M1tcC$>(fUt;tpggje#WO4g|uXIJ&QDLoaK;%?&lZPwCtf&s2j9jDU5&T z<)5f96iYmMJF-*$VcnJ#tuf+sFfdS9J%Yb~$i>4~WFR>5{<24@n-|GKr{$831Y96r zhuu+q-?wzLcWiTO>r4OV&+H99ZD=rhY|#VQQ@6LaR1_2yGXaXy(thxcGkBChBb7QS zBU8#woH}$3NX2epFZ<(WoB$Unx{lqZ8Q&_Io+Z;FT|+7yd(Y=!{=*z#JZ;Y@bUu>s ze%!SHTn0Auy=QTbmhkq^3^V+;MXgT)^5f^VGo8mogZ$-#*NlecqbAo*#W?fTrfj7T zf2ajDUD&dq>f-38iZ6XKk%hQJqG;`q(B~w*R1CgpFSt)60Y1RH}xaEUkchEQZf3Rmtk(qX9wdq^zuLY>t80w>^;hj*sAfIfKLUoS*;n z9Q>!4kjD@0rUe^49i2hda<#w9!@67x|9I8;jvFmc5Ggz4h#9l)A2qh8b#2cK+MluB zK2G@;eB7>aZhvhGsXLx7`L|}9_M*iC*F2?VIck%yG zAizm2`!?Q-u($9yLUZ_Ec0ZR*c>;b_Nw8=9ttMV*%hhn54<|Q6 z!|e7gpgxo#fRc-_>*(Baj|7!c6=wyz;*X)x-2bG`$k zU*_3P2h!3A`Han;cmEvE;SjwSRY zZu@8|Qn6A{xB8V?%qi0l%?Du;15}llTf9t2I?qjGMW?PyIA$cD7J-bv?EP3|3e_HC9PknH<|3h~S0JZoSwU&7J^48x=E^h>hk0 zP)(@@Cj7GHQw8g(Zo8(-tWkjVxv|Y@n%2!T=G(`~V;)1tXj@L9$9guW8OyJpXOH+T zTMM<#+_3K(O@1-F-l{Zppy2BJQFDs*aQPFfLEr-{KQg*b3^y*n9yt)+!DqG_=h5;pqVML(BDkX1Uc$iCl42rzEWDdQv%YH z*tHMG@&M4#8MDUv^;f%t84W0#O7?HN;Ho_FO@92fm=?oH+A7sP)r$W)x1>rvQ#g`Q zzgD06pj_S-t(X{mzn7bUouUa4s^7hPXI$s-t&YWO(WM`b5q#Q7*~JVL<`}c9*(LWu zVkkVelJ|GOZD^5{ZPB2=9Oq3<_@|VgOG%@-V)391@c!e+N1z-j`j|Sz%0OCHmiFmW zBCuiP6%@)cuxC>IO0f2luQODgK-`i3_EfQGc*RSs@igCi^QV>^cc7@wL)n_Q%GsZm zENFs|S>f=*aI0^b85N`)qf_Rjq(cf9AOaFij-HrxrBTp~tTJX+DUtogvLKLZb(@r% zn=9(P+J)(PPwi3sv2cxL%AT|y(b{|C7|`~q7d9A`BCCMQ_^Ljd{@oeN?SF%U4)ieB z(ykQ{p~uIr$!TdD0KyXy6(uPviv~yu!MxeCXxjr)bB!h*izxwfoL5bb3p@AGV->;fT90gF#G zAS@+Pd?I02P0vzq&o=~u&~LFBjU2;9tUIrEdd-?Maj1r5avF@&m5bRndkn=7w%=^P zH%@?%S5N*mUPDQKcj&$tsA^vT-m-kjln6e(D^j?{`ckC1zHCz67i)JGmE2qOhvZ!o z1#&2v;Zafd!PY?8+uIu$7{F+C_hlow)nPS9Yjr$BLlaMqlUg?YjrwxA+HKxIKQ@kI zz04K&Z(rNoab$(%XGZCKi)x`#FCyTRu-7U`L{9M8-p z5M4aj(!-+Wlx7Jo8|WqXy5=Qoz&C zO$@y1`uY)|Vkn9GRmM^wy2{d4B>UB$ldOksFm?|yx+dD>{*k^%K5|8T>U$^O7`cV> z>byr96Nw3>KFLCx;q?Hh*4%hnyY78YH5t<)fYw>DDA&rMiM2CT^j@l>NWl}0I(KWL zCS1-da>2%(kEXo}6^Y`~x;VU$k zFCp_i;k8BPU0F^h>FRRxwz*`8pXFky=^0hRC!3BBR~{)a-qM3s-qstZ(~}Yew&VVF zMJm#KXmC? z%1;8oOhb78eH^`tvm7ToVBs!@-QPB^P+ZVx9SJ9Moq6vfgtLL4X{mav5)r=?&XAHKJl+9I;0S9h)&(l zjw~6DZ&+RZu4}xA^Ye@)E8~iK+_PQj4rm3RncQmak0|J@9PwZg-7AyuM=YI?fffF~#E0{EI6@WyIF_- z$J0Xpzne5HEM?aEMhXZ;PSdvL=lM3J)zoRggD#8#u|f@d_$KdzT%QV`k!B z(UMXwhSCi4YvA*rtf?6fzI}EV#_qef7R|a^@Mh$Eq$AeD7`O{szb6p_G?G5W2?C3l z^J}e1_(t;}tUJu!K$#syJ-90HI+V_inT5r!XlgI@1A9e{{d2Pk&_Ht4ctl+085_M$ zi(`HC_jyrK5&x~wW3pKjWk!NVr42|yeT}1NGEJ8kcgI+AGu7#p&!B*o^y7>wLefb9~ZqzVo<;8VMvAM zDIbzLJ{sAG&e8;#S5SS~RV#L{cyLQgyseH!b;CU+E5ous!$TNqzl3pX-D&?Bh+Z+c za&GrNZjo11G#smQ;A3-1cNBS^!!{Ayn#!M{Tu`;uT^G|3WZdTMf^4EgPYU&oWDEU^ z+V+4OC%IoQHq(J~H5>e5_V794*|PV`y=blu?{@ZK(-E_7?yv8Q07q?-5zobF zX(eYIfxzSnGdnvfWDF{Fet!=n=BiCh4Ce$TEwcMsCs`Em0a7`L&t|mClFt=z0j2(@ z{aa09H#Bv6P^9%!_8e!@v9~D#M#NMQJkW>VbaSjwc2A1zKv@&Z4+&G(T4vC>g>OkT z$)1Y8D11ok@yj#CFN9}8<;9|(uDI*kwg-CpJqc36p(@4tI?fO{li5Hv_Jw24xUcNgN8%XUjYzK80Z4c zUK|`-&Ao-2RHLaeIEzkz{R;$Moe?7P7DJq`&Robv{q-Bb11IU7pH-qC(ghjq&aQo; zGS^5R7aa^D*b;`rYo5QYq#$;7t0(!qr+>g%DSp$9|E|>9MJJjuViigfFMwJG_950_ zjtRgqT8p(O;C^X?xlPW_&~k`JMB`lY12A@<4eRS<+S6jzVW(PA50+-QiA4+grrCQRuSKM?CiKc~TNcP83qNu$zA6V!P$l);b#k(qr%I>4}a0c(bD}`lnApi%!^W zJ7&rXq)U;Y;aE|Zvvk>lb9~CY#OoigkPJ}#c`Ciq4izzA zCBkSF^ccweF|LWO5Eq(JevL|O*W)=x@qXTcJ@R-z!~Rwd;#;`_nU=84?Oj!(_oW%O zW18PSUL7jxYCKRX)F4$D+(O5xbD%65k~=?KKzW37ymlX0YkRjLC(zBYQ{()Bk1Irr zZ&QE3ZnN-MzxM%ej2;MF%S$fYneRCvijy~klJYo z4q`WOMux3=~z2AS8-!Az(92u|hF17^kdeT_(^l-*F!HI(z#$C9O|M63^zMtYF% zQ~2dG5_X0AYVxbFaf~z){FumPj}K&*oEhUZ8aNPmDjdj@jx=ub#mRF7RvOIKNvRC= z8;0kE@pj(p6}L7JKVQLbNnj7)qQ_((7EfM$hmNwHSfj=f2}dIK3EmeE+$RadWF zE3c?#eK1!i7;y22@RTQ{8&`fw0(E8~5CE51jlB<7S z6WWrQU;7+MpyxkZs6g;3yHJ7K*oHZ1#N8LqaE=e^4StR?N?)MyB)%<6D*<1@b&Z8T zfMqdzaG|d4IL(5D8}Vn1S!2l40F8ek<<)k%bAP~Btol0amN-I@k+-+xqYeJv!IPnO zsi!tzJ-J^_u3%;WnT>rtO+)+G;fsVpantEv+t19w7;500ivUQ>@BhqGWs(@zfE-`i z{ZpYJVZkpLv3!)`2DLVz{``sahEG6Fb;nzHk~3~o@*cec@^IJB64liE^$d-+c4$TZ zn2p6g$>&1*aY2YIBs8Tdrn0z!P;k~(9DPc_;diEoiT}!ayVf3Y#E!V zl9E!0YRSoYhsn3M?N-7jV=KW(5DwHVUPAg_BM|9Orqr^JmUMyZicj@#$j=`$i0FQp zrsWVL{0;r!Yn<$%0oRcT6~rV?Z(UesAh9k*H)%LhjsK1U0b|MD2{+Z71Z=ar1PpVQ zml{@>$h<4BIbflJQ394qC!w4r*u)GM{q9-pd~Vw6Mbl? z&5Ubp3PdV`gV3fJ|7!^BN)`!gAFp9fOiXAkCPWL$d`__f5|CoRH)3j3il7^4Yd->5 zv)*!YZ?Ru&STI1=C%RwYAz2CqVXh@ifa`-W#r^XP0*hJdD{l95%x|9~ zWO098+oDR40mMj#8r}5Ce`_<)m2^G;wMRJJLXJ~#&%M=PHaA1Lc;cz+nmcLL;ZT88 z$@q*C?oB~$Ev}AELl&JI`OZnkr(P3o$Xq0d7-~~3p}_<59GDAVPz!5dr&^3$qdb{^ zp4mWl@l^PDO%%Jga4tERoy&uocpq^7>iro(j7%dH&hBAD3S>`-{U)MiW69p^z}H4g zsq~m2axbl~_mq|GBMdkK2LJ0?7}~l;3%Z@KlRwMohbjxeZ7OquH5f~$UhLSmSi6dD z=PLTj@ATS7WpjYO5s8&+hu~I^@7=}ICMPu?5fXkAoj zivL*wE2=E9AxBh*6_uQ>-kC#a;N83?^ z0}~A>H@l>&D)jV&;~(_XdLHYi-W#stCs?z?4}Y_}375g8n^N}#pCe)b3~qGxnh)^u z){_tjhpiV+2LYLg2t=8qIqh|d3qYnfsHi^)_yaZjU=7q&S?I~v2WxDeD9w>kZw^~W zD}*)DNMw^Jia7Yf-Ndt1qCp`8X!!T|4&Q?M7mw3&o4Xvsf(;0bdwfico^aQ}MYULi zfwSH2W~q#bjFfos;>CQbLLSu%3e<6|?ZGn)NtIEkIVVcO=#E#&JjKBpfJ|?IhLX1t zOc2CAhy9P0h45w9V!Sw77t;1Qc`}V&Rayf!@i41OF#9!)rP2w*mK#>;Z;oMJMJ*;- zynC`f&$IGI!3h>}AnV51$2xYGMiGQ#lh)mQ`rX0yL7Enqp;e2auoIHWIG!n($gX7SqBD?KV$ogmf9o^?6~KV{WC?!I^`&4)^#UA=H5 zn@FJ6^O|s?)_(}@Azxc1MGMyakk%z0j7@}1FP~spk2)90L=R&DPEi7a^(zOVI!AI4tc*KKhbP%xO%btOpc+8|U}` zEP_gQP~3FM)ZV+lDdT(YE3D1XCLYu>_C=NTzNBLd^fkqDzvPH_ zIFoISTWrn7fQY?U9F=-KH;T8Qa@c@hu1>g}IQbM6!nbs;!!Bd&v-tJw{d60R(Poz- zHv58g%0G|mQs8&n-d9#S)Y2<3=vqz2Y&75Ukzk9FVuv%3_h08yv<#5(Su69HU;>yo ztZ8WY>4S7$cyR;c|9jZjI#MUrBzKxkvM4qC#iHzn;O>ppyLoFdK02N#R>?{j=>PjZ zmW4{ZYFn*)2*?1%fks6U69WUs7JzV>3`gakEd!WqF#t_97SER|=VdBP4vWhg6N4P5^3QzNyM{6lHqNpRr`^>qgwGkEN<+ua{ z8`e&{-vm%l2SXoY!yGXr4IIyiD%g*bAm@9s-+|Jo>B zC=gaF5nc7ZlTNjT_ zT8VVZ0`NNIovdp1GD}srx8L_(&}(RD_ahT|EwQ-J-Npja!EH1kPu;#Pkb~p%fqwO> zU3q2YXHeF&UoI&uL{$+qh^6{1hGdMgN}qiZ`d}Z)9a2}80aP&nVR!~OwbZPv_k(=q ze|6qmu&vsCueVVf!CeOe=is$I$aJrhaQ+&PG=K_@pqtPhV(xe%22G8--$h;H!0w%P zcLjBfG|shnu^S9|I5e-W4j;Zbx2YQ40Ijg&1` zaL~|@;yWR)hjQ_hRs1Zke0_a6$}qy+(Xz~;E;nd74_4wnD22EwyNo#)<4{8a59PTr zdPM5NMe*G<^wfx7mIFgQU0*UWtCUXZ($zy2U*8)k+MlZ-F4f)(+^;eRvsTdY{ao>| z_poI_HgE$SLxqz?Bt%!3tERTie9th^u2;ioPqs%YQjQYoa_v1&Y0vP$H5nyH+|_T_ke$*qKNL6;MgmVx2k;NYMDd?O4BSZ~3} ztF5a$`wG91@juQL_0y+~#e7X{ILr;1s-h9`*D}y8sAEjKxwC|lZ$XqOFn9EwZA%hx z8_+Q_^_a`!3(&g?XLSYfKtZYo;wN-Y0}-qGoXG45pKMBvak~BYOZJx|Jv&~D^xQt1!T9kWHfeY5p)gR*d6uDAvQI}pk7`aI zRG|F`n9ZAl-hd>n7cgD3C6PbAfGB3&*HFc+ZZf=x4G(2(ir;5nh!n^~wa{_nwJ9SX5)q<+J#xGE&CRxO zzFaC~fVmn8>!}P{LB%<5%mwX-gaZBWXyh?|B$)rT&u$e0W-YsLw@U$l|BAAmJ!KkX zjW;Xpe$OCVRo;Ulj$}&7bo190V(48ZK(~93M7vUJvo`4Nh4sLNOE>1)_0xNYHyDaB#Ok1)YYl* z0Mo$2dk@_(!Ivb3@~vi&AxVohhnM@zslxwwx6KKq7;?NYf*g)Rq`|AwW)w=I-U zJF1_g8Kl5`q-Iv)HD;IuQb#)3^yh<=(VU5ch}^$lgi=7(Y*s43VV*_lUOy1=JN=sA z9=^?vCE^p-xN4b!)XT3BQ?;@ge&qDXwfM*NzKu%J&0Fbl`EVguyy{>J4zjTx;qTLY z+-e82k*X#-XGq)D>Sh{u9{4PwQR-CWQBAtmnmYE3Nct zdIvNU)E_xXe+|hrV};)%6|X)fyT2NkE)-7iO9R<$=O++>m;7?~iKTe?Jm$Pw=%o5d z43qRx?Y5-E14#0HmyTDBh_Tq%{*I#th7vLK60|^&tS2|0&1Fk}&v~;Ir!5$} zUkG)vrwhSOX4rF*^CEQ_8__ZE`|eAa;b9z;#_Wt_5szcXkUvLoBA=SqP+Y#sk~dA$ zuupZQ-CeUZeiUodSd+_Nkp8PF)Fbgs67pvuhGe+OUBvNXY@kKtRXh+QmdeSXKmzFI z_r6kW-{!4TM|?Ma=AbAkttsu6$}`4KJ@~?6CJZj8drYj%l0Qi!yp@VKRuXmkLJ-9m zTc=wRCsBeH+wS(q^S>j#S)S|{SVm2mrP>%aXRL^|s%CZ6UXOL?&pmE5@lNiq@Vy`g z;Q6oa=Vhv5R$yh&lF+D_s7;fEuU!cLopm$^s$S`V?EQ`9_C^S13IugcFnhJh#$|)MP zmoKwd*lvY7{n9@46<@g&MAW-z=Z797Dfow;gr3B@^;ENBYzpVnij36K&GtG-*jxE#XaOfpX}Ka;|q z#wWzb{v8R8BZ=EU0nj1_^>g_XSMsiSNEc}y-TWDaDL!`oUmVJ**XbQ&BO;X62HRGt zRs_@Y9rOw^2>Q-C&!ykF1Aas#4G1SA9vY29syiS5;RButeRxrEi$&Z3cO9&*4^!RfB|($nVu+by<6@na!w_Jx@HA*CKLq}838 z0_0_FekkB$<6}3-Nc@CH*Xc=aXehUt<&>ZY=5fx(RT%P0kT2EGChRVYEgfi8IEW9r zK|3T4VikNsPZDY`=6&nyeqka!1`pOb6sob|A+%XAdalL%pSa**%6cdAd%CiP$2-Us zNa1-b$4ehAuJlJYW*eP&KF37E3@1aZMJJZZb0cGcT16b%5WJ$FE>|8E+On4-k%*IB z$6is%gq#4SLnMS6rQt1fo{`6b*eAAXOr_}x+!()`Pmh{bHU(ZI#Qw2Ft$&>PEp|_Xka_6K6t^LU;mwf@Z-_PT4L%c`z{7m+X1`0v^Gxh) zn*+cN$!Ze{67+BT9{06Pq$-Bg${89Os(kLDa+LrAL#S(crc^AX$6a+7K_#J9r-=xf zcngxahf0T2=f4IYXmoz-v^_JBoOzte&i5|Ie!>3W@f;mr5*jA;Vk$QO*4@NVjGl)9 zlq1)$SgkSB2z|ts;L?TnFD-Y=V6yFtqneM=(b27Oj3adZ_r~1p3`~Bv70KQ9E0|-Z zF-SSK+`W+CTAI7%vcFX@R3h%B-YK?-?;FRvFZuo9%sTWEtC45 zt(*kJP z&5!Ijk1~$FI`*`KVfT9WkWtbRXOp+7XD@%_Iowoqg?XG=n!Jks04*0(ur`MhV#fL* zkq^?W^)unG8feUIfXA4=ble{HD;38u8m#>%hKUA3llWDGn7>~<=^hBWkJ^Tt!r6v2 z6~j9Gx&MBDqpb1&u*fi|J}DcFN59DZr^S**w1a8?)1WqHzN&lW+K=Upm6-3`CoNUn zW4SW8qJ+_zD{N$vNf_3)0z#51ul=13{rE3UKg-Ijez!Nwv$@o5{+mhkFl|B0`Fq2I zI^&XMoc5W(-jcCj#RWxndJF1DI}X4QJVPgMLY zrks`W`}8SeELDUZ-w7$sTo%r%21JaU2uIybgk>giH>PrGN+cl;F{Lmn@LSm4T`Vq} z+JcvSaEl0aeibL8N)3a_h_MystJM~}=jiY81X7hoTi>6ITpCT^o`3bq)q&L`QE{T! zz3YB(gE54{ka^hlJt^J2L>{U41i^>*tRMj>QTq|)Vw(P+zn1NNETJm6m^^s&D$3WQ~2NHq3EMO-)K1r^?nyZvGNX|eiUT>+PDIwrk>tg*RlIWJP| zx0z^r@=)(iv$k2zlR)Z?9$uLLRt-F)`zKvV#Qjx2C>O=sck=8_8b2Ee7?@+od4Upv zRGUuUi_&dA|F@cRq1X=PPjm4-Uk`^^uo#i$oz!+Y|5VwY&Oc=TtQp5XjFi!1jLdqI zGS*2LO6q>!#q6xSJ0}(C9Z1kux4~PaN`Df#il%}k8}Fos457kl8xYLh3$RxCv^b!UX^>6C5Hq767pCzMbch`9a`f*DJNqkR|(V^g<(l5LOfV%Heyggo6O=K z`l=lS14CLdNDA)e-6k$*!?;X=hi!syW%-ce^eZjwlj$D$ADRUe zV2TBp*YOXGHYJSTmzEw@-C+^%xxv3lyNzbOWE0Sd2-XS{RbpEsP6tLk5rQ-q5fzNl zQBT}PPV6G}?=n}Zum?lvJJP%`cwVe2>+MU+LZK-0QiHi1;pf(W559GN%@Oh2(o%y( z2nV^9IR?GKU=cb{NNjHQIoW0d)kE?E13PCaPQzy^2H)zIW}=TagXQfrXpuRI*(`oV zOEgD}qNZh%a~L)eQgImWoZbjWnl@+Y_B8#WytUQ?-IP)aDeIQqfo9X6asVY*gy*@7 z)P`oh@iF7PN`dN#&frpi691~d7{>H{gQvvrqGD_cgW#F}`ffUvImH0z?{H{yz zL25Fd@|mSf!0GbbZIwX_Kz{;P=4cKeS=(RlWjWu$R%J9Qb!eu8ErEpUvi;BnfJ_LuKuW(YL!@B*OkBz+z~b!%7~jpsA<4k3z&B6toT`;4vdl_J3ooOZQIvQPl8k# zq?W<^<-IZabJxOK(4Mf*Il47*_cG^6a?Wi$9oUbM=3+6hbkD$BItLFRhtaBWsxmyZ(XiKlbh^-%1rGoVRPeC)ZMo zh;b{Bjcui2rVpVdHU+{!vsH;XIlo4<@@i9~)%1S%sm^MAPD>D% zp2Nq>r9G@K^Im^qb{?k{d5CSPJXg|tM+G9!pwPZ{67FfvYz#IK8rAjh>KSP%;6i;! z^P-N{fll}_fM1u)q6IIOJJ@%$JQ@rm+FbWVVBOM2tbba5y^+;mRBQD+kxkTW=gT57 zL@lq$Y2p$XwwLW8_Y>~lpBMG|mcC1@)thqd*`NvxvCe0IOu}N@l&2f{b zDFS0)d&kb_Ai3Be;`gw~ry8Sc@%;9G9cc!tREX<)JHT(l_z3d$-*@AxUeXbZC~#g$ z@!P!Hbu^3N@QXK}XszP^?L{RTSx?O6$4rdSAJG+))61sXTE8JCn{fV!YLP=n2bTxT z*_VyV>rXuFx;viC(x39>0%~Tuv8^Vc9ekuFrioA8LWX9?ye-h_eX5%lGCDn#Ms7z1 z;W(R%#ze8hl08BY{7y9Xs&q)30qw?xI@ zT1lK$e&}(@$X6$o;I(4okFf2;`ZKekFg64LC`GSa(UK;?QFcr8=g$yWDg$4_!6DF8 ze{**pJww{XaXVo_U{SfP8Lw?1=qZk@A8+Z*ko@_I?)|q{=FI03X>3sv5oau*cjjF? z6lPj;J9R87Pak4GofoJ^8WZ=+6ZHrOEyvMkX?`wKLjm`x`&%E_wZpJe>$P6EWs&ZT z+mQkkq<~22tafznuVqZVpHZB93>t^e8AU___{L6t8mC|xq*`zp%@S%5OZUG1ER7o~ z0xFyBvrBQCqooSJH*;SYK2`Ys)wR|0*HBo2|0RmokZ!cA1xwQhr+}ASbg8P#<)^)8 z>)$@v7ahI9(YtJbp_$a^Tanqh5~gJpoX(80XS=Xvci+ABt5oU~l8V@-%1iG_U8hDq zr)A+>svS_mD8qXOTAcr-V1F{^S(yQvrDDWjsh6W0c zP)N-jo{3l9a+DXO+I$}>$xZpph#-Q-s^7=V=LZG_x?Ce!1 zM;4<~Z3>pcqi11?oB4%>pZBqNp^^L-&{Z*p%!8p)&A?d8T2_ogkrrHO1-C>j`@oCM zmMYg2p2rBwKbvModDKdX#UgIhNxhwl;{GSEw#MndUu+_%gOjdzx&N-rS&cdShW zOP6YCYSK~(d*cE@4OcJ{M7Wg&t#(WXJ17OH^49PZ_w5k8y%l_YadmSjRpONM@@Tw@ z!nw5+TPaYiu-y2o@h78tpb0Yq=NfrU^-ej>>=*vlPyMF^Gb`W^#W0@#^~hD$Jbm8- zdK7JfdM1(Df=O6avRrkt@o@*vzV~VSm|Ynac6h#vxm@)k9=F&m+Nh zvbYyy55n{2Akpcy) zVJ1(#5>30=N#)|mVF^&V9=Qa+yH?YA<7&YB4@S3(q+*dOQRS ztP6c7mg?*3N*TbQ@ie5EToC>`CiUS6qmMIdsxrVp`E1o!uD8FO1z>VO@5~HLcdPza zW~{H!*G&*MCsm%kVxAf^J*|D{|MPNXZ>q!uf&Jj2%)Zy)*7U7H)TKLsI)gfU>?nE!F8$dSrb&O=}*v4Sbv z)b?OC_w?>F^!XsyxnuDm~&9&$&6{bpMMs`te`|4 zDOCOBzRO$iS5yuEFSfkPt-d4M$)H-nXT1gIEMy(sCOx5DymfooG^xNSKJL+^;( z*D1HeC=q{VM#=fpz*KV+AahIcClM&qwK=(JB}%*ypzO65`lvYAR<1A=>dSLv7wMuR z@GCdUtzl4G$Ghy$Bk0QG&|N~{ltDfse&*J1Aa>5mbmpUzq_G2=*#TWoUVQ6&x4!v% zPNMF;JHvt3mLuD+2$R$Y_EXHGZ0HISN5eY+N~4hq8|bFT@&aX72QQbjiysaZD`%`D zEKwVbLlZ4g%Zz~<4)l&|E1&aDVW4GPz`zm}H$nFr`r9<60My_=5<3TW|- zjnUOsiIP+Fa=17v1OorQ*y~<;t9B*gb(#xf1uNVys)I@WwRS|S9y8gs);ObJC{c=F7i*$)ElNZ<@2@+P}Y8I!JpsmHmH+`Ur>2A14HzFlcQqtYs(k0#9F?0+u@A7;9w;pSl#TxFqbMD#a?D+OR-+pJ& z09joD=k$I$CF;8Yub-h#sXl+C376IM;WMqo3?x60fUD)VWP`nOj^$QTa^-TVNwr1l zMW>;b??_bTM7#;eY&_&>$U@@V^#$O>MpU!UCVZp`Wz z&#P{SV(H;b<1FgWM&R$OJUZ8-d2X`n%eE2siku7R#t!R|UbFAr-{B^#H0-~QBqF=P zR`1Fz7wP#Z9}7R^eB0oC)L)txBBdZB%Q%1Z@5yvMe(vcbU}8qzJ6%H82n3*zF+l_k zlA}_PsoQ6*SZTx83qdBWHX|)FkV&P?8H@zMR%{Q|R7AGnsvx;il!;8%SGA61pEAe{ z^3rLQ3`l))w1L64e%+wsujDDe1sf^r*dGgbnYHk;Qngctc2YQ=Y9!hwlXZM;uKSkSqoC^%*j z=Ja7sZY~E6(ee|QLw`_WL+coUj&|GT=KMO`kU#B zwXfyFR895@csZkuRt_c@-ftoPMho8mK{C4{*Ke$1Ap!nd>pj6!_$^Jfu3XMu|^GSKTL}t2xL#1qar_E&-zc{#ZS3>c6 zs#<$t``X!R;Xd7oC>%at37wt4-YHvHtP(#5;&Wza^J`09<-B%J6MoN8ntbUg>!4f{ zj1e6XrclSVhbJk^_?Ah;^5LOpkWku`$P~63&Mum-? z8>24Wl)19}vyF&kpPV>5UH4FcLl2kXb;qMfqrochmn4zLFtB<1qYYFn+{hwH4#EZ? z{9Lo(w#CDIVOZvGbNewibf7WOVXqU6sXw+9d`vW5)lJ^)#1PKlZ61Nv*_Jf1&eT|G zFnarMb|O3_@{s5ReW55TlV4?iPkjGH01UUkUN0kY4{)2HvL_v+>+YGx!&$igU^zxn z1-mr*M;}?g)mYc|<Fy(AMMY@2n$n*97L&ozr?_;n(Q(+ss9lF)=f7v;y>Te7ruggcJw7XGZtK~ zWMJ={v3^N)^_QcRf>}h6v0_ng@kaiDqyvHK#bjiL1B+csG4a5GyV3q3>~!wh|3$cgg5L`N1$tVhkm>6{83SziElA(r7T|&qixy% z`Wuw0&847v4TASK+X0T*_8`O0FJtov)-e*CMN(deD`y$=F~19Tp=v0Y8dzcWI}pew z@w=YV$=H6nNlr!!HrSx(`ib$M)ZP@yg?RzH-J5ZpiMH#H;$KM7T`}FJ5m@!CcLadl z$$p7oDdPrjuX$qG&N*EaGsxlfR$QF0hsGFM?0k>dvj;|EO%%}4c_pWnu|?@LQ?VN8g7 z-+__@;t=awsp$~vb&oEe_Dp8jh&nMdT$`o~WMTrjEul7vxx&OQaft1WKTJ1jLi;@v0=Y1a;E9A84#tX}s6+ zyjvP5*$3X&o0IG!htQ{NiZJA$E`$%Z`j)js5tJJZ3AlZu!0_-UZm2y`q&ox->PwM-F$dBB;!Rm)DSdsj@PFA!>@9zqu4|pN zS(+%hj(yP%ed$`2x5(IDG3i>DPlM`WS>aF5K6qJ=)n4SQ16MO8Q*`j~!2^kE#jWpj zH0@o|K}x7mvt6)rzzeDLY|d(<8FXo-FB=n9ZXcw2rj2>j>GtYnbG0EAH3~TZs^vLT%(FU zPY+L8de>#>C?w4l6`joxoP7O+DQx7>JUvffgU-`3^D8ed5(tCoQaGJG=gt_ZKxCwlx{+^&Do$r z-k#4A0=XNU8xAc-P$SGjy!eQ<=nz1sl%E;`sRQ+jNI&XP8X&U4 z3yw-_Q97FP!OVk%s#)pyxjZz=Z)bOoJggGc)HLFnEhEpu3$rv@Z;pr0!Wk(S2mRwr zw-X~I*uF$$u0YUD*;_OvcC!}`@pQ~QI!5U+|^E%f>Dq$09OcuG@txkbNf@g8dkWo(z!zAjbP6kYWa(KaMx|p#nKWm^E z1qXTjXA*oN#flrsC!2eU-8}ReIh)%C;iHD(!yYgIPhX$J8ghF;c%l_ok)ok9_2s%jDF29Q58DuJocz8>M0nGktI_VX`9#_tP z(d8HhA!ZDl&x=Gq!1(qN>1hejMIhW5NgW3a)IO&=X=^9NDrJIRT!&aXG+@d8RQQ^$TZ~ zlmg@vD5ydcK`A`<1DG;A{5Aeth`VxsJs{bTW+a2M5S}nO(7HT zOHanghiqspX5hUIDD7 zq;Ou7!|?At>AuriCzSBDa)ulNaI3TcABSMx>x4?-tBpK_!Fi!PUyuhmX>llUvW5j9&D9dzErO+b?qPziCCI$zV z{xiMEqR3>P>;xSrex2(oYQGMd;T}6)+>XlP9+C+sebr@Vj_<$}s`8l)f!?0@byL@*-F58gUha(>9Yg!ku z{Y~A>fs8^OiseprOe>=XO@&(_DxICp29TvBF+OX(P2~0}&t@di%jW9Z z1B8UK+V*L1L)h%t5*Wv{LDE|lDjS(m)`Oo-)h^n2Ar_RX{Io`tl^kYe#54w z$3gb%y!!F3hlb`>Y1~MmB;YIZsx%}6aaS~fJ_9E^{wNRPt2(f#ycH51k`WW4vhD0M zb}3r#;gc_#B8s2Qr}YOHRdDsDL0(UqU4cl?wO~)Nj_@pzaBK~NA3DB>t)co5t*wPx^j^j2&-l+uSr5WY($ z1+4TTvP-}9S{T45i-C|~=N|6CeuLDLr!b|6>cBn=Mzc`{M%MS93z+%Uh4Wh+ur{qG z(;Bc{v&fli>F!x688`}$s;F}!whR?&7As(-E&>?gzGi3Fsh4C=2P;xmmm$S%U|TG` z!ruCM>+hpZx|eLbcW#mYN?or7y)1Zx#mh2VWW2wV!` zMxyR=q7h?{o&Mes9Xmx^-^fJgPtHaQCQ>DNR)$Q?uL7OUv5+3so8OP|wwZI=w1aN_ z9y*{i=^fQwlrm4g>oaif8=4FfRd++`d%g;L=@@TwYvQAboK2>Sf{;x{hRsioOcwJ- zn7puk&m-KxUDPAj4L34yHvjK2GthQC`XF3ppMsoeIrXkB3)Ble2wzry8A0IcwFNL(IvR@0cT7@_|2H)^?)m--z2gp-{(}i> zdhb_cLu0=7obx9gU_TO<*3?(u*VBtn6n;{3ahda{s3rehHS}&DcwMhV6q)ptL*ei{ zSg6Epmj^vm(9s7A<^0jLBxn-+cj6N@bkF2Y+=Y#v!bBb2R)+xO42@TVjFILwO10*! zI?I{Q#-FS6(s5D+R@FVJFDMvzNP~JgZ2n16gVpY$K{VouxvP9ZlDT?rAC8wxB~g=} zQPXzp0JwP(v|ELdkMT-u1570IUKg0}W6q@XTqwP4D3DGhATw@%@dt!ewV$FP@Eqf- zpVLSn*Q~3DWJhx6`Lb=cXD*uM+o50#QRIzk@axO} zdt7lHL23Ur+8wq;)dUSyLXW02(H4P~^#RAPvZup7X?dHlim1ss1)&%qo8|FUG*3Kk z?sxpi41{LV_RFO$Q_~E+|GXDaCB9HD)|1X%71~l;b_=(i;M&q>`Spj_XMKf+@A#Ge z4m~X^oo>_-O;0b^sk1JC+538*xcw5FnC|ob!@A=0*oy8}xm%IJIs|r@9X9m~)pE*S83LuXxXz%Y_pRlwk8l2j5 z^SSEGmo7<>&!zb*d4E0Um97vPVY5{x=wi1}+{SYda}4ORMV}W}-GKVI0RBu=Qyvf@ z1dpj9<1$aixd)qZoTr0DEk*nsx=(`!^>^i6G6pT6$M9BQoLi^_a8{M@7demD5nyjy_5qpQRSXMIPsc_lm%?s^p&0B=6@^B1*D@`zZ8x=EqS7RrKX5 z5QocqCdyUVFpL%;TPtn}d0$|ERkHFGTOMh8;yTKc6_cL`i*U-@@={3Lkjnuzz)}!BZP0!cm7ziYv z)Pi9jFzrJR#*6N~E4?Fd(cBL>|GN+5#&EDT&eH7yiypLD+r_s&?-ByT`*8AczynhL zXq2oPiR+H0ZwUjX7?_yEwMc53%X9IvWO9FFWzLT;=Nnz&=6p%wjKL{-X8;=qQ!jn>>00D?G?c@u=mLgaJ4Mh zTu~(mZ;QE_N;K78W`Qn5nr94|B-6wp%XGd%H)P7pBw!$T)mSlcV)gBx@3-m?7&Kh$ zZ

QbO2Qy02SB|ODgqD!T%?!2Oz|8bySGJ1AS)lL0C=?_ z;_8YPegpcHMz+hiCL?H%wJ?1al_wkKqx=5-JJd89AWSkU%(0RbN1;cPucRI5JON`U z1p84~7=sJbj9s4j+lP@!r*?Bjh=_^3abSP11A#_Te^;l*hbWd8Hqs(OLJDUo2?>v{ z?MkJBav=awWy!u(0L?}bxdlL42v~r<{a=j@ih%yL`EW^rFx^7(Sy-N|9OP<9A#hCY zh63B-`nrDn-*lvqJx0mnB)tLL8$`Z_-f{XhIGLH zQ@esA`|AyKTvV}gfDDC}%UR#@Ffj1@+nsqT9WRO`kmPuLFY2qWs-6^kfZyGTyEzVk z!0Um3PCaO(xKEdIXk{37FM}UW!a!&yD`py-n(oUsyG+nGpG6*ShCN3mVYqgTi)1$` zDh!>N3Hm9L-lhz@Nw{iYjS004a6Hg4z{m-d2CWHTU*mxA)$$eyazK%ljyQPH7(!rB zB!ELNw1KULdZMij{HqKfPH4nJxfuAQZyyZm0H8Lbr*%mmf!Gt=*xjx2ZwW5J0$-?t zFSn+vb~Q#`mHzO$(W*wZlrdO_SVxQ4u%0^jaoxKt{}40Nd8?ROI#Pw?o^`z)46+5A z%f`**&1aQU0gb6C0UclJX61di$Jv5JyU){~Ze%yC{FEa@iXRZ?I$Gt7U!tJx5kSLH z8+7mfQldb>8Sp?12mLgN@Zo$LXwiUv3j7Cf7yc6-!uH?h&4NqaZ#gG4fr)~;47B(_ z-GRZ`|H_m%kd)z;gEn4h*8*s_K(z`4Xa0J`PIJH(L#M9nU<}$vTjhZOmXQ=*Y{8)% zWPSLYKCpMAsTyIWIkO+bI=b58lOG%IIl5xyEX zcbKRH25R9ht0l%8`UE&n_vaNtiG?mU7nEjgUtEr^( zXZMeBThaHP$3~WsZTQ((wp+2n+-!PK!GU1&8Qcum35RbWs@yL6x)QWbp5)RvmM7uH zvj`hVua6WHLB9aHy-3o*3IxCx>iU2y$p~cwC{#pW3pS8*h~ZOu-5_d3oOzKXmcUO( zv6;w8cJX!5S-7kIspi;4Ok7MRG9A+afD0x#1a8J$FuD>%eCaiNIval9=dmEC4=igo zS`vmMw3sy>!y)yLB5QS8-(@6)}93=mM zv4=DRN;raVyCEcl{`va@orWZlpn+*Ae+zaw`Kh!?)k0&*3!r~9PDjAmo4Ncj2 zT_4(`tSN9S9%X}dY(d45h@q(>>nwMDlB2QA8Fj&!Ldogam6e&zMM z+@iit_As_IIDX@j<}BmWucu&oaX# zl^@Z`fw=#$T0^}n+0$8LK|@*7EpXk}EXa+%)2I&f8QIgC>|+} z3)PRGNszwId}P(@#=mY$o?dKiL(9%4sCr&qS$8CV;r#G=0{G zC|)%Cp_h_;o@Tgnzm-J5(lm(6>Glkp07MO@@w~c+Vfj9*R{6t4=J&2e;Q#mPj{L+M zo5|_#J6E3c+V92@_+u4&dwa)=W~hIZW7^o%HG2Bqs`e__CB2<2D*8FG?H7Q9w6{t* z(kFf_w?D?o7ukgyV`J8uXX%TmriWk@)CNcKjdL^sQq>};EvBrMuXNJaYZiEMOzzt~ z%9D5G0-!wxpf+o<$EY;Sho4Qg{7kR8Wjr#%O&z)17S`G-T%~f+Y$IOco5yIiJ&wj( zdfyX&($|b}T}OX@D*LyfN<|1a`nBJ?du5Rc%C0fL{-$^ss=#)N2l&@#y4{jn-z6rG z=SAG&egN--YB|c}J1Ko5zYq(AX%?c3lVyvy--Za7>T7%4x%hlR#)^1ahW98YsQE@v zVEyGimHWvVt@tLK_NTT{qN~5Qi_u8`qRZ9pTFl=&4t%BP{rIB#gA^sFCTLhsSEI4_ zO7M%;f-rKDLcS@QA;7V`jqGIWS8rXGIcS6U+NYRycA@tb8^J#TEl6m7- zKPnNl|C>jBY~sqzp}XEZ+j;zVKXWhr{;jTC?l>3FEq%0-`s$A@3`wN=HW1(aHG?-s z%C_{VpYPV2aNNLFqFb4Qhjt;2vRHCk9=8iMn8UU{kfo^hd|ZP_jh83SC2~b`t>0qB zgdfGULWxYjPVj!-7tB)Q)*oX3RR9tnFyY8rp(;!st+M>_=)# zD_@5Nz)v9d;Cm1Y3F1~$dpm1vMBCB-_&7CvL058Y@?xN^Sh!|5Yn2gk!%AEC1k!jG zf%hZlSLS$+M4|(!$wyjiX&U(WT;0oTVn&4tXH9&*o4d8g9ko@{QtKYw-O%g*_^^E> zw(h1Z;MQPzC<+CQ1^^mC22OwO4#pdp8`Cn2Q9z+8n;zLp3)UY1WH>0m@qoa}+in~) zTieKMsVYCIBb~YMb#)Np%oUfI7v8@F6%?9lleUyDY@5u?^vK#y;6-6bkMTvm?ikP3 znqS5|Sg}7n@tvQJbH{6Nb|5uFkt?}k<}XFxwqMuz#M60j<` zL9NT)dHMOsPK%Rw(!3LfgLrZe4g(6*tTJRdS-b`ytIlqVD$??hx}0&V{ry<^V;){< zDt6u%&%mOJKa|{;D_=Je#p14U8OB4HYGWPAX;JF)+hkf@eNtXRXp>fF=ew1NSK>KD zMG%f$2ijfOB?h3jLL`p^Ef*nvk7g4=!>3QLJdwTimtERdN9KW6#1>BlhB>c(&7G}s z6vWyPeLK!O!Ki6i_3}auKh;OmzP(=k-YfZ?sZRQwh8u0w6y6{8lk6AR47+f&b&P#G z85-Phd%H=s!XUtuVcuJq(?QB#5c&P#C&WqZHlNsU7AdLOXdqfYSgt)?#?pTD^vA>? z0~jjkMHr)JwhKaa6kPRv2uOnD>OZN zesFn5D7CK++RNT>M7G4gF981T)|zS@Gy?)tk_HpCluNag=^AfCR?5vlCAqEnXLEXC z{4rOo@>PS4^->i;Z#MXI5euZsBKdFQ|G#GJiZSy@O(9$3FSE_=eD~>4m7J(R&l5db zzn%*+KWyeCyPc{9G}4DXQPMt}Gfl&}8$L=BbQbEsf4v}qxT2?WK;2)61?OFHF*Vd8 zA=0T=%kD?ZmCr9MSV+^N=hQ%9r}qYxAF0fGuwTnN^@ewR9&hwp~FX6R7ObCdKRVw$;r`?f(IpS{YLvf$ir4ZcPXv%N&6I0 zmKUl`WsNaf{qc)GlF0AQC)!88vWMZyuV0AqMmWp zHBcJ}%s#eIz(ZY_lN=l7t~+;qv$J0>i`r;x{U(AGgMl=xnB(;)A@!INTnhkIdU`F2_sY~_f4V-zKwoi+7*=CuB|U_@%Y zvFcj*rHiCIrjlQ;cs%8uonA10216N9KRf<{?@a>~+Z!J*l=G1BgE{s(T&v!j*o{Jt zXKR@m7{1tPqyY+!2;_R9&|v{1-om~wK%t8P->C0CrxrP#L)Sa0@J$REhzh=WRRkr~ zAcRLk-eb9U*Y4C5KB6mC_koicrF85-;=)}Hsn9*0sfy5{$1&5S7-zn1A!3&Yr)vsT z{Yu?xM$+`On*)@Z6O(KEL3<=f)EM80Qza@6 z7^a3aIHap=We{11rn=8OFIByBha0J#b+{E?=@~l&hU@oWJKAMD%+b2{yjfwtLfs!%WQ1Cy}E^F zC{;QQ)}|(<=i#YQIQEXuxJnqPB_+S!CRU?xDn?8tS8`@%J69X3M*AMrx0u^S1J1qa zqptB@Xm<_|FI!cqa)NV~=}#pOizdIv-1BFhlgFL)<|!WY$#&ke=PO_60*V@)3WVNO zD1IrcjGH}#t4XI{yC}~RWV;dKm#@EZk-PA1I0-dh24gt*_C|{rVLLSRwSzbtFC!C? zqVyPn{ZXlz>t6ESCRub1m>!RbH5@H#oHMZ3m#Jkhs#=HL`u<)Q<1-Y6tcsuGkgpn0 z4Ik&{y*`~6sr48nMfMv-fFww5^GW(2FR!qztVpbgfu~}Q-&ZoW>h?Be<0&+5)-7)# zLDH|vhVp=1lG*{_x8=_u4Dde7wlm2HRKIV!;a|BOOUr% z&{6mpztu~FdwGkSmyk!0mp6E0KRUJVmG;%gZOD(-7f60mY$$0}wl=myBm?`ShCR_B z73z!L(y1P>x!FETneh`xL44lRB}Nqg+vYe3_4c+y1%1cQi19>|3mdsNGN>fZx9#^a zu_g$4uf`F{N@}1S)UL!h{B`)=Ndgp`&!SeTa&IedS##0~sK_S?Ug%aJm^7xkggpA$ zI_FqVTf5&hifkoLj@9}c?N%6({qM^tzf{LYX`dG)diBIUX!FJ9qn4v^)-p5Bk$y&7 zs`okKRMTI?Uf$O^Hck1aD9*wkufVY9cQ~)~RS-*t*qaG?~RAni@bm08CV1^}d*2OLKIX4M7S6QV_y^t4QZ!QTf z8`6wJ%%x&lpK{G+CKKB^<~z6UV(UMWC-#$BrZ#lDjyxD6QpX4oDW0ndi@7pgsim?u zV+JjY+lv1&33JFc{qC*kRhn3E10NU)p?7SBR}s}8aJP*N(C)X^Z9m zZRsptS(vul3uPtGsZO`sD%>AYw1cLO%o5ei{a^`&^PSU57@zYschzrynd}U`yHB(A z>_|LNXjmBF=`!1yd_GIxmi6{3&c>f=V>^reHEdhzmy9;v_!xPgq?1<6ZDTh+LT-n~ znHSL5%yG@I^^qlowk8yWTw8k+liM0i&;$>Vd68FAmIlI`$--mE-}ENG93)v{kh)ui zklnkBOu$NWjwvoMo{i^u z4^Dc%3R}c}uo?NVy0<0i^R6w?Np&Lb{X(Lf6OSSHi`|9@m0R)Jyemjh_%uGP?qN~B zQuWX5xtSS!J{_-##gk@V+cMhuVA9h+wyp_`MUCG3^MC9CfMKfzIp8HbJG-E)Kq6dX zHnwyDIaVy&ln>t&4IQgApDJVyI9MqKX{;3Cu=m~zc6mUZVdS@UL-DX}qqgYLer>Ar z$JOX)8n%{I&RZKto_`Q$Q2RRESst_l3ic1+AwBXO*%UA!BPWkwZF}Y@dHr4_^XJYX zEz7SGSoeKGu$2#Hs-6q#FlE%i_r-rmzpyIjjeWdsO)bqMJQJ*t*?+@k2 z7vI^zLaNN73J(o2oq~dbanc>sd|-#bWu3?o5`yv_vm{FjH6)E%ZIZQ~10$BBUZ0g^ zNcl!!D)Dnl)0^jF*@w)Jbq(>Z;EYM$ZKEae_!@vms&V#Pv-a@!#&qMw6yKbGANx2o z%1^OJ?=e+p1q(w2K$5?9yyo%Jhu)Zye3?NV3me-XdueHDw}^!WK9$~VlzqK&X0Ll* z2>W1DSutV(=)7~wu7IbR{C@Jj-|{Ym63j)8j*eG>@2@BJHZmC_AQXODNpAgVmp{j`MdPW$F zQLh1n+LyyqXCkPQC}PJuROT@ItZ>Ar{@-84I!DWe0`=1|*%&iaEkG4;a(E1ov(uAT zZjgZNf(%Q1WY$9GzrUOp7}kUm#<(wjrI%#tRORY;2B9ymH*rY|Sc#%Fg2Bw~^Ug+ilP4gE!_W!&^WH;4^zpPVlFA(03kUpr%$~FUB>BiUnAyvL{&6#uwN zVZ4j@_(H7>FS1R~?O-G07cf=q~5S!TsD?7E{)KrZ*ihJF> zj0{zUJ*9NHsRqmb73flJyt+$_pe>Wo3U9??Isp(C5PtX}MjfA=T!$0PgNw8Zot@v}2X@e)Ogl>WFddvho7m^Pj%f>wKs+N5?aAR0o_S3H{-3f6p&F1#ivi z;c^Hj7FMIz#M=6L{=s1FsY{OA^tyU$WCUe!9i^=6hKcgVWO<)| z?$g81lUVzR>I*8&$DmR4_MrXJ-}AuW3O;Q*Fu(TnPXcR3hq1a$uMjhUAh7vpI$dT+t^rU!MQ9Gr_t~ zkSA|FfiFc0@x9Uz0j&%0r@U^y zp~Ne1j^j>U#@ln_dFO`Z7d7p!qa@+?NIZFs<^MLAhSxtJU^O@_JHO_zJSi#ZuuzXw zcbctUt!(H~Si5WAeP;AOL0!Et#*96si>e`66G81~g4u7<6#na9du|4W9jzikVIVnv z`1eyl3Dkj{S5M18M(1IPTQEG3MHxvJadO|_?+at=AGKf7*NG>q?ot2m85(U5x0g-< zW4{Na59Lt;+H-?CPMyu0WW1N2G$_t|o0v}jJRUCL7<^sFSqwE5>H9JsH3kb(fsA8_ z01TY?IW~4|0E8twuoUaV1%{0rHKX)s`}&cTR^NLQ5cOl{2nYyjuspnP-Fl&~p)qhm z(x5oYha7aMk@L#={MzrRV);mog;Zh_-rwza6iA0XWJi_ksLij#Iy286NTF4mzI)C_ zhzzK{72*WPb`@1OIXSs^4>|06bSqPRDhv0okrv~3TN`^0reH3BlasRujEob4$Txqr z=sV`-p%vI|XxbUnKN|xqoTRi);C}1oNW*>Z=bKGjL~@505JB-qMf_MenCB`j?+gE# z#$067bfEOp!P{H!Uvef5U)cMWTROquHEL7J15E5{J#2u)NJE#8Wd8C$*Dgjt3j$ii zSbiHD8!FJlEJxa3a!Tg~hry}9YiMZj3OFmVnF`}B6As7k}lIXJ9WIPS94oS8GpVTshoY83DJ_4Tl$waRs)H+RfRUx6~> zTR>oq*4-ohYZ$&5_kFlqii3+Ayi>&^De2t{!a|3{^eQSUHDY37dlCe+=auEbG?>q0 zvvyJNR+KRaUb$uyNE&ieKi$K-j6yPT#<5|tsaPBZwzI18Da;U(U_)NT@ z<`UGB|9eD#)n%pnKB=}HuUJ?K3WxKB{^AMq^MVu<6cr6k91_#%OTp)DhxWmD{tW-% zDLQJ|a6#<4tGtrsI|@Gi0SS|j)XCFq!>VN;3j@O_x=CntnJ^1b$wa@&{m^TQWYwPT z}gx!=rRw5ppm0{(S+z2<059?k}(^*R?HpN!A2X}lBy7c`Rd!H4~o(bDy2uxxtM zFs5C290Wek%Yf+X?`h;StxBvOjvtZqRhN#1QIlfKd>%sCg3o&uPA$LB?dRKB^_Wpj z=SNTXyZN$CGje=cOz1Y zZ=CE_FNxzhr(Sqw-;+uczTK%9g|VM8H+Z=y@1FZl$0JJA zsX_V4X3jDtlar~}+S64!Ya)Q?DQ&>u(^+X)&LW@OQi=-~R!dO@9b`!)A-fR*ze{X*jIeP*Jn^8#|)g`27r{_=4$fz#0oAkX4ANCc>Ojlm?!iA_nR!54xR$d_s z$!_!cPl_$`03J`+u9VSp{6n79#$&a3u*=0}4@^#t85ko0f0i4u9570Lx%G=_hwHX? z5@3B?;Uj(@BU{}v_W%k4kh2ju|1}Qi6Pq#@8y9zy;`#fN7^pF*QC_;U5ywFQfWW)= zq;`I;@o1Mk9APql{5ZjJwmHJdtn=-4tz3g^7#OaT|AuL7(D)F1hBLAz^7GbSN_BcXd`o$syq}B(!_V31j%Gw|k3W?5su{8Dw%>L9}}N_eSlIC7Hv;j3A)3 zry7?xuVn(u*0=Y)N`AgxwfHgkjoL2P%JeI@h-kR?2cu+8hkB{yYEE`XT_Bs%2wS@# z?!5R79$aRXkTBI}clggzUslVg_SbH((d(7#HBl2FZ5Eq1IswVkZH=7A0+m)f_K8Fu zvlTAO6VRbZY(!LG(oklBMc)TS@F~)hqodlxno=~hwDIUCF<7suJz2H8W>-G~)9X*BpH6ae(R26f#`%NTf3 zEG#T_XK-?~`ZUG<7D5~t1woB$K#w&8MqbR#C)!Pvfyrs#yic0Un(;xib&-UYCqqKV zd7S@=Tr&}075{RNGBcuUG1~bl3%&k3$0rb4JP6JRJ7%g^*aaJMV5v;Ihnkw5&1h|H z#fPEKHP_)wZI@GEeg6z-+eMr}P+!~(qQ9m23zWd2!$&DcGHN9zB#3^>|FbK14mAcF zzsZaoZ+b>3T}zYM;l#(xtN8u-Wyxmttn-TCi4s-6GL(keQCE-6SIQs&K8p>=?lw!y1@~cym=$Rq!(!Tg8EoiLjO93&Lb~tp? z?M|>!u?ur^xrvey^3x{*LfcUxO| zdru+YL;FBuGin0lDVfo?)2_I*baa)l80>=9KOg=hgxU8o8pm^14b-ON*V?x9ZV>K$ zg7-j1bORo|wtZmCqZ1w+O-@aHo!sv}45n~`=JkV;Y#Xp{2}=_8c-Kr;F(J2&@A6GRvY;KwVAl#9Q9eTp%a z8LwAy1z>S)dT*esJ6=4fceD=l3*VD2iS?JZqb0eQAlnJ8{sIiQXa8RICmyr+eHsdi zKi`y@eI5#=EKi%nk=Kr?1J*1Y#%ff2FsMCeKde zI(RErio>8dM5#ulXx=i~)01}8jhq&(L!s=lu7@xDZ69<|?1EH&p3R6ihJ8f!0EHS= zX6-4mlmEBw&FC%OK>Wxu&BYh#``}A_j3fg3;hyUn*m*$|K^UPl`>*UI zgi9=}-_@a_Jx+Z+hGH3KKm29?@@J4LYtV5a{ZtrT1zS(Y4wCizRxr12&MgKk`)17|fq%+&{5QVXi(mGbStw`?5D*GJyih$X8+{JB=KT!N~DC1GA) z90CR2*ZHgCBF4?cm005!RpdZ|Jmp_eaN6i+P?CUiDU8Teg zZsHn2Z|6QM@(#Mj^A8V8V|!+GDPJP0U;W*n@jQ>byMi(8LgoFv0zC^GVIxVPH&Yt)8_rC<(Y&TNx z(~U+_&5`r?C$mv9DU0Ryy3UBRb3*m1&+%r9x#y`bgiT_^7*L0i>D}5pcV768qtMnX zm@NRiGM|`I+LFfzG}Ff>K%IuC*COnWQCtlW&knF zWB7}yolDSLm{r?5y&s?8S* z@ghWesntYBCr5iCkcx40-PFOErNWlURTJC6?o-um{DaRk1+SOEHnq@<*Sq9bMy%F20o93XtU70w#n4s2%7cH5Y$KYsuI{h+6GYG^2aafZ#wcHcc$ z^N0uV(vacKtc<(C{kZyH$&guao|HxB``$0`(vZB(Lkw=_wU-M4qN#pE?ix? z30|NI(v^~u;$p-lBn}J~fByvcE!==KO}A76%1ishqvmjgb-Qga>mZP&waw4T^cr9q z9R(QvYH$cBGzI6Kd3kwB=omu2JKQE!c@KsZK9H5I9|qf4Q)p1{Z&T8e1!8KECH)f< zwr=fTI}=6tN^Iyc#9Q>M0AYjouNK?vi?j|+q(&QZR*uItD#pV}QTHkZiJ6PmuCM-4q}3G~o^XXo_#yh_-!SJ=R#WTYL5HWMnk8jrWrL-AQnX)| zKY^23g3w*V>cO2if=w+w?x88OSCVoUFq|W?+Pb@CP9QiiQ&vSLX&sd>OQ{@IyyS8<1T}%U#g`fCCAn<9Rxue z9Fpr%z$^bYHb#saFWg-qM72aQuT%3g77HhdyL=uD+6UbjI`e$$CJO0v@XG@SKw}Mo zkx61+k>HF*&djG6^q%)57e%A$tH`(4=6{v_%7kId(ug zEHYf#JvgX2x9D(sdRhbJ9G|=&$*HN6Q@U&&cQ_s>NKoRpys(lnn1JKO z6@XO-vl8A~+datcpU9IoSEIUUzDMNGvcJFo5q(^4W%e4DfoO~c@T0{|>^_mml0_#Z z(0TPgLNq(?LYz8tMTd%tDoLxvdRQcnQRJ_8=ouoWAN2|*?l>!rYKA33=RUSDBpw|I zc^%Bf*Nzu;MDtYZ<*!@GKsD9|c#uABTl1Zhqm@vms@2^41Vu2X-S(05=hgM~^H-PY zI8+*9*p*dJz=RB~S!2}Jd@V&vmru7+&sM^oKR;LiV(>M9B6aV&osZ?1UhK)pGV4k@ zh{=xn*J5CpWi|d9LWCOnVtU)u*4DPL`Us|kWy8FPhQXvDA{1IEI4$EyL5(VkQOxlw zE9#i5KGK?ChMsWS9yOWCm_P{dA5h z1PikOB3h<}cNsl|Bf~fe>57}rx&0CXY;`azvl8o7ag^lbo5%3yyRJO#B2a*fQcaQc z=<5HDcHDMVn@R(4eoA*2bpF;l$s<;y9X`#O{|pY}g*4~%J$O+_7jMP}BA^kr3ZGZR z1&_N5%tmSL%dh$LQ#`=%`R5UNXY@R^gjXGh9C&lCBfeI^ZbCBK!Umlqq_%+j?E??p z3n)zCWYsJXAvsq(ZtLPw%qlH?+J84uc$JffCl@9z^!(oOYy?X-XchbcU`;1+_oNRz zfD4>Bhj`rdte&_Jnf=aRqoAZzvjG9}yvr;7Qrqzf0PxlN%zS(9q&v&wDVW#^-!xwW zBJ!`T$18R!J+|hn8PA_T`VD^HrGV?Pvj7A`;K*w&ATQP*fM9ua*&hO_$FS68z$?QN z5D@5|gq&DrcTW;M35jA7iB-sWaN~yGBl8XrVW~-duJj2=<9&}QH@8rGXD@wdBE5^!&r~0-$zz_a^j(?ZR!18sC|eXAy?69Gk}!kX%r^eZ94fr_J9?8(Gf+{ttdi4QV;k1+L_qMiJLt zK-pqN`%hpUJ+&V}{lajktXt-!k91G?rdP!&_Gk=Z|e_pDkbbnKb#`({zs z7>4+1Ho`hD6wMdm;3i(wvic>RCu>tP&lilbyFglvci|{toz(I86z)31tra#!p^}Cm z;<}?_#8@ha2Ge~~eXoS}o+LB7voyC$_a5FP^RJnsfKUj07|XHhFf|$rv<*IarI4nO z&K%I?E(EmNh~fr3wJwi%#GmeRcC{O?8*kG)ymw0=2eKum^XI5dM~gf9^Gr*k&f7sX zOsM320iopQH4kZb>ClA$gzM>;ArWrRP{S~yDVhD>A2;@Ow-n?=OOFM#EB`LT8+BxT z!3NSb@C({+pay|Xh~+;$Z0PPLg~%?t4R>6Lh1j(EU$Y$dq?(xOvFWcjv@6g=M{C!~ zrQLvm@6Z5Z#h=~7$sSw=8q0G4*$Ih=$WtYEb8yGCk&%%heqa(|zv=)JI-5fI*YLz# z@X=iqtJr5hg71!Gl6nEEkZYqL_YealD9!9N0}aV}Irkni?Ck1K`c! z_fJl2JUn(#a|EaOxAo1&kVk|B`^C5&Zd+vA_hgop(LpI@V{?<9cIVyTvI8>njQ}cS z=RCC`!vjIk;^Ja_fUZLFsQmTme_i8fL52w6)4Q%;OY8(AO8>_XR_4Wv7ibtPDl|M? z!Q1<|02e*E2yCcxRBl1byRLj{4M*_p}c*3LQIeSRv+W3#Db!d$S(}}SPn)R-!a?xkLVpz zQexxg{yw+LNk#arxtR?JlYs07;e;DDHo1@9z(c{zF=MEmu~P`r@weJQx}MmEDlln_ zy_Rzh-ORn4)i=Gp)CU3=XdS)US{YE+gWqH1_!z_jARrw-iSX9ZVT3{KAbM5N(zAbX zz{<(_soQQ9uj8rE$m(ko!8bs23UNL=I5?O zmKqokSrCGN94BXE?Fs=F?zvm8uDj<@w$#|H8Oxn-;^MGWVg)g(irqJ7NVSmLXk&4E zkXQ-git$o#s_Ae9j@+QSD5hN(iW+z7!J9k6gA*tIEGDSd*7o)a+Pcp$(A;u>0T2v} znoxrU%2I;?zbH>u-xBnt?(6GE!9_@NoA3a_9{#y=7ycNpFl50Oui4v+{TOb_{>Q@F z*xOSE5H}R=#|1CF2g0MGqM`;;Y9Yk%Jwd?urkSUDcK^-Ww;KzMTR^^Q$j3`fjU28o zIT;zhbv}7lpAx9-kCqt7lGV6S@#g3m2oCGOe~*{gX!Bb|hK4@fhHKK=(a{KK1=FR}}PHAZ5an>a^DfNTu5S`+jkkk$d9jXiGpW0Y*Tm{90HT zO;#zQV7>0aVfSrZ2Iw z8rF?2lR`n4gM)(wn)64(AWsFifEC~*?h_Kn`|nOcF=+vW$4b0W%)K2DAe2X6zX@H5 z3SdH@&4m6}E-J#nAS8$tT=Wr}4jDG!@b-_68ewB~7t+3b>0LU(GUcbc|L~#EM=)G) z%3!~IT(OFjsT7l>yas-kz#u2m>R3=6Qq4A#y^>Y9XixWdy<9pm77vqWy?H@{aO7ZsS*Is=@k`c@;8Bq zkn8`vv~;ham~oqmme#!gLWcqWHiLbapKOZJCce~bFg{9tQBkB2Iz+#I9sKeo6*eyJ z2+traE5szywHMb3vDS`-p%!@o!dTl2<}4}{w{G1!ydH_QsFPcn1#?AMQ-hH~5P^IK znr>Mw&3>{>vSfinG49-8+aj!6?S+G~ue`Xz%UdEroioQ!_j?b5B^bO{xw;R=9u#uN zPOBuu#ee+#`ODD*fD-+Rx5=;-6cu+45@KU1;NX;PGafzwS<&{-Yl(@8A@5VH9il~c zL^xWNX9{6CewAP4Lb#G$FB6_S2a=iVr?}(5(}BwZ9wK0(wBF!`uI_lWR4H7pz`#I| zuB>=ilC`m6pSA1__kIRYHRHzWs>$L(aLwUHmt|Igur2sJ@Km{xJtd}%<9{1b3JO>Q z{ny*cfp`ls_qUc7ZQb{SgM%61imrqHH1I#MR|^++fDxvo;gQ za_f80U3Gp^Q&8~3vaS*oYz+<5M%zavg41%cd9CZ;3GiLJ=9Hy;mz?68V$O0(rVfvMsZ^&~>pu&@Mz_PjM z{{m!y3zBFn#NaUhoqn0<0UsamHem2B$Hj}~KP`b?iYGK0*Ma=l@r*aGwzRS;Ivj`M zuZ4%#tVB}8!J?gqSBrsHIMe}8zQSb~1#OH8l!4oHD(ma%xw%&{Z{B!lD=9T=cM=Lj&Sa8+V2VI{N_!39bAj6V903BmeiFR9PY%-q-3UM^4sOjW&!U>Y2z z2OsV@a2gP|{LIcP`3S-LHkSeT3XqxY|1E58tb3@;u$RZ!-NNlIEN`E$cO zJK84nyd`W;Arrs1c-ez@BeA*o%+Xp zqiqyg01>J^IrEB_*%+=Qt1fJhZa|L$ZcORIf;qHCTEOM- zsuv)qkT3@a0ZNk)XM~1@K`$sJ6&0+;nYYitLh6mV2kC7XAl1km~6i7*8d zlT-DoHi)GICC?S|HM1Wla!C%>9xL`Flk=v2=zxAnQ9fMdH0Yy^V3hXR94j)cF3yl} zzmM?Dei4a!9pLXD*JoKSrB9V9?8+eF&0t6t7+0sm_iLVbDX+AY9MqQO!ANn3My>^F zM&=S#OvXT43HXJpluFnu@%l9p$YsKaSzw?*3;`#PsXPr&f^pYJ0NAw)X{_8RWAq+| z6}DsnNqb^uW-QP+zq~}0Ho^JB?UlnS2ZD&sMn%KAp!oUo!Wbxa`aF0*41IfXv*1f( z0UOU4c&?E5P@RL62A?%b)T}6{h=Q57MId3Zv@TU^lfCG=dQC*WpeZDk5SAW8x zuKd$Kk_~t|;ULiPAwz5sQ=M>4;eJf-qF$F5%DlQ z93jNUKL%m-C9b^iTpbg70(|`65=BK)F)Lv^u%w0Np-^`oru5dLtL~G>-W%<&obaF1 zX5jC)w(<#ru@Nx3nDLTUmZcSWELKzP4;c;AqnS5KwGfE5AbwoGceDPJOAPDkpsYha z4nL^U4cU0;1+I*|foK&Qe^wg6CWcX*0a&#o5)u;MFj5#h2&We@ElMBD$<6KV>wu=! z+kuhmH#54rJ7hLFwh z7#Y`_Vt&vx9PZ{IyLp*U<5_e^q>oMy5yWY2pxo&?A4bE*#}`MXD56Y2K)?!iA4m%z zTL{h@#!1h}88@GgRgTP!1l}R!YLcf}p(m#CzQ9uv+oaLXUDI|YuozH#3U3I6VXD~B z8!Eor68!}Tj2DQE8I=w`|B*99>fprkHA1idNFr`k+ zFRM;B9w#V*K{%)|#rY}%aYt+MpWEA>Qwu}PP{iQm%#Awn7T5oF~6$yl0CL5FMZqu&JRGSn)lUeem-udB&mesj~GCvQ@_2 z!tzyr`%^EfwXmTNXvtwnn!Pr@!~#7)lJVV*Ym0_J6d!F_4hlk57k`yWTHUFsbA~Mi zLF~PF8UH;2fCpv*jeznZ?uLB5QL+fIIc;hszwb}_GyHClD(pjfs%aBy``c?E#u)f{ zWW@6O9{Lbpp@)Ec=)%K%)berNZOYDZ0);&|ji1L3x=HL6oKYpyFAgcC4mrxXn~&Ig z>AA|p_itabYlBT#2(d1<6I|Gu3`WK3vtAp~C>h_Sr=g%isJ>Md>!Mr$PmYhOOP78i z^v=}WGa6=t{)`{$D2kFK+P`3}LC@&vt2F{T# z5Jr@LUTAS5pRjNrYOYz@05ZjOb`@U>)N}x7#V$rxI8I|SdUVvTbIVG-W1P)Az_~w! zd?2AS15CGPV4!QhJtD&D=?yk|Mkuis-Zui(Kq6Ao^VQplNlC-@YmeAfIC*$FhVria z^}icshRhI(g`6a$q<&%1kQG3cDyGLhHMaYl4Adk)Ubr6jc?+=666@;A_V+6uWcQyp zok`_2EHvPbijF=pr0m=*?2h!(XJH#08Xh+HEISXJui@VXSARfPpt%2D=}dOc zy@^l@Qb+pTlSy*nS10)qrupYvHDa!f=c1Z05(RR^9>t z;$bC|?J709oqN6^ZtB1_nV=rAXmNo-&fF)*yUqN(+}xjvVg5uiXOs}(=?1*HL?-8` zZa_bFu++>t-RU~u8hM~Fy&pdK>vJT}a1pgBDv;kt1+lAiv#U&9j9M_Pn#o0(LiGU% zS55JglS_J{Tfo)XGAy@z9|2R5JCoQQflcdrgb0iHIU~|Q?s;q<8oWE z4@PhEz9(w8&r-+)1+q^RaOBJ=JuAbpvn-g^!5vTrk;DF4hEH{h_mH9D?%VOz0F(_( zt@q!AQ&S<>%u?qt?DWp^yCXJk{_CNZAio*)t8VrRMP)r0(Ng6+8%N4lg92+?NS^Bo znbs+Avo_fIM*yEjddIGSkf%#40nHr1gfqN!km#g?r@r%c-q`*<_~fN*L>6*n;OE(b zcEdKk+&mYAYYYrASiI&?{nkLK*27pRNGO58<>nZ4Uu~o?&mK(>lJ{*Ten^rgnJlyB|M(6e!&~l9_eISO{g5E_Liq zc-fqq@-WbWS8x0!Lfi~e{W#$^m-U+5HIZxcW0lP zUcHy&PpHB!Y(Q%_KeVl6bQ@N`fwbKk%0qm~?=72`U32^q9UUDHTiYKRseHHj{D50@ z7m6zzkZ{@iec_8*h{HZVeC5H7q_4um0j(ERe%|6r$<34u1Wob71a_4TxXrPdrn$&m zec6fX`QEbqmi!tKSH80s7O?gj5L93xbOT8+vZh8{hlnEaH24KgRV@#~Mg~N%}dL*7|I7^ZPH1P&9+HGJne% z<+qNHrkV}IyC5HA)Du``Nf^m`ZSm6_kr z-Jn+5Qbs)i|LZ}R(hJ7wKW=NMDo_w>9*x!3|nM-D)VMnop=&x5AJ1LxZ= zXzGh5xF#>paJS<@2xpE>#J_YuiL?>HimO;zS(Vr}!9W>^zQWxI`G`?ucj!y2KLoY; zuKsY%C%o*U^6soV+ks4bYD>_N7AXy1%rS5+#+rW*tI0K-93K)avf5Z$S~9%v?KL2t zGgcrMa=7g!5`@fNri=ojsHUc-_W?$Ae5dY`O48%YD#IG!JxAL;j1N?}C>dE!#RxXOgFQ(G-HMIZ^zFSf5YkkgMX8u}d^1!!H?CIllYltlm1wWI)o zEP&GC)A_@WL(x9R3DiqZHM}CCx?!*RPdI9tHYegcWZ1)~8( z<74nZ$F>h1)H)TOipApQC^gtO$1KV3vuHn5UAyHk0!RJcO!n9ph0t9@9%6V=XzD+d zf`aHDm($FG&*Up@;{yPgF6GS!ZBY7j*G7sIxfjAN_}-~Jk+v8J<_3yHMS@u`vC-EHjW*ANa!_Zz) zjC;&Cvj>6w9uBOrS%e#;2HU&a-C>vs0x{LEiz>c4l%3^)p;1D876Z%}7X^z9BaZIQ zCF9V$G<+5{o1wp0(=PDxo(4;WrnxrKXPqCb17yN6HoO&&;hHxQ!NIs`ZAxj7y#UNy z<9OoCfC;rc&~;-0jI?5sICzbX234~ z1R_R|onz75AvDJMo1JABNIlhvC$Y9@duLx?X8EFMR|2sGq0m@d!@z1p8wLicB z9*Bw9qD!4iAVz^j*2$&^8=<+x9TFa_p1{iMB+2(QiSS8_@nv*31Qy0^bA{ z>f)Uc%{EvLdu3DTOnt?7&FC^ax&@9Natya=uJ=-WcCP#Hos{IpkI$1`UU%V#T#UT7 zkMxyZQNckvKgMm2(O+Et&{%KtL;dVKC!JU+ zFCu=-CC8)MgfIB;Rw4S#9JoCR_wOvy($7*9MB=EfJT2RQL1Aqe*tE=JOLc3Q%N%b0 zh5{E3MW9f}sh(2tF4A+4aWT(|J96kH?2suXpFVa?3Vd3eN)#cuSAKD+9+2v zdAHb%srlr84C;8~rasz3{%vqf&)c+x78ht5N65)8atI6s->6Cjk;nulig>kiOKpbp z{k@wgS69~>;8@MbGD}g!@<|Om+5Dz|!Qk|Ob>Q1^mDl4>5)GZZwtR()rL-QgBe7_j z@Ln9W<7)mGrecRkV>yt|-Al>a_ zxSnCd327@&x|iU>)kQrzCMaN^r!n@RFgG{XgIl4OajWgrr5N#>R^{}4bBh;QdbQ-O z>O;x2ml%^Q^|_`NJSrk-;#Lw7XhrY;^!TczyS8V2C~rP`@69V@k-K;5n!it5khX@~ zk&wcpnq%ez`0F1+T-)_%HC^Z$|48yuv^F zOgYbc%6tS7vP^jb9b#Ec1p@O?DkPjUpVi)Wew=g@Om`Xjb|*O!E=i5;)3fIuH*}b_ z&~gBE&llpNpV`RqeuzUE3;nYj8sgNKOnOIaWUhf`7EqvI|e)U%ifUV2l~hF?I-jJ0#_CC)GdGV zTh%PgINmROuR5oaFIuL)T=61i&K8n1BF&4|$89PQnFn=)>e$ZL4m4$p&nS|2*)C5h@iNMcUhv@H%E+-{PIB9MxvCgUapCf(b%lT$jJ}5}zA;@KA zVF^l6xTb@T%8?EJhV0NOnc64fX!suL?g_Q}&h3Kr?OyG_LF%d{_vTzI+lpt>bhe*k zL}+p>8y+EE_#t3!pO{bfx(lBn&z?m=G^AUu97(9j(IX)2M0j7LHmJbWuPrQug+)Sw z4$7`Zv3~E2w-Xou(}=r=YDI+)0Ww^e0a;SSyJ5oD0B9$a14=!&QVm0|^&m@ulGb5ebR875Pxm zU0Wpw2`dku=4yr-=_>bEZ}KYdix`d#_7u=;sgzL&+R;%8$zR56_=fA>7({MD_m%J7 zVDd`^PyfPT1?|^-H6?Du{^1F=rE2({6>A;3^FibMKkx zBz^^TQ%dlZdj|*Dm=1zbYb$icN!?M^t;(4)1OwfBw0Ebs?;LV#^b~l1mbnbF6)7@f z4SLi|VOK@JV+i&gJk!}d(t}pKgmpUA_z2JyBEJVe@%)r&4-!OSZ6Wx=jDqQ{=BXX_q8_eC~cUdi?U%y>zOn`t#rSTiw(*%HqO5F3PQi!u?pGqM@lS1R8EK zw6Vgaf%SIfiQao-UgtNY$@dSuKU;!4uLYJy%LG8-Ch6J1IYK zP`~mTUDe)hBw$X~KYP_5o=udXYL}k3QY5gR^9x*p&)MyR6m0AVouU6H?fiu zd5`i7@8*fBir=>GQZl<&!>La8WG*&7I_CATfp?nFBl-J}h{Iypbh^1eSG{I>(Byhf zU}t021j{samh<0pxvV7xCoqI6dGq$egxhcsM`kGZC2kkk7Ri@-O20j(I8~rQ?nuw0 zYN&)XxEaOwA;IU4Kzsc?9w_}X$0-9~pHIagm!_@W} z4eniBjQZV$VNQuF*&?|wMh{lBoiPsmi1-la!WYs8iWl@5tXFexw%8m!a0Ib;B4_6f z%&aJVe-K_cFx#72#OVFjr%jS_`ZwKY>`$|CybaW({S@3l$RO~FK);)?sP%y1klV^a z&J?C;{x9i?BOk0lgj=C1ckaDQIqm3W^|MnNnX9+o8IHX|mIYMAXLt;X%(lQu`%|@) zixc4E+#q|rC`Qw}Xp56Xwb*QOoeRzwn~G7APPD< z7~mF#;|Oy)h7WK}3f3z(Z1Nbww&hIr(yE^n;dWUGe%Y(?Ftrfoi!PJ3{^mG#Nz8zk zxgH0mB_e7jpnEad&E)4m)2)wPnA?utwZzkd^tWcdG~-M{-0~@;sD5CN8^18)?KRZ| z29qqo+?vUQ49qdcLWG!zsFZ{j79tTEy>@I2^O|7&&EmDd14M&GPOG)q#Q~Sn8*l2J zxc4cWg%DqEl`9Dlu?=Q`^?WFU@<#&SiE(I@$_|E|<|vpwCnDD!B`6v_f|c0dgUD`N zx7cW(tepUkE75*OC;cE`p8vT!Ya=akn3inI>h=PE(&SWoW=wl&Z&kq|5gg4yBM`xo zER9PbG;C}O7PhOThwpT%Rgy-yUtsx6X1Sg-7+&Gu20#2A%lQ!wf|@T~0+(Az?URf0 z>qXTvr>jV4Wp-pZaFwCr1@nFnq|RS)*b@ShOEB{}>>?|!w~NAkL{I16AgMc&N*pw2 zIWL9N(q_Z|fz;bS=dBo?+#N&jyeG@NrmiuEz|QcxvG+5^wP$syPgr@x>o;Qy6oqnb z9(^_k&W#`9`6%hVC6o-W!aHYAM@L4=1Gle)t^=lN7Iv9}4}>BY+eJMyQR>`&7V~(G zG?3Ze>vupt#AE6+rjBf!kM37BgX#`yLi=qs{px(lWBtm`fHKeFU_L>bQ>XFAIVhCF~1@@b@VUOMmMUVb)5Rxvy0`HQbh zeZ$b71+g%L+y3C}CJZ=K&y=JBW)XIlHL%Ke)3L+`b-=QnsyR`BA|T@K-_=V3ylUAE z9+haV)*&Z_HzFR~QuXOWWSyLAgA8v6lyO#7)Q>z;KF4JswJLa<_j*!SpHubgfjQ3k z3bxEq$FytQMS;vI*wy?`WfZIhntLBQ(E00#5<`rt?=3uBjyNPqr@>@lZjG*=JvKI# zZxukG-**3WYJ#A~BLS0cPfFNJ5V~QCZ$UX1D(sMhE0>hpRo0ozyhLFsYj3xKCQ*Ph zm!|Bum{H*ynYtf5jb^(ik=xlwbFe!#_JY_=T@^EHH(SCmWKemp#}b#X()Ki+r|}CQ zFHVYBbj9c*ThS&B{VodEM3nhG5KAE)+#yb#DUO9Z$=jVLRIVhiXGVOtbeaP7uniG} z!e4s5W#y*;E`+dNr+RdJd~xKBcF30#pqT;l&Dqls%2%WGbU95zJn_2vDH8YWJ6;9v zC~P3w3Q}?72Hq-$OeKo1OSY|dUfZ@pH{kjNs5MvvzQBl$4G{m;vlK&-XS;f2Bg5r2 z-w=m0jh_(X2pQ3?G_}rLqVJ^eb1Ghw0@MrW$~wX_AgivB|A|#XV)AYMV{Tx@0;3Ih z0oI=N%6UJi?xReV8b~gkSJx3%waWaI*L1amap_RsGtDjR3(x#^o&m#~GBO(N5K29> zbN7{%TFCJc9IT>AB38*oz>o(xRguz$dG{0*@*=aY=F(jAt1VikLN%n!uWoH8z$7;q z&I3%B%EKz)B(2RhGeiF~6G$u=O=)_1iUJjB)ZR=6WZ|Le6cIly&`vYRJiK7^YtVQ! zZiIHLeuh_1xc`(p+he}<6Zw}o86=X0NSzW+W`&w#y4i^|5sGQi&}=P<{n3&)!+ZP5 z3uV;Gn!TZFMaRAn+Whp7VS&kHn|}na%rfVS*EpA)8YUhK7c~OCT;t7+PciZ-5J;oWQC)K1MPv*nt25 zJ&V9OjD#}oz1CcABM7IrB?1?XqUkoiR~m-J@Exnt@jcQpw|h>*;nPQMq0d?JZZw9v zF|v*D+)gT;FF|y%i>r22Nu$CXu0Xi%PYx{Q)Rvv^y98g4=aNAu#)TE7$52GO<+3$T zjK}qEr{d0w=AiRuQ?4TACUCtVWoMC-YaVa&fn^VDH63BiS}aEs!e3RZ*=}jD*SiD1 z+wHrjit5yGGDDi1WsBO!^AC5Qy&}9^Y8KAV;Ug8O^)I?`qM=RfSuS67je5v*E84F& z{m31ikZ>%P!RgIuWPoNZY{CvLopjjZ@=atKszL2gw>jKSC;lQN?U5)a%RM|Fog1gH zjywoHQ>=P(TR-k!4RD`xCs}fCjZfZAVBqZLAJq2ka5YYTF7H}FCwiqI1@?B0q=Fz% zw*VlYQ0jxx4^w92m;CDLZbQk)(>sqovf%8Ubh=k9t*RmI#acTao-dy=A~|aqW$0)W zX?lmVX)PL~H}lJX)1Q2>+eU`jiDKnKJJ|Kdl`1uo_vQr``GW7@GS#%4&(6FuU-R;! zg>or_uEs5vo1*@oD))i92(;&|tt}fH8+o9^Uujs`O-9Z0V4DKR*M9*J9RcDMns;aLz>Fsv3WpzvY zbNeh=@k73{pWD<3d7`y_z9y6HCeIiDP>q+!YH4Y~Y$hZpTX>p4T|Hq#?xNlhBhwXs zM;Y0#ViltyQ&+A7qlwqK{C|_+TM!m{!+WPnGe!m0ybM>emO_?7d}NhZ_gUP|dnK~b zUj-gN*Z0abebPA@6si7&c5|8_PiO~N7d6lX#wV0efwS)-J7QPa^A~At<+eREC{QZ zt4w3IY5V{6BfYXiYZ|LF9#tB-GoDPEsS_Rz_B*CjXFMW=-c4~beV~a<@Bj@jWKjx3j`O(*VefyV>I47tr-FmGu-C&<<(vti3)yl0u z(y!iReOq;=v~w8648Q(EeRoVWc4cX+)sd#gUfUfdjWZ{S>L=^PN9_@{u8HUMn><70$;`4t@fO$X(JYEep^MNp*_Ei@PQ56nrsY#LiW{h+QA zyYju1!-hSQk&!fZ`?UX`p~#PPo}?M?`r+H2hU4E|VX;L9O~*VEbS+m7)y8qn~ z6Rv5*w=xV74Ku3dRrkhKMxnYkCEeFG_wlcGxuH&0zaF0`S+9aTkDw*_RYHoZ@aWTk zpim~0#3Y|kYXkz5KP$%FG8_f=d&^^6ed@2*v1p z-=P2buVY|@{3&gI#OwAeYHWK;_0eo%XDX@tJ}Um(Ih6gg&=?IT61sq}Xwg)Qt!r&J z*3)r9SVJONLuiE}X@!ioaDxh-eV&aQ2s}|r&8AA7X3)2t{4RgmvuE?G%T^w#RUmX) zU=NbzujAF)mO?dqxiz=CDSUCKpTa{GhyQwGgg8zjRrz6PEuaT&iixE_N7w(nB*x79 zRFL(v&-^$wr{!N|9(w6v+^YyXgi`~2RC_jmyWn_eDjmK{KFqFq{Lh!65G3~ZbQl}o>YEa87H2!l$w(dz@r z%fDoU4iC%v59b?RwvU$&zMvqY%MUPr-ebeB2EMKN?(L8EUt(KWwM*JMYii*qV zC&8!c?Z~8$HXWW9qUD1QjlZvSB&$WFxWUW%{KaKIFV5@e)NZDY3v+0%N@v}xgjf-} z|Ewl-Vw27fLdo&!8V31aEIXeZCY2MDg)n;S(D$~)E0VeC^d z2sdh^#tacnb=Y4$a1X8F*5Y zWe%qHKX*LQ<-C#MOTR;MrgpEIs;OOG|7{OLvNG$rD7A`C0DcXp=Dl zN)f!4AKbL*2>-FOT%xT%?sCoS#F1Xu9^D zGO4J752K^)ha@!iADgL~W!}g0J>GwagWV{sutKm87Bxpq1Njlg(XCo%q{s&ich+yz zf18-0;FCoju5t(ZJ#GG9yR)Vf2W*vq)Ma-uLOB@+Vk*b|_koey8s?QUo%UrMb z_|RtZat{O^v`>05DJ|W3H&7QP<9N9pdz-KQ`{<~JWUnvLp9|19Q}0C^XT^Jv#kZ@Q zYT;#FvWzeTZCTTr&@aINT9JIv#y$WrP!ehoi z?*1-y#;q|Yik~OxlRbFKx4X?sLW3cp8$`SIEYtD%hIe%CJ;-V7q-{+FVaNX%DwJe? zM8M?xKdLC^ypvDub>?wa(*v&(0_Xy?kTj_Ym-!#8i-J<~Z5Gfr_MaOjN#Zy=eCA^Pg(uLY@mgMOmKU=Zgb$bc%gEf zCQM#i8M12jS{lZ^myVflGiF`16$^{GMf2|+hJZ1PWX)S5*dIm3NnK7xnO+JCQdqmx zQhwUHh_#!y+nn~H%lu{5#jTijYN4OJG$jE=JAZZq9e!;r`=wy0 zQUi9sQKL@i!d-@RdnQQc?$a=B*!3)H)%cKPhRo5-FWK7B z@5xi_T0&v4X2A>gSp5)eojAp=2yi|QSG!&XLVv54BoUn!m{u8GnPtT%*hcriO(zm5 zEoj+*JFas$Q0hL*kKLXn=*@{b#jZ>3dfVA(0V8n|x<99BPy&4#R{wcfq%yl@P5IPr ze(Ak+KeB@?$KI5?b=|p_cykus4@Wj`Hl9q5ts z;S5{{_}zaew;%`~QkqF3rHDpL+@OHkBK=s5HIcPP)DmQitA}a#gX~@4KjC z+yp#%`+ej+PU*1QY~(+ESj;gOo(nh7w}jJ&I$# zRDS$o9%I_~-{xPLPm;!cnwVwgEQ`aaKA*35uDff^qO_C+^M84X5gdn_I2vTQtDQ3MNdM_nu z=g@F0iI#qncXO|!v~26()0R=3GDYjT{oS)t;vYZl8Hj-2;-<9YV8_dXyu@oyIJt5MM(2WhiL0fJ?v6o`pqSk`^+=4dNVgh1txV4awa9thx8t(tsm5F&cqWHqx{Qvi! zAt=O+D8wk!gXlwl4jfV!W>I*+L}OJ&IUS#w-E8jw63>7AGB3PDl0$V+QRH!-L}-#S zZ|5W46Jem^=4IVFcyH4F-bZh%qnY!a^WC22$qPn(s{4t-z&M`LIvb<~K@@uE& zsMY4a4p=U+=phV@*x{D!*rDb=7tXnFj!|#N>(2RgoH)IUQZf%?h^kU;Q7AAhniwhG zuF@c4fJs1<7TlFR^k9GVzrR;s5DhL*9JMb8Q+Wdra>Rwaw=WNAPS@?U+-hQoJhT`< zvZ$`~#jLPDy#Ei&-ZQ8^av#5r;nkY_{$a{7A^suS5zQ1Bv>;N%u6zCKlh^q8_!u1T z1Q@EtiIX~`p!475i<@G?md}O_Q7dU(PnBwcg~Bhaai9t5=5YkB$vPds-^Tb!AtZs9 zfCF$Sji{3&ji!ql{r;HbH(H+1a3M~8sBh6*#WmtW$-e;1y95JJ280F+Y1T;$IEI<< zlDg)|;>3TWM+U2+bci96x%9oF-@l*fb2a%iMvj^jhY2?-nTT0va$UJTUj)IKAK-^) zN;7r$(V(z<)~X~w@Gt#LW?|{nCq&c94;*w!it8?6glJ|{0P_}f1u%TsPsfe8!%VpK zTFmnJuYoKS7vfGWfCWzI>P6Z47*GM8)IXEIM!bLLtAXEK9k$ZMF;V6_96EMPpm zbe;siJJ_g@<&~!(d$3DL3Si4|+T>DJa*NaX1mNwF><|B>$>!|&1jL9h`@N?Rw(TjpNpa1g4E(&!@ob0q{zk@A~oemdS4is=;u*huP@mPrQ+&c3ih!BxncPx28o3Z zE9{^3)hO`}w(#>nUPP;f(*)Tz=`kL#l8j~Hr1zPi^EH401m&C3QB0N_3Pf*QPWk50 z(+s;EN-m;y&WvP=Nc`hl;C%mQn3zd<_kq{2a?o*CBcN$+ex(9joHceVt_-<#ahg}J zb{_|fKYMYe=4TTmGidFjoVTu&rzZP?S!>R_X7!kxl4A=j6w4Vpw=oSK7v0k~+&WJA zxRq%TyF>fbwaIZ{sVIqTi@LU9?(=rtTyoV#i%Ioh$>YE9xK2SApaZJW*QKdtfD0L5%Y)(~?sR90aBAl?Gnkuv zzteRNo&wr*+-;Xtx!I3}(KWbPa#JP^Fx1Dgzc1lQGHJKDk;&!Ay!#V)q9m8KecFQV zx*aSdb20u8lz!or4+W5)G*GRxV3;zp?7P4A&UoK%AayNRR~kP7Z>a|xiTkFHeKx0{ zZ;(A?IYSuOM{|)G4y0mCrcUaYRH|ISszzNW2FtONEhyG)Qfw4#Js#w2oYulR(A`;i zmkjvPB*!*TWp#9h7n2*Ej%}MQk~O&gcZ4vXOtB+7+X%}vVQ3BuQHHS)m%Ixi;9wc< z@+(#alCK|6%)dCdulXuJ{bwI;ITM;;VqliYvh}5L2%{{3ssL@6HrH73aBD#q6e|fL zTq@$_D!>bWxgT~}dBXuzDK(iGyaeFbop%=dZ)zWOj*yW3!ftke(ukCOV;Di@YPS(T zd!n5EMN1DK>|{AfpIp7>%la$U9zCAoFD)()did$XyPwnfCwnK33+|m{>VvBz(1yqj z-$Ypo!A`}+gG#duSbP1DW?zUojZ=*;e!o)^O)nT-2pAWsc5-)7)YFj3A;&dpNE8;Kk7mAz(be2qsoXC8Rat776-NEtMPAd(h$c_{`P-vpu9@VS*YiW9AIc>Xs#|`LfplhG$lpfv3ssPqRUPtrmB`qi!e7; zb6eKm$E>DZA8)8Eak(JZBGLFcHAPs@M*b`X_NoT79zedyP>P`ub4wnuZZRVYefZwu z;!l)GX){6aVTpCqpmn@Syoo`=gA)@QSC6wMX7zWv8Eo|L>+$+%0lE-+R+7hA$MMG( z*qsuGwNmuU6skzh=d2T^g(`8yIb4g1nLyc}!TjXy%bV);g$*}?i}Kb)P6D2Fu%Wj~?QLq|YakLA zi3^AW?ot(S713Alv4kUIfVFY79~)=b^XZzG(14Q5ju>#(Dajqk7^Wbls1@M(vs5dB zdu*!8T;{R3_&=htlSeQ&6o97x^NOg`Q_#xlPrm2Q?JjyLqYTtA1 zrkM1k&5*}nZGxhZC_QoWW3MTEk=<VeE=q`|ZCSy2iyI|F_3K2m#iMvhtK+#9C|z3)+&Sviu%i@C>-d6saj&k>2uI z&^*F1!U=a_^r8Y2))QxIsE7vipS)moq>NE&E-QX5$8)VE9n;l0=f{{b>XZ8p1CG0% z!cI^{yPVSHL$YpJ|Aa?AjuJkma7_Im%uY~HkjC*#F#oWHhRm4j9MRBSFau3-)?zjId?Q^X zX=}{^O4)G?jFjBbtTq}vu;~ZRw%2;eABe~;f7PpML}NnHm4lo|21%{2Ka~w$HH|cG zz}hZ%q=L#;uMDK|6M-dfkMK{UF92b*()x2-QET`<$|3H6lEINE0u=~kC#kH-Vb(}l zdzKTl@J|4*=X=@`x?Cvp=xVo#VY`>dM}!@JioD6+vrn%Y(u1!WVhvZzkEM??$9qo8 zoifYrvt?Q)$nYvz1x2t>K+!X!Yff!2XrB42$UZlq@k5&6Sxb+kcGrPLjuO%Z=yx?m zp}`!!;qzIjn`mio52{PHKriZPD^z=nF+1Fujl1Aa3gk`QEKEb0o?ebNk2tt+}uVKz&(A6FWYvPul9MOZU zZ@p(TGc);<(@~q7n_~I!I&KIo1K7$dg3hbm%KXI!Ib+~a`y~XRxbvtj2S_4)%!$-A zU@foK=mU)I69nsdgtk;;L4lQ{n%ZzbA0HpRzK%{gPQGXzu-^(6J3W-Amc8M|ChHUj zIwE{4A9X*ZNC|YCZ}Fs7iKaOEti%t2+g}I&cB(+6&Gch9A%|U(jc*)mDAT!hui?Bx z213IBR6NAzH!YGE=c8q-`LU8}80O@joyaPF^^99l2GR&+|9XWx?WieFxvu;j6h|A< zj*Lp-@z?ph77Xf2J0@VCl+Qm_m~C+6o%;2Q63Bz{F^jIQZoba77O;S+N&GaJ7|VhM zkts)HdyB!48Cv(w!sQBg)M?Zt21;7Yd*TiP$RGb?oO9 zSrE^=KjN_)(to|AXvWqwZg=|qQr5!jXjD$@!>}4bGp9;&%VO}rf_E-!Y{?KUU%`Uy(aM2CugXtk9?DQVh!0%Qiphv9+96Hi?~fw$P_Cdt8m=1@ z3Jw}u(b%1Du5&WbLdgg_{MHFGUDRURhJ!_exZaIqSzZ^ z+03>b{{#~vx*v}^oxX2cc`f@&$F4NdKzaQM4|MNHIGYaET6~4I0>SC;H_zdIXcy_L z!H2vT zMhp#%Do?+ZEXy*jFNj<`8{}EV2uZNHx_ROU6Mqyb|Fvrl_6aNdQ7F9us)am5d#Q!C zu^l;n+~jAdl%vq}k0jXm0%Io`!`nE)n)pi*(9zs_*%vMLG=l1WFqpC1ADq6^tmp42 zAY*AI+QH-10Uu!Vd%nW2caPZUaF*vqC4aX)5so(@3bK|&SOK6$n07vN&T4RFdG@65 zi3yiXb<28gwa8Q%iL~G&K17#?G*QsHDxiXL9U(6lN-aINb#lPV)bo85XX&=k=Mg&K z4lcy^TEGQwt0uPO17kD1y0$}(BoSDfCJd-wjRB`(_*e*o;U*7s)4gITOU{xr6z-E( zZN9#~nv?GIh*>~wWN66Uzo7S(JK4nO<4Eka29}USZKERRZ!>OFpT^wu+yCsifks@7 z#S!giv^%#T>U4Cb`w?4xXBS$U@H-hmzWa4rZses-2;5#71)} zn^W@+i+Rd~QF9wJYtfrkaIPx#mMC|C8n8l5==v?2$|@gHA0n1`WY3Ic3FYAIQ@uGCNO9$N9vZxN*o~vh@(Ey%+W_-N7Ka4 z13L48(CtUS3akU|y)}T);0U!DN|`5g*Zb;LXU7N-&rtRGGl7T_nJlp`;ZZxFJX_fA z2n2=|EW(2q@GSmC2(Xd-{t^V$g%7Yhba)nzYnR>nVER$TOc9=qXajF2vjEaJ2Q^*k zF@t%6($>a_-LsBd_o*ySZs-1H_YEXJKfiFATCuKpwz>c%kYeKws~SLhEX=Oe>+L^L zs+x+>%`^o;+&*{U--M-teUgerJ6D^~58;5lna_>|1qEidhF*h0`81WAnusRdn zH%7VRZG4Lb#t+d{fqitBw(Rpi$tuQx2#P4-(leQ;KK=I=E|bXo>w^mG--8$=%?1_u z3N~U0|N9U(?cWmGsk5g+L9zqSk^|Ry_0TBJ!R28beDy&$`2piCJ8dT&);Pos` zXvpk+n%XHuvDo_Y;VOm4bi4Ll*5nmIj4{8uO#MmcINs14(@>-%?7T|FPX)2{&1J50 za&LnE`uw&7Jh~arE=!3ufBo~5i3?3C8biM||Kl{IWfjtiKchG>=wv(Yi=q0PwX*~x zFw}*tr^PVoG*bKV(+U}kLKei-M}lYeS-eSu9$%|nSNbfWO83%Gcp!UCEOrOQVsEb5 zeKFvC-rJ6hjO=|7kCiau4lSr6ttpQbvDhW~bUqc(pVmQgqtqY-Cy+?YACCtEIv7fzIQMjEr+O zjT{;`Z|~fz+vaud%n!FXc(wCK42H@u3ftrFqam2y7wtXfixmHqo0ZqP8A0!iK_K2l zP)^bQk^0GDqVRM>`-yDES@g;^cES7HgAn zaV5vjmwazOTwGkNmgWEHDNilRSy;X=R5Esb@%d@4E+a zT45q0mIErYRF=Oi4g&y_AdHd_NOM-<*`G)=p~0&D@kt)!8m1keC{Izvs&;`Uq0ykN z0k4xI860wZYFPCF*2sRO-e|;%-`W3EjJsT?foXF%L+IJvTB>C}$Qx@cwCseb`G zT?+H7xMQM<(a+G@=k83`ZJb|TUUJt51rB5<5A}a2{=zU6-4lIy;CH(`x_EjW(qrpU zJ6zNU{UBa~E0u7)A>Jgk$OMp8f;R~8@*d2BYeT7Q+~)0)9BgcM)QGnB$`@5r{>krB znP1sK+-A^BwWY!z@5R7WQHS5v^dTNp$yW;ShspGs!Pp=Fc{e%dnN@*NHq+?lQ$4l2 zLsjknUaQEE9GL;Hqkp=UJXbQ{LK1UAO@IXKd13L0;c&OBFaqUp11bpuh~|$Z2wE_R z{aJ`M8D?khauY|_v!}lKNniw7@N}KsSU~IwT?6v{Bjv)Qh3@X|wAO?6R%0_WGnut6 z>X<%bX4Tg;Qg2t9P)0I@W{(&A4_NFk{~=So`zfmU$*1VFrhR?AqaQ=u%wg~ki(D+3 zyKDEl#|q)Q2=erh(o%MF0g6`t^L?=G0OF90(g=%w(gzR!%Mh%}c2VQ|yn4F+ z)dY5mjV|R{ge65=mxYhv8lzW;-`<+rv~#3k(oQ zmw6c?lMmbtQX3P7UUU(xl0*9yuirJXeAQ}U-g|NW)%C?uRIcxOy7=r`KNv^fA;!yF zmCJxlXsoKdvAViC_SrA+a^;^)A3t7V$>cwZ@PRAn9p)E0V(jLo^VxAGR>uK|d!-HCEp6H&GQ) zeKC*3l^A+eF}KW20r>6DHP7}Fm_=v*I?CLWW1<#%rZT{&4Yu~TOPU35S54<;*&otq$jmYU@ygdRqqpgxm!636j$(rk=cVcn-# z`i`spR^?_2xP|OmR|u9nL`V{?8qk3HClO2ZIwCCHq0LWO;IQvo9u<-|(S->`3jrt3 zcUpU1kI*AGd+lgqm``(l-M!u2v`r`M@yfyboe;%~8h}j`dO2zqqJ7z5a;{XyKgpHs zO1wVsY1Ck<3n)kZjIB+nLmQ`7yVU< zYW%hO*)uykJ1Q3n%HL33lm!Aq0;Je6HH%X$)WUuBOoOqpAdJrT!R^tp0b$_BUyR`c zt}iwCA*F>L@EM%movOTWSr7FCyiq#q#iCB(B4L5UXIP-kOctv>) z8?-pdhYA1YrK6gAF|xS~8w&D-J~0Xk(fLLkkcQh3WH~DF_sMuEdDwIn1}{;<{N*V}1HiYxg2M z30vUyJ$%3_vcP9x-o}xiq*Aj?VP2OoC2%anhD)%Xn&P5_GHqz(H+ggQ3ri98%sL-+ zfO9+F$mtCgcx_|IbK+`hqqp-k_^cE`4Hl{h4`?<8_mFDfLb}FFbCjHok~B5e--*$A z17V4S;zKphgPb$0c_!y46Mofk8K(T2z2(8E=RdG)W-@>Sc{|WKqT2XY{iF{{G{W4b zElDWfr$>)wFJ#6}Vy#!wPQ_7{CXJmd?gdMH7wH-EP7H+@X$nHLZw3F@iEY6-+&oa! z;hPG5pobo^i2w5xm+BAcWIbKXygtIrAfC?rcEa_6P0`k0Ebg`|?Lg|*C;CalXKMta zll@8S{K#4u`76upMAqkiPph}N@}4NS7q51=)ZRj*<76N;jqZ=sp!(Y+m}-HqzmwYN@R9|3TxW#qMc7b9VzW|M}6@<(Sm{rZoVC0_3$;rmQjA#+4$s)7pO9nts zKnEjv18qw$!!t~3#vQy=H{)EU7)t4IOQXwLo}K9q%J63Nn8(iw!0kGWp@P44B2z7@ zP!#UWlo<)QY{{PE%`7B}c4_-C?+yi{RZ2^>WdR zmh5%yem3>2i;+LQQPgWzyT5B}-b|JcC?T#=o2fx_-loRFE%ayT#OiZsr{dNaq^igT z-P3;a6dB*W&)^iNuF0BSvWPF%PkNqT=_WA5&3FOp8(IEH1`9!|bHi-j_SkCC;n$}A z^$ispJgK`@6sNWEcp(|?y}f3pk7!iG8L*=SS;!lbJ&6x+gSXx(iBw#NXxvw^F3Y+; z^@P!9sXT3`U0C$6#+2xRL^kJ8e}x^oj=S3{k)Yd4a3hAc<)C>Z2WoLs=Fv|heDt}` z+8^{SZrO!myXQQJh@p@UxbRX%rj*t2XpxjrQ&E{|HAjX4XP@dTF#+>evOMjGmB$XM z{M}hs2OS-7LM&Ghvf)!)qiJD$xkf7 za3_CnH&uRlz);Wo;USdHI=HaAeW7yEQ1KboWT<*8(C-?8a^f<9WR|M>_1n?cH%img zKA*W)BvPgJx4}GT7)SN{R-*|#$YN|&o;80U+%TZ*9kZwjn?k+26LJK1IQHuBOkThWF3fv5BU6f$M%Uu z)lY{A9S0DNrTzjT%lTaJwt0eh8v@vEp}ZZ}#~tF?`=n*=F8dcpE9bAoym+tIPq}nS zSp*pT`8tE6U*7-I>|$g`|0gUl+4_q!e|ip7)WN($Nydu@?epcwW!BdR;2rfVZpun* z6tKCe_*HFV@DV$0t0MY1ZKrd$%}XZ;F9btu!zr=Sk*;?wC6c*9fGQ@?b~NiU7a%>7 z96pIJcRj)S6JLAXh!P)#)s}>djK+q{CaeMrb+F7wq@JJ&1Z@W;rcf<& z;D4WVxUB53+_F#nfUGhQ%UlX|JQ1|{n+!)JW0#;;a@N6GJ#A}2V;Cpj}U#FW#R2!g#{F=*~)m-a2YU=)Jvy|z&Q$Edjwwj9D94dWn zo~`Wf&F|r#7u)wNanIM&So8t#hnl0bj*KXvf%R2^Nboq8oHBCT>SfYT zm4T9W&LXpte)%iLAF@PQYVbgS$T?lu(TEZu0qxlz znKsik5dWBJ(@Z*c;>fJ}3Ef3LWert}BsGp+CWv$oqni}sIHT^B-kqOD5Zcmvdv4+M zXZV$mNW<+^$E_zD;uqO~&u&e>yb_Nha4_rN^P&sNb=cWIEE!1w&>9e8rA&Q;0r0zN z<2P|}VS0a#>#1Z%n7tSHvSl2#BS}4K@Ib}2-CE;!d z-g8?i+{Wt@Pa$rFjB^J9Lh_~lkNW9HUZaldu;~o#J>>y_r*?aRfbIB4C7&o8Terl4 z`awTgz&Ulo2yE8<14GyVeXjz%8!n;o3ROa_>X2w`&m#@V1S|$7bb_8WIHAT)oyDsC z94d~;hXTELEfY4`B!sZ5#3qCAr5U9Nld`P=)A9-(N=G!@N4%H2Rv ziZ1V8_UtPpX*L6R_=Uh#rwaIZ>;reUO>}Gk8w7p(0-iiIs}+oLc}D*81V= zdxD-&r+e<-l9ITe&f4Nrhd{DuQQ!r8PJS3O8jB|*C$-|&ZHm7dLKfN^winNLD6IQ- zbZ#nh2K-jeCOaHXxAOHJ6)qm_x;q zqR!=)BiL}D!S}0Fr&F@t!8at7$wrx`3|?R=88L;$wo)cx{Ac!yn&d)VvpIw_6t#k3 zTo@0Wojw%CGGOCEsZ-kc#R~x)qEOxcZecs*j?%ffX@8vF!BOM!o{ciPhUA5#Dn{WG zCD#f-3pp;)ivX`A*sNrYNcQc?aiz$AH`{!Qeu!=u8+xb_?zI68obd?~<)p~WiOJum z4X?NT88mXe!NO|Hbz5!k@q{%}uH|*St^Ehe^l6#lL{#zb%akd}-=Je7L!DIp<|ZDa zp#3Ot@ozQwx)UPuZK@q9{*~H8_TpI|Jk(bL9vpeG19I!G;~=A45^-@swC}{SBI4bW zf8dhe0KVA$yuSuNtqo>XEa}#xuu*AV=7?RnRUoJmLwVkb&rJ%GiG9S39)7R%)Za&P(fb6YZh?+P0e&Rl~rWFM7UPdmrky zN>AylBtgE>m5a%#skkLkr+W1gf61hKUWwrNR2aWAV2yV&*%HX4=)1_=lR}qdk$0j^GpakB`1{ru0`-6poAhLL6oP8Ryfg znyv-CYv@KE{$aqeD%!2&%PXgov!{FWu9}SzotPa0G$XYRg217qj8eL_)2Ea*C{l2e zhz*d$SaJmTJVIwa=)D`qiQB1nf=yt^O1!VRE0Rxo`@@e|WiYzbfoQy)GH&BaxIY8h zhEZDFNAh>p&xd*!+-(fpKT)N>8;{I$!s*$p#FDeuU<@#gttAibNE3YZ<3%uopk71r zpkI5+n*5&In|M@UBKf_bYlVrLz7@F2w{Hzs){6es`$M8>hIvIk2Iokej5g!Q2QESI zs5UcS|2+x~wYZF1R9sU2(?5AHts@ias0#rPtZIcl(!1-EvBx&AU_%Ao2Mb<=zaiIG z_|FE9{kiFVFB%CiSWyF$goK3E>w(uc%uit0V4cU7HgRXYQWV+SjY|%_WKR%k=08?) zZV3qqiPhB9_@kPppMRcv+&Kp1Abf4NeZ;j<0A0996z8EA#y&RYX@{m3=WC1;Y)w2w zGzD3lhhw;Z-O4zx)Prz5E#-kL!wqZbWI_HCxHf5pm=1*GfQR2GA_A2g6tC#2KS^R=~BY@%8C7SXRDnaAI$ z+pF_Dp^MZ+;>E788u7j~Rjn#7-z}Zk()%9=%zcA{E`|c0JW+LKbaSqx$2`OWSlTPU z(ROVnhA?xchbAzN=r?A`2fM zS0|cD!VSh28gPO54`IidkI)2jL-N_vYOa%C;j-ogKBV9XX)W(B3y`c@s=Pu+cvJvzvQ4U)flRPuydo099P{6MI$LRp~ z*|Dbb6)nxDy@3K45}Hh09K8hFDfH$!?`jtSU|B_dTqb?>{Ba&=KCrULy2%7_*nu7WRSiZo+ODZ}=7 zuSjDaQ;t)7XB01Q1W%5%9aA(5GyPKcL z=*yE0kxK8|>&u(#$COabqIedrm9lo@*LF+$pX{oTB{X<&1xs^g4`-4=^8qP4eShtI z<5@URFX`ALOuux7V3dM>GeT&3f#@rWLNgMW-EDW}}1}87)vh*~1&cA_7VKZQ22QNJ?dJ+ah zv%!D(^fiVH9=ueE#LpwT_i&Q0sV;Ce=Cv(5hSe(z+gBQ<;LvlM&r~;Wu%qE7siKIo?M7g!Y>F_~%q?()-1>gBrvehpQex|@%7-rXbJ%EHFBNy}hwq+?3&)Lo1>GhRrZ}Vv zps6OKYezj4hr4|x)S3yaY*s8)4Ij7PwYzF58TkMqOvpu`vyO+5L7~8M7w#-wuBA%m zkHtE)%3DQs$>~}G>f=ai;Ht8!ZINa8j59(jV8Sf_17F%dE^jg^>Z2#dx2%<(o1&eW z6UQgS1L^Cs_E;xHlBt{D801y?0|u<^pYsHaQ2hS0KgW}@W^!{{FBxnx`T$}gS;tLaDn1sI{(D_Al>9_B9t)|%_kY8K$E0n!*Q zga|B@0MsQDqCr>n%YCfm+5jq8GmvEmH;Sk;L7=GXP$iI!{Ha1qbbYo%@%MRD!Nga5 zGJ1{(vnnj>gkZ~@t#)pNDaivy5*Dy0QBApety{OaTgx0n<4Q+#kVJHw$ub@58}e24 zh^S8nag8<4r?N5>0J29tpL|9XYAaSQdHdmKAr{&uMjqi$deM&*on~nfKj!I}KOQ}W z^LOjPDVAK)iO)SEd$Xvu$HjAMN%pl3U&P(4p&BtW%chj}JRW|I^MW03Kg$~w)R$v_ z7QRQ+_%;O>@)QxRWE~q6NNS*d*Yd5`p&I}mqI^aBj#54Bs)^N!e&SL~3RD73d6Mev zas1rQ0bg;#V{NLd>QP?SS{+VfXB5r7(4*m2u;l(;C`P^2Ghy_|t1e*s)Q_2&Ij^Wl z@w2D$A8gTuQ4*)engZdiNW3BNt_z7fJN&i;G^GvMw}m?_HeP?WCW}^fH`h=JWHYIl zY9I_}aUU{{J(}LTb1cbmqb)%#Ww5738KHB40JRHuh#zJxVMb;j)Kj$l9u}{-x z-xs|_F2Bb{)5!>UbH(AH#7FZ1WL%3C`hOffSSeJOeX31A5g#tj2{KcZhSZkOa94Kc zXg}gNW|d1R<*p{R6aXDtKSOdXR4z2l%ocpuk|Wgyuv1K$GV`lxD+b1|i7VF=t8c!P z9sjn4!_uSv{`JUhnDS~vm-B&<-B{2)J@abHIT^`d2bu?0P9fJvApTO7fUO!~*nnci z8ua)_O)g815l>#gIU|smg(1Z^M^$qWh3VgLbIaK}Cxs zPFPTo1X|*(??yz)(Y-R3PL(TMl89DdPRM)z3k#4#pr_oE{g%@pCEJ;W92;?O4k>4T z*)Gr(3F0=^>0{XieWC^iysR@_PpxKp@e%bdoE`;SFkHIIM{Zj(w6*FMy21br(ChXI;3nr#@ zV&g-TO|rq}p9jyAn0j@8o7>9I>S4+j)wkh4mcpYPz_5%d94{!3O`Sj47%PEcf^wy@ zadc9Chmsu+*NJf)drxw1Z?5$3{!VDT2+?id-rlBz+^{S|wNptNB@^=#9pK$-;6(^! z4>X!1U>)$8>0*?yaB8T#--`MsE8pH$g$i-`JP~7|XFHkhwT0*7lkp)S5_9 zl<9rJ1S{A8DOq-QcCA!r{C-QFZ_gnCUUIG#LesDBbecF9A#Q1>KH#2Vaf0INw-=N) zF*U95x?Je_e8Y_nbY$|q{Fg>4P|SPc)eD_Fb75%Qd_Yi1`9#LiptnCa`KVLT6Xfb& z*6_9n(pw~6Bb4fU*#yS7xSzxG#o(6-5G>M)t~Qze)0+i}3E_(yA(zz`(XyN<0-!%#cIW)D^_k z@78AlgB86#OHj(_`%QeVe-L&7b z6Q7X*Vbf9`@{|qmZ3|Lap+K63JtPhcT1CN zb2}}z&pTa0(kIzS?XEFwNSGs6y@XoIc9-H?*v127zqL3IrE3jvc}PXAO#(s$BP z99>U*1K(PzbX8Zu=A4rrPWG?;{Y+e3xOhDb0s<2stbZp)b$83(KM7OfW@$N?#346e z-L!pTF}u+{1wA91_3l`T*!zL#VOyGLX*M(B;kj zalQ=N&m`T!5GvPV(dD)K5y=O&ooE-i5;uIiF=iW|aFUc@yEtLg!TI6VJ}l&w=!Mb_ z2NX~EXTG{x;Ay2*=TlS#f@FYh&R$J3SWSafNii<@zQjUQtSI=j7it7cD=HiV_SN`l z29$JlN%!QCxT$W$umOfh7iFT*r}{%rkk*aqKWbj~(=0r;p-@g9Zh;LYJ2`~RA3H95 znVzOKF&`A6U4Lv-ad`qA=Qw``j*e`oZc9RI)B>fgn@O|*cJxEL%+#tEgW&2!%%doK z(M0T_=Ol#aJ>&z2Mm)d-qNcEuY6WKvFsM)&3s)IR~lpu~Euf0#?N;T0dP0SL`{<`f@NR+_!`1+d2m$b}3fosl5$9GtC zPx|_y?AuC!@VtwX8O@eBsDQGBNK;F3^J^-bs>H@qafiFc^EvRHb(2JBg@zl7=$M60 z_|-e^C;V21IBiD4J!fU&Y6c)BVYy`N2P~doekxfTM=3p0y~hF^DH$rSbl~MIg~jVr z{-~4bcx`5JySolZTzS&w>J+>|YobtR66g!ccUZJ-yzl?$h&IjA)6P*@cCIm~R;AApLfnPcCA2^5exZDm-YOWv=Ezlx)8Z zc#MS4tj*)@LBZO_P{YTbE=p8pRLR6Q=FXvIBT3?Nnc3wLhC z?w5nnYqHmc0UK95gX@3A*LPdiOMR2te1l+wBCaa@0V%lp!LBSwbr&sUS0t)9E7f-a zE|7Lnf7|6Q+-k1=kUfRIg(jh(W<^^HuZEB4)w+}Z&sX_GWCNv@x1O?bWZXuOZCw3G zkHejySPuA+UDgw_9~Ndent3L*x#&r2 zk&NBfbh`hts^fPLFGm#FAR=#5P&$JkQt%1KijdXv6Je8iSj~u$Xd)h=3k#+6P#9NN z6UjR^=y=7WKbq-t-~7cxdbM51=QMA#$|L!{7mG&@p3cZfkjnMuXvK!fh^0?H#s17m zU&N^ zHBwW)YD%WhbhR&CxWF+!9O}(VfxE*@fA=A`^ z`s`hS&(C$qyFbv=Dd)ujjnk6m{7?a`>zZ*M^yYQdQWkwgprO?BuPQFx*bcc|XVUaA zIw~Qcdx)Rm0qV@xqsywrYtaI4XV2U~GdMAs@y{s?J2mOe zM>yF)wO}gJh7vNjGB-11JP9{)v*e;&7{nlMu`Xg^v9>8@!D^*3On)^%`AQWhpQLr6 z&Hp@wc}rF003sL9G4UwizsIlI{7$Lx@>FH8!Y#Fbapv-$oF#(ltD9{zGe!|>#?=;G z7LdJz(;Up)kg>NQzg;SbeqPjVX6HQH%v-+k<*+C{iM)x4(rf@@DS+f7V~axu+jfj_WU7*8FHF_tu3!JtdQWxtE&L-ZjDifArUf{>Wb&@ z)&yJf#-&(;yCq~%`Uw3jnVi?``h}KOg8t1b=&2hgaNYM7CB-H?CC+9#7W#7qv*>ca zU-PHiDygW5q#QtoijNTdjNLP#py_`O>B-5EAo%aa&SZrYNABMDdX<3R7{R)SlxQ5F8ElSVF@Y@M?qEd`RDfhk-eZkXA`YUOD5U})UAi`U0l zU&{a#$`;qxi=pQc&eOH3mr%%661PLi8ZV-G_K=g4^Zq%P!!nbvO4JXn3Jd@A5z@n1 zDAMtwOuj0s^!7rZ?swdTf210*t`599%jW+-M12KR)L+!?&?%{ONh2wWbV;XxNK20( z(jX!6qd}ShhLA?UpnH%;x(0;a9C^j&5d)<-DmH8%v%GPGd1hp z!>73bpP+$R8pLnjtBaH0vt?#2!q`M~r&7ZQHh_7yX@1rX=^=x<~+L!Gs{g^XK0>o%&kb?LGe z97MUVA-*lYaXPq6CB6vq+-)hkJ0syai*NGwln7>J0Zkdbkx1K{wFq!{4Ra=wVQh$= zp(6O|MW#p86RsBCynHk90_95Kzqp?yJN(pX z1nYj6(h!+#L)Eo0J!gpAx|374-|`i{1RGFRRee|NeE_XEZT@Py5K6@vu8!)pJ}2m} z9IoQoczfoR<;0Us+uwzjnvjuknc8dpPOfNNl$SBU;KS;dBPatL=v6y@*5K9=yV6@e zn1o`hjXg&i+6X*mqO3*a8gV$~tWmXu+(YolQD9X^E{~!VnE3=MQum(Ub2M;AcWV}p z35(y#hwfYTpNX-ueIJdh@u3TKdV~Ph8X>IQPp+zu{;frcfA|5zNbN1>poBRe9(HDe z*FSQh{*4zslQu-!02Q7a4o0^NG}zmFCapy9&{w8K7$%@^KGy5E+dEJ8+L+*?jR#|*W)T7;}V^7mn*N?&jM0w3*(uo!*x2(N`I ze|NL=0pZmprs*$}i1nHCkuSVvrR}+21;_s6gJZ>qE}w)Xq_0kN?lSQ0kH!F8x~PfE zdOj+|qBkGy{kQ4VVGblX#o*xBS;q?s9c) zt5IpEeu!P=slQan7V34-UB%gCL`ybXk&|<`KoJ`o>Hl&5W9m~G5=<4v1y+_Hf6-x7 zVeb*FDwZ#6-t1!_SnsJK4#{CQ!2*!H3WD_^A$ijN`@GXcR+Uoh_vIyx-RHYCai6N~ zgC60z>OY~ox)Wr=6Mg|k$p(%*NaoA@^N2?dbJb5waUVVNLxsUQ^& znl4QF~3@g4Z6cz#-8A8J8{>w!Fl1NC~%COcN&nQVP8 zNRDmAam!qU6J;^=1uqkNfk^<&9%tA1>#7{Ak@m0P9T)8`^Q96KXi7D#JB?7EnvguB zZkk1+l@+(gu}hYbHXNsgOA+1_wlWmYX5V5GM}hZ{M1dxKLZi8e1jxxuxTyj34B}&` z#*^Xh+r?vBHOlo{@|Oa&oFN~`&GOa5#528ZKN$(J$stB7sN;fkNSzozji{qMvP!-$ zekDU#9_ActL)+moV4XCxs33}0f|+Tg5Wq3P;P$p>_}HOg7$cSDJF|wuI8sJDNiZzY z#EX|2RDo(9>Ql=iMg_IwIyvmLti}|rJ`$f$<}*lmAqbu^ow0+Uod|3TNIXubR?b*J z8ccAy32wtufAZ`#Z8kiPM&eDp*r>PF>{{_Dp55verJ({isZO zF=@3lZB(tP8YG{uu1$r?kd5Caq8(H`SH;_K5jThK-cdmrfAho{@aO7@e`bz-lvDDuBAeHlq!e> zhO&;l{GYfUiZ?|BKkLo^l6+l#-CaMd31hp94N%`n#G=Zrb%pbHaG#-tUCys8udWPb zo|xzK<@ipzJ>kE3$z?3CS7!nyb6h>_n_W#h(VMpkXw?xbue0}qMHPsRM{`+N&BPH)DThB!;y)cv3 z?S@vID(-2@DBYvLSg@b<=3pWlfU>2@DxYIu?1m~~(#!1$);t&jqyeMzM$0EKzR~+z zjQz^7f1o{0S+<~u5}QTg{UrD3?}UkY`n2;sZgP7H7WpX?^{94O>OW37LIB?cS~mv1 zQF2@-HlGAzm8GN2m!;!>f-~KCRH1{-YmpE=jDCCc?4cC+U?++R=rEOsc^u$l&GW}o zbo}YL$Fjos<$IFjd$fz~4odEdMfE!~)#^|r)7lE$g(Avuj+qBA=O}hp+t` z&A(qmAFJ53UUOPZ*mX(KFA&d)N7x}#>&Mp*>j-#(gj-W1mL~#vf-R^72r*QUZM}l> zVQ4rqdZxjZ8E|^Uiz>*tA%ej;oYhU~B;JrmyZVH?^5F2N8E1lmFxxaDtQ z>=J?WM**8F4gwL^iGP4x*$i7NzmbvPpphmMCbH3@jj^x?J}0EE?HR)%>BAos_VtL7 zF#hh~($9IgK;$*!;OpUOS6{bU?2>c^?M+E5h%}T5-3eXhHTy^1XzH)86p^Z^f=b8N zrmS4IILi>afgp}vRkbS28qUn#AEJ)X8C|ia20IC1eNEKgkklt_^Wq6-GSq7~?ffg& zyz1T2`t;||pNjx-O(@#+K zA3N>Woj>z#{};jhNAwoz)N@0T+>41rvtF7>NGe{#aC7@oWS-UkM|AmSkMHjvHP|#O z<@VCrfE^>OKCyiz96y?{I%3f|=Ofxz{I4$0ieC9&HPcgq6kvZLt z*L{Q)4^T6o13&aalGc0LcOfai^TU&u4ep=ubF58Z&ck4-Vsq^~L*FRhz9c{&kQ-~s z%}vMywX<67o=a}(&lM8adv2m#9uYX*=U<`xXrZF72}x8qDj(TH7_?vubfNdrhcyn$ zUX5!G&;%vGdkD!N&XN)Wih5Ns&?x%VPU8bV7F9&`Q^ZHVKDGD2OG=RNQRh3utknbk z5+f`GVLPKM5F9{60d$GIm_GXp+pgQ?*1cp`FFogl(wFLeSXCmE9ZK0Mc|0*k65!K; z^x_`A<+-_wQNYx#lt$XW@nJw-1x70sd^=Jl(v~m?C0GAw9c@$VyJZ41k30->34egz zWG8RrtcYx!IjkeL|BiuM1C3{G+)4k5y_jCm9UD96mwM2no}l;WJ5oPT;z3(xmD^Q0 z+N_4yJHHTMwJT~7F;YqAqNQ=~7z*nI61)Av=0DnHoN%ZFm z+VzBBQ1<`U^e&7(E=@Mm2m#Th2+=~hBKu&JNE-~;Dw&^73hG$8dmR;VQ~hG6&~7{@ zUnr4&i52)WIGIiB#IcSPHjpnM&qvr1fcALWT`2@5mkIw{s5})b(--Pc#VJcd5e-T# zkyXP0z^g%T-2_^vGQdeT=5ft~#@AL>S66MgcF05QTrK_|{cVUoGBOfjTy6VMAMsIl zcxSX{y2PmFTuEDdG-2eK|8i zmG)9H^0CCF`(yvKvv$b`s3n-uD+mkh&dfeg61x?>8S2fvah`^VO8P^Ez{t$k`JU}R z#139GX4}RCIPo~zK;fe(+enNlT@@S=*{`)eh)=$tL;N&rTQ9RcDwhy8loWn&Lz}!B zwBM|K_U6h2291~>&7D^vCux!2TX6p`?3rL}mt=tU@{Db-T= z$R|IgryhG56$i~n)w0o-= za~l3>F`q{B;=`^ijIi#tfkqIoa(1BNDZ*Q*^Y@modYNWwr^LL9ha;aXTCjEsgT}mB* zP-*~-^kwfbU$yB)nQq3BUYVikq~Xw`nU#&QXS4;EKMk7->x?vQ4l?Qt ziJgx8ki*7(okmy7#SF!XI95lK=V&;?^T|+gKw)UpV1ij7Dn)XUgVj*cvY2RxLif}0 z^EZNcQ>OOv{U5!QneS+BpxxwyVK(j&G=TrY=B>R059pe%VzCfMzfUPK{H!)1%4EZz z9EgG610BNfOYn@h%Y3z=Pgxx-dJu)~>G3a*r776H$W|UpkpKSkPI>kcz>tb=x&Q7tK*50!4$}sH7*y|leYna0y zuVTp;QJqRqhDX5%ag}2ETa){VkX3V8gLz~EM~`1w6#C}E?}NH z2PaI~!mTwa2ItU|4uNrAdZoC1|lWa|G&PGf!P%;%z{j^*W5rcv9j}(JC_FI4G8KTYvV=1MqvO( z-JGo>HZ(Ns85$x&xt>3ux_R-y9J|5(6bD--I#%x5;y30}6-G)$%SW`P84jHT&J$=l z5;vo%S%EP8Ot>f?e8H5AIw3M+YtwqLihRF57y5#|rYZuXLm=kHn6EX6HPDJG0=X05 z?JL_A%;-MKOvLBN;Ps6@uzh|DH_606EvRWTj8$d)HdTOba|S>;u=#0iCll%d z{J*Tz|4TYGN`VNV`znZ6-D%||)m1!E#l<`yi;7sDJehEk^EDR4U}Iww@jHKv*+$2# zW@yhQx3R37pZ%LI^}>qedMZIM{%3S|gIkRO)Id`Q@AR(8D#QOuLQZ?+Wqvfyfm?#lunPEkp0NNR$rDL_{WqM9Y4FpzuL=CJ})cDKQq7 zSAvu-uD%%}6?}aqZnsTBLLd;B<~24pR_te`rcO-}a^3Cw9QLabGd*CSg^~?hV3+Q? zqHgZ%u>QmkD+m=rF=%!F`2nZr8CvUP0uLp-O4lKyDvK#!j&9%m{uVv|`6~--8YKry z!{hW~%&*02x(_Df;RjkAh`-ucAGDk0An&|$4@@0_xoM(%%XxL0MaH9l3u9R|PUQJ` zaD&P_WAIm~zN*f?ZWvIc_)q0X64KSz!c2W;gd_;fBQY#0V-8*FjuZY|eX=ph&y?(8 zoR^?}hG8oPPT|?tRWOpZ& zBPJ{Es-Jj2K`iIVKJM>~OIcr2E{_N(Xx~ujWDH90!|4SFG;&y%E!Nyx9}>!| z;n)yAm_i;o!$dfi4?M)tJxko2#C4ORcqjaTqf;tSr2jk9>;K!pLW%6ltJ>)w9)4zR z=n?%>%@}Me9$;zmKr{U@^g5lT*O~3kE&ox`Rl?C@_RNVTiGCx3wtEJGNb@L zGz9O`8UQI_>c{8W+FF;7pR_oOjD&_JVM*i59gsl$sGw4?~}2EKLZ7 z;#{*CNo4)_H+wrDNh5%z=o)R?13%6=DJN_R-O%g|315g`>_XAMURGvdQ(XYidm78D1#cipLaJ@&Nh4HR8>`%%4 zu`&%=sVRVf%_8B^YfuPdWB?MZ!Jn?z3sV(V-wco?+FKGf)9IjyZCCo<+{MLZ>1GQ= z3RT5c2njrktl@B>gd8odBBP-D=%?H-#V*5HF}SpO)Ct2I%OYXDl7otj4I1oa@YX=)pxqWd{`{xj63&F{}nz)5C|{WKWK665QsN-+-5O) zk@}&yO(#w7!BwSTdm@K0CQoM1RV{rWnW%7G2PF!q-KIfSW6bShU@j?|B|d$}raxW1 zkZWS!+_1|?rW7(k31$vGKoG*lL4DI*<3P;#b?X0TFi)(xUjMC`G&SBUlD=BQHbnZR zw**-xMmrygcV`W(}!XqC!} z_#E?SW=VXWS=~%d)c3xzM=OW$T6x{qc7GF>bE^JJuxv%qFpxhnQQU6UnVWk;geOLU z#a3hB*GRTXW8nV!H;p!(IhpNUCSmV;G7g{az4LlSXiA$D;(ftgvFmlOH#EB(H<056 zG+|e7*!5*>E>$HSUe1G|qPXZ&n6OXQ#a<8(vP1YT+Z8^P#Go*m%VymMNaA>BJL(CE7Nr;{4oPKJ9cGqy&L z5-nnrlad+}($c71@?*2W=S-(%-`m^szZ#07d;`oS8iSl>CN#d8?Q zeMdyc@#(O&Bm^^8%$A3hf4HS_i}NL#)W1ACvP2h|5Ip2bI^(6n7VJmwyFm_wTCe%s zS1~ul&ilJ4K_w8U-r2yJT{laLD=|$J_fZR>TC$v1UHy3S-0#_Pd!~AX_y+KGm4E%G z`Y&)0GW?L7ECl!}%`gPq(6KC|I}}z5f|#3y#UeDp_p(7(!LFFkq~2M>ZvfcXt&z}| z?)n?;Y`_>WM$$DqTT{bCuN1F%8m)N)VsZ_3jbyuS9C*8+@B-0fLIlAJyOx-I0dHoI z9Sg0IbPKFlyy0b0?d=mp9vLIyhQ#cLRRcwBIVv`;HMJ}`WUJdAUNV5{ngFh08gMG; z)w|cPUzfgRjJUm)c_Qa`b>($*bo2mFoY6-TP z(*f>gS!h&@eY6Xzf<~SDJuRYlUXQX;{u-M~X&+B(t zgjJ@DF;og93B3Sz(E=uhhcp9~w)0|w+f5hGb3M>|isYh4L|U-4=+|ih1dXBZPoH50 zW>n%AZ{XjjSgb1O{jE#iG?DmKY<0G;u?rgUYAd{x&LlTt0}$bO*lN%?N3Y7OcJMHt z_Pzmj#)2~6X3Xwi^XZ4bO5;GwfmKk#pKL@XB%lE%*vXE^s`w`F($*?EFBNQ;BtS=O z05@h|G9V6!rg;z*b%&EKm5gf>#qUidjwE|S^#ur7RgS&>=_(>=mFy8o{!~bz$H(8w z*Kvmg2)&jiozev$6i;>v0Iqs>IRLDb;m8Y$gPD6;e5J2nDFFU&NGKrOn4ny@0t|uW z7+%kbjkR^XNg13$qj;uCrZWo_7AxsZcc*Q#;d>IBKcozt}a)l6oMF{iCkrIJt+dA~uMi#TO# zH*9KZYMP-Z^f{@E4RsI`b6j2?a|C2LF4}W@{{!Q!?XrMz`Vs{Q_7R00ak$JrXzFnx zcS`PA+w*)WkSs--$WU7%Egl;xlAgZ({zc$7k&{*><-}m-tJ%ar5Ut`|*od}yOB2BP}g0y=f&Z*!;(>L!z-5=6fb>poj$~=@+B8fr6Dhvye!(V!czi@b|8+ z6(hX1v~SxDZ?fo7|4INZX50eAErnA(q5bgccJ61?#oT>BA0|&ibtfmJUB)Y)il-y}0>`%8?eQC-LkDa7@Ktc1|4D^qXu2rF zS6j~W!Q5MeB;@n$_`h826$B2be8-iP0AfQQ#;I-KRUrd2yi#4|;o)&Cxr&&`(1b?kWZN znN5VUBnfJO#|RQRdnbF$YPY)3+f-z8x@uAx9R>mBGB}?p0I^7S%gua0cZsmD4m{*mWG#E^`VX zCtw-j!YrZDEZh z$N3Z6<-J$bPSQm}ZJZd+EHIjtuw6e_QlL)r$n2Ru^6EMw|;_N*C^F&7$|(f{?+`YW9pCTXi`<}q!Kt`iAQq|@Rq`X z_q+f}R!3*0Y9f;wggZUvtKvN$wCvYk89nyny|#RyHUm`3{^i8_@*Iw;pKI>6)0J@fZUyc^=Sdh9fw?ICmykG< zP}JJI3O-gYI{=sTK2fuAx3y*53*eE1EDaAv$_O!r5Ws(B?m?b~cXFs`N82M%V1W0I}q6;XuUiHEqUG;d3$V>LiP6H!gBz8s?skrmF!|B0w^HBFb8j; zKYUpdJ(x1+Sde0o$~ED~2WX0BMn+;`L%=ZBzG89>1p>G%{b!&kfKZ#=`BXe&~b7hHEkW?a!yxqBx(m*7Yt{dSAyj^RokgRnqcneS!y;EHEF zHb3clT~AE4q&Q&lOu>n8I+g`NRM6RSJ06*l zVb11+qzmPcyN7f*0(2H**)}&JPt-;1l|YKnVJUtb+y8M31}@e3FW5CRyu`pHakH_( zu>g}RgO@w}8{Te&b%Yb=LzR_e zDk>`f#tNbu?q!^xv%{-P2gDz6^jF@#)D7SJ?{f4rccdi*wRAG+-b2n;4_kNzQ{uV{ zG(hd(dR^Blp-%*qI+_5&v9q&-rHVU>H#~Pz13)O)zL$D@8)rfQ+Cgjm>UvH)>sm?k zYw`{35JyWRTyim>1A;XGc?T%$V=fYat7^UNc*2{#1gOm)E+l z*UlH(!5*QPA*DYLxnm4F#MF|_y>%AGZKoU?8zUhn$7q$XKWPib2{tVR77jv0_Zi5^ zgAWf6%G_8&pQ9K@R zB+Na+U5A5p}^2R(g#Pwng;SXxM-kC;2_1vUN z{+TrYM6Rhh?K+IEz-4_kN0OEQ4V5jYSmPyD{Q8{e^m^o{JFX(*pKoRpB z+8ps6&lPs?mW|GTtA?fCR4xKQ3(5;lbB+pR$+pu=LEJ4^B`r!s88m59cCJsqLTFDs z;vwHC+ewDKU()6hiclm~FG)!F`u#lYUH+8Ti}D@oJ4F0KW504YO1Qx({O6A)(0mit z)YQmwsjI6K0+nzA61n0oT7pa@9$j+c9mvPw#danDc1MFaFoxV)TWZKQt}VD*fmX~@ zL!iPJeRyxs3#oB85EB+rThfFF>o}j(HVjC{dTb*?)L4K3lgxyTlDj|?KK=?Q@TwHk z`1!r=HJZhrISmdKLmie8Okgd5TqY7c3%D~=0~dKP;BUrQl{Nm;UCH?R`dZmIdOB*^ z)nxeM?p#3JFn>^A{=B-Tiz{vilfW~Vx?LGh$puj4Hf$Z{%A_K!ZW1592RwuYXd22K zusHQZ{4wCe=h5-bWOz8jax&Tyi1C0{-Sr_YTTpUsN-F(h)L!}p9s^&ksJ1}udul>QlThS&U07c&#G^PUthixqlqwg+xw$nZEYPQ zKi$4eQ-LM(B%sb>8&^GqZy4>A_SSxzd6$qug3oAks!G9~a54z%1AFkOP&2ixUxESD z^N^>bGho#yxP_=r;=Hc!-RH%pFPaQo7ZOvV)|BrDX$SIia>8JPDq&5Pq2n63z zl;~c>GB#p#a*>0PbQC(AU?ZU`b@ku`IPZ2VD3pMNzb!=Z(_@e(5eh$HaXS-QZht7cs)-EQns|Epv zB+z1a!DV#wt>o;#{G+tWfE87?bY~3e=va%i+Pw-q2bCwcZ^LV=AefOHL%ig-j~xIC zhWHB}V)8=0vwhbn`P&$=D{eo8Q6*@VN4O<|RKprz5hq>m=_*(HZA$`ah#2b_>3O;T z%yiEUBb5NQX}Bgeb#JC1l{-GTyv-lbN%@DX3g%i%F3nTbVV<_WST3ZIcFj zhLoX+*X1Amok<<*2(1)C&%ewF%#LO91e!={0h5itrz<7l z*T*$vLqD9|`!7>I-`pn^L@d5Hk^f?D5Y<&B5clLrDV4)xLnFNOfiH&JqfgH`ZztFP zZ-kSdlB~T9Ab-wt&8O zG{!E|0DTAE@TU;e!Lbjlxybo;>=H8Q=I{9J^i4br(`2Q%Z*)d7LKl{LzfNMmj+^am zO}H((^wTKBVvGrJM;1>_tLn~sl+gIQ5)G0lz*Q2X@6zPL6kuE#n$>3(!o^CQ5tHhr zvMVOpzZXc7-F6D1CBZtjdivw{n&?O7IFgqsL!*s+-+Fmw<$F4M>zQfzx90^RQ>>Rx zcpLGjamnYFz^Pp{-&r8q5S6IJXcTNNbDW=5bBNWoO=nlF5F? z!Ux>$C|4TjfO4?iEMgjdm%iQDG41qe!xT>`acigcJ)TPvYSxbUy$@}~E&i?-&HO}` z!wlpKq0XT#g4E5Cp#9k#2U@EGtPq`wG;r1oBz++4OT%n)ml%LMwn*hnr3k(dL1(WF5o%y z3nwSULlO@gFD%V}DO*k1G2xu9qldVPCwqPH9h(Yg0(>Q(J4N-^6x8%LMwN`P{dnJ{ zLk{Yl*gN0&l&xUh-dnHZS86*vRO9rLt&OP-H-zdF+XGgrW^$|?jsPiG7)Cv*j9r9d zzai`ctQf-?QwD9zl#DQMjhJEFq0#?z5QEXmaD@#CPyAuf!m0vCu(njX91M9b%c(^h zO*=590;lQqvic)=^z3Xi>zEU)X2EN3iHFRAA@~<-z_H2BxG?L9h;o>SL$k`U zCCOs$`GaCS_C0eGx$|1>NaqN%BUuKvJ4;8yN`)yKBny1)Ij)a!i^f|h2LvP7m-07m z9v%3RMVANDUhZy4-jSFMd@6eygjuM^$9=PQQBW4%sT`-v|3Y6NLnTb|M?As8B)c%k zKS)CEp~lU&23;rVX}NXU;-Sgpec~1m3|Cj%cv!m?)T{NJPgwvQD4PP8?@=u{{YMk(fd-`~CC>)^ z!j9FIJLYz0^&8k&zneTuTp_&UtiLxc=7E$5oCv( z5jSOrd6&jgc0|79-5_`RBE~0MHTT6PoawQGcco2C+&2b3IQd?dm2gpnaD({|H-Y7R zr$ML`m;*Izh*xsZp+;mGLAK^U7!4Q_~I!xQBVh^!cn>q@&lau zu-7qa!^flbS@<)H?zX4GQXNI>W3$qP3uf+mp~!M(E;roP1UfRbMi#WJdv7tEPPe!R z{Vx{^j`dNJqrR^KeWi_g-cdrZ&q8vX9*T`x zby`{AX-Mu;*0W?Xa-6E`59-NG8F^NBChuHqZ9FuV_VOnlIItlNG3(6RJBbV%VSP$X zGZd?pNXzJ*AD-^V|Hmp%;FFIJ;r1wLa6_GE{akK4!FEaf@;hRmLnlbGw)w;!ZHw0- z(dT!ux~S9_X_jEIRdU%-i|JZ9=)!2=M0$HZwnHuEZoi))q5%S;sB>7R1fD+D8wc^ujvwLunT@ynO*QHf~S;d;o1kGp*L z#A^mWkArQNUrBp|GT*KKe1ES|Iu6qJyx{Lx!9|T@7}%wc6oN)_UVVT2diuKXRlbeC z=YJ^;PA*p)NN2}gACk$?1;AOUO>wb1j-5THha8N|%}%c8-FsCA z`C=`}-Y|}anAd?aHx@9sK%0_cj9vWDEBSb!wrdpPrD!Vi` z#Tam7kT@84GzwZhL>?&6Jnk%ZT1vG+Dn3u4*#chcppk|bZU7~h#5Vao?r#}IIiKq3 zZj7&*9{kq#YQ_v*RlC&FV`dWQVDNKb!YI8L8id=FPuZA3BIMp0Jk0T20Cx}<+X5;o zm3*T&2Rv?@&42)K#wN>~J>4Re9kB;0xJoDMKi?RB^VpggN*ChRtQuPgG;y~}tgV%+ z+dwX^v5ig$Dqz0kn`ob-40a~Z#B&r9J-0kyXuRrtmEAJ@VKcM{&UV>f{=4~C+}|MF z*WK}kd{4wIl;c!}g^FxRSgB}|qae^-vSeAr5x3ig1#ow3Hh~Vt(f;Ndw3(2<{q5A? zbzodJ2Au9|Ku-jsdHft^N^{hGo+4V%EETg?fm4TLLhswR%}Hs7))2~@sN~;UN9Px{ zo1!%Fm1NfzyB%dGxv#Y4MVNv|**ZChUQ2IJV@6_w<4zk@-q_^=%|!reWTUnBFHoFM z0l&%OsF|I$2X);H4=GWt8Ll(~H;XJsiW2;J4~eXz&8oX+&hDye<^ zMPv5A(CpwpQ0dw^Fyqgcq>x9Y?yC}G4144#lPscRbdA({AKXVRF%>+FmOXNfvLTAs6((qcpfQ^ zxq=57B>+MpV5Y#6IUf}n3EZ?I5CnR?A@f2xax!dkNu4pxzPI~# z?uVr@Tit-l`#3 z@r7zwsnFOx=ayW~KOWK=oDZ@xV`i-iVoP7XbBY9+04chw1sin=0MI2Kv$6&YQcC^j zq!XWTAo0B32c#<$f`{by|V*IH$$w8{fd4V}^qvUe-0;+aEuD!FOxQ)_*{fKv?=BY9$yh zAl5KL`n``W>a}uGs^nA;%t6Zx9PKh z%OCmd*cYCH$)$gvew~h*<9eQFE%#{MQ)_+@p8ZaCpdf(GEopGT{$X}5D(rf z@^<|$csQEuY-xxAhnT_LSn%;VLIx1u@i&>u?;_b!dK-orjBkI0R-dx1RO$z@wNxc6V zX%T&x z&#AhyY{I`fGK|W$45J-5WJbVJ~`XkxVZ{{y&=4*{3t!T z4nOZS65>?pzyJQCR0!WC8+?nU?b~T9_^ZLcBeweJ=6dNz&5fVG&nHLdQ-5bn+)a(p zup9Luw-Sjdegn^=hbp|TpQKbwShBPHnRHg#%EP}JHUamKms`COR7UXxMc>*64V&cP z4AFoL)u$9o2cTdLQ>W=lHbCVZ!j$7P83=|JBkf=siYe$B!-yV)KP(dGyOGfT zbib|;lFn{VnT^9y;JcJ04ioN9qo^1N&RyZu$>pQ`C#IS0W7T4OpC$4OdWi6xi&a^1 zDkor4AB22&OX*WXTj&nv;Ja(~xj3%c;0HmMoVe8a0cpc8GFB>o1fdf7?rUv66Z|mf z1A>V&Rb6oCuGt;06>#W^1d;B$qNQuaIcHC$a$YwZ z4VhW0q8}p;M4+O&$`r&Q^n6izh9ZLL{%0aTQAFqbEeb*9md!;D(grO<#Y{FN^ z$nt-Qq_!xngg58bx3Lg2Amwro9(!($X~Y-Ny7bwE$EaG_wAwad#f~6DDxVnmxW$P( zZYCcMRh>vT?k@3d?mB2 zLQ!f1%9^%=E-iW)wCaWDi2W}IFz4OV(01i@wfH2evYVC)VaPOlykO8l1#gf3YL8wU z+ize*YMPke`)V|ovGj6r{*E}&y-+KjBbE0}XucQ$W8l^jA~~l%`T{h)oCV?HH7bIs z7grl)%S;Uuf%-xp-74KtBO>

h>qfUoPh6b{dfRZa%+%RKV9`DjsU9IQnC^bnt#E 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%0A-d|+&1@>BtluUS~L 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

    B;C; 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�s;d=Y8+}1qe#H}$-V7ia}kh`1Z(F!`Dkklrvu5r zKFq&tg?i4b?LB5D93T?UpsTFr$;ZbR^z2zWfR$5pdHSLT5mzx>2qj@N8N+wWQJu4) zpv5&XNNQ2`0vljBzhF#Z2n=|{cuAL*Qp17_{QcWZnBgi-tV?MbQYK0lp_1LXBLbyS z$Se?GuHsdLKQa{!&6iKrd5`EizWi>WAxc;WT&%xycJuTNrxgjRTWdH^lPrkob;qAw z7^rnC*%$0B`{8smyh@;u#i{0=otY`JNkjpM0);X;2tR`xObYe6AT8cy7vtwI+#PuW zHgS+ib|Qp#NJ-(mhja%@d&xd)7}pdmJo5VIX^*R9wnfeFg@wYs5pb4x=&3&~#T2nm zXX~loX5t$T=WgIgG+S3N7xghe-%UIQ5{v=F^b1t)dT=U_*pXwz=?oEIRn!doGwB@NJAv(w zC0BXCvN`Y^9i-&o;#OYqy;m=`AqKz4VI`uMF0g@DTR8n}zcf95l)7~p_CkE*NkefESnD&*X=CPGUDK~zr}FPbHLczEa;)H6o3Vkrj4#?qRa zCZ%>Dg|m6sE!XmR;5#+Vh{OmaqC-Md*DfyB`X0s*2CUcKtY$N;Z?&8#p>kqk|n#sGBrxiX(XBx>gYdlBE z*z?un-EsGiqtIJlpc!!;@E5Qf7KR8t#DuSUQJxMk*CIXV@9HWMVK<5w9r z(Z9!~TpuUpZXXU;3)u(Mr8=#VN(_;y4Y~$S$}%X(3XbJq4I;0LC^j#5r)A_YTz<`~ z7$g~9@IpYxzyJw{O6rP1MbBeeJa%?(Na7$dB4c290WK1deZc7mr`Urxl*;4)U4zP| z0am6#@!Yejt(~1RJ=@#wdc!>{ie>rGXpV93(G`5pr6-b2>53ut-iw*B{qM7~iX(9& zRQrIoQ7H-R5OaC569++EC4F5fS&1_I@f75kg{!w&x0P;bVd0vN4$Vtexz#^Z;Yv!7 zLIO;5?f(7U-P-f#&%-_PLeXsN=4%aBhW7TnkOax_9G|vDZ-;AQYn+#2_!Rjt?S3{q zj)fwVhJc=Ts*z|+{iXqND`Ijav6cL7dHF7P{7tuuxf$MEFO#;i3%3@s5lhQ?LDp4A zSzx;qxvv>PlqyjOZJ(PDy7U4hkr-VOOvL_|2}3FYc5oB3v(LZ-5pE4;GH;IrLpTMu zSU+epXvK56e$tDS0$niux&Wj^?O(q(x{v$L|6=!GW@g6F*NTu+Kj?ap=%Ekjm?9$L zpCDM+C~0ZwAOMS7!Ps;Ska5xPrafsJFre<)*#NSRgu-9Hdc#R0S6d@5Tx5HBy0JWM z1Zhp}!SBnkIEbxr4cQaK!63aCM0#+H!^8lX)kFl@brTqZVirzywe-x~+=I^w-~+T{ zG;=P%ANJF?WGPyJTSV~@N|@C+4QLc)8A+Z++sB+7dj8wVGTvqGBAf6CGhm{+{Sb^T zWRh^k`TqSoxZz^=XX@lC16i2XE#FaYin{7pUd+3^AXzNM1e=G zZve2#gC@4Eq&{4B!EnFVviPQe=G*xa!O?4QjQwZ)S|}LG^&ENy^3e5!dZ=V1TMp_h zEG#Thz7K|0!mY1}AG7xV^w$NO0~7wis|Zk=6!LWRN3(h@Z^Nrl3?Z2WDk-e%1zKLn zjv@6&R_q5%_|q~n8YhbcOvDR)_BTH?g^)VObtDE|C=YZb^+svHI3?cp$uJGqsDgJxLjxK^Zy|=f z-fF1AY5FB3v6)!o}g46TEuc}2q6}jHkL;qwj)*W?$*j&$T($s^yT95nD^@4%v z^~okMJ8y=^dhvU}eI;bIwcph3|Lg6`!>Me$x3_uPM97etWX=>R+dQO{L^98z!7MYk z%$XxoLQx@erk%|59LW&L6p>8HknvmldEV!JpZEQ}-|zVT`Z^r3@4fduT=#XaYpwG< z*IF2c@*)mWd^+-w?h{kx8Pgp=7+OTOoBtU>nCsfsLrZBTXdwz}H!^mpk8%shEvQ>@ zo2CSe5(Gr7#E&ytDRRJg6inf|;yR~6HrO-0BQ}vwDt@%QJUp5hub*GjA&jX_gge59 zZ|XHizoeBKk67HRYZ<6yQs^*rwkNA(KP3Hjvde(U;Taeaz~n=knXZP12dw1j7Url! zv9`2vkGi*^#vP`ZIPRwJiuh(E zJUAdCu@Dstia84vC!uTS6d;CFB*MoBzUpafTZoB{O-@d}6!eOntH$)L7!~Sq%gNPE zT0!O+v^{rEX1@uMF5vsStY!c_<`(!3B)408KJxMQ?qc`(Q94(@J5-FEz%^iFuPiT5 zIVaZ)(X$I)@V3TOC(66N2$<2ciq!u6q=CMoX|ymwzbg)`h2a?h|?rHb{=p-hlrW$Z2bY`Jo9aha7`aX_V^Fe36@4~7iPShZX z1M-JGo)}zU7%6_7oIL6CE#1Sg#_Hpp&1KADrGWFXI{In|%zyg>O?^jKb#&Da(6+uK;b=v}gR-?a8)`MZRv%pcg@Zf$`g) z3jp;c;!m-rYF0j2l^w~oFKmzDX18+Q_w9+eY6$|hwl+0zqDWxHQB+dG7Yw#LzP`1k zrmIT_NE;0UgY>*fwzsF3mj%!Y=RkYscv;QdoWrIk1;IO0JYaISb8wIrI0al8181lX z30-!6os^#zf^~|HE*O+iQM;PjF(q0L5`nD=W5;;^s`LP@*|&uIzHP5>%X}7Vyu6XGZImnel zLF>nP>eQ_Uq7AipD2WHrO{v@Bb)YVxLGy(QJ?PpT1PzN|D3YK>_s5UARpbmPBhh;| zBf`R*K+|}-(4dTW1^5%>w=75o?!UR82565Dgb1#An!I}knG|z-pjpob3dvE-iuFh!C)NE;|LDOSng~NsJCJ?;(rxs^6HF} z@{-q`Bq^@RJANU?H>&&i2~JMg7<%zG08c@Gz}Az7NFM_)qJWx9TGyr`IvGb9Hh|KG5bnH_+7#yA161i4R!lHiC-Ys9;K z6gX>kl9km@N>Fe~&9*8bG4Z~Yo7*pgB_~de4+GF`{tEZLEaNfj*!c?%ojy8&(!wf4twA zkoJTKyp(J4`VL<$cozVcIPLeb@cVET$#iyj_GalXvB;2XjGrVU~1hTBQZxx+H{U2B~Inl ztQzqzl6e-xJFUGBY~}Y15+q_ZE?<5p4J~`rc@qlhRoBa4y_No5zw-!#`(VVr8jW{uV~kM9#MVtctR}XQ#TZD8{;-r z&#+4=U|pi~qyOlEHv)Nn(uYfCM~0a|Do8P9xEdOc(Pr_P@@RaJ$l}vObLr})u)7W* zc3~7xM!$;7h`gP$yq8iHI^D$D7iJs-Cga7+mtw}$+VYuCCG>+M+1^F`vg^N;@QMwV zzNh32IC1v1YuBdU9Mn6%9?WwZ$gUdr{4L-tGQaoaYX#-N*0K2k!;#B)N(kMHkxV&N5!>w`=K9K)z)`iYo$OO*A^bAv89NE2K*1Lfm z9Q^!b;2b{Xj|l&9y@QaC{THs^%$QJjJ-&le)l9BBDEfm61~p-!dm^-?k%Q!7CcWDIs2_y zxi41O1N0jKGOqIqBFSYCd*|^M25a>(ttl6h872ht$un8%inm;S#Mz_Xp!-Ar|R zVOcQ8=b47!w0=5`w=4C-UkTImDn$Eq+!vaRtm2-X-CWIjdG=C2T6i{qQoJD%|=O77qe0K**@U>=vN2Gzv;S1+&_s z`Rw-=v&srgR1DsQ2i=%JNW95Nw-Y)0%t8|f*iy3SoW2R2iW%zE9^r4&5t+&|m%*=9 zTbZfLQdY4j3oq;CE&skt5~Y`p1lxyr^Jpf{DpjB#`QMAaPedF=1N6w1qiy8K!xQxC zwgx9vnn@R@ov}g|G_v#=1!!qp@anZO|JGN|9jKPA4C$GT>jYz)F}D79K3=l>_#|%J zt|?EAw&gfYV@PDpthZX87-e>J?M zaoO=Cl^sAcu2{V(+`1xpyoSzHUuxrcOGpbea1VgSC?a(`mMZG%xLZ+56%@RE^`z5_ zHaoGT#&KnZ7sUbJuacRxtz6*gtkEt1^j44N%+r3(v-&Y+J-RUqJy$BykGp3K&9+xJ zMi=KUP_G}}#`IMp9qSvOr<8md#TiB0MsWZVWO>w2fIhy_Nm0`6zpWa<0Cfrm*&V<8 z@zTyWe%1&>|2vdxI;1JILhWOVF37I}UnrhHw1OH+230VyCcu)70eJDf)9@JN2Tfgw z3svR3IrX6>B!%fwLzh$7#`9|&KnKA}i<=QegM1c759+qFCT?SeKFWDT zswG2R7|&VOG-M`VNs-fF(`=0pl^?SC?ZOg?DOq1nQ4zH9 ziKS|OxUgE2a0J>}_FIue18XX|%_ZWC;ze!CynxY{I87@RwOvt}z-vaiF`dfA5b+Ro zl%6w=`KmC!IOP;g6PC}a1w9cG*G!^mE_0iBFbQZhJYuGe8G7e1_Q`6K*O<|~smtz| zsHLcR6gC@Cj~zbznOwg=14?T236*A!@ zH<335mb;bqd_u4tNtw`)`=y<=g2oj?MvUh1HTw#hz zFh9+00?;&dPfa55tb(B^o854M!A22O#uhb3s42DL1gMj9gj55HpCnEb11yG%2LO@R zBc?H+Mg@CP%un8v2yZCj!Wg<$7O&k3oNHM9AVrhIeB~mg`xW`T!Co%riumqKAHU>a ziC!)OVuH{mkonHCAFhSu&oYT=<*c{@a<-KFN=r!)^?C#IV~9rhS`91QDI zQ5)t<(N6g1j_EtxF~ei48ItlURA-LiP3kgp;`OHnaGzC6CXAA*mCO=!$-F0OVH(aN z5YuYj;6#+r$#cubCh1_sqrQ9Q97Wc2+V|Pm@~tX=>UTX9y>R*KuT0pQP#_* zDcykKI>>OD`kAtl`s(UOB(49BsXTYFc8hu|u}Z%6wGPxv^x9*JwRKdWpLN^?FU;ia zxNBnqF{2xTw`re?;R}f1wFHP619=@i0=b4^px8TGKncgCPY-Tg-C*% zPi0&Iaxq{6Vvd-`bGsamm3VI=AxX`9Dll(C_yxbB3(M>8YzW~Oi@3E#nQrr$Wlr;m z4zDOus>&C{<)`%CE zX;`T{VWE_hlhemKaRN%O&y@W`USv|dsPe+V1SI{;-g&q3-Km1cD|+kQY1N&slDhX# z817nPoC^AokMB4#D@3w`MYykx-);&$*O?b!5wCXW^+cu4mQgfRp?D;i+)g9T3Lw!Tg^vD4%3A)O`EVTU##)VX00(ws!ebzhgt}~ z-K6Yshk$ewhdY$c>_CMW2N0{y<` zuCk0}1vkq5^dHYC$AjL(N@dQoZ4mBtF^a$e!->`7t8)U+YAC>}YobcLpgPseMNl2p z@Lm5Hp(hzuLiJ%c*W9RcTfiIl?tHEEymx13-O9p!<~_Ok?^=eUp;%$ibWQ~ZXf8-{ z@Hx`UM~0NC7$Mo=C;p`QLY1SuMkv*R*8Spv$dvD!I!!4|3u0db#3cH~rR;tseH+!{ zPus!EuB|n}m1~q+N^`8slXL%}PbANVJGmeE1L1ZbFD;1U8Db)*r6iAY0D-M?3L>7|mV=gu>dfUvMI z<(JnDJ`a1yWA>cUVjNJ%S@&7~1XD=hBBT>2UXW}lteCvrRUf??Tq&qW-32UyjX%(3wn zbb6oM-PsQh4^JRBZ{Adn7g{>Y$@$z&-wAqb06o|^Bc&0)8$t)mMvGQO!FUk;uD@XV z)JXZ)bBzBBlp|7}w&v8zF=PIg1wu>OL`G;BVcg=?Filhmf&TpgvPl$s9Mc%39M0di9^ZYNay3+5*U&i6p8%%|r(kAfGF*-i?a8hWkjFFEDHTif+sLgwa z|JDiNQ?u2PkD>h(20ZmiUr32Qb+43znbTM=G2E`{GTCEpeuWsYsk3!|8yL!_Quvp;)(nZA@>f|1p zA)qLGbv6A?nGqcdRB%9`{2I57y`24c=jYSP?NzOaa($M(;GF%O*{#PESmbOgiJ)cm zyUXbgQdzHS-?4G)y70Wl+;floP8D-pj{k$QCOigMcI(~bfkv&fp#K17voTP!RsI~4a+4UQFR9RkiQ&hF# z$*z)E+YGaM`zvW&?d2~T3%3qjV%oAcm3V2LQg7Vtz%Fs!pYKUc0#B*_XIbXK58+S> zt}HU|=iI=%hqsmfq@uAk5;}8O9DYM#E^9badgFdJGYB;$q4k1I-7MY*P;22xDr_O> z+#oTAb?fjw$UFg6j2wq0PI$P3bp4Tq{nKRCRGm%YduJ9{whpTp+-7uZZzY#kIGd8L zm+tqlNeeSVod%P?xHmyS)p zxA~qr=%EVQD@(CK9q9J~Is%Z{3sqm1X|@*Ugig+&4LVVkKlI(-f*3X2>NTyIFkq>c z*Rye6()}TJmdh-1<$7O#Do>5OQqa@$-A>K`)+`k?^FY6 zlk+$l9hZy3nf+cy0hV|0V;^5SwZC88ei6z-fE$DBe+DUQ2Z5?uSdiYbIPJInmZC+z z^evT>GGX=~iyJe)Yze_*OPS$UF86v~^V6Mn%#DjYE$W>9^Hl~R@1|DaPPt0r2NVs2 zrk!aplDw}UQ0BKDTlO@!?&WOeei-e$PUDa7pm{B(!~cc=z0LcK zXkaP*DQ20_#Gp?z=s7osh61WDULZVti3IE$<@_$6B}N#EGk%mWh!D9QJ3RdP^n_W) z$8S`VVg3QhWBS#Qx6jF03Wvv+cdajL-F!_n-Sx#m7j~a;nFJ-T*PQZ~4m@gPWBNGf z7jZ-=_NRhsSaAL9B%RJfXd?U?HOFcx&^Cdhms3Q9 z3UV89x)4xdKuVTS*A>vh!orkt{=NXz6*8_ovP)zc5O6e3n2N3;Cg_tqsr~U@ODb=- z7&93jTlh^M4#j1QQl+Xg$Rg!ULS#`C29#EM+p_Gk>@6E&rtiZp15R_cl)TFKgGHVA z=d+g=rP^s>@jb}~?7r~IgztbRhmi*8k`)S^wrq;T*V= zK%-{Fik)K@NWAoQFKG4Ho1;VO;1y?*cpm3k&ygAL3+5EW11e~yMAQe=XQC-mH7C(Y zo?(lk@pq^fsY{=Ef!5g&>-yGg{LL3xJ5UVrMX2AB-~5@eAofJi3uI|D;?ZL-N3OA1 zV>*0VBj~fe`-g*S%uEW|u2#aH;e8sKw^T-=yxvhZf4+?7s!VQlAvlrjPm;!*4`gk;G0h{B=RSTe`c$mI65|k%m3%I+xkNJSBSo145;%=L$bpg?uJk`n( zyIYk5)T2=*7PF>?ALY<-WP@ZaB>I^sZG$3euvea>x5|Jd;Y`msV@%a^ z^&=`K$gA{s%IeuhGq%JjqM2ZRx5P~s9iD6`X8Bw!Z5Fqk9=b&ukU#AyFk+U9R4qGj zHm5feq4rxYgPtcl%ppcZdahEh$U)$a;!5%i}Z zZ+bU(*7OlJMgn4GxS~IA$>pWXsI* zY4CloJeLikZH0U{#0>9QAJJaEgyY?3Lv>YF3$S0>|J*NO4XRy2Xw&57 z_>HFq%RbzpRb$%b=$M{Eu2s=3>u3)%5(LPh3?@U(x92&eU z9B}09baeFW-F?WY|JM=Jdc9G_=AQX(?;<4f{pv%X7jMvG#@NdpaG-yGgckDY8<{y#|XSlw{85*hHzO)d;-G%?)i*hQ83KC1TJ0gdj9i5E;W#|3qTJ#C`&ixiGjv?ocOg-} z8?8$U`F=0`sv>K~~ zEumr>Ct(utmbEx-EgQ2E^6Tm5KbJAwBt<$nT-xK-#o_1|CffYugW&nBmu<0HB4c8Y zwj4qvTbwM;SfiyNwb+*-@o#gRIU#Pk=guU1vrENl2%~2uzpdV4MtFv3Sj6d2YLTa> zqJ|Qz{=Qb)qHQW1Zx(*QJi<`5TZyy$ZhR;{DPfNMWqhdLx^{@-Vc7_Zw+@&CM#R<$%9Tz2qxSWs3HEzho4aa$>L}X_SAk?2-q=`?0uXwQVl{E!kTl zfBW>;EzagIcP5EYB4D_v2@G|Y`hG+mdD7a+^d4pFVJt=MTZ-%@?0A>6j zQ*Td>*qlG$wcM@OJyom{M-%3!Q~LY;B32Ryd`^rRJruk5_8-RR4|gDHxo6CaRs{mx>Vd& z+#3GRcmL-H|M{-Se4_wk=6-YY>83&bJ_#8)FE!PxQ6px_8K+%Y$kUk5i${LfGS@0mq p$?%c^_n*{1Umj!5B3n8-hWcW{gbm#-)= 1024 * 1024) { // more than 1 mb qint64 sizeTenthMb = (size * 10 / (1024 * 1024)); - return QString::number(sizeTenthMb / 10) + '.' + QString::number(sizeTenthMb % 10) + qsl("MB"); + return QString::number(sizeTenthMb / 10) + '.' + QString::number(sizeTenthMb % 10) + qsl(" MB"); } qint64 sizeTenthKb = (size * 10 / 1024); - return QString::number(sizeTenthKb / 10) + '.' + QString::number(sizeTenthKb % 10) + qsl("KB"); + return QString::number(sizeTenthKb / 10) + '.' + QString::number(sizeTenthKb % 10) + qsl(" KB"); } QString formatDownloadText(qint64 ready, qint64 total) { diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 4e4fe1813..9be5f69bd 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -3735,6 +3735,8 @@ void HistoryWidget::sendBotCommand(const QString &cmd, MsgId replyTo) { // reply hist->lastKeyboardUsed = true; } } + + _field.setFocus(); } void HistoryWidget::insertBotCommand(const QString &cmd) { diff --git a/Telegram/SourceFiles/mtproto/mtpConnection.cpp b/Telegram/SourceFiles/mtproto/mtpConnection.cpp index 413c04dc0..c71f5b202 100644 --- a/Telegram/SourceFiles/mtproto/mtpConnection.cpp +++ b/Telegram/SourceFiles/mtproto/mtpConnection.cpp @@ -1198,15 +1198,21 @@ void MTProtoConnectionPrivate::createConn(bool createIPv4, bool createIPv6) { void MTProtoConnectionPrivate::destroyConn(MTPabstractConnection **conn) { if (conn) { - QWriteLocker lock(&stateConnMutex); - if (*conn) { - disconnect(*conn, SIGNAL(disconnected()), 0, 0); - disconnect(*conn, SIGNAL(receivedData()), 0, 0); - disconnect(*conn, SIGNAL(receivedSome()), 0, 0); + MTPabstractConnection *toDisconnect = 0; - (*conn)->disconnectFromServer(); - (*conn)->deleteLater(); - *conn = 0; + { + QWriteLocker lock(&stateConnMutex); + if (*conn) { + toDisconnect = *conn; + disconnect(*conn, SIGNAL(disconnected()), 0, 0); + disconnect(*conn, SIGNAL(receivedData()), 0, 0); + disconnect(*conn, SIGNAL(receivedSome()), 0, 0); + *conn = 0; + } + } + if (toDisconnect) { + toDisconnect->disconnectFromServer(); + toDisconnect->deleteLater(); } } else { destroyConn(&_conn4); From da5887fbb5c169170bab685f3ddb0493ac45763f Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 29 Jun 2015 15:43:41 +0300 Subject: [PATCH 023/121] fixed two layout bugs --- Telegram/SourceFiles/historywidget.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 9be5f69bd..7766fcdcf 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -1099,6 +1099,8 @@ void HistoryList::updateBotInfo(bool recount) { botDescWidth = tw; newh = botInfo->text.countHeight(botDescWidth); } + } else if (recount) { + newh = botDescHeight; } } if (recount) { @@ -4466,6 +4468,10 @@ void HistoryWidget::peerMessagesUpdated(PeerId peer) { if (histPeer && _list && peer == histPeer->id) { updateListSize(); updateBotKeyboard(); + if (!_scroll.isHidden() && _botStart.isHidden() == isBotStart()) { + updateControlsVisibility(); + resizeEvent(0); + } } } From 4b2fccf762d797bb36d01c8449732cb1e1d43503 Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 29 Jun 2015 15:47:25 +0300 Subject: [PATCH 024/121] changelog for stable version added --- Telegram/Resources/lang.strings | 2 +- Telegram/SourceFiles/application.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Telegram/Resources/lang.strings b/Telegram/Resources/lang.strings index 4f85b5cd7..06ae05cea 100644 --- a/Telegram/Resources/lang.strings +++ b/Telegram/Resources/lang.strings @@ -602,7 +602,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop was updated to version {version}\n\n{changes}\n\nFull version history is available here:\n{link}"; "lng_new_version_minor" = "— Bug fixes and other minor improvements"; -"lng_new_version_text" = "This new version includes support for bots using the new bot API, free for everyone. If you're an engineer, create your own bots for games, services or integrations.\n\nLearn more at {blog_link}"; +"lng_new_version_text" = "— Forward photos, media and stickers with drag-n-drop\n— Drag-n-drop text messages by timestamp to forward them\n— Larger stickers panel\n— IPv6 checkbox added to Connection Type in Settings"; "lng_menu_insert_unicode" = "Insert Unicode control character"; diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index d0f213bfd..8f6494c37 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -643,7 +643,7 @@ void Application::checkMapVersion() { if (DevChannel && Local::oldMapVersion() < 8034) { versionFeatures = QString::fromUtf8("\xe2\x80\x94 Forward photos, media and stickers with drag-n-drop\n\xe2\x80\x94 Drag-n-drop text messages by timestamp to forward them\n\xe2\x80\x94 Larger stickers panel");// .replace('@', qsl("@") + QChar(0x200D)); } else if (!DevChannel && Local::oldMapVersion() < 8030) { - versionFeatures = lng_new_version_text(lt_blog_link, qsl("https://telegram.org/blog/bot-revolution"));// lang(lng_new_version_text).trimmed(); + versionFeatures = lang(lng_new_version_text).trimmed(); } if (!versionFeatures.isEmpty()) { versionFeatures = lng_new_version_wrap(lt_version, QString::fromStdWString(AppVersionStr), lt_changes, versionFeatures, lt_link, qsl("https://desktop.telegram.org/#changelog")); From 24ffa08d6e70de91447c960b0be2e96731d7450e Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 30 Jun 2015 01:06:40 +0300 Subject: [PATCH 025/121] langs updated --- Telegram/SourceFiles/langs/lang_de.strings | 14 +++++++------- Telegram/SourceFiles/langs/lang_es.strings | 2 +- Telegram/SourceFiles/langs/lang_it.strings | 12 ++++++------ Telegram/SourceFiles/langs/lang_ko.strings | 12 ++++++------ Telegram/SourceFiles/langs/lang_nl.strings | 12 ++++++------ Telegram/SourceFiles/langs/lang_pt_BR.strings | 12 ++++++------ 6 files changed, 32 insertions(+), 32 deletions(-) diff --git a/Telegram/SourceFiles/langs/lang_de.strings b/Telegram/SourceFiles/langs/lang_de.strings index 1864b1260..a23e0d54d 100644 --- a/Telegram/SourceFiles/langs/lang_de.strings +++ b/Telegram/SourceFiles/langs/lang_de.strings @@ -166,11 +166,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_username_title" = "Benutzernamen ändern"; "lng_username_about" = "Wähle einen (optionalen) öffentlichen \nBenutzernamen, wenn du von anderen \ngefunden werden willst, ohne, dass sie \ndeine Nummer kennen müssen.\n\nErlaubt sind a-z, 0-9 und Unterstriche. \nDie Mindestlänge beträgt 5 Zeichen."; -"lng_username_invalid" = "Der Benutzername ist fehlerhaft."; -"lng_username_occupied" = "Der Benutzername ist bereits belegt."; -"lng_username_too_short" = "Der Benutzername ist zu kurz."; -"lng_username_bad_symbols" = "Nur a-z, 0-9 und Unterstriche sind erlaubt."; -"lng_username_available" = "Der Benutzername ist noch verfügbar."; +"lng_username_invalid" = "Benutzername ungültig."; +"lng_username_occupied" = "Benutzername ist bereits belegt."; +"lng_username_too_short" = "Benutzername ist zu kurz."; +"lng_username_bad_symbols" = "Ungültige Zeichen im Benutzernamen."; +"lng_username_available" = "Benutzername ist verfügbar."; "lng_username_not_found" = "Kontakt @{user} konnte nicht gefunden werden."; "lng_settings_section_contact_info" = "Kontaktprofil"; @@ -573,7 +573,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_selected_delete_confirm" = "Löschen"; "lng_about_version" = "Version {version}"; -"lng_about_text" = "Telegram Desktop basiert auf [a href=\"https://core.telegram.org/mtproto\"]MTProto[/a] und\ndem [a href=\"https://core.telegram.org/api\"]Telegram API[/a], um Geschwindigkeit \nund Sicherheit zu gewährleisten.\n\nSoftware steht unter der [a href=\"https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE\"]GNU GPL[/a] Version 3,\nQuelltext ist bei [a href=\"https://github.com/telegramdesktop/tdesktop\"]GitHub[/a] verfügbar."; +"lng_about_text" = "Telegram Desktop basiert auf [a href=\"https://core.telegram.org/mtproto\"]MTProto[/a] und\nder [a href=\"https://core.telegram.org/api\"]Telegram API[/a], um Geschwindigkeit \nund Sicherheit zu gewährleisten.\n\nSoftware steht unter der [a href=\"https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE\"]GNU GPL[/a] Version 3,\nQuelltext ist bei [a href=\"https://github.com/telegramdesktop/tdesktop\"]GitHub[/a] verfügbar."; "lng_about_done" = "Fertig"; "lng_search_found_results" = "{count:Keine Nachrichten|# Nachricht|# Nachrichten}"; @@ -602,7 +602,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop wurde aktualisiert auf Version {version}\n\n{changes}\n\nGesamter Versionsverlauf:\n{link}"; "lng_new_version_minor" = "— Fehlerbehebungen und Softwareoptimierungen"; -"lng_new_version_text" = "Diese neue Version enthält Unterstützung für die neue Bot API, welche für alle kostenlos verfügbar ist. Kannst du programmieren? Erstelle deine eigenen Bots für Spiele, Dienste oder Integrationen.\n\nMehr dazu unter {blog_link}"; +"lng_new_version_text" = "— Fotos, Medien und Sticker per Drag-and-drop weiterleiten\n— Drag-and-drop von Textnachrichten (Chatnachricht bei der Uhrzeit festhalten + verschieben)\n— Sticker Panel wurde vergrössert\n— IPv6 Auswahl in Verbindungseinstellungen hinzugefügt"; "lng_menu_insert_unicode" = "Unicode-Steuerzeichen einfügen"; diff --git a/Telegram/SourceFiles/langs/lang_es.strings b/Telegram/SourceFiles/langs/lang_es.strings index ef5804f26..c61ae8563 100644 --- a/Telegram/SourceFiles/langs/lang_es.strings +++ b/Telegram/SourceFiles/langs/lang_es.strings @@ -602,7 +602,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop fue actualizada a la versión {version}\n\n{changes}\n\nEl historial completo está disponible aquí:\n{link}"; "lng_new_version_minor" = "— Corrección de errores y otras mejoras menores"; -"lng_new_version_text" = "Esta nueva versión incluye el soporte para bots, usando la nueva API para bots, gratis para todos. Si eres un ingeniero, crea tus propios bots para juegos, servicios o integraciones .\n\nConoce más en {blog_link}"; +"lng_new_version_text" = "— Reenvía fotos, multimedia y stickers arrastrándolos y soltándolos\n— Arrastrar y soltar para mensajes (mantén pulsado sobre la hora del mensaje en el chat y suéltalo)\n— Panel de stickers más grande\n— Opción de IPv6 añadida al Tipo de conexión, en Ajustes."; "lng_menu_insert_unicode" = "Insertar caracteres de control Unicode"; diff --git a/Telegram/SourceFiles/langs/lang_it.strings b/Telegram/SourceFiles/langs/lang_it.strings index 1ba5f15e6..89bc68e42 100644 --- a/Telegram/SourceFiles/langs/lang_it.strings +++ b/Telegram/SourceFiles/langs/lang_it.strings @@ -166,11 +166,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_username_title" = "Cambia username"; "lng_username_about" = "Puoi scegliere un username su Telegram.\nSe lo fai, le altre persone potranno trovarti\ntramite questo nome utente e contattarti \nsenza conoscere il tuo numero di telefono.\n\nPuoi usare a-z, 0-9 e underscore.\nLa lunghezza minima è di 5 caratteri."; -"lng_username_invalid" = "Il nome non è valido."; -"lng_username_occupied" = "Il nome è già occupato."; -"lng_username_too_short" = "Il nome è troppo corto."; -"lng_username_bad_symbols" = "Questo nome ha simboli errati."; -"lng_username_available" = "Il nome è disponibile."; +"lng_username_invalid" = "L'username non è valido."; +"lng_username_occupied" = "L'username è già occupato."; +"lng_username_too_short" = "L'username è troppo corto."; +"lng_username_bad_symbols" = "Questo username ha simboli errati."; +"lng_username_available" = "L'username è disponibile."; "lng_username_not_found" = "Utente @{user} non trovato."; "lng_settings_section_contact_info" = "Informazioni di contatto"; @@ -602,7 +602,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop si è aggiornato alla versione {version}\n\n{changes}\n\nLa cronologia degli update è disponibile qui:\n{link}"; "lng_new_version_minor" = "— Bug fix e altri miglioramenti minori"; -"lng_new_version_text" = "Questa nuova versione include il support per i bot usando la nuova API per i bot. Se sei un ingegnere, crea i tuoi bot per giochi, servizi o integrazioni. Scopri di più su {blog_link}"; +"lng_new_version_text" = "— Inoltra foto, media e sticker trascinandoli e rilasciandoli\n— Trascina e rilascia messaggi di testo premendo sull'orario per inoltrarli\n— Pannello degli sticker più largo\n— Aggiunto checkbox per l'IPv6 nelle Impostazioni di Connessione"; "lng_menu_insert_unicode" = "Inserisci carattere di controllo Unicode"; diff --git a/Telegram/SourceFiles/langs/lang_ko.strings b/Telegram/SourceFiles/langs/lang_ko.strings index 7a9d80614..6812259f9 100644 --- a/Telegram/SourceFiles/langs/lang_ko.strings +++ b/Telegram/SourceFiles/langs/lang_ko.strings @@ -166,11 +166,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_username_title" = "아이디 변경"; "lng_username_about" = "텔레그램 아이디를 설정할 수 있습니다. \n아이디를 설정하면 회원님의 전화번호를 몰라도 아이디로 회원님을 찾아 대화를 나눌 수 있습니다.\n아이디는 영문, 밑줄, 숫자로 a-z, _, 0-9, \n다섯 글자 이상으로 설정해 주세요."; -"lng_username_invalid" = "올바르지 않은 아이디입니다."; -"lng_username_occupied" = "사용중인 아이디입니다."; -"lng_username_too_short" = "아이디가 너무 짧습니다."; -"lng_username_bad_symbols" = "올바르지 않은 아이디입니다."; -"lng_username_available" = "사용 가능한 아이디입니다."; +"lng_username_invalid" = "This username is invalid."; +"lng_username_occupied" = "This username is already occupied."; +"lng_username_too_short" = "This username is too short."; +"lng_username_bad_symbols" = "This username has bad symbols."; +"lng_username_available" = "This username is available."; "lng_username_not_found" = "아이디 @{user}를 찾을 수 없습니다."; "lng_settings_section_contact_info" = "연락처 정보"; @@ -602,7 +602,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "텔레그램 데스크탑은 {version} 버전으로 업데이트 되었습니다.\n\n{changes}\n\n전체 버전 히스토리는 아래에서 확인 가능합니다:\n{link}"; "lng_new_version_minor" = "— 버그 수정 및 일부 기능 향상"; -"lng_new_version_text" = "새로운 버전에서는 신규 봇 API를 무료로 공개합니다. 개발자라면 누구나 게임, 서비스나 통합 봇등 개발이 가능합니다. \n\n{blog_link}에서 자세한 사항을 알아보세요."; +"lng_new_version_text" = "— Forward photos, media and stickers with drag-n-drop\n— Drag-n-drop text messages by timestamp to forward them\n— Larger stickers panel\n— IPv6 checkbox added to Connection Type in Settings"; "lng_menu_insert_unicode" = "유니코드 문자를 입력하세요."; diff --git a/Telegram/SourceFiles/langs/lang_nl.strings b/Telegram/SourceFiles/langs/lang_nl.strings index 92202f48f..c945334a4 100644 --- a/Telegram/SourceFiles/langs/lang_nl.strings +++ b/Telegram/SourceFiles/langs/lang_nl.strings @@ -166,11 +166,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_username_title" = "Gebruikersnaam wijzigen"; "lng_username_about" = "Je kunt hier je gebruikersnaam kiezen. \nHiermee kunnen anderen je vinden \nen contact met je opnemen zonder \nje telefoonnummer te weten.\n\na-z, 0-9 en underscore is toegestaan. \nDe minimale lengte is 5 tekens."; -"lng_username_invalid" = "Deze naam is ongeldig."; -"lng_username_occupied" = "Sorry, deze gebruikersnaam is al bezet."; -"lng_username_too_short" = "Deze naam is te kort."; -"lng_username_bad_symbols" = "Sorry, deze naam bevat ongeldige tekens."; -"lng_username_available" = "Deze naam is beschikbaar."; +"lng_username_invalid" = "Deze gebruikersnaam is ongeldig."; +"lng_username_occupied" = "Deze gebruikersnaam is al bezet"; +"lng_username_too_short" = "Deze gebruikersnaam is te kort."; +"lng_username_bad_symbols" = "Deze gebruikersnaam bevat ongeldige tekens."; +"lng_username_available" = "Deze gebruikersnaam is beschikbaar."; "lng_username_not_found" = "Gebruiker @{user} niet gevonden."; "lng_settings_section_contact_info" = "Contactgegevens"; @@ -602,7 +602,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram is bijgewerkt naar versie {version}\n\n{changes} \n\nVolledige versiegeschiedenis is hier te vinden:\n{link}"; "lng_new_version_minor" = "— Probleemoplossing en andere kleine verbeteringen"; -"lng_new_version_text" = "Deze versie heeft ondersteuning voor de nieuwe bot-API, gratis voor iedereen. Handig met programmeren? Maak dan je eigen bots voor spelletjes, diensten en integraties. \n\nMeer weten? kijk op: {blog_link}"; +"lng_new_version_text" = "— Foto's media en stickers doorsturen door slepen en los te laten.\n— Berichten doorsturen door de tijdsaanduiding aan te klikken, slepen en los te laten.\n— Groter stickerspaneel\n— IPv6 optie toegevoegd aan de connectietypes onder instellingen."; "lng_menu_insert_unicode" = "Unicode-besturingsteken invoegen"; diff --git a/Telegram/SourceFiles/langs/lang_pt_BR.strings b/Telegram/SourceFiles/langs/lang_pt_BR.strings index d5cd379fd..c469e9a8b 100644 --- a/Telegram/SourceFiles/langs/lang_pt_BR.strings +++ b/Telegram/SourceFiles/langs/lang_pt_BR.strings @@ -166,11 +166,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_username_title" = "Alterar nome de usuário"; "lng_username_about" = "Você pode escolher um nome de usuário no Telegram.\nAssim, outras pessoas poderão te encontrar\npelo nome de usuário e entrar em contato\nsem precisar saber seu telefone.\n\nVocê pode usar a-z, 0-9 e underline.\nO tamanho mínimo é 5 caracteres."; -"lng_username_invalid" = "Esse nome é inválido."; -"lng_username_occupied" = "Esse nome já está ocupado."; -"lng_username_too_short" = "Esse nome é muito curto."; -"lng_username_bad_symbols" = "Esse nome contém símbolos incompatíveis."; -"lng_username_available" = "Esse nome está disponível."; +"lng_username_invalid" = "Nome de usuário inválido."; +"lng_username_occupied" = "Nome de usuário ocupado."; +"lng_username_too_short" = "Nome de usuário muito curto."; +"lng_username_bad_symbols" = "Nome de usuário com símbolos incompatíveis."; +"lng_username_available" = "Nome de usuário disponível."; "lng_username_not_found" = "Usuário @{user} não encontrado."; "lng_settings_section_contact_info" = "Informação de contato"; @@ -602,7 +602,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop foi atualizado para a versão {version}\n\n{changes}\n\nHistórico completo de mudanças disponível aqui:\n{link}"; "lng_new_version_minor" = "— Resolução de bugs e outras menores melhorias"; -"lng_new_version_text" = "Essa nova versão inclui suporte para bots usando a nova API de bots. Se você for um engenheiro, crie seus próprios bots para jogos, serviços ou integrações.\n\nLeia mais em {blog_link}"; +"lng_new_version_text" = "— Encaminhar fotos, mídias e stickers com arrastar-e-soltar\n— Encaminhar textos pressionando sobre a data e hora da mensagem e arrastando para outra conversa\n— Painel de stickers maior\n— IPv6 adicionado em 'Tipos de Conexão' nas Configurações"; "lng_menu_insert_unicode" = "Inserir caractere de controle Unicode"; From d57f6a973fd2cce2d1673cc2f7f5c4aaeccec74b Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 30 Jun 2015 01:09:23 +0300 Subject: [PATCH 026/121] version 0.8.35.dev ready with some optimizations --- Telegram/PrepareWin.bat | 8 +- Telegram/SourceFiles/apiwrap.cpp | 83 ++++++++++++-- Telegram/SourceFiles/apiwrap.h | 10 +- Telegram/SourceFiles/app.cpp | 115 ++++++++++++++++---- Telegram/SourceFiles/app.h | 19 ++-- Telegram/SourceFiles/application.cpp | 4 +- Telegram/SourceFiles/config.h | 4 +- Telegram/SourceFiles/historywidget.cpp | 1 - Telegram/SourceFiles/mainwidget.cpp | 56 ++++++---- Telegram/SourceFiles/mediaview.cpp | 2 +- Telegram/SourceFiles/profilewidget.cpp | 25 +++-- Telegram/SourceFiles/settingswidget.cpp | 6 +- Telegram/SourceFiles/structs.cpp | 28 +++-- Telegram/SourceFiles/structs.h | 8 +- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 +- Telegram/Version.sh | 2 +- 18 files changed, 275 insertions(+), 110 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index 4d5e7f6c0..0be6ea4da 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,10 +1,10 @@ @echo OFF set "AppVersionStrMajor=0.8" -set "AppVersion=8034" -set "AppVersionStrSmall=0.8.34" -set "AppVersionStr=0.8.34" -set "AppVersionStrFull=0.8.34.0" +set "AppVersion=8035" +set "AppVersionStrSmall=0.8.35" +set "AppVersionStr=0.8.35" +set "AppVersionStrFull=0.8.35.0" set "DevChannel=1" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/SourceFiles/apiwrap.cpp b/Telegram/SourceFiles/apiwrap.cpp index 88f1813df..3db15bb4b 100644 --- a/Telegram/SourceFiles/apiwrap.cpp +++ b/Telegram/SourceFiles/apiwrap.cpp @@ -132,22 +132,27 @@ void ApiWrap::gotReplyTo(const MTPmessages_Messages &msgs, mtpRequestId req) { } void ApiWrap::requestFullPeer(PeerData *peer) { - if (!peer || _fullRequests.contains(peer)) return; + if (!peer || _fullPeerRequests.contains(peer)) return; + mtpRequestId req; if (peer->chat) { - req = MTP::send(MTPmessages_GetFullChat(MTP_int(App::chatFromPeer(peer->id))), rpcDone(&ApiWrap::gotChatFull, peer), rpcFail(&ApiWrap::gotPeerFailed, peer)); + req = MTP::send(MTPmessages_GetFullChat(MTP_int(App::chatFromPeer(peer->id))), rpcDone(&ApiWrap::gotChatFull, peer), rpcFail(&ApiWrap::gotPeerFullFailed, peer)); } else { - req = MTP::send(MTPusers_GetFullUser(peer->asUser()->inputUser), rpcDone(&ApiWrap::gotUserFull, peer), rpcFail(&ApiWrap::gotPeerFailed, peer)); + req = MTP::send(MTPusers_GetFullUser(peer->asUser()->inputUser), rpcDone(&ApiWrap::gotUserFull, peer), rpcFail(&ApiWrap::gotPeerFullFailed, peer)); } - _fullRequests.insert(peer, req); + _fullPeerRequests.insert(peer, req); } void ApiWrap::gotChatFull(PeerData *peer, const MTPmessages_ChatFull &result) { const MTPDmessages_chatFull &d(result.c_messages_chatFull()); const MTPDchatFull &f(d.vfull_chat.c_chatFull()); - App::feedUsers(d.vusers); - App::feedChats(d.vchats); - App::feedParticipants(f.vparticipants); + + const QVector &vc(d.vchats.c_vector().v); + bool badVersion = (!vc.isEmpty() && vc.at(0).type() == mtpc_chat && vc.at(0).c_chat().vversion.v < peer->asChat()->version); + + App::feedUsers(d.vusers, false); + App::feedChats(d.vchats, false); + App::feedParticipants(f.vparticipants, false, false); const QVector &v(f.vbot_info.c_vector().v); for (QVector::const_iterator i = v.cbegin(), e = v.cend(); i < e; ++i) { switch (i->type()) { @@ -156,6 +161,7 @@ void ApiWrap::gotChatFull(PeerData *peer, const MTPmessages_ChatFull &result) { UserData *user = App::userLoaded(b.vuser_id.v); if (user) { user->setBotInfo(*i); + App::clearPeerUpdated(user); emit fullPeerUpdated(user); } } break; @@ -167,33 +173,86 @@ void ApiWrap::gotChatFull(PeerData *peer, const MTPmessages_ChatFull &result) { if (photo) { chat->photoId = photo->id; photo->chat = chat; + } else { + chat->photoId = 0; } chat->invitationUrl = (f.vexported_invite.type() == mtpc_chatInviteExported) ? qs(f.vexported_invite.c_chatInviteExported().vlink) : QString(); } App::main()->gotNotifySetting(MTP_inputNotifyPeer(peer->input), f.vnotify_settings); - _fullRequests.remove(peer); + _fullPeerRequests.remove(peer); + if (badVersion) { + peer->asChat()->version = vc.at(0).c_chat().vversion.v; + requestPeer(peer); + } + App::clearPeerUpdated(peer); emit fullPeerUpdated(peer); + App::emitPeerUpdated(); } void ApiWrap::gotUserFull(PeerData *peer, const MTPUserFull &result) { const MTPDuserFull &d(result.c_userFull()); - App::feedUsers(MTP_vector(1, d.vuser)); + App::feedUsers(MTP_vector(1, d.vuser), false); App::feedPhoto(d.vprofile_photo); - App::feedUserLink(MTP_int(App::userFromPeer(peer->id)), d.vlink.c_contacts_link().vmy_link, d.vlink.c_contacts_link().vforeign_link); + App::feedUserLink(MTP_int(App::userFromPeer(peer->id)), d.vlink.c_contacts_link().vmy_link, d.vlink.c_contacts_link().vforeign_link, false); App::main()->gotNotifySetting(MTP_inputNotifyPeer(peer->input), d.vnotify_settings); peer->asUser()->setBotInfo(d.vbot_info); - _fullRequests.remove(peer); + _fullPeerRequests.remove(peer); + App::clearPeerUpdated(peer); emit fullPeerUpdated(peer); + App::emitPeerUpdated(); +} + +bool ApiWrap::gotPeerFullFailed(PeerData *peer, const RPCError &error) { + if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false; + + _fullPeerRequests.remove(peer); + return true; +} + +void ApiWrap::requestPeer(PeerData *peer) { + if (!peer || _fullPeerRequests.contains(peer) || _peerRequests.contains(peer)) return; + + mtpRequestId req; + if (peer->chat) { + req = MTP::send(MTPmessages_GetChats(MTP_vector(1, MTP_int(App::chatFromPeer(peer->id)))), rpcDone(&ApiWrap::gotChat, peer), rpcFail(&ApiWrap::gotPeerFailed, peer)); + } else { + req = MTP::send(MTPusers_GetUsers(MTP_vector(1, peer->asUser()->inputUser)), rpcDone(&ApiWrap::gotUser, peer), rpcFail(&ApiWrap::gotPeerFailed, peer)); + } + _peerRequests.insert(peer, req); +} + +void ApiWrap::gotChat(PeerData *peer, const MTPmessages_Chats &result) { + _peerRequests.remove(peer); + + if (result.type() == mtpc_messages_chats) { + const QVector &v(result.c_messages_chats().vchats.c_vector().v); + bool badVersion = (!v.isEmpty() && v.at(0).type() == mtpc_chat && v.at(0).c_chat().vversion.v < peer->asChat()->version); + ChatData *chat = App::feedChats(result.c_messages_chats().vchats); + if (chat == peer) { + if (badVersion) { + peer->asChat()->version = v.at(0).c_chat().vversion.v; + requestPeer(peer); + } + } + } +} + +void ApiWrap::gotUser(PeerData *peer, const MTPVector &result) { + _peerRequests.remove(peer); + + UserData *user = App::feedUsers(result); + if (user == peer) { + } } bool ApiWrap::gotPeerFailed(PeerData *peer, const RPCError &error) { if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false; - _fullRequests.remove(peer); + _peerRequests.remove(peer); return true; } diff --git a/Telegram/SourceFiles/apiwrap.h b/Telegram/SourceFiles/apiwrap.h index 40c453e09..f73561c4c 100644 --- a/Telegram/SourceFiles/apiwrap.h +++ b/Telegram/SourceFiles/apiwrap.h @@ -31,6 +31,7 @@ public: void requestReplyTo(HistoryReply *reply, MsgId to); void requestFullPeer(PeerData *peer); + void requestPeer(PeerData *peer); void requestWebPageDelayed(WebPageData *page); void clearWebPageRequest(WebPageData *page); @@ -65,9 +66,14 @@ private: void gotChatFull(PeerData *peer, const MTPmessages_ChatFull &result); void gotUserFull(PeerData *peer, const MTPUserFull &result); + bool gotPeerFullFailed(PeerData *peer, const RPCError &err); + typedef QMap PeerRequests; + PeerRequests _fullPeerRequests; + + void gotChat(PeerData *peer, const MTPmessages_Chats &result); + void gotUser(PeerData *peer, const MTPVector &result); bool gotPeerFailed(PeerData *peer, const RPCError &err); - typedef QMap FullRequests; - FullRequests _fullRequests; + PeerRequests _peerRequests; void gotWebPages(const MTPmessages_Messages &result, mtpRequestId req); typedef QMap WebPagesPending; diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index 82a9e2248..da97b1ad9 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -37,6 +37,9 @@ namespace { typedef QMap MutedPeers; MutedPeers mutedPeers; + typedef QMap UpdatedPeers; + UpdatedPeers updatedPeers; + typedef QHash PhotosData; PhotosData photosData; @@ -330,7 +333,7 @@ namespace App { return (online > now); } - UserData *feedUsers(const MTPVector &users) { + UserData *feedUsers(const MTPVector &users, bool emitPeerUpdated) { UserData *data = 0; const QVector &v(users.c_vector().v); for (QVector::const_iterator i = v.cbegin(), e = v.cend(); i != e; ++i) { @@ -428,19 +431,25 @@ namespace App { if (data->contact < 0 && !data->phone.isEmpty() && int32(data->id & 0xFFFFFFFF) != MTP::authedId()) { data->contact = 0; } - if (data->contact > 0 && !wasContact) { - App::main()->addNewContact(data->id & 0xFFFFFFFF, false); - } else if (wasContact && data->contact <= 0) { - App::main()->removeContact(data); - } + if (App::main()) { + if (data->contact > 0 && !wasContact) { + App::main()->addNewContact(data->id & 0xFFFFFFFF, false); + } else if (wasContact && data->contact <= 0) { + App::main()->removeContact(data); + } - if (App::main()) App::main()->peerUpdated(data); + if (emitPeerUpdated) { + App::main()->peerUpdated(data); + } else { + markPeerUpdated(data); + } + } } return data; } - ChatData *feedChats(const MTPVector &chats) { + ChatData *feedChats(const MTPVector &chats, bool emitPeerUpdated) { ChatData *data = 0; const QVector &v(chats.c_vector().v); for (QVector::const_iterator i = v.cbegin(), e = v.cend(); i != e; ++i) { @@ -507,24 +516,31 @@ namespace App { data->loaded = true; data->updateName(title.trimmed(), QString(), QString()); - if (App::main()) App::main()->peerUpdated(data); + if (App::main()) { + if (emitPeerUpdated) { + App::main()->peerUpdated(data); + } else { + markPeerUpdated(data); + } + } } return data; } - void feedParticipants(const MTPChatParticipants &p, bool requestBotInfos) { + void feedParticipants(const MTPChatParticipants &p, bool requestBotInfos, bool emitPeerUpdated) { + ChatData *chat = 0; switch (p.type()) { case mtpc_chatParticipantsForbidden: { const MTPDchatParticipantsForbidden &d(p.c_chatParticipantsForbidden()); - ChatData *chat = App::chat(d.vchat_id.v); + chat = App::chat(d.vchat_id.v); chat->count = -1; - if (App::main()) App::main()->peerUpdated(chat); } break; + case mtpc_chatParticipants: { const MTPDchatParticipants &d(p.c_chatParticipants()); - ChatData *chat = App::chat(d.vchat_id.v); + chat = App::chat(d.vchat_id.v); chat->admin = d.vadmin_id.v; - if (chat->version <= d.vversion.v) { + if (!requestBotInfos || chat->version <= d.vversion.v) { // !requestBotInfos is true on getFullChat result chat->version = d.vversion.v; const QVector &v(d.vparticipants.c_vector().v); chat->count = v.size(); @@ -568,13 +584,19 @@ namespace App { if (App::main()) App::main()->updateBotKeyboard(); } } - if (App::main()) App::main()->peerUpdated(chat); } } break; } + if (chat && App::main()) { + if (emitPeerUpdated) { + App::main()->peerUpdated(chat); + } else { + markPeerUpdated(chat); + } + } } - void feedParticipantAdd(const MTPDupdateChatParticipantAdd &d) { + void feedParticipantAdd(const MTPDupdateChatParticipantAdd &d, bool emitPeerUpdated) { ChatData *chat = App::chat(d.vchat_id.v); if (chat->version <= d.vversion.v && chat->count >= 0) { chat->version = d.vversion.v; @@ -601,11 +623,17 @@ namespace App { chat->botStatus = 0; chat->count++; } - if (App::main()) App::main()->peerUpdated(chat); + if (App::main()) { + if (emitPeerUpdated) { + App::main()->peerUpdated(chat); + } else { + markPeerUpdated(chat); + } + } } } - void feedParticipantDelete(const MTPDupdateChatParticipantDelete &d) { + void feedParticipantDelete(const MTPDupdateChatParticipantDelete &d, bool emitPeerUpdated) { ChatData *chat = App::chat(d.vchat_id.v); if (chat->version <= d.vversion.v && chat->count > 0) { chat->version = d.vversion.v; @@ -645,7 +673,13 @@ namespace App { chat->botStatus = 0; chat->count--; } - if (App::main()) App::main()->peerUpdated(chat); + if (App::main()) { + if (emitPeerUpdated) { + App::main()->peerUpdated(chat); + } else { + markPeerUpdated(chat); + } + } } } @@ -764,23 +798,30 @@ namespace App { } } - void feedUserLinks(const MTPVector &links) { + void feedUserLinks(const MTPVector &links, bool emitPeerUpdated) { const QVector &v(links.c_vector().v); for (QVector::const_iterator i = v.cbegin(), e = v.cend(); i != e; ++i) { const MTPDcontacts_link &dv(i->c_contacts_link()); - feedUsers(MTP_vector(1, dv.vuser)); + UserData *user = feedUsers(MTP_vector(1, dv.vuser), false); MTPint userId(MTP_int(0)); switch (dv.vuser.type()) { case mtpc_userEmpty: userId = dv.vuser.c_userEmpty().vid; break; case mtpc_user: userId = dv.vuser.c_user().vid; break; } if (userId.v) { - feedUserLink(userId, dv.vmy_link, dv.vforeign_link); + feedUserLink(userId, dv.vmy_link, dv.vforeign_link, false); + } + if (user && App::main()) { + if (emitPeerUpdated) { + App::main()->peerUpdated(user); + } else { + markPeerUpdated(user); + } } } } - void feedUserLink(MTPint userId, const MTPContactLink &myLink, const MTPContactLink &foreignLink) { + void feedUserLink(MTPint userId, const MTPContactLink &myLink, const MTPContactLink &foreignLink, bool emitPeerUpdated) { UserData *user = userLoaded(userId.v); if (user) { bool wasContact = (user->contact > 0); @@ -815,7 +856,32 @@ namespace App { } } user->setName(textOneLine(user->firstName), textOneLine(user->lastName), (user->contact || isServiceUser(user->id) || user->phone.isEmpty()) ? QString() : App::formatPhone(user->phone), textOneLine(user->username)); - if (App::main()) App::main()->peerUpdated(user); + if (App::main()) { + if (emitPeerUpdated) { + App::main()->peerUpdated(user); + } else { + markPeerUpdated(user); + } + } + } + } + + void markPeerUpdated(PeerData *data) { + updatedPeers.insert(data, true); + } + + void clearPeerUpdated(PeerData *data) { + updatedPeers.remove(data); + } + + void emitPeerUpdated() { + if (!updatedPeers.isEmpty() && App::main()) { + UpdatedPeers upd = updatedPeers; + updatedPeers.clear(); + + for (UpdatedPeers::const_iterator i = upd.cbegin(), e = upd.cend(); i != e; ++i) { + App::main()->peerUpdated(i.key()); + } } } @@ -1553,6 +1619,7 @@ namespace App { historyClearMsgs(); randomData.clear(); mutedPeers.clear(); + updatedPeers.clear(); for (PeersData::const_iterator i = peersData.cbegin(), e = peersData.cend(); i != e; ++i) { delete *i; } diff --git a/Telegram/SourceFiles/app.h b/Telegram/SourceFiles/app.h index 829ae4dc4..ea91a47e2 100644 --- a/Telegram/SourceFiles/app.h +++ b/Telegram/SourceFiles/app.h @@ -107,18 +107,23 @@ namespace App { QString onlineText(UserData *user, int32 nowOnServer, bool precise = false); bool onlineColorUse(UserData *user, int32 now); - UserData *feedUsers(const MTPVector &users); // returns last user - ChatData *feedChats(const MTPVector &chats); // returns last chat - void feedParticipants(const MTPChatParticipants &p, bool requestBotInfos = false); - void feedParticipantAdd(const MTPDupdateChatParticipantAdd &d); - void feedParticipantDelete(const MTPDupdateChatParticipantDelete &d); + UserData *feedUsers(const MTPVector &users, bool emitPeerUpdated = true); // returns last user + ChatData *feedChats(const MTPVector &chats, bool emitPeerUpdated = true); // returns last chat + void feedParticipants(const MTPChatParticipants &p, bool requestBotInfos, bool emitPeerUpdated = true); + void feedParticipantAdd(const MTPDupdateChatParticipantAdd &d, bool emitPeerUpdated = true); + void feedParticipantDelete(const MTPDupdateChatParticipantDelete &d, bool emitPeerUpdated = true); void feedMsgs(const MTPVector &msgs, int msgsState = 0); // 2 - new read message, 1 - new unread message, 0 - not new message, -1 - searched message void feedWereRead(const QVector &msgsIds); void feedInboxRead(const PeerId &peer, int32 upTo); void feedOutboxRead(const PeerId &peer, int32 upTo); void feedWereDeleted(const QVector &msgsIds); - void feedUserLinks(const MTPVector &links); - void feedUserLink(MTPint userId, const MTPContactLink &myLink, const MTPContactLink &foreignLink); + void feedUserLinks(const MTPVector &links, bool emitPeerUpdated = true); + void feedUserLink(MTPint userId, const MTPContactLink &myLink, const MTPContactLink &foreignLink, bool emitPeerUpdated = true); + + void markPeerUpdated(PeerData *data); + void clearPeerUpdated(PeerData *data); + void emitPeerUpdated(); + int32 maxMsgId(); ImagePtr image(const MTPPhotoSize &size); diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index 8f6494c37..8f0f6eee8 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -640,8 +640,8 @@ void Application::checkMapVersion() { psRegisterCustomScheme(); if (Local::oldMapVersion()) { QString versionFeatures; - if (DevChannel && Local::oldMapVersion() < 8034) { - versionFeatures = QString::fromUtf8("\xe2\x80\x94 Forward photos, media and stickers with drag-n-drop\n\xe2\x80\x94 Drag-n-drop text messages by timestamp to forward them\n\xe2\x80\x94 Larger stickers panel");// .replace('@', qsl("@") + QChar(0x200D)); + if (DevChannel && Local::oldMapVersion() < 8035) { + versionFeatures = lang(lng_new_version_minor);// QString::fromUtf8("\xe2\x80\x94 Forward photos, media and stickers with drag-n-drop\n\xe2\x80\x94 Drag-n-drop text messages by timestamp to forward them\n\xe2\x80\x94 Larger stickers panel");// .replace('@', qsl("@") + QChar(0x200D)); } else if (!DevChannel && Local::oldMapVersion() < 8030) { versionFeatures = lang(lng_new_version_text).trimmed(); } diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index edac8ac5d..eff06ad20 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,8 +17,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8034; -static const wchar_t *AppVersionStr = L"0.8.34"; +static const int32 AppVersion = 8035; +static const wchar_t *AppVersionStr = L"0.8.35"; static const bool DevChannel = true; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 7766fcdcf..17ca869a3 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -5093,7 +5093,6 @@ void HistoryWidget::onCancel() { } void HistoryWidget::onFullPeerUpdated(PeerData *data) { - peerUpdated(data); if (_list && data == histPeer) { checkMentionDropdown(); _list->updateBotInfo(); diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index b7cbfbfcd..0dc1e01b8 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -369,6 +369,7 @@ _failDifferenceTimeout(1), _lastUpdateTime(0), _cachedX(0), _cachedY(0), _backgr connect(&_bySeqTimer, SIGNAL(timeout()), this, SLOT(getDifference())); connect(&_byPtsTimer, SIGNAL(timeout()), this, SLOT(getDifference())); connect(&_failDifferenceTimer, SIGNAL(timeout()), this, SLOT(getDifferenceForce())); + connect(_api, SIGNAL(fullPeerUpdated(PeerData*)), this, SIGNAL(peerUpdated(PeerData*))); connect(this, SIGNAL(peerUpdated(PeerData*)), &history, SLOT(peerUpdated(PeerData*))); connect(&_topBar, SIGNAL(clicked()), this, SLOT(onTopBarClick())); connect(&history, SIGNAL(peerShown(PeerData*)), this, SLOT(onPeerShown(PeerData*))); @@ -763,14 +764,16 @@ void MainWidget::deleteMessages(const QVector &ids) { void MainWidget::deletedContact(UserData *user, const MTPcontacts_Link &result) { const MTPDcontacts_link &d(result.c_contacts_link()); - App::feedUsers(MTP_vector(1, d.vuser)); - App::feedUserLink(MTP_int(user->id & 0xFFFFFFFF), d.vmy_link, d.vforeign_link); + App::feedUsers(MTP_vector(1, d.vuser), false); + App::feedUserLink(MTP_int(user->id & 0xFFFFFFFF), d.vmy_link, d.vforeign_link, false); + App::emitPeerUpdated(); } void MainWidget::deleteHistoryAndContact(UserData *user, const MTPcontacts_Link &result) { const MTPDcontacts_link &d(result.c_contacts_link()); - App::feedUsers(MTP_vector(1, d.vuser)); - App::feedUserLink(MTP_int(user->id & 0xFFFFFFFF), d.vmy_link, d.vforeign_link); + App::feedUsers(MTP_vector(1, d.vuser), false); + App::feedUserLink(MTP_int(user->id & 0xFFFFFFFF), d.vmy_link, d.vforeign_link, false); + App::emitPeerUpdated(); if ((profile && profile->peer() == user) || (overview && overview->peer() == user) || _stack.contains(user) || history.peer() == user) { showPeer(0); @@ -834,13 +837,13 @@ void MainWidget::checkedHistory(PeerData *peer, const MTPmessages_Messages &resu const QVector *v = 0; if (result.type() == mtpc_messages_messages) { const MTPDmessages_messages &d(result.c_messages_messages()); - App::feedChats(d.vchats); App::feedUsers(d.vusers); + App::feedChats(d.vchats); v = &d.vmessages.c_vector().v; } else if (result.type() == mtpc_messages_messagesSlice) { const MTPDmessages_messagesSlice &d(result.c_messages_messagesSlice()); - App::feedChats(d.vchats); App::feedUsers(d.vusers); + App::feedChats(d.vchats); v = &d.vmessages.c_vector().v; } if (!v) return; @@ -2090,6 +2093,7 @@ void MainWidget::sentDataReceived(uint64 randomId, const MTPmessages_SentMessage void MainWidget::sentUpdatesReceived(const MTPUpdates &result) { handleUpdates(result); + App::emitPeerUpdated(); } void MainWidget::msgUpdated(PeerId peer, const HistoryItem *msg) { @@ -2417,6 +2421,8 @@ void MainWidget::gotState(const MTPupdates_State &state) { dialogs.loadDialogs(); updateOnline(); + + App::emitPeerUpdated(); } void MainWidget::gotDifference(const MTPupdates_Difference &diff) { @@ -2432,6 +2438,8 @@ void MainWidget::gotDifference(const MTPupdates_Difference &diff) { noUpdatesTimer.start(NoUpdatesTimeout); updInited = true; + + App::emitPeerUpdated(); } break; case mtpc_updates_differenceSlice: { const MTPDupdates_differenceSlice &d(diff.c_updates_differenceSlice()); @@ -2444,6 +2452,8 @@ void MainWidget::gotDifference(const MTPupdates_Difference &diff) { MTP_LOG(0, ("getDifference { good - after a slice of difference was received }%1").arg(cTestMode() ? " TESTMODE" : "")); getDifference(); + + App::emitPeerUpdated(); } break; case mtpc_updates_difference: { const MTPDupdates_difference &d(diff.c_updates_difference()); @@ -2471,6 +2481,7 @@ void MainWidget::applySkippedPtsUpdates() { } --updSkipPtsUpdateLevel; clearSkippedPtsUpdates(); + App::emitPeerUpdated(); } void MainWidget::clearSkippedPtsUpdates() { @@ -2500,8 +2511,8 @@ bool MainWidget::updPtsUpdated(int pts, int ptsCount) { // return false if need void MainWidget::feedDifference(const MTPVector &users, const MTPVector &chats, const MTPVector &msgs, const MTPVector &other) { App::wnd()->checkAutoLock(); - App::feedUsers(users); - App::feedChats(chats); + App::feedUsers(users, false); + App::feedChats(chats, false); feedMessageIds(other); App::feedMsgs(msgs, 1); feedUpdates(other, true); @@ -3079,7 +3090,8 @@ void MainWidget::updateReceived(const mtpPrime *from, const mtpPrime *end) { noUpdatesTimer.start(NoUpdatesTimeout); handleUpdates(updates); - } catch(mtpErrorUnexpected &e) { // just some other type + App::emitPeerUpdated(); + } catch (mtpErrorUnexpected &e) { // just some other type } } update(); @@ -3097,8 +3109,8 @@ void MainWidget::handleUpdates(const MTPUpdates &updates) { } } - App::feedChats(d.vchats); - App::feedUsers(d.vusers); + App::feedUsers(d.vusers, false); + App::feedChats(d.vchats, false); feedUpdates(d.vupdates); updSetState(0, d.vdate.v, updQts, d.vseq.v); @@ -3114,8 +3126,8 @@ void MainWidget::handleUpdates(const MTPUpdates &updates) { } } - App::feedChats(d.vchats); - App::feedUsers(d.vusers); + App::feedUsers(d.vusers, false); + App::feedChats(d.vchats, false); feedUpdates(d.vupdates); updSetState(0, d.vdate.v, updQts, d.vseq.v); @@ -3308,17 +3320,17 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { case mtpc_updateChatParticipants: { const MTPDupdateChatParticipants &d(update.c_updateChatParticipants()); - App::feedParticipants(d.vparticipants, true); + App::feedParticipants(d.vparticipants, true, false); } break; case mtpc_updateChatParticipantAdd: { const MTPDupdateChatParticipantAdd &d(update.c_updateChatParticipantAdd()); - App::feedParticipantAdd(d); + App::feedParticipantAdd(d, false); } break; case mtpc_updateChatParticipantDelete: { const MTPDupdateChatParticipantDelete &d(update.c_updateChatParticipantDelete()); - App::feedParticipantDelete(d); + App::feedParticipantDelete(d, false); } break; case mtpc_updateUserStatus: { @@ -3337,7 +3349,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { case mtpc_userStatusOffline: user->onlineTill = d.vstatus.c_userStatusOffline().vwas_online.v; break; case mtpc_userStatusOnline: user->onlineTill = d.vstatus.c_userStatusOnline().vexpires.v; break; } - if (App::main()) App::main()->peerUpdated(user); + App::markPeerUpdated(user); } if (d.vuser_id.v == MTP::authedId()) { if (d.vstatus.type() == mtpc_userStatusOffline || d.vstatus.type() == mtpc_userStatusEmpty) { @@ -3360,7 +3372,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { } else { user->setName(textOneLine(user->firstName), textOneLine(user->lastName), user->nameOrPhone, textOneLine(qs(d.vusername))); } - if (App::main()) App::main()->peerUpdated(user); + App::markPeerUpdated(user); } } break; @@ -3374,7 +3386,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { user->photosCount = -1; user->photos.clear(); } else { - if (user->photoId) { + if (user->photoId && user->photoId != UnknownPeerPhotoId) { if (user->photosCount > 0) ++user->photosCount; user->photos.push_front(App::photo(user->photoId)); } else { @@ -3382,7 +3394,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { user->photos.clear(); } } - if (App::main()) App::main()->peerUpdated(user); + App::markPeerUpdated(user); if (App::wnd()) App::wnd()->mediaOverviewUpdated(user); } } break; @@ -3399,7 +3411,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { case mtpc_updateContactLink: { const MTPDupdateContactLink &d(update.c_updateContactLink()); - App::feedUserLink(d.vuser_id, d.vmy_link, d.vforeign_link); + App::feedUserLink(d.vuser_id, d.vmy_link, d.vforeign_link, false); } break; case mtpc_updateNotifySettings: { @@ -3418,7 +3430,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { if (user) { user->setPhone(qs(d.vphone)); user->setName(user->firstName, user->lastName, (user->contact || isServiceUser(user->id) || user->phone.isEmpty()) ? QString() : App::formatPhone(user->phone), user->username); - if (App::main()) App::main()->peerUpdated(user); + App::markPeerUpdated(user); } } break; diff --git a/Telegram/SourceFiles/mediaview.cpp b/Telegram/SourceFiles/mediaview.cpp index 5ff944ea0..7f1d02ab5 100644 --- a/Telegram/SourceFiles/mediaview.cpp +++ b/Telegram/SourceFiles/mediaview.cpp @@ -682,7 +682,7 @@ void MediaView::showPhoto(PhotoData *photo, PeerData *context) { _photo = photo; _overview = OverviewCount; if (_user) { - if (_user->photos.isEmpty() && _user->photosCount < 0 && _user->photoId) { + if (_user->photos.isEmpty() && _user->photosCount < 0 && _user->photoId && _user->photoId != UnknownPeerPhotoId) { _index = 0; } for (int i = 0, l = _user->photos.size(); i < l; ++i) { diff --git a/Telegram/SourceFiles/profilewidget.cpp b/Telegram/SourceFiles/profilewidget.cpp index 983368798..8581d072b 100644 --- a/Telegram/SourceFiles/profilewidget.cpp +++ b/Telegram/SourceFiles/profilewidget.cpp @@ -77,14 +77,21 @@ ProfileInner::ProfileInner(ProfileWidget *profile, ScrollArea *scroll, const Pee if (_peerUser) { _phoneText = _peerUser->phone.isEmpty() ? QString() : App::formatPhone(_peerUser->phone); - App::api()->requestFullPeer(_peer); - } else if (_peerChat->photoId) { - PhotoData *ph = App::photo(_peerChat->photoId); - if (ph->date) { - _photoLink = TextLinkPtr(new PhotoLink(ph, _peer)); + PhotoData *userPhoto = (_peerUser->photoId && _peerUser->photoId != UnknownPeerPhotoId) ? App::photo(_peerUser->photoId) : 0; + if (userPhoto && userPhoto->date) { + _photoLink = TextLinkPtr(new PhotoLink(userPhoto, _peer)); + } + if ((_peerUser->botInfo && !_peerUser->botInfo->inited) || (_peerUser->photoId == UnknownPeerPhotoId) || (_peerUser->photoId && !userPhoto->date)) { + App::api()->requestFullPeer(_peer); } } else { - App::api()->requestFullPeer(_peer); + PhotoData *chatPhoto = (_peerChat->photoId && _peerChat->photoId != UnknownPeerPhotoId) ? App::photo(_peerChat->photoId) : 0; + if (chatPhoto && chatPhoto->date) { + _photoLink = TextLinkPtr(new PhotoLink(chatPhoto, _peer)); + } + if (_peerChat->photoId == UnknownPeerPhotoId) { + App::api()->requestFullPeer(_peer); + } } // profile @@ -325,7 +332,7 @@ void ProfileInner::chatInviteDone(const MTPExportedChatInvite &result) { void ProfileInner::onFullPeerUpdated(PeerData *peer) { if (peer != _peer) return; if (_peerUser) { - PhotoData *userPhoto = _peerUser->photoId ? App::photo(_peerUser->photoId) : 0; + PhotoData *userPhoto = (_peerUser->photoId && _peerUser->photoId != UnknownPeerPhotoId) ? App::photo(_peerUser->photoId) : 0; if (userPhoto && userPhoto->date) { _photoLink = TextLinkPtr(new PhotoLink(userPhoto, _peer)); } else { @@ -376,9 +383,9 @@ void ProfileInner::peerUpdated(PeerData *data) { PhotoData *photo = 0; if (_peerUser) { _phoneText = _peerUser->phone.isEmpty() ? QString() : App::formatPhone(_peerUser->phone); - if (_peerUser->photoId) photo = App::photo(_peerUser->photoId); + if (_peerUser->photoId && _peerUser->photoId != UnknownPeerPhotoId) photo = App::photo(_peerUser->photoId); } else { - if (_peerChat->photoId) photo = App::photo(_peerChat->photoId); + if (_peerChat->photoId && _peerChat->photoId != UnknownPeerPhotoId) photo = App::photo(_peerChat->photoId); } _photoLink = (photo && photo->date) ? TextLinkPtr(new PhotoLink(photo, _peer)) : TextLinkPtr(); if (_peer->name != _nameCache) { diff --git a/Telegram/SourceFiles/settingswidget.cpp b/Telegram/SourceFiles/settingswidget.cpp index 48a828e56..6a6cad5be 100644 --- a/Telegram/SourceFiles/settingswidget.cpp +++ b/Telegram/SourceFiles/settingswidget.cpp @@ -190,7 +190,7 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), { if (self()) { _nameText.setText(st::setNameFont, _nameCache, _textNameOptions); - PhotoData *selfPhoto = self()->photoId ? App::photo(self()->photoId) : 0; + PhotoData *selfPhoto = (self()->photoId && self()->photoId != UnknownPeerPhotoId) ? App::photo(self()->photoId) : 0; if (selfPhoto && selfPhoto->date) _photoLink = TextLinkPtr(new PhotoLink(selfPhoto, self())); MTP::send(MTPusers_GetFullUser(self()->inputUser), rpcDone(&SettingsInner::gotFullSelf), RPCFailHandlerPtr(), 0, 10); onReloadPassword(); @@ -312,7 +312,7 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), void SettingsInner::peerUpdated(PeerData *data) { if (self() && data == self()) { - if (self()->photoId) { + if (self()->photoId && self()->photoId != UnknownPeerPhotoId) { PhotoData *selfPhoto = App::photo(self()->photoId); if (selfPhoto->date) { _photoLink = TextLinkPtr(new PhotoLink(selfPhoto, self())); @@ -851,7 +851,7 @@ void SettingsInner::gotFullSelf(const MTPUserFull &selfFull) { if (!self()) return; App::feedPhoto(selfFull.c_userFull().vprofile_photo); App::feedUsers(MTP_vector(1, selfFull.c_userFull().vuser)); - PhotoData *selfPhoto = self()->photoId ? App::photo(self()->photoId) : 0; + PhotoData *selfPhoto = (self()->photoId && self()->photoId != UnknownPeerPhotoId) ? App::photo(self()->photoId) : 0; if (selfPhoto && selfPhoto->date) { _photoLink = TextLinkPtr(new PhotoLink(selfPhoto, self())); } else { diff --git a/Telegram/SourceFiles/structs.cpp b/Telegram/SourceFiles/structs.cpp index 5ffc01f14..fd4a9865f 100644 --- a/Telegram/SourceFiles/structs.cpp +++ b/Telegram/SourceFiles/structs.cpp @@ -133,23 +133,31 @@ void PeerData::updateName(const QString &newName, const QString &newNameOrPhone, } void UserData::setPhoto(const MTPUserProfilePhoto &p) { + PhotoId newPhotoId = photoId; + ImagePtr newPhoto = photo; switch (p.type()) { case mtpc_userProfilePhoto: { const MTPDuserProfilePhoto d(p.c_userProfilePhoto()); - photoId = d.vphoto_id.v; - photo = ImagePtr(160, 160, d.vphoto_small, userDefPhoto(colorIndex)); - // App::feedPhoto(App::photoFromUserPhoto(MTP_int(id & 0xFFFFFFFF), MTP_int(unixtime()), p)); + newPhotoId = d.vphoto_id.v; + newPhoto = ImagePtr(160, 160, d.vphoto_small, userDefPhoto(colorIndex)); + //App::feedPhoto(App::photoFromUserPhoto(MTP_int(id & 0xFFFFFFFF), MTP_int(unixtime()), p)); } break; default: { - photoId = 0; + newPhotoId = 0; if (id == ServiceUserId) { - photo = ImagePtr(QPixmap::fromImage(App::wnd()->iconLarge().scaledToWidth(160, Qt::SmoothTransformation), Qt::ColorOnly), "PNG"); + if (photo->isNull()) { + newPhoto = ImagePtr(QPixmap::fromImage(App::wnd()->iconLarge().scaledToWidth(160, Qt::SmoothTransformation), Qt::ColorOnly), "PNG"); + } } else { - photo = userDefPhoto(colorIndex); + newPhoto = userDefPhoto(colorIndex); } } break; } - emit App::main()->peerPhotoChanged(this); + if (newPhotoId != photoId || newPhoto.v() != photo.v()) { + photoId = newPhotoId; + photo = newPhoto; + emit App::main()->peerPhotoChanged(this); + } } void PeerData::fillNames() { @@ -262,10 +270,10 @@ void UserData::madeAction() { int32 t = unixtime(); if (onlineTill <= 0 && -onlineTill < t) { onlineTill = -t - SetOnlineAfterActivity; - if (App::main()) App::main()->peerUpdated(this); + App::markPeerUpdated(this); } else if (onlineTill > 0 && onlineTill < t + 1) { onlineTill = t + SetOnlineAfterActivity; - if (App::main()) App::main()->peerUpdated(this); + App::markPeerUpdated(this); } } @@ -275,7 +283,7 @@ void ChatData::setPhoto(const MTPChatPhoto &p, const PhotoId &phId) { const MTPDchatPhoto d(p.c_chatPhoto()); photo = ImagePtr(160, 160, d.vphoto_small, chatDefPhoto(colorIndex)); photoFull = ImagePtr(640, 640, d.vphoto_big, chatDefPhoto(colorIndex)); - if (phId) { + if (phId != UnknownPeerPhotoId) { photoId = phId; } } break; diff --git a/Telegram/SourceFiles/structs.h b/Telegram/SourceFiles/structs.h index 8df51561e..15d798796 100644 --- a/Telegram/SourceFiles/structs.h +++ b/Telegram/SourceFiles/structs.h @@ -138,9 +138,11 @@ struct BotInfo { QString startToken, startGroupToken; }; +static const PhotoId UnknownPeerPhotoId = 0xFFFFFFFFFFFFFFFFULL; + struct PhotoData; struct UserData : public PeerData { - UserData(const PeerId &id) : PeerData(id), photoId(0), lnk(new PeerLink(this)), onlineTill(0), contact(-1), photosCount(-1), botInfo(0) { + UserData(const PeerId &id) : PeerData(id), photoId(UnknownPeerPhotoId), lnk(new PeerLink(this)), onlineTill(0), contact(-1), photosCount(-1), botInfo(0) { } void setPhoto(const MTPUserProfilePhoto &photo); void setName(const QString &first, const QString &last, const QString &phoneName, const QString &username); @@ -169,9 +171,9 @@ struct UserData : public PeerData { }; struct ChatData : public PeerData { - ChatData(const PeerId &id) : PeerData(id), count(0), date(0), version(0), left(false), forbidden(true), botStatus(0), photoId(0) { + ChatData(const PeerId &id) : PeerData(id), count(0), date(0), version(0), left(false), forbidden(true), botStatus(0), photoId(UnknownPeerPhotoId) { } - void setPhoto(const MTPChatPhoto &photo, const PhotoId &phId = 0); + void setPhoto(const MTPChatPhoto &photo, const PhotoId &phId = UnknownPeerPhotoId); int32 count; int32 date; int32 version; diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index d5e5a1859..1184d694e 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.34 + 0.8.35 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index 26abef2e61e5780b2813734e501b7fadcbc4292e..2f8225ec377b75cdf9533565a69e8819d0e5fd5c 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_Z Date: Tue, 30 Jun 2015 01:22:14 +0300 Subject: [PATCH 027/121] improved deadlock fix 0.8.35.dev version --- Telegram/SourceFiles/mtproto/mtpConnection.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/mtproto/mtpConnection.cpp b/Telegram/SourceFiles/mtproto/mtpConnection.cpp index c71f5b202..ea1f3eb2a 100644 --- a/Telegram/SourceFiles/mtproto/mtpConnection.cpp +++ b/Telegram/SourceFiles/mtproto/mtpConnection.cpp @@ -725,6 +725,7 @@ void MTPautoConnection::httpSend(mtpBuffer &buffer) { void MTPautoConnection::disconnectFromServer() { if (status == FinishedWork) return; + status = FinishedWork; Requests copy = requests; requests.clear(); @@ -741,7 +742,6 @@ void MTPautoConnection::disconnectFromServer() { sock.close(); httpStartTimer.stop(); - status = FinishedWork; } void MTPautoConnection::connectToServer(const QString &addr, int32 port, int32 flags) { @@ -972,6 +972,8 @@ void MTPtcpConnection::onSocketDisconnected() { } void MTPtcpConnection::sendData(mtpBuffer &buffer) { + if (status == FinishedWork) return; + if (buffer.size() < 3) { LOG(("TCP Error: writing bad packet, len = %1").arg(buffer.size() * sizeof(mtpPrime))); TCP_LOG(("TCP Error: bad packet %1").arg(mb(&buffer[0], buffer.size() * sizeof(mtpPrime)).str())); @@ -990,6 +992,9 @@ void MTPtcpConnection::sendData(mtpBuffer &buffer) { } void MTPtcpConnection::disconnectFromServer() { + if (status == FinishedWork) return; + status = FinishedWork; + disconnect(&sock, SIGNAL(readyRead()), 0, 0); sock.close(); } @@ -1043,6 +1048,8 @@ QString MTPtcpConnection::transport() const { } void MTPtcpConnection::socketError(QAbstractSocket::SocketError e) { + if (status == FinishedWork) return; + _handleTcpError(e, sock); emit error(); } @@ -1054,6 +1061,8 @@ MTPhttpConnection::MTPhttpConnection(QThread *thread) : status(WaitingHttp), htt } void MTPhttpConnection::sendData(mtpBuffer &buffer) { + if (status == FinishedWork) return; + if (buffer.size() < 3) { LOG(("TCP Error: writing bad packet, len = %1").arg(buffer.size() * sizeof(mtpPrime))); TCP_LOG(("TCP Error: bad packet %1").arg(mb(&buffer[0], buffer.size() * sizeof(mtpPrime)).str())); @@ -1072,6 +1081,9 @@ void MTPhttpConnection::sendData(mtpBuffer &buffer) { } void MTPhttpConnection::disconnectFromServer() { + if (status == FinishedWork) return; + status = FinishedWork; + Requests copy = requests; requests.clear(); for (Requests::const_iterator i = copy.cbegin(), e = copy.cend(); i != e; ++i) { @@ -1204,7 +1216,9 @@ void MTProtoConnectionPrivate::destroyConn(MTPabstractConnection **conn) { QWriteLocker lock(&stateConnMutex); if (*conn) { toDisconnect = *conn; + disconnect(*conn, SIGNAL(connected()), 0, 0); disconnect(*conn, SIGNAL(disconnected()), 0, 0); + disconnect(*conn, SIGNAL(error(bool)), 0, 0); disconnect(*conn, SIGNAL(receivedData()), 0, 0); disconnect(*conn, SIGNAL(receivedSome()), 0, 0); *conn = 0; @@ -3026,7 +3040,7 @@ void MTProtoConnectionPrivate::onConnected6() { QReadLocker lockFinished(&sessionDataMutex); if (!sessionData) return; - disconnect(_conn6, SIGNAL(connected()), this, SLOT(onConnected())); + disconnect(_conn6, SIGNAL(connected()), this, SLOT(onConnected6())); if (!_conn6->isConnected()) { LOG(("Connection Error: not connected in onConnected(), state: %1").arg(_conn6->debugState())); return restart(); From 387694f4778660ae67c577ec63f869cb6c5fa005 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 30 Jun 2015 09:40:35 +0300 Subject: [PATCH 028/121] langs updated for 0.8.35.dev --- Telegram/SourceFiles/langs/lang_ko.strings | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Telegram/SourceFiles/langs/lang_ko.strings b/Telegram/SourceFiles/langs/lang_ko.strings index 6812259f9..d2a4e8574 100644 --- a/Telegram/SourceFiles/langs/lang_ko.strings +++ b/Telegram/SourceFiles/langs/lang_ko.strings @@ -166,11 +166,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_username_title" = "아이디 변경"; "lng_username_about" = "텔레그램 아이디를 설정할 수 있습니다. \n아이디를 설정하면 회원님의 전화번호를 몰라도 아이디로 회원님을 찾아 대화를 나눌 수 있습니다.\n아이디는 영문, 밑줄, 숫자로 a-z, _, 0-9, \n다섯 글자 이상으로 설정해 주세요."; -"lng_username_invalid" = "This username is invalid."; -"lng_username_occupied" = "This username is already occupied."; -"lng_username_too_short" = "This username is too short."; -"lng_username_bad_symbols" = "This username has bad symbols."; -"lng_username_available" = "This username is available."; +"lng_username_invalid" = "올바르지 않은 아이디입니다."; +"lng_username_occupied" = "사용중인 아이디입니다."; +"lng_username_too_short" = "아이디가 너무 짧습니다."; +"lng_username_bad_symbols" = "아이디에 올바르지 않은 문자가 있습니다."; +"lng_username_available" = "사용 가능한 아이디입니다."; "lng_username_not_found" = "아이디 @{user}를 찾을 수 없습니다."; "lng_settings_section_contact_info" = "연락처 정보"; @@ -602,7 +602,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "텔레그램 데스크탑은 {version} 버전으로 업데이트 되었습니다.\n\n{changes}\n\n전체 버전 히스토리는 아래에서 확인 가능합니다:\n{link}"; "lng_new_version_minor" = "— 버그 수정 및 일부 기능 향상"; -"lng_new_version_text" = "— Forward photos, media and stickers with drag-n-drop\n— Drag-n-drop text messages by timestamp to forward them\n— Larger stickers panel\n— IPv6 checkbox added to Connection Type in Settings"; +"lng_new_version_text" = "— 드래그 앤 드롭으로 사진, 미디어와 스티커 전달\n— 드래그 앤 드롭으로 타임스탬프 순 메시지 전달\n— 큰 스티커 패널\n— IPv6 설정 추가"; "lng_menu_insert_unicode" = "유니코드 문자를 입력하세요."; From f7d55005c485b03279d66e5bab4f028078bfdfb4 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 1 Jul 2015 00:07:05 +0300 Subject: [PATCH 029/121] audio documents playback added, audio documents suppress on voice message, and both suppress on notify added --- Telegram/Resources/style.txt | 5 +- Telegram/SourceFiles/apiwrap.cpp | 2 +- Telegram/SourceFiles/app.cpp | 24 +- Telegram/SourceFiles/audio.cpp | 1197 +++++++++++++----- Telegram/SourceFiles/audio.h | 132 +- Telegram/SourceFiles/boxes/stickersetbox.cpp | 12 +- Telegram/SourceFiles/config.h | 5 +- Telegram/SourceFiles/dropdown.cpp | 14 +- Telegram/SourceFiles/history.cpp | 137 +- Telegram/SourceFiles/historywidget.cpp | 16 +- Telegram/SourceFiles/localimageloader.cpp | 36 +- Telegram/SourceFiles/localstorage.cpp | 64 +- Telegram/SourceFiles/localstorage.h | 4 +- Telegram/SourceFiles/mainwidget.cpp | 102 +- Telegram/SourceFiles/mainwidget.h | 3 +- Telegram/SourceFiles/mediaview.cpp | 8 +- Telegram/SourceFiles/settings.cpp | 2 +- Telegram/SourceFiles/structs.cpp | 56 +- Telegram/SourceFiles/structs.h | 80 +- 19 files changed, 1422 insertions(+), 477 deletions(-) diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index 89b40c441..197816c12 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -1146,7 +1146,7 @@ notifyTextTop: 7px; notifySlowHideFunc: transition(easeInCirc); notifyWaitShortHide: 0; notifyWaitLongHide: 20000; -notifyFastAnim: 100; +notifyFastAnim: 150; notifyFastAnimFunc: transition(linear); notifyWidth: 316px; notifyHeight: 80px; @@ -1968,3 +1968,6 @@ webPagePhotoSize: 100px; webPagePhotoDelta: 8px; botDescSkip: 8px; + +suppressAll: 0.2; +suppressSong: 0.05; diff --git a/Telegram/SourceFiles/apiwrap.cpp b/Telegram/SourceFiles/apiwrap.cpp index 3db15bb4b..c93bce807 100644 --- a/Telegram/SourceFiles/apiwrap.cpp +++ b/Telegram/SourceFiles/apiwrap.cpp @@ -302,7 +302,7 @@ void ApiWrap::gotStickerSet(uint64 setId, const MTPmessages_StickerSet &result) int32 wasCount = -1; for (int32 i = 0, l = d_docs.size(); i != l; ++i) { DocumentData *doc = App::feedDocument(d_docs.at(i)); - if (!doc || !doc->sticker) continue; + if (!doc || !doc->sticker()) continue; if (wasCount < 0) wasCount = it->stickers.size(); if (it->stickers.indexOf(doc) < 0) { diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index da97b1ad9..ee59eb84e 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -1295,7 +1295,7 @@ namespace App { } convert->id = document; convert->status = FileReady; - sentSticker = !!convert->sticker; + sentSticker = !!convert->sticker(); } convert->access = access; if (!convert->date && date) { @@ -1309,20 +1309,20 @@ namespace App { if (!thumb->isNull() && (convert->thumb->isNull() || convert->thumb->width() < thumb->width() || convert->thumb->height() < thumb->height())) { convert->thumb = thumb; } - if (convert->sticker && !attributes.isEmpty() && (convert->sticker->alt.isEmpty() || convert->sticker->set.type() == mtpc_inputStickerSetEmpty)) { + if (convert->sticker() && !attributes.isEmpty() && (convert->sticker()->alt.isEmpty() || convert->sticker()->set.type() == mtpc_inputStickerSetEmpty)) { for (QVector::const_iterator i = attributes.cbegin(), e = attributes.cend(); i != e; ++i) { if (i->type() == mtpc_documentAttributeSticker) { const MTPDdocumentAttributeSticker &d(i->c_documentAttributeSticker()); if (d.valt.c_string().v.length() > 0) { - convert->sticker->alt = qs(d.valt); - convert->sticker->set = d.vstickerset; + convert->sticker()->alt = qs(d.valt); + convert->sticker()->set = d.vstickerset; } } } } } - if (convert->sticker && !convert->sticker->loc.dc && thumbLocation.dc) { - convert->sticker->loc = thumbLocation; + if (convert->sticker() && !convert->sticker()->loc.dc && thumbLocation.dc) { + convert->sticker()->loc = thumbLocation; } if (convert->location.check()) { @@ -1336,7 +1336,7 @@ namespace App { result = convert; } else { result = new DocumentData(document, access, date, attributes, mime, thumb, dc, size); - if (result->sticker) result->sticker->loc = thumbLocation; + if (result->sticker()) result->sticker()->loc = thumbLocation; } documentsData.insert(document, result); } else { @@ -1354,19 +1354,19 @@ namespace App { if (!thumb->isNull() && (result->thumb->isNull() || result->thumb->width() < thumb->width() || result->thumb->height() < thumb->height())) { result->thumb = thumb; } - if (result->sticker && !attributes.isEmpty() && (result->sticker->alt.isEmpty() || result->sticker->set.type() == mtpc_inputStickerSetEmpty)) { + if (result->sticker() && !attributes.isEmpty() && (result->sticker()->alt.isEmpty() || result->sticker()->set.type() == mtpc_inputStickerSetEmpty)) { for (QVector::const_iterator i = attributes.cbegin(), e = attributes.cend(); i != e; ++i) { if (i->type() == mtpc_documentAttributeSticker) { const MTPDdocumentAttributeSticker &d(i->c_documentAttributeSticker()); if (d.valt.c_string().v.length() > 0) { - result->sticker->alt = qs(d.valt); - result->sticker->set = d.vstickerset; + result->sticker()->alt = qs(d.valt); + result->sticker()->set = d.vstickerset; } } } } - if (result->sticker && !result->sticker->loc.dc && thumbLocation.dc) { - result->sticker->loc = thumbLocation; + if (result->sticker() && !result->sticker()->loc.dc && thumbLocation.dc) { + result->sticker()->loc = thumbLocation; } } } diff --git a/Telegram/SourceFiles/audio.cpp b/Telegram/SourceFiles/audio.cpp index 4303618e9..f5c39e43a 100644 --- a/Telegram/SourceFiles/audio.cpp +++ b/Telegram/SourceFiles/audio.cpp @@ -63,9 +63,13 @@ namespace { ALuint notifySource = 0; ALuint notifyBuffer = 0; + uint64 notifyLengthMs = 0; + QMutex playerMutex; AudioPlayer *player = 0; + float64 suppressAllGain = 1., suppressSongGain = 1.; + AudioCapture *capture = 0; } @@ -96,7 +100,12 @@ bool _checkALError() { return true; } +Q_DECLARE_METATYPE(AudioMsgId); +Q_DECLARE_METATYPE(SongMsgId); void audioInit() { + av_register_all(); + avcodec_register_all(); + if (!capture) { capture = new AudioCapture(); cSetHasAudioCapture(capture->check()); @@ -195,16 +204,22 @@ void audioInit() { } if (!format) return audioFinish(); - alBufferData(notifyBuffer, format, data, subchunk2Size, sampleRate); + int32 addBytes = (sampleRate * 15 / 100) * bytesPerSample * numChannels; // add 150ms of silence + QByteArray fullData(addBytes + subchunk2Size, (bytesPerSample == 1) ? 128 : 0); + memcpy(fullData.data() + addBytes, data, subchunk2Size); + alBufferData(notifyBuffer, format, fullData.constData(), fullData.size(), sampleRate); alSourcei(notifySource, AL_BUFFER, notifyBuffer); + + notifyLengthMs = (numSamples * 1000ULL / sampleRate); + if (!_checkALError()) return audioFinish(); + qRegisterMetaType(); + qRegisterMetaType(); + player = new AudioPlayer(); alcDevicePauseSOFT(audioDevice); - av_register_all(); - avcodec_register_all(); - LOG(("Audio init time: %1").arg(getms() - ms)); cSetHasAudioPlayer(true); } @@ -214,6 +229,7 @@ void audioPlayNotify() { audioPlayer()->resumeDevice(); alSourcePlay(notifySource); + emit audioPlayer()->suppressAll(); emit audioPlayer()->faderOnTimer(); } @@ -250,22 +266,32 @@ void audioFinish() { cSetHasAudioPlayer(false); } -AudioPlayer::AudioPlayer() : _current(0), +AudioPlayer::AudioPlayer() : _audioCurrent(0), _songCurrent(0), _fader(new AudioPlayerFader(&_faderThread)), _loader(new AudioPlayerLoaders(&_loaderThread)) { connect(this, SIGNAL(faderOnTimer()), _fader, SLOT(onTimer())); - connect(this, SIGNAL(loaderOnStart(AudioData*)), _loader, SLOT(onStart(AudioData*))); - connect(this, SIGNAL(loaderOnCancel(AudioData*)), _loader, SLOT(onCancel(AudioData*))); + connect(this, SIGNAL(suppressSong()), _fader, SLOT(onSuppressSong())); + connect(this, SIGNAL(unsuppressSong()), _fader, SLOT(onUnsuppressSong())); + connect(this, SIGNAL(suppressAll()), _fader, SLOT(onSuppressAll())); + connect(this, SIGNAL(loaderOnStart(const AudioMsgId&)), _loader, SLOT(onStart(const AudioMsgId&))); + connect(this, SIGNAL(loaderOnStart(const SongMsgId&)), _loader, SLOT(onStart(const SongMsgId&))); + connect(this, SIGNAL(loaderOnCancel(const AudioMsgId&)), _loader, SLOT(onCancel(const AudioMsgId&))); + connect(this, SIGNAL(loaderOnCancel(const SongMsgId&)), _loader, SLOT(onCancel(const SongMsgId&))); connect(&_faderThread, SIGNAL(started()), _fader, SLOT(onInit())); connect(&_loaderThread, SIGNAL(started()), _loader, SLOT(onInit())); connect(&_faderThread, SIGNAL(finished()), _fader, SLOT(deleteLater())); connect(&_loaderThread, SIGNAL(finished()), _loader, SLOT(deleteLater())); connect(_loader, SIGNAL(needToCheck()), _fader, SLOT(onTimer())); - connect(_loader, SIGNAL(error(AudioData*)), this, SLOT(onError(AudioData*))); - connect(_fader, SIGNAL(needToPreload(AudioData*)), _loader, SLOT(onLoad(AudioData*))); - connect(_fader, SIGNAL(playPositionUpdated(AudioData*)), this, SIGNAL(updated(AudioData*))); - connect(_fader, SIGNAL(audioStopped(AudioData*)), this, SIGNAL(stopped(AudioData*))); - connect(_fader, SIGNAL(error(AudioData*)), this, SLOT(onError(AudioData*))); + connect(_loader, SIGNAL(error(const AudioMsgId&)), this, SLOT(onError(const AudioMsgId&))); + connect(_loader, SIGNAL(error(const SongMsgId&)), this, SLOT(onError(const SongMsgId&))); + connect(_fader, SIGNAL(needToPreload(const AudioMsgId&)), _loader, SLOT(onLoad(const AudioMsgId&))); + connect(_fader, SIGNAL(needToPreload(const SongMsgId&)), _loader, SLOT(onLoad(const SongMsgId&))); + connect(_fader, SIGNAL(playPositionUpdated(const AudioMsgId&)), this, SIGNAL(updated(const AudioMsgId&))); + connect(_fader, SIGNAL(playPositionUpdated(const SongMsgId&)), this, SIGNAL(updated(const SongMsgId&))); + connect(_fader, SIGNAL(audioStopped(const AudioMsgId&)), this, SLOT(onStopped(const AudioMsgId&))); + connect(_fader, SIGNAL(audioStopped(const SongMsgId&)), this, SLOT(onStopped(const SongMsgId&))); + connect(_fader, SIGNAL(error(const AudioMsgId&)), this, SLOT(onError(const AudioMsgId&))); + connect(_fader, SIGNAL(error(const SongMsgId&)), this, SLOT(onError(const SongMsgId&))); _loaderThread.start(); _faderThread.start(); } @@ -277,16 +303,29 @@ AudioPlayer::~AudioPlayer() { } for (int32 i = 0; i < AudioVoiceMsgSimultaneously; ++i) { - alSourceStop(_data[i].source); - if (alIsBuffer(_data[i].buffers[0])) { - alDeleteBuffers(3, _data[i].buffers); + alSourceStop(_audioData[i].source); + if (alIsBuffer(_audioData[i].buffers[0])) { + alDeleteBuffers(3, _audioData[i].buffers); for (int32 j = 0; j < 3; ++j) { - _data[i].buffers[j] = _data[i].samplesCount[j] = 0; + _audioData[i].buffers[j] = _audioData[i].samplesCount[j] = 0; } } - if (alIsSource(_data[i].source)) { - alDeleteSources(1, &_data[i].source); - _data[i].source = 0; + if (alIsSource(_audioData[i].source)) { + alDeleteSources(1, &_audioData[i].source); + _audioData[i].source = 0; + } + } + for (int32 i = 0; i < AudioSongSimultaneously; ++i) { + alSourceStop(_songData[i].source); + if (alIsBuffer(_songData[i].buffers[0])) { + alDeleteBuffers(3, _songData[i].buffers); + for (int32 j = 0; j < 3; ++j) { + _songData[i].buffers[j] = _songData[i].samplesCount[j] = 0; + } + } + if (alIsSource(_songData[i].source)) { + alDeleteSources(1, &_songData[i].source); + _songData[i].source = 0; } } _faderThread.quit(); @@ -295,114 +334,236 @@ AudioPlayer::~AudioPlayer() { _loaderThread.wait(); } -void AudioPlayer::onError(AudioData *audio) { +void AudioPlayer::onError(const AudioMsgId &audio) { emit stopped(audio); + emit unsuppressSong(); } -bool AudioPlayer::updateCurrentStarted(int32 pos) { +void AudioPlayer::onError(const SongMsgId &song) { + emit stopped(song); +} + +void AudioPlayer::onStopped(const AudioMsgId &audio) { + emit stopped(audio); + emit unsuppressSong(); +} + +void AudioPlayer::onStopped(const SongMsgId &song) { + emit stopped(song); +} + +bool AudioPlayer::updateCurrentStarted(MediaOverviewType type, int32 pos) { + Msg *data = 0; + switch (type) { + case OverviewAudios: data = &_audioData[_audioCurrent]; break; + case OverviewDocuments: data = &_songData[_songCurrent]; break; + } + if (!data) return false; + if (pos < 0) { - if (alIsSource(_data[_current].source)) { - alGetSourcei(_data[_current].source, AL_SAMPLE_OFFSET, &pos); + if (alIsSource(data->source)) { + alGetSourcei(data->source, AL_SAMPLE_OFFSET, &pos); } else { pos = 0; } } if (!_checkALError()) { - _data[_current].state = AudioPlayerStopped; - onError(_data[_current].audio); + data->state = AudioPlayerStopped; + switch (type) { + case OverviewAudios: onError(_audioData[_audioCurrent].audio); break; + case OverviewDocuments: onError(_songData[_songCurrent].song); break; + } return false; } - _data[_current].started = _data[_current].position = pos + _data[_current].skipStart; + data->started = data->position = pos + data->skipStart; return true; } -void AudioPlayer::play(AudioData *audio) { - AudioData *stopped = 0; +bool AudioPlayer::startedOther(MediaOverviewType type, bool &fadedStart) { + Msg *current = 0; + switch (type) { + case OverviewAudios: current = &_audioData[_audioCurrent]; break; + case OverviewDocuments: current = &_songData[_songCurrent]; break; + } + if (!current) return false; + switch (current->state) { + case AudioPlayerStarting: + case AudioPlayerResuming: + case AudioPlayerPlaying: + current->state = AudioPlayerFinishing; + updateCurrentStarted(type); + fadedStart = true; + break; + case AudioPlayerPausing: + current->state = AudioPlayerFinishing; + fadedStart = true; + break; + case AudioPlayerPaused: + current->state = AudioPlayerStopped; + return true; + } + return false; +} + +void AudioPlayer::play(const AudioMsgId &audio) { + AudioMsgId stopped; { QMutexLocker lock(&playerMutex); - bool startNow = true; - if (_data[_current].audio != audio) { - switch (_data[_current].state) { - case AudioPlayerStarting: - case AudioPlayerResuming: - case AudioPlayerPlaying: - _data[_current].state = AudioPlayerFinishing; - updateCurrentStarted(); - startNow = false; - break; - case AudioPlayerPausing: _data[_current].state = AudioPlayerFinishing; startNow = false; break; - case AudioPlayerPaused: _data[_current].state = AudioPlayerStopped; stopped = _data[_current].audio; break; + bool fadedStart = false; + AudioMsg *current = &_audioData[_audioCurrent]; + if (current->audio != audio) { + if (startedOther(OverviewAudios, fadedStart)) { + stopped = current->audio; } - if (_data[_current].audio) { - emit loaderOnCancel(_data[_current].audio); + if (current->audio) { + emit loaderOnCancel(current->audio); emit faderOnTimer(); } - } - int32 index = 0; - for (; index < AudioVoiceMsgSimultaneously; ++index) { - if (_data[index].audio == audio) { - _current = index; - break; + int32 index = 0; + for (; index < AudioVoiceMsgSimultaneously; ++index) { + if (_audioData[index].audio == audio) { + _audioCurrent = index; + break; + } } + if (index == AudioVoiceMsgSimultaneously && ++_audioCurrent >= AudioVoiceMsgSimultaneously) { + _audioCurrent -= AudioVoiceMsgSimultaneously; + } + current = &_audioData[_audioCurrent]; } - if (index == AudioVoiceMsgSimultaneously && ++_current >= AudioVoiceMsgSimultaneously) { - _current -= AudioVoiceMsgSimultaneously; - } - _data[_current].audio = audio; - _data[_current].fname = audio->already(true); - _data[_current].data = audio->data; - if (_data[_current].fname.isEmpty() && _data[_current].data.isEmpty()) { - _data[_current].state = AudioPlayerStopped; + current->audio = audio; + current->fname = audio.audio->already(true); + current->data = audio.audio->data; + if (current->fname.isEmpty() && current->data.isEmpty()) { + current->state = AudioPlayerStopped; onError(audio); - } else if (updateCurrentStarted(0)) { - _data[_current].state = startNow ? AudioPlayerPlaying : AudioPlayerStarting; - _data[_current].loading = true; + } else if (updateCurrentStarted(OverviewAudios, 0)) { + current->state = fadedStart ? AudioPlayerStarting : AudioPlayerPlaying; + current->loading = true; emit loaderOnStart(audio); + emit suppressSong(); } } if (stopped) emit updated(stopped); } -void AudioPlayer::pauseresume() { +void AudioPlayer::play(const SongMsgId &song) { + SongMsgId stopped; + { + QMutexLocker lock(&playerMutex); + + bool fadedStart = false; + SongMsg *current = &_songData[_songCurrent]; + if (current->song != song) { + if (startedOther(OverviewDocuments, fadedStart)) { + stopped = current->song; + } + if (current->song) { + emit loaderOnCancel(current->song); + emit faderOnTimer(); + } + + int32 index = 0; + for (; index < AudioSongSimultaneously; ++index) { + if (_songData[index].song == song) { + _songCurrent = index; + break; + } + } + if (index == AudioSongSimultaneously && ++_songCurrent >= AudioSongSimultaneously) { + _songCurrent -= AudioSongSimultaneously; + } + current = &_songData[_songCurrent]; + } + current->song = song; + current->fname = song.song->already(true); + current->data = song.song->data; + if (current->fname.isEmpty() && current->data.isEmpty()) { + current->state = AudioPlayerStopped; + onError(song); + } else if (updateCurrentStarted(OverviewDocuments, 0)) { + current->state = fadedStart ? AudioPlayerStarting : AudioPlayerPlaying; + current->loading = true; + emit loaderOnStart(song); + } + } + if (stopped) emit updated(stopped); +} + +void AudioPlayer::pauseresume(MediaOverviewType type) { QMutexLocker lock(&playerMutex); - switch (_data[_current].state) { + Msg *current = 0; + float64 suppressGain = 1.; + switch (type) { + case OverviewAudios: + current = &_audioData[_audioCurrent]; + suppressGain = suppressAllGain; + break; + case OverviewDocuments: + current = &_songData[_songCurrent]; + suppressGain = suppressSongGain; + break; + } + switch (current->state) { case AudioPlayerPausing: case AudioPlayerPaused: - if (_data[_current].state == AudioPlayerPaused) { - updateCurrentStarted(); + if (current->state == AudioPlayerPaused) { + updateCurrentStarted(type); } - _data[_current].state = AudioPlayerResuming; + current->state = AudioPlayerResuming; resumeDevice(); - alSourcePlay(_data[_current].source); + alSourcef(current->source, AL_GAIN, suppressGain); + alSourcePlay(current->source); + if (type == OverviewAudios) emit suppressSong(); break; case AudioPlayerStarting: case AudioPlayerResuming: case AudioPlayerPlaying: - _data[_current].state = AudioPlayerPausing; - updateCurrentStarted(); + current->state = AudioPlayerPausing; + updateCurrentStarted(type); + if (type == OverviewAudios) emit unsuppressSong(); break; - case AudioPlayerFinishing: _data[_current].state = AudioPlayerPausing; break; + case AudioPlayerFinishing: current->state = AudioPlayerPausing; break; } emit faderOnTimer(); } -void AudioPlayer::currentState(AudioData **audio, AudioPlayerState *state, int64 *position, int64 *duration, int32 *frequency) { +void AudioPlayer::currentState(AudioMsgId *audio, AudioPlayerState *state, int64 *position, int64 *duration, int32 *frequency) { QMutexLocker lock(&playerMutex); - if (audio) *audio = _data[_current].audio; - if (state) *state = _data[_current].state; - if (position) *position = _data[_current].position; - if (duration) *duration = _data[_current].duration; - if (frequency) *frequency = _data[_current].frequency; + AudioMsg *current = &_audioData[_audioCurrent]; + if (audio) *audio = current->audio; + return currentState(current, state, position, duration, frequency); } -void AudioPlayer::clearStoppedAtStart(AudioData *audio) { +void AudioPlayer::currentState(SongMsgId *song, AudioPlayerState *state, int64 *position, int64 *duration, int32 *frequency) { QMutexLocker lock(&playerMutex); - if (_data[_current].audio == audio && _data[_current].state == AudioPlayerStoppedAtStart) { - _data[_current].state = AudioPlayerStopped; + SongMsg *current = &_songData[_songCurrent]; + if (song) *song = current->song; + return currentState(current, state, position, duration, frequency); +} + +void AudioPlayer::currentState(Msg *current, AudioPlayerState *state, int64 *position, int64 *duration, int32 *frequency) { + if (state) *state = current->state; + if (position) *position = current->position; + if (duration) *duration = current->duration; + if (frequency) *frequency = current->frequency; +} + +void AudioPlayer::clearStoppedAtStart(const AudioMsgId &audio) { + QMutexLocker lock(&playerMutex); + if (_audioData[_audioCurrent].audio == audio && _audioData[_audioCurrent].state == AudioPlayerStoppedAtStart) { + _audioData[_audioCurrent].state = AudioPlayerStopped; + } +} + +void AudioPlayer::clearStoppedAtStart(const SongMsgId &song) { + QMutexLocker lock(&playerMutex); + if (_songData[_songCurrent].song == song && _songData[_songCurrent].state == AudioPlayerStoppedAtStart) { + _songData[_songCurrent].state = AudioPlayerStopped; } } @@ -453,7 +614,10 @@ AudioCapture *audioCapture() { return capture; } -AudioPlayerFader::AudioPlayerFader(QThread *thread) : _timer(this), _pauseFlag(false), _paused(true) { +AudioPlayerFader::AudioPlayerFader(QThread *thread) : _timer(this), _pauseFlag(false), _paused(true), +_suppressAll(false), _suppressAllAnim(false), _suppressSong(false), _suppressSongAnim(false), +_suppressAllGain(1., 1.), _suppressSongGain(1., 1.), +_suppressAllStart(0), _suppressSongStart(0) { moveToThread(thread); _timer.moveToThread(thread); _pauseTimer.moveToThread(thread); @@ -470,91 +634,75 @@ void AudioPlayerFader::onInit() { } void AudioPlayerFader::onTimer() { - bool hasFading = false, hasPlaying = false; QMutexLocker lock(&playerMutex); AudioPlayer *voice = audioPlayer(); if (!voice) return; + bool suppressAudioChanged = false, suppressSongChanged = false; + if (_suppressAll || _suppressSongAnim) { + uint64 ms = getms(); + float64 wasSong = suppressSongGain; + if (_suppressAll) { + float64 wasAudio = suppressAllGain; + if (ms >= _suppressAllStart + notifyLengthMs || ms < _suppressAllStart) { + _suppressAll = _suppressAllAnim = false; + _suppressAllGain = anim::fvalue(1., 1.); + } else if (ms > _suppressAllStart + notifyLengthMs - AudioFadeDuration) { + if (_suppressAllGain.to() != 1.) _suppressAllGain.start(1.); + _suppressAllGain.update(1. - ((_suppressAllStart + notifyLengthMs - ms) / float64(AudioFadeDuration)), anim::linear); + } else if (ms >= _suppressAllStart + st::notifyFastAnim) { + if (_suppressAllAnim) { + _suppressAllGain.finish(); + _suppressAllAnim = false; + } + } else if (ms > _suppressAllStart) { + _suppressAllGain.update((ms - _suppressAllStart) / st::notifyFastAnim, anim::linear); + } + suppressAllGain = _suppressAllGain.current(); + suppressAudioChanged = (suppressAllGain != wasAudio); + } + if (_suppressSongAnim) { + if (ms >= _suppressSongStart + AudioFadeDuration) { + _suppressSongGain.finish(); + _suppressSongAnim = false; + } else { + _suppressSongGain.update((ms - _suppressSongStart) / float64(AudioFadeDuration), anim::linear); + } + } + suppressSongGain = qMin(suppressAllGain, _suppressSongGain.current()); + suppressSongChanged = (suppressSongGain != wasSong); + } + bool hasFading = (_suppressAll || _suppressSongAnim), hasPlaying = false; + for (int32 i = 0; i < AudioVoiceMsgSimultaneously; ++i) { - AudioPlayer::Msg &m(voice->_data[i]); + AudioPlayer::AudioMsg &m(voice->_audioData[i]); if (m.state == AudioPlayerStopped || m.state == AudioPlayerStoppedAtStart || m.state == AudioPlayerPaused || !m.source) continue; - bool playing = false, fading = false; - ALint pos = 0; - ALint state = AL_INITIAL; - alGetSourcei(m.source, AL_SAMPLE_OFFSET, &pos); - alGetSourcei(m.source, AL_SOURCE_STATE, &state); - if (!_checkALError()) { - m.state = AudioPlayerStopped; - emit error(m.audio); - } else { - switch (m.state) { - case AudioPlayerFinishing: - case AudioPlayerPausing: - case AudioPlayerStarting: - case AudioPlayerResuming: - fading = true; - break; - case AudioPlayerPlaying: - playing = true; - break; - } - if (fading && (state == AL_PLAYING || !m.loading)) { - if (state != AL_PLAYING) { - fading = false; - if (m.source) { - alSourcef(m.source, AL_GAIN, 1); - alSourceStop(m.source); - } - m.state = AudioPlayerStopped; - emit audioStopped(m.audio); - } else if (1000 * (pos + m.skipStart - m.started) >= AudioFadeDuration * m.frequency) { - fading = false; - alSourcef(m.source, AL_GAIN, 1); - switch (m.state) { - case AudioPlayerFinishing: alSourceStop(m.source); m.state = AudioPlayerStopped; break; - case AudioPlayerPausing: alSourcePause(m.source); m.state = AudioPlayerPaused; break; - case AudioPlayerStarting: - case AudioPlayerResuming: - m.state = AudioPlayerPlaying; - playing = true; - break; - } - } else { - float64 newGain = 1000. * (pos + m.skipStart - m.started) / (AudioFadeDuration * m.frequency); - if (m.state == AudioPlayerPausing || m.state == AudioPlayerFinishing) { - newGain = 1. - newGain; - } - alSourcef(m.source, AL_GAIN, newGain); - } - } else if (playing && (state == AL_PLAYING || !m.loading)) { - if (state != AL_PLAYING) { - playing = false; - if (m.source) { - alSourceStop(m.source); - alSourcef(m.source, AL_GAIN, 1); - } - m.state = AudioPlayerStopped; - emit audioStopped(m.audio); - } - } - if (state == AL_PLAYING && pos + m.skipStart - m.position >= AudioCheckPositionDelta) { - m.position = pos + m.skipStart; - emit playPositionUpdated(m.audio); - } - if (!m.loading && m.skipEnd > 0 && m.position + AudioPreloadSamples + m.skipEnd > m.duration) { - m.loading = true; - emit needToPreload(m.audio); - } - if (playing) hasPlaying = true; - if (fading) hasFading = true; - } + int32 emitSignals = updateOnePlayback(&m, hasPlaying, hasFading, suppressAllGain, suppressAudioChanged); + if (emitSignals & EmitError) emit error(m.audio); + if (emitSignals & EmitStopped) emit audioStopped(m.audio); + if (emitSignals & EmitPositionUpdated) emit playPositionUpdated(m.audio); + if (emitSignals & EmitNeedToPreload) emit needToPreload(m.audio); } - if (!hasPlaying) { - ALint state = AL_INITIAL; - alGetSourcei(notifySource, AL_SOURCE_STATE, &state); - if (_checkALError() && state == AL_PLAYING) { - hasPlaying = true; + + for (int32 i = 0; i < AudioSongSimultaneously; ++i) { + AudioPlayer::SongMsg &m(voice->_songData[i]); + if (m.state == AudioPlayerStopped || m.state == AudioPlayerStoppedAtStart || m.state == AudioPlayerPaused || !m.source) continue; + + int32 emitSignals = updateOnePlayback(&m, hasPlaying, hasFading, suppressSongGain, suppressSongChanged); + if (emitSignals & EmitError) emit error(m.song); + if (emitSignals & EmitStopped) emit audioStopped(m.song); + if (emitSignals & EmitPositionUpdated) emit playPositionUpdated(m.song); + if (emitSignals & EmitNeedToPreload) emit needToPreload(m.song); + } + + if (!hasFading) { + if (!hasPlaying) { + ALint state = AL_INITIAL; + alGetSourcei(notifySource, AL_SOURCE_STATE, &state); + if (_checkALError() && state == AL_PLAYING) { + hasPlaying = true; + } } } if (hasFading) { @@ -570,6 +718,87 @@ void AudioPlayerFader::onTimer() { } } +int32 AudioPlayerFader::updateOnePlayback(AudioPlayer::Msg *m, bool &hasPlaying, bool &hasFading, float64 suppressGain, bool suppressGainChanged) { + bool playing = false, fading = false; + + ALint pos = 0; + ALint state = AL_INITIAL; + alGetSourcei(m->source, AL_SAMPLE_OFFSET, &pos); + alGetSourcei(m->source, AL_SOURCE_STATE, &state); + if (!_checkALError()) { + m->state = AudioPlayerStopped; + return EmitError; + } + + int32 emitSignals = 0; + switch (m->state) { + case AudioPlayerFinishing: + case AudioPlayerPausing: + case AudioPlayerStarting: + case AudioPlayerResuming: + fading = true; + break; + case AudioPlayerPlaying: + playing = true; + break; + } + if (fading && (state == AL_PLAYING || !m->loading)) { + if (state != AL_PLAYING) { + fading = false; + if (m->source) { + alSourcef(m->source, AL_GAIN, 1); + alSourceStop(m->source); + } + m->state = AudioPlayerStopped; + emitSignals |= EmitStopped; + } else if (1000 * (pos + m->skipStart - m->started) >= AudioFadeDuration * m->frequency) { + fading = false; + alSourcef(m->source, AL_GAIN, 1. * suppressGain); + switch (m->state) { + case AudioPlayerFinishing: alSourceStop(m->source); m->state = AudioPlayerStopped; break; + case AudioPlayerPausing: alSourcePause(m->source); m->state = AudioPlayerPaused; break; + case AudioPlayerStarting: + case AudioPlayerResuming: + m->state = AudioPlayerPlaying; + playing = true; + break; + } + } else { + float64 newGain = 1000. * (pos + m->skipStart - m->started) / (AudioFadeDuration * m->frequency); + if (m->state == AudioPlayerPausing || m->state == AudioPlayerFinishing) { + newGain = 1. - newGain; + } + alSourcef(m->source, AL_GAIN, newGain * suppressGain); + } + } else if (playing && (state == AL_PLAYING || !m->loading)) { + if (state != AL_PLAYING) { + playing = false; + if (m->source) { + alSourceStop(m->source); + alSourcef(m->source, AL_GAIN, 1); + } + m->state = AudioPlayerStopped; + emitSignals |= EmitStopped; + } else if (suppressGainChanged) { + alSourcef(m->source, AL_GAIN, suppressGain); + } + } + if (state == AL_PLAYING && pos + m->skipStart - m->position >= AudioCheckPositionDelta) { + m->position = pos + m->skipStart; + emitSignals |= EmitPositionUpdated; + } + if (playing || m->state == AudioPlayerStarting || m->state == AudioPlayerResuming) { + if (!m->loading && m->skipEnd > 0 && m->position + AudioPreloadSamples + m->skipEnd > m->duration) { + m->loading = true; + emitSignals |= EmitNeedToPreload; + } + } + if (playing) hasPlaying = true; + if (fading) hasFading = true; + + return emitSignals; +} + void AudioPlayerFader::onPauseTimer() { QMutexLocker lock(&_pauseMutex); if (_pauseFlag) { @@ -582,6 +811,33 @@ void AudioPlayerFader::onPauseTimerStop() { if (_pauseTimer.isActive()) _pauseTimer.stop(); } +void AudioPlayerFader::onSuppressSong() { + if (!_suppressSong) { + _suppressSong = true; + _suppressSongAnim = true; + _suppressSongStart = getms(); + _suppressSongGain.start(st::suppressSong); + onTimer(); + } +} + +void AudioPlayerFader::onUnsuppressSong() { + if (_suppressSong) { + _suppressSong = false; + _suppressSongAnim = true; + _suppressSongStart = getms(); + _suppressSongGain.start(1.); + onTimer(); + } +} + +void AudioPlayerFader::onSuppressAll() { + _suppressAll = true; + _suppressAllStart = getms(); + _suppressAllGain.start(st::suppressAll); + onTimer(); +} + void AudioPlayerFader::resumeDevice() { QMutexLocker lock(&_pauseMutex); _pauseFlag = false; @@ -607,7 +863,6 @@ public: virtual int64 duration() = 0; virtual int32 frequency() = 0; virtual int32 format() = 0; - virtual void started() = 0; virtual bool readMore(QByteArray &result, int64 &samplesAdded) = 0; protected: @@ -777,9 +1032,6 @@ public: return fmt; } - void started() { - } - bool readMore(QByteArray &result, int64 &samplesAdded) { int res; if ((res = av_read_frame(fmtContext, &avpkt)) < 0) { @@ -916,113 +1168,81 @@ private: } }; -AudioPlayerLoaders::AudioPlayerLoaders(QThread *thread) { +AudioPlayerLoaders::AudioPlayerLoaders(QThread *thread) : _audioLoader(0), _songLoader(0) { moveToThread(thread); } AudioPlayerLoaders::~AudioPlayerLoaders() { - for (Loaders::iterator i = _loaders.begin(), e = _loaders.end(); i != e; ++i) { - delete i.value(); - } - _loaders.clear(); + delete _audioLoader; + delete _songLoader; } void AudioPlayerLoaders::onInit() { } -void AudioPlayerLoaders::onStart(AudioData *audio) { - Loaders::iterator i = _loaders.find(audio); - if (i != _loaders.end()) { - delete (*i); - _loaders.erase(i); - } +void AudioPlayerLoaders::onStart(const AudioMsgId &audio) { + _audio = AudioMsgId(); + delete _audioLoader; + _audioLoader = 0; onLoad(audio); } -void AudioPlayerLoaders::loadError(Loaders::iterator i) { - emit error(i.key()); - delete (*i); - _loaders.erase(i); +void AudioPlayerLoaders::onStart(const SongMsgId &song) { + _song = SongMsgId(); + delete _songLoader; + _songLoader = 0; + onLoad(song); } -void AudioPlayerLoaders::onLoad(AudioData *audio) { - bool started = false; - int32 audioindex = -1; - AudioPlayerLoader *l = 0; - Loaders::iterator j = _loaders.end(); - { - QMutexLocker lock(&playerMutex); - AudioPlayer *voice = audioPlayer(); - if (!voice) return; - - for (int32 i = 0; i < AudioVoiceMsgSimultaneously; ++i) { - AudioPlayer::Msg &m(voice->_data[i]); - if (m.audio != audio || !m.loading) continue; - - audioindex = i; - j = _loaders.find(audio); - if (j != _loaders.end() && !j.value()->check(m.fname, m.data)) { - delete j.value(); - _loaders.erase(j); - j = _loaders.end(); - } - if (j == _loaders.end()) { - QByteArray header = m.data.mid(0, 8); - if (header.isEmpty()) { - QFile f(m.fname); - if (!f.open(QIODevice::ReadOnly)) { - LOG(("Audio Error: could not open file '%1'").arg(m.fname)); - m.state = AudioPlayerStoppedAtStart; - emit error(audio); - return; - } - header = f.read(8); - } - if (header.size() < 8) { - LOG(("Audio Error: could not read header from file '%1', data size %2").arg(m.fname).arg(m.data.isEmpty() ? QFileInfo(m.fname).size() : m.data.size())); - m.state = AudioPlayerStoppedAtStart; - emit error(audio); - return; - } - - l = (j = _loaders.insert(audio, new FFMpegLoader(m.fname, m.data))).value(); - - int ret; - if (!l->open()) { - m.state = AudioPlayerStoppedAtStart; - return loadError(j); - } - int64 duration = l->duration(); - if (duration <= 0) { - m.state = AudioPlayerStoppedAtStart; - return loadError(j); - } - m.duration = duration; - m.frequency = l->frequency(); - if (!m.frequency) m.frequency = AudioVoiceMsgFrequency; - m.skipStart = 0; - m.skipEnd = duration; - m.position = 0; - m.started = 0; - started = true; - } else { - if (!m.skipEnd) continue; - l = j.value(); - } - break; - } +void AudioPlayerLoaders::clear(MediaOverviewType type) { + switch (type) { + case OverviewAudios: clearAudio(); break; + case OverviewDocuments: clearSong(); break; } +} - if (j == _loaders.end()) { - LOG(("Audio Error: trying to load part of audio, that is not playing at the moment")); - emit error(audio); +void AudioPlayerLoaders::emitError(MediaOverviewType type) { + switch (type) { + case OverviewAudios: emit error(clearAudio()); break; + case OverviewDocuments: emit error(clearSong()); break; + } +} + +AudioMsgId AudioPlayerLoaders::clearAudio() { + AudioMsgId current = _audio; + _audio = AudioMsgId(); + delete _audioLoader; + _audioLoader = 0; + return current; +} + +SongMsgId AudioPlayerLoaders::clearSong() { + SongMsgId current = _song; + _song = SongMsgId(); + delete _songLoader; + _songLoader = 0; + return current; +} + +void AudioPlayerLoaders::onLoad(const AudioMsgId &audio) { + loadData(OverviewAudios, static_cast(&audio)); +} + +void AudioPlayerLoaders::onLoad(const SongMsgId &song) { + loadData(OverviewDocuments, static_cast(&song)); +} + +void AudioPlayerLoaders::loadData(MediaOverviewType type, const void *objId) { + SetupError err = SetupNoErrorStarted; + AudioPlayerLoader *l = setupLoader(type, objId, err); + if (!l) { + if (err == SetupErrorAtStart) { + emitError(type); + } return; } - if (started) { - l->started(); - } - bool finished = false; + bool started = (err == SetupNoErrorStarted), finished = false; QByteArray result; int64 samplesAdded = 0, frequency = l->frequency(), format = l->format(); @@ -1031,102 +1251,228 @@ void AudioPlayerLoaders::onLoad(AudioData *audio) { finished = true; break; } - { - QMutexLocker lock(&playerMutex); - AudioPlayer *voice = audioPlayer(); - if (!voice) return; - AudioPlayer::Msg &m(voice->_data[audioindex]); - if (m.audio != audio || !m.loading || !l->check(m.fname, m.data)) { - LOG(("Audio Error: playing changed while loading")); - m.state = AudioPlayerStopped; - return loadError(j); - } + QMutexLocker lock(&playerMutex); + if (!checkLoader(type)) { + clear(type); + return; } } QMutexLocker lock(&playerMutex); - AudioPlayer *voice = audioPlayer(); - if (!voice) return; - - AudioPlayer::Msg &m(voice->_data[audioindex]); - if (m.audio != audio || !m.loading || !l->check(m.fname, m.data)) { - LOG(("Audio Error: playing changed while loading")); - m.state = AudioPlayerStopped; - return loadError(j); + AudioPlayer::Msg *m = checkLoader(type); + if (!m) { + clear(type); + return; } if (started) { - if (m.source) { - alSourceStop(m.source); + if (m->source) { + alSourceStop(m->source); for (int32 i = 0; i < 3; ++i) { - if (m.samplesCount[i]) { - alSourceUnqueueBuffers(m.source, 1, m.buffers + i); - m.samplesCount[i] = 0; + if (m->samplesCount[i]) { + alSourceUnqueueBuffers(m->source, 1, m->buffers + i); + m->samplesCount[i] = 0; } } - m.nextBuffer = 0; + m->nextBuffer = 0; } } if (samplesAdded) { - if (!m.source) { - alGenSources(1, &m.source); - alSourcef(m.source, AL_PITCH, 1.f); - alSourcef(m.source, AL_GAIN, 1.f); - alSource3f(m.source, AL_POSITION, 0, 0, 0); - alSource3f(m.source, AL_VELOCITY, 0, 0, 0); - alSourcei(m.source, AL_LOOPING, 0); + if (!m->source) { + alGenSources(1, &m->source); + alSourcef(m->source, AL_PITCH, 1.f); + alSourcef(m->source, AL_GAIN, 1.f); + alSource3f(m->source, AL_POSITION, 0, 0, 0); + alSource3f(m->source, AL_VELOCITY, 0, 0, 0); + alSourcei(m->source, AL_LOOPING, 0); } - if (!m.buffers[m.nextBuffer]) alGenBuffers(3, m.buffers); + if (!m->buffers[m->nextBuffer]) alGenBuffers(3, m->buffers); if (!_checkALError()) { - m.state = AudioPlayerStopped; - return loadError(j); + m->state = AudioPlayerStopped; + emitError(type); + return; } - if (m.samplesCount[m.nextBuffer]) { - alSourceUnqueueBuffers(m.source, 1, m.buffers + m.nextBuffer); - m.skipStart += m.samplesCount[m.nextBuffer]; + if (m->samplesCount[m->nextBuffer]) { + alSourceUnqueueBuffers(m->source, 1, m->buffers + m->nextBuffer); + m->skipStart += m->samplesCount[m->nextBuffer]; } - m.samplesCount[m.nextBuffer] = samplesAdded; - alBufferData(m.buffers[m.nextBuffer], format, result.constData(), result.size(), frequency); - alSourceQueueBuffers(m.source, 1, m.buffers + m.nextBuffer); - m.skipEnd -= samplesAdded; + m->samplesCount[m->nextBuffer] = samplesAdded; + alBufferData(m->buffers[m->nextBuffer], format, result.constData(), result.size(), frequency); + alSourceQueueBuffers(m->source, 1, m->buffers + m->nextBuffer); + m->skipEnd -= samplesAdded; - m.nextBuffer = (m.nextBuffer + 1) % 3; + m->nextBuffer = (m->nextBuffer + 1) % 3; if (!_checkALError()) { - m.state = AudioPlayerStopped; - return loadError(j); + m->state = AudioPlayerStopped; + emitError(type); + return; } } else { finished = true; } if (finished) { - m.skipEnd = 0; - m.duration = m.skipStart + m.samplesCount[0] + m.samplesCount[1] + m.samplesCount[2]; - delete j.value(); - _loaders.erase(j); + m->skipEnd = 0; + m->duration = m->skipStart + m->samplesCount[0] + m->samplesCount[1] + m->samplesCount[2]; + clear(type); } - m.loading = false; - if (m.state == AudioPlayerResuming || m.state == AudioPlayerPlaying || m.state == AudioPlayerStarting) { + m->loading = false; + if (m->state == AudioPlayerResuming || m->state == AudioPlayerPlaying || m->state == AudioPlayerStarting) { ALint state = AL_INITIAL; - alGetSourcei(m.source, AL_SOURCE_STATE, &state); + alGetSourcei(m->source, AL_SOURCE_STATE, &state); if (_checkALError()) { if (state != AL_PLAYING) { - voice->resumeDevice(); - alSourcePlay(m.source); + audioPlayer()->resumeDevice(); + switch (type) { + case OverviewAudios: alSourcef(m->source, AL_GAIN, suppressAllGain); break; + case OverviewDocuments: alSourcef(m->source, AL_GAIN, suppressSongGain); break; + } + alSourcePlay(m->source); emit needToCheck(); } } } } -void AudioPlayerLoaders::onCancel(AudioData *audio) { - Loaders::iterator i = _loaders.find(audio); - if (i != _loaders.end()) { - delete (*i); - _loaders.erase(i); +AudioPlayerLoader *AudioPlayerLoaders::setupLoader(MediaOverviewType type, const void *objId, SetupError &err) { + err = SetupErrorAtStart; + QMutexLocker lock(&playerMutex); + AudioPlayer *voice = audioPlayer(); + if (!voice) return 0; + + bool isGoodId = false; + AudioPlayer::Msg *m = 0; + AudioPlayerLoader **l = 0; + switch (type) { + case OverviewAudios: { + AudioPlayer::AudioMsg &msg(voice->_audioData[voice->_audioCurrent]); + const AudioMsgId &audio(*static_cast(objId)); + if (msg.audio != audio || !msg.loading) { + emit error(audio); + break; + } + m = &msg; + l = &_audioLoader; + isGoodId = (_audio == audio); + } break; + case OverviewDocuments: { + AudioPlayer::SongMsg &msg(voice->_songData[voice->_songCurrent]); + const SongMsgId &song(*static_cast(objId)); + if (msg.song != song || !msg.loading) { + emit error(song); + break; + } + m = &msg; + l = &_songLoader; + isGoodId = (_song == song); + } break; + } + if (!l || !m) { + LOG(("Audio Error: trying to load part of audio, that is not current at the moment")); + err = SetupErrorNotPlaying; + return 0; + } + + if (*l && (!isGoodId || !(*l)->check(m->fname, m->data))) { + delete *l; + *l = 0; + switch (type) { + case OverviewAudios: _audio = AudioMsgId(); break; + case OverviewDocuments: _song = SongMsgId(); break; + } + } + + if (!*l) { + switch (type) { + case OverviewAudios: _audio = *static_cast(objId); break; + case OverviewDocuments: _song = *static_cast(objId); break; + } + + QByteArray header = m->data.mid(0, 8); + if (header.isEmpty()) { + QFile f(m->fname); + if (!f.open(QIODevice::ReadOnly)) { + LOG(("Audio Error: could not open file '%1'").arg(m->fname)); + m->state = AudioPlayerStoppedAtStart; + return 0; + } + header = f.read(8); + } + if (header.size() < 8) { + LOG(("Audio Error: could not read header from file '%1', data size %2").arg(m->fname).arg(m->data.isEmpty() ? QFileInfo(m->fname).size() : m->data.size())); + m->state = AudioPlayerStoppedAtStart; + return 0; + } + + *l = new FFMpegLoader(m->fname, m->data); + + int ret; + if (!(*l)->open()) { + m->state = AudioPlayerStoppedAtStart; + return 0; + } + int64 duration = (*l)->duration(); + if (duration <= 0) { + m->state = AudioPlayerStoppedAtStart; + return 0; + } + m->duration = duration; + m->frequency = (*l)->frequency(); + if (!m->frequency) m->frequency = AudioVoiceMsgFrequency; + m->skipStart = 0; + m->skipEnd = duration; + m->position = 0; + m->started = 0; + err = SetupNoErrorStarted; + } else { + if (!m->skipEnd) { + err = SetupErrorLoadedFull; + LOG(("Audio Error: trying to load part of audio, that is already loaded to the end")); + return 0; + } + } + return *l; +} + +AudioPlayer::Msg *AudioPlayerLoaders::checkLoader(MediaOverviewType type) { + AudioPlayer *voice = audioPlayer(); + if (!voice) return 0; + + bool isGoodId = false; + AudioPlayer::Msg *m = 0; + AudioPlayerLoader **l = 0; + switch (type) { + case OverviewAudios: { + AudioPlayer::AudioMsg &msg(voice->_audioData[voice->_audioCurrent]); + isGoodId = (msg.audio == _audio); + l = &_audioLoader; + m = &msg; + } break; + case OverviewDocuments: { + AudioPlayer::SongMsg &msg(voice->_songData[voice->_songCurrent]); + isGoodId = (msg.song == _song); + l = &_songLoader; + m = &msg; + } break; + } + if (!l || !m) return 0; + + if (!isGoodId || !m->loading || !(*l)->check(m->fname, m->data)) { + LOG(("Audio Error: playing changed while loading")); + return 0; + } + + return m; +} + +void AudioPlayerLoaders::onCancel(const AudioMsgId &audio) { + if (_audio == audio) { + _audio = AudioMsgId(); + delete _audioLoader; + _audioLoader = 0; } QMutexLocker lock(&playerMutex); @@ -1134,13 +1480,32 @@ void AudioPlayerLoaders::onCancel(AudioData *audio) { if (!voice) return; for (int32 i = 0; i < AudioVoiceMsgSimultaneously; ++i) { - AudioPlayer::Msg &m(voice->_data[i]); + AudioPlayer::AudioMsg &m(voice->_audioData[i]); if (m.audio == audio) { m.loading = false; } } } +void AudioPlayerLoaders::onCancel(const SongMsgId &song) { + if (_song == song) { + _song = SongMsgId(); + delete _songLoader; + _songLoader = 0; + } + + QMutexLocker lock(&playerMutex); + AudioPlayer *voice = audioPlayer(); + if (!voice) return; + + for (int32 i = 0; i < AudioSongSimultaneously; ++i) { + AudioPlayer::SongMsg &m(voice->_songData[i]); + if (m.song == song) { + m.loading = false; + } + } +} + struct AudioCapturePrivate { AudioCapturePrivate() : device(0), fmt(0), ioBuffer(0), ioContext(0), fmtContext(0), stream(0), codec(0), codecContext(0), opened(false), @@ -1611,3 +1976,223 @@ void AudioCaptureInner::writeFrame(int32 offset, int32 framesize) { av_frame_free(&frame); } + +class FFMpegAttributesReader : public AudioPlayerLoader { +public: + + FFMpegAttributesReader(const QString &fname, const QByteArray &data) : AudioPlayerLoader(fname, data), + ioBuffer(0), ioContext(0), fmtContext(0), codec(0), streamId(0), + _opened(false) { + } + + bool open() { + if (!AudioPlayerLoader::openFile()) { + return false; + } + + ioBuffer = (uchar*)av_malloc(AVBlockSize); + if (data.isEmpty()) { + ioContext = avio_alloc_context(ioBuffer, AVBlockSize, 0, static_cast(this), &FFMpegAttributesReader::_read_file, 0, &FFMpegAttributesReader::_seek_file); + } else { + ioContext = avio_alloc_context(ioBuffer, AVBlockSize, 0, static_cast(this), &FFMpegAttributesReader::_read_data, 0, &FFMpegAttributesReader::_seek_data); + } + fmtContext = avformat_alloc_context(); + if (!fmtContext) { + DEBUG_LOG(("Audio Read Error: Unable to avformat_alloc_context for file '%1', data size '%2'").arg(fname).arg(data.size())); + return false; + } + fmtContext->pb = ioContext; + + int res = 0; + char err[AV_ERROR_MAX_STRING_SIZE] = { 0 }; + if ((res = avformat_open_input(&fmtContext, 0, 0, 0)) < 0) { + DEBUG_LOG(("Audio Read Error: Unable to avformat_open_input for file '%1', data size '%2', error %3, %4").arg(fname).arg(data.size()).arg(res).arg(av_make_error_string(err, sizeof(err), res))); + return false; + } + _opened = true; + + if ((res = avformat_find_stream_info(fmtContext, 0)) < 0) { + DEBUG_LOG(("Audio Read Error: Unable to avformat_find_stream_info for file '%1', data size '%2', error %3, %4").arg(fname).arg(data.size()).arg(res).arg(av_make_error_string(err, sizeof(err), res))); + return false; + } + + streamId = av_find_best_stream(fmtContext, AVMEDIA_TYPE_VIDEO, -1, -1, &codec, 0); + if (streamId >= 0) { + DEBUG_LOG(("Audio Read Error: Found video stream in file '%1', data size '%2', error %3, %4").arg(fname).arg(data.size()).arg(streamId).arg(av_make_error_string(err, sizeof(err), streamId))); + return false; + } + + streamId = av_find_best_stream(fmtContext, AVMEDIA_TYPE_AUDIO, -1, -1, &codec, 0); + if (streamId < 0) { + DEBUG_LOG(("Audio Read Error: Unable to av_find_best_stream for file '%1', data size '%2', error %3, %4").arg(fname).arg(data.size()).arg(streamId).arg(av_make_error_string(err, sizeof(err), streamId))); + return false; + } + + freq = fmtContext->streams[streamId]->codec->sample_rate; + len = (fmtContext->streams[streamId]->duration * freq) / fmtContext->streams[streamId]->time_base.den; + + for (int32 i = 0, l = fmtContext->nb_streams; i < l; ++i) { + AVStream *stream = fmtContext->streams[i]; + if (stream->disposition & AV_DISPOSITION_ATTACHED_PIC) { + const AVPacket &packet(stream->attached_pic); + if (packet.size) { + bool animated = false; + QByteArray cover((const char*)packet.data, packet.size), format; + _cover = App::readImage(cover, &format, true, &animated); + if (!_cover.isNull()) { + _coverBytes = cover; + _coverFormat = format; + break; + } + } + } + } + + extractMetaData(fmtContext->streams[streamId]->metadata); + extractMetaData(fmtContext->metadata); + + return true; + } + + void trySet(QString &to, AVDictionary *dict, const char *key) { + if (!to.isEmpty()) return; + if (AVDictionaryEntry* tag = av_dict_get(dict, key, 0, 0)) { + to = QString::fromUtf8(tag->value); + } + } + void extractMetaData(AVDictionary *dict) { + trySet(_title, dict, "title"); + trySet(_performer, dict, "artist"); + trySet(_performer, dict, "performer"); + trySet(_performer, dict, "album_artist"); + for (AVDictionaryEntry *tag = av_dict_get(dict, "", 0, AV_DICT_IGNORE_SUFFIX); tag; tag = av_dict_get(dict, "", tag, AV_DICT_IGNORE_SUFFIX)) { + const char *key = tag->key; + const char *value = tag->value; + QString tmp = QString::fromUtf8(value); + } + } + + int64 duration() { + return len; + } + + int32 frequency() { + return freq; + } + + int32 format() { + return 0; + } + + QString title() { + return _title; + } + + QString performer() { + return _performer; + } + + QImage cover() { + return _cover; + } + + QByteArray coverBytes() { + return _coverBytes; + } + + QByteArray coverFormat() { + return _coverFormat; + } + + bool readMore(QByteArray &result, int64 &samplesAdded) { + DEBUG_LOG(("Audio Read Error: should not call this")); + return false; + } + + ~FFMpegAttributesReader() { + if (ioContext) av_free(ioContext); + if (_opened) { + avformat_close_input(&fmtContext); + } else if (ioBuffer) { + av_free(ioBuffer); + } + if (fmtContext) avformat_free_context(fmtContext); + } + +private: + + QString fname, data; + + int32 freq; + int64 len; + QString _title, _performer; + QImage _cover; + QByteArray _coverBytes, _coverFormat; + + uchar *ioBuffer; + AVIOContext *ioContext; + AVFormatContext *fmtContext; + AVCodec *codec; + int32 streamId; + + bool _opened; + + static int _read_data(void *opaque, uint8_t *buf, int buf_size) { + FFMpegAttributesReader *l = reinterpret_cast(opaque); + + int32 nbytes = qMin(l->data.size() - l->dataPos, int32(buf_size)); + if (nbytes <= 0) { + return 0; + } + + memcpy(buf, l->data.constData() + l->dataPos, nbytes); + l->dataPos += nbytes; + return nbytes; + } + + static int64_t _seek_data(void *opaque, int64_t offset, int whence) { + FFMpegAttributesReader *l = reinterpret_cast(opaque); + + int32 newPos = -1; + switch (whence) { + case SEEK_SET: newPos = offset; break; + case SEEK_CUR: newPos = l->dataPos + offset; break; + case SEEK_END: newPos = l->data.size() + offset; break; + } + if (newPos < 0 || newPos > l->data.size()) { + return -1; + } + l->dataPos = newPos; + return l->dataPos; + } + + static int _read_file(void *opaque, uint8_t *buf, int buf_size) { + FFMpegAttributesReader *l = reinterpret_cast(opaque); + return int(l->f.read((char*)(buf), buf_size)); + } + + static int64_t _seek_file(void *opaque, int64_t offset, int whence) { + FFMpegAttributesReader *l = reinterpret_cast(opaque); + + switch (whence) { + case SEEK_SET: return l->f.seek(offset) ? l->f.pos() : -1; + case SEEK_CUR: return l->f.seek(l->f.pos() + offset) ? l->f.pos() : -1; + case SEEK_END: return l->f.seek(l->f.size() + offset) ? l->f.pos() : -1; + } + return -1; + } +}; + +MTPDocumentAttribute audioReadSongAttributes(const QString &fname, const QByteArray &data, QImage &cover, QByteArray &coverBytes, QByteArray &coverFormat) { + FFMpegAttributesReader reader(fname, data); + if (reader.open()) { + int32 duration = reader.duration() / reader.frequency(); + if (reader.duration() > 0) { + cover = reader.cover(); + coverBytes = reader.coverBytes(); + coverFormat = reader.coverFormat(); + return MTP_documentAttributeAudio(MTP_int(duration), MTP_string(reader.title()), MTP_string(reader.performer())); + } + } + return MTP_documentAttributeFilename(MTP_string(fname)); +} diff --git a/Telegram/SourceFiles/audio.h b/Telegram/SourceFiles/audio.h index 8aa33952b..f28a21d5e 100644 --- a/Telegram/SourceFiles/audio.h +++ b/Telegram/SourceFiles/audio.h @@ -45,39 +45,59 @@ public: AudioPlayer(); - void play(AudioData *audio); - void pauseresume(); + void play(const AudioMsgId &audio); + void play(const SongMsgId &song); + void pauseresume(MediaOverviewType type); + + void currentState(AudioMsgId *audio, AudioPlayerState *state = 0, int64 *position = 0, int64 *duration = 0, int32 *frequency = 0); + void currentState(SongMsgId *song, AudioPlayerState *state = 0, int64 *position = 0, int64 *duration = 0, int32 *frequency = 0); + + void clearStoppedAtStart(const AudioMsgId &audio); + void clearStoppedAtStart(const SongMsgId &song); - void currentState(AudioData **audio, AudioPlayerState *state = 0, int64 *position = 0, int64 *duration = 0, int32 *frequency = 0); - void clearStoppedAtStart(AudioData *audio); void resumeDevice(); ~AudioPlayer(); public slots: - void onError(AudioData *audio); + void onError(const AudioMsgId &audio); + void onError(const SongMsgId &song); + + void onStopped(const AudioMsgId &audio); + void onStopped(const SongMsgId &song); signals: - void updated(AudioData *audio); - void stopped(AudioData *audio); + void updated(const AudioMsgId &audio); + void updated(const SongMsgId &song); + + void stopped(const AudioMsgId &audio); + void stopped(const SongMsgId &song); + + void loaderOnStart(const AudioMsgId &audio); + void loaderOnStart(const SongMsgId &song); + + void loaderOnCancel(const AudioMsgId &audio); + void loaderOnCancel(const SongMsgId &song); void faderOnTimer(); - void loaderOnStart(AudioData *audio); - void loaderOnCancel(AudioData *audio); + void suppressSong(); + void unsuppressSong(); + void suppressAll(); private: - bool updateCurrentStarted(int32 pos = -1); + bool startedOther(MediaOverviewType type, bool &fadedStart); + bool updateCurrentStarted(MediaOverviewType type, int32 pos = -1); struct Msg { - Msg() : audio(0), position(0), duration(0), frequency(AudioVoiceMsgFrequency), skipStart(0), skipEnd(0), loading(0), started(0), + Msg() : position(0), duration(0), frequency(AudioVoiceMsgFrequency), skipStart(0), skipEnd(0), loading(0), started(0), state(AudioPlayerStopped), source(0), nextBuffer(0) { memset(buffers, 0, sizeof(buffers)); memset(samplesCount, 0, sizeof(samplesCount)); } - AudioData *audio; + QString fname; QByteArray data; int64 position, duration; @@ -92,9 +112,24 @@ private: uint32 buffers[3]; int64 samplesCount[3]; }; + struct AudioMsg : public Msg { + AudioMsg() { + } + AudioMsgId audio; + }; + struct SongMsg : public Msg { + SongMsg() { + } + SongMsgId song; + }; - int32 _current; - Msg _data[AudioVoiceMsgSimultaneously]; + void currentState(Msg *current, AudioPlayerState *state, int64 *position, int64 *duration, int32 *frequency); + + int32 _audioCurrent; + AudioMsg _audioData[AudioVoiceMsgSimultaneously]; + + int32 _songCurrent; + SongMsg _songData[AudioSongSimultaneously]; QMutex _mutex; @@ -154,10 +189,14 @@ public: signals: - void error(AudioData *audio); - void playPositionUpdated(AudioData *audio); - void audioStopped(AudioData *audio); - void needToPreload(AudioData *audio); + void error(const AudioMsgId &audio); + void error(const SongMsgId &audio); + void playPositionUpdated(const AudioMsgId &audio); + void playPositionUpdated(const SongMsgId &audio); + void audioStopped(const AudioMsgId &audio); + void audioStopped(const SongMsgId &audio); + void needToPreload(const AudioMsgId &audio); + void needToPreload(const SongMsgId &audio); void stopPauseDevice(); @@ -168,12 +207,28 @@ public slots: void onPauseTimer(); void onPauseTimerStop(); + void onSuppressSong(); + void onUnsuppressSong(); + void onSuppressAll(); + private: + enum { + EmitError = 0x01, + EmitStopped = 0x02, + EmitPositionUpdated = 0x04, + EmitNeedToPreload = 0x08, + }; + int32 updateOnePlayback(AudioPlayer::Msg *m, bool &hasPlaying, bool &hasFading, float64 suppressGain, bool suppressGainChanged); + QTimer _timer, _pauseTimer; QMutex _pauseMutex; bool _pauseFlag, _paused; + bool _suppressAll, _suppressAllAnim, _suppressSong, _suppressSongAnim; + anim::fvalue _suppressAllGain, _suppressSongGain; + uint64 _suppressAllStart, _suppressSongStart; + }; class AudioPlayerLoader; @@ -187,22 +242,45 @@ public: signals: - void error(AudioData *audio); + void error(const AudioMsgId &audio); + void error(const SongMsgId &song); void needToCheck(); public slots: void onInit(); - void onStart(AudioData *audio); - void onLoad(AudioData *audio); - void onCancel(AudioData *audio); - + + void onStart(const AudioMsgId &audio); + void onStart(const SongMsgId &audio); + + void onLoad(const AudioMsgId &audio); + void onLoad(const SongMsgId &audio); + + void onCancel(const AudioMsgId &audio); + void onCancel(const SongMsgId &audio); + private: - typedef QMap Loaders; - Loaders _loaders; + AudioMsgId _audio; + AudioPlayerLoader *_audioLoader; - void loadError(Loaders::iterator i); + SongMsgId _song; + AudioPlayerLoader *_songLoader; + + void emitError(MediaOverviewType type); + void clear(MediaOverviewType type); + AudioMsgId clearAudio(); + SongMsgId clearSong(); + + enum SetupError { + SetupErrorAtStart = 0, + SetupErrorNotPlaying = 1, + SetupErrorLoadedFull = 2, + SetupNoErrorStarted = 3, + }; + void loadData(MediaOverviewType type, const void *objId); + AudioPlayerLoader *setupLoader(MediaOverviewType type, const void *objId, SetupError &err); + AudioPlayer::Msg *checkLoader(MediaOverviewType type); }; @@ -239,3 +317,5 @@ private: QByteArray _captured; }; + +MTPDocumentAttribute audioReadSongAttributes(const QString &fname, const QByteArray &data, QImage &cover, QByteArray &coverBytes, QByteArray &coverFormat); diff --git a/Telegram/SourceFiles/boxes/stickersetbox.cpp b/Telegram/SourceFiles/boxes/stickersetbox.cpp index dfc6c8986..12dfd5a02 100644 --- a/Telegram/SourceFiles/boxes/stickersetbox.cpp +++ b/Telegram/SourceFiles/boxes/stickersetbox.cpp @@ -46,7 +46,7 @@ void StickerSetInner::gotSet(const MTPmessages_StickerSet &set) { _pack.reserve(v.size()); for (int32 i = 0, l = v.size(); i < l; ++i) { DocumentData *doc = App::feedDocument(v.at(i)); - if (!doc || !doc->sticker) continue; + if (!doc || !doc->sticker()) continue; _pack.push_back(doc); } @@ -156,11 +156,11 @@ void StickerSetInner::paintEvent(QPaintEvent *e) { if (!doc->loader && doc->status != FileFailed && !already && !hasdata) { doc->save(QString()); } - if (doc->sticker->img->isNull() && (already || hasdata)) { + if (doc->sticker()->img->isNull() && (already || hasdata)) { if (already) { - doc->sticker->img = ImagePtr(doc->already()); + doc->sticker()->img = ImagePtr(doc->already()); } else { - doc->sticker->img = ImagePtr(doc->data); + doc->sticker()->img = ImagePtr(doc->data); } } } @@ -173,8 +173,8 @@ void StickerSetInner::paintEvent(QPaintEvent *e) { QPoint ppos = pos + QPoint((st::stickersSize.width() - w) / 2, (st::stickersSize.height() - h) / 2); if (goodThumb) { p.drawPixmapLeft(ppos, width(), doc->thumb->pix(w, h)); - } else if (!doc->sticker->img->isNull()) { - p.drawPixmapLeft(ppos, width(), doc->sticker->img->pix(w, h)); + } else if (!doc->sticker()->img->isNull()) { + p.drawPixmapLeft(ppos, width(), doc->sticker()->img->pix(w, h)); } } } diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index eff06ad20..20e5d0d22 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -85,9 +85,10 @@ enum { MediaOverviewPreloadCount = 4, AudioVoiceMsgSimultaneously = 4, + AudioSongSimultaneously = 4, AudioCheckPositionTimeout = 100, // 100ms per check audio pos AudioCheckPositionDelta = 4800, // update position called each 4800 samples - AudioFadeTimeout = 10, // 10ms + AudioFadeTimeout = 7, // 7ms AudioFadeDuration = 500, AudioVoiceMsgSkip = 400, // 200ms AudioVoiceMsgFade = 300, // 300ms @@ -100,7 +101,7 @@ enum { AudioVoiceMsgInMemory = 1024 * 1024, // 1 Mb audio is hold in memory and auto loaded AudioPauseDeviceTimeout = 3000, // pause in 3 secs after playing is over - StickerInMemory = 256 * 1024, // 128 Kb stickers hold in memory, auto loaded and displayed inline + StickerInMemory = 1024 * 1024, // 1024 Kb stickers hold in memory, auto loaded and displayed inline StickerMaxSize = 2048, // 2048x2048 is a max image size for sticker MediaViewImageSizeLimit = 100 * 1024 * 1024, // show up to 100mb jpg/png/gif docs in app diff --git a/Telegram/SourceFiles/dropdown.cpp b/Telegram/SourceFiles/dropdown.cpp index 38e78c7b2..cf41f42c3 100644 --- a/Telegram/SourceFiles/dropdown.cpp +++ b/Telegram/SourceFiles/dropdown.cpp @@ -1216,7 +1216,7 @@ void StickerPanInner::paintEvent(QPaintEvent *e) { float64 hover = _sets[c].hovers[index]; DocumentData *sticker = _sets[c].pack[index]; - if (!sticker->sticker) continue; + if (!sticker->sticker()) continue; QPoint pos(st::stickerPanPadding + j * st::stickerPanSize.width(), y + i * st::stickerPanSize.height()); if (hover > 0) { @@ -1235,11 +1235,11 @@ void StickerPanInner::paintEvent(QPaintEvent *e) { if (!sticker->loader && sticker->status != FileFailed && !already && !hasdata) { sticker->save(QString()); } - if (sticker->sticker->img->isNull() && (already || hasdata)) { + if (sticker->sticker()->img->isNull() && (already || hasdata)) { if (already) { - sticker->sticker->img = ImagePtr(sticker->already()); + sticker->sticker()->img = ImagePtr(sticker->already()); } else { - sticker->sticker->img = ImagePtr(sticker->data); + sticker->sticker()->img = ImagePtr(sticker->data); } } } @@ -1252,8 +1252,8 @@ void StickerPanInner::paintEvent(QPaintEvent *e) { QPoint ppos = pos + QPoint((st::stickerPanSize.width() - w) / 2, (st::stickerPanSize.height() - h) / 2); if (goodThumb) { p.drawPixmapLeft(ppos, width(), sticker->thumb->pix(w, h)); - } else if (!sticker->sticker->img->isNull()) { - p.drawPixmapLeft(ppos, width(), sticker->sticker->img->pix(w, h)); + } else if (!sticker->sticker()->img->isNull()) { + p.drawPixmapLeft(ppos, width(), sticker->sticker()->img->pix(w, h)); } if (hover > 0 && _sets[c].id == RecentStickerSetId && _custom.at(index)) { @@ -1411,7 +1411,7 @@ void StickerPanInner::preloadImages() { if (++k > StickerPanPerRow * (StickerPanPerRow + 1)) break; DocumentData *sticker = _sets.at(i).pack.at(j); - if (!sticker || !sticker->sticker) continue; + if (!sticker || !sticker->sticker()) continue; bool goodThumb = !sticker->thumb->isNull() && ((sticker->thumb->width() >= 128) || (sticker->thumb->height() >= 128)); if (goodThumb) { diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 8de3a9841..6e25e4b97 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -2541,7 +2541,7 @@ void HistoryAudio::draw(QPainter &p, const HistoryItem *parent, bool selected, i fwd->drawForwardedFrom(p, st::mediaPadding.left(), fwdFrom, width - st::mediaPadding.left() - st::mediaPadding.right(), selected); } - AudioData *playing = 0; + AudioMsgId playing; AudioPlayerState playingState = AudioPlayerStopped; int64 playingPosition = 0, playingDuration = 0; int32 playingFrequency = 0; @@ -2563,7 +2563,7 @@ void HistoryAudio::draw(QPainter &p, const HistoryItem *parent, bool selected, i img = out ? st::mediaAudioOutImg : st::mediaAudioInImg; } else if (already || hasdata) { bool showPause = false; - if (playing == data && playingState != AudioPlayerStopped && playingState != AudioPlayerStoppedAtStart) { + if (playing.msgId == parent->id && playingState != AudioPlayerStopped && playingState != AudioPlayerStoppedAtStart) { statusText = formatDurationText(playingPosition / (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency)) + qsl(" / ") + formatDurationText(playingDuration / (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency)); showPause = (playingState == AudioPlayerPlaying || playingState == AudioPlayerResuming || playingState == AudioPlayerStarting); } else { @@ -2728,18 +2728,26 @@ HistoryMedia *HistoryAudio::clone() const { return new HistoryAudio(*this); } +namespace { + QString documentName(DocumentData *document) { + SongData *song = document->song(); + if (!song || (song->title.isEmpty() && song->performer.isEmpty())) return document->name; + if (song->performer.isEmpty()) return song->title; + return song->performer + QString::fromUtf8(" \xe2\x80\x94 ") + (song->title.isEmpty() ? qsl("Unknown Track") : song->title); + } +} + HistoryDocument::HistoryDocument(DocumentData *document) : HistoryMedia() , data(document) , _openl(new DocumentOpenLink(data)) , _savel(new DocumentSaveLink(data)) , _cancell(new DocumentCancelLink(data)) -, _name(data->name) +, _name(documentName(data)) , _dldDone(0) , _uplDone(0) { _namew = st::mediaFont->m.width(_name.isEmpty() ? qsl("Document") : _name); - - _size = formatSizeText(data->size); + _size = document->song() ? formatDurationAndSizeText(document->song()->duration, data->size) : formatSizeText(data->size); _height = _minh = st::mediaPadding.top() + st::mediaThumbSize + st::mediaPadding.bottom(); @@ -2800,7 +2808,7 @@ void HistoryDocument::draw(QPainter &p, const HistoryItem *parent, bool selected if (width < 0) width = w; if (width < 1) return; - bool out = parent->out(), hovered, pressed; + bool out = parent->out(), hovered, pressed, already = !data->already().isEmpty(), hasdata = !data->data.isEmpty(); if (parent == animated.msg) { int32 pw = animated.w / cIntRetinaFactor(), ph = animated.h / cIntRetinaFactor(); if (width < pw) { @@ -2835,8 +2843,6 @@ void HistoryDocument::draw(QPainter &p, const HistoryItem *parent, bool selected skipy += fwdFrom; } - data->thumb->checkload(); - if (width >= _maxw) { width = _maxw; } @@ -2854,8 +2860,8 @@ void HistoryDocument::draw(QPainter &p, const HistoryItem *parent, bool selected p.setPen((hovered ? st::mediaSaveButton.overColor : st::mediaSaveButton.color)->p); p.setFont(st::mediaSaveButton.font->f); - QString btnText(lang(data->loader ? lng_media_cancel : (data->already().isEmpty() ? lng_media_download : lng_media_open_with))); - int32 btnTextWidth = data->loader ? _cancelWidth : (data->already().isEmpty() ? _downloadWidth : _openWithWidth); + QString btnText(lang(data->loader ? lng_media_cancel : (already ? lng_media_open_with : lng_media_download))); + int32 btnTextWidth = data->loader ? _cancelWidth : (already ? _openWithWidth : _downloadWidth); p.drawText(btnx + (btnw - btnTextWidth) / 2, btny + (pressed ? st::mediaSaveButton.downTextTop : st::mediaSaveButton.textTop) + st::mediaSaveButton.font->ascent, btnText); width -= btnw + st::mediaSaveDelta; } @@ -2875,10 +2881,76 @@ void HistoryDocument::draw(QPainter &p, const HistoryItem *parent, bool selected } else if (fwd) { fwd->drawForwardedFrom(p, st::mediaPadding.left(), fwdFrom, width - st::mediaPadding.left() - st::mediaPadding.right(), selected); } - if (_thumbw) { - p.drawPixmap(QPoint(st::mediaPadding.left(), skipy + st::mediaPadding.top()), data->thumb->pixSingle(_thumbw, 0, st::mediaThumbSize, st::mediaThumbSize)); + + QString statusText; + if (data->song()) { + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + int64 playingPosition = 0, playingDuration = 0; + int32 playingFrequency = 0; + if (audioPlayer()) { + audioPlayer()->currentState(&playing, &playingState, &playingPosition, &playingDuration, &playingFrequency); + } + + QRect img; + if (data->status == FileFailed) { + statusText = lang(lng_attach_failed); + img = out ? st::mediaAudioOutImg : st::mediaAudioInImg; + } else if (data->status == FileUploading) { + if (_uplTextCache.isEmpty() || _uplDone != data->uploadOffset) { + _uplDone = data->uploadOffset; + _uplTextCache = formatDownloadText(_uplDone, data->size); + } + statusText = _uplTextCache; + img = out ? st::mediaAudioOutImg : st::mediaAudioInImg; + } else if (already || hasdata) { + bool showPause = false; + if (playing.msgId == parent->id && playingState != AudioPlayerStopped && playingState != AudioPlayerStoppedAtStart) { + statusText = formatDurationText(playingPosition / (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency)) + qsl(" / ") + formatDurationText(playingDuration / (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency)); + showPause = (playingState == AudioPlayerPlaying || playingState == AudioPlayerResuming || playingState == AudioPlayerStarting); + } else { + statusText = formatDurationText(data->song()->duration); + } + img = out ? (showPause ? st::mediaPauseOutImg : st::mediaPlayOutImg) : (showPause ? st::mediaPauseInImg : st::mediaPlayInImg); + } else { + if (data->loader) { + if (_dldTextCache.isEmpty() || _dldDone != data->loader->currentOffset()) { + _dldDone = data->loader->currentOffset(); + _dldTextCache = formatDownloadText(_dldDone, data->size); + } + statusText = _dldTextCache; + } else { + statusText = _size; + } + img = out ? st::mediaAudioOutImg : st::mediaAudioInImg; + } + + p.drawPixmap(QPoint(st::mediaPadding.left(), skipy + st::mediaPadding.top()), App::sprite(), img); } else { - p.drawPixmap(QPoint(st::mediaPadding.left(), skipy + st::mediaPadding.top()), App::sprite(), (out ? st::mediaDocOutImg : st::mediaDocInImg)); + if (data->status == FileFailed) { + statusText = lang(lng_attach_failed); + } else if (data->status == FileUploading) { + if (_uplTextCache.isEmpty() || _uplDone != data->uploadOffset) { + _uplDone = data->uploadOffset; + _uplTextCache = formatDownloadText(_uplDone, data->size); + } + statusText = _uplTextCache; + } else if (data->loader) { + if (_dldTextCache.isEmpty() || _dldDone != data->loader->currentOffset()) { + _dldDone = data->loader->currentOffset(); + _dldTextCache = formatDownloadText(_dldDone, data->size); + } + statusText = _dldTextCache; + } else { + statusText = _size; + } + + if (_thumbw) { + data->thumb->checkload(); + p.drawPixmap(QPoint(st::mediaPadding.left(), skipy + st::mediaPadding.top()), data->thumb->pixSingle(_thumbw, 0, st::mediaThumbSize, st::mediaThumbSize)); + } else { + p.drawPixmap(QPoint(st::mediaPadding.left(), skipy + st::mediaPadding.top()), App::sprite(), (out ? st::mediaDocOutImg : st::mediaDocInImg)); + } } if (selected) { App::roundRect(p, st::mediaPadding.left(), skipy + st::mediaPadding.top(), st::mediaThumbSize, st::mediaThumbSize, textstyleCurrent()->selectOverlay, SelectedOverlayCorners); @@ -2897,28 +2969,9 @@ void HistoryDocument::draw(QPainter &p, const HistoryItem *parent, bool selected p.drawText(tleft, skipy + st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, _name); } - QString statusText; - style::color status(selected ? (out ? st::mediaOutSelectColor : st::mediaInSelectColor) : (out ? st::mediaOutColor : st::mediaInColor)); p.setPen(status->p); - if (data->status == FileFailed) { - statusText = lang(lng_attach_failed); - } else if (data->status == FileUploading) { - if (_uplTextCache.isEmpty() || _uplDone != data->uploadOffset) { - _uplDone = data->uploadOffset; - _uplTextCache = formatDownloadText(_uplDone, data->size); - } - statusText = _uplTextCache; - } else if (data->loader) { - if (_dldTextCache.isEmpty() || _dldDone != data->loader->currentOffset()) { - _dldDone = data->loader->currentOffset(); - _dldTextCache = formatDownloadText(_dldDone, data->size); - } - statusText = _dldTextCache; - } else { - statusText = _size; - } p.drawText(tleft, skipy + st::mediaPadding.top() + st::mediaThumbSize - st::mediaDetailsShift - st::mediaFont->descent, statusText); p.setFont(st::msgDateFont->f); @@ -2975,11 +3028,11 @@ int32 HistoryDocument::resize(int32 width, bool dontRecountText, const HistoryIt } const QString HistoryDocument::inDialogsText() const { - return data->name.isEmpty() ? lang(lng_in_dlg_file) : data->name; + return _name.isEmpty() ? lang(lng_in_dlg_file) : _name; } const QString HistoryDocument::inHistoryText() const { - return qsl("[ ") + lang(lng_in_dlg_file) + (data->name.isEmpty() ? QString() : (qsl(" : ") + data->name)) + qsl(" ]"); + return qsl("[ ") + lang(lng_in_dlg_file) + (_name.isEmpty() ? QString() : (qsl(" : ") + _name)) + qsl(" ]"); } bool HistoryDocument::hasPoint(int32 x, int32 y, const HistoryItem *parent, int32 width) const { @@ -3136,24 +3189,24 @@ void HistorySticker::draw(QPainter &p, const HistoryItem *parent, bool selected, if (!data->loader && data->status != FileFailed && !already && !hasdata) { data->save(QString()); } - if (data->sticker->img->isNull() && (already || hasdata)) { + if (data->sticker()->img->isNull() && (already || hasdata)) { if (already) { - data->sticker->img = ImagePtr(data->already()); + data->sticker()->img = ImagePtr(data->already()); } else { - data->sticker->img = ImagePtr(data->data); + data->sticker()->img = ImagePtr(data->data); } } if (selected) { - if (data->sticker->img->isNull()) { + if (data->sticker()->img->isNull()) { p.drawPixmap(QPoint(usex + (usew - pixw) / 2, (_minh - pixh) / 2), data->thumb->pixBlurredColored(st::msgStickerOverlay, pixw, pixh)); } else { - p.drawPixmap(QPoint(usex + (usew - pixw) / 2, (_minh - pixh) / 2), data->sticker->img->pixColored(st::msgStickerOverlay, pixw, pixh)); + p.drawPixmap(QPoint(usex + (usew - pixw) / 2, (_minh - pixh) / 2), data->sticker()->img->pixColored(st::msgStickerOverlay, pixw, pixh)); } } else { - if (data->sticker->img->isNull()) { + if (data->sticker()->img->isNull()) { p.drawPixmap(QPoint(usex + (usew - pixw) / 2, (_minh - pixh) / 2), data->thumb->pixBlurred(pixw, pixh)); } else { - p.drawPixmap(QPoint(usex + (usew - pixw) / 2, (_minh - pixh) / 2), data->sticker->img->pix(pixw, pixh)); + p.drawPixmap(QPoint(usex + (usew - pixw) / 2, (_minh - pixh) / 2), data->sticker()->img->pix(pixw, pixh)); } } @@ -4785,7 +4838,7 @@ void HistoryMessage::initMediaFromText(QString ¤tText) { } void HistoryMessage::initMediaFromDocument(DocumentData *doc) { - if (doc->type == StickerDocument && doc->sticker && doc->dimensions.width() > 0 && doc->dimensions.height() > 0 && doc->dimensions.width() <= StickerMaxSize && doc->dimensions.height() <= StickerMaxSize && doc->size < StickerInMemory) { + if (doc->sticker()) { _media = new HistorySticker(doc); } else { _media = new HistoryDocument(doc); diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 17ca869a3..e9e0344b1 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -839,9 +839,9 @@ void HistoryList::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { if (item && !isUponSelected && !_contextMenuLnk) { if (HistorySticker *sticker = dynamic_cast(msg ? msg->getMedia() : 0)) { DocumentData *doc = sticker->document(); - if (doc && doc->sticker && doc->sticker->set.type() != mtpc_inputStickerSetEmpty) { + if (doc && doc->sticker() && doc->sticker()->set.type() != mtpc_inputStickerSetEmpty) { if (!_menu) _menu = new ContextMenu(this); - _menu->addAction(lang(doc->sticker->setInstalled() ? lng_context_pack_info : lng_context_pack_add), historyWidget, SLOT(onStickerPackInfo())); + _menu->addAction(lang(doc->sticker()->setInstalled() ? lng_context_pack_info : lng_context_pack_add), historyWidget, SLOT(onStickerPackInfo())); } } QString contextMenuText = item->selectedText(FullItemSel); @@ -4349,8 +4349,10 @@ namespace { } if (document->type == AnimatedDocument) { attributes.push_back(MTP_documentAttributeAnimated()); - } else if (document->type == StickerDocument && document->sticker) { - attributes.push_back(MTP_documentAttributeSticker(MTP_string(document->sticker->alt), document->sticker->set)); + } else if (document->type == StickerDocument && document->sticker()) { + attributes.push_back(MTP_documentAttributeSticker(MTP_string(document->sticker()->alt), document->sticker()->set)); + } else if (document->type == SongDocument && document->song()) { + attributes.push_back(MTP_documentAttributeAudio(MTP_int(document->song()->duration), MTP_string(document->song()->title), MTP_string(document->song()->performer))); } return MTP_vector(attributes); } @@ -4864,7 +4866,7 @@ void HistoryWidget::onStickerSend(DocumentData *sticker) { App::main()->finishForwarding(hist); cancelReply(lastKeyboardUsed); - if (sticker->sticker) App::main()->incrementSticker(sticker); + if (sticker->sticker()) App::main()->incrementSticker(sticker); App::historyRegRandom(randomId, newId); App::main()->historyToDown(hist); @@ -4973,8 +4975,8 @@ void HistoryWidget::onReplyForwardPreviewCancel() { void HistoryWidget::onStickerPackInfo() { if (HistoryMessage *item = dynamic_cast(App::contextItem())) { if (HistorySticker *sticker = dynamic_cast(item->getMedia())) { - if (sticker->document() && sticker->document()->sticker && sticker->document()->sticker->set.type() != mtpc_inputStickerSetEmpty) { - App::main()->stickersBox(sticker->document()->sticker->set); + if (sticker->document() && sticker->document()->sticker() && sticker->document()->sticker()->set.type() != mtpc_inputStickerSetEmpty) { + App::main()->stickersBox(sticker->document()->sticker()->set); } } } diff --git a/Telegram/SourceFiles/localimageloader.cpp b/Telegram/SourceFiles/localimageloader.cpp index 146e69583..d929e5d8b 100644 --- a/Telegram/SourceFiles/localimageloader.cpp +++ b/Telegram/SourceFiles/localimageloader.cpp @@ -18,6 +18,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "stdafx.h" #include "localimageloader.h" #include "gui/filedialog.h" +#include "audio.h" #include LocalImageLoaderPrivate::LocalImageLoaderPrivate(int32 currentUser, LocalImageLoader *loader, QThread *thread) : QObject(0) @@ -164,7 +165,40 @@ void LocalImageLoaderPrivate::prepareImages() { MTPDocument document(MTP_documentEmpty(MTP_long(0))); MTPAudio audio(MTP_audioEmpty(MTP_long(0))); + bool isSong = false; QByteArray jpeg; + if (type == ToPrepareDocument) { + if (mime == qstr("audio/mp3") || mime == qstr("audio/m4a") || mime == qstr("audio/aac") || mime == qstr("audio/ogg") || + filename.endsWith(qstr(".mp3"), Qt::CaseInsensitive) || filename.endsWith(qstr(".m4a"), Qt::CaseInsensitive) || + filename.endsWith(qstr(".aac"), Qt::CaseInsensitive) || filename.endsWith(qstr(".ogg"), Qt::CaseInsensitive)) { + + QImage cover; + QByteArray coverBytes, coverFormat; + MTPDocumentAttribute audioAttribute = audioReadSongAttributes(file, data, cover, coverBytes, coverFormat); + if (audioAttribute.type() == mtpc_documentAttributeAudio) { + attributes.push_back(audioAttribute); + isSong = true; + if (!cover.isNull()) { // cover to thumb + int32 cw = cover.width(), ch = cover.height(); + if (cw < 20 * ch && ch < 20 * cw) { + QPixmap full = (cw > 90 || ch > 90) ? QPixmap::fromImage(cover.scaled(90, 90, Qt::KeepAspectRatio, Qt::SmoothTransformation), Qt::ColorOnly) : QPixmap::fromImage(cover, Qt::ColorOnly); + { + QByteArray thumbFormat = "JPG"; + int32 thumbQuality = 87; + + QBuffer jpegBuffer(&jpeg); + full.save(&jpegBuffer, thumbFormat, thumbQuality); + } + + photoThumbs.insert('0', full); + thumb = MTP_photoSize(MTP_string(""), MTP_fileLocationUnavailable(MTP_long(0), MTP_int(0), MTP_long(0)), MTP_int(full.width()), MTP_int(full.height()), MTP_int(0)); + + thumbId = MTP::nonce(); + } + } + } + } + } if (type == ToPreparePhoto) { int32 w = img.width(), h = img.height(); @@ -189,7 +223,7 @@ void LocalImageLoaderPrivate::prepareImages() { photo = MTP_photo(MTP_long(id), MTP_long(0), MTP_int(user), MTP_int(unixtime()), MTP_geoPointEmpty(), MTP_vector(photoSizes)); thumbId = id; - } else if ((type == ToPrepareVideo || type == ToPrepareDocument) && !img.isNull()) { + } else if ((type == ToPrepareVideo || type == ToPrepareDocument) && !img.isNull() && !isSong) { int32 w = img.width(), h = img.height(); QByteArray thumbFormat = "JPG"; int32 thumbQuality = 87; diff --git a/Telegram/SourceFiles/localstorage.cpp b/Telegram/SourceFiles/localstorage.cpp index feafd3cc2..243a93f44 100644 --- a/Telegram/SourceFiles/localstorage.cpp +++ b/Telegram/SourceFiles/localstorage.cpp @@ -517,6 +517,8 @@ namespace { typedef QPair FileLocationPair; typedef QMap FileLocationPairs; FileLocationPairs _fileLocationPairs; + typedef QMap FileLocationAliases; + FileLocationAliases _fileLocationAliases; FileKey _locationsKey = 0; FileKey _recentStickersKeyOld = 0, _stickersKey = 0; @@ -566,14 +568,28 @@ namespace { _writeMap(WriteMapFast); } quint32 size = 0; - for (FileLocations::const_iterator i = _fileLocations.cbegin(); i != _fileLocations.cend(); ++i) { + for (FileLocations::const_iterator i = _fileLocations.cbegin(), e = _fileLocations.cend(); i != e; ++i) { // location + type + namelen + name + date + size size += sizeof(quint64) * 2 + sizeof(quint32) + _stringSize(i.value().name) + _dateTimeSize() + sizeof(quint32); } + //end mark + size += sizeof(quint64) * 2 + sizeof(quint32) + _stringSize(QString()) + _dateTimeSize() + sizeof(quint32); + size += sizeof(quint32); // aliases count + for (FileLocationAliases::const_iterator i = _fileLocationAliases.cbegin(), e = _fileLocationAliases.cend(); i != e; ++i) { + // alias + location + size += sizeof(quint64) * 2 + sizeof(quint64) * 2; + } + EncryptedDescriptor data(size); for (FileLocations::const_iterator i = _fileLocations.cbegin(); i != _fileLocations.cend(); ++i) { data.stream << quint64(i.key().first) << quint64(i.key().second) << quint32(i.value().type) << i.value().name << i.value().modified << quint32(i.value().size); } + data.stream << quint64(0) << quint64(0) << quint32(0) << QString() << QDateTime::currentDateTime() << quint32(0); + data.stream << quint32(_fileLocationAliases.size()); + for (FileLocationAliases::const_iterator i = _fileLocationAliases.cbegin(), e = _fileLocationAliases.cend(); i != e; ++i) { + data.stream << quint64(i.key().first) << quint64(i.key().second) << quint64(i.value().first) << quint64(i.value().second); + } + FileWriteDescriptor file(_locationsKey); file.writeEncrypted(data); } @@ -588,12 +604,18 @@ namespace { return; } + bool endMarkFound = false; while (!locations.stream.atEnd()) { quint64 first, second; FileLocation loc; quint32 type; locations.stream >> first >> second >> type >> loc.name >> loc.modified >> loc.size; + if (!first && !second && !type && loc.name.isEmpty() && !loc.size) { // end mark + endMarkFound = true; + break; + } + MediaKey key(first, second); loc.type = StorageFileType(type); @@ -604,6 +626,16 @@ namespace { _writeLocations(); } } + + if (endMarkFound) { + quint32 cnt; + locations.stream >> cnt; + for (int32 i = 0; i < cnt; ++i) { + quint64 kfirst, ksecond, vfirst, vsecond; + locations.stream >> kfirst >> ksecond >> vfirst >> vsecond; + _fileLocationAliases.insert(MediaKey(kfirst, ksecond), MediaKey(vfirst, vsecond)); + } + } } mtpDcOptions *_dcOpts = 0; @@ -1998,12 +2030,21 @@ namespace Local { return (_draftsPositionsMap.constFind(peer) != _draftsPositionsMap.cend()); } - void writeFileLocation(const MediaKey &location, const FileLocation &local) { + void writeFileLocation(MediaKey location, const FileLocation &local) { if (local.name.isEmpty()) return; + FileLocationAliases::const_iterator aliasIt = _fileLocationAliases.constFind(location); + if (aliasIt != _fileLocationAliases.cend()) { + location = aliasIt.value(); + } + FileLocationPairs::iterator i = _fileLocationPairs.find(local.name); if (i != _fileLocationPairs.cend()) { if (i.value().second == local) { + if (i.value().first != location) { + _fileLocationAliases.insert(location, i.value().first); + _writeLocations(WriteMapFast); + } return; } if (i.value().first != location) { @@ -2021,7 +2062,12 @@ namespace Local { _writeLocations(WriteMapFast); } - FileLocation readFileLocation(const MediaKey &location, bool check) { + FileLocation readFileLocation(MediaKey location, bool check) { + FileLocationAliases::const_iterator aliasIt = _fileLocationAliases.constFind(location); + if (aliasIt != _fileLocationAliases.cend()) { + location = aliasIt.value(); + } + FileLocations::iterator i = _fileLocations.find(location); for (FileLocations::iterator i = _fileLocations.find(location); (i != _fileLocations.end()) && (i.key() == location);) { if (check) { @@ -2253,8 +2299,8 @@ namespace Local { stream << quint64(it->id) << quint64(it->access) << it->title << it->shortName << qint32(it->stickers.size()) << qint32(it->hash) << qint32(it->flags); for (StickerPack::const_iterator j = it->stickers.cbegin(), e = it->stickers.cend(); j != e; ++j) { DocumentData *doc = *j; - stream << quint64(doc->id) << quint64(doc->access) << qint32(doc->date) << doc->name << doc->mime << qint32(doc->dc) << qint32(doc->size) << qint32(doc->dimensions.width()) << qint32(doc->dimensions.height()) << qint32(doc->type) << doc->sticker->alt; - switch (doc->sticker->set.type()) { + stream << quint64(doc->id) << quint64(doc->access) << qint32(doc->date) << doc->name << doc->mime << qint32(doc->dc) << qint32(doc->size) << qint32(doc->dimensions.width()) << qint32(doc->dimensions.height()) << qint32(doc->type) << doc->sticker()->alt; + switch (doc->sticker()->set.type()) { case mtpc_inputStickerSetID: { stream << qint32(StickerSetTypeID); } break; @@ -2266,7 +2312,7 @@ namespace Local { stream << qint32(StickerSetTypeEmpty); } break; } - const StorageImageLocation &loc(doc->sticker->loc); + const StorageImageLocation &loc(doc->sticker()->loc); stream << qint32(loc.width) << qint32(loc.height) << qint32(loc.dc) << quint64(loc.volume) << qint32(loc.local) << quint64(loc.secret); } } @@ -2301,7 +2347,7 @@ namespace Local { DocumentData *doc = *j; // id + access + date + namelen + name + mimelen + mime + dc + size + width + height + type + alt + type-of-set - size += sizeof(quint64) + sizeof(quint64) + sizeof(qint32) + _stringSize(doc->name) + _stringSize(doc->mime) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + _stringSize(doc->sticker->alt) + sizeof(qint32); + size += sizeof(quint64) + sizeof(quint64) + sizeof(qint32) + _stringSize(doc->name) + _stringSize(doc->mime) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + _stringSize(doc->sticker()->alt) + sizeof(qint32); // thumb-width + thumb-height + thumb-dc + thumb-volume + thumb-local + thumb-secret size += sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(quint64) + sizeof(qint32) + sizeof(quint64); @@ -2375,7 +2421,7 @@ namespace Local { } DocumentData *doc = App::documentSet(id, 0, access, date, attributes, mime, ImagePtr(), dc, size, StorageImageLocation()); - if (!doc->sticker) continue; + if (!doc->sticker()) continue; if (value > 0) { def.stickers.push_back(doc); @@ -2499,7 +2545,7 @@ namespace Local { StorageImageLocation thumb(thumbWidth, thumbHeight, thumbDc, thumbVolume, thumbLocal, thumbSecret); DocumentData *doc = App::documentSet(id, 0, access, date, attributes, mime, thumb.dc ? ImagePtr(thumb) : ImagePtr(), dc, size, thumb); - if (!doc->sticker) continue; + if (!doc->sticker()) continue; set.stickers.push_back(doc); ++set.count; diff --git a/Telegram/SourceFiles/localstorage.h b/Telegram/SourceFiles/localstorage.h index e306168eb..d3df02d3b 100644 --- a/Telegram/SourceFiles/localstorage.h +++ b/Telegram/SourceFiles/localstorage.h @@ -113,8 +113,8 @@ namespace Local { MessageCursor readDraftPositions(const PeerId &peer); bool hasDraftPositions(const PeerId &peer); - void writeFileLocation(const StorageKey &location, const FileLocation &local); - FileLocation readFileLocation(const StorageKey &location, bool check = true); + void writeFileLocation(MediaKey location, const FileLocation &local); + FileLocation readFileLocation(MediaKey location, bool check = true); void writeImage(const StorageKey &location, const ImagePtr &img); void writeImage(const StorageKey &location, const StorageImageSaved &jpeg, bool overwrite = true); diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 0dc1e01b8..635f152fc 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -376,8 +376,10 @@ _failDifferenceTimeout(1), _lastUpdateTime(0), _cachedX(0), _cachedY(0), _backgr connect(&updateNotifySettingTimer, SIGNAL(timeout()), this, SLOT(onUpdateNotifySettings())); connect(this, SIGNAL(showPeerAsync(quint64,qint32,bool,bool)), this, SLOT(showPeer(quint64,qint32,bool,bool)), Qt::QueuedConnection); if (audioPlayer()) { - connect(audioPlayer(), SIGNAL(updated(AudioData*)), this, SLOT(audioPlayProgress(AudioData*))); - connect(audioPlayer(), SIGNAL(stopped(AudioData*)), this, SLOT(audioPlayProgress(AudioData*))); + connect(audioPlayer(), SIGNAL(updated(const AudioMsgId&)), this, SLOT(audioPlayProgress(const AudioMsgId&))); + connect(audioPlayer(), SIGNAL(stopped(const AudioMsgId&)), this, SLOT(audioPlayProgress(const AudioMsgId&))); + connect(audioPlayer(), SIGNAL(updated(const SongMsgId&)), this, SLOT(documentPlayProgress(const SongMsgId&))); + connect(audioPlayer(), SIGNAL(stopped(const SongMsgId&)), this, SLOT(documentPlayProgress(const SongMsgId&))); } connect(&_updateMutedTimer, SIGNAL(timeout()), this, SLOT(onUpdateMuted())); @@ -1409,16 +1411,16 @@ void MainWidget::audioLoadProgress(mtpFileLoader *loader) { if (audio->loader->done()) { audio->finish(); QString already = audio->already(); - bool play = audio->openOnSave > 0 && audioPlayer(); + bool play = audio->openOnSave > 0 && audio->openOnSaveMsgId && audioPlayer(); if ((!already.isEmpty() && audio->openOnSave) || (!audio->data.isEmpty() && play)) { if (play) { - AudioData *playing = 0; + AudioMsgId playing; AudioPlayerState state = AudioPlayerStopped; audioPlayer()->currentState(&playing, &state); - if (playing == audio && state != AudioPlayerStopped) { - audioPlayer()->pauseresume(); + if (playing.msgId == audio->openOnSaveMsgId && state != AudioPlayerStopped) { + audioPlayer()->pauseresume(OverviewAudios); } else { - audioPlayer()->play(audio); + audioPlayer()->play(AudioMsgId(audio, audio->openOnSaveMsgId)); if (App::main()) App::main()->audioMarkRead(audio); } } else { @@ -1442,12 +1444,14 @@ void MainWidget::audioLoadProgress(mtpFileLoader *loader) { } } -void MainWidget::audioPlayProgress(AudioData *audio) { - AudioData *playing = 0; +void MainWidget::audioPlayProgress(const AudioMsgId &audioId) { + AudioMsgId playing; AudioPlayerState state = AudioPlayerStopped; audioPlayer()->currentState(&playing, &state); - if (playing == audio && state == AudioPlayerStoppedAtStart) { - audioPlayer()->clearStoppedAtStart(audio); + if (playing == audioId && state == AudioPlayerStoppedAtStart) { + audioPlayer()->clearStoppedAtStart(audioId); + + AudioData *audio = audioId.audio; QString already = audio->already(true); if (already.isEmpty() && !audio->data.isEmpty()) { bool mp3 = (audio->mime == qstr("audio/mp3")); @@ -1469,12 +1473,53 @@ void MainWidget::audioPlayProgress(AudioData *audio) { } } - const AudioItems &items(App::audioItems()); - AudioItems::const_iterator i = items.constFind(audio); - if (i != items.cend()) { - for (HistoryItemsMap::const_iterator j = i->cbegin(), e = i->cend(); j != e; ++j) { - msgUpdated(j.key()->history()->peer->id, j.key()); + if (HistoryItem *item = App::histItemById(audioId.msgId)) { + msgUpdated(item->history()->peer->id, item); + } +} + +void MainWidget::documentPlayProgress(const SongMsgId &songId) { + SongMsgId playing; + AudioPlayerState state = AudioPlayerStopped; + audioPlayer()->currentState(&playing, &state); + if (playing == songId && state == AudioPlayerStoppedAtStart) { + audioPlayer()->clearStoppedAtStart(songId); + + DocumentData *document = songId.song; + QString already = document->already(true); + if (already.isEmpty() && !document->data.isEmpty()) { + QString name = document->name, filter; + MimeType mimeType = mimeTypeForName(document->mime); + QStringList p = mimeType.globPatterns(); + QString pattern = p.isEmpty() ? QString() : p.front(); + if (name.isEmpty()) { + name = pattern.isEmpty() ? qsl(".unknown") : pattern.replace('*', QString()); + } + if (pattern.isEmpty()) { + filter = qsl("All files (*.*)"); + } else { + filter = mimeType.filterString() + qsl(";;All files (*.*)"); + } + QString filename = saveFileName(lang(lng_save_file), filter, qsl("doc"), name, false); + if (!filename.isEmpty()) { + QFile f(filename); + if (f.open(QIODevice::WriteOnly)) { + if (f.write(document->data) == document->data.size()) { + f.close(); + already = filename; + document->location = FileLocation(mtpToStorageType(mtpc_storage_filePartial), filename); + Local::writeFileLocation(mediaKey(mtpToLocationType(mtpc_inputDocumentFileLocation), document->dc, document->id), FileLocation(mtpToStorageType(mtpc_storage_filePartial), filename)); + } + } + } } + if (!already.isEmpty()) { + psOpenFile(already); + } + } + + if (HistoryItem *item = App::histItemById(songId.msgId)) { + msgUpdated(item->history()->peer->id, item); } } @@ -1499,11 +1544,22 @@ void MainWidget::documentLoadProgress(mtpFileLoader *loader) { if (document->loader->done()) { document->finish(); QString already = document->already(); - if (!already.isEmpty() && document->openOnSave) { - if (document->openOnSave > 0 && document->size < MediaViewImageSizeLimit) { + + HistoryItem *item = (document->openOnSave && document->openOnSaveMsgId) ? App::histItemById(document->openOnSaveMsgId) : 0; + bool play = document->song() && audioPlayer() && document->openOnSave && item; + if ((!already.isEmpty() || (!document->data.isEmpty() && play)) && document->openOnSave) { + if (play) { + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + audioPlayer()->currentState(&playing, &playingState); + if (playing.msgId == item->id && playingState != AudioPlayerStopped) { + audioPlayer()->pauseresume(OverviewDocuments); + } else { + audioPlayer()->play(SongMsgId(document, item->id)); + } + } else if(document->openOnSave > 0 && document->size < MediaViewImageSizeLimit) { QImageReader reader(already); if (reader.canRead()) { - HistoryItem *item = App::histItemById(document->openOnSaveMsgId); if (reader.supportsAnimation() && reader.imageCount() > 1 && item) { startGif(item, already); } else if (item) { @@ -2884,7 +2940,7 @@ void MainWidget::updateNotifySetting(PeerData *peer, bool enabled) { } void MainWidget::incrementSticker(DocumentData *sticker) { - if (!sticker || !sticker->sticker) return; + if (!sticker || !sticker->sticker()) return; RecentStickerPack &recent(cGetRecentStickers()); RecentStickerPack::iterator i = recent.begin(), e = recent.end(); @@ -2925,9 +2981,9 @@ void MainWidget::incrementSticker(DocumentData *sticker) { bool found = false; uint64 setId = 0; QString setName; - switch (sticker->sticker->set.type()) { - case mtpc_inputStickerSetID: setId = sticker->sticker->set.c_inputStickerSetID().vid.v; break; - case mtpc_inputStickerSetShortName: setName = qs(sticker->sticker->set.c_inputStickerSetShortName().vshort_name).toLower().trimmed(); break; + switch (sticker->sticker()->set.type()) { + case mtpc_inputStickerSetID: setId = sticker->sticker()->set.c_inputStickerSetID().vid.v; break; + case mtpc_inputStickerSetShortName: setName = qs(sticker->sticker()->set.c_inputStickerSetShortName().vshort_name).toLower().trimmed(); break; } StickerSets &sets(cRefStickerSets()); for (StickerSets::const_iterator i = sets.cbegin(); i != sets.cend(); ++i) { diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index acb09a70c..30c14ce49 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -386,10 +386,11 @@ public slots: void audioLoadProgress(mtpFileLoader *loader); void audioLoadFailed(mtpFileLoader *loader, bool started); void audioLoadRetry(); - void audioPlayProgress(AudioData *audio); + void audioPlayProgress(const AudioMsgId &audioId); void documentLoadProgress(mtpFileLoader *loader); void documentLoadFailed(mtpFileLoader *loader, bool started); void documentLoadRetry(); + void documentPlayProgress(const SongMsgId &songId); void setInnerFocus(); void dialogsCancelled(); diff --git a/Telegram/SourceFiles/mediaview.cpp b/Telegram/SourceFiles/mediaview.cpp index 7f1d02ab5..56441c375 100644 --- a/Telegram/SourceFiles/mediaview.cpp +++ b/Telegram/SourceFiles/mediaview.cpp @@ -800,9 +800,9 @@ void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { _caption = Text(); QString already = _doc->already(true); - if (_doc->sticker && !_doc->sticker->img->isNull() && _doc->sticker->img->loaded()) { + if (_doc->sticker() && !_doc->sticker()->img->isNull() && _doc->sticker()->img->loaded()) { _currentGif.stop(); - _current = _doc->sticker->img->pix(); + _current = _doc->sticker()->img->pix(); } else if (!already.isEmpty()) { QImageReader reader(already); if (reader.canRead()) { @@ -1010,7 +1010,7 @@ void MediaView::paintEvent(QPaintEvent *e) { QRect imgRect(_x, _y, _w, _h); const QPixmap *toDraw = _currentGif.isNull() ? &_current : &_currentGif.current(_currentGif.w, _currentGif.h, false); if (imgRect.intersects(r)) { - if (toDraw->hasAlpha() && (!_doc || !_doc->sticker || _doc->sticker->img->isNull())) { + if (toDraw->hasAlpha() && (!_doc || !_doc->sticker() || _doc->sticker()->img->isNull())) { p.fillRect(imgRect, _transparentBrush); } if (_zoom) { @@ -1415,7 +1415,7 @@ void MediaView::preloadData(int32 delta) { switch (media->type()) { case MediaTypePhoto: static_cast(media)->photo()->full->load(); break; case MediaTypeDocument: static_cast(media)->document()->thumb->load(); break; - case MediaTypeSticker: static_cast(media)->document()->sticker->img->load(); break; + case MediaTypeSticker: static_cast(media)->document()->sticker()->img->load(); break; } } } diff --git a/Telegram/SourceFiles/settings.cpp b/Telegram/SourceFiles/settings.cpp index 74814cbfa..3634fb63c 100644 --- a/Telegram/SourceFiles/settings.cpp +++ b/Telegram/SourceFiles/settings.cpp @@ -289,7 +289,7 @@ RecentStickerPack &cGetRecentStickers() { recent.reserve(p.size()); for (RecentStickerPreload::const_iterator i = p.cbegin(), e = p.cend(); i != e; ++i) { DocumentData *doc = App::document(i->first); - if (!doc || !doc->sticker) continue; + if (!doc || !doc->sticker()) continue; recent.push_back(qMakePair(doc, i->second)); } diff --git a/Telegram/SourceFiles/structs.cpp b/Telegram/SourceFiles/structs.cpp index fd4a9865f..522c712e7 100644 --- a/Telegram/SourceFiles/structs.cpp +++ b/Telegram/SourceFiles/structs.cpp @@ -442,16 +442,16 @@ void AudioOpenLink::onClick(Qt::MouseButton button) const { if ((!data->user && !data->date) || button != Qt::LeftButton) return; QString already = data->already(true); - bool play = audioPlayer(); + bool play = App::hoveredLinkItem() && audioPlayer(); if (!already.isEmpty() || (!data->data.isEmpty() && play)) { if (play) { - AudioData *playing = 0; + AudioMsgId playing; AudioPlayerState playingState = AudioPlayerStopped; audioPlayer()->currentState(&playing, &playingState); - if (playing == data && playingState != AudioPlayerStopped) { - audioPlayer()->pauseresume(); + if (playing.msgId == App::hoveredLinkItem()->id && playingState != AudioPlayerStopped) { + audioPlayer()->pauseresume(OverviewAudios); } else { - audioPlayer()->play(data); + audioPlayer()->play(AudioMsgId(data, App::hoveredLinkItem()->id)); if (App::main()) App::main()->audioMarkRead(data); } } else { @@ -549,9 +549,19 @@ void DocumentOpenLink::onClick(Qt::MouseButton button) const { DocumentData *data = document(); if (!data->date || button != Qt::LeftButton) return; + bool play = data->song() && App::hoveredLinkItem() && audioPlayer(); QString already = data->already(true); - if (!already.isEmpty()) { - if (data->size < MediaViewImageSizeLimit) { + if (!already.isEmpty() || (!data->data.isEmpty() && play)) { + if (play) { + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + audioPlayer()->currentState(&playing, &playingState); + if (playing.msgId == App::hoveredLinkItem()->id && playingState != AudioPlayerStopped) { + audioPlayer()->pauseresume(OverviewDocuments); + } else { + audioPlayer()->play(SongMsgId(data, App::hoveredLinkItem()->id)); + } + } else if (data->size < MediaViewImageSizeLimit) { QImageReader reader(already); if (reader.canRead()) { if (reader.supportsAnimation() && reader.imageCount() > 1 && App::hoveredLinkItem()) { @@ -646,7 +656,7 @@ void DocumentCancelLink::onClick(Qt::MouseButton button) const { } DocumentData::DocumentData(const DocumentId &id, const uint64 &access, int32 date, const QVector &attributes, const QString &mime, const ImagePtr &thumb, int32 dc, int32 size) : -id(id), type(FileDocument), duration(0), access(access), date(date), mime(mime), thumb(thumb), dc(dc), size(size), status(FileReady), uploadOffset(0), openOnSave(0), openOnSaveMsgId(0), loader(0), sticker(0) { +id(id), type(FileDocument), access(access), date(date), mime(mime), thumb(thumb), dc(dc), size(size), status(FileReady), uploadOffset(0), openOnSave(0), openOnSaveMsgId(0), loader(0), _additional(0) { setattributes(attributes); location = Local::readFileLocation(mediaKey(DocumentFileLocation, dc, id)); } @@ -658,12 +668,17 @@ void DocumentData::setattributes(const QVector &attributes const MTPDdocumentAttributeImageSize &d(attributes[i].c_documentAttributeImageSize()); dimensions = QSize(d.vw.v, d.vh.v); } break; - case mtpc_documentAttributeAnimated: if (type == FileDocument || type == StickerDocument) type = AnimatedDocument; break; + case mtpc_documentAttributeAnimated: if (type == FileDocument || type == StickerDocument) { + type = AnimatedDocument; + delete _additional; + _additional = 0; + } break; case mtpc_documentAttributeSticker: { const MTPDdocumentAttributeSticker &d(attributes[i].c_documentAttributeSticker()); - if (type == FileDocument) type = StickerDocument; - if (type == StickerDocument && !sticker) sticker = new StickerData(); - if (sticker) { + if (type == FileDocument) { + type = StickerDocument; + StickerData *sticker = new StickerData(); + _additional = sticker; sticker->alt = qs(d.valt); sticker->set = d.vstickerset; } @@ -671,17 +686,28 @@ void DocumentData::setattributes(const QVector &attributes case mtpc_documentAttributeVideo: { const MTPDdocumentAttributeVideo &d(attributes[i].c_documentAttributeVideo()); type = VideoDocument; - duration = d.vduration.v; +// duration = d.vduration.v; dimensions = QSize(d.vw.v, d.vh.v); } break; case mtpc_documentAttributeAudio: { const MTPDdocumentAttributeAudio &d(attributes[i].c_documentAttributeAudio()); - type = AudioDocument; - duration = d.vduration.v; + type = SongDocument; + SongData *song = new SongData(); + _additional = song; + song->duration = d.vduration.v; + song->title = qs(d.vtitle); + song->performer = qs(d.vperformer); } break; case mtpc_documentAttributeFilename: name = qs(attributes[i].c_documentAttributeFilename().vfile_name); break; } } + if (type == StickerDocument) { + if (dimensions.width() <= 0 || dimensions.height() <= 0 || dimensions.width() > StickerMaxSize || dimensions.height() > StickerMaxSize || size > StickerInMemory) { + type = FileDocument; + delete _additional; + _additional = 0; + } + } } void DocumentData::save(const QString &toFile) { diff --git a/Telegram/SourceFiles/structs.h b/Telegram/SourceFiles/structs.h index 15d798796..d73c90d22 100644 --- a/Telegram/SourceFiles/structs.h +++ b/Telegram/SourceFiles/structs.h @@ -413,6 +413,27 @@ struct AudioData { int32 md5[8]; }; +struct AudioMsgId { + AudioMsgId() : audio(0), msgId(0) { + } + AudioMsgId(AudioData *audio, MsgId msgId) : audio(audio), msgId(msgId) { + } + operator bool() const { + return audio; + } + AudioData *audio; + MsgId msgId; +}; +inline bool operator<(const AudioMsgId &a, const AudioMsgId &b) { + return quintptr(a.audio) < quintptr(b.audio) || (quintptr(a.audio) == quintptr(b.audio) && a.msgId < b.msgId); +} +inline bool operator==(const AudioMsgId &a, const AudioMsgId &b) { + return a.audio == b.audio && a.msgId == b.msgId; +} +inline bool operator!=(const AudioMsgId &a, const AudioMsgId &b) { + return !(a == b); +} + class AudioLink : public ITextLink { TEXT_LINK_CLASS(AudioLink) @@ -455,7 +476,18 @@ public: void onClick(Qt::MouseButton button) const; }; -struct StickerData { +enum DocumentType { + FileDocument = 0, + VideoDocument = 1, + SongDocument = 2, + StickerDocument = 3, + AnimatedDocument = 4, +}; + +struct DocumentAdditionalData { +}; + +struct StickerData : public DocumentAdditionalData { StickerData() : set(MTP_inputStickerSetEmpty()) { } ImagePtr img; @@ -467,20 +499,20 @@ struct StickerData { StorageImageLocation loc; // doc thumb location }; -enum DocumentType { - FileDocument = 0, - VideoDocument = 1, - AudioDocument = 2, - StickerDocument = 3, - AnimatedDocument = 4, +struct SongData : public DocumentAdditionalData { + SongData() : duration(0) { + } + int32 duration; + QString title, performer; }; + struct DocumentData { DocumentData(const DocumentId &id, const uint64 &access = 0, int32 date = 0, const QVector &attributes = QVector(), const QString &mime = QString(), const ImagePtr &thumb = ImagePtr(), int32 dc = 0, int32 size = 0); void setattributes(const QVector &attributes); void forget() { thumb->forget(); - if (sticker) sticker->img->forget(); + if (sticker()) sticker()->img->forget(); replyPreview->forget(); } @@ -510,15 +542,20 @@ struct DocumentData { loader = 0; } ~DocumentData() { - delete sticker; + delete _additional; } QString already(bool check = false); + StickerData *sticker() { + return (type == StickerDocument) ? static_cast(_additional) : 0; + } + SongData *song() { + return (type == SongDocument) ? static_cast(_additional) : 0; + } DocumentId id; DocumentType type; QSize dimensions; - int32 duration; uint64 access; int32 date; QString name, mime; @@ -534,11 +571,32 @@ struct DocumentData { FileLocation location; QByteArray data; - StickerData *sticker; + DocumentAdditionalData *_additional; int32 md5[8]; }; +struct SongMsgId { + SongMsgId() : song(0), msgId(0) { + } + SongMsgId(DocumentData *song, MsgId msgId) : song(song), msgId(msgId) { + } + operator bool() const { + return song; + } + DocumentData *song; + MsgId msgId; +}; +inline bool operator<(const SongMsgId &a, const SongMsgId &b) { + return quintptr(a.song) < quintptr(b.song) || (quintptr(a.song) == quintptr(b.song) && a.msgId < b.msgId); +} +inline bool operator==(const SongMsgId &a, const SongMsgId &b) { + return a.song == b.song && a.msgId == b.msgId; +} +inline bool operator!=(const SongMsgId &a, const SongMsgId &b) { + return !(a == b); +} + class DocumentLink : public ITextLink { TEXT_LINK_CLASS(DocumentLink) From 89d68cab3e3cf4ca05091ab7158568cde8075a96 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 1 Jul 2015 00:27:56 +0300 Subject: [PATCH 030/121] version 0.8.36 prepared --- Telegram/PrepareWin.bat | 10 +++++----- Telegram/SourceFiles/application.cpp | 2 +- Telegram/SourceFiles/config.h | 6 +++--- Telegram/SourceFiles/history.cpp | 3 +++ Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 ++++++------ Telegram/Version.sh | 2 +- 8 files changed, 20 insertions(+), 17 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index 0be6ea4da..9b272df83 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,11 +1,11 @@ @echo OFF set "AppVersionStrMajor=0.8" -set "AppVersion=8035" -set "AppVersionStrSmall=0.8.35" -set "AppVersionStr=0.8.35" -set "AppVersionStrFull=0.8.35.0" -set "DevChannel=1" +set "AppVersion=8036" +set "AppVersionStrSmall=0.8.36" +set "AppVersionStr=0.8.36" +set "AppVersionStrFull=0.8.36.0" +set "DevChannel=0" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index 8f0f6eee8..abc5ee6d5 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -642,7 +642,7 @@ void Application::checkMapVersion() { QString versionFeatures; if (DevChannel && Local::oldMapVersion() < 8035) { versionFeatures = lang(lng_new_version_minor);// QString::fromUtf8("\xe2\x80\x94 Forward photos, media and stickers with drag-n-drop\n\xe2\x80\x94 Drag-n-drop text messages by timestamp to forward them\n\xe2\x80\x94 Larger stickers panel");// .replace('@', qsl("@") + QChar(0x200D)); - } else if (!DevChannel && Local::oldMapVersion() < 8030) { + } else if (!DevChannel && Local::oldMapVersion() < 8036) { versionFeatures = lang(lng_new_version_text).trimmed(); } if (!versionFeatures.isEmpty()) { diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index eff06ad20..4b8d9c265 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,9 +17,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8035; -static const wchar_t *AppVersionStr = L"0.8.35"; -static const bool DevChannel = true; +static const int32 AppVersion = 8036; +static const wchar_t *AppVersionStr = L"0.8.36"; +static const bool DevChannel = false; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 8de3a9841..570554f2c 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -3094,6 +3094,9 @@ HistorySticker::HistorySticker(DocumentData *document) : HistoryMedia() , pixw(1), pixh(1), data(document), lastw(0) { data->thumb->load(); + if (!data->sticker->alt.isEmpty()) { + _emoji = data->sticker->alt; + } } void HistorySticker::initDimensions(const HistoryItem *parent) { diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index 1184d694e..276ee3bec 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.35 + 0.8.36 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index 2f8225ec377b75cdf9533565a69e8819d0e5fd5c..680f5d589c084e081694578a78a1f6d853116923 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_J Date: Fri, 3 Jul 2015 11:47:16 +0300 Subject: [PATCH 031/121] audio player done --- Telegram/Resources/lang.strings | 3 +- Telegram/Resources/style.txt | 26 ++ Telegram/SourceFiles/art/sprite.png | Bin 171747 -> 172592 bytes Telegram/SourceFiles/art/sprite_200x.png | Bin 226322 -> 227714 bytes Telegram/SourceFiles/audio.cpp | 315 ++++++++++--- Telegram/SourceFiles/audio.h | 56 ++- Telegram/SourceFiles/config.h | 2 +- Telegram/SourceFiles/dialogswidget.cpp | 9 +- Telegram/SourceFiles/dropdown.cpp | 18 +- Telegram/SourceFiles/dropdown.h | 3 + Telegram/SourceFiles/gui/style_core.h | 11 +- Telegram/SourceFiles/gui/text.cpp | 18 +- Telegram/SourceFiles/gui/twidget.h | 49 +- Telegram/SourceFiles/history.cpp | 147 ++++-- Telegram/SourceFiles/history.h | 4 + Telegram/SourceFiles/historywidget.cpp | 46 +- Telegram/SourceFiles/historywidget.h | 2 + Telegram/SourceFiles/localstorage.cpp | 11 +- Telegram/SourceFiles/mainwidget.cpp | 173 +++++-- Telegram/SourceFiles/mainwidget.h | 12 +- Telegram/SourceFiles/mediaview.cpp | 40 +- Telegram/SourceFiles/mediaview.h | 2 +- Telegram/SourceFiles/overviewwidget.cpp | 69 +-- Telegram/SourceFiles/overviewwidget.h | 6 +- Telegram/SourceFiles/playerwidget.cpp | 548 +++++++++++++++++++++++ Telegram/SourceFiles/playerwidget.h | 100 +++++ Telegram/SourceFiles/profilewidget.cpp | 24 +- Telegram/SourceFiles/profilewidget.h | 5 +- Telegram/SourceFiles/settings.cpp | 2 + Telegram/SourceFiles/settings.h | 2 + Telegram/SourceFiles/structs.cpp | 18 +- Telegram/SourceFiles/structs.h | 1 + Telegram/SourceFiles/types.h | 1 + Telegram/SourceFiles/window.cpp | 6 +- Telegram/SourceFiles/window.h | 2 +- Telegram/Telegram.vcxproj | 27 ++ Telegram/Telegram.vcxproj.filters | 15 + 37 files changed, 1484 insertions(+), 289 deletions(-) create mode 100644 Telegram/SourceFiles/playerwidget.cpp create mode 100644 Telegram/SourceFiles/playerwidget.h diff --git a/Telegram/Resources/lang.strings b/Telegram/Resources/lang.strings index 06ae05cea..9ac49a605 100644 --- a/Telegram/Resources/lang.strings +++ b/Telegram/Resources/lang.strings @@ -368,6 +368,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_files_header" = "Files overview"; "lng_profile_audios" = "{count:_not_used_|# voice message|# voice messages} »"; "lng_profile_audios_header" = "Voice messages overview"; +"lng_profile_audio_files_header" = "Playlist"; "lng_profile_show_all_types" = "Show all types"; "lng_profile_copy_phone" = "Copy phone number"; @@ -602,7 +603,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop was updated to version {version}\n\n{changes}\n\nFull version history is available here:\n{link}"; "lng_new_version_minor" = "— Bug fixes and other minor improvements"; -"lng_new_version_text" = "— Forward photos, media and stickers with drag-n-drop\n— Drag-n-drop text messages by timestamp to forward them\n— Larger stickers panel\n— IPv6 checkbox added to Connection Type in Settings"; +"lng_new_version_text" = "— Improved in-app media playback\n— Bug fixes and other minor improvements"; "lng_menu_insert_unicode" = "Insert Unicode control character"; diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index 197816c12..1afa28f89 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -1971,3 +1971,29 @@ botDescSkip: 8px; suppressAll: 0.2; suppressSong: 0.05; + +playerHeight: 44px; +playerBg: #e4e9ef; +playerFg: #54748f; +playerTimeFg: #a4afba; +playerLineHeight: 3px; +playerMoverSize: size(2px, 7px); +playerLineActive: #6389a8; +playerLineInactive: #bac7d4; +playerSkip: 8px; +playerNameStyle: textStyle(defaultTextStyle) { + lnkColor: #6389a8; + lnkDownColor: #6389a8; + lnkFlags: font(fsize semibold); + lnkOverFlags: font(fsize semibold); +} +playerPlay: sprite(377px, 109px, 19px, 22px); +playerPause: sprite(379px, 131px, 17px, 20px); +playerNext: sprite(374px, 151px, 22px, 14px); +playerPrev: sprite(374px, 165px, 22px, 14px); +playerClose: sprite(361px, 97px, 12px, 12px); +playerFull: sprite(365px, 109px, 12px, 12px); +playerVolume: sprite(352px, 179px, 44px, 12px); +playerInactiveOpacity: 0.8; +playerUnavailableOpacity: 0.3; +playerDuration: 200; diff --git a/Telegram/SourceFiles/art/sprite.png b/Telegram/SourceFiles/art/sprite.png index 3e973cd2a70328cdf7c79c04a7413a59dab7bdca..d52ac2e853b5c6e355fac7833731351345d46c03 100644 GIT binary patch delta 52052 zcma%iWmr^S^zIqDOIl!P5C$0<1Sx4zQW{|p6p#iffkStvfP{dEKf1fSq`L)0>F)R+ z|Ic$j-23T%In1+XIA`y**Iw&g?|RRAGhSI2UaTnEjA!|iZgfHs9wfgupWqWgu_s8; z1Og1P|7S!K<0 z|JN@Q9^;CV{9ljdMhYY}U=LJEh2+1KuWn~2wWcbDS_~Zp;MV|>i<5Lhp3i2TZ zg@hAOC)|}Wd)zDx{DPus`@V9CaKEc^fixR4Whmu^I?E(o39n_6g3)g zNIZs;nUW381{@CN1qK|mBY z8y66m#v(yOby4E@lQ77V)ZHGsJ)3Sf`M9be8%r-XHx`YI{;CBOmEEfVT?_pIur{>S zT`7QZM{3{~HN9^o;5rKuzCj^i52#IiE`P1y`WIjTaZ1|C@vNfJ=zw1FG|O4E&qn<7 z$KYkyK@~J5t|81atTs)cA1FG@>JMVP`N0PZ-7!#R^M#|&60Xt%y*+Z&6!x`U0|Bbl zg>UA7aM%V~A4aUD?ugvkIs%wHGf6R)e~&Rrm`%~9j##vrdV!hCjvuGwlCn(@YB9HO zBKbmh{=VquXpomFHW+|u_!$9iusV=H`f~=OOYSSL9jVG&4s-`LUwpueXw?GPeW2W# z4I4stAo9Hg27sZibK%A@S?p}uHY)&or}fQ)uf6pNK~kY|IgRYxR!wJZQF5Fw9+lrA zZs=Jg3d??~0IgLC!7yLRt|R?MRkAihAQ^C{Z2MNOO6>^v0IN>G;BJ~6SU^f_8h7iK z?rq58YkU@R{z!I}m6q7+>hHG{CDwSUMoWTRe+cSoV6wr}D@reXYP%5MZ~ZY=Amda@0BG*1M>+m)I{RndaC;31m{{b98&;z$<2^}U8I68Jt0P$1=`n^D3(;PiC@)E25^ zKQTqV0!nHtZLBd$Ol+GnzBSDaB@G5eLb_;*>BlUWVM=`M9{b#pu_xwr8L| zWtc2FZQ|L33q8!dla*(dY*D83*a z?twlh~L6aQr&t6Yh4OmtO2fDf|- z_T1$1pGnqDS{rv?RnED5lcs#B1iQg(yCh}B|Hf}=-+6f^teh*~nY|mZhweHa%4R0bZdJ%!yE?a6jDr0O^yC_=^Gpj(5C%7UiCBS9rr&6jaHA7M;>8x zu^S0RmB)7zw>H%|4WGexa47UKSa?CXI<&SJ(_?+P3Av!!+P{it!U};%e%K9uTPwSg(}yRxZ)Cxer9O+5XWEI%*@Q8p-TIX^~J=XG4^G-C8giM z0}=*-#M-Pvc77eLj6#}$DG4FkKDi1GE57Q*53%rwx1tS3Y?03%EdQgXezNzzTqAekW&+ z>s$8;>NvAjW!D<5Xs!G8gMy%QC(p{WetXsDm(=~;I|Ia(MHzaFh)0J5{ldY<>e&Vk zoX`qM>B_;ApG?dWVPA4nsU&yDKMPw)Zz7S3#+#i^p^-)C+S~`ZT!3Y@A9U)3A_;(d zKUng@tkQ@W_Aoa9W08b$EE#H#{6PXVWt}`lljKR1m#) z1vvP7f3van%D$zd>%)THMmL(7hvSlaLJ<0wNkKXgy{(bT=js4D)OtS~{>7L`czX>} zOq;t7H*<4NP3rap#27iQ+xo9i1=l~Dgtisuo&9zUV1q-2LSP<{GFKivHgKTv)hZK< zda0O(b?vYbX5r%__3-du#6kP;;lrDOs=rpI@Ig~vONuW{d6qyo z|7i=|BGGuZUcOJ&%zohGBs%pKp))gPv~c&i__%gUx0sZ!+H9gK}+-bT2=P`i+lknwy(vS5-~ckC>Hb z*VIs=qoXIBu?1Nt!(ZAmEv6}n_J=0-?jMQt1+r8Lt2pujY#pnO*;WP{eX{gsWoN=B z1grL6SR=P#U=!~_7qSna^XEBnRm`JpuRvH^TSEsFY4f#Kr!YvJ*uv?VQV_q-K(cqf z9bvVpKcn=7AiT$Z&f5N(`wMgAL!gP{1b1ZrL7QtM*Oe{nLo?y@km7CQfn*+SKvL(AQTv5ONFapiaB41lE2H z^6m#1q(njim9@=gdSTNVR(09**}(U zGxvojjAG5k7g;~^($_4VdH7sKr3Pr5t9(})6%mmT|1Oa4#6LGY;qi}WzLX^^qc|*GAt0A(NQq49IGbW1+6D|rGxT6_BKMp8k_I4 z6&8ac&e;-z$kuwOF4V_ehW!DVJJRXFqPe>O zda0YEpDN&jEZYJ$>spgqJZmQf(=R;7GF>IuLCq-Pv*7zS$}DA6Z%i;yUoOG1Zk!CQdL`@cwf1w z#O7pHzeg=d-5hiZ+GBfPtcCn7E4J5%t=5xB#B-P|m0djsc*^9fgjyR=r}Sl0Pl&M8 z7DnFJ3|f^Bdh;iXZ|92pn1Dw&ao>bn-FH&YS~I+&!L`|ms1dk_=fu90VHVB6_9xYR zdaficR`e%OFd2lxsJAVC(vAbsT7^XzBmA2f9|!~BurvaiSX!Nsq=1$?pUzD8pCpQ9uWyB?%Idi1E3RoRJ2 zhD2UsM8uKK&B4@k6`Uh{DD1M3^|9}2s1iG~E-hcqUc<~<4lFmAl_`{O-MV9IeJVQr zzjh!CGq0bsS$>qHqL`7xGAW;U)9>oN{Q3aX7lE;P!44dJJl`w+${B7_WvNlWB)H+p zG;UT-&BeuaN9bGd-+v7+5tNOJ%5gy1yOB)mU{vVwh!hAuL2Z+_7pw~U?wJZkzQ?G* z!MDRMGne4K`1>s@xjvyAa=OpCcrPaU$-*|4-eq|UXVb!$mX^Br%$X=7HXCC<%RWw# zy6Wf1!XRfw!7q3Lbz6=o`jRw-Y;#gpB53QYaoaq__1h$8@2{o^3kh)~ng>a*4_kZA zt4;7=MPTiql*IJ;`FZQTx0Qi`fsk^%8_d!||4axdhPF2;Ia%lSf4}3r9yDpW^-dMn zzj2x7{d_CWnjhcIf7$5P>VEslx}%F<9|IutA0c{)BzSW-H{w%s?vMX?wi#OLGuMc& zP#Qp9gHd^W;t2s7Q2&0WB!FADWYK#w19aP~HYlc4pti(?v;A^3J)ndPY}ghJk4 z-{UXVi1&4pWz$70csL}yXL!z%<#Y9yE>7vhBy;l|$`db48eMni7wlVaN1%Ct#tTzZ zLK&Nv-pp}-TA_^O^0MISxvbI8&P>4w6gq}H)v)O1XKclfQKtROlN9F)+~PPV%~UsJLH6exyR;tF##AnHb4P+UnUs4F ze>Kv3<v$F+=x-A#QD(OJl01!E=ufcQe!g*c8o~fdl4ze z*X>jcM$y`T-4S#YXew4pwYA3@Y z%zhgCP#thrqMqoCeuumY{p@=x=J(f!ajv+%OkYKEhO>S5x zSLh)^aQ$(nFQeX<)aQfeoy1a2Z7<0McGG)hDW5}O%QL1nqts5XnF!c(|Jm$}GBmH} z$C2uzAew_ly<4d+iB}H0K4vXgU`x3tZ2UqDwp_Mj!`+LjkDx!)yv--$B9Fow*vMNV zwzFDZD};43Tt^h@Z`pHXt;2r22Q|KHCux2^QFfE1E~eoEp*{7Fdpe-#L78h<*NbjS z#rwL+a(lXX0}52p#;$V~y)|}ADmpqkKSGvtW#U{tb6RLZLlaCB_u6Bo#JFjj7{KvA5NEvq zN!5x3k0qpXJU>CPednrj#6LJ^RV)kVpiWDJeZfyKdOgjH-gG64GCbt8{T5EGA7LQ} zUM}=+y3fFYgT(VY<|LJ@L?zb27wi+!}%vI2{&*SRhoOdY=4Q`xlj2aL^2E?K0kT;6t{+mz`gD z{j2ow5#YlV`D;B`3gxv`1X8X#!ZF>Aq$@3wE!?mc)QKe{w943=j%l2>(SMS_MP66X z|6x(C=!>D$#9%bH3KR3kDQZ1fzK+o5GDZofyFF22(I&F%ZQFa2-THCu8*w9O52X{n zY|NS$rse-l;80`GueP2d z^=G^&Hmv<&TxB^XE3O|YEa2C-e5L>fmcOL#?4@u5q=?St39vfhV$qcsG>hpkGoGC4 zF&+g62fq%=sv1TNy4o$&?1HC!@!dgXmx3?bDW3`%jECww(4EuBYt$Nnx2Fu=;WH*+ zb7W3|p=k6qLVIR%O9-qgD;l}$C{vyIdwcDDMx{HBgQ;Ifw6lla@Xhv1{8N>(vdaOv zH?i&LroV^NML@`vj&c3lpcQ$!L+QO2Dw!UUg%vb^JZETx2oR76y$$+`54^j%#NYj$ zSDsf+I=ArSiY2mVGatDyNFk>pyji z4Nlul?v7GW=iqHh>kXUj)PJww4s=wdn&0oJ|EqcGatF6|k2qDB?(p2<)xj6H6#Qg& zxBV1;vCB&|4i#=))GhuztA4cW2VFy{0^gwc&}szu8djM1|9!yma*k=vmssOUDk}4j$->BR{q;U4CB16&IQ~6c+I%+O znGTBBFaH~QPSRyoIOW+5;jR_Zftp*VvEUdN+9jjHsjDY%YEI^=dx#3Bj{FUlq~71w z6Jsu#(FCtKJ3AMfc%M%B*E?_O z1p6XP?YC>sYObqNR)ofs(J)NQj{bmrNMyML-UG`;Q6bp#N{hZkEo#BaStp$kTU!Nk zF3ZR_LKEVo{+O>}mb4#mP_N5&c6KNM5XY~;ZH>d_EbV>C-%3R_+uDSlM%Up^xGJos zT`=4=L`zuMe%VNI;zTeQwRL@Ul`N*?sYPBr)G~f;F_X0Xr3anr#$M@qkQMB1-MLNd znvEwt0zN@$wjPQAY>yjvD$pfHjHzMBrRM7H{Tn)_{fU#U6MYgvci~2z&OkZ$x=&UbKyQ#^)+aI?@1 zCx*#7T7$%Px&iG_<7C0UYo^ptdDcqS$9w@>nyP2`PkouB?=MCfZrdB`Mk_ofcD&gI zx%q|JzcEO1>P>TZCKg=rC8AWZ6Iz-s4UD&6Rmzw}NK+{L9AEzaQ<3iSw`kNrG_MCU zebrI5PWxg96KKnDTfXG?O?mo~w^?+W-C2K{lLH_74j(j3Trrqc)$&S|kVKQF^Bq1D z?tr5{2b6z2?9E`Eq$Fy_qGW|7a>>_yVI`G9ME82kRq%ll;`1)1IAmQHEfWN@bge=i zv0|Q0P?b^e+K17beKc`nFQB1tr+k`@xW@i|ubY@5?Cbe?@5hq!*=1ABC=BtwkS9@L z#5Vpsgy5YDFwg0+aR}7REd)#Bys@fsWA5cJGj(^_qA8Pz(fmrCLe=N!=tK8-Ab~}O zj&?n+-KM=pn1%mmcU;{RK1RnUcakdq@=l?tP+l|YVMchtjymTvfFYP?;`mZSnijV# zXjGDbH_mHWF!B#8E*g?gqJa<*Nf5FliYM|i3heE^bgUCKi8i__n%#C_vmE(`kVn5=FN=hChtf#B2CO*#;l$H`-3o*YSLeq~-Me2xR zIV$=D7% z9Xz8%V+u?W1lstr(}#acMabotG}u9T6uA^0Ah?I^P?>>5te;SKyLMb~*nAE3o__Dh zL7-^WADV#C3A|ktW&ZyXTH5u!N`MJ3^oT@hBO;ITMG)jJ4gVEjv{{D^4Et5A7N< z=X=bn{j;J&bm(PLKcgv-Nv_yLKklu{z-a zsS@f4*EhG!V!n=`CY0@gjRtu81;8{^PhhB#_uySnW?`&*pfK&8fH8tjiy!j%Df*)q z*$CxG_=vhG6y64%&1(Xf19=SzLsOnJuQfV!llviMV<3}Q+==fub)x(7jyuF+0vNd{ zjQ_kZ=J!;{>3X9Wi6GK)M{j1`J(KFS(@qY3+rB9`FVyYu0OCzS!}q9aH4-%M_P|?? ziu+*G2!BuP8kJa?_6%fr&vsa-5}LOHrMCi>7CG~xI5%|0yHFm{1ZLrpHxIRF4vbT9 z^$#6aNi{k+Nn5fGOd+cTLUUk?NVjXSniQb2r7 zTjksrr>Ggi)*J-LJKyH#qn^V$8c0I}7&%kkxBy$g4%z`>3oi?u;396WsYE8)3$j0> z0)|1`wY6o6q|P}T zJp9Fqt+2`I#z8paoy&#~nn<~gAIMRc%wu*U%k&VPRoKz%v1w^fWIK`R!+j$oRKc^H z-91t1ztQS2+suH=vZPpQj8QyOxUa}esmbQBwqWuJoYgmFhjwsKCi5ee4b$B@>+V0oT7da}yE1JuvjM59zUAL(xebrzCxv`p^KC=g%E?X3Ih4bEd|4g@XPLl!DVK zZ{0Nw-Stx|Y9cKy1%=>|?I+O`BuR1_1gp5fjOT2I?R^INYD?5Z5nEUp>h|hG6q8Md z3G8OF+l7MDY7x^AO%@GU+e3stj0t&Xae1gp!5}DUKmDbbKq<7qfi5`dm2p2B00CS! zucbFrYD+`PB`NX8Fg7qvZyACfcQz2XG=_k+E(A#JZ}ooBMD=8)4*z}}jM8RLuo^lN zwp(<;wTV+Bs&MZwL2b;o?$cejnpEt!QnqPadoYdJ?51Jb?^A)#Oi!bY`u(vThP)>! zqk8dQCdSTAq1v8SCTd(%S6)9zV8?_Zs6+hHAq-!|3mIC)uD?6s5bNl`gnSOICliWPuDvKw^@X#lJ5XLr)Q%Nk-{ z`t6ASGS64opAujY#>b=)yQnJs9oIC(4LUk<;;_OoU&}zyfsNLb?eW3aAv?o#zg~j0 z>=Wmg%S!RAU1ofwaJX7tem)r{CT2-~zOscAo^+>@>-MqLV}b2$&hUXePA)!4&VAuc|KQagl+&|o&DQz6Y|9$}N%g?7Iy~e0dBKjKv3wI48dOosyCg($OKCn3!lfUuE@)?+w<#zyQ+u zw`yWa3h_r?G_;T@YwrblanaYhx-%PssU(5j7ADe|j?}@91C@G+UI77tbR$>L(5Ol> zm3Y@o()T$ah*tM8vDUTr_U8G{k;IvZTZKbLsQZ{vb6l`m1r#aP-?EsAN;9Fo&Fd>G zPVXdc`O`iH7giLs)#Qq7VyX2hS>47gy%SIax> zd1y~Zq%i2f5vA7^8Q)~n%Nq~!dl?{i>Df~$;3NTLDk?Ka`EQ7N z%?+;wmtHwsCcm{2Taw!AI$U9=R}JNI)>cwl%n&q7MdZIo|9wowX;%;aO1>oMq&rMe z9FU>?_aTY4YeDwu4Dl1ne&$!C-U?8}pj?r9 zKV77m0`B|U3JDfMY!mye_=hcR{udLi&U{u&D>E~jiSLlquH~)-1OylHn+NtyQay$) zmg3L7UnniU$S5&i3j&c6|BMSLD6Ce==e%)}koNDKl%qv-UAVS|^VXiOb!b^H3Oo-h zR7oJ&vz{mDT-|nM;a|@kpu+^vnKTz1wkhJjS zcEpcIt;>h^rRP~!rV7doFSBg734#$u7ERYve!8+_C0$)zU>*d`qcCKQ6g9MS2203N zRdo#Y^)H2$8m;yrqWDhO??U-S09pwcDYk zIb(H_Wpj{zFW2E2t2jq5I>yKsQNNDJ6Zf5m%nqG3l14}SZ<|a6d`H=A=)y)u{&Tcx z^Cy2qW4mJ0w;VQQEpKd`Ax*gss8zPd9SK4gz+mIF&cD0zO^Hl%KAfwa<4)* z+iF>D;$+v(9G2pD#~#nR!iJMGULM65s*rlu3i%%RBA+P?qlM3p&y%!l<)3xkg%+WaG^#WJtm?H}oL|2_PN6f#ZP~OvCZd zcF%;9M0CIOpzHNW#5UB(BL~7-iZDQEQw;wq9xFMP3+B0R>6RoU@Wpnk?Jjsj3*(5) zx7;eDBPJ;$#ZDm!d0@b8x3nD7s`LGz*Ll3G3CYJgqw#QPcFHQ;{0pnSDJhe{7vFL# z$`TB+!M{E9d57I@y(_LH5aK(KqcrhyyRoevDO6Kz*sNWNiboiQwR2lRP=d$T4oDqSpaVku-SLdP=!gmtdWRYuuEuI>H;d)p z4Cd#HI%x)KwFjd>?)jDOhnE*W(^1A89J$i&-Ww zLeCKJIel>>isG)XV>8?VbZaDv;e0&3j(nBGWz}bHcC+s{TC_AfpA(>m2!B%J%X6=a zv~ECl$H=vAh)TwqAXe7@R@!D*=jz`>%gcCAu9G3M$sVHij4^`LLE;ca*$*;6!FV z_BI;L_dz?Ig#B_;S?L{ASIh_2DR9b62!<&G_Gt<)w0d6yoZJKY%&|d)(7uT`Ij-mP zq70kPb%A>UJU%dp=gHO}6e{U!h?k*`ui%S-d@H4|uuXQtM1+?$ZRV4!+VTTgB{cO= zWeFb_8-t!{c91^Jh3;oTLDTSV$BnUc)q7eCd9mjh6$hbNoizt%(-3yRd==2)b5neF z3^MrF3=#SxnyhG@pOW@S24?eX%?<++u~cer-i4563B?HWvBiuSx`d{vJTy zz|e9s1)Su)M|j|D6Q0ijuTR_MJuWOw~e36f7&%BlW^+S zCGA*cK2Rno%&9DJh#5mi^T3Cn@-Uuc38LKl*8ro=Xdtt-H26$GDPAOG0I8Ryo) zY6iY}0<|S3t$Ur84T|<+O;VAV9joq)Qkgv>y9ze;6YKs>t6tBuME;K1v&FrTYqG25 z@FLs6#R?8djj~$#51?u~{vkg2Rr4<|F6giKQX?@Q^=X~1_x4+L^@j=X^QCX$ST8!) zCICRD^58!!uR3U(*DqRrE|2U=LGIN*@o24}j!LJ)9lcGf{D5BxEp`ke^XV77c%-|H z?HJ3WCtI$K&xlt8#v~#RJ1ni=ee^FKo%^@!4O-`A`-ne63IR}$Rsw3v%)mfku!1WX z6+I#N6ua$nM@PrK$98dT2~7N-e!(f~_KO?_@|E(@=a&}py4 z2rsiTe}=`}OMgaJAt9k=NeC2WPwUKL-)|dPd-7r;32TD9t$|b5!RXSoWsT?5w}2~} z9s|CC!WY@V5krF6v69|!aIsBkT|0&d`wG#g8X4ZOw0D8CuAMF?eX^DtBRQ`+abio* zDG1ff)ljaT!v#hpjw36|$_{AK^6e7_f5D#~4+%Ku%1ng1R>VRqKTHDmUc>H;}Ed@)g5jwrOYvtv-eIcuG57g2YdHrGP z6&CNz?~qhbpyj@Gy>|{Qy1kDa9KkbOBJ3S8zo#+26Rx{CIfG1jS6m7I7F3)cz5FUz zo2xo74Y?dL{EUHWmp)+KF9(CPrkb`qcgdHc-brejlgQAJU`)GqfucAxZuBke3kQC= zUQ?=te$wkw6UPRYac>_E>Y#L z1v^RHy31G#2DoamKrCA9+&%o=O0wy_Ta$Ns(ij>Q7-lej=Un>Zk98G85^RAAg#=!s zA4KT=VPu7cTA}fNraO90-P?E~%5N%Trzz2{+BlsNn$zK?L@ zh=9%mz2J+Ha)V-VTz}3ytE(F5;OsP<&A&GRv4QAy19pK&1=|0qeAm9pyIz&jsc_$` z-(vwbGH9KgBA?#3w@bvU_SZ#wr zFqs~rXi;$xcliXkd5~*3ExDJi?8|D?5(%38PDSbkw}a`YeX6l?Z@6L=QI&iOfgl1{ z-A$rlin$trDnCD87{=*hJ;^HekzY#W z-&`T8)($$>7tFzoLijiTnr!zQ98!FB3BjEppDNqxgv8U0&jiu z|7Kf2Ky&@%??gdyvAh|W!;|1vV1X5nzUim;SB{RDoFn|eF@XV|d02$IXEXIPFg{-r6@Z7^d=yF{`~2xPX4t@5Aj~N^!2SH3bpoDT;FR4Df5Ut9Nv&w z3w0i3)AGSSl9MS}+1Yc7iV)d; zOIkS^Y55vDI#`f}larIPEj&L5Hue+9sSx{80gDgu>BE?PRmGwjUC)@GE0{Xk`8%(~ z{s;|mJ!j^7iHBxX^_Qx(T{L9elQ}|?1^*wNIP?1B?)I6(Je;4vxv9S1qd1~|izeCP z6>Ze-4}dxsm;|50j(W#YpIqL-CPztR25}}JWtd#6%MxYe;+HR9bfE@|Zrg9|GX=_w zg&NzBOY#fUg<(9V32{1w-DA0m|Fn*&0`G_h@1!-zA=%d0ymcYLHdn%?hs%c#?WSdz zu29KsZeiiah?8|~WPzn3zKt4`Cp*;_6JtJL{;zLY=8i0tKqK9$YYF^ zH%FOx=|ax1{cl6^|0S;VFvQ|8_{uJ?LdQLRB|(94!CwZdHKKp~_>r!uscFZe?DS~l zSedT(6m52HdHK#$Sy|bhb#KZPnO$2;MJ~_8!otGIQPXY;j2uId7yu%=e@=3G?LK^) zgO^iW+L5f~ErW1j4qj*a=KDzH5j9CRj_*djC2K?s;KlHGjazEhCB74c=I6Lx!_f4e zgVYbf9Ps=1@9U%EW5W`tXQsHbR<*r@e<~3lBtj_X9=|5<>gtN`DZCkDry38E--3c*5rAQn>kU0kf<^+KLPf&q)@rW95q!Ps!BU-5?2V3f1d7B~@u zvH=fG4IAJ(bqNZH1bIYB0DFg%p+RJnpBl;sU zGa3H4JW(eX;@V~A=EesUL~Cw$AL65cwqxKimP611UN0D!0`ro1P30WhQ~6x$aB%6? z|1Bv>>FfAApv_Y7^==rV1kyHD@6jp=nt!7pVG_q3$!%_?hcvxxY?zN8wU^Sc;&lA& zB6_=`hl^fD!ETQk%hEJ3_9795&rGd*LZiP}RjlZKr2#1BC9piOm62&zT$iCN*N#XU=d>EC6Fz767VhYXdCwSy@>bSyB=oMeLs9RDKdEptJ7KjAR(30q&i9R8<>(c$&q>hqsGLYx8r|d++Cj@Uh zA;&Iigc6I02mUt-NgCMh?k>d1LYStnKdgw#m&h*?Y)}4n>#;U<)pZKA5P_SRk&)^n z;yT%y-}fLLp}}Lyh^$K}d;0VrdsQm28V~`{)Es;*^dUtzw8p$|-#!w2AS92&DLf6P z+PSAv>J+fUIM{bE+34E3DbqcD3~8;eh1@ftj!pDR?B+3Tt|J##z`wu%l_MS{n%}*G z^Z&xpIL)bl*L9m+f}LAag;JD~sr{HUE(|4%%4FZae}}F?K|!#D$TygEg+t|mQ%}sv zN|Y~oDE zMH`sW!9kMlzM0`hSA*Hk{>#66W`!gD=|=;n&)RXyV{-g5N1EXz^&8Qv%4w_u83J0F zGXWv<78hgX65lNJPYikTWtt5NJx_VJ17GDm=6v)>#>|WvQkRX+&p-JuZMnpplql7O zdVdAO(0ud>Frw;zZi{xHHLEg@M?z9rcex3+>Y7uMZ)jGr#xVc&if7j3B+*=XS6__7 z9x6%_>O5!m(1sH*<0D(AxLAsS`>xeXMz3G#C)qG-ZH+P@*soR$X4 zkeVO48>g`M396gZa(V`DjZ7+M?5!0^iM%u+nd7f}WQjd_y z$;sG$+z*L~Qj7SjBLMk>jb<0XousCk6BR(hCgkJrDbKFqZ$9pQ_Wted@!V0~23{KF za1Ji>W7-8v)F-Uzp;z8#SG`cR0SEPRzT1NL*DH!2mi^iTc>qdYmFc(FVkHmST4orG zoOysI=tUOEU&|k6jH6{Tp&4ACw&$`DV(ZrpeCfTUX$4lF&Ti?hP<5`Pk+vlO4Au8M z($cD{SB)UtM55S*NO^*S*}pIJ>@3{M6VFoha&4rf^@i)L!62et`}E`)c&`PI7+L1a zhP&@%bORMc1ne%JEQI3v=IxYLVei7%Z-3-udhGZt&J?gf3>u&Pvc#sT6zz-72l^0W zrjV!L28Z4yQ4JcFp?hA|@z#tRb|CJDz~~w>J-z18g1he(bAS7RXjEe+GbYD3U&Bjd zl`|vNC(Yt){kyig-0BA2KCmB#G4uOG(YVI{af%HluJ~h+STub0O~00P81R? zAx*k0`_M>zR^Oo_*wcv8!CaB>6-RF0dvtZ1naDr~eHfpgIKzD6;cEVQ$*?MKovv&c zw^gim(aHmP((e_bhs1EtyW6b$t^Qgrl=D}`Vx6^71R4{eTLnlxSgrVswxtiPtu8%J z;tP>*$e}&z`4`8hzRz<^&rJP`r_Zo~AQ?LRO2|f5GSC(`1=uP zPRbLw=1bc4_8Ke&+N=R8m>!X|;7i+4^jVncLz@;#rk4^OqW95KyopL|GjXhsv)!2= z2qtw_*gP0HUXtjw6?sT#4_?P8S_g7iC|Z2|(+_ z^D&9*!~Hw(cK4}moK4KLT%4}N4Heq67fdV>rb;X%6``PThl4!6FUL+R0!RXWpd$zG z@TbsiF&)U-aDhgE4u<56d=l3?zHncw{a9CmG>gP-N+|*36-G8rn^~OR%|Z9MotN=U z;oa`?`F$x1$sAPQGTm6g%cXR}P0G49#4RAFuI*lXYVYs)x$ecE4jcZurRow)pg}z?YxSWzGys z-8VDaThIM63rA3R5;K13O5#q=(5i81H#D(Z1d)=M1^#1PMr&J@W%frjPbnbT6FY_* zHL9-XT9J<$s6JZ}>Dc5eFFX1M)`uq#+&wtiiO=D;DnChoReNuBNmY8g-_n27H2w6h zC$i4{FY!%jSEl(qmdwDPe{ScsmoaX zwk(?LF7{R+#Iv`!C2xA($Z%9dxPCiVyWju%+1%nN#?n6#*F^WA%xUpZ5d>SV9t1Mp z2pebxv}JlBNkqxWu_TxtG{pK^`l@oZ46pEo9r7C?K`fo2^yv5|7Xauz6g3d}OvM?V zlNi1+1qi>)d*`x}TbkVWlcLbdp9J^mTNjeJjn5&OpyFN1Ox6vc7_HaKyv-qX*;{{`ayL4&tipDaUybGfm#;C}DslWqQqK4U&aN?VzC>FTW#2*i>F4{9CY31gF{@Zr z8ksWUcvj{S-ew}zdQOnVC#hx>spy8?r*G9JWaia6f?_s7O!0 zrPZld^_8BWH(*V1z68QAR8z!4>OEN)pLOrIf~UR$2hdf_P2!LN9u>vvk<)d$a+%tH z(SGUdc(-U3nxN8@S$k|*Tq~wCCghrs}+o}A53{^ntN>pd? z4~|TCW^r-x#%IMkDa+0yPf>$L`Ztq)R@zQxOX~LTU*4lr^_tyra_G;#nrJB49TjAA zU2?eltXX7Ww06uIk<`Aop2_iC;$kE0;H$m+SuuqsXwale{j)RMio|?=axn+Ka&x@W zO8NYQ2qoM5fV5u>+H4Kct5#*dx*OM`IhL=F3m@vV!Y8{P&%>hw5C9`Im(J6B=;fsk z|K!nC4)K@(>(@=UK$Q}OT$-uU)>bIy7nWX>l$1#SU3j3c8ZkaIJu2v{X6pQjAlOFcUSN3K9opPqSy)JRfl*pJdV3-Z=Tr2FI^#k{Uu0{ zY_bSlBG@rdbGauf# zg6_izmJ8DVWM4fK-}64=k+@zKCa^jMS$@pqPqFN2e%l&yu%weWo{^^!X5#Q`8Uj%|~oquGPJfc^A*{-Bq7asQNN`dq>FWw{9 z4y^Vmn8l)J84A&7dEsEOHdjIsS@4k~D`EJM$DbM#lNipINel|1uth@CeR{Q~^JD1o zYGhi0YY_-K9BivDH2u(S2>3xZ@HxFI8C!xRlr^QdABvYc=@wTQ3b8vY7-B5+lj+Ba zn&=};_Lf>fK7p5+4)mZrNk`7SBi4)Y35La!W#ZiCjEMMZIbGGIjGm!C z*DN5u{WkY&NXm~gKhA~Ua%R`O@VGM7>+fi8Ha0f)di5$vmkcKmK_0$OKWO(|25p+Z zC!Us-x&lW~C=}h#yzuLzfl9G(6i-w8s)(U2BgJ_zY3ggKdx-dxK=U#Qi$Q&2sa^Km zzEM9-z!tvU_6k#S@>Q9_myNKM^tB}7)&molpmF}sGmpPN>X@BWto=u}wAI^N~tkSq6$7?!Pq|CKIx ziH}X!Kw$U5Br8HL;zL-0fO36$@@x0CAYZH}Zo3_?qNN1ytTme7&mxjO>*+!Pr)=(S zDWU@ET}yVoEwC!VKiSzJE$i6`b@JS*u~6?(?tuis7r(z^OO0<=AL|Ft(T?I09M_Z> zK0RMZ0V}zU_J@-YvY$W2s%U_DMo;wzzW0!Ik?S|yrHX96IO;V84p@CJp;r)Y&9qbV zfO{VTx2cf_`WTg03y%0}M{nwCb#uoe8AG7=Yf;EK_Yl$FsVWXiH?(^ z7gk=5K$qEIOLKQ{ zCwX%h+>M$+NPue#x^PLHRnxqyH=_MN&#p6H=39AwM7m z4!-G%6y0@sD{A+6u6*2YKD`^#`obEa^y%A99$$wM#ZOC4wcn3g9b$vgoE+aOWn^M~)I;k41?KZ}asMW1R4VW+IAA=JExez;4jmG}X*WlW2pbUZ6{RLyhGoK|)<; zGQbQf@4bwT=^Cp5)U1aP<~IRsG)==q03EM7q0Ey1P4-k}d)1 z^3c*L-3`*IqzFidw1AY9AdP~6!28_q??3O&yqW8aFx+#`Irnq+XYIAuUVFx`t*)`! zNo+YeJ0+9b$K<}H`0!noGWyx|>-IS-OJ@08c5Qqn)o~TW^l^9=>7u&WljuXaYALYt zbT^#j%zbnW)&)M#EJnr%)`hZh25#M}vnqG_3sYZOY?$1~;l8I1)N1n(x~{Hnv<0hK zdHZsv8aT-K5h5d6@>T}{u#QN=G`h1PK|qCP8k z{jQ5)Um5*6M{@O!E9?Un^sb0sJ=uD<{#lRlHAq-+JtX{*I8nOSE>0m?A>~=}hlEt6cWY{DMKT5*P1gH|ReU}LLb?>*9AVTyI6qyWVmcn*S|r{| zgi;TBovjhK#7Mw2k$ic!AH73H%Z#&bw4ETOeZgSD^$7xhYadE{wTy|5?%q_@PGaT# zZI)lXjDf+nee#^{?wGawDLXN49}JjkbRnmup$?hgiXm_f<1jpz$ zJ7K|HaoeHM%gXlIjOE+b)_U_F;#4DFCTB{ZwzXndC1iGNp+9gU`=nklyQSTkbUnQe zf9riFjjteN;GTGK=sDBUziOv#ygz?Vjd%*F!ZHxFV7-#Z-P=(sJfyG!Bwr#ax%pT5 zd(}r%uEY)>QzAr@<@o4n&-#>1pEKgKaEBxlb5VR~B_Wh%Tz|-b(#7t+K7@;xw2B&k zLu158&6B&hTd#lh(JAv80nuwB#>P~PPcXNV0xQBxt8rLJ=PVT2WZ+pzkGMiF;g>#Yv4ud1P<8QX<6oxXTO7DNe$(V=F z<`0Fj2E};%SO``TebQK%PdVd!7$7v<6~-ELIy^`|N zf-RTc@q2%mL#Z*#HL76^Tzb4EdF((6PmSiC_vOEHK}UoUalRmiPB*0UIv4PJM4>-nZUj*isRRp_letlc&fV8N?cwB@XN4zF;q9<9$t^NT*T6qBN<<3p|aa8Fq zykxnxKe%G)LPR9VjIa=HWHn;n*vJ@x8EUk53bLZ4D*@GvCREc0zn5L!I^rlE++0@) z&oa&mvfvHUNA%Nsoo+zVd9t%^nH9xoWv4$jylLWR?B7iKh_$fL&FnIxUK$GIS`$YW zDBbx!R1MaC-fqJXpx5y~$h=WRqs>6>!{dHs-Dp2uEMj<}$DfQcbwPD=uKP`0k4oX9 zSwmT~fRw{!pK9h{x#QM}QAM)O)lstR*4{MyAclndw00Tm1y#x5;jfj?L#BBV% zSNE8P1rcvuNH^W%DUhWJ<#hvkM7=Lp>>b98TJm~mycR{xsn$sM0}7R8Jg*+QGbspM z_|a&i2p!PEdD>62*rY$6c&=PFo_-v>57Op;qF;4Jw%if$T$HZbrcz*e4fg|;|D7fm z^lxbDiZUR>GPD|M<*A&(`uFQ1=mEnfKB1AClat4K{%^7A3SOTh)6@Jg4%1FPfvBe( z+a543^h77;kGEG`<+{|R(+hQZijF?3@7_#eWtR_$LkT7&M|UfVo%fr}{+=7YvZl5= zKPLV7Vz{t=2G(l)S;#=WuhRL2HGM9|qVf*cLX+8MZBy+EYV;o;icHZ%#8Dm2k z_7s+Rvf~qSM_dgqLgYfvR>7*16kJ2+O(Y^l(eZ)4z_YeLl#66>R+NR} z^+_MR9;(7@V+9J|`zbm-Z@a>+EODF{QKoi2@vE_YujNGjSf$^M!-8O}{qZVh$*VuTCXwVg;X?p} z5Zy3?$Bq6rR12(oA^AS;eK;3$MS;~Cka=7c%{%5nSIJ397Wrr=R^>m$_@*upx^Zit zoj+EJSJ=7;LJnOQyL#o{(vu?*@7=r3^T)+hzb@=X^5J%sN%DD+^h?{gv z9ou;8R(5n)*~946@yx1s^PKGy58g4-D~}Y{D09I(hBc8YDJGrhl3ouzKIz7yPO^&d zB1S|GM|vs48hiQ7`?5NSh$1CQKILLh4I(r6t4zt1HZWr2@c9LkBvaYfdWCdiu8c8p zNxt~C$~vdRgP8Ln5|@)(4VWmxzws$|HM}8=a2hEop7m$p5 zjTHRk5L%*Alx}SivP<|7#5C2CPvAe7*)UTl{f`r-KD-AHXn5SwJf#9Ye?=MPtA@LdMlVi! z{*0DMUf4c6fBW0o=6H3n?(a3k5X-jP>Bvrv_TwfElXF~6o5)v0vv$7fWiNSz{W!^P zBr*(wopJ;}DG@ht^Tz}SonBa7=;0%7YgUxc=Z$}j}VTRWI|Xe5nPFFnuz8tT&5<<#gwrQ6n}8h_-8U~VmK z9E_u*yyR4>BO>T9Nz?|aUJ3-t09fxqlp`@pEdEhg-d9quLL~xaca?2MyD-|S%$uKT zjE_4yJBt>7Nox}lVmtx@1nHFNi6Mnp^tYsm#a5MM^wQK!!ep4SdopUVRtMKP6SjK# z`bD6Cjw}s|rAW||Cr|LAY4?0={qo}@>=sw+b)0@Hw9;x2c~#H6)jQ~kY&%}dBo0w- z$oxx9D?=-XpByg=Bq8#|kf+H!zs3(RrZhuz5#;p8FdoqZgwh)q1Qg zEiD#1qiIoziR1pP`J2Q8XeZuRIJw${JCliR-U2?@26PI&7d-OBVv#we_e8yo$$ZL3 zb&|nBb~qthe&byEVPktQ;>K*v!%3EAxxt4$W$ICo)zqDn{8OTs_~Y-{)`k!c(BT`k zIg?CEK0twLS-g)}(=gWG+;W&aFX0Q>IqpE}AMVrtwc@j@HU9e_coz;GreW;~cq{(g zwVzduSbww2o%V;AY)j&M3-#IP%q)M8sI;pfdB`$`vHJ-u?HAt5<#T4t zNlgs{0;9vVZZcF{O1amsUk})J}_<-d}-h&(rcX$-uhS>a9*KVpy1^t02Ws|yYY`?EU?71 zjg8T(=VO4~R%Hinq}4`sd00f_z<}atQ_a+Eg9+W=(G(5R6csSJqgv4<)R`{m{F0I283j z11tT7@YTx!)vd43zJ<_qlV(NlD;buGB<5us$I+=Xef_!;*Oa@j6cbAceFrKWw|{@# znF%p!j2aPNx03_&kgxXqO6uzJug|X>&M+}CwRLsF+S;ChW(%nzEvepZsXtH_k-E2r z##~FqOB3nO5f>Gv`K4-V%{hVJZWi*FfgMg+NAet=SUump-d+{@rdc2`!ul z{U%pVQc_onoGg92Kq$TwKt=|Uxr1`KQkhP!&zc_)77F>EQhOhM3!zg?*Z{re1N*b< zcCQ)H5LLHtw;8cK6aHn-Lrd}_*O>H6I0O5YUwy}pUX)H1NB={v0I^z0HUn-Y z|7wuz0cW+BZ%W^Eaar{VvR&)^ppwqu5I`FA^0&9U#2Qa*)cwCebu54BFh!!Q`s*$E zuRd5B9+?df=+tBf(WLx%_s!>$Tf=98PL$=b?hK}TQ!UC{vcw{04l0#)^&GeGQeJ0I zWGYWj&yBA|vKmcV%!ESjKafdDNt5#P6S}&@KriLiT$L`c(vkjl=4GysvD{!1cC2>K$ysR^><^sd`;uSjexPjnGS63X#n7zvI9lBjX-&lIZrS8lbyjvi$kSKkCbm%Gdsw#1+O&u@XtiT*Lw#k{n~R-txI( z;!GSojZkYd1cSXN6Rk#~!HS)C^z&J{hgv*;Cl1TbOBOC%;#Ri4)yNYUt*@#4Im6Iw zpgK?-eBt;98>jV|&!q@zy>$e8R=EQ~un?Q6aY~xR2jt$)X$8`bS6=HzHe#2f719M4 z8+nEam#-y}P6NKB;MC#%{??FH>MwBjw|rOhR18W?+ZjvF$&F8S5fEAqL>xI&hTjoz z{p3SMW$Ol$hKx;RR{M)Mg^H_hzi&GasM3jk#lgXO`EY-?;YSIq4>;ig0TASXa{@BH zm%twch_OJ7HNAW%NDzH=OH4}I*V_vNe?^lqMq`oUKx`3ETtvYdKVpTPs0Y!eXFRca zdT~jRqo^q;2=<;&ZGV?{Cxh~b`zREhva{O)gH8+l!+17e!MfOalcDO!$|=J8$`Qvy z?73#I&G@_R()ZZw#XTM})pSZ|VzpmVI+Hj&I5Nc+CSb=#ZW^gta+A49FZnTRa7lS7 za(FKuDdx&0=r?nEMvlEP`~*>{2h}pGut{apKC!JP>2$mb*%DTp%EnMeHlz?;&>@aj zU^i(&Yj1BC3b3K)zY{ER$bN+p4@mkaX;E*2iH-pB^EOhEsN-9xPK9ZaQ!ZdFQr{DEY;k&D+$WjIK zL`Ww{>!K0zb~2theM`YiIQW+2L`+&jWUhY{yyo0HGvmQ69>AJ?W77ERx0#Z>&I^%W zi1ec_z~PfDu^8&;CR$R?GSY4%B%j)>))k#DIhOZZi;JqeT-f*g*6G6)r$EQb#-{z^ zMcn13H@S!>8n9ec&EWLP&I1)5x64DgB*|*CF9NKFfXhQ^2$C$<$RjZbKpF#U@7+mlnooCl-q6m4d88trGdnxjZ38pEW%x6(>Wmr$< zrHFnhvN;qBy!j{@-%DC5`|4_>SpbPOeqEkt$mzLvdrGgcjr^1RrY(~riHx7x3|TmG zf(E_mewVliNfA?4vKqtz2e=kW^?fN-nA~jjShYw;-waxjUYdlD?Y;<)8}M9->)J=g z5u}6^b#e(ZCOcp{$;hIPmxUlM=<>z5AJ0YL2lWjlP=uM(4t{U<;Bi^z2YOD+leKQV zXgQ&We;3Kwj+jWGt~OYuTT!UR+~B#dqeM>tJcM8%L@+Zm_kwrPtvzQBZJ7#pUMJpX zGBj-2?JZ^=eM9v^>L~7a&|%Pn1Kk*OewR%3)z_>-(07ja$2PCub<6i_hta=6y#{n8 zb!AQkT<*dSBMzUABHFt@)YLE3yC6;{$`FUDCarRvM6K+r>=?3L%spqbSm5}@#cguc2V zN56i=nbS<5lS~NqtdhE4Sm!Ao4KH{7@HM53baX;N*Ckxq92OS#tvf)_H{VC38=u{G(ACx4PO$F4%y$duczs?mepytLJq)TV|V%mLWY(E$c;6xZ;FN5 z_4eI^+l-1GwXL7KDtZv6d~y87JAO}YcHq&uf%A=b@kadFc6f3@3KaY3i^p{J{t$qP zDE&O}*cajOOxN0U(fClT8x_RCjENq!=q6-xd!Zj#&8EhU*^oQI$=6nlEd*wwz)U zAG$!*z|%OYvw|uEzO_#WxA3oQx7AM(z0)x^-v1*(zHI91deY!A^q6sy@QL#DIQxlL z(vxVpVvvX;`B;;!F?l(wPY1AeOjB3@#VR=HXA;-X@^ ze5zSdF`k~->G$@2(|O<&sCyH~$6iLcp<%~P)(IRm{DHQ;e@>v}8g>wW*>7_@OuzSr zUp80?8B@m502kssBma_I{uqFk&j8kh>k*2las2TY@3}n|t)QY4T-?>&KRg@&j$qWu zN)66Syl^G=`}Y{YAr&~$yv{B!MmJV@?zuO;n+gM2f>;f^`7`#kb~W}d3{Rd?16%=t zgd)6~*H%NvcJBLItFQG{jn@jz&CQM0BPo{4Vf{nz^7D_!nXzC%r@6JZc6Y0hZ{sKN z!_Si4cHK5tsGWW1-;(a$ENwPoFx~t_e8ptT;bmpx48Qwz`xC>YODiO4+tFcrCfH9h z9UqsaH`bk7>q{gfqZfM`-TWGy7o?DZy-jANF&_HDGC|pHr4Ir-;;9(?3EI?$?ZKf! zap`5QFf32`tw#lijNh>*OzPHxsptJN0;L#dol(O0fM>2_{g+L~9I7pXPAa-=x8Fat ziLp?|a|Cg9D>NQ)2dWRIFsOol{1`sF$qfL9l+@JXRGMJHei6-X<(&|M>3d4@S7Hg* zUp%-4JTS^_HKadz5ldAb zY<7fgl$DU95K{i0FmzkE$3Fb-FI@ zV|Vy`68W3ZACd>K{0pzOt})%zcUe~L8SX)K{=4kOPsJN-vhUE^B-lMd-ImKRoQ$nbw8e` zjlN?40I!7^vXhYLR0|SgQ=N!h8axD>j6Ft9&P%T8@?Yv2n@QQK2>)R=h=esoQt;*{ zM2dI!4Phhj+iUs#!Pm~i0$6F%NC{hzR*JSY)Q;6tEeh*i3f|$H{POO%3@Gv-XN-6B zws(jwqX7l&_TCC(BxoA`IbFg{8gKN`jRtrXfpSzd2)YSq&G82CylvDkV1_CmkM_IY zg=aA{+6^ye51`-65EQgsknm(R8YAoQhrG>Gn^NYA8GiNf1G7Ht{7nrc9$ldk*z?N6 z3K%6)!)yMb$Xsr;+h4XvPgvy%<2_VZi=NqQrR&Blgm?$)w^D#DUcZ?uhV|{i>21Sm z6kT{~xx;wAI2ma?if*}@w4veC%flt4WTkKb;<#vWp!w;P!2^%F!4Itg(;%CC<;B%8 z-(PK!Zkx98Z(o(V_-AEz;`q4Q3*e6@NIS>FVs> z3b&H#&HbH0HZ7ekF#bbozKxaRPs>O%0aeJ7*0!={E3H~VJh3V0bSK2c^g@p!maV)d zCNUMl)h$U)i+N|07E_&}KN+my`qj85PT08WbolFC*m44HkHo38&nFdZ7_xc_+uqcR z%#19N{+!eRWJ_*mz3p{Dl0O1b;^dFqc%1hoC=rq<#~W!LQgnW#(iF=Ht!gI%5=4rC z{&h-IQtG=1i6dBB-twdLt%jzTesd|0EHFo)QU_9OY;0yuP88)7B~495e}55R9M|A; zVpie6YB1b~kYyC3YHJEhx0#}9B%&A@kGW^3D8zBA*{b$7p9@tPX&W0fe0Oer#g~(%5jJg&61=MT3v#?P z5STL+f(CPAQgX|p(a%(_JdUh+`#8tAvCLQI8tuj=twc?qu5#pvmIRt;UlvP^Ai~&* zoCef&u!gD%t|utsqfEQ31tnLhf`4p?fn6P+DcQ==md8=#prQLlbet{wQI%2*r#@~^ z^(t!fd|WJ>frW~{r6=xtUJ?vU2-6)vSU7C6v9SR%eb52WzuEs5xNp0G9xz%iE-u>u zEP0*DRvuXK%s)ajr4-M)cmzD{i&VkD%TcC^x}Mt(RhG~=r37M5v{`g{Z8;s87rW{B0)L*H*v;8aceOEk&CV4% z%u_ssBwoWMf>N1%jtnits^y#mo8?nli=?O;x*I2GurZ&{l z1KkEkBve_cn@n()P^F7`Ci=}70Si{z2+uKL*XV!eSqp1p}7|pR2 z@LADb?fF0%ETa(V4`EFU#ZjBN_ z;&|KYG#lak=ErEt_{i$o*13ALlj?@$?}%*GN7R&aQ;4ZDh}44O?2*PUzDq$X$3_nI ztG~BHhzSA-!VD*LGq2F`xZnIdI$p`kOEuN;_Z;@103e5#{dsM5WIxNMFO`_0^rf~O?F2i! z;njipLVUmzdCh^-U zufk`?kB35tBCQht{lUHRd~0%il-S)bDr0aoaC&QD({;H)T0eky9{u)o9|Mp3{_mnk zqCN3o$8%qT&$5j8BS3KFJNfs>2lay@u;#;;{irNMjRl(KVTtv()A^Omo1|7zsnJ6M z3@szhOC2X+c6}x-EJlxYKSI%;$-0&WG^;-CShed;=;bQHf(@$U_ivSyl&E2aCKq|9 z62(7*!ZAJt{@eK%{%H2)CG4lQIcVW$^Y^JIN5UrNqLhnG+-m(+pI%(p zQV-p*U=k2&BNwa7A(keRog{2Z%pdKzZc2pTqRj_|BTq@V8CIuRUPeIOn|G|O^&+c{ zh+&_t$+?;=d?&wsT{@30oDIS?*Vb`GG@>fG`cwXYl{T43riInt6S7m?8BdRY?{y~T z-a9+&#Eq@~(ggxC^6FdXt~$Fp#}DD1WBbiHynOe`-8;tN24PR!Tt_jF4ZW>$OrnY0wAAwPJ>djB#zDIjWa(1o zC)#J6H3n=YGbA^}Z1sydagIQzw2;Fd*?c5ktM1Yrv^9^DI^VIEwf^0m2r)9`bS5N% ziB76lXv;9MhlfK#`;BgCoo0-^qobLL2#k5#-F*}}hp`xn0!%{2HRXaNgX%KWsNicx z#TC1qRH;((tUINrMT*>uvs=!-C#qy|Y>F=kpSJ()JLKO@d3SdQ+Sx%jSc6F|AQ1pd z2EJoR3Sf26OB>o@BxK!DTvCE$dO1D{dM$@1Cy9E3@vPk3@BpEZq*4Z)yl?}qb*uDL z)ZXK!P!FRP1h}?l(yB(RJ)5-td}ff=aT5RO{xbiWbTwKM_qZ(|=tANa`e`nzrlFw# zI;-gk)-k#IX=Z`RIYw)1e;AYPcxK1|B)5Jq9%*U8n}tV3~^gjTe9wPex%RWGdb5J!f5c_|J0l|fm9TSy44)g&H}D>7Aj{uINq9JBgXAk{=3Yog5R0caJdLkpQP zgoT9xX-=20e{diJpdH)~=*k~3mw<=}3hEDXC5^95SK%(52A!?(3SnTH!LaqF>Br@j zmDoXr=hv30BT)GG_;@hC@LQChytfp(qQCvc4-TBy;r-D=rRo~ir*Cne11sZOvxR?S z3o&T4vc9yNZ>OE_6Qzix?TKY&Wq~;&>eL0i$N=tfpuT2{Nv*wu1Dpm!3+)B=iJ%vs z|1i^S*i-xxBxf45=cqBo+;)?>_=}Q$=k!<*3X)RFZ&lLx`1qekM}IzQ7HJjMu%9BA z*4Ebk1eYtX4WOBViV6l8X#^UM0g(y}u0S~`aw^n_2rLY+kiaTJi?WByukEuHZxvbNNLnn3&X+M(9+j`lx~v@Sbnf_ zgC7Z@XvY+5X=@`?=^f;bM4FVdf&BEp!45e}^fKVwVTGSQQDO0QrC2E|kDzgEd~3Ag z&T$dg2}+KH6iTGk)#DeRjR9k_Yyq~7fJ5+As;b6btb>w=NZ#bqZd@D|;S=l+O1a_z zMBo|fM|lVjN8aP& zj5A5}bKzN@85+zJ(OTzM}LcSx(%@34F(j1@BA|I zx6zJ#VbiDJhe@cSv=oaDP~Ku{IUs?!65<05+?2LCK1pDD%GZW1 zV6c@{IXgQG=C;Is;Z@T;m1E3bCVl$!ZBr9({Urn?Y!!lpA2ga@US1Xs_whtMefrc2 zKPiP>Uu4kx0OuQ2rH=U4U z(#Q=qIT9Zi<>Z{K2s5tID=scZ1nv)S1ajaR3V@-Y3U;I&}PGrxqQqzOX1k+Pn-;zKyhagf!{*I zT~JUE<&IF@Ry03oSns_6al3la131PZ%@h+yg69sK6e1(L!zp%bU9LwTpFRfe7A2LH z!%o~GO7x`q`~>~n_Rh}a&!WIQ0w5OXuZj?O_N=(9>`TeuXZKvi*?d7PZ0twmz1+s1 zsU)0(4xc(na2s>nhF9=lOoVQ|jl8*eIQ!>%VjqKNtcKdaglNlbzFQ@J>HP?KnP=F) z=_DW&2m`lrJtj$>AqnP8Op?6s96vmC21GjzILX4JI$rTCukWZI;XJDHVCw8jhVh8I znXD`l2!?vBUqEz)HwQa80r^ATqz$m%Y&447-nOQvM>aS}DtCZ;>RDL80B`+9of{;% zAPiEe=t9<_o7P?N}Pu5k^8x&xf*^Q9)?f<4MGnF?*|oRP>`*hcQj%rs?=iz zE&1&)65`_G@JUU%kvBN_O?uJPvye`A>M4Utl;0NK8Y_$qOzC9zIs&j2geb8U7W3jRs_k%G_5CkuFNgF#al_84a^tNP_k%~` zeyFOeKbpGud3>zk;J~7k0t&_z;C6sg8&A;9Z|$5Ta^&o^v{>9;ZcWR(1N8BPBaCv)h_1up0%_>!k6vI{s?)UilsfeppzC zgSDJ&T~C*f&EE$<8d%!YEVw*_zF^}!^mhopuY;XZ0uQ%O?Ux0=&eUNNh^JTJvgS~I zv&e?N4iLiDYXV9f|CB#xyZ@ES%^ZW+&uwA6u-Cf{xyFZBY57oWui9i!*zO&!Qs8j( zc?AV`s`==u8XJ>{h>Cu8CkLiymWbM{X}}E&_&$h=u5hs+N|~6D0_f1o9hb@uTj{_B zlD6NyztBMphQ|zPUyO)8KNn!i3SP}ihZo(x7+@Wpw2 zFMav|8uV5mtI}fy7)+*m9$4G58#VO)>ITQDAWYfOW^MfviS6m>fh@BPxbc<1Z-J@1JQ#E~IyN@F zun-AG$l3Fg>KPh}dU&E|%j;!T_VnycLA9znrFX%_QF9~rYDW2cHCW9j(SilbBjE9m zr#AkMxS{{I()j?DJ~#))ZhWOMKMEE>xag_~_Qt%ItDdpos>x>KC1$M_bK&AIupx0X zLVa#R4irc&Oj&^7hXW@M4?ch%Ks5pQYveWiURj46^HPKrFFAXQv~F!}@qpYO)EHaWXw(k*12#H(QLUolKLz#GN7QK5c1d^uT(Cns6YjK zDOf^)myeJsk^;b_#RTF2ZXb6k5l%hqUN2X*N z7%;ezqo&({XUnqHWcu5;D0r+aEky>~iM^}q+i80_FsO}yfZ!kJ8d*FFtvyG{P%Q5H zssi4CDp`KeufS|Vjv{3lev*Q)v>lNar0xQ7c;=c2Jpg;}=(b*4)XtZ2uQ3pu&94;n zcZBRo3zk-nuF1TF0#H#=6)DR4nrirvfzaT|nzgNsO;Jq^78vpaylMbf8@}WW2Z+En z6b|9^%aM*XY{3vfaFx;})1X6;4EW&={ky&ZQY>r$sR0>oX}zf&DcA%Co_Rsp063f{ zrKWCSwg1_HPJ#D^bVWf?L&Mj0?x{^RZy(YCFqH8%L4#nE+domshk)j1L+&8c1e;6= z7@Gz*7`TgvO4;iaHEHRPR109-l6w+dTp5f=kA))p_0FDu4~@9or6KX*M>&PvGMRaU zQTu!4GJUt)Nqe54^9%^&Qll4%-&aVmU6wtaA`p7#VP?1?AH`rf{ol725ni~seo(|y zC`qobt&LDA`@hOYXpaim1;9E1gYrO}^Q^dLnd4oxTdD&o0nm0$rmZNH;Opz_Q(E1M z+cW}oU7fv?ldPg5s!|G;(JT-J2?gEo1AhC>8|WTQo%I`YIk@bW)>h$?OaRvuKNctFk?-#TR?IVXHrTHAuXY2IJJC@6}d8Do%7p|_pLelqhy2Rsm9 z+Tk2p?dKxl@myiP4J&f662P;6rAkyngWYWg*J3oV#{$|K1hz*TwR-;dRK!M+WZkZKqGXGQ&E#oL8{kE&--pzHD z(MyjPqrH^*c1N5*#hX*xS#a}bV#qH)G5V1hfXgPR8xB}k4(#7OoxadySXskH5o%y= zWH6s5$+rE47(XlfeneOu+jl?M6&y_KQtu5}x0#eoM?qkj`jNkTAwaGfmK?w>2NL&pDh!~BOP11jz?~eV*^!~4 zi1loLNFqN+KW2i1O844WNl;?U1)@PPHW4^8leSuAZwZ0CKy>jOfETc{+@vw#Df|RT z=T9}$gElL{&_ub?OUD)`3ictVn%qB`jt$iZCyD>wOF|0;4`BP|jGSmBKS|_%G0B2- zistNBXa*j}FXC48SQNod@I|Sw6*ScSBY(tN#>vU4cm50>HFx0>3jN*C31(3up_z=Kp`j80JDl;Qh+@CgKNd-{3e1`#B_jjL5b^1IZ%v>V0qHXY zzmw8<@FZ79C&irL2^wA3$L)nb?jUAY70UnE=a(l`z*Tk=!4Vq!g*8MKblSEXefj;U zyl4vcf*8&6W9|p6UM_Hk?i0jlTV$||&g?z~b>cdt2)g?p5iivQx@B1& zHwgEkqM(3$W3%J+YNJ8_ItFy&1{cGEnuTS3fOs+u-r!%$-Ep#kjQgK4GA5j?g)ALW zjM0Z@9nbnb6u^`s;YcS^`(MJh2eVh$8o&3t!4h(4m@of{b}r@*R>(MWeHPMl?1Y=? z+>>;?sSp~PX}9@;eju4B zR=<`E7A)O7`FEiN7YAKa3r;+OPv-s%=EpdO@Gx={JbsK017rf>+6A%#u&^4>I#y#$ z9g^5*{$2(dRD*=xqSXZ0_)({+Bxhzu)zs7!B5@DW&RP2sn#tpiQ?Tk4SOXaz4{%Mkvqg19i%>HU=izQ{@zZf2?yF#w z>K#Cwy5KR4a|CD{MCHj86riUX9vuzUV}-nITc2gAP5S@o?(PPgnHNydE-6k_~dU5eB$O}UE{H$$lUjplFiA8Mq?!UMw zI))6G1Wb^d_9vj1jl=k{{8R8y=(badsHLO^fQNqW^(5dswBQ&x8LBEdu+q@L@y#Cs zTvMct2+mtIglBLjJ2*J%bMhJ!@Xg}0_0@QP`)AR7>sS3J%Eq9j7bU8c_gFwCw5{-TpV&pJ@#bp^&Ex}cj#xt_>KKkEb(fYL&gn&yEp?tgw z3M8+sVGd}S4~AJFLjlAHDgdvMc_$8?ooWbh5j!{c+^2Xv6|>UE&mjuw}CY$q2}u`FD3>C+>WTmv#}ne zRR7;uWUQGZL%OeDH%-l;B@{awRL^H|uAAj6WM=_y zX+b<_$1v%45ok#7#o@5=_d_QL02>ZAA1i{6|KB6aFs6QXYz4?H!NJ0t>QsD0?9D$R zuzkkF#wI5xBLHz+?3Yl$C-OggCIitESf2g(f`A|Q-{;_QPinEIfejiYG?zvq!dgPK zSs)z3eBWgOMKr+d0NoXVyAI+WaHuDF_8fRZ>6XLD!kJmXqW>!&5FiTXxZ&w!B`B5l z^hh+Yi?Wiij}_O~Pq9qpi~~iro`C@^ki7$V0M;9*r9;ER!%{XjJKTM487xv@p@G5? zHQ*oN1yBI^Ktc(|3Pj4){SPmqprB|ye;y0i02B_m)*T!Mz%Y&YzMS#WQhFdRh*#Ma z3Wedd`mKW%8w^7*gR?HcoDYY5XbA<2w?!77r7_3Axk?QnshVqt;PPtl6Zjoiutqis zxcYd=u8l^1CCT#d7!%>GATR_<@bH}iosr0F7|6se069X_9r=P&5u|BgG%$cQ@2jix zHrv)L8jZ97M+A0A;9LUupy8eKhEa0dj*WN)1^??OCL>=ml>EXdL4N8b--w+04g?oS zL8@YQ6U+z%rl%+t9vFrO29Y}^;8ZFrD**-)=;-JGU^p0XaKOV*nlV+_$q+~)L55xg z;51R}BSLu)F0<%#a^9-ie*B!HZoA(n-}IMiJ-K%M+_lzrcGhKlpOlB>DH9?Eg>378 z-!U;t>PUE=sE^2OfSnCwV>w+cKPm6NDFrIe06*u>pTTSF3k$m!zR;7aJ{rC*5ftfD z1v*@q`=VI}wW+&h(WNUF&cVYUl)oVe=}BYgN!D^M`u{yEy>MANI5bdrAixdJ8$I`D zl5RQ0z=>Nf)EH0RtN`*G=%}&!gUcO;cV086L8FC^{%>V>eM3|fU8$_ed1+0(Kci0@gk{*_MmwR@BFhUIqwkWk1AaT z7OoyWi+`K*tP>tn*&L`>Ip~dWvEqa=Qi`x8`a<|2 z)+`}aDg>%c_S;NJ_!+`$R;|uEU#ey>Ik!DedR9wN649buFhrAivdAzPRO;l^%A3?|$hcg~4aLwZmoZub#z&Ye2?Fs7)Ixj2_C@KoMOgA>X&r z=CkjcvW?bGmWj_9uhbUg7%;M6`eNEyz`#ic9J9^yPY_r@0MdzZOF3dvZjeFi~i^e$%4uzE~5qc z78)~WE3v`Zg@*^cp>%dJ9z4CaV?4T;de5PVLxxtRCle)Cbid{Ri)(Px1WzO#sFoyx zsisr_T?E(it^y}?nKyZqNQs{emryQu+WFt;&|C^PAW4O0_G+>Y80D)1m)}o@S<@~X z{j7YW(qmkmViHGNntTw!!|$i)ReGep@hHSLZ#d2I{_ly`V|Bm3-V1BvA{7O~V~}l- z%s6%FJB4IDO1GZ=TR@VJ$x^#&+q>)%iNEq-7fB4(Pp0w4k%_7nZ};b%aU&Q@^4FMx zfBcen&0Mit#~)QOvfEDm#h;Gy)BW#JVFTN&+ZyDzCw%ubfuE*GsyR}29u~__67oEZ z{2RqbugD2yQ-R)M`p^P z2%&f_O0SvP79^wMQm^*29!t>SB1*j|HUjhZjNZV=E(kgP84~J zv&tRv21VX9#^eozMBb^XqO(`sj~?E)TKF(U>yd=Kp*z9K>8?q-WaYE%y~w?v)x^qH z*Yx3GN_=enqAMyY5mhFW6%Hany&pN2&mnLg>f11)igi-qe*e{k&q);tF_3C$TX~n^ z5kJNgdheF!?vA}}W^@{I7M3UxnCEi+QJ+)C?JF=YHv5CJ;}fgZJH54#<&}r!Y>aZb z{s)(6ne~z?m5Q_kdVj>v5`8zO>`Fh|b-=ud6Jyn3CS-LE>k-TIr*r7uY#sf8?- zm)Vyy%!qlr9`Yj>_w98!ah(=SEGggtkTx=>JeH;?xZ4!#-cRJC9{Gcq%jbMf6oOGk zrd-|gR8ShP<9^z9Yd;E3R1C)-lyQ0RJlYDGsT1fXg-v=n)m*u;B4yMe+V0ew2=_r2m&D zxVUhXYZh=ODG+w;0k#9yc31@nM1UQw{HMT<2>&Z$VkuDJ0JK>66}e^U7}|Hy=Rayb znFpD1v$wjSl%2(OB|UfCDi_Pi0qf4a=Qq%2E}682e{ z2+qNejG#w%)abDm>9I~vPlo_X6?lxk1fT-cSNon)6kQ!s#{zr_f>q?UI1>W{4GRl8 z=nk=WaghgS0mn#Pd(2XA5TpMgyU&ebiOZf+4-g>2AgAw_^GUnyb`$Agw-ez;H>KJs0ci^E!>JLDx%p7m>eI+0?vwb zf`U&0AOkgFc&7@S)O+`iaCT}!`)2NGc6RnxP%{H;Ft7m!(}s%ruS4`${}`1EKzh`2 zFK3qLhOzH$Wji;`U9$n^;g!gbDOJGd3kO$<0EAU}8hfqws)2!lMxy?fmNcL&=qZw? zn?rJWYEOE0b_Op%V>+m#00Kg`1Qb!GK-tsMNfwaFV9N$CfOL=kh_eyKG$bwfT7hf` zT)`w%0Lr--5fCCsy(OlaO=`J`v4Auh>#qs;?tUH|gihOs18T(E`&m;{Q)sU5#n!>_ z$>E`#uI^)y5ZHntg|BWN(PXG%o%BqcG18$$>k+;8q10@oU>n1Kued~tA5s{8-b)?0@~xkY`$Lr6<1CEem6 zsf4sr5;hGogn&we0s=Q6rF4UYN-Nzh-3=lrNQi)dbV`0}&hxzA`~C5qi*t^0DKoS0 zz1Lpr7i&2n4jA6xk?cFK7u_JQ{yje*x?jsfoX9kk@#xkyjM%knfZ<|cMUZ*JO838O zjs&y>*Z`>G_kujhS|EG>n3;JF>P}5fO_&}P&`5yu0f=xoDI$qv@F4DOraCz~Nq&hQh~w{|fvwM2lK9lP#GJVG*X;E(sGRJXu+{Y;cPJD9 zROYi!Wrza6!9+zyfJe?E9R$>^xw*Obq8spkA0aN87Q6ZpbPJJzumX5*01@aZhoEuE zT+P~m36qrR!~M)0ju2Qy;M8ETA3l62u|lM>+LCU~hs53n#0m>#!8-=5-q(#E1prtk zKm%=HA2wT%ft2%7M>uOB#2yH6y$RW1x=@Mm*F`HodBOuo=F6A+MfMf}7*LEznBINa zxuL=cxYD0Le>SXtkPw6^Bw6TT9nTPu7(?4HcZ}>WXz7C35!40HHm@JC`&K^f#t{rv z9trJhD;}~yhR;PsLd%4a7%48bw4x$P@H0a_ii^QNNDU4SHd~VcemXrXt3A6*><7>k z%4Chfv;vN{f@pN>>B&*x`QK}cD0xG}O1Tr&(mr3czwJ9lUp8TN(!;Da`e6q0!5u%-LXrKVrjXkEd3 zBQ<>!NY14DZ4;+Z+ro}<;|iUcn(`J4N=|0V0OsTC0zA>b6O|NzhZ={gsj6-;P-45` z`;*e8)zvYHB=%NT`)8di*?3L-e#$U?NWw`&FJF5@ngWVyP;dZ?LvWD;;bU|EsGSQ1 zZou~nB@U_!B>p3|GJ4pud2P*hv7xrM768LPUq!Iw*$GfSfV^x;IK8~ZqYd2D8~-^8 zI3w(UrU1xjP2hMA4o6=fmKi>-7=t_W^XG2fdlIlUf`D!he{y;3ndOrw95OPn)0jaD z=G%sdhy>@u#_lvNp$l6jjI%Z{?;E#RU>UC*w<%94P) zk8pM_p;8774@4lGaVC$jetzmV@|5_1tpFqkx~&woKOj&5uO50Qh#m_vK;TbamxSCL zyVr9VfeVFO1vVTUMEHU;jF>=Ji(Zz@%*cS*5SYmOfC5#&or<<@pXT@i1OmhXpe8Ld zCScS77&BnBUN|&X^I^Q%Z3CV!?1i_uI0sX(wJghdfpUPDVG3SAubZXNCKFtt>rS}8 z>_Xqj)6)=v!b$5D*rTpOXjK{ShCU8XE-!Qt9XcrYlNX6Hs4f8%Y_B{g;rOPy!Sd6? zx3EXxHcf+r3sJS-iHF7-40eFuq=8zQsl#WkiYihW&=)qf;c9!qh+V?4wo;J){HG2l z1)#9;3&~^PL{vaeX7!Gx;*St4y`G*PfLQ+{!2|Gzg?SQz>1~WsD_3cXGMTA~%%Ug* zI7iTcM_<0YIe}q@LB@{Q!JC5<6QnTb=j97-wi3|o{8?H8A$5Y3%jao|$zr}cSL3l@ z5IjZ5KiC-t(->gxytgho07jZXjN<3#M~(kIUGsw(95a9Sfh7PL5zs~fZKh3ck&9RA zjDgzt1<)U;1F;DYm@YuNXaB49jkmVnks=VH`UVD|YzFqnAI>Ti%6BjL0|a$w#0gJ? z9VR)_27_T{NyBtW=v80JjWJ1#GxJS+4eDllG%X1aH698sOz5gUI5`;tXUa#&^ta67 z!UDlHHjt|zK=n~V*nunR-G(0oZ;Titd|~xCu*2chvr9@cz@LL#4abBuUQLQHsPR@9@_Jhy1R4*&7zG=~uE)Vu!uf%)hy-)s*}bPu+@ z#Nf(qzYXx|AP@qIh%;G3o%sLJQ<1pE$%?nB7B8j-8IilnWI;TXYbXE zV|iQnOX z)s*Pgu#F=TV>>&}aH^!zp?~8$;GI%vBJOE$X`m8_PemmY926TrzHsmMq2Xg%JXE(~ zV{^3sEyAdNzp85|wWqt=eq*MI$`5W52-q`uc5CEs)0EAB&%3d}v@V=Tf4nfOvaBo~ zxPP(cEtct&CX>d^xsE2G|GG#3F;;?D!tRBGA(TfDbc1Qg8I)KGnq2okuaI=C7%AW6 zXeFl8UJ+dN@g5H_qvfkxY@`I`n55GJ*6GHn3KaCjoKps0w^_A5B)6dXgW)moV>g~7 z5Y~WU0-eL0AIKr+z&QoS9wZg#)t3(-YypM%&oEoq0_na0l@h+ujI{`+nKD2ZP0%7_ zrvGUvD29HY=>QiuK$XjP^y$SZCrZ`Zx0|6i7|82Hdu7+VcG4d5!guQGmER?u1q(S!}rpYNI z7o@LAm@G4mw;_{ga~Up)rnmxU@u^HPcRTNx<<^X1+YH8ZW~@(+BbW*8CyO zor?nJZn1X0*-6@+x~`a;aYsx}M_4IAHKg@I;foG1x8V&b5+{k$P7 zY{;pqs`9>e4oK-z%K_ZRjMNLsj3&kNfA_gIn;5Q;AQ!p1qdb#d?`X5g5U{kp@fi>e z-zkA|^g~A@r!hXd=VP(Nl`2f&JkC=lbt7b~X{JF_TjSCFs(M2*#e?5GJQzqtB(~L3 zWIY+dkmW^e0)lBsopfY`n-s5tc@)GFV(Ljgl1V1xYLuRl*lHUj|){sdHvNVHb1 z)sW*s+IJEfvrFDTHoL}3vTaT3%JS!$NEP3E7?q|< zBf<_7QY@0-aDZw8bal=@YGQ9AnWCQqF!YwVHv;h>lW`f&tPiu0P`n1IZc5@a2r!YL zAO0ot(#1t`+DTvk-9S*v8=~06j=8`-A(6T}`OyEui#$B#ioc??hplH>ynig7u{5S# z#!GeXaXDvKvk&v?w+}>|3b$ZA=k5?{R(WROlZx=cP%ZJ+U#fz^$Sq-?E5U&(y$lR2 z6BG0R3T5%BnYTrHT|1`(CRGV4AN=AEk2S17ImtuLTcwq~U2Vb(`3Wp;^p8~LT(~G5 zq?%l$Qbs0!ugYX+XW!|jKU!9Jfv?9EM4W8KTDI>}JgD~%^V((?b)(t&cLb(5y8UM< zcfzWV*m8h`2Qty*Y7@?`8vn*@@Oo*ZI&a^>b$`Xu0H+E!x3x~p-#+~-d)1WMbwP~} zx!+K8zlpj<()NbSYFJ$F*gX~h^6(~i$d!UBQ~rVN*1gqyO2+d%Z>ujW6U)fV z#K!osjY< z8jp7(Gh7^GLltNOYuF70oKj*tie+g#4s}u5gIsrWiXsDJ2u??=m=$Ovg_H!0>m(LG zB7rRW6_8QQh0C2Dq(ZTk(;cC9Ck{ucu~ix7XUm@&3yJzS4?kzDyAJr1l+@4GRu@})=)^Om%#V1JrJAmQ-ASKHxxiEiPG)cE%ISV9df4_LP$vRn#J*c=$4eIMqI zl91{Ab(dmgo8A}I-<7esh;WM>Th-9NF=qO%cAtZvGYzt=*v-?U^~d|+$njh^w|d-f zl@ft_7Ev5(!+K5<-}sFkm=@~@an1&&5<67xO`n}zE47T9B$gz`ag?W~_VtVKCgSqu zyFXM&q+6~OtWA|!QDG%RiB|mdh*JF?l|eqoh48dv6meiTw;!dVBBH2B?P%#_TOeb( zu;0P*ee!#9((e-w>8;MSzrBBZEuY8@{4-pqFtU7=R`KZKz1LIYPcXJSvX8%&3|*2Z z{aD6(9(5pOL}-lixIp$zEApeU;7rN|0o&1Sq8Aw9Ax-?ucY%S)ZDMv*zO|BGW-)$E z%S4y2@=F@>i?gY;rKjs6(YW3+OZo?)Q7^yGYxm;5!7(L5oko9pw(X{d7p`3IeUG}G z1rhxVX%&y4QH|JN=)Qd92JUIP?X9h+%Fe_s(u1~q{VEC$InNvVZ#u}5YztFlu1J5s ziBBjzqRiMqdS1fV%8HZJKcUGyygxVemuH*q#j9-+mb6GnUlJv`7L^ z2Oc}MG&6V0)?Kwq3(QGbgMA*opjJF*O)x)Nfbg&CXj<2xOZ`N68-Yh$=E_}JN&cyV z!c3^%@(n7lp8oEN4lmFv<@wgr^XzL7owAqLmw7eY9BG$@#l>i$nm2CdFN}?+B5L~q z&J*az@Xhd>70DvX0SvMn8q5MuE6=kJ-}L)4#L>G!HQTmSVjC(~_47`Mj@f)fQR8$} zC>)JgE%_G$W4s-wZgJ$7FM>;&EUzWNzdCrs)$c;jP422^$@m`&I39lXziNT`>7vd4 zME_wvj{J+&!75e&Sd2iaq_ge-O; zAz$k220Z6AP-mE0Y#}h&x zO-C1R+jm7~{CMvcO>!oguaQ#F{>9nK$abszrAJH!+7-Qn>x{h03AIGH-etGR1Gim} z&QJ4q3khHJIsK_J&!^k?W+6bb?B-V;O!=qvSEqo?RQ+(peoVecd|}7_If5WPlhq5C zzx0pJDW9jPPH38=8ot`0I{A5SmdA1iZ4pw^IjG0D&{zMlKaO$3Q^Dy-OG|)IUc}r> z9l$HIhNHFGSg=eCxWa7Gexn-aPv)%%5uQ-k*M8`s1Ffr}M^NC`2itzcG@S%Lx%l{q z#O}6VrDf1_W7tf6*0**JI!05~=gcE<5W>=3 z6NZ_}ND=tVcfYdDD2I|$;H%ffw2j^-U(c{&N7+XU=Zuorm<#tO`o}B!l3Fk=JGbB2 zeke^QtxvXG`cgN}LMKmG*bP(+>=TuCa+S}<3SwXyx7Vlj@>=uAo_Qh)3Ke){hDJuK zd!J~8$jO{sT$JD&%`GjLp*nui{N# zg0Wo5Nf|BQ6es2)rvkh+MqUNwYk`__&-6QSQHq92%-zkCjm*Ege^py0W)>g#m=M#3 z$LrQiW@(RW%f#mW-muOp7Teh1x}23ru+ZijEHo6Vq$oeO|F$%y82Vr4Ey>d^JpDv? z^PTzyDHfad=VTX?latK_8;-Xop-7Rbao=5@nEd&ZIlz;+C8VK2ZvHbT>T~l-$1=&| zd%4w044$uPLJb*O%>UH zzoU~?|XwF{`uHZqoAE6L2ug7oQwFH~rs zoEFB4eU_r1{`efB-q^ojcI&6>V_|KrzqJZ|TK5Tpac>lAFs!t43_To;ecVBjv?53w ztVAJqZ2z?@nwQn>-+a8~zB{rL%@H&k3~S#0r9Oo}dpncqM-St?DZxsb#fJ6hOrJ<& z6frd)7a7YtzNNj9)3bBxjilbu7X(ao6F&_R9Xu-`*pqU+Xq1!_d^`qKCl z@U=3pyIDsR<9NhPZ}ea-W-8EMq&iZF$oEf-&`T(#V1RMo@$5DBf&VQoMC#)tyfaFzX{63m~)uiOlB%53G@F*De7tyP-pb% z{3F-YMGAyPI-%I}XfHTk@bOh{3?=?hepLH=v-v9RwpowMfzLO4$oIT91N$ zl6F`rpB@?CviJFgwj!6BR zqyw%{5IE=Nz~H%nJ{NI%vdJ%=N5hpcL6}EI#^^iiv_dl*ED3J4;TLB466N%NmG#U? zY(&rj?^Zv|NE=9%aNsDEYY6rO5#~@edJ46HMrmD*7q=37C%8I44j@==h0VkZWN)VF z^;m9h?&!&hCl{G7TTqzACa$+!($rhjF=OKg()2H1j3=fY(pBm46)1nkx7p!5FW2AU z^uGAoO+$KM8}DLb+4ndB~~blX%j?wkeOY)fI>3xs?^hmatP*JZGYB0s{l9ng zM2`z4VG=7ogAlo`~?C<*{xjIzhk(GV~^h`fvUtqs=lcyGh68EVDuki`1K~4 zI`QB#c$9Bke>ezm`p6M~vdUw{**;?5Ki6Sa`umu~#D8Vs;o;6jVVHnQruE(}Kf|x{ zCTn=8ER;RY#zpTT=1z_ajSeI3s1LryeH@-2238@r);fWaiueECqs4xpnm*REgN`>4 zGxS9fhhMFifv9x%5DLT8#FI_f?Y9~tgmnyyL!-+G>ch2qa)Kg?zERC5dLic`%(m^q1)_Rvc&&j+BVYSZ;-8&X z^2zSMQkbUu_+Oz54 zOIOkA=53?G_&_F^)FXSa|qY6q3C*j8USo6rp16wa7Upu!P zIUISfHNIVcle3=K)K3`P!4&=P<<2xrOlDdk9Y_FAng;CFf#^H3l2cry)q1prFrK#j zR3bnwCAYb@RK*N-E-7Bf>)f&Tg^DqO_h{1(;g(^kjDNPdkYx8{Y4=bNSXGsiRXe1I zPf&2|JG@piTM(799-^0c_3BmI>~gHzn;91u*SEK1yv}WV?G!qTT1ntML-MTHL+?@3 z4zb)1MtdO@p9d@=50v@|!~)TDQE`NJR!+}7g$62Np1c(d*}MwqVqS&u7n3I30qBUv zy8+!fGLQCFui$t?*UaBaDk?V&dYUID3?PB!@9*wjMn>$H?|+IJT5?uYdH)lJs>p&V z=`Hl!jjP!IsbOQ2FE96T7I-&OJQSeN&MASyUS3{tx0wSlsek&f%gV|Qzei5pY~B#2MGmJCoVaxT zDL2HS{cpgc8)mLObXr1EQZ3bOA<-X3vTuP<)7W*RiSUjLvr5#ky#(UvGG2 zkJgbh1IL+0A3u-=2l8JaaYMjovK)3}?cfe5r(W!@{VaY7^W7iv^6~97fyKB!7P;IC*L+s}?q}LvHz0StQmLX`4$raK^)YApchf;;|%rR@Gq^S25 zyrEM>X3*TzX&pAWE`J32aZf+i+3u;D9u%ji*1eJle<#@x3;OGkI5;cz)O zCOg&r=@&qlgP zt0OGP@uu5?r(XI){#+=NwHou-wjF!gO{ z=+DUb_?Mo56tM1S)5_$h>TlmX*B}3Eqr<5_UWu2Rl)RBst>^VVw*bWy;SAMC$(Y8< z&Re((vE4lRl(R>c`g$PCWx_!k$HsIv;f652==UUCN>Vbk#5jIV;i%}0+|!~%`4c_&5&+xu#}>qoq;Xrjn976zO-v16|A!#sxw}RBE()4 z7_}>U$NbiA8bOyZ~1!QC%#{}+lWVjkJFg_-b<>(P$mPOE<98R zQ6ZthiMlBmK@$uvTt);E%#=KJ=7!VVLW(c&Y4wCEYU$7A4*h|l9tYnc=W@(zID<~e zy>9zIUoIw1z|7irU!ni#i5KMln=qi=4CezVL|(v#Qo+T;^UVKpHq~1c2lhVhqeYDgAU3?52QA;cRJ7_i8cW>-Q-BFrlyA~g3FOu+jItt;FY2%nVDDZ9xV^zdOzeZ zCyUQUaZm=8wwj`ql11nq5Kv!6f%f3S6moXLivrrZUz&mt;1~m4-KrOGHYs%XpC0Z_ z*xBKDLnugp^y%Z&nJ75p@BK<)k0)=;J<`c1tqrui@f7RHw8R+?LeYv2L~;Tv;*qMFh$D} znBb>;DExEhLftmo=sI*`wVk0JIk8)bTzrUKxr|t`)1U84gtmv(1)1Tha}S%Vf_3XH zDk?(4^9h@5rt1EAJa`bTPl^ArxVU%;xZrqSUtd|>O52}0w=+xh3&$?m)~;R`N9lsp zdjPO^@oS8s-}J>``g`BSdgFmjX+dzv<-S<`;qtuMkN6dKwMrL&cb<_5%Z2cL0?Crj zVsB#U4IZ9_#@z%qvKZQ3Px@b zsBe$J?xu=m0d;P&wCVSs16qnl+y>otcHMSze2k$b18~C7tD1$3PmC!qCb1G=LztDQ~of*KzL8*;X`?7fsaPkj9-AN5hliwC{WI< ztOSF{up)v1)oCsQU%=h50SpJS3GfOlfyp>aBM}#R;!!IXf;TDblaf=dD}x|@Y#H~C}JYHAoqN82ygfE7u|dYB6YqiqXO3gCr7 z_^%|DMu5W+$gifcvC5w8Ga!rs234TM4`C1`n4O(9^2&b5uVik{1(5}gbwpfTz`=nl zsKzGL2b~Sd2H-?;ULaAT?J0St8y6~cl7Elyf}Tn^OX!CSC69IEm}BHj53mrbVZHlB zu)b4KQ6*e^Mr&$jCU9pf6bTK*YA!$Sy4;8tn%X5@P9vB)<=AS?$hx81oq*Qt)5q1-7d4bemv(%r28kU8H#U!MfEv9;y<2;UjP4I2nxBqarSrk}m6R^=)wdz`SZ(v1AUqYt3k z{VfVXlnzu23=9kc?$b)QZkhBZ2m?h5{?;n56Dfcz?mc|?wLmCu0$l?)Ynl-T-2efGF0=O|}GHz#?wT1U0LFV`HPOfOvQth&Z`I*c-*sJ$q%W5i~7A zXVQ>)%mNQj`_6n*s6~iXgpAXSo`*!ffdrYe`k~gFB1R+f=DF%)KWLC+0%eR%4JY-j zXL;{i;iLo3h@#KU1hp}_0%fC+Mq#^!GojOw+RCfz5)$-HO-(l6)~%}DZq*nU@?ywv zTY z$7d3!_mV8`3?O-9E97F>nkLEOicZ1b-5O8-CKGupE4~8bdXf|^!mzoB$VeYJrOj}I z%HP5WT&Xvvc-=I}LH4FPV{nRZZBJG-IF0wC#$nz0xztx{#CmnE4mq%m@NZqhSFl=+ zwQ>Ej1<48qv@V4C76@kQL_YaubOrIWkz~Mwu>tvkrNF=Cu!Is|k-utOH=dp?VCwn+ z8vF;-2`W^LEi3Uwkpf0I$UZMs_jX>414xEJGY0+glt3)>YiA(q0|pPt!%n% zVUl~Q@xvAap4VI#6T_Z0I6AKxgWu9Kfdn1faU?2=T78l`|C>bReJiURZoK`yy^0+~ zggUtGCyC?~^h!!UD!#U`{)j(TfN=;4Au1XgJV-i#`GG#qFmbx2qk|BVb^$+Vh!S(# zBKYL|Q{omz1VQ2}VR%jdqg-tzyUD7}9f*f^@D~33-3*X)+sXixlAoQuY4qDF$^=G) za$f)7&qk!$)$rCJ)<1z25hhI4TD!R?4axXj=;k(A|k`ov!fz`(#h9Ezh%zaf@;_wG#{?IY{ROnSJiz6kiei(hz5cmBy9 zar%7e>Be;MSU+_vq((o-@w zVGzIgPZ}lRbzBt;Dj_x^{==?oay}^oYRX-|@v- ziTKsP{Ev&`(MTA~|5Jhh%CItG1_GX-kdRy0Kl=79G-?8y#f?>#f{`Wrx%Tt$QM@tq zx0IFl_%>#|V}e$#=3CG_=5YjJqFd?(Bztf<50*QZGpVc!1R%Q6U z!{#p~!#YjY0e0Ajj*jKhYWCO){2~w}qR^M^+x?QDw{Mpn zthN=X0umb=<;TE;IkgLxX}KyGPiRtYD4S!ZNFN|+#!sA2=nd*7CR+Si_Lbq+2rQcd zC5wKMNfTzprEh|qQVJCbZIW%)<%DD`8z~YkH*LD_i9JmUc&?0rHnB^?+)%83R!KK| zGy9;~{>2Mr*aU@XG@@j9upzLY1zP_BqIErd9%`I+NOfmdSI<86BF#s<=yX#-=PhFy+5w+sX0f$Wmk*|HM#rN-U^a~T> zJX0egW}XVsXEBlmd;&b60RDZCCx8F`@D+4VKYXI6Fz1H$k}a)L;Z^z`cOD*|C!qPA z;w5UX&3|bZE?4IJ+4S#?vx_A?j)BerAXIzXf&@}jzUjLeLI!9ATn7^?{gh-ajXgc2 zPK*6*$&yYpumjVZ5C~4#K5y6 zF)_c-n~3+6?7yol-n@}86-FlW;;(Kagm6+CYU)%Ouj2#mIE#HDGR`M@--c2Vd%SBL zas999tvQl__VD(IAMe*P+`}SeMqfPKegjn0&m!%*;SOq1?@=6B39t7tF=Y{$ggd%% z^*WS(wb4;gNEFWTbA9eOOoBC8iz>bXA07T|B)q3}o8ISfB)&z)l=w+UsUl<}o!iGp z3xjMZA>{NJ0e_7V?uHK=kz~E-le3IxA3ErJNo$!&5>36^)AlJKAOwYmu151-GyUVF z*2Vs*5hZx;wFNu1#BG981;xTKPF~&)>h6-R1|BOC#BYdE{)u!kb4o1IaZ(I8>_}=jn|} zkU%+nTiK94o6gG0%61od^bB?bJ1X$-AVCz>TT;2gN2Mlog^PCflqS%*9jpUTlmA3) z*~CrF@8@3JPj-9lG*-}J&8*phbU6doLjYt`FxA2*s7;UN5 zkg3%(0ShnY@c90x8;hlk7ryT2jhJa`Yu5@7f=V4K<(kRU=$$Ouk|KVWndqIp8=uBK z%k%*Obw8L5Okab^5g)MkRr4jgI$;wdMEAYxFJc+*Z8(@>I%mn*@9!)I=~9{UP6qrb zjt+D-lIy{SmgWq#=$t-N{0ARtHyi@U#UC;G8s4Ix>uh{^AsF-V(Z(5_;d=c? z#SG=ASSFA<*q4`7KXj-Y^d`9$p7_P|mfH(t;dOr+r8BQ04)6GB;!jer_nZRJ#{dF> z23H`g@7IK`QUqY^4G@zHS>f+VZoCa1Pu~WmKnJK;0(aaf>lf|6un?B)(yum}%-_0f zTGz^FJ5zk}mexfIr|rCSh2ii_IfG+})7qgi75>b_Vw}g5g9;P;%GvE~Gl~p>UvIPY z+~i7_6AY-QeY&bo4+L$*2vzHG|pLnNc-d~0S+(8c_RB5{aZ@Se^9TR8doPO z1wDb-vIMds)_LLwZ@M`Nm*0T0ckLNu22gRgwzci@U!@d2w*E>A5AJo-XVDRw=*-TX zg-x4OmUZJHj=@BK#ok8sCX*?8hbtH&L^c1fka2gW8+;9W-|p#a-_a`3*?RK^b)DOAVt<;)57CO=E*rt^mz9A6PLBKg$3K}J zB&NNi+MgI`Y*VxM8sW2^3*O-;=TE_^Z8&I&?9C^LUejR97lu%UKV=H;w-8d!8#ij7 z3MsqL$e1a#CSx2}pa#hZR&x#xSzef&Qs^~t%h_aa(d?gz)s>XMF=3d~4Vj%9m$YgI zG-HhX$t2814l1w`A<|{wZ|l$1|GI(?w9TvGa#!=H3#VaddICy{2yRGb2>!=*lT?Z4 zUH^j~bOC$llKctesQYI7msS`v#Ci}p1%xt?HMMaO5gY3|#%}XsU69ti`mN0z-f*0E zjsmB!wOe>ZhfD!g^3?TsK8<#IVacHE8QI;_@42hH^?56dgVgOJs6e_7pff)&iEc*Q6({=5-~vdN>7Ul5#K-iF+!Og~ zbq>CA&f|&^nAvf^lzdGTzCi64M(Bm`3qMIC?RYzz`KJyCR8`@3M0c;V4rC{~AM=MO zM-&v1voQdL3?h{V3YQw9)+>Bw?pb2sa^SGQgfonMD ze1n=3hlE$euaFtfwKGwRa0Z&Ok&s(xDo3Kp{z@Gkzk1uAb+!D-ZAQ0a8Ku_CO|Sc{M`{ka{jL!{{e6zd{05;bj|lLkg6-{!>JY!kq@-N^diULrCrA6) z6i*~5V7Gs{MH#|bfn&0SuU47Xqi=cOsQ~pcxZ)zAM+}JQ`~m|3bE=^9hla;c7=oM7 z;*w|snU2Z!Kli@_4>>F2T9*0FC0jfvz4sNdcJr_=CywuSjqchDM791c>qkjjWzL4>9rg|O+& z{hQ3Y##Z6LE~ z4v$2s#3OT559(#8naw+gftD6L=mw?;pBbPlu+#xbr=K^sx*7_!^^5GMq444c+lCvM zr<_+~mLndR$!lpMJzlD!9+?MyG52h;o^oSCn7UC1WV2@3+w{$gm}gmX@=<)H7W4AF zw1s^U`-kd!1VNj$?CrISPA%$O)L7#;wBRTxAg8-(DD-3pT>sy{SNEtjFmaQ8Ym@M$ z@vhUyGyc~l!DKtK+E2gEudIT}%Zau9z0oBk`9g|9isIR!W`YTQR@<$|*rdIW^0KM7 zN#%m$%_4)2k`L7Foxd)QoT&s1M%yGVshp6c5T>Xg$$^Gf2?MlNhCT#xnWLW5t5s*Q z5pgbi5c|^0e%Dc9O_);>Fsv$4xls{DH)`z@fR)E6I1@f?iJwiud}#i=+cS<@<{mHP)byv`bq zF-cyTv0&v~TvsZkN7qIs787_rsQ7Cpt8sYD^CFfCG`Tqlr^I`Kb2M`rrEVtb z-GLZb9AD8uy0m+A62Gkm?Q3#}tlds8M|+V@d*sW-D(M~JC1a)o}GyNp`N zpISs!(Rg?7yo|R_Ox(?~alaD!CGMQY@D1`0Lpx_ zuhHGR8WK7q6RV7L;tE~2H>ku+a$w-6B8*(;qm!3nb>pStK2*oY z5H-q<$UcX^(v>#A&^31f-oknK*)1Ae-hw!)n(HoE!^)OM?t%#!A4Tiq-|bOZr;7#n zp_OZd{`XJfq1sUrWQ}b*#;6VY5SLRUhvu>ZH$%T*>&Ir#!I;}^iblN6P|KQU9Z^E= zZX*`bJCr9@uOhwX-^1qPIaxqn$Ynkj9A5tzUa-S+qMRfG6YEd8QD?;%)-z!nGl36t zS)LTv#mKQAm(7~elPlB{)toogfM=pku~&MoaXNqMj@W9gjDDrwxRh24trgS%EDhUX zRR$(trLDpP5&vdg=ra-Lz*wO;_rLFZNM%?TXQpQKXgYnKK4h(grI9sn$}(~9XDoV3 zWxw5;DF0L{ZP)$(`?4hTbBY)B1SZI4;;;Xmi?@>eQA^b5QO1-#^l0pRL570?#qh7| zgA)JyXm&n{y+uu)pX0MlKt%qA5B^Ia5hc!Y>D$bBnB{r#J6rIYDrcLr^<=*Bs&w{my0n)e)N^D~7-)w$fNLi%A7KO!4s~aN+aN zMWcbeHqe+T3q+Z5O{9j*cujK!@3||L$0@6f-u=HXg$|9^xU=|;0ojrrnHI~Pe>LP7 zvo9azyD-SXT(0+jSE^JDA9bgBJm)-p`tTQCcev~}Pk~sAo&w5{yMUE@DbMsJdkKydQ+0f#r!BNlFmVdup3#QeB7XzFQi3#vv z8w=UTc-8yN9r&oq1&GNvqfk``hr=8f*Ups)pPrm?KmA#x*#MCee)(?p)!9Gyn&I%l x{twD_l?^GlBslS_@wjC1)Ty}43^!BGl!TC$n={y*Q6*mVE^ delta 51345 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 z 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 diff --git a/Telegram/SourceFiles/art/sprite_200x.png b/Telegram/SourceFiles/art/sprite_200x.png index 97e9e24032a0eb97fd9f91c6921666719c6fc609..84138ee01f0a537b18390f9a97163426c37c72b3 100644 GIT binary patch delta 105823 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 z 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%0DuOiF7Spc~sm(poqtG$adrLT5aEi*{DSMFr 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 SA_o-w(NNV^DO9q$`@aB++)MWW delta 104512 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 = AudioPlayerStopped; - switch (type) { - case OverviewAudios: onError(_audioData[_audioCurrent].audio); break; - case OverviewDocuments: onError(_songData[_songCurrent].song); break; + if (!_checkALError()) { + setStoppedState(data, AudioPlayerStoppedAtError); + switch (type) { + case OverviewAudios: onError(_audioData[_audioCurrent].audio); break; + case OverviewDocuments: onError(_songData[_songCurrent].song); break; + } + return false; } - return false; } data->started = data->position = pos + data->skipStart; return true; } -bool AudioPlayer::startedOther(MediaOverviewType type, bool &fadedStart) { +bool AudioPlayer::fadedStop(MediaOverviewType type, bool *fadedStart) { Msg *current = 0; switch (type) { case OverviewAudios: current = &_audioData[_audioCurrent]; break; @@ -393,20 +396,21 @@ bool AudioPlayer::startedOther(MediaOverviewType type, bool &fadedStart) { case AudioPlayerPlaying: current->state = AudioPlayerFinishing; updateCurrentStarted(type); - fadedStart = true; + if (fadedStart) *fadedStart = true; break; case AudioPlayerPausing: current->state = AudioPlayerFinishing; - fadedStart = true; + if (fadedStart) *fadedStart = true; break; case AudioPlayerPaused: - current->state = AudioPlayerStopped; + case AudioPlayerPausedAtEnd: + setStoppedState(current); return true; } return false; } -void AudioPlayer::play(const AudioMsgId &audio) { +void AudioPlayer::play(const AudioMsgId &audio, int64 position) { AudioMsgId stopped; { QMutexLocker lock(&playerMutex); @@ -414,7 +418,7 @@ void AudioPlayer::play(const AudioMsgId &audio) { bool fadedStart = false; AudioMsg *current = &_audioData[_audioCurrent]; if (current->audio != audio) { - if (startedOther(OverviewAudios, fadedStart)) { + if (fadedStop(OverviewAudios, &fadedStart)) { stopped = current->audio; } if (current->audio) { @@ -438,19 +442,19 @@ void AudioPlayer::play(const AudioMsgId &audio) { current->fname = audio.audio->already(true); current->data = audio.audio->data; if (current->fname.isEmpty() && current->data.isEmpty()) { - current->state = AudioPlayerStopped; + setStoppedState(current, AudioPlayerStoppedAtError); onError(audio); - } else if (updateCurrentStarted(OverviewAudios, 0)) { + } else { current->state = fadedStart ? AudioPlayerStarting : AudioPlayerPlaying; current->loading = true; - emit loaderOnStart(audio); + emit loaderOnStart(audio, position); emit suppressSong(); } } if (stopped) emit updated(stopped); } -void AudioPlayer::play(const SongMsgId &song) { +void AudioPlayer::play(const SongMsgId &song, int64 position) { SongMsgId stopped; { QMutexLocker lock(&playerMutex); @@ -458,7 +462,7 @@ void AudioPlayer::play(const SongMsgId &song) { bool fadedStart = false; SongMsg *current = &_songData[_songCurrent]; if (current->song != song) { - if (startedOther(OverviewDocuments, fadedStart)) { + if (fadedStop(OverviewDocuments, &fadedStart)) { stopped = current->song; } if (current->song) { @@ -482,18 +486,38 @@ void AudioPlayer::play(const SongMsgId &song) { current->fname = song.song->already(true); current->data = song.song->data; if (current->fname.isEmpty() && current->data.isEmpty()) { - current->state = AudioPlayerStopped; - onError(song); - } else if (updateCurrentStarted(OverviewDocuments, 0)) { + setStoppedState(current); + if (!song.song->loader) { + DocumentOpenLink::doOpen(song.song); + song.song->openOnSave = song.song->openOnSaveMsgId = 0; + if (song.song->loader) song.song->loader->start(true, true); + } + } else { current->state = fadedStart ? AudioPlayerStarting : AudioPlayerPlaying; current->loading = true; - emit loaderOnStart(song); + emit loaderOnStart(song, position); } } if (stopped) emit updated(stopped); } -void AudioPlayer::pauseresume(MediaOverviewType type) { +bool AudioPlayer::checkCurrentALError(MediaOverviewType type) { + if (_checkALError()) return true; + + switch (type) { + case OverviewAudios: + setStoppedState(&_audioData[_audioCurrent], AudioPlayerStoppedAtError); + onError(_audioData[_audioCurrent].audio); + break; + case OverviewDocuments: + setStoppedState(&_songData[_songCurrent], AudioPlayerStoppedAtError); + onError(_songData[_songCurrent].song); + break; + } + return false; +} + +void AudioPlayer::pauseresume(MediaOverviewType type, bool fast) { QMutexLocker lock(&playerMutex); Msg *current = 0; @@ -505,21 +529,38 @@ void AudioPlayer::pauseresume(MediaOverviewType type) { break; case OverviewDocuments: current = &_songData[_songCurrent]; - suppressGain = suppressSongGain; + suppressGain = suppressSongGain * cSongVolume(); break; } switch (current->state) { case AudioPlayerPausing: case AudioPlayerPaused: + case AudioPlayerPausedAtEnd: { if (current->state == AudioPlayerPaused) { updateCurrentStarted(type); + } else if (current->state == AudioPlayerPausedAtEnd) { + if (alIsSource(current->source)) { + alSourcei(current->source, AL_SAMPLE_OFFSET, qMax(current->position - current->skipStart, 0LL)); + if (!checkCurrentALError(type)) return; + } + } + current->state = fast ? AudioPlayerPlaying : AudioPlayerResuming; + + ALint state = AL_INITIAL; + alGetSourcei(current->source, AL_SOURCE_STATE, &state); + if (!checkCurrentALError(type)) return; + + if (state != AL_PLAYING) { + audioPlayer()->resumeDevice(); + + alSourcef(current->source, AL_GAIN, suppressGain); + if (!checkCurrentALError(type)) return; + + alSourcePlay(current->source); + if (!checkCurrentALError(type)) return; } - current->state = AudioPlayerResuming; - resumeDevice(); - alSourcef(current->source, AL_GAIN, suppressGain); - alSourcePlay(current->source); if (type == OverviewAudios) emit suppressSong(); - break; + } break; case AudioPlayerStarting: case AudioPlayerResuming: case AudioPlayerPlaying: @@ -532,6 +573,78 @@ void AudioPlayer::pauseresume(MediaOverviewType type) { emit faderOnTimer(); } +void AudioPlayer::seek(int64 position) { + QMutexLocker lock(&playerMutex); + + MediaOverviewType type = OverviewDocuments; + Msg *current = 0; + float64 suppressGain = 1.; + AudioMsgId audio; + SongMsgId song; + switch (type) { + case OverviewAudios: + current = &_audioData[_audioCurrent]; + audio = _audioData[_audioCurrent].audio; + suppressGain = suppressAllGain; + break; + case OverviewDocuments: + current = &_songData[_songCurrent]; + song = _songData[_songCurrent].song; + suppressGain = suppressSongGain * cSongVolume(); + break; + } + + bool isSource = alIsSource(current->source); + bool fastSeek = (position >= current->skipStart && position < current->duration - current->skipEnd - (current->skipEnd ? AudioVoiceMsgFrequency : 0)); + if (fastSeek && isSource) { + alSourcei(current->source, AL_SAMPLE_OFFSET, position - current->skipStart); + if (!checkCurrentALError(type)) return; + alSourcef(current->source, AL_GAIN, 1. * suppressGain); + if (!checkCurrentALError(type)) return; + updateCurrentStarted(type, position - current->skipStart); + } else { + setStoppedState(current); + if (isSource) alSourceStop(current->source); + } + switch (current->state) { + case AudioPlayerPausing: + case AudioPlayerPaused: + case AudioPlayerPausedAtEnd: { + if (current->state == AudioPlayerPausedAtEnd) { + current->state = AudioPlayerPaused; + } + lock.unlock(); + return pauseresume(type, true); + } break; + case AudioPlayerStarting: + case AudioPlayerResuming: + case AudioPlayerPlaying: + current->state = AudioPlayerPausing; + updateCurrentStarted(type); + if (type == OverviewAudios) emit unsuppressSong(); + break; + case AudioPlayerFinishing: + case AudioPlayerStopped: + case AudioPlayerStoppedAtEnd: + case AudioPlayerStoppedAtError: + case AudioPlayerStoppedAtStart: + lock.unlock(); + switch (type) { + case OverviewAudios: if (audio) return play(audio, position); + case OverviewDocuments: if (song) return play(song, position); + } + } + emit faderOnTimer(); +} + +void AudioPlayer::stop(MediaOverviewType type) { + fadedStop(type); + switch (type) { + case OverviewAudios: if (_audioData[_audioCurrent].audio) emit updated(_audioData[_audioCurrent].audio); break; + case OverviewDocuments: if (_songData[_songCurrent].song) emit updated(_songData[_songCurrent].song); break; + } +} + void AudioPlayer::currentState(AudioMsgId *audio, AudioPlayerState *state, int64 *position, int64 *duration, int32 *frequency) { QMutexLocker lock(&playerMutex); AudioMsg *current = &_audioData[_audioCurrent]; @@ -553,17 +666,22 @@ void AudioPlayer::currentState(Msg *current, AudioPlayerState *state, int64 *pos if (frequency) *frequency = current->frequency; } +void AudioPlayer::setStoppedState(Msg *current, AudioPlayerState state) { + current->state = state; + current->position = 0; +} + void AudioPlayer::clearStoppedAtStart(const AudioMsgId &audio) { QMutexLocker lock(&playerMutex); if (_audioData[_audioCurrent].audio == audio && _audioData[_audioCurrent].state == AudioPlayerStoppedAtStart) { - _audioData[_audioCurrent].state = AudioPlayerStopped; + setStoppedState(&_audioData[_audioCurrent]); } } void AudioPlayer::clearStoppedAtStart(const SongMsgId &song) { QMutexLocker lock(&playerMutex); if (_songData[_songCurrent].song == song && _songData[_songCurrent].state == AudioPlayerStoppedAtStart) { - _songData[_songCurrent].state = AudioPlayerStopped; + setStoppedState(&_songData[_songCurrent]); } } @@ -676,7 +794,7 @@ void AudioPlayerFader::onTimer() { for (int32 i = 0; i < AudioVoiceMsgSimultaneously; ++i) { AudioPlayer::AudioMsg &m(voice->_audioData[i]); - if (m.state == AudioPlayerStopped || m.state == AudioPlayerStoppedAtStart || m.state == AudioPlayerPaused || !m.source) continue; + if ((m.state & AudioPlayerStoppedMask) || m.state == AudioPlayerPaused || !m.source) continue; int32 emitSignals = updateOnePlayback(&m, hasPlaying, hasFading, suppressAllGain, suppressAudioChanged); if (emitSignals & EmitError) emit error(m.audio); @@ -687,14 +805,15 @@ void AudioPlayerFader::onTimer() { for (int32 i = 0; i < AudioSongSimultaneously; ++i) { AudioPlayer::SongMsg &m(voice->_songData[i]); - if (m.state == AudioPlayerStopped || m.state == AudioPlayerStoppedAtStart || m.state == AudioPlayerPaused || !m.source) continue; + if ((m.state & AudioPlayerStoppedMask) || m.state == AudioPlayerPaused || !m.source) continue; - int32 emitSignals = updateOnePlayback(&m, hasPlaying, hasFading, suppressSongGain, suppressSongChanged); + int32 emitSignals = updateOnePlayback(&m, hasPlaying, hasFading, suppressSongGain * cSongVolume(), suppressSongChanged || _songVolumeChanged); if (emitSignals & EmitError) emit error(m.song); if (emitSignals & EmitStopped) emit audioStopped(m.song); if (emitSignals & EmitPositionUpdated) emit playPositionUpdated(m.song); if (emitSignals & EmitNeedToPreload) emit needToPreload(m.song); } + _songVolumeChanged = false; if (!hasFading) { if (!hasPlaying) { @@ -724,11 +843,9 @@ int32 AudioPlayerFader::updateOnePlayback(AudioPlayer::Msg *m, bool &hasPlaying, ALint pos = 0; ALint state = AL_INITIAL; alGetSourcei(m->source, AL_SAMPLE_OFFSET, &pos); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } alGetSourcei(m->source, AL_SOURCE_STATE, &state); - if (!_checkALError()) { - m->state = AudioPlayerStopped; - return EmitError; - } + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } int32 emitSignals = 0; switch (m->state) { @@ -746,17 +863,33 @@ int32 AudioPlayerFader::updateOnePlayback(AudioPlayer::Msg *m, bool &hasPlaying, if (state != AL_PLAYING) { fading = false; if (m->source) { - alSourcef(m->source, AL_GAIN, 1); alSourceStop(m->source); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } + alSourcef(m->source, AL_GAIN, 1); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } + } + if (m->state == AudioPlayerPausing) { + m->state = AudioPlayerPausedAtEnd; + } else { + setStoppedState(m, AudioPlayerStoppedAtEnd); } - m->state = AudioPlayerStopped; emitSignals |= EmitStopped; } else if (1000 * (pos + m->skipStart - m->started) >= AudioFadeDuration * m->frequency) { fading = false; alSourcef(m->source, AL_GAIN, 1. * suppressGain); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } switch (m->state) { - case AudioPlayerFinishing: alSourceStop(m->source); m->state = AudioPlayerStopped; break; - case AudioPlayerPausing: alSourcePause(m->source); m->state = AudioPlayerPaused; break; + case AudioPlayerFinishing: + alSourceStop(m->source); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } + setStoppedState(m); + state = AL_STOPPED; + break; + case AudioPlayerPausing: + alSourcePause(m->source); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } + m->state = AudioPlayerPaused; + break; case AudioPlayerStarting: case AudioPlayerResuming: m->state = AudioPlayerPlaying; @@ -769,18 +902,22 @@ int32 AudioPlayerFader::updateOnePlayback(AudioPlayer::Msg *m, bool &hasPlaying, newGain = 1. - newGain; } alSourcef(m->source, AL_GAIN, newGain * suppressGain); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } } } else if (playing && (state == AL_PLAYING || !m->loading)) { if (state != AL_PLAYING) { playing = false; if (m->source) { alSourceStop(m->source); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } alSourcef(m->source, AL_GAIN, 1); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } } - m->state = AudioPlayerStopped; + setStoppedState(m, AudioPlayerStoppedAtEnd); emitSignals |= EmitStopped; } else if (suppressGainChanged) { alSourcef(m->source, AL_GAIN, suppressGain); + if (!_checkALError()) { setStoppedState(m, AudioPlayerStoppedAtError); return EmitError; } } } if (state == AL_PLAYING && pos + m->skipStart - m->position >= AudioCheckPositionDelta) { @@ -799,6 +936,11 @@ int32 AudioPlayerFader::updateOnePlayback(AudioPlayer::Msg *m, bool &hasPlaying, return emitSignals; } +void AudioPlayerFader::setStoppedState(AudioPlayer::Msg *m, AudioPlayerState state) { + m->state = state; + m->position = 0; +} + void AudioPlayerFader::onPauseTimer() { QMutexLocker lock(&_pauseMutex); if (_pauseFlag) { @@ -838,6 +980,11 @@ void AudioPlayerFader::onSuppressAll() { onTimer(); } +void AudioPlayerFader::onSongVolumeChanged() { + _songVolumeChanged = true; + onTimer(); +} + void AudioPlayerFader::resumeDevice() { QMutexLocker lock(&_pauseMutex); _pauseFlag = false; @@ -859,7 +1006,7 @@ public: return this->fname == fname && this->data.size() == data.size(); } - virtual bool open() = 0; + virtual bool open(qint64 position = 0) = 0; virtual int64 duration() = 0; virtual int32 frequency() = 0; virtual int32 format() = 0; @@ -904,7 +1051,7 @@ public: frame = av_frame_alloc(); } - bool open() { + bool open(qint64 position = 0) { if (!AudioPlayerLoader::openFile()) { return false; } @@ -950,7 +1097,7 @@ public: } freq = fmtContext->streams[streamId]->codec->sample_rate; - len = (fmtContext->streams[streamId]->duration * freq) / fmtContext->streams[streamId]->time_base.den; + len = (fmtContext->streams[streamId]->duration * freq * fmtContext->streams[streamId]->time_base.num) / fmtContext->streams[streamId]->time_base.den; uint64_t layout = fmtContext->streams[streamId]->codec->channel_layout; inputFormat = fmtContext->streams[streamId]->codec->sample_fmt; switch (layout) { @@ -1016,6 +1163,16 @@ public: return false; } } + if (position) { + int64 ts = (position * fmtContext->streams[streamId]->time_base.den) / (freq * fmtContext->streams[streamId]->time_base.num); + if (av_seek_frame(fmtContext, streamId, ts, AVSEEK_FLAG_ANY) < 0) { + if (av_seek_frame(fmtContext, streamId, ts, 0) < 0) { + } + } + //if (dstSamplesData) { + // position = qRound(srcRate * (position / float64(dstRate))); + //} + } return true; } @@ -1180,18 +1337,18 @@ AudioPlayerLoaders::~AudioPlayerLoaders() { void AudioPlayerLoaders::onInit() { } -void AudioPlayerLoaders::onStart(const AudioMsgId &audio) { +void AudioPlayerLoaders::onStart(const AudioMsgId &audio, qint64 position) { _audio = AudioMsgId(); delete _audioLoader; _audioLoader = 0; - onLoad(audio); + loadData(OverviewAudios, static_cast(&audio), position); } -void AudioPlayerLoaders::onStart(const SongMsgId &song) { +void AudioPlayerLoaders::onStart(const SongMsgId &song, qint64 position) { _song = SongMsgId(); delete _songLoader; _songLoader = 0; - onLoad(song); + loadData(OverviewDocuments, static_cast(&song), position); } void AudioPlayerLoaders::clear(MediaOverviewType type) { @@ -1201,6 +1358,11 @@ void AudioPlayerLoaders::clear(MediaOverviewType type) { } } +void AudioPlayerLoaders::setStoppedState(AudioPlayer::Msg *m, AudioPlayerState state) { + m->state = state; + m->position = 0; +} + void AudioPlayerLoaders::emitError(MediaOverviewType type) { switch (type) { case OverviewAudios: emit error(clearAudio()); break; @@ -1225,16 +1387,16 @@ SongMsgId AudioPlayerLoaders::clearSong() { } void AudioPlayerLoaders::onLoad(const AudioMsgId &audio) { - loadData(OverviewAudios, static_cast(&audio)); + loadData(OverviewAudios, static_cast(&audio), 0); } void AudioPlayerLoaders::onLoad(const SongMsgId &song) { - loadData(OverviewDocuments, static_cast(&song)); + loadData(OverviewDocuments, static_cast(&song), 0); } -void AudioPlayerLoaders::loadData(MediaOverviewType type, const void *objId) { +void AudioPlayerLoaders::loadData(MediaOverviewType type, const void *objId, qint64 position) { SetupError err = SetupNoErrorStarted; - AudioPlayerLoader *l = setupLoader(type, objId, err); + AudioPlayerLoader *l = setupLoader(type, objId, err, position); if (!l) { if (err == SetupErrorAtStart) { emitError(type); @@ -1277,19 +1439,22 @@ void AudioPlayerLoaders::loadData(MediaOverviewType type, const void *objId) { } m->nextBuffer = 0; } + m->skipStart = position; + m->skipEnd = m->duration - position; + m->position = 0; + m->started = 0; } if (samplesAdded) { if (!m->source) { alGenSources(1, &m->source); alSourcef(m->source, AL_PITCH, 1.f); - alSourcef(m->source, AL_GAIN, 1.f); alSource3f(m->source, AL_POSITION, 0, 0, 0); alSource3f(m->source, AL_VELOCITY, 0, 0, 0); alSourcei(m->source, AL_LOOPING, 0); } if (!m->buffers[m->nextBuffer]) alGenBuffers(3, m->buffers); if (!_checkALError()) { - m->state = AudioPlayerStopped; + setStoppedState(m, AudioPlayerStoppedAtError); emitError(type); return; } @@ -1307,7 +1472,7 @@ void AudioPlayerLoaders::loadData(MediaOverviewType type, const void *objId) { m->nextBuffer = (m->nextBuffer + 1) % 3; if (!_checkALError()) { - m->state = AudioPlayerStopped; + setStoppedState(m, AudioPlayerStoppedAtError); emitError(type); return; } @@ -1326,18 +1491,34 @@ void AudioPlayerLoaders::loadData(MediaOverviewType type, const void *objId) { if (_checkALError()) { if (state != AL_PLAYING) { audioPlayer()->resumeDevice(); + switch (type) { case OverviewAudios: alSourcef(m->source, AL_GAIN, suppressAllGain); break; - case OverviewDocuments: alSourcef(m->source, AL_GAIN, suppressSongGain); break; + case OverviewDocuments: alSourcef(m->source, AL_GAIN, suppressSongGain * cSongVolume()); break; } + if (!_checkALError()) { + setStoppedState(m, AudioPlayerStoppedAtError); + emitError(type); + return; + } + alSourcePlay(m->source); + if (!_checkALError()) { + setStoppedState(m, AudioPlayerStoppedAtError); + emitError(type); + return; + } + emit needToCheck(); } + } else { + setStoppedState(m, AudioPlayerStoppedAtError); + emitError(type); } } } -AudioPlayerLoader *AudioPlayerLoaders::setupLoader(MediaOverviewType type, const void *objId, SetupError &err) { +AudioPlayerLoader *AudioPlayerLoaders::setupLoader(MediaOverviewType type, const void *objId, SetupError &err, qint64 position) { err = SetupErrorAtStart; QMutexLocker lock(&playerMutex); AudioPlayer *voice = audioPlayer(); @@ -1410,7 +1591,7 @@ AudioPlayerLoader *AudioPlayerLoaders::setupLoader(MediaOverviewType type, const *l = new FFMpegLoader(m->fname, m->data); int ret; - if (!(*l)->open()) { + if (!(*l)->open(position)) { m->state = AudioPlayerStoppedAtStart; return 0; } @@ -1422,10 +1603,6 @@ AudioPlayerLoader *AudioPlayerLoaders::setupLoader(MediaOverviewType type, const m->duration = duration; m->frequency = (*l)->frequency(); if (!m->frequency) m->frequency = AudioVoiceMsgFrequency; - m->skipStart = 0; - m->skipEnd = duration; - m->position = 0; - m->started = 0; err = SetupNoErrorStarted; } else { if (!m->skipEnd) { @@ -1985,7 +2162,7 @@ public: _opened(false) { } - bool open() { + bool open(qint64 position = 0) { if (!AudioPlayerLoader::openFile()) { return false; } diff --git a/Telegram/SourceFiles/audio.h b/Telegram/SourceFiles/audio.h index f28a21d5e..323613c72 100644 --- a/Telegram/SourceFiles/audio.h +++ b/Telegram/SourceFiles/audio.h @@ -25,14 +25,19 @@ void audioPlayNotify(); void audioFinish(); enum AudioPlayerState { - AudioPlayerStopped, - AudioPlayerStoppedAtStart, - AudioPlayerStarting, - AudioPlayerPlaying, - AudioPlayerFinishing, - AudioPlayerPausing, - AudioPlayerPaused, - AudioPlayerResuming, + AudioPlayerStopped = 0x01, + AudioPlayerStoppedAtEnd = 0x02, + AudioPlayerStoppedAtError = 0x03, + AudioPlayerStoppedAtStart = 0x04, + AudioPlayerStoppedMask = 0x07, + + AudioPlayerStarting = 0x08, + AudioPlayerPlaying = 0x10, + AudioPlayerFinishing = 0x18, + AudioPlayerPausing = 0x20, + AudioPlayerPaused = 0x28, + AudioPlayerPausedAtEnd = 0x30, + AudioPlayerResuming = 0x38, }; class AudioPlayerFader; @@ -45,9 +50,11 @@ public: AudioPlayer(); - void play(const AudioMsgId &audio); - void play(const SongMsgId &song); - void pauseresume(MediaOverviewType type); + void play(const AudioMsgId &audio, int64 position = 0); + void play(const SongMsgId &song, int64 position = 0); + void pauseresume(MediaOverviewType type, bool fast = false); + void seek(int64 position); // type == OverviewDocuments + void stop(MediaOverviewType type); void currentState(AudioMsgId *audio, AudioPlayerState *state = 0, int64 *position = 0, int64 *duration = 0, int32 *frequency = 0); void currentState(SongMsgId *song, AudioPlayerState *state = 0, int64 *position = 0, int64 *duration = 0, int32 *frequency = 0); @@ -75,21 +82,28 @@ signals: void stopped(const AudioMsgId &audio); void stopped(const SongMsgId &song); - void loaderOnStart(const AudioMsgId &audio); - void loaderOnStart(const SongMsgId &song); + void stoppedOnError(const AudioMsgId &audio); + void stoppedOnError(const SongMsgId &song); + + void loaderOnStart(const AudioMsgId &audio, qint64 position); + void loaderOnStart(const SongMsgId &song, qint64 position); void loaderOnCancel(const AudioMsgId &audio); void loaderOnCancel(const SongMsgId &song); void faderOnTimer(); + void suppressSong(); void unsuppressSong(); void suppressAll(); + void songVolumeChanged(); + private: - bool startedOther(MediaOverviewType type, bool &fadedStart); + bool fadedStop(MediaOverviewType type, bool *fadedStart = 0); bool updateCurrentStarted(MediaOverviewType type, int32 pos = -1); + bool checkCurrentALError(MediaOverviewType type); struct Msg { Msg() : position(0), duration(0), frequency(AudioVoiceMsgFrequency), skipStart(0), skipEnd(0), loading(0), started(0), @@ -124,6 +138,7 @@ private: }; void currentState(Msg *current, AudioPlayerState *state, int64 *position, int64 *duration, int32 *frequency); + void setStoppedState(Msg *current, AudioPlayerState state = AudioPlayerStopped); int32 _audioCurrent; AudioMsg _audioData[AudioVoiceMsgSimultaneously]; @@ -210,6 +225,7 @@ public slots: void onSuppressSong(); void onUnsuppressSong(); void onSuppressAll(); + void onSongVolumeChanged(); private: @@ -220,12 +236,13 @@ private: EmitNeedToPreload = 0x08, }; int32 updateOnePlayback(AudioPlayer::Msg *m, bool &hasPlaying, bool &hasFading, float64 suppressGain, bool suppressGainChanged); + void setStoppedState(AudioPlayer::Msg *m, AudioPlayerState state = AudioPlayerStopped); QTimer _timer, _pauseTimer; QMutex _pauseMutex; bool _pauseFlag, _paused; - bool _suppressAll, _suppressAllAnim, _suppressSong, _suppressSongAnim; + bool _suppressAll, _suppressAllAnim, _suppressSong, _suppressSongAnim, _songVolumeChanged; anim::fvalue _suppressAllGain, _suppressSongGain; uint64 _suppressAllStart, _suppressSongStart; @@ -250,8 +267,8 @@ public slots: void onInit(); - void onStart(const AudioMsgId &audio); - void onStart(const SongMsgId &audio); + void onStart(const AudioMsgId &audio, qint64 position); + void onStart(const SongMsgId &audio, qint64 position); void onLoad(const AudioMsgId &audio); void onLoad(const SongMsgId &audio); @@ -269,6 +286,7 @@ private: void emitError(MediaOverviewType type); void clear(MediaOverviewType type); + void setStoppedState(AudioPlayer::Msg *m, AudioPlayerState state = AudioPlayerStopped); AudioMsgId clearAudio(); SongMsgId clearSong(); @@ -278,8 +296,8 @@ private: SetupErrorLoadedFull = 2, SetupNoErrorStarted = 3, }; - void loadData(MediaOverviewType type, const void *objId); - AudioPlayerLoader *setupLoader(MediaOverviewType type, const void *objId, SetupError &err); + void loadData(MediaOverviewType type, const void *objId, qint64 position); + AudioPlayerLoader *setupLoader(MediaOverviewType type, const void *objId, SetupError &err, qint64 position); AudioPlayer::Msg *checkLoader(MediaOverviewType type); }; diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 31c3d0965..e887ecb72 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -87,7 +87,7 @@ enum { AudioVoiceMsgSimultaneously = 4, AudioSongSimultaneously = 4, AudioCheckPositionTimeout = 100, // 100ms per check audio pos - AudioCheckPositionDelta = 4800, // update position called each 4800 samples + AudioCheckPositionDelta = 2400, // update position called each 2400 samples AudioFadeTimeout = 7, // 7ms AudioFadeDuration = 500, AudioVoiceMsgSkip = 400, // 200ms diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index f81270584..b346267d1 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -1929,9 +1929,16 @@ void DialogsWidget::resizeEvent(QResizeEvent *e) { _addContact.move(w - _addContact.width() - st::dlgPaddingHor, _filter.y()); _cancelSearch.move(w - _cancelSearch.width() - st::dlgPaddingHor, _filter.y()); scroll.move(0, _filter.height() + 2 * st::dlgFilterPadding); + + int32 addToY = App::main() ? App::main()->contentScrollAddToY() : 0; + int32 newScrollY = scroll.scrollTop() + addToY; scroll.resize(w, height() - _filter.y() - _filter.height() - st::dlgFilterPadding - st::dlgPaddingVer); list.resize(w, list.height()); - onListScroll(); + if (addToY) { + scroll.scrollToY(newScrollY); + } else { + onListScroll(); + } } void DialogsWidget::keyPressEvent(QKeyEvent *e) { diff --git a/Telegram/SourceFiles/dropdown.cpp b/Telegram/SourceFiles/dropdown.cpp index cf41f42c3..1b755bd0d 100644 --- a/Telegram/SourceFiles/dropdown.cpp +++ b/Telegram/SourceFiles/dropdown.cpp @@ -2611,6 +2611,15 @@ bool MentionsInner::moveSel(int direction) { } bool MentionsInner::select() { + QString sel = getSelected(); + if (!sel.isEmpty()) { + emit chosen(sel); + return true; + } + return false; +} + +QString MentionsInner::getSelected() const { int32 maxSel = (_rows->isEmpty() ? (_hrows->isEmpty() ? _crows->size() : _hrows->size()) : _rows->size()); if (_sel >= 0 && _sel < maxSel) { QString result; @@ -2628,10 +2637,9 @@ bool MentionsInner::select() { result = '/' + command.command; } } - emit chosen(result); - return true; + return result; } - return false; + return QString(); } void MentionsInner::mousePressEvent(QMouseEvent *e) { @@ -2991,6 +2999,10 @@ int32 MentionsDropdown::innerBottom() { return _scroll.scrollTop() + _scroll.height(); } +QString MentionsDropdown::getSelected() const { + return _inner.getSelected(); +} + bool MentionsDropdown::eventFilter(QObject *obj, QEvent *e) { if (isHidden()) return QWidget::eventFilter(obj, e); if (e->type() == QEvent::KeyPress) { diff --git a/Telegram/SourceFiles/dropdown.h b/Telegram/SourceFiles/dropdown.h index 7335a17ff..7a43c6b1f 100644 --- a/Telegram/SourceFiles/dropdown.h +++ b/Telegram/SourceFiles/dropdown.h @@ -503,6 +503,8 @@ public: bool moveSel(int direction); bool select(); + QString getSelected() const; + signals: void chosen(QString mentionOrHashtag); @@ -552,6 +554,7 @@ public: int32 innerBottom(); bool eventFilter(QObject *obj, QEvent *e); + QString getSelected() const; ~MentionsDropdown(); diff --git a/Telegram/SourceFiles/gui/style_core.h b/Telegram/SourceFiles/gui/style_core.h index 06157981a..4421091f7 100644 --- a/Telegram/SourceFiles/gui/style_core.h +++ b/Telegram/SourceFiles/gui/style_core.h @@ -26,8 +26,17 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include #include +inline QPoint rtlpoint(int x, int y, int outerw) { + return QPoint(rtl() ? (outerw - x) : x, y); +} +inline QPoint rtlpoint(const QPoint &p, int outerw) { + return rtl() ? QPoint(outerw - p.x(), p.y()) : p; +} inline QRect rtlrect(int x, int y, int w, int h, int outerw) { - return rtl() ? QRect(outerw - x - w, y, w, h) : QRect(x, y, w, h); + return QRect(rtl() ? (outerw - x - w) : x, y, w, h); +} +inline QRect rtlrect(const QRect &r, int outerw) { + return rtl() ? QRect(outerw - r.x() - r.width(), r.y(), r.width(), r.height()) : r; } inline QRect centerrect(const QRect &inRect, const QRect &rect) { return QRect(inRect.x() + (inRect.width() - rect.width()) / 2, inRect.y() + (inRect.height() - rect.height()) / 2, rect.width(), rect.height()); diff --git a/Telegram/SourceFiles/gui/text.cpp b/Telegram/SourceFiles/gui/text.cpp index d1de1358f..4b03a03a6 100644 --- a/Telegram/SourceFiles/gui/text.cpp +++ b/Telegram/SourceFiles/gui/text.cpp @@ -24,7 +24,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org namespace { - const QRegularExpression _reDomain(QString::fromUtf8("(?_font; int flags = block->flags(); - if (!flags && block->lnkIndex()) { + if (block->lnkIndex()) { const TextLinkPtr &l(_t->_links.at(block->lnkIndex() - 1)); if (l == _overLnk) { if (l == _downLnk || !_downLnk) { - flags = _textStyle->lnkOverFlags->flags(); + newFont = _textStyle->lnkOverFlags; } else { - flags = _textStyle->lnkFlags->flags(); + newFont = _textStyle->lnkFlags; } } else { - flags = _textStyle->lnkFlags->flags(); + newFont = _textStyle->lnkFlags; } + } else { + flags = block->flags(); + if (flags & TextBlockBold) newFont = newFont->bold(); + if (flags & TextBlockItalic) newFont = newFont->italic(); + if (flags & TextBlockUnderline) newFont = newFont->underline(); } - if (flags & TextBlockBold) newFont = newFont->bold(); - if (flags & TextBlockItalic) newFont = newFont->italic(); - if (flags & TextBlockUnderline) newFont = newFont->underline(); if (newFont != _f) { _f = newFont; _e->fnt = _f->f; diff --git a/Telegram/SourceFiles/gui/twidget.h b/Telegram/SourceFiles/gui/twidget.h index c1359f7f5..36da53381 100644 --- a/Telegram/SourceFiles/gui/twidget.h +++ b/Telegram/SourceFiles/gui/twidget.h @@ -17,20 +17,6 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -class Widget : public QWidget { -public: - - Widget(QWidget *parent = 0) : QWidget(parent) { - } - void moveToLeft(int x, int y, int outerw) { - move(rtl() ? (outerw - x - width()) : x, y); - } - void moveToRight(int x, int y, int outerw) { - move(rtl() ? x : (outerw - x - width()), y); - } - -}; - namespace App { const QPixmap &sprite(); } @@ -119,14 +105,20 @@ public: void drawSpriteCenter(const QRect &in, const style::sprite &sprite) { return drawPixmap(QPoint(in.x() + (in.width() - sprite.pxWidth()) / 2, in.y() + (in.height() - sprite.pxHeight()) / 2), App::sprite(), sprite); } + void drawSpriteCenterLeft(const QRect &in, int outerw, const style::sprite &sprite) { + return drawPixmapLeft(QPoint(in.x() + (in.width() - sprite.pxWidth()) / 2, in.y() + (in.height() - sprite.pxHeight()) / 2), outerw, App::sprite(), sprite); + } + void drawSpriteCenterRight(const QRect &in, int outerw, const style::sprite &sprite) { + return drawPixmapRight(QPoint(in.x() + (in.width() - sprite.pxWidth()) / 2, in.y() + (in.height() - sprite.pxHeight()) / 2), outerw, App::sprite(), sprite); + } }; -class TWidget : public Widget { +class TWidget : public QWidget { Q_OBJECT public: - TWidget(QWidget *parent = 0) : Widget(parent) { + TWidget(QWidget *parent = 0) : QWidget(parent) { } TWidget *tparent() { return qobject_cast(parentWidget()); @@ -140,6 +132,27 @@ public: virtual void enterFromChildEvent(QEvent *e) { // e -- from leaveEvent() of child TWidget } + void moveToLeft(int x, int y, int outerw) { + move(rtl() ? (outerw - x - width()) : x, y); + } + void moveToRight(int x, int y, int outerw) { + move(rtl() ? x : (outerw - x - width()), y); + } + QPoint myrtlpoint(int x, int y) const { + return rtlpoint(x, y, width()); + } + QPoint myrtlpoint(const QPoint p) const { + return rtlpoint(p, width()); + } + QRect myrtlrect(int x, int y, int w, int h) const { + return rtlrect(x, y, w, h, width()); + } + QRect myrtlrect(const QRect &r) { + return rtlrect(r, width()); + } + void rtlupdate(const QRect &r) { + update(myrtlrect(r)); + } bool event(QEvent *e) { return QWidget::event(e); } @@ -149,12 +162,12 @@ protected: void enterEvent(QEvent *e) { TWidget *p(tparent()); if (p) p->leaveToChildEvent(e); - return Widget::enterEvent(e); + return QWidget::enterEvent(e); } void leaveEvent(QEvent *e) { TWidget *p(tparent()); if (p) p->enterFromChildEvent(e); - return Widget::leaveEvent(e); + return QWidget::leaveEvent(e); } private: diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 2e2b5d79c..c272b0fd1 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -372,6 +372,28 @@ bool History::updateTyping(uint64 ms, uint32 dots, bool force) { return changed; } +void History::eraseFromOverview(MediaOverviewType type, MsgId msgId) { + if (_overviewIds[type].isEmpty()) return; + + History::MediaOverviewIds::iterator i = _overviewIds[type].find(msgId); + if (i == _overviewIds[type].cend()) return; + + _overviewIds[type].erase(i); + for (History::MediaOverview::iterator i = _overview[type].begin(), e = _overview[type].end(); i != e; ++i) { + if ((*i) == msgId) { + _overview[type].erase(i); + if (_overviewCount[type] > 0) { + --_overviewCount[type]; + if (!_overviewCount[type]) { + _overviewCount[type] = -1; + } + } + break; + } + } + if (App::wnd()) App::wnd()->mediaOverviewUpdated(peer, type); +} + bool DialogsList::del(const PeerId &peerId, DialogRow *replacedBy) { RowByPeer::iterator i = rowByPeer.find(peerId); if (i == rowByPeer.cend()) return false; @@ -803,13 +825,23 @@ HistoryItem *History::doAddToBack(HistoryBlock *to, bool newBlock, HistoryItem * } HistoryMedia *media = adding->getMedia(true); if (media) { - MediaOverviewType t = mediaToOverviewType(media->type()); + HistoryMediaType mt = media->type(); + MediaOverviewType t = mediaToOverviewType(mt); if (t != OverviewCount) { if (_overviewIds[t].constFind(adding->id) == _overviewIds[t].cend()) { _overview[t].push_back(adding->id); _overviewIds[t].insert(adding->id, NullType()); if (_overviewCount[t] > 0) ++_overviewCount[t]; - if (App::wnd()) App::wnd()->mediaOverviewUpdated(peer); + if (App::wnd()) App::wnd()->mediaOverviewUpdated(peer, t); + } + if (mt == MediaTypeDocument && static_cast(media)->document()->song()) { + t = OverviewAudioDocuments; + if (_overviewIds[t].constFind(adding->id) == _overviewIds[t].cend()) { + _overview[t].push_back(adding->id); + _overviewIds[t].insert(adding->id, NullType()); + if (_overviewCount[t] > 0) ++_overviewCount[t]; + if (App::wnd()) App::wnd()->mediaOverviewUpdated(peer, t); + } } } } @@ -933,16 +965,27 @@ void History::addToFront(const QVector &slice) { ++skip; if (loadedAtBottom()) { // add photos to overview and authors to lastAuthors + int32 mask = 0; QList *lastAuthors = peer->chat ? &(peer->asChat()->lastAuthors) : 0; for (int32 i = block->size(); i > 0; --i) { HistoryItem *item = (*block)[i - 1]; HistoryMedia *media = item->getMedia(true); if (media) { - MediaOverviewType t = mediaToOverviewType(media->type()); + HistoryMediaType mt = media->type(); + MediaOverviewType t = mediaToOverviewType(mt); if (t != OverviewCount) { if (_overviewIds[t].constFind(item->id) == _overviewIds[t].cend()) { _overview[t].push_front(item->id); _overviewIds[t].insert(item->id, NullType()); + mask |= (1 << t); + } + if (mt == MediaTypeDocument && static_cast(media)->document()->song()) { + t = OverviewAudioDocuments; + if (_overviewIds[t].constFind(item->id) == _overviewIds[t].cend()) { + _overview[t].push_front(item->id); + _overviewIds[t].insert(item->id, NullType()); + mask |= (1 << t); + } } } } @@ -987,7 +1030,9 @@ void History::addToFront(const QVector &slice) { } } } - if (App::wnd()) App::wnd()->mediaOverviewUpdated(peer); + for (int32 t = 0; t < OverviewCount; ++t) { + if ((mask & (1 << t)) && App::wnd()) App::wnd()->mediaOverviewUpdated(peer, MediaOverviewType(t)); + } } } else { delete block; @@ -1062,10 +1107,14 @@ void History::addToBack(const QVector &slice) { delete block; } if (!wasLoadedAtBottom && loadedAtBottom()) { // add all loaded photos to overview + int32 mask = 0; for (int32 i = 0; i < OverviewCount; ++i) { if (_overviewCount[i] == 0) continue; // all loaded - _overview[i].clear(); - _overviewIds[i].clear(); + if (!_overview[i].isEmpty() || !_overviewIds[i].isEmpty()) { + _overview[i].clear(); + _overviewIds[i].clear(); + mask |= (1 << i); + } } for (int32 i = 0; i < size(); ++i) { HistoryBlock *b = (*this)[i]; @@ -1073,15 +1122,29 @@ void History::addToBack(const QVector &slice) { HistoryItem *item = (*b)[j]; HistoryMedia *media = item->getMedia(true); if (media) { - MediaOverviewType t = mediaToOverviewType(media->type()); - if (t != OverviewCount && _overviewCount[t] != 0) { - _overview[t].push_back(item->id); - _overviewIds[t].insert(item->id, NullType()); + HistoryMediaType mt = media->type(); + MediaOverviewType t = mediaToOverviewType(mt); + if (t != OverviewCount) { + if (_overviewCount[t] != 0) { + _overview[t].push_back(item->id); + _overviewIds[t].insert(item->id, NullType()); + mask |= (1 << t); + } + if (mt == MediaTypeDocument && static_cast(media)->document()->song()) { + t = OverviewAudioDocuments; + if (_overviewCount[t] != 0) { + _overview[t].push_back(item->id); + _overviewIds[t].insert(item->id, NullType()); + mask |= (1 << t); + } + } } } } } - if (App::wnd()) App::wnd()->mediaOverviewUpdated(peer); + for (int32 t = 0; t < OverviewCount; ++t) { + if ((mask & (1 << t)) && App::wnd()) App::wnd()->mediaOverviewUpdated(peer, MediaOverviewType(t)); + } } if (wasEmpty && !isEmpty()) { HistoryBlock *dateBlock = new HistoryBlock(this); @@ -1328,11 +1391,13 @@ void History::clear(bool leaveItems) { showFrom = 0; } for (int32 i = 0; i < OverviewCount; ++i) { - if (_overviewCount[i] == 0) _overviewCount[i] = _overview[i].size(); - _overview[i].clear(); - _overviewIds[i].clear(); + if (!_overview[i].isEmpty() || !_overviewIds[i].isEmpty()) { + if (_overviewCount[i] == 0) _overviewCount[i] = _overview[i].size(); + _overview[i].clear(); + _overviewIds[i].clear(); + if (App::wnd() && !App::quiting()) App::wnd()->mediaOverviewUpdated(peer, MediaOverviewType(i)); + } } - if (App::wnd() && !App::quiting()) App::wnd()->mediaOverviewUpdated(peer); for (Parent::const_iterator i = cbegin(), e = cend(); i != e; ++i) { if (leaveItems) { (*i)->clear(true); @@ -1580,23 +1645,10 @@ void HistoryItem::destroy() { } HistoryMedia *m = getMedia(true); MediaOverviewType t = m ? mediaToOverviewType(m->type()) : OverviewCount; - if (t != OverviewCount && !history()->_overviewIds[t].isEmpty()) { - History::MediaOverviewIds::iterator i = history()->_overviewIds[t].find(id); - if (i != history()->_overviewIds[t].cend()) { - history()->_overviewIds[t].erase(i); - for (History::MediaOverview::iterator i = history()->_overview[t].begin(), e = history()->_overview[t].end(); i != e; ++i) { - if ((*i) == id) { - history()->_overview[t].erase(i); - if (history()->_overviewCount[t] > 0) { - --history()->_overviewCount[t]; - if (!history()->_overviewCount[t]) { - history()->_overviewCount[t] = -1; - } - } - break; - } - } - if (App::wnd()) App::wnd()->mediaOverviewUpdated(history()->peer); + if (t != OverviewCount) { + history()->eraseFromOverview(t, id); + if (m->type() == MediaTypeDocument && static_cast(m)->document()->song()) { + history()->eraseFromOverview(OverviewAudioDocuments, id); } } delete this; @@ -2339,8 +2391,9 @@ void HistoryVideo::draw(QPainter &p, const HistoryItem *parent, bool selected, i p.setPen(status->p); if (data->loader) { - if (_dldTextCache.isEmpty() || _dldDone != data->loader->currentOffset()) { - _dldDone = data->loader->currentOffset(); + int32 offset = data->loader->currentOffset(); + if (_dldTextCache.isEmpty() || _dldDone != offset) { + _dldDone = offset; _dldTextCache = formatDownloadText(_dldDone, data->size); } statusText = _dldTextCache; @@ -2563,7 +2616,7 @@ void HistoryAudio::draw(QPainter &p, const HistoryItem *parent, bool selected, i img = out ? st::mediaAudioOutImg : st::mediaAudioInImg; } else if (already || hasdata) { bool showPause = false; - if (playing.msgId == parent->id && playingState != AudioPlayerStopped && playingState != AudioPlayerStoppedAtStart) { + if (playing.msgId == parent->id && !(playingState & AudioPlayerStoppedMask) && playingState != AudioPlayerFinishing) { statusText = formatDurationText(playingPosition / (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency)) + qsl(" / ") + formatDurationText(playingDuration / (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency)); showPause = (playingState == AudioPlayerPlaying || playingState == AudioPlayerResuming || playingState == AudioPlayerStarting); } else { @@ -2572,8 +2625,9 @@ void HistoryAudio::draw(QPainter &p, const HistoryItem *parent, bool selected, i img = out ? (showPause ? st::mediaPauseOutImg : st::mediaPlayOutImg) : (showPause ? st::mediaPauseInImg : st::mediaPlayInImg); } else { if (data->loader) { - if (_dldTextCache.isEmpty() || _dldDone != data->loader->currentOffset()) { - _dldDone = data->loader->currentOffset(); + int32 offset = data->loader->currentOffset(); + if (_dldTextCache.isEmpty() || _dldDone != offset) { + _dldDone = offset; _dldTextCache = formatDownloadText(_dldDone, data->size); } statusText = _dldTextCache; @@ -2733,7 +2787,7 @@ namespace { SongData *song = document->song(); if (!song || (song->title.isEmpty() && song->performer.isEmpty())) return document->name; if (song->performer.isEmpty()) return song->title; - return song->performer + QString::fromUtf8(" \xe2\x80\x94 ") + (song->title.isEmpty() ? qsl("Unknown Track") : song->title); + return song->performer + QString::fromUtf8(" \xe2\x80\x93 ") + (song->title.isEmpty() ? qsl("Unknown Track") : song->title); } } @@ -2905,17 +2959,19 @@ void HistoryDocument::draw(QPainter &p, const HistoryItem *parent, bool selected img = out ? st::mediaAudioOutImg : st::mediaAudioInImg; } else if (already || hasdata) { bool showPause = false; - if (playing.msgId == parent->id && playingState != AudioPlayerStopped && playingState != AudioPlayerStoppedAtStart) { + if (playing.msgId == parent->id && !(playingState & AudioPlayerStoppedMask) && playingState != AudioPlayerFinishing) { statusText = formatDurationText(playingPosition / (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency)) + qsl(" / ") + formatDurationText(playingDuration / (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency)); showPause = (playingState == AudioPlayerPlaying || playingState == AudioPlayerResuming || playingState == AudioPlayerStarting); } else { statusText = formatDurationText(data->song()->duration); } + if (!showPause && playing.msgId == parent->id && App::main() && App::main()->player()->seekingSong(playing)) showPause = true; img = out ? (showPause ? st::mediaPauseOutImg : st::mediaPlayOutImg) : (showPause ? st::mediaPauseInImg : st::mediaPlayInImg); } else { if (data->loader) { - if (_dldTextCache.isEmpty() || _dldDone != data->loader->currentOffset()) { - _dldDone = data->loader->currentOffset(); + int32 offset = data->loader->currentOffset(); + if (_dldTextCache.isEmpty() || _dldDone != offset) { + _dldDone = offset; _dldTextCache = formatDownloadText(_dldDone, data->size); } statusText = _dldTextCache; @@ -2936,8 +2992,9 @@ void HistoryDocument::draw(QPainter &p, const HistoryItem *parent, bool selected } statusText = _uplTextCache; } else if (data->loader) { - if (_dldTextCache.isEmpty() || _dldDone != data->loader->currentOffset()) { - _dldDone = data->loader->currentOffset(); + int32 offset = data->loader->currentOffset(); + if (_dldTextCache.isEmpty() || _dldDone != offset) { + _dldDone = offset; _dldTextCache = formatDownloadText(_dldDone, data->size); } statusText = _dldTextCache; @@ -3147,8 +3204,8 @@ HistorySticker::HistorySticker(DocumentData *document) : HistoryMedia() , pixw(1), pixh(1), data(document), lastw(0) { data->thumb->load(); - if (!data->sticker->alt.isEmpty()) { - _emoji = data->sticker->alt; + if (!data->sticker()->alt.isEmpty()) { + _emoji = data->sticker()->alt; } } diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index c952e5f73..f13c0f922 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -106,6 +106,7 @@ enum MediaOverviewType { OverviewVideos, OverviewDocuments, OverviewAudios, + OverviewAudioDocuments, OverviewCount }; @@ -127,6 +128,7 @@ inline MTPMessagesFilter typeToMediaFilter(MediaOverviewType &type) { case OverviewVideos: return MTP_inputMessagesFilterVideo(); case OverviewDocuments: return MTP_inputMessagesFilterDocument(); case OverviewAudios: return MTP_inputMessagesFilterAudio(); + case OverviewAudioDocuments: return MTP_inputMessagesFilterAudioDocuments(); default: type = OverviewCount; break; } return MTPMessagesFilter(); @@ -286,6 +288,8 @@ struct History : public QList { MediaOverviewIds _overviewIds[OverviewCount]; int32 _overviewCount[OverviewCount]; // -1 - not loaded, 0 - all loaded, > 0 - count, but not all loaded + void eraseFromOverview(MediaOverviewType type, MsgId msgId); + static const int32 ScrollMax = INT_MAX; }; diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index e9e0344b1..6570c1da7 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -2225,6 +2225,7 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) connect(&_attachPhoto, SIGNAL(clicked()), this, SLOT(onPhotoSelect())); connect(&_field, SIGNAL(submitted(bool)), this, SLOT(onSend(bool))); connect(&_field, SIGNAL(cancelled()), this, SLOT(onCancel())); + connect(&_field, SIGNAL(tabbed()), this, SLOT(onFieldTabbed())); connect(&_field, SIGNAL(resized()), this, SLOT(onFieldResize())); connect(&_field, SIGNAL(focused()), this, SLOT(onFieldFocused())); connect(&imageLoader, SIGNAL(imageReady()), this, SLOT(onPhotoReady())); @@ -3501,20 +3502,7 @@ bool HistoryWidget::showStep(float64 ms) { _bgAnimCache = _animCache = _animTopBarCache = _bgAnimTopBarCache = QPixmap(); App::main()->topBar()->stopAnim(); App::main()->topBar()->enableShadow(); - if (hist && hist->readyForWork()) { - _scroll.show(); - if (hist->lastScrollTop == History::ScrollMax) { - _scroll.scrollToY(hist->lastScrollTop); - } - - onListScroll(); - } - if (hist) { - if (!_histInited) checkUnreadLoaded(); - if (_histNeedUpdate) updateListSize(); - } - updateControlsVisibility(); - App::wnd()->setInnerFocus(); + doneShow(); } else { a_bgCoord.update(dt1, st::introHideFunc); a_bgAlpha.update(dt1, st::introAlphaHideFunc); @@ -3526,6 +3514,23 @@ bool HistoryWidget::showStep(float64 ms) { return res; } +void HistoryWidget::doneShow() { + if (hist && hist->readyForWork()) { + _scroll.show(); + if (hist->lastScrollTop == History::ScrollMax) { + _scroll.scrollToY(hist->lastScrollTop); + } + + onListScroll(); + } + if (hist) { + if (!_histInited) checkUnreadLoaded(); + if (_histNeedUpdate) updateListSize(); + } + updateControlsVisibility(); + App::wnd()->setInnerFocus(); +} + void HistoryWidget::animStop() { if (!_showAnim.animating()) return; _showAnim.stop(); @@ -4502,7 +4507,7 @@ void HistoryWidget::resizeEvent(QResizeEvent *e) { _attachPhoto.move(_attachDocument.x(), _attachDocument.y()); _replyForwardPreviewCancel.move(width() - _replyForwardPreviewCancel.width(), _field.y() - st::sendPadding - _replyForwardPreviewCancel.height()); - updateListSize(); + updateListSize(App::main() ? App::main()->contentScrollAddToY() : 0); bool kbShowShown = hist && !_kbShown && _keyboard.hasMarkup(); _field.resize(width() - _send.width() - _attachDocument.width() - _attachEmoji.width() - (kbShowShown ? _kbShow.width() : 0) - (_cmdStartShown ? _cmdStart.width() : 0), _field.height()); @@ -4841,6 +4846,13 @@ void HistoryWidget::keyPressEvent(QKeyEvent *e) { } } +void HistoryWidget::onFieldTabbed() { + QString sel = _attachMention.isHidden() ? QString() : _attachMention.getSelected(); + if (!sel.isEmpty()) { + _field.onMentionHashtagOrBotCommandInsert(sel); + } +} + void HistoryWidget::onStickerSend(DocumentData *sticker) { if (!hist || !sticker) return; @@ -5403,9 +5415,9 @@ void HistoryWidget::paintEvent(QPaintEvent *e) { return; } - bool hasTopBar = !App::main()->topBar()->isHidden(); + bool hasTopBar = !App::main()->topBar()->isHidden(), hasPlayer = !App::main()->player()->isHidden(); QRect fill(0, 0, width(), App::main()->height()); - int fromy = hasTopBar ? (-st::topBarHeight) : 0, x = 0, y = 0; + int fromy = (hasTopBar ? (-st::topBarHeight) : 0) + (hasPlayer ? (-st::playerHeight) : 0), x = 0, y = 0; QPixmap cached = App::main()->cachedBackground(fill, x, y); if (cached.isNull()) { const QPixmap &pix(*cChatBackground()); diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index e5204709c..0dced5131 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -416,6 +416,7 @@ public: void animShow(const QPixmap &bgAnimCache, const QPixmap &bgAnimTopBarCache, bool back = false); bool showStep(float64 ms); void animStop(); + void doneShow(); QPoint clampMousePosition(QPoint point); @@ -528,6 +529,7 @@ public slots: void onMentionHashtagOrBotCommandInsert(QString str); void onTextChange(); + void onFieldTabbed(); void onStickerSend(DocumentData *sticker); void onVisibleChanged(); diff --git a/Telegram/SourceFiles/localstorage.cpp b/Telegram/SourceFiles/localstorage.cpp index 243a93f44..c0f979b7b 100644 --- a/Telegram/SourceFiles/localstorage.cpp +++ b/Telegram/SourceFiles/localstorage.cpp @@ -1036,6 +1036,14 @@ namespace { cSetDialogLastPath(path); } break; + case dbiSongVolume: { + qint32 v; + stream >> v; + if (!_checkStreamStatus(stream)) return false; + + cSetSongVolume(snap(v / 1e6, 0., 1.)); + } break; + default: LOG(("App Error: unknown blockId in _readSetting: %1").arg(blockId)); return false; @@ -1257,7 +1265,7 @@ namespace { _writeMap(WriteMapFast); } - uint32 size = 11 * (sizeof(quint32) + sizeof(qint32)); + uint32 size = 12 * (sizeof(quint32) + sizeof(qint32)); size += sizeof(quint32) + _stringSize(cAskDownloadPath() ? QString() : cDownloadPath()); size += sizeof(quint32) + sizeof(qint32) + (cRecentEmojisPreload().isEmpty() ? cGetRecentEmojis().size() : cRecentEmojisPreload().size()) * (sizeof(uint64) + sizeof(ushort)); size += sizeof(quint32) + sizeof(qint32) + cEmojiVariants().size() * (sizeof(uint32) + sizeof(uint64)); @@ -1278,6 +1286,7 @@ namespace { data.stream << quint32(dbiCompressPastedImage) << qint32(cCompressPastedImage()); data.stream << quint32(dbiEmojiTab) << qint32(cEmojiTab()); data.stream << quint32(dbiDialogLastPath) << cDialogLastPath(); + data.stream << quint32(dbiSongVolume) << qint32(qRound(cSongVolume() * 1e6)); { RecentEmojisPreload v(cRecentEmojisPreload()); diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 635f152fc..c1a80ed29 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -277,7 +277,7 @@ void TopBarWidget::showAll() { resizeEvent(0); return; } - PeerData *p = App::main() ? App::main()->profilePeer() : 0; + PeerData *p = App::main() ? App::main()->profilePeer() : 0, *o = App::main() ? App::main()->overviewPeer() : 0; if (p && (p->chat || p->asUser()->contact >= 0)) { if (p->chat) { if (p->asChat()->forbidden) { @@ -324,7 +324,7 @@ void TopBarWidget::showAll() { _mediaType.hide(); } } - if (App::main() && App::main()->historyPeer() && !p && _clearSelection.isHidden() && !cWideMode()) { + if (App::main() && App::main()->historyPeer() && !o && !p && _clearSelection.isHidden() && !cWideMode()) { _info.show(); } else { _info.hide(); @@ -350,9 +350,12 @@ MainWidget *TopBarWidget::main() { return static_cast(parentWidget()); } -MainWidget::MainWidget(Window *window) : QWidget(window), _started(0), failedObjId(0), _toForwardNameVersion(0), _dialogsWidth(st::dlgMinWidth), -dialogs(this), history(this), profile(0), overview(0), _topBar(this), _forwardConfirm(0), hider(0), _mediaType(this), _mediaTypeMask(0), -updGoodPts(0), updLastPts(0), updPtsCount(0), updDate(0), updQts(-1), updSeq(0), updInited(false), updSkipPtsUpdateLevel(0), _onlineRequest(0), _lastWasOnline(false), _lastSetOnline(0), _isIdle(false), +MainWidget::MainWidget(Window *window) : QWidget(window), +_started(0), failedObjId(0), _toForwardNameVersion(0), _dialogsWidth(st::dlgMinWidth), +dialogs(this), history(this), profile(0), overview(0), _player(this), _topBar(this), +_forwardConfirm(0), hider(0), _contentScrollAddToY(0), _playerHeight(0), _mediaType(this), _mediaTypeMask(0), +updGoodPts(0), updLastPts(0), updPtsCount(0), updDate(0), updQts(-1), updSeq(0), updInited(false), updSkipPtsUpdateLevel(0), +_onlineRequest(0), _lastWasOnline(false), _lastSetOnline(0), _isIdle(false), _failDifferenceTimeout(1), _lastUpdateTime(0), _cachedX(0), _cachedY(0), _background(0), _api(new ApiWrap(this)) { setGeometry(QRect(0, st::titleHeight, App::wnd()->width(), App::wnd()->height() - st::titleHeight)); @@ -397,7 +400,10 @@ _failDifferenceTimeout(1), _lastUpdateTime(0), _cachedX(0), _cachedY(0), _backgr App::wnd()->getTitle()->updateBackButton(); _topBar.hide(); + _player.hide(); + _topBar.raise(); + _player.raise(); dialogs.raise(); _mediaType.raise(); @@ -613,7 +619,7 @@ void MainWidget::noHider(HistoryHider *destroyed) { onPeerShown(history.peer()); if (profile || overview || (history.peer() && history.peer()->id)) { dialogs.enableShadow(false); - QPixmap animCache = myGrab(this, QRect(0, st::topBarHeight, _dialogsWidth, height() - st::topBarHeight)), + QPixmap animCache = myGrab(this, QRect(0, _playerHeight + st::topBarHeight, _dialogsWidth, height() - _playerHeight - st::topBarHeight)), animTopBarCache = myGrab(this, QRect(_topBar.x(), _topBar.y(), _topBar.width(), st::topBarHeight)); dialogs.enableShadow(); _topBar.enableShadow(); @@ -651,7 +657,7 @@ void MainWidget::hiderLayer(HistoryHider *h) { hider->hide(); dialogs.enableShadow(false); - QPixmap animCache = myGrab(this, QRect(0, 0, _dialogsWidth, height())); + QPixmap animCache = myGrab(this, QRect(0, _playerHeight, _dialogsWidth, height() - _playerHeight)); dialogs.enableShadow(); _topBar.enableShadow(); @@ -1138,13 +1144,14 @@ void MainWidget::overviewPreloaded(PeerData *peer, const MTPmessages_Messages &r } } - mediaOverviewUpdated(peer); + mediaOverviewUpdated(peer, type); } -void MainWidget::mediaOverviewUpdated(PeerData *peer) { - if (profile) profile->mediaOverviewUpdated(peer); +void MainWidget::mediaOverviewUpdated(PeerData *peer, MediaOverviewType type) { + if (profile) profile->mediaOverviewUpdated(peer, type); + if (!_player.isHidden()) _player.mediaOverviewUpdated(peer, type); if (overview && overview->peer() == peer) { - overview->mediaOverviewUpdated(peer); + overview->mediaOverviewUpdated(peer, type); int32 mask = 0; History *h = peer ? App::historyLoaded(peer->id) : 0; @@ -1336,7 +1343,7 @@ void MainWidget::photosLoaded(History *h, const MTPmessages_Messages &msgs, mtpR h->_overview[type].push_front(item->id); } } - if (App::wnd()) App::wnd()->mediaOverviewUpdated(h->peer); + if (App::wnd()) App::wnd()->mediaOverviewUpdated(h->peer, type); } void MainWidget::partWasRead(PeerData *peer, const MTPmessages_AffectedHistory &result) { @@ -1417,7 +1424,7 @@ void MainWidget::audioLoadProgress(mtpFileLoader *loader) { AudioMsgId playing; AudioPlayerState state = AudioPlayerStopped; audioPlayer()->currentState(&playing, &state); - if (playing.msgId == audio->openOnSaveMsgId && state != AudioPlayerStopped) { + if (playing.msgId == audio->openOnSaveMsgId && !(state & AudioPlayerStoppedMask) && state != AudioPlayerFinishing) { audioPlayer()->pauseresume(OverviewAudios); } else { audioPlayer()->play(AudioMsgId(audio, audio->openOnSaveMsgId)); @@ -1480,9 +1487,12 @@ void MainWidget::audioPlayProgress(const AudioMsgId &audioId) { void MainWidget::documentPlayProgress(const SongMsgId &songId) { SongMsgId playing; - AudioPlayerState state = AudioPlayerStopped; - audioPlayer()->currentState(&playing, &state); - if (playing == songId && state == AudioPlayerStoppedAtStart) { + AudioPlayerState playingState = AudioPlayerStopped; + int64 playingPosition = 0, playingDuration = 0; + int32 playingFrequency = 0; + audioPlayer()->currentState(&playing, &playingState, &playingPosition, &playingDuration, &playingFrequency); + if (playing == songId && playingState == AudioPlayerStoppedAtStart) { + playingState = AudioPlayerStopped; audioPlayer()->clearStoppedAtStart(songId); DocumentData *document = songId.song; @@ -1518,11 +1528,33 @@ void MainWidget::documentPlayProgress(const SongMsgId &songId) { } } + if (playing == songId) { + _player.updateState(playing, playingState, playingPosition, playingDuration, playingFrequency); + + if (!(playingState & AudioPlayerStoppedMask) && playingState != AudioPlayerFinishing) { + if (_player.isHidden()) { + _player.clearSelection(); + _player.show(); + _playerHeight = _contentScrollAddToY = _player.height(); + resizeEvent(0); + } + } + } + if (HistoryItem *item = App::histItemById(songId.msgId)) { msgUpdated(item->history()->peer->id, item); } } +void MainWidget::hidePlayer() { + if (!_player.isHidden()) { + _player.hide(); + _contentScrollAddToY = -_player.height(); + _playerHeight = 0; + resizeEvent(0); + } +} + void MainWidget::audioLoadFailed(mtpFileLoader *loader, bool started) { loadFailed(loader, started, SLOT(audioLoadRetry())); AudioData *audio = App::audio(loader->objId()); @@ -1552,10 +1584,12 @@ void MainWidget::documentLoadProgress(mtpFileLoader *loader) { SongMsgId playing; AudioPlayerState playingState = AudioPlayerStopped; audioPlayer()->currentState(&playing, &playingState); - if (playing.msgId == item->id && playingState != AudioPlayerStopped) { + if (playing.msgId == item->id && !(playingState & AudioPlayerStoppedMask) && playingState != AudioPlayerFinishing) { audioPlayer()->pauseresume(OverviewDocuments); } else { - audioPlayer()->play(SongMsgId(document, item->id)); + SongMsgId song(document, item->id); + audioPlayer()->play(song); + if (App::main()) App::main()->documentPlayProgress(song); } } else if(document->openOnSave > 0 && document->size < MediaViewImageSizeLimit) { QImageReader reader(already); @@ -1589,6 +1623,21 @@ void MainWidget::documentLoadProgress(mtpFileLoader *loader) { } } App::wnd()->documentUpdated(document); + + if (audioPlayer()) { + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + int64 playingPosition = 0, playingDuration = 0; + int32 playingFrequency = 0; + audioPlayer()->currentState(&playing, &playingState, &playingPosition, &playingDuration, &playingFrequency); + if (playing.song == document && !_player.isHidden()) { + if (document->loader) { + _player.updateState(playing, playingState, playingPosition, playingDuration, playingFrequency); + } else { + audioPlayer()->play(playing); + } + } + } } void MainWidget::documentLoadFailed(mtpFileLoader *loader, bool started) { @@ -1848,19 +1897,19 @@ void MainWidget::showPeer(quint64 peerId, qint32 msgId, bool back, bool force) { hider = 0; } if (force || !selectingPeer()) { - if (!animating() && ((history.isHidden() && (profile || overview)) || (!cWideMode() && (history.isHidden() || !peerId)))) { + if (!animating() && ((history.isHidden() && history.activePeer() && (profile || overview)) || (!cWideMode() && (history.isHidden() || !peerId)))) { dialogs.enableShadow(false); if (peerId) { _topBar.enableShadow(false); if (cWideMode()) { - animCache = myGrab(this, QRect(_dialogsWidth, st::topBarHeight, width() - _dialogsWidth, height() - st::topBarHeight)); + animCache = myGrab(this, QRect(_dialogsWidth, _playerHeight + st::topBarHeight, width() - _dialogsWidth, height() - _playerHeight - st::topBarHeight)); } else { - animCache = myGrab(this, QRect(0, st::topBarHeight, _dialogsWidth, height() - st::topBarHeight)); + animCache = myGrab(this, QRect(0, _playerHeight + st::topBarHeight, _dialogsWidth, height() - _playerHeight - st::topBarHeight)); } } else if (cWideMode()) { - animCache = myGrab(this, QRect(_dialogsWidth, 0, width() - _dialogsWidth, height())); + animCache = myGrab(this, QRect(_dialogsWidth, _playerHeight, width() - _dialogsWidth, height() - _playerHeight)); } else { - animCache = myGrab(this, QRect(0, 0, _dialogsWidth, height())); + animCache = myGrab(this, QRect(0, _playerHeight, _dialogsWidth, height() - _playerHeight)); } if (peerId || cWideMode()) { animTopBarCache = myGrab(this, QRect(_topBar.x(), _topBar.y(), _topBar.width(), st::topBarHeight)); @@ -1909,6 +1958,8 @@ void MainWidget::showPeer(quint64 peerId, qint32 msgId, bool back, bool force) { history.show(); if (!animCache.isNull()) { history.animShow(animCache, animTopBarCache, back); + } else { + QTimer::singleShot(0, this, SLOT(setInnerFocus())); } } } @@ -1958,8 +2009,12 @@ PeerData *MainWidget::profilePeer() { return profile ? profile->peer() : 0; } +PeerData *MainWidget::overviewPeer() { + return overview ? overview->peer() : 0; +} + bool MainWidget::mediaTypeSwitch() { - if (!overview) return false; + if (!overview || (overview->type() == OverviewAudioDocuments)) return false; for (int32 i = 0; i < OverviewCount; ++i) { if (!(_mediaTypeMask & ~(1 << i))) { @@ -1974,13 +2029,21 @@ void MainWidget::showMediaOverview(PeerData *peer, MediaOverviewType type, bool if (overview && overview->peer() == peer) { if (overview->type() != type) { overview->switchType(type); + } else if (type == OverviewAudioDocuments) { // hack for player + showBackFromStack(); } return; } dialogs.enableShadow(false); _topBar.enableShadow(false); - QPixmap animCache = myGrab(this, history.geometry()), animTopBarCache = myGrab(this, QRect(_topBar.x(), _topBar.y(), _topBar.width(), st::topBarHeight)); + QRect topBarRect = QRect(_topBar.x(), _topBar.y(), _topBar.width(), st::topBarHeight); + QRect historyRect = QRect(history.x(), topBarRect.y() + topBarRect.height(), history.width(), history.y() + history.height() - topBarRect.y() - topBarRect.height()); + QPixmap animCache, animTopBarCache; + if (!animating() && (!cWideMode() || profile || overview || history.peer())) { + animCache = myGrab(this, historyRect); + animTopBarCache = myGrab(this, topBarRect); + } dialogs.enableShadow(); _topBar.enableShadow(); if (!back) { @@ -1988,7 +2051,7 @@ void MainWidget::showMediaOverview(PeerData *peer, MediaOverviewType type, bool _stack.push_back(new StackItemOverview(overview->peer(), overview->type(), overview->lastWidth(), overview->lastScrollTop())); } else if (profile) { _stack.push_back(new StackItemProfile(profile->peer(), profile->lastScrollTop(), profile->allMediaShown())); - } else { + } else if (history.peer()) { _stack.push_back(new StackItemHistory(history.peer(), history.lastWidth(), history.lastScrollTop(), history.replyReturns(), history.kbWasHidden())); } } @@ -2009,12 +2072,19 @@ void MainWidget::showMediaOverview(PeerData *peer, MediaOverviewType type, bool _mediaTypeMask = 0; _topBar.show(); resizeEvent(0); - mediaOverviewUpdated(peer); - overview->animShow(animCache, animTopBarCache, back, lastScrollTop); + mediaOverviewUpdated(peer, type); + if (!animCache.isNull()) { + overview->animShow(animCache, animTopBarCache, back, lastScrollTop); + } else { + overview->show(); + overview->activate(); + } history.animStop(); history.showPeer(0, 0, false, true); history.hide(); + if (!cWideMode()) dialogs.hide(); _topBar.raise(); + _player.raise(); dialogs.raise(); _mediaType.raise(); if (hider) hider->raise(); @@ -2060,6 +2130,7 @@ void MainWidget::showPeerProfile(PeerData *peer, bool back, int32 lastScrollTop, history.showPeer(0, 0, false, true); history.hide(); _topBar.raise(); + _player.raise(); dialogs.raise(); _mediaType.raise(); if (hider) hider->raise(); @@ -2067,7 +2138,16 @@ void MainWidget::showPeerProfile(PeerData *peer, bool back, int32 lastScrollTop, } void MainWidget::showBackFromStack() { - if (_stack.isEmpty() || selectingPeer()) return; + if (selectingPeer()) return; + if (_stack.isEmpty()) { + if (cWideMode()) { + showPeer(0, 0, false, true); + QTimer::singleShot(0, this, SLOT(setInnerFocus())); + } else { + onShowDialogs(); + } + return; + } StackItem *item = _stack.back(); _stack.pop_back(); if (item->type() == HistoryStackItem) { @@ -2313,19 +2393,26 @@ void MainWidget::resizeEvent(QResizeEvent *e) { if (cWideMode()) { _dialogsWidth = snap((width() * 5) / 14, st::dlgMinWidth, st::dlgMaxWidth); dialogs.setGeometry(0, 0, _dialogsWidth + st::dlgShadow, height()); - _topBar.setGeometry(_dialogsWidth, 0, width() - _dialogsWidth, st::topBarHeight + st::titleShadow); - history.setGeometry(_dialogsWidth, tbh, width() - _dialogsWidth, height() - tbh); + _player.setGeometry(_dialogsWidth, 0, width() - _dialogsWidth, _player.height()); + _topBar.setGeometry(_dialogsWidth, _playerHeight, width() - _dialogsWidth, st::topBarHeight + st::titleShadow); + history.setGeometry(_dialogsWidth, _playerHeight + tbh, width() - _dialogsWidth, height() - _playerHeight - tbh); if (hider) hider->setGeometry(QRect(_dialogsWidth, 0, width() - _dialogsWidth, height())); } else { _dialogsWidth = width(); - dialogs.setGeometry(0, 0, _dialogsWidth + st::dlgShadow, height()); - _topBar.setGeometry(0, 0, _dialogsWidth, st::topBarHeight + st::titleShadow); - history.setGeometry(0, tbh, _dialogsWidth, height() - tbh); + _player.setGeometry(0, 0, _dialogsWidth, _player.height()); + dialogs.setGeometry(0, _playerHeight, _dialogsWidth + st::dlgShadow, height() - _playerHeight); + _topBar.setGeometry(0, _playerHeight, _dialogsWidth, st::topBarHeight + st::titleShadow); + history.setGeometry(0, _playerHeight + tbh, _dialogsWidth, height() - _playerHeight - tbh); if (hider) hider->setGeometry(QRect(0, 0, _dialogsWidth, height())); } - _mediaType.move(width() - _mediaType.width(), st::topBarHeight); + _mediaType.move(width() - _mediaType.width(), _playerHeight + st::topBarHeight); if (profile) profile->setGeometry(history.geometry()); if (overview) overview->setGeometry(history.geometry()); + _contentScrollAddToY = 0; +} + +int32 MainWidget::contentScrollAddToY() const { + return _contentScrollAddToY; } void MainWidget::keyPressEvent(QKeyEvent *e) { @@ -2355,8 +2442,14 @@ void MainWidget::paintTopBar(QPainter &p, float64 over, int32 decreaseWidth) { } void MainWidget::topBarShadowParams(int32 &x, float64 &o) { - if (!profile && !overview && dialogs.isHidden()) { - history.topBarShadowParams(x, o); + if (!cWideMode() && dialogs.isHidden()) { + if (profile) { + if (!history.activePeer()) profile->topBarShadowParams(x, o); + } else if (overview) { + if (!history.activePeer()) overview->topBarShadowParams(x, o); + } else { + history.topBarShadowParams(x, o); + } } } @@ -2384,6 +2477,10 @@ TopBarWidget *MainWidget::topBar() { return &_topBar; } +PlayerWidget *MainWidget::player() { + return &_player; +} + void MainWidget::onTopBarClick() { if (profile) { profile->topBarClick(); @@ -3451,7 +3548,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { } } App::markPeerUpdated(user); - if (App::wnd()) App::wnd()->mediaOverviewUpdated(user); + if (App::wnd()) App::wnd()->mediaOverviewUpdated(user, OverviewCount); } } break; diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index 30c14ce49..7a7e6582b 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -21,6 +21,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "historywidget.h" #include "profilewidget.h" #include "overviewwidget.h" +#include "playerwidget.h" #include "apiwrap.h" class Window; @@ -189,6 +190,9 @@ public: void topBarShadowParams(int32 &x, float64 &o); TopBarWidget *topBar(); + PlayerWidget *player(); + int32 contentScrollAddToY() const; + void animShow(const QPixmap &bgAnimCache, bool back = false); bool animStep(float64 ms); @@ -233,6 +237,7 @@ public: PeerData *activePeer(); MsgId activeMsgId(); PeerData *profilePeer(); + PeerData *overviewPeer(); bool mediaTypeSwitch(); void showPeerProfile(PeerData *peer, bool back = false, int32 lastScrollTop = -1, bool allMediaShown = false); void showMediaOverview(PeerData *peer, MediaOverviewType type, bool back = false, int32 lastScrollTop = -1); @@ -313,7 +318,7 @@ public: void searchMessages(const QString &query); void preloadOverviews(PeerData *peer); - void mediaOverviewUpdated(PeerData *peer); + void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type); void changingMsgId(HistoryItem *row, MsgId newId); void itemRemoved(HistoryItem *item); void itemReplaced(HistoryItem *oldItem, HistoryItem *newItem); @@ -391,6 +396,7 @@ public slots: void documentLoadFailed(mtpFileLoader *loader, bool started); void documentLoadRetry(); void documentPlayProgress(const SongMsgId &songId); + void hidePlayer(); void setInnerFocus(); void dialogsCancelled(); @@ -490,12 +496,16 @@ private: HistoryWidget history; ProfileWidget *profile; OverviewWidget *overview; + PlayerWidget _player; TopBarWidget _topBar; ConfirmBox *_forwardConfirm; // for narrow mode HistoryHider *hider; StackItems _stack; QPixmap profileAnimCache; + int32 _playerHeight; + int32 _contentScrollAddToY; + Dropdown _mediaType; int32 _mediaTypeMask; diff --git a/Telegram/SourceFiles/mediaview.cpp b/Telegram/SourceFiles/mediaview.cpp index 56441c375..2036a644f 100644 --- a/Telegram/SourceFiles/mediaview.cpp +++ b/Telegram/SourceFiles/mediaview.cpp @@ -136,19 +136,19 @@ void MediaView::moveToScreen() { } int32 navSkip = 2 * st::mvControlMargin + st::mvControlSize; - _closeNav = rtlrect(width() - st::mvControlMargin - st::mvControlSize, st::mvControlMargin, st::mvControlSize, st::mvControlSize, width()); + _closeNav = myrtlrect(width() - st::mvControlMargin - st::mvControlSize, st::mvControlMargin, st::mvControlSize, st::mvControlSize); _closeNavIcon = centersprite(_closeNav, st::mvClose); - _leftNav = rtlrect(st::mvControlMargin, navSkip, st::mvControlSize, height() - 2 * navSkip, width()); + _leftNav = myrtlrect(st::mvControlMargin, navSkip, st::mvControlSize, height() - 2 * navSkip); _leftNavIcon = centersprite(_leftNav, st::mvLeft); - _rightNav = rtlrect(width() - st::mvControlMargin - st::mvControlSize, navSkip, st::mvControlSize, height() - 2 * navSkip, width()); + _rightNav = myrtlrect(width() - st::mvControlMargin - st::mvControlSize, navSkip, st::mvControlSize, height() - 2 * navSkip); _rightNavIcon = centersprite(_rightNav, st::mvRight); _saveMsg.moveTo((width() - _saveMsg.width()) / 2, (height() - _saveMsg.height()) / 2); } -void MediaView::mediaOverviewUpdated(PeerData *peer) { +void MediaView::mediaOverviewUpdated(PeerData *peer, MediaOverviewType type) { if (!_photo && !_doc) return; - if (_history && _history->peer == peer) { + if (_history && _history->peer == peer && type == _overview) { _index = -1; for (int i = 0, l = _history->_overview[_overview].size(); i < l; ++i) { if (_history->_overview[_overview].at(i) == _msgid) { @@ -158,7 +158,7 @@ void MediaView::mediaOverviewUpdated(PeerData *peer) { } updateControls(); preloadData(0); - } else if (_user == peer) { + } else if (_user == peer && type == OverviewCount) { if (!_photo) return; _index = -1; @@ -192,7 +192,7 @@ void MediaView::changingMsgId(HistoryItem *row, MsgId newId) { if (row->id == _msgid) { _msgid = newId; } - mediaOverviewUpdated(row->history()->peer); + mediaOverviewUpdated(row->history()->peer, _overview); } void MediaView::updateDocSize() { @@ -258,9 +258,9 @@ void MediaView::updateControls() { } _saveVisible = ((_photo && _photo->full->loaded()) || (_doc && (!_doc->already(true).isEmpty() || (_current.isNull() && _currentGif.isNull())))); - _saveNav = rtlrect(width() - st::mvIconSize.width() * 2, height() - st::mvIconSize.height(), st::mvIconSize.width(), st::mvIconSize.height(), width()); + _saveNav = myrtlrect(width() - st::mvIconSize.width() * 2, height() - st::mvIconSize.height(), st::mvIconSize.width(), st::mvIconSize.height()); _saveNavIcon = centersprite(_saveNav, st::mvSave); - _moreNav = rtlrect(width() - st::mvIconSize.width(), height() - st::mvIconSize.height(), st::mvIconSize.width(), st::mvIconSize.height(), width()); + _moreNav = myrtlrect(width() - st::mvIconSize.width(), height() - st::mvIconSize.height(), st::mvIconSize.width(), st::mvIconSize.height()); _moreNavIcon = centersprite(_moreNav, st::mvMore); QDateTime d(date(_photo ? _photo->date : _doc->date)), dNow(date(unixtime())); @@ -273,11 +273,11 @@ void MediaView::updateControls() { } if (_from) { _fromName.setText(st::mvFont, _from->name); - _nameNav = rtlrect(st::mvTextLeft, height() - st::mvTextTop, qMin(_fromName.maxWidth(), width() / 3), st::mvFont->height, width()); - _dateNav = rtlrect(st::mvTextLeft + _nameNav.width() + st::mvTextSkip, height() - st::mvTextTop, st::mvFont->m.width(_dateText), st::mvFont->height, width()); + _nameNav = myrtlrect(st::mvTextLeft, height() - st::mvTextTop, qMin(_fromName.maxWidth(), width() / 3), st::mvFont->height); + _dateNav = myrtlrect(st::mvTextLeft + _nameNav.width() + st::mvTextSkip, height() - st::mvTextTop, st::mvFont->m.width(_dateText), st::mvFont->height); } else { _nameNav = QRect(); - _dateNav = rtlrect(st::mvTextLeft, height() - st::mvTextTop, st::mvFont->m.width(_dateText), st::mvFont->height, width()); + _dateNav = myrtlrect(st::mvTextLeft, height() - st::mvTextTop, st::mvFont->m.width(_dateText), st::mvFont->height); } updateHeader(); if (_photo) { @@ -349,7 +349,6 @@ bool MediaView::animStep(float64 msp) { a_cOpacity.finish(); _controlsState = (_controlsState == ControlsShowing ? ControlsShown : ControlsHidden); setCursor(_controlsState == ControlsHidden ? Qt::BlankCursor : (_over == OverNone ? style::cur_default : style::cur_pointer)); - LOG(("Finished with controls!")); } else { a_cOpacity.update(dt, anim::linear); } @@ -410,7 +409,6 @@ void MediaView::close() { void MediaView::activateControls() { _controlsHideTimer.start(int(st::mvWaitHide)); if (_controlsState == ControlsHiding || _controlsState == ControlsHidden) { - LOG(("Showing controls..")); _controlsState = ControlsShowing; _controlsAnimStarted = getms(); a_cOpacity.start(1); @@ -421,7 +419,6 @@ void MediaView::activateControls() { void MediaView::onHideControls(bool force) { if (!force && !_dropdown.isHidden()) return; if (_controlsState == ControlsHiding || _controlsState == ControlsHidden) return; - LOG(("Hiding controls..")); _controlsState = ControlsHiding; _controlsAnimStarted = getms(); a_cOpacity.start(0); @@ -906,7 +903,7 @@ void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { // _docSize is updated in updateControls() _docRect = QRect((width() - st::mvDocSize.width()) / 2, (height() - st::mvDocSize.height()) / 2, st::mvDocSize.width(), st::mvDocSize.height()); - _docIconRect = rtlrect(_docRect.x() + st::mvDocPadding, _docRect.y() + st::mvDocPadding, st::mvDocBlue.pxWidth(), st::mvDocBlue.pxHeight(), width()); + _docIconRect = myrtlrect(_docRect.x() + st::mvDocPadding, _docRect.y() + st::mvDocPadding, st::mvDocBlue.pxWidth(), st::mvDocBlue.pxHeight()); } else if (!_current.isNull()) { _current.setDevicePixelRatio(cRetinaFactor()); _w = _current.width() / cIntRetinaFactor(); @@ -1264,11 +1261,6 @@ void MediaView::paintEvent(QPaintEvent *e) { } } } - -// static uint64 t = getms(); -// uint64 t2 = getms(); -// LOG(("paint: %1, wait: %2, name: %3, icon: %4").arg(t2 - ms).arg(t2 - t).arg(logBool(name)).arg(logBool(icon))); -// t = t2; } void MediaView::keyPressEvent(QKeyEvent *e) { @@ -1828,7 +1820,7 @@ void MediaView::findCurrent() { } } - if (_history->_overviewCount[_overview] < 0) { + if (_history->_overviewCount[_overview] < 0 || (!_index && _history->_overviewCount[_overview] > 0)) { loadBack(); } } @@ -1877,7 +1869,7 @@ void MediaView::userPhotosLoaded(UserData *u, const MTPphotos_Photos &photos, mt photo->thumb->load(); u->photos.push_back(photo); } - if (App::wnd()) App::wnd()->mediaOverviewUpdated(u); + if (App::wnd()) App::wnd()->mediaOverviewUpdated(u, OverviewCount); } void MediaView::updateHeader() { @@ -1913,7 +1905,7 @@ void MediaView::updateHeader() { hwidth = width() / 3; _headerText = st::mvThickFont->m.elidedText(_headerText, Qt::ElideMiddle, hwidth); } - _headerNav = rtlrect(st::mvTextLeft, height() - st::mvHeaderTop, hwidth, st::mvThickFont->height, width()); + _headerNav = myrtlrect(st::mvTextLeft, height() - st::mvHeaderTop, hwidth, st::mvThickFont->height); } // //void MediaView::updatePolaroid() { diff --git a/Telegram/SourceFiles/mediaview.h b/Telegram/SourceFiles/mediaview.h index 6735a2317..11b99e266 100644 --- a/Telegram/SourceFiles/mediaview.h +++ b/Telegram/SourceFiles/mediaview.h @@ -55,7 +55,7 @@ public: updateOver(mapFromGlobal(QCursor::pos())); } - void mediaOverviewUpdated(PeerData *peer); + void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type); void documentUpdated(DocumentData *doc); void changingMsgId(HistoryItem *row, MsgId newId); void updateDocSize(); diff --git a/Telegram/SourceFiles/overviewwidget.cpp b/Telegram/SourceFiles/overviewwidget.cpp index e3801a826..9b1b7e095 100644 --- a/Telegram/SourceFiles/overviewwidget.cpp +++ b/Telegram/SourceFiles/overviewwidget.cpp @@ -1681,8 +1681,12 @@ void OverviewWidget::onScroll() { } void OverviewWidget::resizeEvent(QResizeEvent *e) { + int32 st = _scroll.scrollTop(); _scroll.resize(size()); - int32 newScrollTop = _inner.resizeToWidth(width(), _scroll.scrollTop(), height()); + int32 newScrollTop = _inner.resizeToWidth(width(), st, height()); + if (int32 addToY = App::main() ? App::main()->contentScrollAddToY() : 0) { + newScrollTop += addToY; + } if (newScrollTop != _scroll.scrollTop()) { _noDropResizeIndex = true; _scroll.scrollToY(newScrollTop); @@ -1700,33 +1704,36 @@ void OverviewWidget::paintEvent(QPaintEvent *e) { return; } - bool hasTopBar = !App::main()->topBar()->isHidden(); QRect r(e->rect()); if (type() == OverviewPhotos) { p.fillRect(r, st::white->b); - } else if (cTileBackground()) { - int left = r.left(), top = r.top(), right = r.left() + r.width(), bottom = r.top() + r.height(); - if (right > 0 && bottom > 0) { - QRect fill(left, top + (hasTopBar ? st::topBarHeight : 0), right, bottom + (hasTopBar ? st::topBarHeight : 0)); - - if (hasTopBar) p.translate(0, -st::topBarHeight); - p.fillRect(fill, QBrush(*cChatBackground())); - if (hasTopBar) p.translate(0, st::topBarHeight); - } } else { + bool hasTopBar = !App::main()->topBar()->isHidden(), hasPlayer = !App::main()->player()->isHidden(); QRect fill(0, 0, width(), App::main()->height()); - int fromy = hasTopBar ? (-st::topBarHeight) : 0, x = 0, y = 0; + int fromy = (hasTopBar ? (-st::topBarHeight) : 0) + (hasPlayer ? (-st::playerHeight) : 0), x = 0, y = 0; QPixmap cached = App::main()->cachedBackground(fill, x, y); if (cached.isNull()) { - bool smooth = p.renderHints().testFlag(QPainter::SmoothPixmapTransform); - p.setRenderHint(QPainter::SmoothPixmapTransform); + const QPixmap &pix(*cChatBackground()); + if (cTileBackground()) { + int left = r.left(), top = r.top(), right = r.left() + r.width(), bottom = r.top() + r.height(); + float64 w = pix.width() / cRetinaFactor(), h = pix.height() / cRetinaFactor(); + int sx = qFloor(left / w), sy = qFloor((top - fromy) / h), cx = qCeil(right / w), cy = qCeil((bottom - fromy) / h); + for (int i = sx; i < cx; ++i) { + for (int j = sy; j < cy; ++j) { + p.drawPixmap(QPointF(i * w, fromy + j * h), pix); + } + } + } else { + bool smooth = p.renderHints().testFlag(QPainter::SmoothPixmapTransform); + p.setRenderHint(QPainter::SmoothPixmapTransform); - QRect to, from; - App::main()->backgroundParams(fill, to, from); - to.moveTop(to.top() + fromy); - p.drawPixmap(to, *cChatBackground(), from); + QRect to, from; + App::main()->backgroundParams(fill, to, from); + to.moveTop(to.top() + fromy); + p.drawPixmap(to, pix, from); - if (!smooth) p.setRenderHint(QPainter::SmoothPixmapTransform, false); + if (!smooth) p.setRenderHint(QPainter::SmoothPixmapTransform, false); + } } else { p.drawPixmap(x, fromy + y, cached); } @@ -1760,6 +1767,13 @@ void OverviewWidget::paintTopBar(QPainter &p, float64 over, int32 decreaseWidth) } } +void OverviewWidget::topBarShadowParams(int32 &x, float64 &o) { + if (animating() && a_coord.current() >= 0) { + x = a_coord.current(); + o = a_alpha.current(); + } +} + void OverviewWidget::topBarClick() { App::main()->showBackFromStack(); } @@ -1781,6 +1795,7 @@ void OverviewWidget::switchType(MediaOverviewType type) { case OverviewVideos: _header = lang(lng_profile_videos_header); break; case OverviewDocuments: _header = lang(lng_profile_files_header); break; case OverviewAudios: _header = lang(lng_profile_audios_header); break; + case OverviewAudioDocuments: _header = lang(lng_profile_audio_files_header); break; } noSelectingScroll(); App::main()->topBar()->showSelected(0); @@ -1847,10 +1862,7 @@ bool OverviewWidget::animStep(float64 ms) { a_alpha.finish(); _bgAnimCache = _animCache = _animTopBarCache = _bgAnimTopBarCache = QPixmap(); App::main()->topBar()->stopAnim(); - _scroll.show(); - _scroll.scrollToY(_scrollSetAfterShow); - activate(); - onScroll(); + doneShow(); } else { a_bgCoord.update(dt1, st::introHideFunc); a_bgAlpha.update(dt1, st::introAlphaHideFunc); @@ -1862,8 +1874,15 @@ bool OverviewWidget::animStep(float64 ms) { return res; } -void OverviewWidget::mediaOverviewUpdated(PeerData *p) { - if (peer() == p) { +void OverviewWidget::doneShow() { + _scroll.show(); + _scroll.scrollToY(_scrollSetAfterShow); + activate(); + onScroll(); +} + +void OverviewWidget::mediaOverviewUpdated(PeerData *p, MediaOverviewType t) { + if (peer() == p && t == type()) { _inner.mediaOverviewUpdated(); onScroll(); updateTopBarSelection(); diff --git a/Telegram/SourceFiles/overviewwidget.h b/Telegram/SourceFiles/overviewwidget.h index f280f1ac8..3f3b82db3 100644 --- a/Telegram/SourceFiles/overviewwidget.h +++ b/Telegram/SourceFiles/overviewwidget.h @@ -142,6 +142,7 @@ private: } CachedItem; typedef QVector CachedItems; CachedItems _items; + int32 _width, _height, _minHeight, _addToY; // selection support, like in HistoryWidget @@ -199,6 +200,7 @@ public: void scrollBy(int32 add); void paintTopBar(QPainter &p, float64 over, int32 decreaseWidth); + void topBarShadowParams(int32 &x, float64 &o); void topBarClick(); PeerData *peer() const; @@ -212,7 +214,9 @@ public: void animShow(const QPixmap &oldAnimCache, const QPixmap &bgAnimTopBarCache, bool back = false, int32 lastScrollTop = -1); bool animStep(float64 ms); - void mediaOverviewUpdated(PeerData *peer); + void doneShow(); + + void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type); void changingMsgId(HistoryItem *row, MsgId newId); void msgUpdated(PeerId peer, const HistoryItem *msg); void itemRemoved(HistoryItem *item); diff --git a/Telegram/SourceFiles/playerwidget.cpp b/Telegram/SourceFiles/playerwidget.cpp new file mode 100644 index 000000000..dd829cd1a --- /dev/null +++ b/Telegram/SourceFiles/playerwidget.cpp @@ -0,0 +1,548 @@ +/* +This file is part of Telegram Desktop, +the official desktop version of Telegram messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It 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 General Public License for more details. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014 John Preston, https://desktop.telegram.org +*/ +#include "stdafx.h" +#include "style.h" +#include "lang.h" + +#include "boxes/addcontactbox.h" +#include "application.h" +#include "window.h" +#include "playerwidget.h" +#include "mainwidget.h" + +#include "localstorage.h" + +#include "audio.h" + +PlayerWidget::PlayerWidget(QWidget *parent) : TWidget(parent), +_prevAvailable(false), _nextAvailable(false), _fullAvailable(false), +_over(OverNone), _down(OverNone), _downCoord(0), _downProgress(0.), _downFrequency(AudioVoiceMsgFrequency), +_stateAnim(animFunc(this, &PlayerWidget::stateStep)), +_index(-1), _history(0), _showPause(false), _position(0), _duration(0), _loaded(0), +a_progress(0., 0.), a_loadProgress(0., 0.), _progressAnim(animFunc(this, &PlayerWidget::progressStep)) { + resize(st::wndMinWidth, st::playerHeight); + setMouseTracking(true); + memset(_stateHovers, 0, sizeof(_stateHovers)); +} + +void PlayerWidget::paintEvent(QPaintEvent *e) { + Painter p(this); + + QRect r(e->rect()), checkr(myrtlrect(r)); + p.fillRect(r, st::playerBg->b); + + if (!_playbackRect.contains(checkr)) { + if (_fullAvailable && checkr.intersects(_prevRect)) { + if (_prevAvailable) { + float64 o = _stateHovers[OverPrev]; + p.setOpacity(o * 1. + (1. - o) * st::playerInactiveOpacity); + } else { + p.setOpacity(st::playerUnavailableOpacity); + } + p.drawSpriteCenterLeft(_prevRect, width(), st::playerPrev); + } + if (checkr.intersects(_playRect)) { + float64 o = _stateHovers[OverPlay]; + p.setOpacity(o * 1. + (1. - o) * st::playerInactiveOpacity); + p.drawSpriteCenterLeft(_playRect, width(), (_showPause || _down == OverPlayback) ? st::playerPause : st::playerPlay); + } + if (_fullAvailable && checkr.intersects(_nextRect)) { + if (_nextAvailable) { + float64 o = _stateHovers[OverNext]; + p.setOpacity(o * 1. + (1. - o) * st::playerInactiveOpacity); + } else { + p.setOpacity(st::playerUnavailableOpacity); + } + p.drawSpriteCenterLeft(_nextRect, width(), st::playerNext); + } + if (checkr.intersects(_closeRect)) { + float64 o = _stateHovers[OverClose]; + p.setOpacity(o * 1. + (1. - o) * st::playerInactiveOpacity); + p.drawSpriteCenterLeft(_closeRect, width(), st::playerClose); + } + if (checkr.intersects(_volumeRect)) { + float64 o = _stateHovers[OverVolume]; + p.setOpacity(o * 1. + (1. - o) * st::playerInactiveOpacity); + int32 top = _volumeRect.y() + (_volumeRect.height() - st::playerVolume.pxHeight()) / 2; + int32 left = _volumeRect.x() + (_volumeRect.width() - st::playerVolume.pxWidth()) / 2; + int32 mid = left + qRound(st::playerVolume.pxWidth() * cSongVolume()); + int32 right = left + st::playerVolume.pxWidth(); + if (rtl()) { + left = width() - left; + mid = width() - mid; + right = width() - right; + if (mid < left) { + p.drawPixmap(QRect(mid, top, left - mid, st::playerVolume.pxHeight()), App::sprite(), QRect(st::playerVolume.x() + (mid - right) * cIntRetinaFactor(), st::playerVolume.y(), (left - mid) * cIntRetinaFactor(), st::playerVolume.pxHeight() * cIntRetinaFactor())); + } + if (right < mid) { + p.setOpacity(st::playerUnavailableOpacity); + p.drawPixmap(QRect(right, top, mid - right, st::playerVolume.pxHeight()), App::sprite(), QRect(st::playerVolume.x(), st::playerVolume.y(), (mid - right) * cIntRetinaFactor(), st::playerVolume.pxHeight() * cIntRetinaFactor())); + } + } else { + if (mid > left) { + p.drawPixmap(QRect(left, top, mid - left, st::playerVolume.pxHeight()), App::sprite(), QRect(st::playerVolume.x(), st::playerVolume.y(), (mid - left) * cIntRetinaFactor(), st::playerVolume.pxHeight() * cIntRetinaFactor())); + } + if (right > mid) { + p.setOpacity(st::playerUnavailableOpacity); + p.drawPixmap(QRect(mid, top, right - mid, st::playerVolume.pxHeight()), App::sprite(), QRect(st::playerVolume.x() + (mid - left) * cIntRetinaFactor(), st::playerVolume.y(), (right - mid) * cIntRetinaFactor(), st::playerVolume.pxHeight() * cIntRetinaFactor())); + } + } + } + if (_fullAvailable && checkr.intersects(_fullRect)) { + float64 o = _stateHovers[OverFull]; + p.setOpacity(o * 1. + (1. - o) * st::playerInactiveOpacity); + p.drawSpriteCenterLeft(_fullRect, width(), st::playerFull); + } + p.setOpacity(1.); + + p.setPen(st::playerTimeFg->p); + p.setFont(st::linkFont->f); + p.drawTextLeft(_infoRect.x() + _infoRect.width() - _timeWidth, _infoRect.y() + (_infoRect.height() - st::linkFont->height) / 2, width(), _time, _timeWidth); + + textstyleSet(&st::playerNameStyle); + p.setPen(st::playerFg->p); + _name.drawElided(p, _infoRect.x() + (rtl() ? (_timeWidth + st::playerSkip) : 0), _infoRect.y() + (_infoRect.height() - st::linkFont->height) / 2, _infoRect.width() - _timeWidth - st::playerSkip); + textstyleRestore(); + } + + if (_duration) { + float64 prg = (_down == OverPlayback) ? _downProgress : a_progress.current(); + int32 from = _playbackRect.x(), mid = qRound(_playbackRect.x() + prg * _playbackRect.width()), end = _playbackRect.x() + _playbackRect.width(); + if (mid > from) { + p.fillRect(rtl() ? (width() - mid) : from, height() - st::playerLineHeight, mid - from, _playbackRect.height(), st::playerLineActive->b); + } + if (end > mid) { + p.fillRect(rtl() ? (width() - end) : mid, height() - st::playerLineHeight, end - mid, st::playerLineHeight, st::playerLineInactive->b); + } + if (_stateHovers[OverPlayback] > 0) { + p.setOpacity(_stateHovers[OverPlayback]); + + int32 x = mid - (st::playerMoverSize.width() / 2); + p.fillRect(rtl() ? (width() - x - st::playerMoverSize.width()) : x, height() - st::playerMoverSize.height(), st::playerMoverSize.width(), st::playerMoverSize.height(), st::playerLineActive->b); + } + } else if (a_loadProgress.current() > 0) { + int32 from = _playbackRect.x(), mid = qRound(_playbackRect.x() + a_loadProgress.current() * _playbackRect.width()); + if (mid > from) { + p.fillRect(rtl() ? (width() - mid) : from, height() - st::playerLineHeight, mid - from, _playbackRect.height(), st::playerLineInactive->b); + } + } +} + +void PlayerWidget::mousePressEvent(QMouseEvent *e) { + QPoint pos(myrtlpoint(e->pos())); + + if (e->button() == Qt::LeftButton) { + _down = OverNone; + if (_song && _over == OverPlay) { + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + audioPlayer()->currentState(&playing, &playingState); + if (playing == _song && !(playingState & AudioPlayerStoppedMask)) { + audioPlayer()->pauseresume(OverviewDocuments); + } else { + audioPlayer()->play(_song); + if (App::main()) App::main()->documentPlayProgress(_song); + } + return; + } else if (_over == OverPrev) { + const History::MediaOverview *o = _history ? &_history->_overview[OverviewAudioDocuments] : 0; + if (audioPlayer() && o && _index > 0 && _index <= o->size() && !o->isEmpty()) { + startPlay(o->at(_index - 1)); + } + } else if (_over == OverNext) { + const History::MediaOverview *o = _history ? &_history->_overview[OverviewAudioDocuments] : 0; + if (audioPlayer() && o && _index >= 0 && _index < o->size() - 1) { + startPlay(o->at(_index + 1)); + } + } else if (_over == OverClose) { + _down = OverClose; + } else if (_over == OverVolume) { + _down = OverVolume; + _downCoord = pos.x() - _volumeRect.x(); + cSetSongVolume(snap((_downCoord - ((_volumeRect.width() - st::playerVolume.pxWidth()) / 2)) / float64(st::playerVolume.pxWidth()), 0., 1.)); + emit audioPlayer()->songVolumeChanged(); + rtlupdate(_volumeRect); + } else if (_over == OverPlayback) { + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + int64 playingPosition = 0, playingDuration = 0; + int32 playingFrequency = 0; + audioPlayer()->currentState(&playing, &playingState, &playingPosition, &playingDuration, &playingFrequency); + if (playing == _song && playingDuration) { + if (playingState == AudioPlayerPlaying || playingState == AudioPlayerStarting || playingState == AudioPlayerResuming) { + audioPlayer()->pauseresume(OverviewDocuments); + } + _down = OverPlayback; + _downProgress = snap((pos.x() - _playbackRect.x()) / float64(_playbackRect.width()), 0., 1.); + _downDuration = playingDuration; + _downFrequency = (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency); + + rtlupdate(_playbackRect); + updateDownTime(); + } + } else if (_over == OverFull && _song) { + if (HistoryItem *item = App::histItemById(_song.msgId)) { + App::main()->showMediaOverview(item->history()->peer, OverviewAudioDocuments); + } + } + } +} + +void PlayerWidget::updateDownTime() { + QString time = formatDurationText(qRound(_downDuration * _downProgress) / _downFrequency); + if (time != _time) { + _time = time; + _timeWidth = st::linkFont->m.width(_time); + rtlupdate(_infoRect); + } +} + +void PlayerWidget::updateOverState(OverState newState) { + bool result = true; + if (_over != newState) { + updateOverRect(_over); + updateOverRect(newState); + if (_over != OverNone) { + _stateAnimations.remove(_over); + _stateAnimations[-_over] = getms() - ((1. - _stateHovers[_over]) * st::playerDuration); + if (!_stateAnim.animating()) _stateAnim.start(); + } else { + result = false; + } + _over = newState; + if (newState != OverNone) { + _stateAnimations.remove(-_over); + _stateAnimations[_over] = getms() - (_stateHovers[_over] * st::playerDuration); + if (!_stateAnim.animating()) _stateAnim.start(); + setCursor(style::cur_pointer); + } else { + setCursor(style::cur_default); + } + } +} + +void PlayerWidget::updateOverRect(OverState state) { + switch (state) { + case OverPrev: rtlupdate(_prevRect); break; + case OverPlay: rtlupdate(_playRect); break; + case OverNext: rtlupdate(_nextRect); break; + case OverClose: rtlupdate(_closeRect); break; + case OverVolume: rtlupdate(_volumeRect); break; + case OverFull: rtlupdate(_fullRect); break; + case OverPlayback: rtlupdate(_playbackRect); break; + } +} + +void PlayerWidget::updateControls() { + _fullAvailable = (_index >= 0); + _prevAvailable = _fullAvailable && (_index > 0); + _nextAvailable = _fullAvailable && (_index < _history->_overview[OverviewAudioDocuments].size() - 1); + resizeEvent(0); + update(); + + if (_index >= 0 && _index < MediaOverviewStartPerPage) { + if (_history->_overviewCount[OverviewAudioDocuments] < 0 || _history->_overviewCount[OverviewAudioDocuments] > 0) { + if (App::main()) App::main()->loadMediaBack(_history->peer, OverviewAudioDocuments); + } + } +} + +void PlayerWidget::findCurrent() { + _index = -1; + if (!_history) return; + + const History::MediaOverview *o = &_history->_overview[OverviewAudioDocuments]; + for (int i = 0, l = o->size(); i < l; ++i) { + if (o->at(i) == _song.msgId) { + _index = i; + break; + } + } + if (_index < 0) return; + + if (_index < o->size() - 1) { + if (HistoryItem *next = App::histItemById(o->at(_index + 1))) { + if (HistoryDocument *document = static_cast(next->getMedia())) { + if (document->document()->already(true).isEmpty() && document->document()->data.isEmpty()) { + if (!document->document()->loader) { + DocumentOpenLink::doOpen(document->document()); + document->document()->openOnSave = document->document()->openOnSaveMsgId = 0; + } + } + } + } + } +} + +void PlayerWidget::startPlay(MsgId msgId) { + if (HistoryItem *item = App::histItemById(msgId)) { + if (HistoryDocument *doc = static_cast(item->getMedia())) { + audioPlayer()->play(SongMsgId(doc->document(), item->id)); + updateState(); + } + } +} + +void PlayerWidget::clearSelection() { + for (StateAnimations::const_iterator i = _stateAnimations.cbegin(); i != _stateAnimations.cend(); ++i) { + _stateHovers[qAbs(i.key())] = 0; + } + _stateAnimations.clear(); +} + +void PlayerWidget::mediaOverviewUpdated(PeerData *peer, MediaOverviewType type) { + if (_history && _history->peer == peer && type == OverviewAudioDocuments) { + _index = -1; + for (int i = 0, l = _history->_overview[OverviewAudioDocuments].size(); i < l; ++i) { + if (_history->_overview[OverviewAudioDocuments].at(i) == _song.msgId) { + _index = i; + break; + } + } + updateControls(); + } +} + +bool PlayerWidget::seekingSong(const SongMsgId &song) const { + return (_down == OverPlayback) && (song == _song); +} + +bool PlayerWidget::stateStep(float64 ms) { + bool result = false; + uint64 ms = getms(); + for (StateAnimations::iterator i = _stateAnimations.begin(); i != _stateAnimations.cend();) { + int32 over = qAbs(i.key()); + updateOverRect(OverState(over)); + + float64 dt = float64(ms - i.value()) / st::playerDuration; + if (dt >= 1) { + _stateHovers[over] = (i.key() > 0) ? 1 : 0; + i = _stateAnimations.erase(i); + } else { + _stateHovers[over] = (i.key() > 0) ? dt : (1 - dt); + ++i; + } + } + return !_stateAnimations.isEmpty(); +} + +void PlayerWidget::mouseMoveEvent(QMouseEvent *e) { + _lastMousePos = e->globalPos(); + updateSelected(); +} + +void PlayerWidget::leaveEvent(QEvent *e) { + _lastMousePos = QCursor::pos(); + updateSelected(); +} + +void PlayerWidget::updateSelected() { + QPoint pos(myrtlpoint(mapFromGlobal(_lastMousePos))); + + if (_down == OverVolume) { + int32 delta = (pos.x() - _volumeRect.x()) - _downCoord; + float64 startFrom = snap((_downCoord - ((_volumeRect.width() - st::playerVolume.pxWidth()) / 2)) / float64(st::playerVolume.pxWidth()), 0., 1.); + float64 add = delta / float64(4 * st::playerVolume.pxWidth()), result = snap(startFrom + add, 0., 1.); + if (result != cSongVolume()) { + cSetSongVolume(result); + emit audioPlayer()->songVolumeChanged(); + rtlupdate(_volumeRect); + } + } else if (_down == OverPlayback) { + _downProgress = snap((pos.x() - _playbackRect.x()) / float64(_playbackRect.width()), 0., 1.); + rtlupdate(_playbackRect); + updateDownTime(); + } else if (_down == OverNone) { + bool inInfo = ((pos.x() >= _infoRect.x()) && (pos.x() < _fullRect.x() + _fullRect.width()) && (pos.y() >= _playRect.y()) && (pos.y() <= _playRect.y() + _playRect.height())); + if (_prevAvailable && _prevRect.contains(pos)) { + updateOverState(OverPrev); + } else if (_nextAvailable && _nextRect.contains(pos)) { + updateOverState(OverNext); + } else if (_playRect.contains(pos)) { + updateOverState(OverPlay); + } else if (_closeRect.contains(pos)) { + updateOverState(OverClose); + } else if (_volumeRect.contains(pos)) { + updateOverState(OverVolume); + } else if (_duration && _playbackRect.contains(pos)) { + updateOverState(OverPlayback); + } else if (_fullAvailable && inInfo) { + updateOverState(OverFull); + } else if (_over != OverNone) { + updateOverState(OverNone); + } + } +} + +void PlayerWidget::mouseReleaseEvent(QMouseEvent *e) { + if (_down == OverVolume) { + mouseMoveEvent(e); + Local::writeUserSettings(); + } else if (_down == OverPlayback) { + mouseMoveEvent(e); + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + int64 playingPosition = 0, playingDuration = 0; + int32 playingFrequency = 0; + audioPlayer()->currentState(&playing, &playingState, &playingPosition, &playingDuration, &playingFrequency); + if (playing == _song && playingDuration) { + _downDuration = playingDuration; + audioPlayer()->seek(qRound(_downProgress * _downDuration)); + + _showPause = true; + + a_progress = anim::fvalue(_downProgress, _downProgress); + _progressAnim.stop(); + } + update(); + } else if (_down == OverClose && _over == OverClose) { + if (_song) { + audioPlayer()->stop(OverviewDocuments); + if (App::main()) App::main()->hidePlayer(); + } + } + _down = OverNone; +} + +void PlayerWidget::resizeEvent(QResizeEvent *e) { + int32 availh = (height() - st::playerLineHeight); + int32 ch = st::playerPlay.pxHeight() + st::playerSkip, ct = (availh - ch) / 2; + _playbackRect = QRect(cWideMode() ? st::dlgShadow : 0, height() - st::playerMoverSize.height(), width() - (cWideMode() ? st::dlgShadow : 0), st::playerMoverSize.height()); + _prevRect = _fullAvailable ? QRect(st::playerSkip / 2, ct, st::playerPrev.pxWidth() + st::playerSkip, ch) : QRect(); + _playRect = QRect(_fullAvailable ? (_prevRect.x() + _prevRect.width()) : (st::playerSkip / 2), ct, st::playerPlay.pxWidth() + st::playerSkip, ch); + _nextRect = _fullAvailable ? QRect(_playRect.x() + _playRect.width(), ct, st::playerNext.pxWidth() + st::playerSkip, ch) : QRect(); + + _closeRect = QRect(width() - st::playerSkip / 2 - st::playerClose.pxWidth() - st::playerSkip, ct, st::playerClose.pxWidth() + st::playerSkip, ch); + _volumeRect = QRect(_closeRect.x() - st::playerVolume.pxWidth() - st::playerSkip, ct, st::playerVolume.pxWidth() + st::playerSkip, ch); + _fullRect = _fullAvailable ? QRect(_volumeRect.x() - st::playerFull.pxWidth() - st::playerSkip, ct, st::playerFull.pxWidth() + st::playerSkip, ch) : QRect(); + + int32 infoLeft = (_fullAvailable ? (_nextRect.x() + _nextRect.width()) : (_playRect.x() + _playRect.width())); + _infoRect = QRect(infoLeft + st::playerSkip / 2, 0, (_fullAvailable ? _fullRect.x() : _volumeRect.x()) - infoLeft - st::playerSkip, availh); + update(); +} + +bool PlayerWidget::progressStep(float64 ms) { + float64 dt = ms / (2 * AudioVoiceMsgUpdateView); + bool res = true; + if (_duration && dt >= 1) { + a_progress.finish(); + a_loadProgress.finish(); + res = false; + } else { + a_progress.update(qMin(dt, 1.), anim::linear); + a_loadProgress.update(1. - (st::radialDuration / (st::radialDuration + ms)), anim::linear); + } + rtlupdate(_playbackRect); + return res; +} + +void PlayerWidget::updateState() { + updateState(SongMsgId(), AudioPlayerStopped, 0, 0, 0); +} + +void PlayerWidget::updateState(SongMsgId playing, AudioPlayerState playingState, int64 playingPosition, int64 playingDuration, int32 playingFrequency) { + if (!playing) { + audioPlayer()->currentState(&playing, &playingState, &playingPosition, &playingDuration, &playingFrequency); + } + + bool songChanged = false; + if (playing && _song != playing) { + songChanged = true; + _song = playing; + if (HistoryItem *item = App::histItemById(_song.msgId)) { + _history = item->history(); + findCurrent(); + } else { + _history = 0; + _index = -1; + } + SongData *song = _song.song->song(); + if (song->performer.isEmpty()) { + _name.setText(st::linkFont, song->title.isEmpty() ? (_song.song->name.isEmpty() ? qsl("Unknown Track") : _song.song->name) : song->title, _textNameOptions); + } else { + TextCustomTagsMap custom; + custom.insert(QChar('c'), qMakePair(textcmdStartLink(1), textcmdStopLink())); + _name.setRichText(st::linkFont, QString::fromUtf8("[c]%1[/c] \xe2\x80\x93 %2").arg(textRichPrepare(song->performer)).arg(song->title.isEmpty() ? qsl("Unknown Track") : textRichPrepare(song->title)), _textNameOptions, custom); + } + updateControls(); + } + + qint64 position = 0, duration = 0, display = 0; + if (playing == _song) { + if (!(playingState & AudioPlayerStoppedMask) && playingState != AudioPlayerFinishing) { + display = position = playingPosition; + duration = playingDuration; + } else { + display = playingDuration; + } + display = display / (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency); + } else if (_song) { + display = _song.song->song()->duration; + } + QString time = (_down == OverPlayback) ? _time : formatDurationText(display); + bool showPause = false, stopped = ((playingState & AudioPlayerStoppedMask) || playingState == AudioPlayerFinishing); + bool wasPlaying = !!_duration; + if (!stopped) { + showPause = (playingState == AudioPlayerPlaying || playingState == AudioPlayerResuming || playingState == AudioPlayerStarting); + } + float64 progress = duration ? snap(float64(position) / duration, 0., 1.) : 0.; + int32 loaded = duration ? _song.song->size : (_song.song->loader ? _song.song->loader->currentOffset() : 0); + float64 loadProgress = (duration || !_song.song->loader) ? 1. : snap(float64(loaded) / qMax(_song.song->size, 1), 0., 1.); + if (time != _time || showPause != _showPause) { + if (_time != time) { + _time = time; + _timeWidth = st::linkFont->m.width(_time); + } + _showPause = showPause; + if (duration != _duration || position != _position || loaded != _loaded) { + if (!songChanged && ((!stopped && duration && _duration) || (!duration && _loaded != loaded))) { + a_progress.start(progress); + a_loadProgress.start(loadProgress); + _progressAnim.start(); + } else { + a_progress = anim::fvalue(progress, progress); + a_loadProgress = anim::fvalue(loadProgress, loadProgress); + _progressAnim.stop(); + } + _position = position; + _duration = duration; + _loaded = loaded; + } + update(); + } else if (duration != _duration || position != _position || loaded != _loaded) { + if (!songChanged && ((!stopped && duration && _duration) || (!duration && _loaded != loaded))) { + a_progress.start(progress); + a_loadProgress.start(loadProgress); + _progressAnim.start(); + } else { + a_progress = anim::fvalue(progress, progress); + a_loadProgress = anim::fvalue(loadProgress, loadProgress); + _progressAnim.stop(); + } + _position = position; + _duration = duration; + _loaded = loaded; + } + + if (wasPlaying && playingState == AudioPlayerStoppedAtEnd) { + const History::MediaOverview *o = _history ? &_history->_overview[OverviewAudioDocuments] : 0; + if (audioPlayer() && o && _index >= 0 && _index < o->size() - 1) { + startPlay(o->at(_index + 1)); + } + } +} diff --git a/Telegram/SourceFiles/playerwidget.h b/Telegram/SourceFiles/playerwidget.h new file mode 100644 index 000000000..6b8d7ac39 --- /dev/null +++ b/Telegram/SourceFiles/playerwidget.h @@ -0,0 +1,100 @@ +/* +This file is part of Telegram Desktop, +the official desktop version of Telegram messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It 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 General Public License for more details. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014 John Preston, https://desktop.telegram.org +*/ +#pragma once + +#include "audio.h" + +class PlayerWidget : public TWidget { + Q_OBJECT + +public: + + PlayerWidget(QWidget *parent); + + void paintEvent(QPaintEvent *e); + void mousePressEvent(QMouseEvent *e); + void mouseMoveEvent(QMouseEvent *e); + void leaveEvent(QEvent *e); + void mouseReleaseEvent(QMouseEvent *e); + void resizeEvent(QResizeEvent *e); + + bool progressStep(float64 ms); + bool stateStep(float64 ms); + + void updateState(SongMsgId playing, AudioPlayerState playingState, int64 playingPosition, int64 playingDuration, int32 playingFrequency); + void updateState(); + void clearSelection(); + + void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type); + + bool seekingSong(const SongMsgId &song) const; + +private: + + enum OverState { + OverNone = 0, + OverPrev, + OverPlay, + OverNext, + OverClose, + OverVolume, + OverFull, + OverPlayback, + + OverStateCount + }; + void updateDownTime(); + void updateOverState(OverState newState); + void updateOverRect(OverState state); + + void updateControls(); + void findCurrent(); + + void startPlay(MsgId msgId); + + QPoint _lastMousePos; + void updateSelected(); + + bool _prevAvailable, _nextAvailable, _fullAvailable; + OverState _over, _down; + int32 _downCoord; + int64 _downDuration; + int32 _downFrequency; + float64 _downProgress; + + float64 _stateHovers[OverStateCount]; + typedef QMap StateAnimations; + StateAnimations _stateAnimations; + Animation _stateAnim; + + SongMsgId _song; + int32 _index; + History *_history; + QRect _playRect, _prevRect, _nextRect, _playbackRect; + QRect _closeRect, _volumeRect, _fullRect, _infoRect; + int32 _timeWidth; + QString _time; + Text _name; + bool _showPause; + int64 _position, _duration; + int32 _loaded; + + anim::fvalue a_progress, a_loadProgress; + Animation _progressAnim; + +}; diff --git a/Telegram/SourceFiles/profilewidget.cpp b/Telegram/SourceFiles/profilewidget.cpp index 8581d072b..a0221743b 100644 --- a/Telegram/SourceFiles/profilewidget.cpp +++ b/Telegram/SourceFiles/profilewidget.cpp @@ -579,6 +579,8 @@ void ProfileInner::paintEvent(QPaintEvent *e) { p.setPen(st::black->p); int oneState = 0; // < 0 - loading, 0 - no media, > 0 - link shown for (int i = 0; i < OverviewCount; ++i) { + if (i == OverviewAudioDocuments) continue; + int32 count = (_hist->_overviewCount[i] > 0) ? _hist->_overviewCount[i] : (_hist->_overviewCount[i] == 0 ? _hist->_overview[i].size() : -1); if (count < 0) { if (!oneState) oneState = count; @@ -859,6 +861,8 @@ void ProfileInner::resizeEvent(QResizeEvent *e) { _mediaShowAll.move(_left + _width - _mediaShowAll.width(), top); int wasCount = 0; // < 0 - loading, 0 - no media, > 0 - link shown for (int i = 0; i < OverviewCount; ++i) { + if (i == OverviewAudioDocuments) continue; + if (_allMediaTypes) { int32 count = (_hist->_overviewCount[i] > 0) ? _hist->_overviewCount[i] : (_hist->_overviewCount[i] == 0 ? _hist->_overview[i].size() : -1); if (count > 0) { @@ -957,7 +961,7 @@ void ProfileInner::updateNotifySettings() { _enableNotifications.setChecked(_peer->notify == EmptyNotifySettings || _peer->notify == UnknownNotifySettings || _peer->notify->mute < unixtime()); } -void ProfileInner::mediaOverviewUpdated(PeerData *peer) { +void ProfileInner::mediaOverviewUpdated(PeerData *peer, MediaOverviewType type) { if (peer == _peer) { resizeEvent(0); showAll(); @@ -1029,6 +1033,8 @@ void ProfileInner::showAll() { // shared media bool first = false, wasCount = false, manyCounts = false; for (int i = 0; i < OverviewCount; ++i) { + if (i == OverviewAudioDocuments) continue; + int32 count = (_hist->_overviewCount[i] > 0) ? _hist->_overviewCount[i] : (_hist->_overviewCount[i] == 0 ? _hist->_overview[i].size() : -1); if (count > 0) { if (wasCount) { @@ -1136,8 +1142,13 @@ void ProfileWidget::onScroll() { } void ProfileWidget::resizeEvent(QResizeEvent *e) { + int32 addToY = App::main() ? App::main()->contentScrollAddToY() : 0; + int32 newScrollY = _scroll.scrollTop() + addToY; _scroll.resize(size()); _inner.resize(width(), _inner.height()); + if (addToY) { + _scroll.scrollToY(newScrollY); + } } void ProfileWidget::mousePressEvent(QMouseEvent *e) { @@ -1176,6 +1187,13 @@ void ProfileWidget::paintTopBar(QPainter &p, float64 over, int32 decreaseWidth) } } +void ProfileWidget::topBarShadowParams(int32 &x, float64 &o) { + if (animating() && a_coord.current() >= 0) { + x = a_coord.current(); + o = a_alpha.current(); + } +} + void ProfileWidget::topBarClick() { App::main()->showBackFromStack(); } @@ -1253,8 +1271,8 @@ void ProfileWidget::updateNotifySettings() { _inner.updateNotifySettings(); } -void ProfileWidget::mediaOverviewUpdated(PeerData *peer) { - _inner.mediaOverviewUpdated(peer); +void ProfileWidget::mediaOverviewUpdated(PeerData *peer, MediaOverviewType type) { + _inner.mediaOverviewUpdated(peer, type); } void ProfileWidget::clear() { diff --git a/Telegram/SourceFiles/profilewidget.h b/Telegram/SourceFiles/profilewidget.h index 4ecaa77d5..7acc3dfe3 100644 --- a/Telegram/SourceFiles/profilewidget.h +++ b/Telegram/SourceFiles/profilewidget.h @@ -53,7 +53,7 @@ public: void loadProfilePhotos(int32 yFrom); void updateNotifySettings(); - void mediaOverviewUpdated(PeerData *peer); + void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type); ~ProfileInner(); @@ -187,6 +187,7 @@ public: void dropEvent(QDropEvent *e); void paintTopBar(QPainter &p, float64 over, int32 decreaseWidth); + void topBarShadowParams(int32 &x, float64 &o); void topBarClick(); PeerData *peer() const; @@ -200,7 +201,7 @@ public: void updateOnlineDisplayTimer(); void updateNotifySettings(); - void mediaOverviewUpdated(PeerData *peer); + void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type); void clear(); ~ProfileWidget(); diff --git a/Telegram/SourceFiles/settings.cpp b/Telegram/SourceFiles/settings.cpp index 3634fb63c..a770c64a9 100644 --- a/Telegram/SourceFiles/settings.cpp +++ b/Telegram/SourceFiles/settings.cpp @@ -156,6 +156,8 @@ int gNotifyDefaultDelay = 1500; int gOtherOnline = 0; +float64 gSongVolume = 0.9; + void settingsParseArgs(int argc, char *argv[]) { #ifdef Q_OS_MAC gCustomNotifies = (QSysInfo::macVersion() < QSysInfo::MV_10_8); diff --git a/Telegram/SourceFiles/settings.h b/Telegram/SourceFiles/settings.h index 39d789b4a..48faec016 100644 --- a/Telegram/SourceFiles/settings.h +++ b/Telegram/SourceFiles/settings.h @@ -304,4 +304,6 @@ DeclareSetting(int, NotifyDefaultDelay); DeclareSetting(int, OtherOnline); +DeclareSetting(float64, SongVolume); + void settingsParseArgs(int argc, char *argv[]); diff --git a/Telegram/SourceFiles/structs.cpp b/Telegram/SourceFiles/structs.cpp index 522c712e7..c9bbaad73 100644 --- a/Telegram/SourceFiles/structs.cpp +++ b/Telegram/SourceFiles/structs.cpp @@ -448,7 +448,7 @@ void AudioOpenLink::onClick(Qt::MouseButton button) const { AudioMsgId playing; AudioPlayerState playingState = AudioPlayerStopped; audioPlayer()->currentState(&playing, &playingState); - if (playing.msgId == App::hoveredLinkItem()->id && playingState != AudioPlayerStopped) { + if (playing.msgId == App::hoveredLinkItem()->id && !(playingState & AudioPlayerStoppedMask) && playingState != AudioPlayerFinishing) { audioPlayer()->pauseresume(OverviewAudios); } else { audioPlayer()->play(AudioMsgId(data, App::hoveredLinkItem()->id)); @@ -545,9 +545,8 @@ QString AudioData::already(bool check) { return location.name; } -void DocumentOpenLink::onClick(Qt::MouseButton button) const { - DocumentData *data = document(); - if (!data->date || button != Qt::LeftButton) return; +void DocumentOpenLink::doOpen(DocumentData *data) { + if (!data->date) return; bool play = data->song() && App::hoveredLinkItem() && audioPlayer(); QString already = data->already(true); @@ -556,10 +555,12 @@ void DocumentOpenLink::onClick(Qt::MouseButton button) const { SongMsgId playing; AudioPlayerState playingState = AudioPlayerStopped; audioPlayer()->currentState(&playing, &playingState); - if (playing.msgId == App::hoveredLinkItem()->id && playingState != AudioPlayerStopped) { + if (playing.msgId == App::hoveredLinkItem()->id && !(playingState & AudioPlayerStoppedMask) && playingState != AudioPlayerFinishing) { audioPlayer()->pauseresume(OverviewDocuments); } else { - audioPlayer()->play(SongMsgId(data, App::hoveredLinkItem()->id)); + SongMsgId song(data, App::hoveredLinkItem()->id); + audioPlayer()->play(song); + if (App::main()) App::main()->documentPlayProgress(song); } } else if (data->size < MediaViewImageSizeLimit) { QImageReader reader(already); @@ -604,6 +605,11 @@ void DocumentOpenLink::onClick(Qt::MouseButton button) const { } } +void DocumentOpenLink::onClick(Qt::MouseButton button) const { + if (button != Qt::LeftButton) return; + doOpen(document()); +} + void DocumentSaveLink::doSave(DocumentData *data, bool forceSavingAs) { if (!data->date) return; diff --git a/Telegram/SourceFiles/structs.h b/Telegram/SourceFiles/structs.h index d73c90d22..7849674ad 100644 --- a/Telegram/SourceFiles/structs.h +++ b/Telegram/SourceFiles/structs.h @@ -627,6 +627,7 @@ class DocumentOpenLink : public DocumentLink { public: DocumentOpenLink(DocumentData *document) : DocumentLink(document) { } + static void doOpen(DocumentData *document); void onClick(Qt::MouseButton button) const; }; diff --git a/Telegram/SourceFiles/types.h b/Telegram/SourceFiles/types.h index 2c7684f11..5d8ee7a0e 100644 --- a/Telegram/SourceFiles/types.h +++ b/Telegram/SourceFiles/types.h @@ -273,6 +273,7 @@ enum DataBlockId { dbiRecentStickers = 0x26, dbiDcOption = 0x27, dbiTryIPv6 = 0x28, + dbiSongVolume = 0x29, dbiEncryptedWithSalt = 333, dbiEncrypted = 444, diff --git a/Telegram/SourceFiles/window.cpp b/Telegram/SourceFiles/window.cpp index bb218b9c9..00f713269 100644 --- a/Telegram/SourceFiles/window.cpp +++ b/Telegram/SourceFiles/window.cpp @@ -1712,10 +1712,10 @@ void Window::sendPaths() { } } -void Window::mediaOverviewUpdated(PeerData *peer) { - if (main) main->mediaOverviewUpdated(peer); +void Window::mediaOverviewUpdated(PeerData *peer, MediaOverviewType type) { + if (main) main->mediaOverviewUpdated(peer, type); if (!_mediaView || _mediaView->isHidden()) return; - _mediaView->mediaOverviewUpdated(peer); + _mediaView->mediaOverviewUpdated(peer, type); } void Window::documentUpdated(DocumentData *doc) { diff --git a/Telegram/SourceFiles/window.h b/Telegram/SourceFiles/window.h index 3835f573c..321cbae27 100644 --- a/Telegram/SourceFiles/window.h +++ b/Telegram/SourceFiles/window.h @@ -226,7 +226,7 @@ public: void sendPaths(); - void mediaOverviewUpdated(PeerData *peer); + void mediaOverviewUpdated(PeerData *peer, MediaOverviewType type); void documentUpdated(DocumentData *doc); void changingMsgId(HistoryItem *row, MsgId newId); diff --git a/Telegram/Telegram.vcxproj b/Telegram/Telegram.vcxproj index f392e9280..3d511a4c0 100644 --- a/Telegram/Telegram.vcxproj +++ b/Telegram/Telegram.vcxproj @@ -352,6 +352,10 @@ true true + + true + true + true true @@ -618,6 +622,10 @@ true true + + true + true + true true @@ -909,6 +917,10 @@ true true + + true + true + true true @@ -1044,6 +1056,7 @@ + true @@ -1993,6 +2006,20 @@ .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/passcodewidget.h" + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing playerwidget.h... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/playerwidget.h" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing playerwidget.h... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/playerwidget.h" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing playerwidget.h... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/playerwidget.h" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" + $(QTDIR)\bin\moc.exe;%(FullPath) diff --git a/Telegram/Telegram.vcxproj.filters b/Telegram/Telegram.vcxproj.filters index 6694d680f..b3cb689af 100644 --- a/Telegram/Telegram.vcxproj.filters +++ b/Telegram/Telegram.vcxproj.filters @@ -903,6 +903,18 @@ Generated Files\Release + + Source Files + + + Generated Files\Deploy + + + Generated Files\Debug + + + Generated Files\Release + @@ -1198,6 +1210,9 @@ Source Files + + Source Files + From 4c1d12fa703e918f94b892086a2281a0d1c63d06 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 3 Jul 2015 13:46:48 +0300 Subject: [PATCH 032/121] langs updated --- Telegram/Resources/lang.strings | 3 ++- Telegram/SourceFiles/langs/lang_de.strings | 3 ++- Telegram/SourceFiles/langs/lang_es.strings | 9 +++++---- Telegram/SourceFiles/langs/lang_it.strings | 3 ++- Telegram/SourceFiles/langs/lang_ko.strings | 3 ++- Telegram/SourceFiles/langs/lang_nl.strings | 3 ++- Telegram/SourceFiles/langs/lang_pt_BR.strings | 11 ++++++----- 7 files changed, 21 insertions(+), 14 deletions(-) diff --git a/Telegram/Resources/lang.strings b/Telegram/Resources/lang.strings index 06ae05cea..9ac49a605 100644 --- a/Telegram/Resources/lang.strings +++ b/Telegram/Resources/lang.strings @@ -368,6 +368,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_files_header" = "Files overview"; "lng_profile_audios" = "{count:_not_used_|# voice message|# voice messages} »"; "lng_profile_audios_header" = "Voice messages overview"; +"lng_profile_audio_files_header" = "Playlist"; "lng_profile_show_all_types" = "Show all types"; "lng_profile_copy_phone" = "Copy phone number"; @@ -602,7 +603,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop was updated to version {version}\n\n{changes}\n\nFull version history is available here:\n{link}"; "lng_new_version_minor" = "— Bug fixes and other minor improvements"; -"lng_new_version_text" = "— Forward photos, media and stickers with drag-n-drop\n— Drag-n-drop text messages by timestamp to forward them\n— Larger stickers panel\n— IPv6 checkbox added to Connection Type in Settings"; +"lng_new_version_text" = "— Improved in-app media playback\n— Bug fixes and other minor improvements"; "lng_menu_insert_unicode" = "Insert Unicode control character"; diff --git a/Telegram/SourceFiles/langs/lang_de.strings b/Telegram/SourceFiles/langs/lang_de.strings index a23e0d54d..23a59e442 100644 --- a/Telegram/SourceFiles/langs/lang_de.strings +++ b/Telegram/SourceFiles/langs/lang_de.strings @@ -368,6 +368,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_files_header" = "Dateiübersicht"; "lng_profile_audios" = "{count:_not_used_|# Sprachnachricht|# Sprachnachrichten} »"; "lng_profile_audios_header" = "Übersicht Sprachnachrichten"; +"lng_profile_audio_files_header" = "Wiedergabeliste"; "lng_profile_show_all_types" = "Alle Filter anzeigen"; "lng_profile_copy_phone" = "Telefonnummer kopieren"; @@ -602,7 +603,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop wurde aktualisiert auf Version {version}\n\n{changes}\n\nGesamter Versionsverlauf:\n{link}"; "lng_new_version_minor" = "— Fehlerbehebungen und Softwareoptimierungen"; -"lng_new_version_text" = "— Fotos, Medien und Sticker per Drag-and-drop weiterleiten\n— Drag-and-drop von Textnachrichten (Chatnachricht bei der Uhrzeit festhalten + verschieben)\n— Sticker Panel wurde vergrössert\n— IPv6 Auswahl in Verbindungseinstellungen hinzugefügt"; +"lng_new_version_text" = "— In-App Medienwiedergabe optimiert\n— Fehlerbehebungen und kleinere Verbesserungen"; "lng_menu_insert_unicode" = "Unicode-Steuerzeichen einfügen"; diff --git a/Telegram/SourceFiles/langs/lang_es.strings b/Telegram/SourceFiles/langs/lang_es.strings index c61ae8563..4f391b027 100644 --- a/Telegram/SourceFiles/langs/lang_es.strings +++ b/Telegram/SourceFiles/langs/lang_es.strings @@ -363,11 +363,12 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_photos" = "{count:_not_used_|# foto|# fotos} »"; "lng_profile_photos_header" = "Todas las fotos"; "lng_profile_videos" = "{count:_not_used_|# vídeo|# vídeos} »"; -"lng_profile_videos_header" = "Todos los vídeos"; +"lng_profile_videos_header" = "Vídeos"; "lng_profile_files" = "{count:_not_used_|# archivo|# archivos} »"; -"lng_profile_files_header" = "Todos los archivos"; +"lng_profile_files_header" = "Archivos"; "lng_profile_audios" = "{count:_not_used_|# mensaje de voz|# mensajes de voz} »"; -"lng_profile_audios_header" = "Todos los mensajes de voz"; +"lng_profile_audios_header" = "Mensajes de voz"; +"lng_profile_audio_files_header" = "Lista de reproducción"; "lng_profile_show_all_types" = "Mostrar todos los tipos"; "lng_profile_copy_phone" = "Copiar número"; @@ -602,7 +603,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop fue actualizada a la versión {version}\n\n{changes}\n\nEl historial completo está disponible aquí:\n{link}"; "lng_new_version_minor" = "— Corrección de errores y otras mejoras menores"; -"lng_new_version_text" = "— Reenvía fotos, multimedia y stickers arrastrándolos y soltándolos\n— Arrastrar y soltar para mensajes (mantén pulsado sobre la hora del mensaje en el chat y suéltalo)\n— Panel de stickers más grande\n— Opción de IPv6 añadida al Tipo de conexión, en Ajustes."; +"lng_new_version_text" = "— Reproducción de la multimedia dentro de la aplicación mejorada\n— Corrección de errores y otras mejoras menores"; "lng_menu_insert_unicode" = "Insertar caracteres de control Unicode"; diff --git a/Telegram/SourceFiles/langs/lang_it.strings b/Telegram/SourceFiles/langs/lang_it.strings index 89bc68e42..c1ffa6fb4 100644 --- a/Telegram/SourceFiles/langs/lang_it.strings +++ b/Telegram/SourceFiles/langs/lang_it.strings @@ -368,6 +368,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_files_header" = "Panoramica file"; "lng_profile_audios" = "{count:_not_used_|# nota vocale|# note vocali} »"; "lng_profile_audios_header" = "Panoramica note vocali"; +"lng_profile_audio_files_header" = "Playlist"; "lng_profile_show_all_types" = "Mostra tutti i tipi"; "lng_profile_copy_phone" = "Copia numero di telefono"; @@ -602,7 +603,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop si è aggiornato alla versione {version}\n\n{changes}\n\nLa cronologia degli update è disponibile qui:\n{link}"; "lng_new_version_minor" = "— Bug fix e altri miglioramenti minori"; -"lng_new_version_text" = "— Inoltra foto, media e sticker trascinandoli e rilasciandoli\n— Trascina e rilascia messaggi di testo premendo sull'orario per inoltrarli\n— Pannello degli sticker più largo\n— Aggiunto checkbox per l'IPv6 nelle Impostazioni di Connessione"; +"lng_new_version_text" = "— Riproduzione dei media migliorata\n— Risoluzione di bug e miglioramenti minori"; "lng_menu_insert_unicode" = "Inserisci carattere di controllo Unicode"; diff --git a/Telegram/SourceFiles/langs/lang_ko.strings b/Telegram/SourceFiles/langs/lang_ko.strings index d2a4e8574..e8e788389 100644 --- a/Telegram/SourceFiles/langs/lang_ko.strings +++ b/Telegram/SourceFiles/langs/lang_ko.strings @@ -368,6 +368,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_files_header" = "파일 내역"; "lng_profile_audios" = "{count:_not_used_|#개의 음성 메시지|#개의 음성 메시지} »"; "lng_profile_audios_header" = "음성 메시지 내역"; +"lng_profile_audio_files_header" = "재생목록"; "lng_profile_show_all_types" = "모든 유형 보기"; "lng_profile_copy_phone" = "전화번호 복사"; @@ -602,7 +603,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "텔레그램 데스크탑은 {version} 버전으로 업데이트 되었습니다.\n\n{changes}\n\n전체 버전 히스토리는 아래에서 확인 가능합니다:\n{link}"; "lng_new_version_minor" = "— 버그 수정 및 일부 기능 향상"; -"lng_new_version_text" = "— 드래그 앤 드롭으로 사진, 미디어와 스티커 전달\n— 드래그 앤 드롭으로 타임스탬프 순 메시지 전달\n— 큰 스티커 패널\n— IPv6 설정 추가"; +"lng_new_version_text" = "— 앱내 미디어 재생 기능 향상\n— 버그 수정 및 마이나 기능 향상"; "lng_menu_insert_unicode" = "유니코드 문자를 입력하세요."; diff --git a/Telegram/SourceFiles/langs/lang_nl.strings b/Telegram/SourceFiles/langs/lang_nl.strings index c945334a4..1bf45b613 100644 --- a/Telegram/SourceFiles/langs/lang_nl.strings +++ b/Telegram/SourceFiles/langs/lang_nl.strings @@ -368,6 +368,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_files_header" = "Bestandsoverzicht"; "lng_profile_audios" = "{count:_not_used_|# spraakbericht|# spraakberichten} »"; "lng_profile_audios_header" = "Overzicht van spraakberichten"; +"lng_profile_audio_files_header" = "Afspeellijst"; "lng_profile_show_all_types" = "Alles weergeven"; "lng_profile_copy_phone" = "Telefoonnummer kopiëren"; @@ -602,7 +603,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram is bijgewerkt naar versie {version}\n\n{changes} \n\nVolledige versiegeschiedenis is hier te vinden:\n{link}"; "lng_new_version_minor" = "— Probleemoplossing en andere kleine verbeteringen"; -"lng_new_version_text" = "— Foto's media en stickers doorsturen door slepen en los te laten.\n— Berichten doorsturen door de tijdsaanduiding aan te klikken, slepen en los te laten.\n— Groter stickerspaneel\n— IPv6 optie toegevoegd aan de connectietypes onder instellingen."; +"lng_new_version_text" = "— Media afspelen binnen de app verbeterd\n— Probleemoplossing en kleine verbeteringen"; "lng_menu_insert_unicode" = "Unicode-besturingsteken invoegen"; diff --git a/Telegram/SourceFiles/langs/lang_pt_BR.strings b/Telegram/SourceFiles/langs/lang_pt_BR.strings index c469e9a8b..a775b8b38 100644 --- a/Telegram/SourceFiles/langs/lang_pt_BR.strings +++ b/Telegram/SourceFiles/langs/lang_pt_BR.strings @@ -361,13 +361,14 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_shared_media" = "Mídia compartilhada"; "lng_profile_no_media" = "Nenhuma mídia nessa conversa."; "lng_profile_photos" = "{count:_not_used_|# foto|# fotos} »"; -"lng_profile_photos_header" = "Visualização de fotos"; +"lng_profile_photos_header" = "Fotos"; "lng_profile_videos" = "{count:_not_used_|# arquivo de vídeo|# arquivo de vídeos} »"; -"lng_profile_videos_header" = "Visualização de vídeos"; +"lng_profile_videos_header" = "Vídeos"; "lng_profile_files" = "{count:_not_used_|# arquivo|# arquivos} »"; -"lng_profile_files_header" = "Visualização de arquivos"; +"lng_profile_files_header" = "Arquivos"; "lng_profile_audios" = "{count:_not_used_|# mensagem de voz|# mensagens de voz} »"; -"lng_profile_audios_header" = "Visualização de mensagens de voz"; +"lng_profile_audios_header" = "Mensagens de voz"; +"lng_profile_audio_files_header" = "Reprodução"; "lng_profile_show_all_types" = "Mostrar todos os tipos"; "lng_profile_copy_phone" = "Copiar número de telefone"; @@ -602,7 +603,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop foi atualizado para a versão {version}\n\n{changes}\n\nHistórico completo de mudanças disponível aqui:\n{link}"; "lng_new_version_minor" = "— Resolução de bugs e outras menores melhorias"; -"lng_new_version_text" = "— Encaminhar fotos, mídias e stickers com arrastar-e-soltar\n— Encaminhar textos pressionando sobre a data e hora da mensagem e arrastando para outra conversa\n— Painel de stickers maior\n— IPv6 adicionado em 'Tipos de Conexão' nas Configurações"; +"lng_new_version_text" = "— Reprodução de mídia no app melhorada\n— Resolução de bugs e menores melhorias"; "lng_menu_insert_unicode" = "Inserir caractere de controle Unicode"; From a65ef6fb00e633b26d065647dac92228bed6ac00 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 3 Jul 2015 13:48:28 +0300 Subject: [PATCH 033/121] preparing version 0.8.37.dev --- Telegram/PrepareWin.bat | 10 +- Telegram/Resources/style.txt | 2 + Telegram/SourceFiles/application.cpp | 4 +- Telegram/SourceFiles/config.h | 6 +- Telegram/SourceFiles/history.cpp | 110 ++++++++++++ Telegram/SourceFiles/history.h | 3 + Telegram/SourceFiles/mainwidget.cpp | 3 +- Telegram/SourceFiles/overviewwidget.cpp | 187 ++++++++++++++++++-- Telegram/SourceFiles/overviewwidget.h | 9 +- Telegram/SourceFiles/playerwidget.cpp | 4 + Telegram/SourceFiles/playerwidget.h | 4 + Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 +- Telegram/Version.sh | 2 +- 15 files changed, 322 insertions(+), 36 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index 9b272df83..d564a9e30 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,11 +1,11 @@ @echo OFF set "AppVersionStrMajor=0.8" -set "AppVersion=8036" -set "AppVersionStrSmall=0.8.36" -set "AppVersionStr=0.8.36" -set "AppVersionStrFull=0.8.36.0" -set "DevChannel=0" +set "AppVersion=8037" +set "AppVersionStrSmall=0.8.37" +set "AppVersionStr=0.8.37" +set "AppVersionStrFull=0.8.37.0" +set "DevChannel=1" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index 1afa28f89..a5fee7ace 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -1997,3 +1997,5 @@ playerVolume: sprite(352px, 179px, 44px, 12px); playerInactiveOpacity: 0.8; playerUnavailableOpacity: 0.3; playerDuration: 200; + +playlistHoverBg: #f2f2f2; diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index abc5ee6d5..dbc8dce11 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -640,8 +640,8 @@ void Application::checkMapVersion() { psRegisterCustomScheme(); if (Local::oldMapVersion()) { QString versionFeatures; - if (DevChannel && Local::oldMapVersion() < 8035) { - versionFeatures = lang(lng_new_version_minor);// QString::fromUtf8("\xe2\x80\x94 Forward photos, media and stickers with drag-n-drop\n\xe2\x80\x94 Drag-n-drop text messages by timestamp to forward them\n\xe2\x80\x94 Larger stickers panel");// .replace('@', qsl("@") + QChar(0x200D)); + if (DevChannel && Local::oldMapVersion() < 8037) { + versionFeatures = lang(lng_new_version_text);// QString::fromUtf8("\xe2\x80\x94 Forward photos, media and stickers with drag-n-drop\n\xe2\x80\x94 Drag-n-drop text messages by timestamp to forward them\n\xe2\x80\x94 Larger stickers panel");// .replace('@', qsl("@") + QChar(0x200D)); } else if (!DevChannel && Local::oldMapVersion() < 8036) { versionFeatures = lang(lng_new_version_text).trimmed(); } diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index e887ecb72..67ba6a796 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,9 +17,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8036; -static const wchar_t *AppVersionStr = L"0.8.36"; -static const bool DevChannel = false; +static const int32 AppVersion = 8037; +static const wchar_t *AppVersionStr = L"0.8.37"; +static const bool DevChannel = true; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index c272b0fd1..0c3ef3821 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -3053,6 +3053,116 @@ void HistoryDocument::draw(QPainter &p, const HistoryItem *parent, bool selected } } +void HistoryDocument::drawInPlaylist(QPainter &p, const HistoryItem *parent, bool selected, bool over, int32 width) const { + bool out = parent->out(), already = !data->already().isEmpty(), hasdata = !data->data.isEmpty(); + int32 height = st::mediaPadding.top() + st::mediaThumbSize + st::mediaPadding.bottom(); + + style::color bg(selected ? st::msgInSelectBg : (over ? st::playlistHoverBg : st::msgInBg)); + p.fillRect(0, 0, width, height, bg->b); + + QString statusText; + if (data->song()) { + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + int64 playingPosition = 0, playingDuration = 0; + int32 playingFrequency = 0; + if (audioPlayer()) { + audioPlayer()->currentState(&playing, &playingState, &playingPosition, &playingDuration, &playingFrequency); + } + + QRect img; + if (data->status == FileFailed) { + statusText = lang(lng_attach_failed); + img = st::mediaAudioInImg; + } else if (data->status == FileUploading) { + if (_uplTextCache.isEmpty() || _uplDone != data->uploadOffset) { + _uplDone = data->uploadOffset; + _uplTextCache = formatDownloadText(_uplDone, data->size); + } + statusText = _uplTextCache; + img = st::mediaAudioInImg; + } else if (already || hasdata) { + bool isPlaying = (playing.msgId == parent->id); + bool showPause = false; + if (playing.msgId == parent->id && !(playingState & AudioPlayerStoppedMask) && playingState != AudioPlayerFinishing) { + statusText = formatDurationText(playingPosition / (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency)) + qsl(" / ") + formatDurationText(playingDuration / (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency)); + showPause = (playingState == AudioPlayerPlaying || playingState == AudioPlayerResuming || playingState == AudioPlayerStarting); + } else { + statusText = formatDurationText(data->song()->duration); + } + if (!showPause && playing.msgId == parent->id && App::main() && App::main()->player()->seekingSong(playing)) showPause = true; + img = isPlaying ? (showPause ? st::mediaPauseOutImg : st::mediaPlayOutImg) : (showPause ? st::mediaPauseInImg : st::mediaPlayInImg); + } else { + if (data->loader) { + int32 offset = data->loader->currentOffset(); + if (_dldTextCache.isEmpty() || _dldDone != offset) { + _dldDone = offset; + _dldTextCache = formatDownloadText(_dldDone, data->size); + } + statusText = _dldTextCache; + } else { + statusText = _size; + } + img = st::mediaAudioInImg; + } + + p.drawPixmap(QPoint(st::mediaPadding.left(), st::mediaPadding.top()), App::sprite(), img); + } else { + if (data->status == FileFailed) { + statusText = lang(lng_attach_failed); + } else if (data->status == FileUploading) { + if (_uplTextCache.isEmpty() || _uplDone != data->uploadOffset) { + _uplDone = data->uploadOffset; + _uplTextCache = formatDownloadText(_uplDone, data->size); + } + statusText = _uplTextCache; + } else if (data->loader) { + int32 offset = data->loader->currentOffset(); + if (_dldTextCache.isEmpty() || _dldDone != offset) { + _dldDone = offset; + _dldTextCache = formatDownloadText(_dldDone, data->size); + } + statusText = _dldTextCache; + } else { + statusText = _size; + } + + if (_thumbw) { + data->thumb->checkload(); + p.drawPixmap(QPoint(st::mediaPadding.left(), st::mediaPadding.top()), data->thumb->pixSingle(_thumbw, 0, st::mediaThumbSize, st::mediaThumbSize)); + } else { + p.drawPixmap(QPoint(st::mediaPadding.left(), st::mediaPadding.top()), App::sprite(), st::mediaDocInImg); + } + } + if (selected) { + App::roundRect(p, st::mediaPadding.left(), st::mediaPadding.top(), st::mediaThumbSize, st::mediaThumbSize, textstyleCurrent()->selectOverlay, SelectedOverlayCorners); + } + + int32 tleft = st::mediaPadding.left() + st::mediaThumbSize + st::mediaPadding.right(); + int32 twidth = width - tleft - st::mediaPadding.right(); + int32 fullTimeWidth = parent->timeWidth(true) + st::msgPadding.right(); + int32 secondwidth = width - tleft - fullTimeWidth; + + p.setFont(st::mediaFont->f); + p.setPen(st::black->c); + if (twidth < _namew) { + p.drawText(tleft, st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, st::mediaFont->m.elidedText(_name, Qt::ElideRight, twidth)); + } else { + p.drawText(tleft, st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, _name); + } + + style::color status(selected ? st::mediaInSelectColor : st::mediaInColor); + p.setPen(status->p); + p.drawText(tleft, st::mediaPadding.top() + st::mediaThumbSize - st::mediaDetailsShift - st::mediaFont->descent, statusText); +} + +TextLinkPtr HistoryDocument::linkInPlaylist() { + if (!data->loader && data->access) { + return _openl; + } + return TextLinkPtr(); +} + void HistoryDocument::regItem(HistoryItem *item) { App::regDocumentItem(data, item); } diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index f13c0f922..975e1a42d 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -1046,6 +1046,9 @@ public: } ImagePtr replyPreview(); + void drawInPlaylist(QPainter &p, const HistoryItem *parent, bool selected, bool over, int32 width) const; + TextLinkPtr linkInPlaylist(); + private: DocumentData *data; diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index c1a80ed29..88b36c96a 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -2076,8 +2076,7 @@ void MainWidget::showMediaOverview(PeerData *peer, MediaOverviewType type, bool if (!animCache.isNull()) { overview->animShow(animCache, animTopBarCache, back, lastScrollTop); } else { - overview->show(); - overview->activate(); + overview->fastShow(); } history.animStop(); history.showPeer(0, 0, false, true); diff --git a/Telegram/SourceFiles/overviewwidget.cpp b/Telegram/SourceFiles/overviewwidget.cpp index 9b1b7e095..4fc935d75 100644 --- a/Telegram/SourceFiles/overviewwidget.cpp +++ b/Telegram/SourceFiles/overviewwidget.cpp @@ -40,13 +40,16 @@ OverviewInner::OverviewInner(OverviewWidget *overview, ScrollArea *scroll, const , _photosInRow(1) , _photosToAdd(0) , _selMode(false) + , _audioLeft(st::msgMargin.left()) + , _audioWidth(st::msgMinWidth) + , _audioHeight(st::mediaPadding.top() + st::mediaThumbSize + st::mediaPadding.bottom()) , _width(st::wndMinWidth) , _height(0) , _minHeight(0) , _addToY(0) , _cursor(style::cur_default) , _dragAction(NoDrag) - , _dragItem(0) + , _dragItem(0), _selectedMsgId(0) , _dragItemIndex(-1) , _mousedItem(0) , _mousedItemIndex(-1) @@ -77,6 +80,10 @@ OverviewInner::OverviewInner(OverviewWidget *overview, ScrollArea *scroll, const mediaOverviewUpdated(); setMouseTracking(true); + + if (_type == OverviewAudioDocuments) { + + } } bool OverviewInner::event(QEvent *e) { @@ -133,7 +140,7 @@ void OverviewInner::touchUpdateSpeed() { void OverviewInner::fixItemIndex(int32 ¤t, MsgId msgId) const { if (!msgId) { current = -1; - } else if (_type == OverviewPhotos) { + } else if (_type == OverviewPhotos || _type == OverviewAudioDocuments) { int32 l = _hist->_overview[_type].size(); if (current < 0 || current >= l || _hist->_overview[_type][current] != msgId) { current = -1; @@ -166,6 +173,10 @@ bool OverviewInner::itemHasPoint(MsgId msgId, int32 index, int32 x, int32 y) con if (x >= 0 && x < _vsize && y >= 0 && y < _vsize) { return true; } + } else if (_type == OverviewAudioDocuments) { + if (x >= _audioLeft && x < _audioLeft + _audioWidth && y >= 0 && y < _audioHeight) { + return true; + } } else { HistoryItem *item = App::histItemById(msgId); HistoryMedia *media = item ? item->getMedia(true) : 0; @@ -185,6 +196,8 @@ bool OverviewInner::itemHasPoint(MsgId msgId, int32 index, int32 x, int32 y) con int32 OverviewInner::itemHeight(MsgId msgId, int32 index) const { if (_type == OverviewPhotos) { return _vsize; + } else if (_type == OverviewAudioDocuments) { + return _audioHeight; } fixItemIndex(index, msgId); @@ -200,7 +213,7 @@ void OverviewInner::moveToNextItem(MsgId &msgId, int32 &index, MsgId upTo, int32 } index += delta; - if (_type == OverviewPhotos) { + if (_type == OverviewPhotos || _type == OverviewAudioDocuments) { if (index < 0 || index >= _hist->_overview[_type].size()) { msgId = 0; index = -1; @@ -234,6 +247,8 @@ void OverviewInner::updateMsg(MsgId itemId, int32 itemIndex) { int32 vsize = (_vsize + st::overviewPhotoSkip); int32 row = (_photosToAdd + itemIndex) / _photosInRow, col = (_photosToAdd + itemIndex) % _photosInRow; update(int32(col * w), _addToY + int32(row * vsize), qCeil(w), vsize); + } else if (_type == OverviewAudioDocuments) { + update(_audioLeft, _addToY + int32(itemIndex * _audioHeight), _audioWidth, _audioHeight); } else { HistoryItem *item = App::histItemById(itemId); HistoryMedia *media = item ? item->getMedia(true) : 0; @@ -570,7 +585,7 @@ void OverviewInner::applyDragSelection() { } if (_dragSelecting) { for (int32 i = _dragSelToIndex; i <= _dragSelFromIndex; ++i) { - MsgId msgid = (_type == OverviewPhotos) ? _hist->_overview[_type][i] : _items[i].msgid; + MsgId msgid = (_type == OverviewPhotos || _type == OverviewAudioDocuments) ? _hist->_overview[_type][i] : _items[i].msgid; if (!msgid) continue; SelectedItems::iterator j = _selected.find(msgid); @@ -589,7 +604,7 @@ void OverviewInner::applyDragSelection() { } } else { for (int32 i = _dragSelToIndex; i <= _dragSelFromIndex; ++i) { - MsgId msgid = (_type == OverviewPhotos) ? _hist->_overview[_type][i] : _items[i].msgid; + MsgId msgid = (_type == OverviewPhotos || _type == OverviewAudioDocuments) ? _hist->_overview[_type][i] : _items[i].msgid; if (!msgid) continue; SelectedItems::iterator j = _selected.find(msgid); @@ -612,6 +627,8 @@ QPoint OverviewInner::mapMouseToItem(QPoint p, MsgId itemId, int32 itemIndex) { float64 w = (_width - st::overviewPhotoSkip) / float64(_photosInRow); p.setX(p.x() - int32(col * w) - st::overviewPhotoSkip); p.setY(p.y() - _addToY - row * (_vsize + st::overviewPhotoSkip) - st::overviewPhotoSkip); + } else if (_type == OverviewAudioDocuments) { + p.setY(p.y() - _addToY - itemIndex * _audioHeight); } else { p.setY(p.y() - _addToY - (_height - _items[itemIndex].y)); } @@ -622,6 +639,16 @@ void OverviewInner::clear() { _cached.clear(); } +int32 OverviewInner::itemTop(MsgId msgId) const { + if (_type == OverviewAudioDocuments) { + int32 index = _hist->_overview[_type].indexOf(msgId); + if (index >= 0) { + return _addToY + int32(index * _audioHeight); + } + } + return -1; +} + QPixmap OverviewInner::genPix(PhotoData *photo, int32 size) { size *= cIntRetinaFactor(); QImage img = (photo->full->loaded() ? photo->full : (photo->medium->loaded() ? photo->medium : photo->thumb))->pix().toImage(); @@ -747,6 +774,32 @@ void OverviewInner::paintEvent(QPaintEvent *e) { } } } + } else if (_type == OverviewAudioDocuments) { + int32 from = int32(r.top() - _addToY) / int32(_audioHeight); + int32 to = int32(r.bottom() - _addToY) / int32(_audioHeight) + 1; + History::MediaOverview &overview(_hist->_overview[_type]); + int32 count = overview.size(); + p.translate(_audioLeft, _addToY + from * _audioHeight); + for (int32 index = from; index < to; ++index) { + if (index >= count) break; + + HistoryItem *item = App::histItemById(overview[index]); + HistoryMedia *m = item ? item->getMedia(true) : 0; + if (!m || m->type() != MediaTypeDocument) continue; + + uint32 sel = 0; + if (index >= selfrom && index <= selto) { + sel = (_dragSelecting && item->id > 0) ? FullItemSel : 0; + } else if (hasSel) { + SelectedItems::const_iterator i = _selected.constFind(item->id); + if (i != selEnd) { + sel = i.value(); + } + } + + static_cast(m)->drawInPlaylist(p, item, (sel == FullItemSel), ((_menu ? (App::contextItem() ? App::contextItem()->id : 0) : _selectedMsgId) == item->id), _audioWidth); + p.translate(0, _audioHeight); + } } else { p.translate(0, st::msgMargin.top() + _addToY); int32 y = 0, w = _width - st::msgMargin.left() - st::msgMargin.right(); @@ -825,6 +878,7 @@ void OverviewInner::onUpdateSelected() { TextLinkPtr lnk; HistoryItem *item = 0; int32 index = -1; + _selectedMsgId = 0; if (_type == OverviewPhotos) { float64 w = (float64(_width - st::overviewPhotoSkip) / _photosInRow); int32 inRow = int32((m.x() - (st::overviewPhotoSkip / 2)) / w), vsize = (_vsize + st::overviewPhotoSkip); @@ -860,6 +914,36 @@ void OverviewInner::onUpdateSelected() { } else { return; } + } else if (_type == OverviewAudioDocuments) { + int32 i = int32((m.y() - _addToY) / _audioHeight), count = _hist->_overview[_type].size(); + if (!count) return; + + bool upon = true; + if (i < 0) { + i = 0; + _selectedMsgId = -1; + upon = false; + } + if (i >= count) { + i = count - 1; + _selectedMsgId = -1; + upon = false; + } + MsgId msgid = _hist->_overview[_type][i]; + HistoryItem *histItem = App::histItemById(msgid); + if (histItem) { + item = histItem; + index = i; + if (upon && m.x() >= _audioLeft && m.x() < _audioLeft + _audioWidth) { + HistoryMedia *media = item->getMedia(true); + if (media && media->type() == MediaTypeDocument) { + lnk = static_cast(media)->linkInPlaylist(); + if (_selectedMsgId >= 0) _selectedMsgId = item->id; + } + } + } else { + return; + } } else { int32 w = _width - st::msgMargin.left() - st::msgMargin.right(); if (_items.isEmpty()) return; @@ -954,7 +1038,7 @@ void OverviewInner::onUpdateSelected() { _selected[_dragItem] = 0; updateDragSelection(0, -1, 0, -1, false); } else { - bool selectingDown = (_type == OverviewPhotos ? (_mousedItemIndex > _dragItemIndex) : (_mousedItemIndex < _dragItemIndex)) || (_mousedItemIndex == _dragItemIndex && (_type == OverviewPhotos ? (_dragStartPos.x() < m.x()) : (_dragStartPos.y() < m.y()))); + bool selectingDown = ((_type == OverviewPhotos || _type == OverviewAudioDocuments) ? (_mousedItemIndex > _dragItemIndex) : (_mousedItemIndex < _dragItemIndex)) || (_mousedItemIndex == _dragItemIndex && (_type == OverviewPhotos ? (_dragStartPos.x() < m.x()) : (_dragStartPos.y() < m.y()))); MsgId dragSelFrom = _dragItem, dragSelTo = _mousedItem; int32 dragSelFromIndex = _dragItemIndex, dragSelToIndex = _mousedItemIndex; if (!itemHasPoint(dragSelFrom, dragSelFromIndex, _dragStartPos.x(), _dragStartPos.y())) { // maybe exclude dragSelFrom @@ -963,6 +1047,10 @@ void OverviewInner::onUpdateSelected() { if (_dragStartPos.x() >= _vsize || ((_mousedItem == dragSelFrom) && (m.x() < _dragStartPos.x() + QApplication::startDragDistance()))) { moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, 1); } + } else if (_type == OverviewAudioDocuments) { + if (_dragStartPos.y() >= itemHeight(dragSelFrom, dragSelFromIndex) || ((_mousedItem == dragSelFrom) && (m.y() < _dragStartPos.y() + QApplication::startDragDistance()))) { + moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, 1); + } } else { if (_dragStartPos.y() >= (itemHeight(dragSelFrom, dragSelFromIndex) - st::msgMargin.bottom()) || ((_mousedItem == dragSelFrom) && (m.y() < _dragStartPos.y() + QApplication::startDragDistance()))) { moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, -1); @@ -973,6 +1061,10 @@ void OverviewInner::onUpdateSelected() { if (_dragStartPos.x() < 0 || ((_mousedItem == dragSelFrom) && (m.x() >= _dragStartPos.x() - QApplication::startDragDistance()))) { moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, -1); } + } else if (_type == OverviewAudioDocuments) { + if (_dragStartPos.y() < 0 || ((_mousedItem == dragSelFrom) && (m.y() >= _dragStartPos.y() - QApplication::startDragDistance()))) { + moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, -1); + } } else { if (_dragStartPos.y() < st::msgMargin.top() || ((_mousedItem == dragSelFrom) && (m.y() >= _dragStartPos.y() - QApplication::startDragDistance()))) { moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, 1); @@ -986,6 +1078,10 @@ void OverviewInner::onUpdateSelected() { if (m.x() < 0) { moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, -1); } + } else if (_type == OverviewAudioDocuments) { + if (m.y() < 0) { + moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, 1); + } } else { if (m.y() < st::msgMargin.top()) { moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, 1); @@ -996,6 +1092,10 @@ void OverviewInner::onUpdateSelected() { if (m.x() >= _vsize) { moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, 1); } + } else if (_type == OverviewAudioDocuments) { + if (m.y() >= itemHeight(dragSelTo, dragSelToIndex)) { + moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, 1); + } } else { if (m.y() >= itemHeight(dragSelTo, dragSelToIndex) - st::msgMargin.bottom()) { moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, -1); @@ -1007,7 +1107,7 @@ void OverviewInner::onUpdateSelected() { MsgId dragFirstAffected = dragSelFrom; int32 dragFirstAffectedIndex = dragSelFromIndex; while (dragFirstAffectedIndex >= 0 && dragFirstAffected <= 0) { - moveToNextItem(dragFirstAffected, dragFirstAffectedIndex, dragSelTo, ((selectingDown && (_type == OverviewPhotos)) || (!selectingDown && (_type != OverviewPhotos))) ? -1 : 1); + moveToNextItem(dragFirstAffected, dragFirstAffectedIndex, dragSelTo, ((selectingDown && (_type == OverviewPhotos || _type == OverviewAudioDocuments)) || (!selectingDown && (_type != OverviewPhotos && _type != OverviewAudioDocuments))) ? -1 : 1); } if (dragFirstAffectedIndex >= 0) { SelectedItems::const_iterator i = _selected.constFind(dragFirstAffected); @@ -1083,6 +1183,10 @@ void OverviewInner::enterEvent(QEvent *e) { } void OverviewInner::leaveEvent(QEvent *e) { + if (_selectedMsgId > 0) { + _selectedMsgId = 0; + updateMsg(App::histItemById(_selectedMsgId)); + } if (textlnkOver()) { updateMsg(App::hoveredLinkItem()); textlnkOver(TextLinkPtr()); @@ -1097,6 +1201,8 @@ void OverviewInner::leaveEvent(QEvent *e) { void OverviewInner::resizeEvent(QResizeEvent *e) { _width = width(); + _audioWidth = qMin(_width - st::profilePadding.left() - st::profilePadding.right(), int(st::profileMaxWidth)); + _audioLeft = (_width - _audioWidth) / 2; showAll(true); onUpdateSelected(); update(); @@ -1106,6 +1212,8 @@ void OverviewInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { if (_menu) { _menu->deleteLater(); _menu = 0; + updateMsg(App::contextItem()); + if (_selectedMsgId > 0) updateMsg(App::histItemById(_selectedMsgId)); } if (e->reason() == QContextMenuEvent::Mouse) { dragActionUpdate(e->globalPos()); @@ -1165,6 +1273,8 @@ void OverviewInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { _menu->addAction(lang(lng_context_select_msg), this, SLOT(selectMessage()))->setEnabled(true); } App::contextItem(App::hoveredLinkItem()); + updateMsg(App::contextItem()); + if (_selectedMsgId > 0) updateMsg(App::histItemById(_selectedMsgId)); } else if (App::mousedItem() && App::mousedItem()->id == _mousedItem) { _menu = new ContextMenu(_overview); _menu->addAction(lang(lng_context_to_msg), this, SLOT(goToMessage()))->setEnabled(true); @@ -1182,6 +1292,8 @@ void OverviewInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { _menu->addAction(lang(lng_context_select_msg), this, SLOT(selectMessage()))->setEnabled(true); } App::contextItem(App::mousedItem()); + updateMsg(App::contextItem()); + if (_selectedMsgId > 0) updateMsg(App::histItemById(_selectedMsgId)); } if (_menu) { _menu->deleteOnHide(); @@ -1194,7 +1306,7 @@ void OverviewInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { int32 OverviewInner::resizeToWidth(int32 nwidth, int32 scrollTop, int32 minHeight) { if (width() == nwidth && minHeight == _minHeight) return scrollTop; _minHeight = minHeight; - _addToY = (_height < _minHeight) ? (_minHeight - _height) : 0; + _addToY = (_type != OverviewAudioDocuments && _height < _minHeight) ? (_minHeight - _height) : 0; if (_type == OverviewPhotos && _resizeIndex < 0) { _resizeIndex = _photosInRow * ((scrollTop + minHeight) / int32(_vsize + st::overviewPhotoSkip)) + _photosInRow - 1; _resizeSkip = (scrollTop + minHeight) - ((scrollTop + minHeight) / int32(_vsize + st::overviewPhotoSkip)) * int32(_vsize + st::overviewPhotoSkip); @@ -1317,6 +1429,8 @@ void OverviewInner::openContextFile() { void OverviewInner::onMenuDestroy(QObject *obj) { if (_menu == obj) { _menu = 0; + updateMsg(App::contextItem()); + if (_selectedMsgId > 0) updateMsg(App::histItemById(_selectedMsgId)); } } @@ -1382,7 +1496,7 @@ void OverviewInner::onTouchScrollTimer() { void OverviewInner::mediaOverviewUpdated(bool fromResize) { int32 oldHeight = _height; - if (_type != OverviewPhotos) { + if (_type != OverviewPhotos && _type != OverviewAudioDocuments) { History::MediaOverview &o(_hist->_overview[_type]); int32 l = o.size(); _items.reserve(2 * l); // day items @@ -1477,7 +1591,7 @@ void OverviewInner::mediaOverviewUpdated(bool fromResize) { if (_height != y) { _height = y; if (!fromResize) { - _addToY = (_height < _minHeight) ? (_minHeight - _height) : 0; + _addToY = (_type != OverviewAudioDocuments && _height < _minHeight) ? (_minHeight - _height) : 0; resize(width(), _minHeight > _height ? _minHeight : _height); } } @@ -1544,7 +1658,7 @@ void OverviewInner::itemRemoved(HistoryItem *item) { } void OverviewInner::itemResized(HistoryItem *item, bool scrollToIt) { - if (_type != OverviewPhotos) { + if (_type != OverviewPhotos && _type != OverviewAudioDocuments) { HistoryMedia *media = item ? item->getMedia(true) : 0; if (!media) return; @@ -1562,7 +1676,7 @@ void OverviewInner::itemResized(HistoryItem *item, bool scrollToIt) { _items[j].y += newh; } _height = _items[l - 1].y; - _addToY = (_height < _minHeight) ? (_minHeight - _height) : 0; + _addToY = (_type != OverviewAudioDocuments && _height < _minHeight) ? (_minHeight - _height) : 0; resize(width(), _minHeight > _height ? _minHeight : _height); if (scrollToIt) { if (_addToY + _height - from > _scroll->scrollTop() + _scroll->height()) { @@ -1592,6 +1706,11 @@ void OverviewInner::msgUpdated(const HistoryItem *msg) { int32 row = (_photosToAdd + index) / _photosInRow, col = (_photosToAdd + index) % _photosInRow; update(int32(col * w), _addToY + int32(row * vsize), qCeil(w), vsize); } + } else if (_type == OverviewAudioDocuments) { + int32 index = _hist->_overview[_type].indexOf(msgid); + if (index >= 0) { + update(_audioLeft, _addToY + int32(index * _audioHeight), _audioWidth, _audioHeight); + } } else { for (int32 i = 0, l = _items.size(); i != l; ++i) { if (_items[i].msgid == msgid) { @@ -1620,13 +1739,16 @@ void OverviewInner::showAll(bool recountHeights) { } int32 rows = ((_photosToAdd + count) / _photosInRow) + (((_photosToAdd + count) % _photosInRow) ? 1 : 0); newHeight = _height = (_vsize + st::overviewPhotoSkip) * rows + st::overviewPhotoSkip; + } else if (_type == OverviewAudioDocuments) { + int32 count = _hist->_overview[_type].size(), fullCount = _hist->_overviewCount[_type]; + newHeight = _height = count * _audioHeight; } else { if (recountHeights && _type == OverviewVideos) { // recount heights because of captions mediaOverviewUpdated(true); } newHeight = _height; } - _addToY = (_height < _minHeight) ? (_minHeight - _height) : 0; + _addToY = (_type != OverviewAudioDocuments && _height < _minHeight) ? (_minHeight - _height) : 0; if (newHeight < _minHeight) { newHeight = _minHeight; } @@ -1661,6 +1783,8 @@ OverviewWidget::OverviewWidget(QWidget *parent, const PeerData *peer, MediaOverv connect(&_scrollTimer, SIGNAL(timeout()), this, SLOT(onScrollTimer())); _scrollTimer.setSingleShot(false); + connect(App::main()->player(), SIGNAL(playerSongChanged(MsgId)), this, SLOT(onPlayerSongChanged(MsgId))); + switchType(type); } @@ -1705,7 +1829,7 @@ void OverviewWidget::paintEvent(QPaintEvent *e) { } QRect r(e->rect()); - if (type() == OverviewPhotos) { + if (type() == OverviewPhotos || type() == OverviewAudioDocuments) { p.fillRect(r, st::white->b); } else { bool hasTopBar = !App::main()->topBar()->isHidden(), hasPlayer = !App::main()->player()->isHidden(); @@ -1827,12 +1951,36 @@ int32 OverviewWidget::lastScrollTop() const { return _scroll.scrollTop(); } +int32 OverviewWidget::countBestScroll() const { + if (type() == OverviewAudioDocuments && audioPlayer()) { + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + audioPlayer()->currentState(&playing, &playingState); + if (playing) { + int32 top = _inner.itemTop(playing.msgId); + if (top >= 0) { + return snap(top - int(_scroll.height() - (st::mediaPadding.top() + st::mediaThumbSize + st::mediaPadding.bottom())) / 2, 0, _scroll.scrollTopMax()); + } + } + } + return _scroll.scrollTopMax(); +} + +void OverviewWidget::fastShow(bool back, int32 lastScrollTop) { + stopGif(); + resizeEvent(0); + _scrollSetAfterShow = (lastScrollTop < 0 ? countBestScroll() : lastScrollTop); + show(); + _inner.setFocus(); + doneShow(); +} + void OverviewWidget::animShow(const QPixmap &bgAnimCache, const QPixmap &bgAnimTopBarCache, bool back, int32 lastScrollTop) { stopGif(); _bgAnimCache = bgAnimCache; _bgAnimTopBarCache = bgAnimTopBarCache; resizeEvent(0); - _scroll.scrollToY(lastScrollTop < 0 ? _scroll.scrollTopMax() : lastScrollTop); + _scroll.scrollToY(lastScrollTop < 0 ? countBestScroll() : lastScrollTop); _animCache = myGrab(this, rect()); App::main()->topBar()->stopAnim(); _animTopBarCache = myGrab(App::main()->topBar(), QRect(0, 0, width(), st::topBarHeight)); @@ -1950,6 +2098,15 @@ void OverviewWidget::onScrollTimer() { _scroll.scrollToY(_scroll.scrollTop() + d); } +void OverviewWidget::onPlayerSongChanged(MsgId msgId) { + if (type() == OverviewAudioDocuments) { +// int32 top = _inner.itemTop(msgId); +// if (top > 0) { +// _scroll.scrollToY(snap(top - int(_scroll.height() - (st::mediaPadding.top() + st::mediaThumbSize + st::mediaPadding.bottom())) / 2, 0, _scroll.scrollTopMax())); +// } + } +} + void OverviewWidget::checkSelectingScroll(QPoint point) { if (point.y() < _scroll.scrollTop()) { _scrollDelta = point.y() - _scroll.scrollTop(); diff --git a/Telegram/SourceFiles/overviewwidget.h b/Telegram/SourceFiles/overviewwidget.h index 3f3b82db3..6c08d903b 100644 --- a/Telegram/SourceFiles/overviewwidget.h +++ b/Telegram/SourceFiles/overviewwidget.h @@ -26,6 +26,7 @@ public: OverviewInner(OverviewWidget *overview, ScrollArea *scroll, const PeerData *peer, MediaOverviewType type); void clear(); + int32 itemTop(MsgId msgId) const; bool event(QEvent *e); void touchEvent(QTouchEvent *e); @@ -130,6 +131,9 @@ private: CachedSizes _cached; bool _selMode; + // audio documents + int32 _audioLeft, _audioWidth, _audioHeight; + // other typedef struct _CachedItem { _CachedItem() : msgid(0), y(0) { @@ -158,7 +162,7 @@ private: }; DragAction _dragAction; QPoint _dragStartPos, _dragPos; - MsgId _dragItem; + MsgId _dragItem, _selectedMsgId; int32 _dragItemIndex; MsgId _mousedItem; int32 _mousedItemIndex; @@ -210,7 +214,9 @@ public: int32 lastWidth() const; int32 lastScrollTop() const; + int32 countBestScroll() const; + void fastShow(bool back = false, int32 lastScrollTop = -1); void animShow(const QPixmap &oldAnimCache, const QPixmap &bgAnimTopBarCache, bool back = false, int32 lastScrollTop = -1); bool animStep(float64 ms); @@ -241,6 +247,7 @@ public slots: void onScroll(); void onScrollTimer(); + void onPlayerSongChanged(MsgId msgId); void onForwardSelected(); void onDeleteSelected(); diff --git a/Telegram/SourceFiles/playerwidget.cpp b/Telegram/SourceFiles/playerwidget.cpp index dd829cd1a..9efab575b 100644 --- a/Telegram/SourceFiles/playerwidget.cpp +++ b/Telegram/SourceFiles/playerwidget.cpp @@ -545,4 +545,8 @@ void PlayerWidget::updateState(SongMsgId playing, AudioPlayerState playingState, startPlay(o->at(_index + 1)); } } + + if (songChanged) { + emit playerSongChanged(_song.msgId); + } } diff --git a/Telegram/SourceFiles/playerwidget.h b/Telegram/SourceFiles/playerwidget.h index 6b8d7ac39..8656e0d0b 100644 --- a/Telegram/SourceFiles/playerwidget.h +++ b/Telegram/SourceFiles/playerwidget.h @@ -44,6 +44,10 @@ public: bool seekingSong(const SongMsgId &song) const; +signals: + + void playerSongChanged(MsgId msgId); + private: enum OverState { diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index 276ee3bec..6f62cceb8 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.36 + 0.8.37 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index 680f5d589c084e081694578a78a1f6d853116923..b14c336783e32d9e20a24ef1a8677ceb1a8bd08f 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_p6O delta 53 zcmZ3Yy+nIM5ig_J Date: Fri, 3 Jul 2015 14:00:11 +0300 Subject: [PATCH 034/121] playerwidget added to .xcodeproj and .pro files, version 0.8.37.dev --- Telegram/SourceFiles/localstorage.cpp | 2 +- Telegram/SourceFiles/mainwidget.cpp | 2 +- Telegram/SourceFiles/playerwidget.cpp | 4 ++-- Telegram/Telegram.pro | 2 ++ Telegram/Telegram.xcodeproj/project.pbxproj | 10 ++++++++++ Telegram/Telegram.xcodeproj/qt_preprocess.mak | 9 ++++++--- 6 files changed, 22 insertions(+), 7 deletions(-) diff --git a/Telegram/SourceFiles/localstorage.cpp b/Telegram/SourceFiles/localstorage.cpp index c0f979b7b..bf141a300 100644 --- a/Telegram/SourceFiles/localstorage.cpp +++ b/Telegram/SourceFiles/localstorage.cpp @@ -630,7 +630,7 @@ namespace { if (endMarkFound) { quint32 cnt; locations.stream >> cnt; - for (int32 i = 0; i < cnt; ++i) { + for (quint32 i = 0; i < cnt; ++i) { quint64 kfirst, ksecond, vfirst, vsecond; locations.stream >> kfirst >> ksecond >> vfirst >> vsecond; _fileLocationAliases.insert(MediaKey(kfirst, ksecond), MediaKey(vfirst, vsecond)); diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 88b36c96a..e0694c301 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -353,7 +353,7 @@ MainWidget *TopBarWidget::main() { MainWidget::MainWidget(Window *window) : QWidget(window), _started(0), failedObjId(0), _toForwardNameVersion(0), _dialogsWidth(st::dlgMinWidth), dialogs(this), history(this), profile(0), overview(0), _player(this), _topBar(this), -_forwardConfirm(0), hider(0), _contentScrollAddToY(0), _playerHeight(0), _mediaType(this), _mediaTypeMask(0), +_forwardConfirm(0), hider(0), _playerHeight(0), _contentScrollAddToY(0), _mediaType(this), _mediaTypeMask(0), updGoodPts(0), updLastPts(0), updPtsCount(0), updDate(0), updQts(-1), updSeq(0), updInited(false), updSkipPtsUpdateLevel(0), _onlineRequest(0), _lastWasOnline(false), _lastSetOnline(0), _isIdle(false), _failDifferenceTimeout(1), _lastUpdateTime(0), _cachedX(0), _cachedY(0), _background(0), _api(new ApiWrap(this)) { diff --git a/Telegram/SourceFiles/playerwidget.cpp b/Telegram/SourceFiles/playerwidget.cpp index 9efab575b..084cffd41 100644 --- a/Telegram/SourceFiles/playerwidget.cpp +++ b/Telegram/SourceFiles/playerwidget.cpp @@ -31,7 +31,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org PlayerWidget::PlayerWidget(QWidget *parent) : TWidget(parent), _prevAvailable(false), _nextAvailable(false), _fullAvailable(false), -_over(OverNone), _down(OverNone), _downCoord(0), _downProgress(0.), _downFrequency(AudioVoiceMsgFrequency), +_over(OverNone), _down(OverNone), _downCoord(0), _downFrequency(AudioVoiceMsgFrequency), _downProgress(0.), _stateAnim(animFunc(this, &PlayerWidget::stateStep)), _index(-1), _history(0), _showPause(false), _position(0), _duration(0), _loaded(0), a_progress(0., 0.), a_loadProgress(0., 0.), _progressAnim(animFunc(this, &PlayerWidget::progressStep)) { @@ -322,7 +322,7 @@ bool PlayerWidget::seekingSong(const SongMsgId &song) const { return (_down == OverPlayback) && (song == _song); } -bool PlayerWidget::stateStep(float64 ms) { +bool PlayerWidget::stateStep(float64 msc) { bool result = false; uint64 ms = getms(); for (StateAnimations::iterator i = _stateAnimations.begin(); i != _stateAnimations.cend();) { diff --git a/Telegram/Telegram.pro b/Telegram/Telegram.pro index 8eabffcdc..8c38adf6e 100644 --- a/Telegram/Telegram.pro +++ b/Telegram/Telegram.pro @@ -96,6 +96,7 @@ SOURCES += \ ./SourceFiles/overviewwidget.cpp \ ./SourceFiles/passcodewidget.cpp \ ./SourceFiles/profilewidget.cpp \ + ./SourceFiles/playerwidget.cpp \ ./SourceFiles/localimageloader.cpp \ ./SourceFiles/localstorage.cpp \ ./SourceFiles/logs.cpp \ @@ -182,6 +183,7 @@ HEADERS += \ ./SourceFiles/overviewwidget.h \ ./SourceFiles/passcodewidget.h \ ./SourceFiles/profilewidget.h \ + ./SourceFiles/playerwidget.h \ ./SourceFiles/localimageloader.h \ ./SourceFiles/localstorage.h \ ./SourceFiles/logs.h \ diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index 648a68764..a08d66fab 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -64,6 +64,8 @@ 07AF95F51AFD03B90060B057 /* qrc_telegram_mac.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07AF95F31AFD03B90060B057 /* qrc_telegram_mac.cpp */; }; 07AF95F91AFD03C80060B057 /* telegram_emojis.qrc in Resources */ = {isa = PBXBuildFile; fileRef = 07AF95F71AFD03C80060B057 /* telegram_emojis.qrc */; }; 07AF95FA1AFD03C80060B057 /* telegram_mac.qrc in Resources */ = {isa = PBXBuildFile; fileRef = 07AF95F81AFD03C80060B057 /* telegram_mac.qrc */; }; + 07B604321B46A0EC00CA29FE /* playerwidget.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07B604301B46A0EC00CA29FE /* playerwidget.cpp */; }; + 07B604351B46A20900CA29FE /* moc_playerwidget.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07B604341B46A20900CA29FE /* moc_playerwidget.cpp */; }; 07BE850F1A2093C9008ACB9F /* localstorage.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07BE850D1A2093C9008ACB9F /* localstorage.cpp */; }; 07BE85121A20961F008ACB9F /* moc_localstorage.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07BE85111A20961F008ACB9F /* moc_localstorage.cpp */; }; 07C4753B1967DF1C00CAAFE9 /* switcher.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07C475391967DF1C00CAAFE9 /* switcher.cpp */; }; @@ -305,6 +307,9 @@ 07AF95F31AFD03B90060B057 /* qrc_telegram_mac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = qrc_telegram_mac.cpp; path = GeneratedFiles/qrc_telegram_mac.cpp; sourceTree = SOURCE_ROOT; }; 07AF95F71AFD03C80060B057 /* telegram_emojis.qrc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = telegram_emojis.qrc; path = SourceFiles/telegram_emojis.qrc; sourceTree = SOURCE_ROOT; }; 07AF95F81AFD03C80060B057 /* telegram_mac.qrc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = telegram_mac.qrc; path = SourceFiles/telegram_mac.qrc; sourceTree = SOURCE_ROOT; }; + 07B604301B46A0EC00CA29FE /* playerwidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = playerwidget.cpp; path = SourceFiles/playerwidget.cpp; sourceTree = SOURCE_ROOT; }; + 07B604311B46A0EC00CA29FE /* playerwidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = playerwidget.h; path = SourceFiles/playerwidget.h; sourceTree = SOURCE_ROOT; }; + 07B604341B46A20900CA29FE /* moc_playerwidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_playerwidget.cpp; path = GeneratedFiles/Debug/moc_playerwidget.cpp; sourceTree = SOURCE_ROOT; }; 07BE850D1A2093C9008ACB9F /* localstorage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = localstorage.cpp; path = SourceFiles/localstorage.cpp; sourceTree = SOURCE_ROOT; }; 07BE850E1A2093C9008ACB9F /* localstorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = localstorage.h; path = SourceFiles/localstorage.h; sourceTree = SOURCE_ROOT; }; 07BE85111A20961F008ACB9F /* moc_localstorage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_localstorage.cpp; path = GeneratedFiles/Debug/moc_localstorage.cpp; sourceTree = SOURCE_ROOT; }; @@ -914,6 +919,7 @@ 07A69330199277BA0099CB9F /* mediaview.cpp */, 0732E4A7199E262300D50FE7 /* overviewwidget.cpp */, 07DE929F1AA4923200A18F6F /* passcodewidget.cpp */, + 07B604301B46A0EC00CA29FE /* playerwidget.cpp */, CF32DF59C7823E4F3397EF3C /* profilewidget.cpp */, 5A7F88F9C7F08D3DDE6EEF6B /* localimageloader.cpp */, 07BE850D1A2093C9008ACB9F /* localstorage.cpp */, @@ -952,6 +958,7 @@ 07A69331199277BA0099CB9F /* mediaview.h */, 0732E4A8199E262300D50FE7 /* overviewwidget.h */, 07DE92A21AA4924400A18F6F /* passcodewidget.h */, + 07B604311B46A0EC00CA29FE /* playerwidget.h */, 220B97F8F62C720E6059A64B /* profilewidget.h */, AD0C395D671BC024083A5FC7 /* localimageloader.h */, 07BE850E1A2093C9008ACB9F /* localstorage.h */, @@ -1106,6 +1113,7 @@ 801973D3334D0FCA849CF485 /* Debug */ = { isa = PBXGroup; children = ( + 07B604341B46A20900CA29FE /* moc_playerwidget.cpp */, 07C759711B1F7E2800662169 /* moc_autoupdater.cpp */, 0710CA041B0B9404001B4272 /* moc_stickersetbox.cpp */, 0755AEDA1AD12A80004D738A /* moc_abstractbox.cpp */, @@ -1610,6 +1618,7 @@ 06EABCC49D2EEE4076322BE7 /* moc_mtp.cpp in Compile Sources */, 0755AEDE1AD12A80004D738A /* moc_intropwdcheck.cpp in Compile Sources */, 07DE92AA1AA4928200A18F6F /* moc_autolockbox.cpp in Compile Sources */, + 07B604351B46A20900CA29FE /* moc_playerwidget.cpp in Compile Sources */, 8F6F5D7F82036331E8C6DAE6 /* moc_mtpConnection.cpp in Compile Sources */, B780F9E21269259B90A1F32A /* moc_mtpDC.cpp in Compile Sources */, 07080BCF1A43588C00741A51 /* lang_auto.cpp in Compile Sources */, @@ -1638,6 +1647,7 @@ 60CB4898955209B665E7B07D /* moc_twidget.cpp in Compile Sources */, 7062978F12EEA525893A5E6F /* moc_aboutbox.cpp in Compile Sources */, E8B28580819B882A5964561A /* moc_addcontactbox.cpp in Compile Sources */, + 07B604321B46A0EC00CA29FE /* playerwidget.cpp in Compile Sources */, D6874C00733283846ACA9AB2 /* moc_confirmbox.cpp in Compile Sources */, ED2557A57C6782721DC494AF /* moc_connectionbox.cpp in Compile Sources */, 5FC914F652D1B16FDA8F0634 /* moc_contactsbox.cpp in Compile Sources */, diff --git a/Telegram/Telegram.xcodeproj/qt_preprocess.mak b/Telegram/Telegram.xcodeproj/qt_preprocess.mak index 1798b6ab0..1843b0fb7 100644 --- a/Telegram/Telegram.xcodeproj/qt_preprocess.mak +++ b/Telegram/Telegram.xcodeproj/qt_preprocess.mak @@ -33,7 +33,7 @@ check: first compilers: GeneratedFiles/qrc_telegram.cpp GeneratedFiles/qrc_telegram_emojis.cpp GeneratedFiles/qrc_telegram_mac.cpp GeneratedFiles/Debug/moc_apiwrap.cpp GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_audio.cpp GeneratedFiles/Debug/moc_autoupdater.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp\ GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_history.cpp GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp\ - GeneratedFiles/Debug/moc_mediaview.cpp GeneratedFiles/Debug/moc_overviewwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp\ + GeneratedFiles/Debug/moc_mediaview.cpp GeneratedFiles/Debug/moc_overviewwidget.cpp GeneratedFiles/Debug/moc_playerwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp\ GeneratedFiles/Debug/moc_passcodewidget.cpp\ GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_localstorage.cpp GeneratedFiles/Debug/moc_mainwidget.cpp\ GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp\ @@ -99,9 +99,9 @@ GeneratedFiles/qrc_telegram_mac.cpp: SourceFiles/telegram_mac.qrc \ SourceFiles/art/osxtray.png /usr/local/Qt-5.4.0/bin/rcc -name telegram_mac SourceFiles/telegram_mac.qrc -o GeneratedFiles/qrc_telegram_mac.cpp -compiler_moc_header_make_all: GeneratedFiles/Debug/moc_apiwrap.cpp GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_audio.cpp GeneratedFiles/Debug/moc_autoupdater.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_history.cpp GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp GeneratedFiles/Debug/moc_mediaview.cpp GeneratedFiles/Debug/moc_overviewwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp GeneratedFiles/Debug/moc_passcodewidget.cpp GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_localstorage.cpp GeneratedFiles/Debug/moc_mainwidget.cpp GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp GeneratedFiles/Debug/moc_types.cpp GeneratedFiles/Debug/moc_window.cpp GeneratedFiles/Debug/moc_mtp.cpp GeneratedFiles/Debug/moc_mtpConnection.cpp GeneratedFiles/Debug/moc_mtpDC.cpp GeneratedFiles/Debug/moc_mtpFileLoader.cpp GeneratedFiles/Debug/moc_mtpSession.cpp GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp GeneratedFiles/Debug/moc_contextmenu.cpp GeneratedFiles/Debug/moc_countrycodeinput.cpp GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp GeneratedFiles/Debug/moc_switcher.cpp GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp GeneratedFiles/Debug/moc_aboutbox.cpp GeneratedFiles/Debug/moc_abstractbox.cpp GeneratedFiles/Debug/moc_addcontactbox.cpp GeneratedFiles/Debug/moc_autolockbox.cpp GeneratedFiles/Debug/moc_backgroundbox.cpp GeneratedFiles/Debug/moc_confirmbox.cpp GeneratedFiles/Debug/moc_connectionbox.cpp GeneratedFiles/Debug/moc_contactsbox.cpp GeneratedFiles/Debug/moc_downloadpathbox.cpp GeneratedFiles/Debug/moc_emojibox.cpp GeneratedFiles/Debug/moc_languagebox.cpp GeneratedFiles/Debug/moc_passcodebox.cpp GeneratedFiles/Debug/moc_photocropbox.cpp GeneratedFiles/Debug/moc_photosendbox.cpp GeneratedFiles/Debug/moc_sessionsbox.cpp GeneratedFiles/Debug/moc_stickersetbox.cpp GeneratedFiles/Debug/moc_usernamebox.cpp GeneratedFiles/Debug/moc_intro.cpp GeneratedFiles/Debug/moc_introcode.cpp GeneratedFiles/Debug/moc_introphone.cpp GeneratedFiles/Debug/moc_intropwdcheck.cpp GeneratedFiles/Debug/moc_introsignup.cpp GeneratedFiles/Debug/moc_pspecific_mac.cpp +compiler_moc_header_make_all: GeneratedFiles/Debug/moc_apiwrap.cpp GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_audio.cpp GeneratedFiles/Debug/moc_autoupdater.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_history.cpp GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp GeneratedFiles/Debug/moc_mediaview.cpp GeneratedFiles/Debug/moc_overviewwidget.cpp GeneratedFiles/Debug/moc_playerwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp GeneratedFiles/Debug/moc_passcodewidget.cpp GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_localstorage.cpp GeneratedFiles/Debug/moc_mainwidget.cpp GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp GeneratedFiles/Debug/moc_types.cpp GeneratedFiles/Debug/moc_window.cpp GeneratedFiles/Debug/moc_mtp.cpp GeneratedFiles/Debug/moc_mtpConnection.cpp GeneratedFiles/Debug/moc_mtpDC.cpp GeneratedFiles/Debug/moc_mtpFileLoader.cpp GeneratedFiles/Debug/moc_mtpSession.cpp GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp GeneratedFiles/Debug/moc_contextmenu.cpp GeneratedFiles/Debug/moc_countrycodeinput.cpp GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp GeneratedFiles/Debug/moc_switcher.cpp GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp GeneratedFiles/Debug/moc_aboutbox.cpp GeneratedFiles/Debug/moc_abstractbox.cpp GeneratedFiles/Debug/moc_addcontactbox.cpp GeneratedFiles/Debug/moc_autolockbox.cpp GeneratedFiles/Debug/moc_backgroundbox.cpp GeneratedFiles/Debug/moc_confirmbox.cpp GeneratedFiles/Debug/moc_connectionbox.cpp GeneratedFiles/Debug/moc_contactsbox.cpp GeneratedFiles/Debug/moc_downloadpathbox.cpp GeneratedFiles/Debug/moc_emojibox.cpp GeneratedFiles/Debug/moc_languagebox.cpp GeneratedFiles/Debug/moc_passcodebox.cpp GeneratedFiles/Debug/moc_photocropbox.cpp GeneratedFiles/Debug/moc_photosendbox.cpp GeneratedFiles/Debug/moc_sessionsbox.cpp GeneratedFiles/Debug/moc_stickersetbox.cpp GeneratedFiles/Debug/moc_usernamebox.cpp GeneratedFiles/Debug/moc_intro.cpp GeneratedFiles/Debug/moc_introcode.cpp GeneratedFiles/Debug/moc_introphone.cpp GeneratedFiles/Debug/moc_intropwdcheck.cpp GeneratedFiles/Debug/moc_introsignup.cpp GeneratedFiles/Debug/moc_pspecific_mac.cpp compiler_moc_header_clean: - -$(DEL_FILE) GeneratedFiles/Debug/moc_apiwrap.cpp GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_audio.cpp GeneratedFiles/Debug/moc_autoupdater.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_history.cpp GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp GeneratedFiles/Debug/moc_mediaview.cpp GeneratedFiles/Debug/moc_overviewwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp GeneratedFiles/Debug/moc_passcodewidget.cpp GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_localstorage.cpp GeneratedFiles/Debug/moc_mainwidget.cpp GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp GeneratedFiles/Debug/moc_types.cpp GeneratedFiles/Debug/moc_window.cpp GeneratedFiles/Debug/moc_mtp.cpp GeneratedFiles/Debug/moc_mtpConnection.cpp GeneratedFiles/Debug/moc_mtpDC.cpp GeneratedFiles/Debug/moc_mtpFileLoader.cpp GeneratedFiles/Debug/moc_mtpSession.cpp GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp GeneratedFiles/Debug/moc_contextmenu.cpp GeneratedFiles/Debug/moc_countrycodeinput.cpp GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp GeneratedFiles/Debug/moc_switcher.cpp GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp GeneratedFiles/Debug/moc_aboutbox.cpp GeneratedFiles/Debug/moc_abstractbox.cpp GeneratedFiles/Debug/moc_addcontactbox.cpp GeneratedFiles/Debug/moc_autolockbox.cpp GeneratedFiles/Debug/moc_backgroundbox.cpp GeneratedFiles/Debug/moc_confirmbox.cpp GeneratedFiles/Debug/moc_connectionbox.cpp GeneratedFiles/Debug/moc_contactsbox.cpp GeneratedFiles/Debug/moc_downloadpathbox.cpp GeneratedFiles/Debug/moc_emojibox.cpp GeneratedFiles/Debug/moc_languagebox.cpp GeneratedFiles/Debug/moc_passcodebox.cpp GeneratedFiles/Debug/moc_photocropbox.cpp GeneratedFiles/Debug/moc_photosendbox.cpp GeneratedFiles/Debug/moc_sessionsbox.cpp GeneratedFiles/Debug/moc_stickersetbox.cpp GeneratedFiles/Debug/moc_usernamedbox.cpp GeneratedFiles/Debug/moc_intro.cpp GeneratedFiles/Debug/moc_introcode.cpp GeneratedFiles/Debug/moc_introphone.cpp GeneratedFiles/Debug/moc_intropwdcheck.cpp GeneratedFiles/Debug/moc_introsignup.cpp GeneratedFiles/Debug/moc_pspecific_mac.cpp + -$(DEL_FILE) GeneratedFiles/Debug/moc_apiwrap.cpp GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_audio.cpp GeneratedFiles/Debug/moc_autoupdater.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_history.cpp GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp GeneratedFiles/Debug/moc_mediaview.cpp GeneratedFiles/Debug/moc_overviewwidget.cpp GeneratedFiles/Debug/moc_playerwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp GeneratedFiles/Debug/moc_passcodewidget.cpp GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_localstorage.cpp GeneratedFiles/Debug/moc_mainwidget.cpp GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp GeneratedFiles/Debug/moc_types.cpp GeneratedFiles/Debug/moc_window.cpp GeneratedFiles/Debug/moc_mtp.cpp GeneratedFiles/Debug/moc_mtpConnection.cpp GeneratedFiles/Debug/moc_mtpDC.cpp GeneratedFiles/Debug/moc_mtpFileLoader.cpp GeneratedFiles/Debug/moc_mtpSession.cpp GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp GeneratedFiles/Debug/moc_contextmenu.cpp GeneratedFiles/Debug/moc_countrycodeinput.cpp GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp GeneratedFiles/Debug/moc_switcher.cpp GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp GeneratedFiles/Debug/moc_aboutbox.cpp GeneratedFiles/Debug/moc_abstractbox.cpp GeneratedFiles/Debug/moc_addcontactbox.cpp GeneratedFiles/Debug/moc_autolockbox.cpp GeneratedFiles/Debug/moc_backgroundbox.cpp GeneratedFiles/Debug/moc_confirmbox.cpp GeneratedFiles/Debug/moc_connectionbox.cpp GeneratedFiles/Debug/moc_contactsbox.cpp GeneratedFiles/Debug/moc_downloadpathbox.cpp GeneratedFiles/Debug/moc_emojibox.cpp GeneratedFiles/Debug/moc_languagebox.cpp GeneratedFiles/Debug/moc_passcodebox.cpp GeneratedFiles/Debug/moc_photocropbox.cpp GeneratedFiles/Debug/moc_photosendbox.cpp GeneratedFiles/Debug/moc_sessionsbox.cpp GeneratedFiles/Debug/moc_stickersetbox.cpp GeneratedFiles/Debug/moc_usernamedbox.cpp GeneratedFiles/Debug/moc_intro.cpp GeneratedFiles/Debug/moc_introcode.cpp GeneratedFiles/Debug/moc_introphone.cpp GeneratedFiles/Debug/moc_intropwdcheck.cpp GeneratedFiles/Debug/moc_introsignup.cpp GeneratedFiles/Debug/moc_pspecific_mac.cpp GeneratedFiles/Debug/moc_apiwrap.cpp: SourceFiles/types.h \ SourceFiles/logs.h \ SourceFiles/apiwrap.h @@ -179,6 +179,9 @@ GeneratedFiles/Debug/moc_mediaview.cpp: SourceFiles/mediaview.h GeneratedFiles/Debug/moc_overviewwidget.cpp: SourceFiles/overviewwidget.h /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/overviewwidget.h -o GeneratedFiles/Debug/moc_overviewwidget.cpp +GeneratedFiles/Debug/moc_playerwidget.cpp: SourceFiles/playerwidget.h + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/playerwidget.h -o GeneratedFiles/Debug/moc_playerwidget.cpp + GeneratedFiles/Debug/moc_profilewidget.cpp: SourceFiles/profilewidget.h /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/profilewidget.h -o GeneratedFiles/Debug/moc_profilewidget.cpp From 4f2ff9e34369dd057c100ef0ac461f63d8dedc95 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 3 Jul 2015 18:55:22 +0300 Subject: [PATCH 035/121] added padding in player, bot commands description QString -> Text (emoji support) --- Telegram/Resources/style.txt | 1 + Telegram/SourceFiles/dropdown.cpp | 42 ++++++++++++------------- Telegram/SourceFiles/dropdown.h | 3 +- Telegram/SourceFiles/gui/text.cpp | 16 +++++++--- Telegram/SourceFiles/history.h | 1 + Telegram/SourceFiles/historywidget.cpp | 10 +++++- Telegram/SourceFiles/historywidget.h | 1 + Telegram/SourceFiles/mainwidget.cpp | 4 +++ Telegram/SourceFiles/mainwidget.h | 1 + Telegram/SourceFiles/overviewwidget.cpp | 29 ++++++++++------- Telegram/SourceFiles/playerwidget.cpp | 17 +++++++--- Telegram/SourceFiles/structs.cpp | 36 ++++++++++++++++++--- Telegram/SourceFiles/structs.h | 30 ++++++++++++++++-- 13 files changed, 140 insertions(+), 51 deletions(-) diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index a5fee7ace..0134de570 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -1999,3 +1999,4 @@ playerUnavailableOpacity: 0.3; playerDuration: 200; playlistHoverBg: #f2f2f2; +playlistPadding: 10px; diff --git a/Telegram/SourceFiles/dropdown.cpp b/Telegram/SourceFiles/dropdown.cpp index 1b755bd0d..f00f47fcb 100644 --- a/Telegram/SourceFiles/dropdown.cpp +++ b/Telegram/SourceFiles/dropdown.cpp @@ -2532,8 +2532,8 @@ void MentionsInner::paintEvent(QPaintEvent *e) { } else { UserData *user = _crows->at(i).first; - const BotCommand &command = _crows->at(i).second; - QString toHighlight = command.command; + const BotCommand *command = _crows->at(i).second; + QString toHighlight = command->command; int32 botStatus = _parent->chat() ? _parent->chat()->botStatus : -1; if (hasUsername || botStatus == 0 || botStatus == 2) { toHighlight += '@' + user->username; @@ -2565,17 +2565,9 @@ void MentionsInner::paintEvent(QPaintEvent *e) { } addleft += firstwidth + secondwidth + st::mentionPadding.left(); widthleft -= firstwidth + secondwidth + st::mentionPadding.left(); - - QString description = command.description; - if (widthleft > st::mentionFont->elidew && !description.isEmpty()) { - p.setFont(st::mentionFont->f); - int32 descwidth = st::mentionFont->m.width(description); - if (widthleft < descwidth) { - description = st::mentionFont->m.elidedText(description, Qt::ElideRight, widthleft); - descwidth = st::mentionFont->m.width(description); - } + if (widthleft > st::mentionFont->elidew && !command->descriptionText().isEmpty()) { p.setPen((selected ? st::mentionFgOver : st::mentionFg)->p); - p.drawText(mentionleft + addleft + (widthleft - descwidth), i * st::mentionHeight + st::mentionTop + st::mentionFont->ascent, description); + command->descriptionText().drawElided(p, mentionleft + addleft, i * st::mentionHeight + st::mentionTop, widthleft, 1, style::al_right); } } } @@ -2629,12 +2621,12 @@ QString MentionsInner::getSelected() const { result = '#' + _hrows->at(_sel); } else { UserData *user = _crows->at(_sel).first; - const BotCommand &command(_crows->at(_sel).second); + const BotCommand *command(_crows->at(_sel).second); int32 botStatus = _parent->chat() ? _parent->chat()->botStatus : -1; if (botStatus == 0 || botStatus == 2 || _parent->filter().indexOf('@') > 1) { - result = '/' + command.command + '@' + user->username; + result = '/' + command->command + '@' + user->username; } else { - result = '/' + command.command; + result = '/' + command->command; } } return result; @@ -2765,6 +2757,12 @@ void MentionsDropdown::showFiltered(PeerData *peer, QString start) { updateFiltered(toDown); } +bool MentionsDropdown::clearFilteredCommands() { + if (_crows.isEmpty()) return false; + _crows.clear(); + return true; +} + void MentionsDropdown::updateFiltered(bool toDown) { int32 now = unixtime(); MentionRows rows; @@ -2846,9 +2844,9 @@ void MentionsDropdown::updateFiltered(bool toDown) { for (int32 j = 0, l = user->botInfo->commands.size(); j < l; ++j) { if (_filter.size() > 1) { QString toFilter = (hasUsername || botStatus == 0 || botStatus == 2) ? user->botInfo->commands.at(j).command + '@' + user->username : user->botInfo->commands.at(j).command; - if (!toFilter.startsWith(_filter.midRef(1), Qt::CaseInsensitive) || toFilter.size() + 1 == _filter.size()) continue; + if (!toFilter.startsWith(_filter.midRef(1), Qt::CaseInsensitive)/* || toFilter.size() + 1 == _filter.size()*/) continue; } - crows.push_back(qMakePair(user, user->botInfo->commands.at(j))); + crows.push_back(qMakePair(user, &user->botInfo->commands.at(j))); } } } @@ -2858,9 +2856,9 @@ void MentionsDropdown::updateFiltered(bool toDown) { for (int32 j = 0, l = user->botInfo->commands.size(); j < l; ++j) { if (_filter.size() > 1) { QString toFilter = (hasUsername || botStatus == 0 || botStatus == 2) ? user->botInfo->commands.at(j).command + '@' + user->username : user->botInfo->commands.at(j).command; - if (!toFilter.startsWith(_filter.midRef(1), Qt::CaseInsensitive) || toFilter.size() + 1 == _filter.size()) continue; + if (!toFilter.startsWith(_filter.midRef(1), Qt::CaseInsensitive)/* || toFilter.size() + 1 == _filter.size()*/) continue; } - crows.push_back(qMakePair(user, user->botInfo->commands.at(j))); + crows.push_back(qMakePair(user, &user->botInfo->commands.at(j))); } } } @@ -2869,10 +2867,10 @@ void MentionsDropdown::updateFiltered(bool toDown) { if (rows.isEmpty() && hrows.isEmpty() && crows.isEmpty()) { if (!isHidden()) { hideStart(); - _rows.clear(); - _hrows.clear(); - _crows.clear(); } + _rows.clear(); + _hrows.clear(); + _crows.clear(); } else { _rows = rows; _hrows = hrows; diff --git a/Telegram/SourceFiles/dropdown.h b/Telegram/SourceFiles/dropdown.h index 7a43c6b1f..a237d82db 100644 --- a/Telegram/SourceFiles/dropdown.h +++ b/Telegram/SourceFiles/dropdown.h @@ -481,7 +481,7 @@ private: typedef QList MentionRows; typedef QList HashtagRows; -typedef QList > BotCommandRows; +typedef QList > BotCommandRows; class MentionsDropdown; class MentionsInner : public QWidget { @@ -541,6 +541,7 @@ public: void fastHide(); + bool clearFilteredCommands(); void showFiltered(PeerData *peer, QString start); void updateFiltered(bool toDown = false); void setBoundings(QRect boundings); diff --git a/Telegram/SourceFiles/gui/text.cpp b/Telegram/SourceFiles/gui/text.cpp index 4b03a03a6..a6bc95da8 100644 --- a/Telegram/SourceFiles/gui/text.cpp +++ b/Telegram/SourceFiles/gui/text.cpp @@ -1614,6 +1614,14 @@ public: } } + style::font applyFlags(int32 flags, const style::font &f) { + style::font result = f; + if (flags & TextBlockBold) result = result->bold(); + if (flags & TextBlockItalic) result = result->italic(); + if (flags & TextBlockUnderline) result = result->underline(); + return result; + } + void eSetFont(ITextBlock *block) { style::font newFont = _t->_font; int flags = block->flags(); @@ -1628,13 +1636,11 @@ public: } else { newFont = _textStyle->lnkFlags; } - } else { - flags = block->flags(); - if (flags & TextBlockBold) newFont = newFont->bold(); - if (flags & TextBlockItalic) newFont = newFont->italic(); - if (flags & TextBlockUnderline) newFont = newFont->underline(); } if (newFont != _f) { + if (newFont->family() == _t->_font->family()) { + newFont = applyFlags(flags | newFont->flags(), _t->_font); + } _f = newFont; _e->fnt = _f->f; _e->resetFontEngineCache(); diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index 975e1a42d..50888bdb9 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -929,6 +929,7 @@ private: }; QString formatSizeText(qint64 size); +QString formatDownloadText(qint64 ready, qint64 total); QString formatDurationText(qint64 duration); class HistoryVideo : public HistoryMedia { diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 6570c1da7..3b5da16f0 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -2475,6 +2475,14 @@ void HistoryWidget::updateStickers() { _stickersUpdateRequest = MTP::send(MTPmessages_GetAllStickers(MTP_string(cStickersHash())), rpcDone(&HistoryWidget::stickersGot), rpcFail(&HistoryWidget::stickersFailed)); } +void HistoryWidget::botCommandsChanged(UserData *user) { + if (histPeer && (histPeer == user || histPeer->chat)) { + if (_attachMention.clearFilteredCommands()) { + checkMentionDropdown(); + } + } +} + void HistoryWidget::stickersGot(const MTPmessages_AllStickers &stickers) { cSetLastStickersUpdate(getms(true)); _stickersUpdateRequest = 0; @@ -3946,7 +3954,7 @@ void HistoryWidget::onKbToggle(bool manual) { _field.setMaxHeight(st::maxFieldHeight); - _kbReplyTo = hist->peer->chat ? App::histItemById(_keyboard.forMsgId()) : 0; + _kbReplyTo = App::histItemById(_keyboard.forMsgId()); if (_kbReplyTo && !_replyToId) { updateReplyToName(); _replyToText.setText(st::msgFont, _kbReplyTo->inDialogsText(), _textDlgOptions); diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index 0dced5131..099271162 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -555,6 +555,7 @@ public slots: void onDraftSave(bool delayed = false); void updateStickers(); + void botCommandsChanged(UserData *user); void onRecordError(); void onRecordDone(QByteArray result, qint32 samples); diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 88b36c96a..8f05ad761 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -578,6 +578,10 @@ void MainWidget::updateStickers() { history.updateStickers(); } +void MainWidget::botCommandsChanged(UserData *bot) { + history.botCommandsChanged(bot); +} + void MainWidget::onUpdateMuted() { App::updateMuted(); } diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index 7a7e6582b..ab2a4ef03 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -367,6 +367,7 @@ public: void updateMutedIn(int32 seconds); void updateStickers(); + void botCommandsChanged(UserData *bot); ~MainWidget(); diff --git a/Telegram/SourceFiles/overviewwidget.cpp b/Telegram/SourceFiles/overviewwidget.cpp index 4fc935d75..5610dd1d1 100644 --- a/Telegram/SourceFiles/overviewwidget.cpp +++ b/Telegram/SourceFiles/overviewwidget.cpp @@ -878,7 +878,7 @@ void OverviewInner::onUpdateSelected() { TextLinkPtr lnk; HistoryItem *item = 0; int32 index = -1; - _selectedMsgId = 0; + int32 newsel = 0; if (_type == OverviewPhotos) { float64 w = (float64(_width - st::overviewPhotoSkip) / _photosInRow); int32 inRow = int32((m.x() - (st::overviewPhotoSkip / 2)) / w), vsize = (_vsize + st::overviewPhotoSkip); @@ -919,14 +919,12 @@ void OverviewInner::onUpdateSelected() { if (!count) return; bool upon = true; - if (i < 0) { + if (m.y() < _addToY) { i = 0; - _selectedMsgId = -1; upon = false; } if (i >= count) { i = count - 1; - _selectedMsgId = -1; upon = false; } MsgId msgid = _hist->_overview[_type][i]; @@ -938,10 +936,19 @@ void OverviewInner::onUpdateSelected() { HistoryMedia *media = item->getMedia(true); if (media && media->type() == MediaTypeDocument) { lnk = static_cast(media)->linkInPlaylist(); - if (_selectedMsgId >= 0) _selectedMsgId = item->id; + newsel = item->id; } } + if (newsel != _selectedMsgId) { + updateMsg(App::histItemById(_selectedMsgId)); + _selectedMsgId = newsel; + updateMsg(item); + } } else { + if (newsel != _selectedMsgId) { + updateMsg(App::histItemById(_selectedMsgId)); + _selectedMsgId = newsel; + } return; } } else { @@ -1184,8 +1191,8 @@ void OverviewInner::enterEvent(QEvent *e) { void OverviewInner::leaveEvent(QEvent *e) { if (_selectedMsgId > 0) { - _selectedMsgId = 0; updateMsg(App::histItemById(_selectedMsgId)); + _selectedMsgId = 0; } if (textlnkOver()) { updateMsg(App::hoveredLinkItem()); @@ -1306,7 +1313,7 @@ void OverviewInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { int32 OverviewInner::resizeToWidth(int32 nwidth, int32 scrollTop, int32 minHeight) { if (width() == nwidth && minHeight == _minHeight) return scrollTop; _minHeight = minHeight; - _addToY = (_type != OverviewAudioDocuments && _height < _minHeight) ? (_minHeight - _height) : 0; + _addToY = (_type == OverviewAudioDocuments) ? st::playlistPadding : ((_height < _minHeight) ? (_minHeight - _height) : 0); if (_type == OverviewPhotos && _resizeIndex < 0) { _resizeIndex = _photosInRow * ((scrollTop + minHeight) / int32(_vsize + st::overviewPhotoSkip)) + _photosInRow - 1; _resizeSkip = (scrollTop + minHeight) - ((scrollTop + minHeight) / int32(_vsize + st::overviewPhotoSkip)) * int32(_vsize + st::overviewPhotoSkip); @@ -1591,7 +1598,7 @@ void OverviewInner::mediaOverviewUpdated(bool fromResize) { if (_height != y) { _height = y; if (!fromResize) { - _addToY = (_type != OverviewAudioDocuments && _height < _minHeight) ? (_minHeight - _height) : 0; + _addToY = (_type == OverviewAudioDocuments) ? st::playlistPadding : ((_height < _minHeight) ? (_minHeight - _height) : 0); resize(width(), _minHeight > _height ? _minHeight : _height); } } @@ -1676,7 +1683,7 @@ void OverviewInner::itemResized(HistoryItem *item, bool scrollToIt) { _items[j].y += newh; } _height = _items[l - 1].y; - _addToY = (_type != OverviewAudioDocuments && _height < _minHeight) ? (_minHeight - _height) : 0; + _addToY = (_type == OverviewAudioDocuments) ? st::playlistPadding : ((_height < _minHeight) ? (_minHeight - _height) : 0); resize(width(), _minHeight > _height ? _minHeight : _height); if (scrollToIt) { if (_addToY + _height - from > _scroll->scrollTop() + _scroll->height()) { @@ -1741,14 +1748,14 @@ void OverviewInner::showAll(bool recountHeights) { newHeight = _height = (_vsize + st::overviewPhotoSkip) * rows + st::overviewPhotoSkip; } else if (_type == OverviewAudioDocuments) { int32 count = _hist->_overview[_type].size(), fullCount = _hist->_overviewCount[_type]; - newHeight = _height = count * _audioHeight; + newHeight = _height = count * _audioHeight + 2 * st::playlistPadding; } else { if (recountHeights && _type == OverviewVideos) { // recount heights because of captions mediaOverviewUpdated(true); } newHeight = _height; } - _addToY = (_type != OverviewAudioDocuments && _height < _minHeight) ? (_minHeight - _height) : 0; + _addToY = (_type == OverviewAudioDocuments) ? st::playlistPadding : ((_height < _minHeight) ? (_minHeight - _height) : 0); if (newHeight < _minHeight) { newHeight = _minHeight; } diff --git a/Telegram/SourceFiles/playerwidget.cpp b/Telegram/SourceFiles/playerwidget.cpp index 9efab575b..31cdaff05 100644 --- a/Telegram/SourceFiles/playerwidget.cpp +++ b/Telegram/SourceFiles/playerwidget.cpp @@ -494,15 +494,24 @@ void PlayerWidget::updateState(SongMsgId playing, AudioPlayerState playingState, } else if (_song) { display = _song.song->song()->duration; } - QString time = (_down == OverPlayback) ? _time : formatDurationText(display); bool showPause = false, stopped = ((playingState & AudioPlayerStoppedMask) || playingState == AudioPlayerFinishing); bool wasPlaying = !!_duration; if (!stopped) { showPause = (playingState == AudioPlayerPlaying || playingState == AudioPlayerResuming || playingState == AudioPlayerStarting); } - float64 progress = duration ? snap(float64(position) / duration, 0., 1.) : 0.; - int32 loaded = duration ? _song.song->size : (_song.song->loader ? _song.song->loader->currentOffset() : 0); - float64 loadProgress = (duration || !_song.song->loader) ? 1. : snap(float64(loaded) / qMax(_song.song->size, 1), 0., 1.); + QString time; + float64 progress = 0.; + int32 loaded; + float64 loadProgress = 1.; + if (duration || !_song.song->loader) { + time = (_down == OverPlayback) ? _time : formatDurationText(display); + progress = duration ? snap(float64(position) / duration, 0., 1.) : 0.; + loaded = duration ? _song.song->size : 0; + } else { + loaded = _song.song->loader ? _song.song->loader->currentOffset() : 0; + time = formatDownloadText(loaded, _song.song->size); + loadProgress = snap(float64(loaded) / qMax(_song.song->size, 1), 0., 1.); + } if (time != _time || showPause != _showPause) { if (_time != time) { _time = time; diff --git a/Telegram/SourceFiles/structs.cpp b/Telegram/SourceFiles/structs.cpp index c9bbaad73..bc8228867 100644 --- a/Telegram/SourceFiles/structs.cpp +++ b/Telegram/SourceFiles/structs.cpp @@ -216,7 +216,10 @@ void UserData::setBotInfoVersion(int32 version) { botInfo = new BotInfo(); botInfo->version = version; } else if (botInfo->version < version) { - botInfo->commands.clear(); + if (!botInfo->commands.isEmpty()) { + botInfo->commands.clear(); + if (App::main()) App::main()->botCommandsChanged(this); + } botInfo->description.clear(); botInfo->shareText.clear(); botInfo->version = version; @@ -226,6 +229,9 @@ void UserData::setBotInfoVersion(int32 version) { void UserData::setBotInfo(const MTPBotInfo &info) { switch (info.type()) { case mtpc_botInfoEmpty: + if (botInfo && !botInfo->commands.isEmpty()) { + if (App::main()) App::main()->botCommandsChanged(this); + } delete botInfo; botInfo = 0; break; @@ -247,15 +253,37 @@ void UserData::setBotInfo(const MTPBotInfo &info) { botInfo->shareText = qs(d.vshare_text); const QVector &v(d.vcommands.c_vector().v); - botInfo->commands.clear(); botInfo->commands.reserve(v.size()); + bool changedCommands = false; + int32 j = 0; for (int32 i = 0, l = v.size(); i < l; ++i) { - if (v.at(i).type() == mtpc_botCommand) { - botInfo->commands.push_back(BotCommand(qs(v.at(i).c_botCommand().vcommand), qs(v.at(i).c_botCommand().vdescription))); + if (v.at(i).type() != mtpc_botCommand) continue; + + QString cmd = qs(v.at(i).c_botCommand().vcommand), desc = qs(v.at(i).c_botCommand().vdescription); + if (botInfo->commands.size() <= j) { + botInfo->commands.push_back(BotCommand(cmd, desc)); + changedCommands = true; + } else { + if (botInfo->commands[j].command != cmd) { + botInfo->commands[j].command = cmd; + changedCommands = true; + } + if (botInfo->commands[j].setDescription(desc)) { + changedCommands = true; + } } + ++j; + } + while (j < botInfo->commands.size()) { + botInfo->commands.pop_back(); + changedCommands = true; } botInfo->inited = true; + + if (changedCommands && App::main()) { + App::main()->botCommandsChanged(this); + } } break; } } diff --git a/Telegram/SourceFiles/structs.h b/Telegram/SourceFiles/structs.h index 7849674ad..f218adc24 100644 --- a/Telegram/SourceFiles/structs.h +++ b/Telegram/SourceFiles/structs.h @@ -120,11 +120,35 @@ private: PeerData *_peer; }; -struct BotCommand { - BotCommand(const QString &command, const QString &description) : command(command), description(description) { +class BotCommand { +public: + BotCommand(const QString &command, const QString &description) : command(command), _description(description) { + } - QString command, description; + QString command; + + bool setDescription(const QString &description) { + if (_description != description) { + _description = description; + _descriptionText = Text(); + return true; + } + return false; + } + + const Text &descriptionText() const { + if (_descriptionText.isEmpty() && !_description.isEmpty()) { + _descriptionText.setText(st::mentionFont, _description, _textNameOptions); + } + return _descriptionText; + } + +private: + QString _description; + mutable Text _descriptionText; + }; + struct BotInfo { BotInfo() : inited(false), readsAllHistory(false), cantJoinGroups(false), version(0), text(st::msgMinWidth) { } From 7021156732875f040f38ea3bf7dec5455363e4ad Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 3 Jul 2015 19:19:46 +0300 Subject: [PATCH 036/121] version 0.8.38 stable with media playback and force_reply in conversations with bots --- Telegram/PrepareWin.bat | 10 +++++----- Telegram/Resources/style.txt | 2 ++ Telegram/SourceFiles/application.cpp | 2 +- Telegram/SourceFiles/config.h | 6 +++--- Telegram/SourceFiles/gui/text.cpp | 9 ++++++--- Telegram/SourceFiles/historywidget.cpp | 10 +++++++--- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 ++++++------ Telegram/Version.sh | 2 +- 10 files changed, 32 insertions(+), 23 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index d564a9e30..7e4e156f6 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,11 +1,11 @@ @echo OFF set "AppVersionStrMajor=0.8" -set "AppVersion=8037" -set "AppVersionStrSmall=0.8.37" -set "AppVersionStr=0.8.37" -set "AppVersionStrFull=0.8.37.0" -set "DevChannel=1" +set "AppVersion=8038" +set "AppVersionStrSmall=0.8.38" +set "AppVersionStr=0.8.38" +set "AppVersionStrFull=0.8.38.0" +set "DevChannel=0" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index 0134de570..ef0d68e5b 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -868,6 +868,8 @@ defaultTextStyle: textStyle { lineHeight: 0px; } serviceTextStyle: textStyle(defaultTextStyle) { + lnkFlags: msgServiceFont; + lnkOverFlags: font(fsize semibold underline); lnkColor: msgServiceColor; lnkDownColor: msgServiceColor; selectBg: msgServiceSelectBg; diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index dbc8dce11..41f744844 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -642,7 +642,7 @@ void Application::checkMapVersion() { QString versionFeatures; if (DevChannel && Local::oldMapVersion() < 8037) { versionFeatures = lang(lng_new_version_text);// QString::fromUtf8("\xe2\x80\x94 Forward photos, media and stickers with drag-n-drop\n\xe2\x80\x94 Drag-n-drop text messages by timestamp to forward them\n\xe2\x80\x94 Larger stickers panel");// .replace('@', qsl("@") + QChar(0x200D)); - } else if (!DevChannel && Local::oldMapVersion() < 8036) { + } else if (!DevChannel && Local::oldMapVersion() < 8038) { versionFeatures = lang(lng_new_version_text).trimmed(); } if (!versionFeatures.isEmpty()) { diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 67ba6a796..724f702b8 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,9 +17,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8037; -static const wchar_t *AppVersionStr = L"0.8.37"; -static const bool DevChannel = true; +static const int32 AppVersion = 8038; +static const wchar_t *AppVersionStr = L"0.8.38"; +static const bool DevChannel = false; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; diff --git a/Telegram/SourceFiles/gui/text.cpp b/Telegram/SourceFiles/gui/text.cpp index a6bc95da8..5e7d50bdc 100644 --- a/Telegram/SourceFiles/gui/text.cpp +++ b/Telegram/SourceFiles/gui/text.cpp @@ -1625,16 +1625,19 @@ public: void eSetFont(ITextBlock *block) { style::font newFont = _t->_font; int flags = block->flags(); + if (flags) { + newFont = applyFlags(flags, _t->_font); + } if (block->lnkIndex()) { const TextLinkPtr &l(_t->_links.at(block->lnkIndex() - 1)); if (l == _overLnk) { if (l == _downLnk || !_downLnk) { - newFont = _textStyle->lnkOverFlags; + if (_t->_font != _textStyle->lnkOverFlags) newFont = _textStyle->lnkOverFlags; } else { - newFont = _textStyle->lnkFlags; + if (_t->_font != _textStyle->lnkFlags) newFont = _textStyle->lnkFlags; } } else { - newFont = _textStyle->lnkFlags; + if (_t->_font != _textStyle->lnkFlags) newFont = _textStyle->lnkFlags; } } if (newFont != _f) { diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 3b5da16f0..349054189 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -3954,7 +3954,7 @@ void HistoryWidget::onKbToggle(bool manual) { _field.setMaxHeight(st::maxFieldHeight); - _kbReplyTo = App::histItemById(_keyboard.forMsgId()); + _kbReplyTo = (hist->peer->chat || _keyboard.forceReply()) ? App::histItemById(_keyboard.forMsgId()) : 0; if (_kbReplyTo && !_replyToId) { updateReplyToName(); _replyToText.setText(st::msgFont, _kbReplyTo->inDialogsText(), _textDlgOptions); @@ -3970,7 +3970,7 @@ void HistoryWidget::onKbToggle(bool manual) { int32 maxh = qMin(_keyboard.height(), int(st::maxFieldHeight) - (int(st::maxFieldHeight) / 2)); _field.setMaxHeight(st::maxFieldHeight - maxh); - _kbReplyTo = hist->peer->chat ? App::histItemById(_keyboard.forMsgId()) : 0; + _kbReplyTo = (hist->peer->chat || _keyboard.forceReply()) ? App::histItemById(_keyboard.forMsgId()) : 0; if (_kbReplyTo && !_replyToId) { updateReplyToName(); _replyToText.setText(st::msgFont, _kbReplyTo->inDialogsText(), _textDlgOptions); @@ -4559,6 +4559,10 @@ void HistoryWidget::itemRemoved(HistoryItem *item) { if (item == _replyReturn) { calcNextReplyReturn(); } + if (_kbReplyTo && item == _kbReplyTo) { + onKbToggle(); + _kbReplyTo = 0; + } } void HistoryWidget::itemReplaced(HistoryItem *oldItem, HistoryItem *newItem) { @@ -4727,7 +4731,7 @@ void HistoryWidget::updateBotKeyboard() { int32 maxh = hasMarkup ? qMin(_keyboard.height(), int(st::maxFieldHeight) - (int(st::maxFieldHeight) / 2)) : 0; _field.setMaxHeight(st::maxFieldHeight - maxh); _kbShown = hasMarkup; - _kbReplyTo = hist->peer->chat ? App::histItemById(_keyboard.forMsgId()) : 0; + _kbReplyTo = (hist->peer->chat || _keyboard.forceReply()) ? App::histItemById(_keyboard.forMsgId()) : 0; if (_kbReplyTo && !_replyToId) { updateReplyToName(); _replyToText.setText(st::msgFont, _kbReplyTo->inDialogsText(), _textDlgOptions); diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index 6f62cceb8..f3626d369 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.37 + 0.8.38 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index b14c336783e32d9e20a24ef1a8677ceb1a8bd08f..2f08b76ab0028b72e2cb37615d1bb6888d133a06 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig^~ delta 53 zcmZ3Yy+nIM5ig_p6O diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index 648a68764..b5f012972 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -1701,7 +1701,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.37; + CURRENT_PROJECT_VERSION = 0.8.38; DEBUG_INFORMATION_FORMAT = dwarf; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -1719,7 +1719,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 0.8.37; + CURRENT_PROJECT_VERSION = 0.8.38; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = fast; GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h; @@ -1745,10 +1745,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.37; + CURRENT_PROJECT_VERSION = 0.8.38; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DYLIB_COMPATIBILITY_VERSION = 0.8; - DYLIB_CURRENT_VERSION = 0.8.37; + DYLIB_CURRENT_VERSION = 0.8.38; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -1888,10 +1888,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.37; + CURRENT_PROJECT_VERSION = 0.8.38; DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 0.8; - DYLIB_CURRENT_VERSION = 0.8.37; + DYLIB_CURRENT_VERSION = 0.8.38; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; diff --git a/Telegram/Version.sh b/Telegram/Version.sh index e759b7ad0..6058fe1f6 100755 --- a/Telegram/Version.sh +++ b/Telegram/Version.sh @@ -1,2 +1,2 @@ -echo 0.8 8037 0.8.37 1 +echo 0.8 8038 0.8.38 0 # AppVersionStrMajor AppVersion AppVersionStr DevChannel From cf119568a12404cfdf3607a14bccc0aa51458d09 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 3 Jul 2015 21:03:47 +0300 Subject: [PATCH 037/121] version 0.8.38 graphics changed --- Telegram/Resources/style.txt | 50 ++++++++++------------- Telegram/SourceFiles/art/sprite.png | Bin 172592 -> 171109 bytes Telegram/SourceFiles/art/sprite_200x.png | Bin 227714 -> 224769 bytes Telegram/SourceFiles/history.cpp | 24 ++++++----- 4 files changed, 35 insertions(+), 39 deletions(-) diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index ef0d68e5b..859f3d1f5 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -915,6 +915,8 @@ mediaDocOutImg: sprite(6px, 146px, 48px, 48px); mediaDocInImg: sprite(56px, 146px, 48px, 48px); mediaAudioOutImg: sprite(106px, 146px, 48px, 48px); mediaAudioInImg: sprite(156px, 146px, 48px, 48px); +mediaMusicOutImg: sprite(322px, 345px, 48px, 48px); +mediaMusicInImg: sprite(322px, 395px, 48px, 48px); mediaPlayOutImg: sprite(122px, 341px, 48px, 48px); mediaPlayInImg: sprite(172px, 341px, 48px, 48px); mediaPauseOutImg: sprite(222px, 341px, 48px, 48px); @@ -987,9 +989,9 @@ btnAttachPhoto: iconedButton(btnAttachDocument) { } btnAttachEmoji: iconedButton(btnAttachDocument) { overBgColor: white; - icon: sprite(363px, 344px, 21px, 22px); + icon: sprite(374px, 344px, 21px, 22px); iconPos: point(6px, 12px); - downIcon: sprite(363px, 344px, 21px, 22px); + downIcon: sprite(374px, 344px, 21px, 22px); downIconPos: point(6px, 12px); width: 33px; @@ -1012,7 +1014,7 @@ btnBotKbHide: iconedButton(btnAttachEmoji) { downIcon: sprite(373px, 95px, 23px, 14px); downIconPos: point(5px, 17px); } -btnRecordAudio: sprite(363px, 366px, 16px, 24px); +btnRecordAudio: sprite(379px, 390px, 16px, 24px); btnRecordAudioActive: sprite(379px, 366px, 16px, 24px); recordSignalColor: #f17077; recordSignalMin: 5px; @@ -1535,30 +1537,22 @@ stickersScroll: flatScroll(newScroll) { emojiScroll: flatScroll(newScroll) { deltat: 48px; } -emojiRecent: sprite(0px, 196px, 21px, 22px); -emojiRecentOver: sprite(287px, 220px, 21px, 22px); -emojiRecentActive: sprite(287px, 242px, 21px, 22px); -emojiPeople: sprite(21px, 196px, 21px, 22px); -emojiPeopleOver: sprite(308px, 220px, 21px, 22px); -emojiPeopleActive: sprite(308px, 242px, 21px, 22px); -emojiNature: sprite(42px, 196px, 21px, 22px); -emojiNatureOver: sprite(245px, 264px, 21px, 22px); +emojiRecentOver: sprite(0px, 196px, 21px, 22px); +emojiRecentActive: sprite(245px, 264px, 21px, 22px); +emojiPeopleOver: sprite(21px, 196px, 21px, 22px); +emojiPeopleActive: sprite(266px, 264px, 21px, 22px); +emojiNatureOver: sprite(42px, 196px, 21px, 22px); emojiNatureActive: sprite(245px, 286px, 21px, 22px); -emojiFood: sprite(63px, 196px, 21px, 22px); -emojiFoodOver: sprite(266px, 264px, 21px, 22px); +emojiFoodOver: sprite(63px, 196px, 21px, 22px); emojiFoodActive: sprite(266px, 286px, 21px, 22px); -emojiCelebration: sprite(84px, 196px, 21px, 22px); -emojiCelebrationOver: sprite(287px, 264px, 21px, 22px); +emojiCelebrationOver: sprite(84px, 196px, 21px, 22px); emojiCelebrationActive: sprite(287px, 286px, 21px, 22px); -emojiActivity: sprite(126px, 196px, 21px, 22px); -emojiActivityOver: sprite(321px, 344px, 21px, 22px); -emojiActivityActive: sprite(321px, 366px, 21px, 22px); -emojiTravel: sprite(105px, 196px, 21px, 22px); -emojiTravelOver: sprite(308px, 264px, 21px, 22px); +emojiActivityOver: sprite(126px, 196px, 21px, 22px); +emojiActivityActive: sprite(287px, 264px, 21px, 22px); +emojiTravelOver: sprite(105px, 196px, 21px, 22px); emojiTravelActive: sprite(308px, 286px, 21px, 22px); -emojiObjects: sprite(147px, 196px, 21px, 22px); -emojiObjectsOver: sprite(342px, 344px, 21px, 22px); -emojiObjectsActive: sprite(342px, 366px, 21px, 22px); +emojiObjectsOver: sprite(147px, 196px, 21px, 22px); +emojiObjectsActive: sprite(308px, 264px, 21px, 22px); emojiPanCategories: #f7f7f7; @@ -1727,11 +1721,11 @@ mvControlMargin: 0px; mvControlSize: 90px; mvIconSize: size(60px, 56px); -mvLeft: sprite(320px, 400px, 12px, 22px); -mvRight: sprite(332px, 400px, 12px, 22px); -mvClose: sprite(344px, 400px, 18px, 18px); -mvSave: sprite(362px, 400px, 14px, 19px); -mvMore: sprite(376px, 400px, 5px, 21px); +mvLeft: sprite(320px, 445px, 12px, 22px); +mvRight: sprite(332px, 445px, 12px, 22px); +mvClose: sprite(344px, 445px, 18px, 18px); +mvSave: sprite(362px, 445px, 14px, 19px); +mvMore: sprite(376px, 445px, 5px, 21px); mvDropdown: dropdown(dropdownDef) { shadow: sprite(0px, 0px, 0px, 0px); diff --git a/Telegram/SourceFiles/art/sprite.png b/Telegram/SourceFiles/art/sprite.png index d52ac2e853b5c6e355fac7833731351345d46c03..fe2c98bc2c48cea53269a939c7b9d1395a54e9b6 100644 GIT binary patch delta 50750 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 delta 52115 zcma%iWmHt(7xo>xOIl!P5C$1KrKCkkX@o&gK)ONT(%mT_At>Sx>F#cj?iLiKyW_q7 zKfLSx_^!pe40ndP=j^l3-p_vabAHv~m3868i^06h#rx24`E~dN#RbL0kxBR%PyV03 zG%=)DUkjOw@(b{Z@>uX&Sn>#3hzj$Vquz+}@bmLqh>8dZiwX!MD=RVdF#f+jne-S} zg7E)7PLvxdkko)Z5F~?FD}x8)|5)2v08`|{_!LTLlZHDBdkhXBRpe!LJm+^zJbdV; zs_zPHQ>qM4U-1~#AnN-u9|qaA`CH>oQKJ!uC1NO>E8F61u(5jKc9T!Y$wlA>GoS|m zSV8!89!9B%e%*cF_gP1GvmG|oFXyNBRF7|G;YY~=9&h#*_p_Zxm^`z?02mquPPq3d z5D5&SAu(kbKz~61574^iV+UvfUtk^(1VnLjaRGs8ED|(S7bQ+034@$_PIW3kBCFWSKOvU^paYoR{~)`qsaD-AI2NDus?ruVM|+-E_;*C+(+0kx^$ z<*yaoz(NclL0Ly7kySJn9ndeHW;u)X+em!&7`%))sDg&XHH2A))usjX1K-bb`a>9R ze(=G(d#)N61IWXhY@e3HzI$wjsPalOw&vh z-eHUq=2En2AQo+>o@3^-<0mM)rfn01Th8s9NO1He$%xp3o{9Cj{kn>B#F z)B5_sm)`oM5b1FFyhe6z>!!1|7j1OStvO^fhAfH#rMCe_4jLh|yuZP}DWRVX}P8?mBtXXwt>`Kp~s%XJm@Q}@v{;=8( zaU=)e`d`Bq3H%=hDUx#1%_w6ZaQZs~>I>EJADE(F0wuMTwl)|grndLRn4`F>uK_qP zOEVlyidS(kD`v}oPhd6~T)s7|=RPXfY|ND+jhi{~W4)%l4}VGqVMTk_&#r&;)4KmB zc)QONcmF4@wDW=Whv5QH;{LR8;nnRJ+_aU2E@79H}M?6g&t&pa79K&j*gC!RJ>CZFsLI2BTF`rG{c(fzcy-;u;?;EWheoEw=;w0 z$B_-ePbc)TSId>(QO}?i){3w`3T>^V19;IyiB>zT?5#94N#&VIx3;&lEMS0c5yjNh z)aYN=zQMsD9omoMRX$U|*J7Q3eb=AYl+luFWZ8=hxNFDxw*fk`$utlds^g z=Br+Gi-$+OAuVhoVOo$1+C;Vx?SV3DRx{#t3Wc#@DqD&G7&crlpn0f0%iOpJlnG_f zDozM~*Dad4jScZ3SHNUDk22abUZWnR4{F+8ZQ07M$*#EkE8 zJZU8u*(YD|F ztkaXBhV4(J%E9wrzy(?xJpY>}RuD|<8#!}A-@0E&$C-^9yY^^BYu&FO6a<|+pRK*? zw^#jsN#EbSHAGxlmZ7(Zcy&0^FC1*Fo^9a339XTo?i@S?sl+T%4kb60%JO&ov#^!S zCKBmbyxHkA8aafX?R|*r1z1+=rduZzO#s{n*l8|Wbl!JRzI3C{W5lR!YPcHyl*`ac`~#h7S#dks=dhr13pdvi`*`t}6G7&)%n`mab8H!zok zwiV~C!*(2Ci$jG%U>=Y%R~|ezbfoduE)$D+p_GB-7Z6BDO${9wP<3^8@30kS;o~Fq z^73NDL349+dp%I~*V+s|XvS+r@rmiP70}Ip+CsNTG@h$p;8!(sAXpY>Sw{Ro6R1&W zA2b^zq~IbkEKUUtD&Gu~W^axyEj>~Aq%n$<#j=E9RA|TN-=p!Mr<=O-zg65&^I6K9 zthe`|e47*9i;toK3JN=xrF-#Cy<%>;vcmc~0DwKGU{W zAZ%=Gpbd(&{Zgx26rw?F>HJhVgx_x<)wjT&u-Yt;QD#CA-s3Q5<8aOWi8=Zq(8O_q zJF@?v&ApN9%8vD+xo~D!aW@I0Ok15HT|saZl5UQ+BcZx|`S&9r@+s4;c>n^f<1ygU z!Sn(3p$trK>Ud=2@2?UJxrI$gr+rrvYriIW_X7-4BB7wl+Gcb8h-po74MPI6(orh3 zP*{y2!*Kh@4MUlJ?TBfOFCypil%JFx9?P^@_`{P%v1Sv$+dTC#&?=pI_)Jx`256hB zd|Mh56_pec@PQ0y5~fVj!Lu#;h>1ZYX8Vg2pA_sce0T;kp`Hx74-eA4eSLTrEPkLF zAQ}9vC3Yzc7Q5bYSwaJNy=IEeI)iD*IQEqj?@{5!G2hg!N1V%j%Ok#~efk%fJw)To zfjf?h62-$uX^?j(vC_QgFoS)Ln+`i9p5+q6rKW%EUu+f$!5?;Pavbet&ajEhyh2AZ zED)Q~Niet^t0vMFttWJ)gYrN2HbSEs+i$ZKmV+YD3zc;*h8DknFIJ#CXAmwMI;jH5 zJu!u)lNO~OdD~T~2HpD9n=Es8WYUA*=k9{&rEiXYs)7r0Yzx?|Yfb8jteq50zwn&O z^ps%-HKT-2L+{%tbLdHZj`}&+z!jh4;otNU?p6Eq)ln-gzVFvXR(vY|-kz_F(8V;x z#>Prk&fUCE>OZOPHW#xMq?P7NS8Emby>eBJ&&#fUhgy)nIp`F0!1ldZ3;SDE>|g*} zttXL8C2|XiLlfcM&8v7T9*&{@~28{=S%pRf=4$AUxiye zchb*VvwUK~wb_Z75xAH4#J;pq4$Z*!2ekrvt`sg-ba5z{3_@Yl*A72r$B}6AAb}&2 zRb~0^Sc&%a4-pF6$R7vs;Zkmts<@MJG}wavvTKlp&8?e%@D)@ zpaZKLy`^U4ge!8`mj4bZV@p5;7t?Nh0p?*JeRl&MhJEoq``P&iO#{uSV5GS0%dtaf z@he{ef2_JM(O7}!D9OXF2kDOen%k5W{Xvhr9a6_RiI-F=r| z9boz+Fg7pPfrIzwd&OTkBTcKUH0zfHH@um~&C98|xVY{J{R{v5ui*uPvQbGT0VsPr zl5G=;3O^o^20?MuHhFvDs-XX#nPBugj0zlld+ag`N#2XUUvpCHle!_N`vK2?52>@}{Jw>fZkEJX6sp{YJ~kLn7i0TeVDRmLa83DAK0cQYkH+p>j-js{*5_p5PtUApw6u=@95|V8$BT{Ir-%EMfsQ( zc}lbMuYm=$?5tTFvyd#oH}fhiPt+h3^5*&;f3ZfQuahj7E^5KcG3gz{GnO2`tG{#! z$|t7To99rTcy8M0zB|9*(0V%pjRQ1Un3@vG+Pw5-PWaObWhB=Zg;&qyjDL1!3r3;P zF%+nVMK?cUE4_~~>t~*%I9KGBz&T;|JQh%&sM@LD%+6$?jOynusrz{mfR3#gAKJOL z+fJtdvll*k1_0BC7Li5ZQ8^PrM%QCp@q_aoNxH!blJ77kS=h}ZH zaH{y@?7YIzXl{U+kM72KSSFuW7EG@&mQL z-O#HfHt@Dw{JaWd@V1(5mOdGM>TBwA*nP^XvX!j*YhP~4Ksg(~5KcnpG-b6Br&x*O z*4;eTM?_|aBPAh9>~C6QI|p`*NZiKb``zVO!pu4`URF}jnhh6V;7A&!)J(D(m zAqHD6+p*!E->Z+HU(~$KC*vZIA{*GqTcWmeT3#tebTeE>6&Y+faOAARe!K%Uzv-lC zeLGR{kfSc9;R2yG4NQ14pyWlFZ&cTdZbrrXs>y15x_AQ$RIw)RbC$g|_Dia|y1GBY zmh@y3S&b{E$biDmFk*PqKa0WIHgiC!_x*`%QOI#@GEQpXE!r6JP7v>Xn!l#i9k54y zuHbiCWJ*I5N|W%)Yo^4cX`2|p2|SQsy#GnniUf}(rSrT$K(T%2s&XVSG;dWb2j`$p zTa$euKrnVa!-w8%C5JLH?6mzBPHhlnDGy#Q^ly63z=4D0^E>7g)tqEy*1_lO6S3uq zA=_;X1Cj3o`WQO%zX$RZUs{=)dI39unD~_TOAT%e&?29VKZ~Q2aNj`!8H_j`mV{U! zRG@mF{8{@Km057mjB4$(-f`eVw!oL0UwHMa^zaej#}xf*JyaUyv-KUMTy=tDdK$}A zTBcfhU@d46OGRmyu{j^pIB%o>B!P>(s-XYFqEgWpN2!IuXki^87Krn`^ z$}e9|kw)fOWpCmpvf^eG{7vFeXE3O?nIa8jyeKxR{b5pNH6|xv5G^ba(6@Z12nLtG zpziFYa0aA_&J_r-I^klml@~ONnJ==$PxTp(LPJAeh2&HXBL>~=7ixCFQ@+IRkg`j` z7wwc!gbc^S4IJstX%sYTjltVf2H(gTQ?NNYuh2*|_8OrxGr1)MR+W7px$7uXoA`Ts z?R!S0H;#j8P)D@0hu-kj?o;9u)v~h70r}VQ?dWE|hciV$$d!(91KXe(`FKL9Hore-XoLt5kO;jEdW#RdySc>Q{r$Q8b2;hU!jCJK=thq9!eR8)i_s}j0Ns~tD4PzyIUa7k`NfO=A3J=NFwwvA^rJ>Hj+qBjjHoK|+Ucw#es7kfI z-BJHn^ThQIZsQqssyN-@y~C@EFJUG4!TxUh3H)N0muMU++`6b+0(n*gXx9(AhSCMT zLh+&181Of$u;~B$faAq#SHy!GXv@FP*z~ghH~(EJ$U8AD9gg)5UaMa-`ET?eP~rj@ zus<{m;4m#W?UZiS_IImk{jqOvWk}bzy3&cv{OWj}54)*A3ncY#euCqMDVyEOkyjGb zpu;orG9^*vWG(QS>B9tnC6wxF z?G|c6po%1V%H|hM=$ea*OR=f%=~Q67%cgFqKf=smyY{T+x+-l&XiNnS!>sJ+56Fi^ zmP_J2uv!!qf<3FW>`T_B7Ob3g)(x|>QzYlIiheCLAwe35`3h!5>xP4RRkpLULkWO5 z0fioG9Ij^>?@InwDyiGmCiOJB4|l@VU^VT6k?vvI!om*A#!3?>f}yCb>#M6&FJ&5DPX&XQ@!NL;94_oxa)1&A{S!UBw{q9dlLoRmJ zy~#kE@m-E^n2+g;`Py5QE&^Qiv)&c@!HlH7J@gIv(Ga}Yg1@>9Sc0Vu5RgavRw|W2 z<2Y;4nAkmE{qEUrCdd-q>i1#px7mHQ);GzY?~Dp9u>F(DFtfgg@*G(WWhfdL%jCbDXlL)#C59&+?%DGp4axwsV zgFLeVk&YZU>nyF)@+m3=I44O&xU&oek)+qt&<7Hsf(T09Huac$r>Kl16OxDpFB)0PnXpb5v3-wf?$@eRj4Cg%)1GyG74Y$G5WHPCU5KoH5BcXPty_C zINa}b6Ej47IX~}xUvfUXY^D{1A<-8m9uq-q8^}Wl-l+ofoL(D;K+W7js0_|)>nacC zUJi3JPuDG)GRZitFVtyNeNIk(bdLv;SY+vF*Av=p+iQeb_HK!hCgct5;a6SbXLU|^RFEwRoamzwRr3iQve3k{H|FGhsA^9X52occ)VLPID zA}?aV-tJ4MI#JVD3+q2oGrkjf3NexG(XNj?V;}A>WIq^c=TOhys7F>g{rD*MBjI~V z$zz1gbd~kQ$C<*?QsQeN=I2Cc2GQwAT~RD2B|oki*phj`ikV2EhKcqS#_{RW~w&Gf%B+cWYr1d-> zF;%ioiR1f*6i*h6^~ zxfB^BxQFdnnT15GpHO$ZcU*ATehK%Te&@tNpk&=2o`lf}yH%uo`iAn67TM<8XHF=v zgs0;h!hrwrF7Zn{EFf&v&A-Zf;w_n24bXGMqT(2JDl_nCJtx-s4qK?VjG zqK}z_nXuxqSF4bM!Ib}=kIE?EUh&$b_Z!X-l2SUUUGd92SD^hE_G3+zI>5%4uJ@2! zLF}VLQzOFTm{LVt5A!g)^;>_tPBzxD2H^pzGU^D|Kfla!zK)H9I&-TXGJ}AgcsJV_=KQv~RGU z6rggTm1E2Z@8tb;b*xBD(Aj2F9f+cCPZQ!><=mH`s2Rcr2LbZVHw6W#XRwY2((oWg z&a~IAz!tEBc0ky|%R(o(h?{RFnT__G?9Zq``~=2b4KuwSc@NV|MWw0Ct2~1+A{Hcf z05;WJzhUITQna)+M3yhAbhu6LKTmR`-!KuvO0{f9MknFW^>+9660=YiP2pv|z^TP zdTqSf>G&wY2Z4VLtFfQz^<>jFo1%sfJ!}OjxY_W}J$qPpd^w8%7#jd#jW>KXdW5Lmghh2W?O1jY3r z27=yeW|-J0#g+~&b+5&Ojx9RIgw+C zkWo!){caoXFSZ;?K;LfPMi-J#)?tc=B2?oCU##nry47J#J0+;-!SAdb**(3_y_*d3 zBO88r)MZ{NMEN-jE& zY6*}%ssFN81SfdyK}pbM*^LauHa85E_?|pAu5)x^?9c~Or|RR!kY3)+cU+Zoi9Yo$X)$Ta^*i`JblkQ1VIbT=< z8KFuQfMTi#bsA|9tN%w&(!I+XVqW^~sQjKd!hx?d}kuMf2x)1e`HTlz3qR`AS`hIaC@e- zaS;F80kkeZpOEyL0Lx`L_f66jj=Qf*e!n0tcmaZ+*HRFYq@jM2uaLdys(b5DnfQ|Z`t>Wm-vZ6xf+=b&F;v7Q`StI# zw6w5}4!PvyWV87y>koXdu?7YPkS@Q~lGDb9J9hb z$Bdg3Le(pvP_q7p#avW|3GL12zOv%XPU4n7?Ne}(wWJ1^JQu&ULncu#)^}yXr_&33 zGSWS9*3{N&IZ`H!__JC;7tHwTpAUN;I?#bcii3_EG5TH6iA}b>yovlih6v@O=Tusr zbHm9VUB8;?h~tsVu44C=wI17stqW&*!ns^@l$F87 zEJ5>hM8WgS-^Wy(_VvF~F9|y74%3tdWNH7sNTKaokb5#iEKb?a{F3x*)8S7Aj{>fr z$@w$~PnkNY$ng~TM~+)vZj2C=E7I?#ziXv|`+;^sf<+KN#Xc+Hwxz@We4^Eb&w6QP zW@a<_Et1;3+?{}c;39GJz@bUH2Q+fEl6dC(TzT<%R*A)02vYK&aREie)hdO&*UpkM zft{1`w1}-ht8m;gGH)`HX4o^7>Y2qY`UHb z(32Z0>FVnG41xI=3|V6(O`W{K60&qPT_Xd7OJSA7oCC?$Y(^YNE1|6|9UT|9;&`;t zzq@zzB3m+D&~Cme#yv+V4mIO{N0=qinWx5hEl2IoY-al0TxcTe0n1j+nAhFfqxJpb!k*O3O%}mrQuDH>w-IQ-+aeV4zEmp z-SOdPaZb#qxcY0vP057g46-5bQ_{TJOS(uh&a&{%7Flk0pNTLkb)vPm6sn7&0%9Aq zy>EHEHJF_~IS|qE9RpevqrXbW z%1-5ipFOwqN|KWJ;=9#%7kr_KaYPqbZI#gxla!HSr;&s`FyyvhT8?Yg{dUmnGG5k% zdX5P1M(J7R$dH&d-1Eq#=w-|66lKH+It8q2#-y++j-AreCjE zS50X8ZTNMxV8v}hk7t5Hw3&!MW|@KrNY4=TF>`SvhT^WTV>8mxqmd|%^YQdL@?{E_ zb)SX#&3?e>_odnSydZrvSXuvDX_sY_Z*UJyFY6t- zZkEUjk_hqo#8`;9dZa4-DZE-x`EMC4CL?GSnj$d>&L_ zt^5VH$xfJz@UfxI7Qd=32M^?w(KNzUB>h}%4SS~9=`&pEeijxs4exf`n8;MUqqS5J zdxlYQ5T4Unb8t2dVF%2YK^=ZK#b?JLLtxDiVIZQ(n%3nBX^&KJF2DBdFd!LErT+SD z7-^1BoG>3-+=!8Dc$#Y7SdS!z(H8^^EiYRT`np2Pk1)qdU&&_BWxeP5{bHSyb^|<5 zd8N*2LK?PcExrGy@niW<`^HofPJ_Cno@c-wyD|1aWUUb$xQFFvkFcT{HpGe=XS>)6 ztC!6I3rxe<;8jdQd<=qlKkn`s{2#({w+i;D)=7dr-VGncEqFb6=>2m6w97uugIXXc zl&+q@j{P*MryZK)KMO{+g#lmJ)2*yiy`zIS~E}jc-Ee zLMp+G*tV#31sJV@;1lfqAKL_z{5n|8z*ldew#2k`uhXhQ$w911IvTTM)ss;=yGLYK z(bi#NJ+Nuj=UI-(-!TWagy-^2_O%>7WIMQ6p<(GUp!Lds09DiR4~fAqT7P*Vg6@T8 zaw6)(I$iJW*XnAw3E%UjuaQ{KJJ%)vK(_MWKWm>lXqne9T7E8%>`FuK)j#oQt+0+t zx5E>?O}qSnUl}ca3?uu=C%i)%>%OmkE_r|Bht3hLuQHLE?HgDetmX6N-oAm~* z%QEN?^+!lC2x{v}LYaKsZspt z?odkP{cWFow1**P+)^B_-k{s6#XFlVA3ZEl8XFmmg;#f{Epq*+cU>D5UqhA z;w5F&FC;*M@hN`rR~+aEb-_hmxlO&q;+^>&mM+k8-@4vA2Y$c3j~*PsGg>0-9kIBl zF}V}2yE!?7OnFya3I7^WToAkbGE|4FIyeKl95(!vfohjNXgweggS4iawmg5ypQ7Gb zdYY5S$cSJ}r*?s&I6PtW4eS#Kez|^Ax}`zNt5Q>^72or3!XQMG7HWOdDd`%UpT7#r z%gb9(PP~CbW&JZsApT#&5t4w3s(dNjN#WL8##%7MRgVYa(cHHt7CzjG=5@yDi$AqBQTg+cY|1h$`!mZJG zKhhmNqwWP8Pel36WbL&i+my1zw#3$4sQU71Yilo|w%8&QSw!mBf`XsW(tF=-6_vi) z9u<_j`ja1Loze2#)A*96OGG7rouy?{U4+fSc8!`I<@sWJEV zQ6$tVl$Vu-jgOCq?jAEI!DH0sN5s^-@KBDD8XrK$j<>^Dbbo}+H4DydqK$sozVRK>?}!wn39-|AvtD5Lq>!dUe)s*^rZG{K2mO2 zEP)%y`Pura2HHwH4QKQ3OtFF3bwhT6M}<27seaSB`h2}Aty|%_SHH=MA?x|kDYD!A z?Q?Q4s@wSkV|cR0@&u$5(KIr`50MMFx$&7Dw8s#3EJJvEdpoYS!64*J5AnRH1c(3? z2W}qZ8%;~?<*N9z+O|Z4roYpX`l0P$=4qc=y!>mfcqLRNpJFfqSlvybVT!vTU8Q$u zKAon6@C_;OVfc4-iA6hdXd5DYhvz}4z@;iEC=iBmy4p;#ioNHT7Wp?=i0`$BcKQW# zD5DVm&A(3F{RW3LUtLmYC&;J9wtD$VV@ciA6mIkGou-C{KaIc}|AN1{mJs$_KlwXR zSX``Np2w5qQD}*kh`t%1|5u)ln4BZ>z$u9Vo_+Woch7d}XL6)MqA0jEey>um$gYLj7jhW|U>|bm zP(_WJd+5#a3v37<1a+Iwks}Q1%sl)B4zfNq7n_NM|CAL7$TF#D^C#WcE~F+Wo@bFvR~S&9D<9_D_|%=ZEh z&A93>RcpIw*tj=yloSj8KTdMy)%)G;Gsk&2KY>eAeZ5z4RQ(oBs^v@CnBQ)I23HDv z4m;*8M}2B}2b(-4kvYV&fRqvPt*%Ry(TkrxebR%PG-Jl&b@qP$SN(2Acp)yc z6FJmN1cu7c7SPAG!ep2eByIWAQ|s*UvC`AiV+@PWn9fHHshmftV|rG+@xRd%>ZcOU zwvJ9tVpJRMP6{rLL&ww8)qfr*8Mg_EPE-3%BxhEOs9K%~(mr_b)gH+gt@#ibpo+P<;~ zSLV=lrmy~wR3A~3boiJtW|CA;Gaq+f*~S=@}7xn3hwUi`2N!J+L_|w;%35`khmowGgD%3hIsmc z^ArEyv);RsRtIJGRBi(#9drTHZ!N+SAgyXbm~R=_H6iz;vEHV#sNQBUl_w6zf(ha| z^NNb_fp|zQcyY0c*9$oc2?i{xn^IVv1Y^Uwe#IA3lu^!3TY@-IgK|L+&5Ro0x^+p4 zh$IC>N#y~?c{LRz!#Z|)U&8rTxp>LgEmI$H_XNTQLG5L_j8Xkj+1U(#T*WoWg}8Q^ zxw-KHMbVnu-G}%npzRoVjO7?|fY%$G2J?}8MdcFTQ~6B$aB%51@C_+S`OElQpv_9~ z)oui$1ky)=)qAwcf)-yXNSGvWNAjDS=^+e4_P#&iG8_oV*m^`?>J=NihtY?bsQ)1pnDVS~SPlTHYHNcm4Om%O8Ch6f>+tuG>29~_Prrn?5mo4G)_nl3H9oah-%T28 zXaFd42D~zrAY%N>1?RL)RfrMKpX& z8I^MhB~QQpW1mW8Rzo5H8XD;6Z)pI@!l5~S{`&Pjfg2%t0#4CsDAmqAm2#(mJ;uSl zqv=N1)=in->0?N+eJ$jf4Yhq@SK>F1Y4e@9u!8;t2B<>uD$)Ap6I$>Wj>c(0{kyK) z{IYXvsz{nrD!m_b#+9LjQHAW=w{OrjBqRiu6#W{ru4t${cnTD^AS+R+z|<|$a)Pe>W^PxvT>hliItW~HI6jUI}U zw4uFgLlW44Ha7q6X=tqKy%P7^`THaBzfY+uVSn%50m%zOvD@r(jUYu^RtE=3rsrms z2VD(jJNvJ|?wJ*i%qQ;+oj>X%sEo<;%N}V(l7RIav8yT>tO8jA+SxNfVe^(3W95=x zEe%eLcnV~j4U4=_dAEaKetyjP=#i|sIWr_t8=apQ|1V>?#DbJ4-IaQO1;fZyyZ=#Yv*I^0vMhhdo@BB-~}r{Glx; zU=H$;ty5eqMZx{o>ZM}WuMAS{L^4n9MxI@QIc}V*=6qqwIWJxWKJWbNr`vf&C zXgR$@)e!BSyiIRWVuA+4sg+B`Z?~7d??7VOwcTj@cxmqwPDn2jHaR&N-;e8-oGiVF zzd8btKiFt?1w2V=syR_XBy2){jvqeTH~cNYz0cjhy*-{g`n-XcK{=d<%lw#j!3y;O zYkKIV@7Yx^RDi(s^S;@E_tz^*Zp#7f!8`yZuj=%hYq63CZ7nkl#x6WS6Lc5`l=`*o zHe(Vin+=WN`m{ZtjS$&tZtx!h=ASI zn}txqz@nYfI^u2Q`t6UrY%g%fZ*iuO1tQh>9F`?F&7^6ccRnzHNHoRIiXL$2K#E$( zuq@rPvW_?A+^_?Q00c(YklE=qhc?`EubBJm4@9FnGnolFzQr0|2CKX|sR3yYXY1d! z&E-~)+XoKAFlK(g7#jD)KhE)?#1(%GlfMt2eKn}-aQYr3NGA#jpFpH(msKAcso&~b zR1|v#Q6`u#61n2U?SGH1VLKBY>}UYv3y@%#Pd;2NI4>Di22sbxu!Rz>&=5+!PM^?yl|KDl|H!sT}V7QEek zVwYeW_cR};D|the_Ut(mOO%;13rR(|aEGG;zCXuKD*{LXexM@<@9?M4?Jyn5+HiqJ zfDVS_j22G-d&d{QOt2FJs)POaH zD&?3Ob;+MVo~1s}WZoFf$ZM8tc0BHLTdKJUkxVGKZ*-aXLa)2#bA2m%sx$B9p^ZZMEQ`(hn zF^?rX@aLb~`Rrwlo2<~^u+ml&suS7kDA!5CkIjBJ1TFYx5&VJ<5a2L=^25;C6s3uc2esn^6 zpQ|iKnv;8zL#Tec{n2U)VZ8Q&wmn`ex3?it5gBzA9Q_fcST|uzf)TI)2Sxrwf&UK9 zVE{K5A-tXQZQ$a26&c^1riFV4l#kqEfXuJoZ`s!aF9ph+Q8ddJKD;f9rn`&16$pvk zEpDlsp4YM*6;bYA&(-huzkIZ?Jc_dlOvW|UJ1BErJX8W(t{wz4-Uu6N2eoDUAW1~Y z$gw1u9yG-JTluSTwG6NDMI7>j#z+uLcPKM9vB?zxdJjbnMLtq-M&>0)ZcG8fFFwC@ zUCA#^?fXelWF1I?`{a!)Ny5g*uxwE2E^Q{~22hIC?`7WRkiP6MWDoU#&0u*NpIKF5 zdnl~Nax7nCv{m8+jHI3M37lPH;Cza;{GNLUX|SK|L%LR?;K!_DRT&_e3gUQH_7UD@ zGSzxsh~)?AW)fDhroop&RrwCe65|B2@l?^FNIIrkktJ7cohLchIo>WcI$SN0ShBcF zUeQ4eD(ct6cEpPfm7XgL<<#EquV3#UwEG&d;v2C|f`I1<^gtzg`Yr8F{i-kY1ie9P zO7kTUe4&~m7Sia+0Wm)6-EW0XeE|-jtC)x6Ap<-nhSe*t>vZKZz5k;9(#7d+(K_)M^`;R!6DERdZcARu!_G<0+2a6l( zwiM|5mMekm_imjwcFMRxtU#a)31#`gY6#V<52+tM=+A(2bLo|+&d?tm*`CZ25)zG1 zi*?hMT}Gau28|7FCIhT>oXwXs9NxXSN2lsFzvJXEn0-0XP`EoP$mYJ}c=u83yP@&g zF>6#x``&ss$1}-`jfjIU4xVSl6k3K&YSceFbFE1%<|h~P;43%BE3K5z+(anZ-UVg+ zV$fl0h+VY?%YJn?uKioA$n@Ny%D!hT)IL4`%93j*>n-QM6qL_>Y&FJ zPHkz;+=oR88biJOSy?xEy-`C1One}`NO&7K@!_C_e^ypvT923(f7*mSsf#J z-J7fQT1xe!UL?GY`Q*6?(S&TFs`9*do5=Z?-a^1(4QTZ?ZFmAVnsOt z{?qu2r-gWbY0oIY8z;Y5BHZ+33vjfeESWv44U?*0{Tlb`X;hy`6C3l1JSAi)f%Nq4 zRzhTTeJQgl5wm;PySZtN#O{9?fKHW_tmADy4!KIth*8<GV za*HSwP^r&MedW0p;*TZnvD@)77L*pev(apRH;YL5sILbFoU*yQrKk$1oh{Y%rqH?s z|72%_w5(?%+}V4p#!{n4r3X?KU;O@pEj_+neQXdqM>~p3a9mSj^yGXY4Xorg-XBgu z$bI|}ud4ak_=&;5w;r-Ca)XAubdk;HN4;ji0jvKdbd2HFTqpfAaPLO|dQ6QxFuS{G*p~G?g6odEt;YS2Inkw{Kb!U3P;V&E3JB)XiOJH);kUxwfDO zm%>>!`+W6UwEySXb@qz_YwvGJgc2{5rL(~0o2WBie^8xc%npuq@KsOb`(2l>l1`8J z%KQE1)4L(zqF&#v9t=Pb+_Wpi0IaT%1ymGslcv$G*dC*{SS1aIf=YEi>NC>Qxy7i#wdzacnVqi%@r) zjfS@A`gd*b%DVQXW^TvIWeqVt{tqpj)wB$3RlKrQC>{4gsU|B%{&_ikadPB;SAk&AR_t*G}jDxppcz8c79oUTna;VkPe_nn2 z`!Ou+@5j;Pe>J1%Q(1P$`}+KIZC-k0VyoY6Ul_3ln`mbda!je})7zBMTWyyzUCgFD zqjPo362ZSp$*&oQx;^J-e%)W5)UOjipG{S1>Z&=sdHR?=(@W@!!@cAxy9%M6H2BEV z*`EUoLMHctH7qTo+=?aag;CpoeiIRWgQg7jv*_Wvd^{=9<;nHM9(o#XNf_(sXx;M| z+2Tln4i0hWg>#AF*8>tv1d8X)+GCIZ*fUKBvF!eILzm96^FL!n2)+&?jKh1cozt0lX2+GJTvCAo1lpom|CbR1| zv0Nc|vp-~$eA3fqFO+Sw^Am9mtD?Z#HT4XTuCa3bczxfV^l^$yMj{YxBLpnXo;Z97HoN0|)!~P{lt+v)Ks?>WbYCiCR{)&89Ek zwzSll{}8Jj@j59}47sfp%_2UtV+-|x9nm}Gg3%@I&Zz78b=W(vGf7-I0X^4*i$jl@ zmi|>6O~d{9b4vJAWmpEB2CP^7xO+Qtg^L(gfZ#(QAv6Cbf3Nyz%9+saV{*7~5+uVz zOMTX-VEmFEmx(htiI9WrLn{%!B>nnB29z#x_w^x6w4_zo@EZy}E^?mC#oc=Sn~x5e zFYpN52cnKUtvgaK9YaHQ;tA#1E1wYMXeZ1m6{ zzq23hDAe*R22rnBhlDPXizmSOOV#@16s+r3&wVKaw#IpG_YMWAut~croBC!uupK z(4Vu%defm`uh7?^(%?X{k*ZO&lGD$Uy7uahKTn=B`95v4;BUF~irf1GF@{j0m#bC7 z8aQ;gOY&HOo}LoLEAPvH_ks!!BVd0;2%T<7=5;RMVxDenT>eB!(EEP%v-%6KdT#*^yA3VUpPrJYk#ms(gg^JlIUT< zoQNufJ~0u|d^40NsdCc7#4G;Q^hOlZ2fvq{-q~ZxAKYA53C_~b@-yKK(uVibdOqH> z^sGx}MKMa*>5mOBs<;{3x0Bu?Ele~syNt+}`h2;Tgb@Xh!ky1U)nM)C?KU(%S}nhW z%o}+W>I}p_9L_hEjkeRpLi!gvyh%t?7Zf+=+TT=lDC91h)fCkWh}oR>DP|6qJ8m85 zmBj0u?ZvxpZH>cD-Z8^-mOuLqFrZ2A0Pc7ryg3RX3vch$J-U8D_&X=!P1iUwL`i&E zZT}u&ugew4)^5z8C9j9db5YooVvTs;zfe)iKMe^f` z$I4~n>BqtQKuz9fx>aW+%N_nNg=wm-D*2Yzus=}v-Kldx|AwZn$o(_SL#kW3DrYeM z{kjNzK(mUAZ=_^r=dzstTWq|7(`V1{JU^7pxRZwuihRzt?GEEWO>l7hczeZBu1#4w zy-=4YZ|}XD`gRf{yL?C#iZ?1bx?7R&yx(N>^Vsl_Hn!IKG3m<_&4KYVpjPeALI(1E zmDVqe>2nb#rBrM)bw;bTO_i%gzwx1nWF16I3%Ac`8;Y>!u*{Pk@8CPaYVZs~7dqB* z7M;Wpc!tiK2za!j;{#p37j1vY7fE6*$O|!%QqGQQk=MNH6F+!9RE1i{@D;xIm3MgA zc7L(+V%pN~V3C|d&$30wN)+UJhq@3DqGlQx7A;#wx6ivuN=!7%M>(-5{~^LNbph9nUHjtvsY0CG)KfCl$e${E!h7V zv<=9Q-jA7uYk3{gpP_i54qF%+-LRA|@1B70j-@{)aIU|5NQfy-F8LGThuji+A5Wz5 zYwnn5qwRwi9k2h&GscCY zFEH#{EFgpuC7Cjju$F&jZf)^|Lr762M&@`$ZLY1w*7K%Nr}u4ZU29eChp9!b3FE-f z`(^hZDl1vGf%##Giqqd+rPD&fe$Oo7TJT7y^GK;f=vP$V{@t{27${sf%`(+>3#*c@Jgg}pxI2xr!5QL-0 zA|YW=7^^=Z?@!W-{5_8=r zF0?Q3QKW-{I3;M4M@zcnL_^=l|AP+axSemCd9=!-XsMU&+qmmicC?sTLupiTOsaSD z9BmU0Qt4?GM~Z6{IUd`N)e$PmCLL%J-G-i?bYoB^T7-KN!Xt(uyq02)xqRVuSsh3~ zmK-UYe6goOqW4#koFQ#s#LDjTD+Y0fvaj`W>4Y2^W1`|bach-z4u=QP=g<(5)5)zG zOc?Ip_>`*(&JbD{m4t*qFK#a5@`}Og-1H_#!R$XGS(db@Gc~9EF5j}|P-7}FHgWg2 z_F5t8wU%owBK3BCFFS8bdNc?msfig-h+y|<8!WI3Dc2f_$9scoiA$`6UX`ge??x~EtByVY>!;8{4ZL;;0lFD6_Y;6&+iT@DDFx8Te z=Qo$xFjFV_j~%8uy!RNA41!1W^NPEButU&x^hUz}8_taBbn0 zp>X84HZakU2r7wQS|AJ5*QTw@snIFjwk%cqBTE2tX=!7lA06c;rBEIbLWPMVH&FDF z!IAsJdJiHYdqSib+@sLEuf(2(3V4dHO55}{q108GH$PSApLTS17A^jg)WpX}djbRq zlF8E(Lvk^w?}!tMEhQdZEfYuidcWARW$%SqmuIS$kLoBW~xs&H>b?J zMwmqlN&1$K^SAU8L+ z0qc%@;Ow*fPN@6XndC4wDu2qA6bO&HrgA$wX%=3jjMQX|S#h0_Cgj`M8MXV+)8IuF z)1#C-Yb?$!@l-|^F?F(!=2V8(axTlkBBsfO>xc&%)0s)_gn~;2==9P#DC7vRw(0gZ zx@NvKa1!XW&IfIMtn@#xP%n^!JU#iq;!0;V{E>tKmYAlYA!_w}H1O=I?7)t&*r+ZK z4R0J6kRNTTnYwK-qS<@LOY|qgHo&^m4oNaIhNG~gE%vp!xS7LwY+}a%qyQ6@G{z~xb^#G*2_4UQKV5)B7 ztf+kj{ZgTXyllf*8dZj`UsqzAa`zRYW5}WJK!xM-@2@K(K3a`IBfMKXDR3b9YRjvj zsw(Ster0!tj*hOWtsUCd_5$=@NEB&E^lnT1$s$noQd662sd#N9`8oWe!Z^QFMWs0> z;M>hY{xY!CDXW~VHHLI$+p~B|ifa8rryD-JFJdn@5tx#mo>9Xbn%i4+k0)zmYBZwUVZ!Tc7s7+;XLp+sbZpnszStM>AMAd(H(yh z5)xNXEmtVh%Jp9J1yVx+pHoV&!*9Vf^6?v>UwvSIcHPE}9zuavD#HU-TYlXpgt82{ zmpu^`=*P_s!tGY zTIUB9v<8O&)S#8Uz1<~LduFBT_oa^MFAcg-q(y(dIq%g6bNwTe;Q_6h>_DpIAF1EG zFFDn`7ifebrl;C7=&nt*Nbg7ziWu1_l-gBuT*6AZ9X${!JUl!$z7|QVHEA&73%LG3 zBqkJkABnOk#J+Q5%X76^M9Zq1fPa6B2zzLlnI=~6~TEEd zpgu`eXh~=_BAOg+$h(u~qq{at3m)brR2ifJns6x4ySQl3@t@cMB_ADE5hDwm#r=3+ z*_xj7ZGZ54>k2`8KS{4i*_cs1cabR!jQy7hc}_wB8$Q47D69uX@U2ukSb{9d5k6A% zI>Rs!-5d>2OPmT3O!L2E!3+$0NQt8Mzd@HM@q7g`a<7T?COUBNk`VC~&G+_2zY?~p z^?ikiJrg5o6;kEb_Q9Hp6ZOA@fkL%O?A)AAu7E2%sADTADt`9e%R_E7z(}Tb{rQy& z=x!LyfBx}{{PLsH%@3Wh!jK_GEHR0LkdIBAZEV&{HdjQHfsL!NwHboJ-jfJdBT!+) z%-j2VuiQf|9={WYrRT*97cQ|YTi>bWL88L-HI+YS=$iGE2a1C(?Ehe5wZ8Da6hf}I z3}?+Mx5En(U@uf7wLmEC?d<~om#p!mg78@? z5kLq&RV7F&=!OX7J&()V&5fIt03C}$3?qI^Lq`V@ECaX{U{F%@k~%t|cQ8n9FNsrz zI-7Y?v4EU{p?2n1Ed8kn^u96hBssdOI$)&Q;aG^|XRE`@j?UTmd8p_7`_kgIupYo6 zJ)&<14IxG*8r3QVrN}97adtjIs(1L)sr^&9uByq>6hU0!lJSz-DEQo+^k)v=lF{Q2 zz9l*k5|K+BHIrh%XxO0m7GiTozHU9c-q9CjFO6V6n?Why52_;D=?&v01Qp_^Y zY{Ms=+N{U<%S$g(ArBPb+o+tu?wOqj zDm*TihmVpZi_N}pup0a?4<#W;yj(4h_-ua7dNAbE+dJ&8jtkSzm_CyiYq9Zg-(G(P zJ;Y zVc>%u&Di-}62(^^lL~&HIqo0Z+`iW>->>aP{|fZ#(UjDcITUcX3fhf8cArf?RXYz? z=y4a$csPr{`t@olFFO^-G&kkN&}^d|`cqx1ch(UxdVRyNQ&LAFo4~TS({Kvt+usr) zO&<3O3(2!r<4lzj_2m>G=)sZq%JO7T&8iXbk$DPybwP}Bd%~X6jHi`^500#ox?dRQ z$?grWcYSfyB@DE*Le9@2w?}DnXlUrSZhwBCd~cy{xWb|$IN&-UBP9i&&h`>1N+u)} z8N0Zu3Kb|!4O(oI+!JGHZKESH34%8b3<%L}lh4~j#OTD9s?1?Qnep*P68N%`w0OZ* zh6c5I8u&XrnG#hxLVOrGsMh~daNS5rp0%3;OG|w=8r`a4LrBBq6;fyV+5U0LZNN2m zbhEY%qMvbJPm`O5#c8%&4!~h!ce(`v`sR3ujWupJ#RBa*`>sK42F3Q8mM@*<-SLyZ z*ni_5zb7?0aPQo}`o_I@Bl==HEU6$l=E)cL>FWIM| z5C=0RdQhOKCPY$Ofgc#n#)gfg9{85k6QiS2va(N*kde=hKCFjW8Rq&Qw+}aR41!jJ z!Ox+{KpC3X6AN5`g!&ybSPk)>S#EYwludk^FKfCspJEXmx!HOX*B;*Y84d>yYpMzm)(HFSban*sOeUQL$Y<)hsU`M@#7Ndwaj>JYWjc zy$R!DE+bt~Fk>d`_zoKWYOHw)X z6o8h`0M>-*;ESfQ{qYm+xjh!HprGMj+|}McJRAVFVw6b=4US9Pk5caU@6mwGDzLM0 z%PucQHB@@(u{XV&0s~osNDZs$3)ZxD71l3w&z@5XGd%_QL|8YswVIao-1m1DU+b$H zujQJXn;R`hlFgSx`-f8V^N+_NMhqAbYHqEq-QB9?TltFp@HJ<(UboH_XlLE|x1_x{ zOPviLL^D4TS25Xgcv;yv!|Qt8{!Bmd(gH!!dUV*90rrzb%iC$`t!3xd`V!H|=*6B| zH?JD|1+kv3Rc56j4(h@(UfFJ?HykVcsmS97+SG;ZJtBqT(#u>y2$rY#&b@+7%JvtP4#gH;Ck0Km%kQ6>gcwNUIsDk#6>3j715^i- z>68<*v!i)zCN}^aQczKeRce9-`Gz;Uly|}zzb7YsBNBi8#hsJS9j)A2P4bf$4#>^u z?r)#8`cIKcfo~xIdl|==;<9fUSy&#sCIIqw0ZpW!Yq+Ga5C&SG!6EBbSLeL}auo1i zDd3iObZ(lfRq*~;hL&D6yT}cGHZRxu0 z?Lzf_KmYuC$d2J&c5HUMP{7O1=WdM{)z+pzxp2*C0V_4Vv=jyU0aDYKk;a3A;SQno zPZXp><^Wm@kB`epOZPW;P)&D9IFIn=RPCE>X*!BtV`32GSQlg`9@3)6X~w80yxpH; zPfrK_z_%`$+2Ei$UG-iUbV#D5qZ1sFs+ctgv0d%xv1FFS^Ri(fl7qXssb<~KH}@62 zsX()(;Tt_SJjoSmq_vy#-l0_}RGNIk{(7m(>VvWC@jP|Z73+t`T9`g75s_9kKOrW? ziO{9qLy*zfQ^cgaq?#_jrLM7=ICtORHUhr6$?gxjIS%t- zq)8$Gw2-W63AJPNR13qpmx6Y9CcmWqmI5^%#EkKd-u4dRWfUNwg|_!r=p#TM@z3cJ zPU1L&k1kZe@CcNnqCn7%M`@1JdraI$eKR(4wAYIpKRlVZb5c-OkOiPdWU5G?CrHdm z+$UeY_*F1Kdx>=lF&($yjU0%6#?s)tE(XNYCC$xGM@B{z)YJfnOh`&Pu(3f2{s08` zN0^%mrKU!m7Coa~|6&#};}8_MT@e3l zH3}{3@Q19`bE{IuiWy$jumh7m%=}F?1TJj>Xax4M@~{F%j?m!7I~0-2iE{hP`sf+6 zEPkB35_8cDTa9$>=!Iaf0NqwHaK!62b3`-0J2<^jjziKeSCQ1$ ze|~wmgpi~V20$DKHP-xe^5B7c-Qb5-|7nm+zVYPfnD4JPOSewj__wc2S^TrIJ7F9e zS9t|Y_5?hB;w&#Oe_dZsc>CeY5YR{)G?>BJ3N>Aw-CJN+QoOyt)61r&u?Fse2+g-K zGQ4RSX-1$5S<>28)@-3s%a0>61)c5$I~iZ-kj1c+*F-0zU~8A8q(!G%rA1d~=uQTy zIe#^*i4`=gIvxIc7rGpe-6M7?=?#5S!h|8JCbR5Ky~@nU66()M@kcc0bkx~i=O_BZ z7b!~m#D&XoUyK|sk$k+7>LFR{M+#N3jKHd90w6&o@MztVn-Wt}!^MtZZF$R2(zhC# zUi;1^KQTieDYYZU#KdG|XGc;@R!~=$_wy41=5r0+Cngnk%zDFpa9IY?%8<1&EZt(d zf~@!5yL)ul$2Xg4;6Q*=OyqKmRjhvB~s9;{4e`UJ-#_(0cbEcIytv23iV9s%KgZa zyN`X06T@_6uF+;}(n1(Ae!j|?c(U(d@d|J=Lqo&GWG_EP7^2e&!z7@41Q4 z(9vB1f_+47R#sL(r4Kp)`ZxRE0S9jv&;v%z!NFnek0A?bO}28uif8`eqbMYM)WyN! zXkMi72V9OaRMhp{b|^E2#45xSvZKtR%4*7JNxj-V_btnyXBfsNt+W%XonO|Aao3Aj zZL2>RZo8|9XU`Taqvhve;t^0<%*Df*Pphy3Mo~b%bG@7d%0hPgIwPAVhKEw1a5zKy*ruxX(d&z6{{+qDR z(PzF^*fCm6U60QJylt$}oHu`APbb`KBMfv4IN-Jp-Mp@VXqLJBFCA@Ljd=O_OWNCs zsFP5DtqG!}8Sqq5djO*c?lp|>dUihVt&2)(Lfaw3wgQeCJIHp~^mxzC_G6fp*z=82 z4d4FO8SB}?tYx!KnIG+Mqde)YYPP}3?IRize58J0i7Cb7gkOmxJp7s)i)uR;joU=j znA-yszs$_^9m*DK)|B&RPvFjT61q6rXsJ&z`P@P#G#` zAJ{D4(jb}J@F7Pt6e%x#Uc}nTYfYYMzzX2GyQZ-*X00B2{vNQt1c8y$Y7`#@2M1$W zDCde`N3E(f^6bMk7ePGPDnDhiB|XD4wgQf^T$4;qsHNx5Kw4h?!$=<|X}?oikE2eo?-g;|Vu=e=ejDTJqY zz%RBfbvOP9g~S}zrZJ&xV~lfwJ==)mOucm+^HzlF*aBFuXs-5rAP;o;`FU@xw%FFs zt48!?`zz+LDYa?^RV{oBTQnnKzjsERH}l=n#NBEo{Dg7V)oE6O`OQyJAVpk6RZYuW z9qLI{{qj@-Yt<1I#oS~y#q8j4`nR&lUxA?YrJT)oqHN%}BByJn8HgX%-m@qr_YJhmD%DfA`1pD&TqE0POi| z1wtOKkN0f0pa39)ll^&Zb!0!wsxO6*tn{^}4D|#ntNzu2=|Y@8^h{QL;B-0ELBt*- zAL&{`k-BgsTN$!uQR0JyvDA>98tXR@^u!m>|L;;ol$ZE01?Z z$43d>{lZduM+2v~W{_3aTyVHF%9M1c{i|z@wgo7O~eega@)8mc+!IjVC z-y?725Awj@4_Er5q7)?t=%a@v)Zb3$S2AuATSTTr4e`;nj5scJoP^r+8MQDOJk|af z^_iq=nNPjy(~d>E_JmHZJS<4BI&S|~K|z5MR%mpQcPdu=6ABDN`xNkR=U>?0(v?0k z>zu6jD*u)+pV#J~gq_Xbr<@!K8kq`{FE(+i^jmy-bzx08bi;&>hp&lPtSSRvnm}?A zzbQ6CFY`Eoo0R+-o1Ip+*&WR+6W)|*^-o_$;@Z++t;P@sKVJm zY*S4wXLtjOk}K#>`Ttegq#_s=R)0@OPjzQJKmNVfnUH($XtxtPw)#sOD9A{wZymep zZ077ggms#Dx7g#AP{ls9K0FY>vbfyDS1%K8pzvFqW18_RT<%kmsnyest(WDy&+by` zhZ_VvuygH2+&6T#%FziXa??`E$M*!|b?66ek`W=vQpRVRXY4h4EG08UH-s$pi#f6O zK&Z5k!y3_iBwDNL)E&4rkCigtv6r>}-IV}7BKUMBIGlk-qE}!`KcR<cvevlIb02m+-&Gps&V-8TsD` z!$A_xO_?jg$Veq2Edo79(*^6NLLoKf{6vGQQk2NxV@Adnxt&z1Qt+rdrKLuQ*o(DU z&b}w8WU_CHD+rsm{p~a4*G+zRcLzG$K{r@~Q7s@5080iwWC;M(K`U)Yhk<})M{!9B zg7M|}C}_1Do}47;3Bs{(alu(#g;o=l%7FP7w*R$um5!3id+cP&VdMgT=hjSWGH7(vcI!8a%EO1IkYi;ch zWw0L43?7hKzZZ=#H{;I2p`h@wy#l!J=JpoY2LS*6nc3NQx&i1dC2^1q>h#*037BU< zO+{rs*D3-&hzAtRcgpdet)Y2x<}4x|9Idvpl8 z@&nW*AR+<-`vaYc<7(5DI7_ENYipcbC>V(_Y`JOtad~AWW>D_swRy@&*!cK(5U=1n zq@UckWZJ^N{X`EA9M>P)qlZdW)htinVZVIz-@Y|j_&2r?jY2K$L%sQK+VMU?fUz0GdV~}2@T9e z0u9H2NClo(pd1u26=FaDm?p50z$!wCw0)Fc+h)tj%7&|BPCC8-=0do@vK$o^6}&&d zh6)hW!D;2C97;RXQ~BB!q;g{7Lj|}lbh8BkQ$K6@nAFRIVD&iH z#Lmuc5~?UI#h?L{w}?s($RMr+ct8g?xpj_rA{fE)wP6c*Ze>-@&d!42FEL-ZRkTlK z=<}C}pFe-s)WltX3B_*}f`lJ5nqOXC77q7uMLvK2+ybO%pcslEs|m;q;&LlUK!Fkm zVAYnkHle)jwYsI58TeW~mRK{B)BBi&pB-3GPnP+$^`>1c8HT`u8Rz}&+3g!4LaHVW z_-|+%9Vnt9zhI87A7}*nTrggNF7m?4>9o}{(Btj^jG5o@XE`}J{V%tRkgxS!K4zbN z8iHzf;Z-A5)SJqrEtd!lf@l>X>v=sx34-FC(75r041-#3kkOIoxG+2WWJRc9l@4&_ zfCugmZ~1Z_GZX+rK^5$n*FkW2C@st`TMmLg&BpGtl0v!2tJCqwj_F ztm*yr-Lqic67pqsgZlxA=nu8KgM*pZ&uFg8)2K7OHW7$ z4zPxb9bILBo3Q1&G_# zi|)Wf4q>L4Fam5mOkxs}JFH^+*5!KC@#$k=Zc$QMIqbk0tUybw%Zt~~Y3t}n`XUkn zLk)mfpuZ}d@5PJava&BFgP&b<vy=%v>a#AU8wzorxakWPxNT=z+$7YO`06O%;m zJI4M(x+(e<%A*ueqF zAMz%xfL&*!LG1RnB`qzY-a%ry-J{K(nHdc5)^AlgL6!@`Ah~p~F&Gj6rsnltbjd>r z)3%8HoRS<3zYY(>rvC<_27x~Z1!Pc=t(>F0-}I;z|-JY$Y+To)kTSdDZ)u97L;r&^x>mju$+f?ddZnD<^Sob{q=&N%)bB z$J09t_;e4CL1P!TXlE^}y5$Vb7_yrENOTeAa<)u$P5;<_D66VInY#FSd@N^Y$E1)9 zD#jJy?Es}VuE3k$nmI?Lh}mgr;ebt>o1c$6P5C(W_1CXonkFX4-VG<<#33ey!G!YI z%~GS{`3kw*Br7>7Rk`p0eskcjem*#pYoS1 z_rFp&8KdF*In4|g_IkIS76x!)r390fQ{y`yed5!odVDVPr%MutP8KZDob6bYKHX+wb0As2~PE1`SCcwD3M( zr~kQ$HZL7sbo-#?c^1?nue^yc*8uVO=Ee_{9vWClr}K=ia>tp1eB z2!JS<_W}lX{Su1l>FF`g*5kxg06zrA@Umc7+UVHW^uj^}7(-{vORS@>FYNAtnhnY7 zWL5U`>`g(n%37s&LB)}CBlju>`Fk}O%_mX(1~m!qe9TP-g%&S4dI_~|ZEbOZ+#b{zsKv!8zzGP1I<~yUpcEyvdPS5T zC`(|-N&wcmU?9P4xhjI{EO0U)BO?=V-yN@1EUBnK28StFLV%YKmnxC~z@){94Y+;W zC5Joouz~|@oMDR?lP*aC+}H-jyZL<&a(8`9EG#LgWEvPSxR4^JTYs_09hNhpFi8+RrDVx8 z=ny0U7P&+Jt}lQT3lm^!K!%%JZYoCbH-V{Xp4k95oF}HFY+(0|R9qPZ53sHD*E?I@Jru%nr-p=wALV2=%Os`^2JP<^%XD3GCvCX`&oe+OHF}Zo zeT4|qY1zXe9IkgBW`Z63Q3RIL|9yKA?v<1C2YDPwt|Y0xwl-X;?EfkoAw5dq6aWha zOxpu-&ZFX*X^wlM79XIKVFJG20A+1n$pw1{yYv_1WyhW3m{o~@!kQf?_z)w zUpIcU7=7jq>if2H%go@6`KJtT9!n9#=w9K380}bU%p6|NuWMK>_Z`Yb3b9B z=(`lIY#aT)P(s1tjJ$?)-MZ-jTg?4o*}k)1yu1O#=$ylHx*-*40h~jCfwx%uSsGx`)% zkesMhyr=0H(r)T<8S%*U1uoxmiE`ka0_RtfT39h-YI?e#$AXZS*K+~_Br9TjC#P_b zAz54RqP%MYxi65}fxJCci4OE|Ns}86xRQb_J0c_mg0E-!Llp5j>M6q`sC2E35eFs4 zT%Z~RvloF`GjXd$_Lcz13xpTX0eS%^%S{>sj@(axbpBK`JZLiG4Na6QytZ#~AY&bJ zsLB14Y2Q$NaFX!vz4$`G1310eBPJS2PZBs^O)?>zqB!~%nt;vtMbv^8gDl8_e-$!1 z)71zZ>i&^GVkza|;LtmN_82yIdC=ae0Pm5?l@0FRpuKDJ>V7ia-H-`JVFH1fjG>{S z5&%0KaU}?1zSKVzO0)>bnge(fBtwL!@4eK4UIe7ik8h+T&SR3RrIl=o_Y8%m>*Myq zA6F2vs|sa*?DNXv%V9%`E<#uWW4|zlC<0I0cB3x8AC(tP!Cn!fn19UufYHkV_KoWV zA<7mBETc2KPfnGv4k4W8ehqkAlQjdm3R?JU6~1n1rl$>peaJ{iAmP~Ta9eHE>t9DZ zae36jf|7-Ky}xJ@70%#a^WAZhfsFf~(Nae2%!N!Hk@Qi};aSIves?)A>PRrcf!Ow! z;O)We6{gzny>76C>>B3Ff1;d=_<HPD4lG*-m#&o9I_qvXX=s5Wze zB~A!2F9hh6RsSzeZLfJ-bf}X?@+Rd%LNaYOU(pUE5ya@$lE8u_nF(|ZXPFF0n86V;s9OGEL>y)v;>|)Fr1%x$M8uTtMV#dX zZh<-ugi2*@nGw^Ai|>HGB4p3k(%SkpaMKoB#C$yc7Z-)c5CN5d4sz4}c+|3S7%zrj zG7b{Wb_xNdgv0=_-Os(A1cZmiBL+^YDmk!FQ^WGf9|Bxcgq0B1I~BMWk3@D*P~_*N zH3k+IbRKKSNA3OXpGDKHU-h5J8v_SpiNMXnk2O^S`!1z&exDR3iT~bo85|IUK)wwU zjeaFU#8806rRh`5!BZ2*(X(`ZeVQfJ+m;Y@8C3tfrbNU}Zk&XMqF-@FK_n zyGG=l*mZWQz&&c%DJlCjs-bxpjz+7ZsS7?f;Qvgl+FDuw9s$`f(qm2#bV3z2j|P5| z+C_%!NeAV`YJ%&u>~px@2Iidjny<&)=xAt`v2}CW6cy%+s&7K;NlHqB1LC-tFClxo{x1fEdZBI9gfp3Z*?gVhyaq%tWkX#r5@5Oj9}I zKvJ!vr$-HB?*JZv1qW*B!^6W8R#rQleJ&YH5?>#8EDj~$A0G>#0Plf(5)2xMfMn|a zhZm8MkThPti~(!_65FHJ9b5*$Ftxb8obl39S|BcnQ`!{>f#J0Ju7edD1cNhqWLk_~R z4ey*cjFMt^Y{bdQ`CUIV8u^l;;2TN~@>5UQM#Pj<5MAUXDrPsqoIzlNie%=Frmv?L zv10^orLwXTU?9GZjt&5Zp&&rQ0S`k-`V>J2eV~a1DS8or(*!Y3@MS@~%%aiCd8cgs z@pF!<^?sjh(_f19q}ug!=UVI8S*P)RVlJZR4De)R(yjk}$b?9McFhy^7Mk_9v9dCs zE|#5?b={Nzm1h8-bLY<zOXp%u`>}pCAz3 z@bCxeZ!lbX;uvb8rHqsAf19QEQI-xa4HO=5j~?ia9{V$ix9lR|#?2RM3@2|^0Qn7c z)ENCi<#xk6Zj5Q8h4y~$q<4LSmDG}1C~j(By}h#sXZ`Hapt_iKFXwA1_Jm9pNb^I)fC$(LmJ>$73(mT4P^s>bpXaUFBhpoSC=hvhhrBpbJI zD_+gS5Z`s45c_zNqxxp8^wZmnuZ(hWKhd{)It4$j!j2g;ULlRylBHg#r%O9f_&b_qJQ!b zB5QMAKaNdh2I|VkK8algrVvVy0ieP-vs6T2q`xfA`cQcU$ORZu235erBFg$uW*j5wW8!bsoHj z-_KF2bclW8kO-~bvYX=kZ^swuFuUGg?}fH;5DWWXLaZR$AewRL(sc;VdXjEA{kMQ9 zADyXo)w*}tDFS!p!6t$bETBxojUyvv4esvGIpYQ}rlhaY1^;-(@0vMcwvIn4qh+_9 z`iVXt<)!)GR$&3>tjn73p5Wc{cwVX^iRK9Dc~}fDQSi%9(r;uRJtHO*jrn?u4g14o zA?upp$+4#lqBlN%2b~nOO6hDi0-?b>szpqEEdQ;QfXAS!oX#q#shPBX;QiUm^g~?0 zZmDKs?932rk>egh@BN#>>Tx!k+Q0i=2yMA!CT{byUfx+;Xj0seq~CHUg^J?a>sAlH z8KPKj#)rjKIZ&-bkRq;~w;W{#So|%5f6+g0(?cnKuYX(;`dt8pNTaH}T zf-uwn@E08^lc>nZcaL$5xbPwDipU1a&=4sV35!kF(u^qz&@iY4k}Oa0%Q~ zQ$=TQx}Q9}Z#DB~h|(bneoJ$Lk<(q1c*)FT-FuOHKdX+Bt*Y+L#gOpS@>N%4WCF5O zCi5eR1O1yBGWz2t4xtrDTTHqnW)xmd6{)N!-SB#>mfg4ao<*p z9ou2S$eipk08&Tfl*dpN1$9Hl827$HA9Y9{M4Ue7vm@b+(lg|8mtf{DjoaSeUoEVS zaoEj$I&VV7prQZqLjh;=Py7EtNGff$4TfiUiHHr&d7oJ-Sic$ts3*1(kk{unnb~x* zH6N-o(+;OTHBTc_RSMs{nDPh|?`o32`}B#+ojEO6gOSq&z<@AFaTIvP{#VFC14X?O z)gu)gL~vMw*at?l9)We&M#CUkmPT5QQq3}^{DAB9+sc;>7i{#_@ONSG$E*}t%ObD1X)wpC z-kY~_42K~?sC@>vuch!J009Gd7eHfVTAhht$H^gpqAI8%KK9Tlm1z-Hm28U^2)fg6 zpR|JtElBP2G)|T@5$Mu2vec-Y8!=86U%G(B$M1yEV`mXS4)yak4tYM?OeMliE3R1C z)-qN<0RJlY$qp&CfXOxt=n>@}VFC2?sk~_a4_|WoR^tE56P%pb%GC?l6Xo!`_5j-f zYdfq03?cxJ7JgIUM11@$LP7~p;Q+K)*cGXH=@`m);g>&ZJ{j{56fO4l_ns!sBF^j} zDy4)}epFz6PKI)K~kSlNDVZQpNy$38GcRwkQJ~9TgK3D(DWeb#jsgckzgky7m|) z-oi)yLv)=R!w{7|r5wP6hdF$|oKM_sx0y%}y`2a%AXTTQmy?Z8&ZNaiQwj$!0&ANa zD}pG|y|=fwdtWye0@MW(h2gQWr`CmAu|-8xd;XK-;~2nMk%piDIRIp!Cj8i`^2q9? zrsB^|O=#ZCJCTV&(6*s3()9x zsz`ue@X`G|I0%`x4FlAOm)DD?rY0yP*XLsEVEE+lP)1w(DaZ({!KA}C zH&3WClrc_vCeG+-P@;4Q-g}Tg&E^Chv4CYLnzrrY&o0j+6E;4zwh_m|NoA09h`F< z9A)plp0(zhbN*t^&xh~V@en654Q1X}x`q+Eb`4s%@;pe)2cUVwO838QiH3FwpaD?F z?}d1iwL<#-AuH<~)SX&dS};&5sEGjQJpkcwQbdx-;6dnYrnx+QDsA^VVt?{K2H)Ww z9V)SLaqYcj*OU7sp8gIQ*!qOUh)+#REs5KH&0ar)!pVsVTU;MZ4U2J>r2*=JV(K#ZFd17@&+unBRHcwV}!geWgEt z{%qL(AR&lQNVYP-DxM)AF@|?s?i|@)(AEdGBhU-LHm~3DTg9{oM<`TzB(yJWc*ueo zJ{1=WEfYp#q`1`6i;F2i&OC_Nh~Z-J57I(ILoL>10HDsu&hE(hBK8At3Kg=ZP+Ebf z4uWWO+v&+s@cG|sizs%BSVimWr#Lz)0Z5lS-cW@ z6B84hqze#fFcl#34B1)`8{ES#TtTCm7Brql0n~g}JlFfEY+w&x^n*xppQ)BnMDx#k zMi)uW@n5+j{Cv$g@{}HMcfGu!;bDK+4t{9!Xd#Ig&RhC#-D>+~P1Y5BH_|dT0pm=* z+dgrciDYuYj`83MpPHKT6$?p8Vaf#LgLsvfUOY%aC_vV%VUqNA3frbk%6to3{)`xb`g=# z0@&AG=B3oYMRArIlKEHzS1h~`$XT%@EZX^YAw&mQGV)n>!^f>flCX3IxB%MPlq{{S zJCD=rhnjvWSymX9AZI=~4BbDMR+pF_Nc6izL51E4fdHCo&LB$$01k^=!L0yIgS#KU zCROrMhA44h1Cxx543K{U!I%Hz#nG={u~^<_V6idGQOqORvuBUoM%VE0k3uBB8e zz~O-igfq_M717U6{Yst^A9^d$k^|yas`?)wD1cTEy%R!@Z8AXMPg$3Q+#I{ta~S~+ zg=+8++U92ujJ`z zh=Agx{Q~4sS0T2lj(3BPgNxfUc#BZ(rz{d>QeA>pu#?K1#M4(bjn*G^U&9uG%QPL% zZ2?kH(C@-SV+#U1=-;FRU74xVZ?2juS_Qfzs8-fly}imZkEK5G=icfdMqJ{!77w<_`<=B#d)olv=q;Q=G+2O=R(gGKg~o4gKiL zmp3Oc%rFf3DRxvRGB`0o3X^}HKjUUA1>Vk|r6nLzCrY_}nx>d6;k$h`0ox3M#|Zfc zJHuc)0}QYC)kg=xOcRJv{QUf=@xP~Q0WgDO=I=hB1VAGK*eIyoycw$YdQ(6)enIOG z$br~|2SgXZ+;jTX_R3c;;7AbwQA5PY2$;=){sh8dg-ZF(g+ORQ9hz{$6Jdwpj!lwVmC&N5x%f|9N6G+=-DMD8MqN{Zn)KO%t#Zow6%kP{^RDhTO5UX zNOk*BnMdLPFkf11_v{@U$ZeFX#UTrrgU}5)D;9~{1I!wD7zf;;Amm}X@vQeFrsmMn z_@?#zQ%MMpDcVjIhUX*Z%tibirG+qQuQ?S}(6o_uv&O&-v=m_wW9$p5ev04>?WTcG zM4S0$uAU*BV8yEmw_or7W$A+0;S459*lP$r2n<$eEw$>wCOH7;F-f~SwH;DBM%X_V!Qqhm#9^)wON)_{xEHDveFkr!5Ue$P+-diQnlA8RWKpE!%k1 z*v^hC94e^{uy1?|xKk=kl#V8sCMuEmR8%t2S+VKEGf$-3kA{zF@leB_jqRz^ZxKd~ zyVYNI(t5hPoi=8gsRH08frvem@3=<(I$g!`_q+!S4DiB<4#bPFDbLR4f%_LL-eQ?f zZ8mG#oa<~B`j3kQ0Ar=ruzBHJ2;~!m++Z4V1tyk)7T4WRDhhW$i*oaO0`?JTEH9(=yjsKvg==V(slV^P|dZ8q~&$sm^UF2y51sxE4m!{s0i zRK$7NjDqB{ev$23_&HKqiESV(@>@Gx1MU%my=<(kl({mcf%hP$#VI4>t(n()!cNIS zx%?0gI^0$LlcE{nu}|}HX^A*%r(NKZfa9gYe0g3iL56{*4+6Z>{2|Tlivs7ASi4^B zuuGJaA?J*xKL9fm?mI|CWkny7grK2mnrayIIB0aJe$lKuKwIp%>dR~7#WQ;6b!|>r z$4V0B9zp<*ws~zJq=VKMf)q&iCR054&BKF%R77H1Jyq755d>L2#Ad*l zhD;s|2%wAY|BQ;$5JIiW?b{S~c6P8qe(yJ&CnKAI00n;nD#jS?I-8-V2kGBQXe=)I z{@hd+eJN-}uVy>*T9ImtTIEg4g95V8h)w0MsqfUiw|2Fz>X9EE^8O*BX#>nj9&+Al?VRlzGhRqgU~yx9q%r5gP3bJv>?V~uGWmN| zCMPH7b~pXevcfZb1FjI_6bsh!eYcW9gMXNp_PeMXEv~<#FeNb^Kg+liSN+76gCx8r zn%(Uq+0_zWSqxq;YtrEDJGdUGSQg|`>EW@~h56fOcxA7K649#Ma}){jS@-w zD=wR1af4&eH2llMo7`bn3aice2e#YxRwt4Hi~K5?!1JWNp}bryGb;-lxGx zZDBkNh|EcNa_O-uH^`HQMn+yjA!dEqwDW}?oS>bln2Wcn44y*ImbE{cL*0Dh^C#cV z^}S>yC|ae|HIspdH?7V0mD`(+hYe93ehwYhFGPMfpKsZ`+KsoKeIBRjcqcm3%~>{F zfhM??-AKSCHLkNnmbUXyAEh_QbtkttIyjc#bi{^Pfi_x5S-`YjV(~*Ti(w@sRCAGX zrw3_JY~^-Gso##rQEqBefr;Dlr=~)pfi1}J6UMq5_IUp!lVXAF#-?sJa{aSI*{Yme zu!`+)SMye>BGo5C{Tzxmb;dHT#MHf$_cE4y4J2pvDNVtt>@<Uho<#>Mp49Q+CmP4n9Na^i@9 zyW@RF$0AwA!#6X1RBUGcFN3XBtHhm5BLuWKoR2hx)#%POx8NW$wjHykv=JjB^Haf~ zT`GSVT$9mvV}e1tejs2OXFWhCO8zkH{oA-(v(d_Tk24j+T$3F8RJ2v&(JD5sl9I1r zv{f%R2np-ve>^Tqg=CX;^D90s2En4)Ixm8|32}O z-s)QW+xxfI`jOngKjU?T!o>PTdgc9#IxnZjA7LDJWFLMj9l9h>`k|cnJnBHmgwPb_ zb%E@gcJv2R!I{(x0uH0wM9(n7Lt6M*Z-awV+Ql5H{OcrrEMfzimx(T4<(D+(7iUv# z&&be^!S$6{GCT->^Zfg~UN7z|9CISnY0SsR+aBt8ktz+oI@BF32qO9y(kdQ7lUlLA z;J$q10qSYG?X4|46<6X`=|Km+epLnM+$W9wH=SikwuLFOR;0h*#3vLUQDN*PJuhKu zW5Y=rnAmI?*`F8w%e!6w;?;HuYg!~M`sP)Fsn1Vh+v!zlkwl(OJa%enX71LlJL*+d zn3M8Gr+j)r?F7zRB$OX5K=@Z}H2uqKCL*!%zj7$CJpZ@dxO8fnO+*fGZ+|dO%itex}Sh~+ts8`uLxX#F{l2}KC>sx+{Jb2r!>*M^LBEn~VE`O>m z3+Oh!SqYFVdj!;kQvPZC)g>S^)i7MSABz-tB@}h;pCbq{Fk8KF`E&p1oXUBMn#ATg zs^P1hYLlPlW_he<&{kokU4sUU3w;eA`r{clycJxIw6z5YDYd=`%fO9oi1OL03>svbqoug?QbC%IKgk`&C3^P^HBJi2-d}W(a z2`8t(*QkwcAH7Aso@v95a*7eoMMg>NErt7&0uvPdNv)WcT{~`X>q?VJ8;W_e_K7M-xvIxwg|RT8+vnqYMV)1I&pZ(Yg(^HUV-u6ry^l0PxZp!eD zme$tG@t?!TBsn;6Vagt}$e739@sf~`5PFd@$?*y+mDIdnC7b>PV|j?=q>Q$Ista?m zOCjDGBd>zWwO}o|$A(?FC`Dss=I)lsCgxw=ziMofvPus8%!p|t6ZC5*v-QUHWa9FF zZ`fv+h;3|eUCvG-SZH?-6&eaxR+Jyxe_a+^g0G&xBu~3w_mS}CTa61+EcP8w$S$U& zq*w|z9&b%TjUrR)xx0)^O#b}I9OO;h8rIk-H~)zf^{Hj0bD89!PUu>>Z;7A#(M18% zRQBL$K8tLF$tH`=ivs1VzgIR_+q^`2(%&;1BzmxoClV)XFy2=FLiscNO~e@QIv&MPEoStbOiBCHMG` zdAGL-L@O4S@uudh$o*@=*>A#XaO#T~{}R#!VWObJ>2-XtsVe*LcgzvgzlU68xbVV3 z!jY|d}@`sw~qSWo+JokE}XU4l^D8%3H7D{UM@x}$LqJ1LS^5JB2dWeT}tr>|dPcv(IE z%_mszdm=kA93iuzu;v|~8&dgmwzHUi^f1nw6Rf0LZP<>^^ocaRA*SZzB4c^Wx3o8M zdUj5uiPSgdf`GYx(#Ij9gU6)=yHYs!q?O&#_3OL>wW4?YX#xrO+L+fpY@zklVtR;up%@n4>(ulwhl%nqTLG>md&);`XTclu-PAu_0 z+6zq(e0Y@`Ly13B@TTLP#eB71`>faH;3p&Wq&OXgNEv$}N83@zk8%Std{Vr2CrZ4L zdgZ9Sxv{!uH}TiDW;sLQ&|MaPGVZhtg`W5&Mn+fflH1e-3Sn$KFG6a`j)dvQskc)8 zqyQ`u1eZnHzh9w(!!U2}P^_QYgxjC~5j2mbB@?FwiCT_^jz|NWrGu_e5V+>$!rZx_ zKEzF&o^0~7_t9__3>D^)kumwsI<3&c21|llWBi#}zEmaSUsVHhG8+*%;3@UPjI@C? z31^NXxyH}{AYl&Gpr=q9Xq5KV1aTX&w}Pwll(atY?#9e&o{ud|=1bRi^XQhUH37ydHo`hVWhBLjpBC1DmPK80Vb zmNBGDwo?Meb`C;|>pbwogomBZQJ$L#cIe_DZ(>I+jPoj^*1p<^DdX{>sRp)Nzzk_* z8m#d`L0}+IoYTgI{X52+I8OLY5~wP?>Tl{Q%vOdEFowDqeuGJ-Esb<{lF?D*V-pAQ}OO!9a`)ss_kPvJLr4`F~d;Q`B&Rzz$rbw zgd#At31kzF`)$SuVLij*(C9LPdVj5foS>Kj=^NF0WDs^P%91;VhyKM)?vabU@G*w) zutPcq8;|D&2VnZk$7ZuZLDgIA zPIYpTZc8^yq4pn(y=7f`9fLhvIE`l~>o?)XtN(@$#U=@?j`f==9r7%#ap*HH(=@|jBws2S&Q6_=<&32f+ODTa*@ z1!v@~6=odz=!L)%N6y>a+_2ZB839Lh(#|H@#R?!*7S zdUV(p2)7LZTUd{P4)!#1O-$?LqM;{l=&d^;W3Bl)dUS?j%XXO!l1z}=s0pd zPp{zCh0ylljg1XkKrADTH0Ej+(@3Y_2phgqGLLQ#I)ABfcUM^Y!Y`tlkY<0B@+Di% z-B`>bbH)duFTb8!^Kag>eb*QE9JfgorHzw#V|=V-WaOTMPk~-u1#&p@PJ4X2;U;GT zv3Y!`Z2$D<9YpE+! zwScWliWl}WZ|q%>Vr;MuZN?$oGAvaIk2e>R9Um?29tr}is(P~Oi1hFY3XXk;7i(b) zp;9q0NV%E}JELry*H<>lpbJs1YIgJAw@ z{n?`2nPf#yC&zz-d7WG17iF@kIt#Jv@OXpxB@Z0Il!BIzZ_)-NJm;HH*?0!^1irx~ zR|<%lRtmB(p+ZbdOh1UMvD@vo+{upDM_q*fWUEJTK>B#2RSu^Kl(=;LsW-&I{x@jR z12fkVJ}n_Bsh;MskQ4|*+P8qHY3jbwOn6%cYyz8$V16!ji9Xur*DGGxqjluW=;=(8 zUjR^pgZVFzc!17iIpW6J!EGQ;J=28xt>l*mycP)$oE8#m2+a;Q?LdPykEU1*6rJvLEvSLPgjA z_S$0vSR1M>5c@fe>Gg))ud}hSWeQqi@`MaEG6XG$(uDFYF>B_esCSjT;ZsBw;O*(M z4*OdlT2rXp!a_vv-_g;T3z(SDz=p5vEvH98^|1^f8FSwXEgjvJ#>3^j*qk&^yU)W=dLYeZ!f6^Cd$0)?gz3eAN0CyJlHsMM33C#sUwGf8I116DZ|?wOSpg}q!a;$Q z{+?k^%Z^O{BZGX?1}Pmb;QlF4f&|e4y95PFyrGei&nx1Uv5#~q=iTXXlOLX3(pa*z z#}@v|2{y=Qen=L=wA_GutWiY2^ZhLT@t*5BZQA`jG>euY%W=&=(UBF^qg#xyXY3B4 zMftq(-$HV5Uk?H=Wz+0`E)AQNS3pmKY1Si6G_GX>vKXHvn3Mk4RGgDD15^|aWAGVC z1Q^76N&yC_xFqgy{C3eJ)IJlSsE@jOCr8s~vbNr2K)=5)EG*m)VePH;)tVG3x8+-~ z*APgY(63&=j&6Z$bAzP}4Q>Vwdw-GdXFuwmJ2sOF);kT=o36Ye#NHGb^(zL){I(t& z)&*n20!Q~Bs>AHr3ZIp41qL7}zFV~0ghzpo)0FehN2=3UCKDbnJXL2=A)&#E`Y9Me z6ACI^Mo2JI^EH?oPj`zbKEtOq5UQ-BKbJT32WEO4e20|lX@27w0#?Yq9{WF^FD6gG z%-XkK!GH9`2Xg;Sn9y#4^ByQ7&tOBT;^N_X7kobQbZ{tSL_t=b(${ltg@X#-EK&OU zWi%Qs-k2uy;+dM4SN%#V7%pEzfeT6FMhoe*q?FWasBu#J7`Bhr8xa~56EkyPj0C%! zT;l;8+QuTUKOcgR4dN?)j|Ee(egdp_n+sN+4O33w_d5?8Tz~`cM#o#)+NL#L z|F&+Rgv1>ttHEHs!Wy346hINBjo{a2D&FXGyxG~>R|M|Qqu2{ANG3bz?-=IE`00aR zbdrrvaxQFXpw1KtWwJfH;W?OjAX^k_{hU5;q>11XRX_Z1#0l0 zfYv)5aFIlt0h(@pO0KSMfGUQ|kyy`s2HV0bLs2p_uR7je9>n$4<*y)1*Z{Tt#`gAh zZ-4()cW}De(@GMtVnv~iDto2kX@MnBk-eJ*P*kFwse_3Xq5`?DdE2dwMoS!&QI&(1 zXq99!x(5iK#F61ctq$K%Swy|T;vd=du*s*W96ylx;#w3CAtM%n>(WSpvP4M?yZ9}556xp0ro zcDhdeI6YUWM@}49q8D|sE0-B3cKY*OsnGVYh9EQCb)FG()v#{8#l^*u1%%D^Q}zG6 z?%j(qq{RPFQc|)6Sa5>BzrU=0mBY^mx3WqNk)p9n4t1;7#Zme|^&WuUyZAN6@Nb4< zF#WynVuR_xrnDd^YYHc^kA_!sq6+1&q7mg zl4zrp%Yx=x?VK{QoslKiAkh36!P6e!{%-y5VwEf}W3_ni2fr7bFVn~;S16t!%++J8 z<>JGaig!}%1m4i@Jj>j73c?Xe*Vd;DpmO_+ui&cbIHwXWhPiX8gNVIhO_jk{ODMu& zmw_YLgkUbEw@681;2W;IxA#euECpO{0wxqkk`&-)nlJATLkFaE4aJ4a#=uw zn=F0$-KU_|k`a$VkDXnQom@Xtuw(#C7`&>9h>87xCleckr30v|6Js3%hHOBAjK$6q zdS;iGN#x|@;0|}wv-wYbv_l7w*jS+n-oSS5$B%x-$kk40O4T+run`H-hcy_qn+xZ+ zrah+v{uo5q_x1JlKj%j5Du5YK?Y2T&-_StC$VdVkhaW>3a7}uE;>UBNz$5k`DydZR zyC2Kj-PY8398LJEpU#t@*rcQw!7t;w{X+wTS9uSL3^QpcDN*otV3WdK3WXNvu)%*Z z_C0(S0Mr4-Rn*nJAT1*UnW^w^D$l#>@;kgho*FB92ox!Q$dn*-3EO?;bAR!Ilb@di z(g$Q@?e3FUNe0Lq(&GRN1{MEv$7Hj62rn|awB;caESu}Q&KQ6ttmT`2n<8m!Xk%VlAxqvX*zVJo?v@rZvlFOp}{c!>O zY91S_>d83+ycpV`3Y7R^459?Hv$G~XIfyR5vZW;#L>4&KQStFX2M6vz8=KG=bTuj; zfD_4ifkc_Mr}VLYe7Mj_fezmV1Jy{D@b?!=AL_?5$I6)>IIVmWFmCX?2-0^dDyqb5 zk7>;WA&8W}^-n(sD@@qw z3{i6>9-U82K@t4!9jin{D-m@o)R>; z5M~Yz4?*ozk*gwd&)9gf-~=K$q-Rx>%8w-?Zh|T=m>N_(H}BtvzA_X1m2Vl_5Cef) zh4<+b@~Kwf2DQq*+Mii#d<8OR2o5vr>l7}T&MuCeqQLWmOaua&Nf6zv1UaCfsogDx zy37SehK3}ljjb*J`}nR9ZrFeTBPl7sGyV8^jT%>J`NPD0)s{ba^g&d+zeOR2(gA6K zfq_B5b6QzR$*ea~7!XpBw^sX{AX3n-(9zZXS}2r1fv$y{HQfXQ^jBPzmzN>A_m_bI zSQvqTZ{MFjd^o4y4t(6?5r4)8!bBQgZ8R1BtRSjmSKfTypY2#cSlGF0cMCAvJ3$z7 zBLAqQ#Kh{9yGd+^5dg}AAk1*;g@;EobQ?2N!WCgLfIiB91-a5(ipFkhu&kn;AoU+C z7!Is3`|-F_D8bS&@_k<<5&CSjB-_~tvJd|opi+C|)IPUbk4okv% zrQ`jjf6L;Tx4mv6tjB#@(y`y-ElkH(iFTMoEd>?9D+*2`<)urckYTVtKR%N<)k(Ix zJ%Hqot&odhOPXY>D-R0)?$&w-Hk%>xHa2{PrVS*i+Jq5vQPI(Ua7< z)YUtBdIM^NhGJh zDkLAm;$!Cl*OafQi$sot=b`vCm&* z`QxwJt(V4c@FQ^~5YOQucR>1(egs)rjWIdUaNXVAnT3#p!OQVh-$B!- zWm@ZMI}UA#{cTX*UtO4=A06*G&xsKEzsArf%ymZA^}dsP*uL$>(o;G&VU)1=PZ}lR zb6gz?G$A%3{=+ZV-|@xTi1^h({Ev&` z(M%jH_)`j9hLsTu;O~Tlg(+eG=jZBTG(m9p_`gf7us9ucV@~$G0)# z8z+sr-OL{Nnm=P&0`~075KLE<}YRAdUq!gk-FnD3Yu);#Xie-3 z#@6p^4VgU*fa0J88ZSS)8(!>BU8128wc*SKflVcmzf+vmcjP-9{i4Kp@3g3>89O2R zY(}!6kI)Y&gn!=Q$=|&@dU$-~3*2spn}yhJT^1bn_62F(b#4JKClDal%!dU{A*7W>;%Bwc1; z2WB)Q2t+5W&l@(z(bE%ITU%>fO9FyvS(zx*yjW81<$KvXo}PM5Aebpb_Y~@vm~Z`R z54{P3NgoHuWG_Pn5_eng7f3Ybge)3ToB0@IOwS9cFFvx}yLQann z(ASvYZuqegNj8W+I?H_gzLUO}w2ql1$=tUieV+mXLP&V{Y7Fl+^FJ=?U)Vo3p#;yp zv|^{0xJ7WPpjb4<$;;bGz24o|cOLHVpX5hF@96?glC-+=Mf%Unez_S&$a`5zimv0T zg?eB>fcswr8f;&-=6hPN+y8)iX(Wd*pPWrtc=PCHFu4{mhwAj>y?rr>5-8_yD;v^h z)7jbCIi4c-AH!~7M+F}qB#NSXORHA+sMLk7aM8}5(geG9fOG(A@}CZD;^vlj^Db^E zyrq?5>B`5Mv?PlsaFb)C7DQb7Phdv#`N%kqqKy@QdB}aKxr^sl;cf1LZpJaQ}ozCjJC{X$lT_!fRzt( zWJ15)#$p-cg|GYhBNlpkdUe8sz*2`wxpwk2W+$7rw3y#*CT3^v#>a8*azp5VdLGOM zXRN{Gi1*n0s^yYny|9^y{yXDo5b6ri(FN6YtBR`d+^_3!?^lvh1yxMnh*BS6L zb)9I5xvxmNUj|ZJVZXy|`zM-*L)Sc{}tXF+hJ7-L$`}H4{Gn60Wn1Jfw zR8d-^>s&wROL8qT>9e_#$1`N%Wq&%QE3YCB@AzrbPg2nLoC4Cv00en4TMeqOrLczC9Q;c1x5+My{G{)}!3&cn$;g$aI@oDQ}bMTX$7w^({^awX0Q1~t&y zts2rp2)O4kUOfBNj8K5-i{H7r7UkKnwv8JzbHA=-4zz-}4H%#sJ3E=7x8!?p8p#tl z`c=u2a%)@%YX#{xVMIXOzd=W3ygd_tBU<|bVtUm)~ zYzNM?XRY^Y%ohtD%p)gsTlxnXXA4k>!Bij;=t|SYp-_`!pE~bp3q-d5^VBGEdcc4u zLy;mVYW4-6So*hS&X%NU?z%4Rqpt)wyd>v|oMH_TCFPbssF%%6s}og%-T-V_16mR1 zI`M-y!;*w6U_iyU?hG;msJPqO+jse|QVJj2ekFw`_pYs_zmz2OUW0=zqo1Ge$v}u8E#u)jdNtlfs zQfMPWq|d;RikN0`}0Q z1rtZzH#mkgMjmP=tC~%6}x`js` zkSU-_?c9&&(`ly{mW;|DlifM}p0~Q&kiWt>NZo;zQeAhLJeUJRl`Uvf`8lWqX6L6d z&*bp+>77d`W?p%F6v-v`uXgADYK_ebiZT~_mR?HSuT5v97CTrdD_L8jA{vpsZ{)znVie`EP8lkOhejU+c{nm7q_^77j&m6S1G}&f1=y9 z4h{~9za7x5lexl=8uK`Ar2YMRoaAA$U3p^I0xEzMnf_@lN_pltn{)7$dmdMe zz`~LHx#UZt$OY!Z6IxvoZ6teO zw*AlZ?|?36Reb9*-?pFYb%2IE(nJXzxxyQ zONGVYnlu9B%3t0u(%hCkX7Z9fEl26!E%VmAa(WomHmp6&z{0|kc-xqp-S*Vu}_ zp|nvcR_L@ODU#?6?h{@tALQGHv?FpaF4b*c=f%h6IefDe(a_+0#^x9PAvin|WfJ!- zQ9Y>V;THC9od;T5@xTpC5k52Yu0T@8++i_#Un7UC1WV04I+w?7qn8(?2@^ARctdMzmUfQC*sQp6? z1A>rETK0~*MVD3$E^4gs8!R{q3(4uO8Vfzz0oDKa?=?N@jZEBR-`XYoX?*Jq@l5}H zkzjHdS?#A^=T}k17B=LW<&0E76QTyItuaHfQgnyln1kR<-c-X0cIc z>3iyqu3r~N&Qyc$4#wCgEvcT6q!Om8A}PVfR|$i(SBBmPb6KLE(5u&Evk`GFdlCE7 z%YJ{L%9=Q*EMQz+ta_s|f^O8-F9=JIQE(-+YlTXf?LRaceBzf01qrx}i2r~7Uz89V z-7B?_hWE$Y!CbK27g_H;61j)u??#0F9%BO@Dtq1mh+eTIj zSP<3KNI|lRoe|oLc=9Pv!jPP$MX47?k&SaD76a!ecCO^2@qMdH(r{9buV zxAfqSf!fko=+2dbeCGTe8k_^BCPkF0)>*+r#KAB}^b}{N3Wc1)KVMxRb39F#XO_DH2?G8H$L&f^DZyh&J#2_pc;$$ zZIAnRtkcSN=uooqi$f0gG_!Cz2y7FrniDIvmfAhawX2f2!qyaq|5#yvN`eolNVBF< z8Wy6yorsau@fA(vi(b!zq;IPs`&!&#Yqv5g&_1LSd8LN2gN6-q8ZB(LQDSP0T;ZSR zE~8corWR4vG``(C&l7Bul6JH0J+Fj+jz6b4e1rV`(9YQy7ug#E^_Q9OYM0i|Z4{0k zk;Jg^*Xr+G4GW)IWX{35k{`_Z&cRRQN^r%=f7*A;>-E9^b@4w z-`6C>5;e(=$UcF;@+EzM;mh0wcnjy@XSZr{`3mBwX|20u535+4cnT(Feh_U)c)Les zn;{kyfL5s$`kz0Ehw4B{kTtdMn4&i5!`x0yoLkBZJ&XfFZ68`Z0g-OEIU4b`KrL&X zb-oeu^cb;{-l06Pc@gb1{|+`E&&dMvOfKu8;PCo~$if|-6P08Um|lO%jXEpAu$~Fq zTL`?L%l4+YE=G?1xNNqR-dy3{sFwVxMm#eOioLRPP16Nax5ZZLWDKhe#-+4dX>FMP zyEJTv)tQ)}mG(+6MEsj=k>5nTGh?OV-2c4qA=P1hoSE9uqv?!!`mnW9mL}HxDeI)Y zpK<6Z)%^}zqJmSY^j**Y`(;V!=M*m*2uzU8BwYVHmtZ6LqmHP_tDGrk=>FLE!c1o) zis4_^2POXJ(d>K_dySerKgZ{g2)w4q!GDP)qQu#5eVduO+1?kwvxTmyaki`2P6kc2 zzyHru`p-im%*3f?73kDu!WGJhv44a*U^R^RSv_4YXk;~%F#LzkAnJeDJtK(*#iHcW zTGhf8KJ)C``Rm@-yLZxFmh}Bn%G=Fu*>k2X$Pyl1E-TC&LJVpD-_LQv74C@2uke&( zY&yHyBYbgHz=(8CNdx@Ab#E2B-AOZGtkXP_7tb6r{o>z&-8}HN(pj@gNCi60@$n>Z z;q%bNpaIG@(wry{MpsWLHq)a{n>-1GDq!=LRBMOAZ8SbazTcp0~u-TdF@C5#%L zLFEUOlpJV}AS+{6hU%hc@o>Uh|6EsWe1%x5Ww4Go!oSak9l7B5tP}RpDlzJma$wW_ zr5wq(&HNsJ+4Ix`Q=MkqaF_T4tB8zWRY2IQ{TJP5lTKQ4CI&UTHG9l@OZ(}ae;{&k zU(1>~Vn1>JAbFB4aq2yu{jM~d99MAX=ApqJ!`XL>p~a7bquy<;|9-m{PHTiN2Duy( z6X3x%7IKR9Y4Dpn@Kciu5|eL1p{frKhXpRKohubSJvrmH`&q2j2$2$g`*!xl*+0+P z;mE=M_bQH%fc|fgP9RRfy+rhX2XHprC?V{36^Z{t#>58q1d0?~wuJfwT+;u~-($o3 mpP0{`K$e2b%y2XHOb&%k`b5mYYk-e}U+T)*VDe_>|Nj6GMEIrv diff --git a/Telegram/SourceFiles/art/sprite_200x.png b/Telegram/SourceFiles/art/sprite_200x.png index 84138ee01f0a537b18390f9a97163426c37c72b3..63b51ff0ba507b6127b095238f4eee50028d3b26 100644 GIT binary patch delta 102950 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

    3m|ej$x8S=uB|^qbR$@BD&9N1 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 P!Hout() || !parent->history()->peer->chat) { - _minh += st::msgPadding.top(); + if (!data->song()) { + if (parent->out() || !parent->history()->peer->chat) { + _minh += st::msgPadding.top(); + } + _minh += st::msgServiceNameFont->height; } - _minh += st::msgServiceNameFont->height; } } _height = _minh; @@ -2881,7 +2883,7 @@ void HistoryDocument::draw(QPainter &p, const HistoryItem *parent, bool selected } const HistoryReply *reply = toHistoryReply(parent); - const HistoryForwarded *fwd = reply ? 0 : toHistoryForwarded(parent); + const HistoryForwarded *fwd = (reply || data->song()) ? 0 : toHistoryForwarded(parent); int skipy = 0, replyFrom = 0, fwdFrom = 0; if (reply) { skipy = st::msgReplyPadding.top() + st::msgReplyBarSize.height() + st::msgReplyPadding.bottom(); @@ -2949,14 +2951,14 @@ void HistoryDocument::draw(QPainter &p, const HistoryItem *parent, bool selected QRect img; if (data->status == FileFailed) { statusText = lang(lng_attach_failed); - img = out ? st::mediaAudioOutImg : st::mediaAudioInImg; + img = out ? st::mediaMusicOutImg : st::mediaMusicInImg; } else if (data->status == FileUploading) { if (_uplTextCache.isEmpty() || _uplDone != data->uploadOffset) { _uplDone = data->uploadOffset; _uplTextCache = formatDownloadText(_uplDone, data->size); } statusText = _uplTextCache; - img = out ? st::mediaAudioOutImg : st::mediaAudioInImg; + img = out ? st::mediaMusicOutImg : st::mediaMusicInImg; } else if (already || hasdata) { bool showPause = false; if (playing.msgId == parent->id && !(playingState & AudioPlayerStoppedMask) && playingState != AudioPlayerFinishing) { @@ -2978,7 +2980,7 @@ void HistoryDocument::draw(QPainter &p, const HistoryItem *parent, bool selected } else { statusText = _size; } - img = out ? st::mediaAudioOutImg : st::mediaAudioInImg; + img = out ? st::mediaMusicOutImg : st::mediaMusicInImg; } p.drawPixmap(QPoint(st::mediaPadding.left(), skipy + st::mediaPadding.top()), App::sprite(), img); @@ -3073,14 +3075,14 @@ void HistoryDocument::drawInPlaylist(QPainter &p, const HistoryItem *parent, boo QRect img; if (data->status == FileFailed) { statusText = lang(lng_attach_failed); - img = st::mediaAudioInImg; + img = st::mediaMusicInImg; } else if (data->status == FileUploading) { if (_uplTextCache.isEmpty() || _uplDone != data->uploadOffset) { _uplDone = data->uploadOffset; _uplTextCache = formatDownloadText(_uplDone, data->size); } statusText = _uplTextCache; - img = st::mediaAudioInImg; + img = st::mediaMusicInImg; } else if (already || hasdata) { bool isPlaying = (playing.msgId == parent->id); bool showPause = false; @@ -3103,7 +3105,7 @@ void HistoryDocument::drawInPlaylist(QPainter &p, const HistoryItem *parent, boo } else { statusText = _size; } - img = st::mediaAudioInImg; + img = st::mediaMusicInImg; } p.drawPixmap(QPoint(st::mediaPadding.left(), st::mediaPadding.top()), App::sprite(), img); @@ -3244,7 +3246,7 @@ void HistoryDocument::getState(TextLinkPtr &lnk, HistoryCursorState &state, int3 } const HistoryReply *reply = toHistoryReply(parent); - const HistoryForwarded *fwd = reply ? 0 : toHistoryForwarded(parent); + const HistoryForwarded *fwd = (reply || data->song()) ? 0 : toHistoryForwarded(parent); int skipy = 0, replyFrom = 0, fwdFrom = 0; if (reply) { skipy = st::msgReplyPadding.top() + st::msgReplyBarSize.height() + st::msgReplyPadding.bottom(); From 5a38cb4581122f76766bde0cf0edbc38bc074346 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sun, 12 Jul 2015 18:39:56 +0300 Subject: [PATCH 038/121] fixed crash --- Telegram/SourceFiles/window.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/window.cpp b/Telegram/SourceFiles/window.cpp index 00f713269..ffdab7f45 100644 --- a/Telegram/SourceFiles/window.cpp +++ b/Telegram/SourceFiles/window.cpp @@ -1426,7 +1426,7 @@ void Window::notifyShowNext(NotifyWindow *remove) { if (j == notifyWhenMaps.end()) { history->clearNotifications(); i = notifyWaiters.erase(i); - if (notifyHistory) notifyWaiter = notifyWaiters.find(notifyHistory); + notifyWaiter = notifyHistory ? notifyWaiters.find(notifyHistory) : notifyWaiters.end(); continue; } do { @@ -1442,7 +1442,7 @@ void Window::notifyShowNext(NotifyWindow *remove) { if (!history->currentNotification()) { notifyWhenMaps.remove(history); i = notifyWaiters.erase(i); - if (notifyHistory) notifyWaiter = notifyWaiters.find(notifyHistory); + notifyWaiter = notifyHistory ? notifyWaiters.find(notifyHistory) : notifyWaiters.end(); continue; } uint64 when = i.value().when; From afa28e97543c81da98f47c9ca17eaaa00f61be70 Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 13 Jul 2015 13:45:09 +0300 Subject: [PATCH 039/121] optimized emoji insertion --- Telegram/SourceFiles/gui/flattextarea.cpp | 45 +++++++++++++++++------ Telegram/SourceFiles/gui/flattextarea.h | 2 + 2 files changed, 36 insertions(+), 11 deletions(-) diff --git a/Telegram/SourceFiles/gui/flattextarea.cpp b/Telegram/SourceFiles/gui/flattextarea.cpp index 1aaece3e7..730c72bf1 100644 --- a/Telegram/SourceFiles/gui/flattextarea.cpp +++ b/Telegram/SourceFiles/gui/flattextarea.cpp @@ -174,7 +174,10 @@ EmojiPtr FlatTextarea::getSingleEmoji() const { if (!text.isEmpty()) { QTextCharFormat format = fragment.charFormat(); - return emojiFromUrl(static_cast(&format)->name()); + QString imageName = static_cast(&format)->name(); + if (imageName.startsWith(qstr("emoji://e."))) { + return emojiFromUrl(imageName); + } } return 0; } @@ -530,17 +533,25 @@ void FlatTextarea::insertFromMimeData(const QMimeData *source) { } void FlatTextarea::insertEmoji(EmojiPtr emoji, QTextCursor c) { - c.removeSelectedText(); - - QPixmap img(App::emojiSingle(emoji, _st.font->height)); - QString url = qsl("emoji://e.") + QString::number(emojiKey(emoji), 16); - document()->addResource(QTextDocument::ImageResource, QUrl(url), QVariant(img)); QTextImageFormat imageFormat; - imageFormat.setWidth(img.width() / cIntRetinaFactor()); - imageFormat.setHeight(img.height() / cIntRetinaFactor()); - imageFormat.setName(url); + int32 ew = ESize + st::emojiPadding * cIntRetinaFactor() * 2, eh = _st.font->height * cIntRetinaFactor(); + imageFormat.setWidth(ew / cIntRetinaFactor()); + imageFormat.setHeight(eh / cIntRetinaFactor()); + imageFormat.setName(qsl("emoji://e.") + QString::number(emojiKey(emoji), 16)); imageFormat.setVerticalAlignment(QTextCharFormat::AlignBaseline); - c.insertImage(imageFormat); + + static QString objectReplacement(QChar::ObjectReplacementCharacter); + c.insertText(objectReplacement, imageFormat); +} + +QVariant FlatTextarea::loadResource(int type, const QUrl &name) { + QString imageName = name.toDisplayString(); + if (imageName.startsWith(qstr("emoji://e."))) { + if (EmojiPtr emoji = emojiFromUrl(imageName)) { + return QVariant(App::emojiSingle(emoji, _st.font->height)); + } + } + return QVariant(); } void FlatTextarea::processDocumentContentsChange(int position, int charsAdded) { @@ -579,6 +590,10 @@ void FlatTextarea::processDocumentContentsChange(int position, int charsAdded) { if (emoji) break; } if (emoji) { + if (!document()->pageSize().isNull()) { + document()->setPageSize(QSizeF(0, 0)); + } + QTextCursor c(doc->docHandle(), emojiPosition); c.setPosition(emojiPosition + emojiLen, QTextCursor::KeepAnchor); int32 removedUpto = c.position(); @@ -608,6 +623,8 @@ void FlatTextarea::processDocumentContentsChange(int position, int charsAdded) { } void FlatTextarea::onDocumentContentsChange(int position, int charsRemoved, int charsAdded) { + if (_replacingEmojis) return; + if (!_links.isEmpty()) { bool changed = false; for (LinkRanges::iterator i = _links.begin(); i != _links.end();) { @@ -624,7 +641,7 @@ void FlatTextarea::onDocumentContentsChange(int position, int charsRemoved, int if (changed) emit linksChanged(); } - if (_replacingEmojis || document()->availableRedoSteps() > 0) return; + if (document()->availableRedoSteps() > 0) return; const int takeBack = 3; @@ -647,6 +664,8 @@ void FlatTextarea::onDocumentContentsChanged() { _insertions.clear(); } else { _replacingEmojis = true; + QSizeF s = document()->pageSize(); + do { Insertion i = _insertions.front(); _insertions.pop_front(); @@ -654,6 +673,10 @@ void FlatTextarea::onDocumentContentsChanged() { processDocumentContentsChange(i.first, i.second); } } while (!_insertions.isEmpty()); + + if (document()->pageSize() != s) { + document()->setPageSize(s); + } _replacingEmojis = false; } } diff --git a/Telegram/SourceFiles/gui/flattextarea.h b/Telegram/SourceFiles/gui/flattextarea.h index fc69f0e9f..0173e284b 100644 --- a/Telegram/SourceFiles/gui/flattextarea.h +++ b/Telegram/SourceFiles/gui/flattextarea.h @@ -103,6 +103,8 @@ protected: return QTextEdit::leaveEvent(e); } + QVariant loadResource(int type, const QUrl &name); + private: void getSingleEmojiFragment(QString &text, QTextFragment &fragment) const; From 5595570dfe5eca2d4842eddabb6117056d0ddbee Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 13 Jul 2015 14:08:17 +0300 Subject: [PATCH 040/121] optimized emoji insert --- Telegram/SourceFiles/gui/flattextarea.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Telegram/SourceFiles/gui/flattextarea.cpp b/Telegram/SourceFiles/gui/flattextarea.cpp index 730c72bf1..36a9d430c 100644 --- a/Telegram/SourceFiles/gui/flattextarea.cpp +++ b/Telegram/SourceFiles/gui/flattextarea.cpp @@ -653,7 +653,14 @@ void FlatTextarea::onDocumentContentsChange(int position, int charsRemoved, int } if (charsAdded <= 0) return; - _insertions.push_back(Insertion(position, charsAdded)); + // _insertions.push_back(Insertion(position, charsAdded)); + _replacingEmojis = true; + QSizeF s = document()->pageSize(); + processDocumentContentsChange(position, charsAdded); + if (document()->pageSize() != s) { + document()->setPageSize(s); + } + _replacingEmojis = false; } void FlatTextarea::onDocumentContentsChanged() { From 8e2943fe11414617b9f400f36cd3336d89de4ed9 Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 13 Jul 2015 14:14:15 +0300 Subject: [PATCH 041/121] filling optimized --- Telegram/SourceFiles/gui/flattextarea.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/gui/flattextarea.cpp b/Telegram/SourceFiles/gui/flattextarea.cpp index 730c72bf1..1edd4a0d2 100644 --- a/Telegram/SourceFiles/gui/flattextarea.cpp +++ b/Telegram/SourceFiles/gui/flattextarea.cpp @@ -128,7 +128,8 @@ int32 FlatTextarea::fakeMargin() const { void FlatTextarea::paintEvent(QPaintEvent *e) { QPainter p(viewport()); - p.fillRect(rect(), _st.bgColor->b); + QRect r(rect().intersected(e->rect())); + p.fillRect(r, _st.bgColor->b); bool phDraw = _phVisible; if (animating()) { p.setOpacity(a_phAlpha.current()); @@ -136,7 +137,7 @@ void FlatTextarea::paintEvent(QPaintEvent *e) { } if (phDraw) { p.save(); - p.setClipRect(rect()); + p.setClipRect(r); QRect phRect(_st.textMrg.left() - _fakeMargin + _st.phPos.x() + a_phLeft.current(), _st.textMrg.top() - _fakeMargin + _st.phPos.y(), width() - _st.textMrg.left() - _st.textMrg.right(), height() - _st.textMrg.top() - _st.textMrg.bottom()); p.setFont(_st.font->f); p.setPen(a_phColor.current()); From b352d38acf4cd07939ea7b1419b7d659e325a3cc Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 13 Jul 2015 20:55:59 +0300 Subject: [PATCH 042/121] multimedia keys handle added --- Telegram/SourceFiles/application.cpp | 46 +++++++----- Telegram/SourceFiles/playerwidget.cpp | 93 +++++++++++++++++++------ Telegram/SourceFiles/playerwidget.h | 7 ++ Telegram/SourceFiles/pspecific_mac.cpp | 6 +- Telegram/SourceFiles/pspecific_mac.h | 4 +- Telegram/SourceFiles/pspecific_mac_p.h | 4 +- Telegram/SourceFiles/pspecific_mac_p.mm | 38 ++++++++++ 7 files changed, 158 insertions(+), 40 deletions(-) diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index 41f744844..1d75d7824 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -48,28 +48,43 @@ namespace { } } - class EventFilterForMac : public QObject { + class EventFilterForKeys : public QObject { public: - EventFilterForMac(QObject *parent) : QObject(parent) { + EventFilterForKeys(QObject *parent) : QObject(parent) { } bool eventFilter(QObject *o, QEvent *e) { if (e->type() == QEvent::KeyPress) { QKeyEvent *ev = static_cast(e); - if (ev->key() == Qt::Key_W && (ev->modifiers() & (Qt::MetaModifier | Qt::ControlModifier))) { - if (cWorkMode() == dbiwmTrayOnly || cWorkMode() == dbiwmWindowAndTray) { - App::wnd()->minimizeToTray(); - return true; - } else { - App::wnd()->hide(); - App::wnd()->updateIsActive(cOfflineBlurTimeout()); - App::wnd()->updateGlobalMenu(); + if (cPlatform() == dbipMac) { + if (ev->key() == Qt::Key_W && (ev->modifiers() & (Qt::MetaModifier | Qt::ControlModifier))) { + if (cWorkMode() == dbiwmTrayOnly || cWorkMode() == dbiwmWindowAndTray) { + App::wnd()->minimizeToTray(); + return true; + } else { + App::wnd()->hide(); + App::wnd()->updateIsActive(cOfflineBlurTimeout()); + App::wnd()->updateGlobalMenu(); + return true; + } + } else if (ev->key() == Qt::Key_M && (ev->modifiers() & (Qt::MetaModifier | Qt::ControlModifier))) { + App::wnd()->setWindowState(Qt::WindowMinimized); return true; } - } else if (ev->key() == Qt::Key_M && (ev->modifiers() & (Qt::MetaModifier | Qt::ControlModifier))) { - App::wnd()->setWindowState(Qt::WindowMinimized); - return true; + } + if (ev->key() == Qt::Key_MediaPlay) { + if (App::main()) App::main()->player()->playPressed(); + } else if (ev->key() == Qt::Key_MediaPause) { + if (App::main()) App::main()->player()->pausePressed(); + } else if (ev->key() == Qt::Key_MediaTogglePlayPause) { + if (App::main()) App::main()->player()->playPausePressed(); + } else if (ev->key() == Qt::Key_MediaStop) { + if (App::main()) App::main()->player()->stopPressed(); + } else if (ev->key() == Qt::Key_MediaPrevious) { + if (App::main()) App::main()->player()->prevPressed(); + } else if (ev->key() == Qt::Key_MediaNext) { + if (App::main()) App::main()->player()->nextPressed(); } } return QObject::eventFilter(o, e); @@ -95,9 +110,8 @@ Application::Application(int &argc, char **argv) : PsApplication(argc, argv), } mainApp = this; - if (cPlatform() == dbipMac) { - installEventFilter(new EventFilterForMac(this)); - } + + installEventFilter(new EventFilterForKeys(this)); QFontDatabase::addApplicationFont(qsl(":/gui/art/fonts/OpenSans-Regular.ttf")); QFontDatabase::addApplicationFont(qsl(":/gui/art/fonts/OpenSans-Bold.ttf")); diff --git a/Telegram/SourceFiles/playerwidget.cpp b/Telegram/SourceFiles/playerwidget.cpp index 3e4b85dce..c0676ff70 100644 --- a/Telegram/SourceFiles/playerwidget.cpp +++ b/Telegram/SourceFiles/playerwidget.cpp @@ -149,26 +149,12 @@ void PlayerWidget::mousePressEvent(QMouseEvent *e) { if (e->button() == Qt::LeftButton) { _down = OverNone; if (_song && _over == OverPlay) { - SongMsgId playing; - AudioPlayerState playingState = AudioPlayerStopped; - audioPlayer()->currentState(&playing, &playingState); - if (playing == _song && !(playingState & AudioPlayerStoppedMask)) { - audioPlayer()->pauseresume(OverviewDocuments); - } else { - audioPlayer()->play(_song); - if (App::main()) App::main()->documentPlayProgress(_song); - } + playPausePressed(); return; } else if (_over == OverPrev) { - const History::MediaOverview *o = _history ? &_history->_overview[OverviewAudioDocuments] : 0; - if (audioPlayer() && o && _index > 0 && _index <= o->size() && !o->isEmpty()) { - startPlay(o->at(_index - 1)); - } + prevPressed(); } else if (_over == OverNext) { - const History::MediaOverview *o = _history ? &_history->_overview[OverviewAudioDocuments] : 0; - if (audioPlayer() && o && _index >= 0 && _index < o->size() - 1) { - startPlay(o->at(_index + 1)); - } + nextPressed(); } else if (_over == OverClose) { _down = OverClose; } else if (_over == OverVolume) { @@ -411,14 +397,79 @@ void PlayerWidget::mouseReleaseEvent(QMouseEvent *e) { } update(); } else if (_down == OverClose && _over == OverClose) { - if (_song) { - audioPlayer()->stop(OverviewDocuments); - if (App::main()) App::main()->hidePlayer(); - } + stopPressed(); } _down = OverNone; } +void PlayerWidget::playPressed() { + if (!_song || isHidden()) return; + + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + audioPlayer()->currentState(&playing, &playingState); + if (playing == _song && !(playingState & AudioPlayerStoppedMask)) { + if (playingState == AudioPlayerPausing || playingState == AudioPlayerPaused || playingState == AudioPlayerPausedAtEnd) { + audioPlayer()->pauseresume(OverviewDocuments); + } + } else { + audioPlayer()->play(_song); + if (App::main()) App::main()->documentPlayProgress(_song); + } +} + +void PlayerWidget::pausePressed() { + if (!_song || isHidden()) return; + + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + audioPlayer()->currentState(&playing, &playingState); + if (playing == _song && !(playingState & AudioPlayerStoppedMask)) { + if (playingState == AudioPlayerStarting || playingState == AudioPlayerResuming || playingState == AudioPlayerPlaying || playingState == AudioPlayerFinishing) { + audioPlayer()->pauseresume(OverviewDocuments); + } + } +} + +void PlayerWidget::playPausePressed() { + if (!_song || isHidden()) return; + + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + audioPlayer()->currentState(&playing, &playingState); + if (playing == _song && !(playingState & AudioPlayerStoppedMask)) { + audioPlayer()->pauseresume(OverviewDocuments); + } else { + audioPlayer()->play(_song); + if (App::main()) App::main()->documentPlayProgress(_song); + } +} + +void PlayerWidget::prevPressed() { + if (isHidden() || !_prevAvailable) return; + + const History::MediaOverview *o = _history ? &_history->_overview[OverviewAudioDocuments] : 0; + if (audioPlayer() && o && _index > 0 && _index <= o->size() && !o->isEmpty()) { + startPlay(o->at(_index - 1)); + } +} + +void PlayerWidget::nextPressed() { + if (isHidden() || !_nextAvailable) return; + + const History::MediaOverview *o = _history ? &_history->_overview[OverviewAudioDocuments] : 0; + if (audioPlayer() && o && _index >= 0 && _index < o->size() - 1) { + startPlay(o->at(_index + 1)); + } +} + +void PlayerWidget::stopPressed() { + if (!_song || isHidden()) return; + + audioPlayer()->stop(OverviewDocuments); + if (App::main()) App::main()->hidePlayer(); +} + void PlayerWidget::resizeEvent(QResizeEvent *e) { int32 availh = (height() - st::playerLineHeight); int32 ch = st::playerPlay.pxHeight() + st::playerSkip, ct = (availh - ch) / 2; diff --git a/Telegram/SourceFiles/playerwidget.h b/Telegram/SourceFiles/playerwidget.h index 8656e0d0b..f7ca31696 100644 --- a/Telegram/SourceFiles/playerwidget.h +++ b/Telegram/SourceFiles/playerwidget.h @@ -33,6 +33,13 @@ public: void mouseReleaseEvent(QMouseEvent *e); void resizeEvent(QResizeEvent *e); + void playPressed(); + void pausePressed(); + void playPausePressed(); + void prevPressed(); + void nextPressed(); + void stopPressed(); + bool progressStep(float64 ms); bool stateStep(float64 ms); diff --git a/Telegram/SourceFiles/pspecific_mac.cpp b/Telegram/SourceFiles/pspecific_mac.cpp index f957384e2..b7fc57214 100644 --- a/Telegram/SourceFiles/pspecific_mac.cpp +++ b/Telegram/SourceFiles/pspecific_mac.cpp @@ -41,7 +41,7 @@ namespace { Window *wnd = Application::wnd(); if (!wnd) return false; - return false; + return wnd->psFilterNativeEvent(message); } }; _PsEventFilter *_psEventFilter = 0; @@ -460,6 +460,10 @@ void PsMainWindow::psActivateNotify(NotifyWindow *w) { objc_activateWnd(w->winId()); } +bool PsMainWindow::psFilterNativeEvent(void *event) { + return _private.filterNativeEvent(event); +} + namespace { QRect _monitorRect; uint64 _monitorLastGot = 0; diff --git a/Telegram/SourceFiles/pspecific_mac.h b/Telegram/SourceFiles/pspecific_mac.h index ffca8718a..5dcda2877 100644 --- a/Telegram/SourceFiles/pspecific_mac.h +++ b/Telegram/SourceFiles/pspecific_mac.h @@ -36,7 +36,7 @@ public: void darkModeChanged(); void notifyClicked(unsigned long long peer, int msgid); void notifyReplied(unsigned long long peer, int msgid, const char *str); - + }; class NotifyWindow; @@ -72,6 +72,8 @@ public: return posInited; } + bool psFilterNativeEvent(void *event); + void psActivateNotify(NotifyWindow *w); void psClearNotifies(PeerId peerId = 0); void psNotifyShown(NotifyWindow *w); diff --git a/Telegram/SourceFiles/pspecific_mac_p.h b/Telegram/SourceFiles/pspecific_mac_p.h index 385dc0ab1..2470ae0a7 100644 --- a/Telegram/SourceFiles/pspecific_mac_p.h +++ b/Telegram/SourceFiles/pspecific_mac_p.h @@ -33,7 +33,9 @@ public: void clearNotifies(uint64 peer = 0); void enableShadow(WId winId); - + + bool filterNativeEvent(void *event); + virtual void activeSpaceChanged() { } virtual void darkModeChanged() { diff --git a/Telegram/SourceFiles/pspecific_mac_p.mm b/Telegram/SourceFiles/pspecific_mac_p.mm index fe5c91c15..8df6af224 100644 --- a/Telegram/SourceFiles/pspecific_mac_p.mm +++ b/Telegram/SourceFiles/pspecific_mac_p.mm @@ -19,6 +19,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "pspecific_mac_p.h" #include "window.h" +#include "mainwidget.h" #include "application.h" #include "lang.h" @@ -27,6 +28,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include #include +#include + @interface qVisualize : NSObject { } @@ -304,6 +307,41 @@ void PsMacWindowPrivate::enableShadow(WId winId) { // [[(NSView*)winId window] setHasShadow:YES]; } +bool PsMacWindowPrivate::filterNativeEvent(void *event) { + NSEvent *e = static_cast(event); + if (e && [e type] == NSSystemDefined && [e subtype] == 8) { + int keyCode = (([e data1] & 0xFFFF0000) >> 16); + int keyFlags = ([e data1] & 0x0000FFFF); + int keyState = (((keyFlags & 0xFF00) >> 8)) == 0xA; + int keyRepeat = (keyFlags & 0x1); + + switch (keyCode) { + case NX_KEYTYPE_PLAY: + if (keyState == 0) { // Play pressed and released + if (App::main()) App::main()->player()->playPausePressed(); + return true; + } + break; + + case NX_KEYTYPE_FAST: + if (keyState == 0) { // Next pressed and released + if (App::main()) App::main()->player()->nextPressed(); + return true; + } + break; + + case NX_KEYTYPE_REWIND: + if (keyState == 0) { // Previous pressed and released + if (App::main()) App::main()->player()->prevPressed(); + return true; + } + break; + } + } + return false; +} + + void PsMacWindowPrivate::clearNotifies(unsigned long long peer) { NSUserNotificationCenter *center = [NSUserNotificationCenter defaultUserNotificationCenter]; if (peer) { From 4f7f569ddde6bd44b4d3c61002551948e81bb65a Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 13 Jul 2015 20:56:44 +0300 Subject: [PATCH 043/121] fixed double play of audio after download complete --- Telegram/SourceFiles/audio.cpp | 30 ++++++++++++++++++++++++++++- Telegram/SourceFiles/mainwidget.cpp | 5 ++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/audio.cpp b/Telegram/SourceFiles/audio.cpp index 79978f250..831b41f88 100644 --- a/Telegram/SourceFiles/audio.cpp +++ b/Telegram/SourceFiles/audio.cpp @@ -1341,6 +1341,15 @@ void AudioPlayerLoaders::onStart(const AudioMsgId &audio, qint64 position) { _audio = AudioMsgId(); delete _audioLoader; _audioLoader = 0; + + { + QMutexLocker lock(&playerMutex); + AudioPlayer *voice = audioPlayer(); + if (!voice) return; + + voice->_audioData[voice->_audioCurrent].loading = true; + } + loadData(OverviewAudios, static_cast(&audio), position); } @@ -1348,6 +1357,15 @@ void AudioPlayerLoaders::onStart(const SongMsgId &song, qint64 position) { _song = SongMsgId(); delete _songLoader; _songLoader = 0; + + { + QMutexLocker lock(&playerMutex); + AudioPlayer *voice = audioPlayer(); + if (!voice) return; + + voice->_songData[voice->_songCurrent].loading = true; + } + loadData(OverviewDocuments, static_cast(&song), position); } @@ -1404,15 +1422,25 @@ void AudioPlayerLoaders::loadData(MediaOverviewType type, const void *objId, qin return; } - bool started = (err == SetupNoErrorStarted), finished = false; + bool started = (err == SetupNoErrorStarted), finished = false, errAtStart = started; QByteArray result; int64 samplesAdded = 0, frequency = l->frequency(), format = l->format(); while (result.size() < AudioVoiceMsgBufferSize) { if (!l->readMore(result, samplesAdded)) { + if (errAtStart) { + { + QMutexLocker lock(&playerMutex); + AudioPlayer::Msg *m = checkLoader(type); + if (m) m->state = AudioPlayerStoppedAtStart; + } + emitError(type); + return; + } finished = true; break; } + errAtStart = false; QMutexLocker lock(&playerMutex); if (!checkLoader(type)) { diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 9a0d72fec..4ee53656a 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -1575,6 +1575,7 @@ void MainWidget::audioLoadRetry() { } void MainWidget::documentLoadProgress(mtpFileLoader *loader) { + bool songPlayActivated = false; DocumentData *document = App::document(loader->objId()); if (document->loader) { if (document->loader->done()) { @@ -1595,6 +1596,8 @@ void MainWidget::documentLoadProgress(mtpFileLoader *loader) { audioPlayer()->play(song); if (App::main()) App::main()->documentPlayProgress(song); } + + songPlayActivated = true; } else if(document->openOnSave > 0 && document->size < MediaViewImageSizeLimit) { QImageReader reader(already); if (reader.canRead()) { @@ -1628,7 +1631,7 @@ void MainWidget::documentLoadProgress(mtpFileLoader *loader) { } App::wnd()->documentUpdated(document); - if (audioPlayer()) { + if (!songPlayActivated && audioPlayer()) { SongMsgId playing; AudioPlayerState playingState = AudioPlayerStopped; int64 playingPosition = 0, playingDuration = 0; From 7d51682eddde5be517c457758a95563b79e9a716 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 14 Jul 2015 15:21:13 +0300 Subject: [PATCH 044/121] moving to Qt 5.5.0 --- Telegram/MetaEmoji.vcxproj | 6 +- Telegram/MetaLang.vcxproj | 6 +- Telegram/MetaStyle.vcxproj | 6 +- Telegram/Packer.vcxproj | 2 +- Telegram/SourceFiles/_other/packer.h | 1 + Telegram/Telegram.vcxproj | 420 +- .../src/corelib/tools/qunicodetables.cpp | 11084 -------------- .../platforms/windows/qwindowskeymapper.cpp | 1223 -- .../src/3rdparty/libwebp/src/dec/vp8l.c | 1385 -- ..._5_4_0_patch.diff => _qt_5_5_0_patch.diff} | 403 +- .../qtbase/mkspecs/common/msvc-desktop.conf} | 94 +- .../qmake/generators/mac/pbuilder_pbx.cpp | 441 +- .../qtbase/qmake/generators/makefile.cpp | 612 +- .../src/3rdparty/pcre/pcre16_valid_utf16.c | 2 +- .../src/corelib/tools/qunicodetables.cpp | 12111 ++++++++++++++++ .../qtbase/src/gui/image/qbmphandler.cpp | 41 +- .../src/gui/kernel/qplatformdialoghelper.h | 14 +- .../qtbase/src/gui/painting/qpaintengine_p.h | 18 +- .../qtbase/src/gui/text/qtextlayout.cpp | 36 +- .../qtbase/src/gui/text/qtextlayout.h | 14 +- .../socket/qnativesocketengine_win.cpp | 201 +- .../basic/qbasicfontdatabase.cpp | 216 +- .../fontconfig/qfontconfigdatabase.cpp | 169 +- .../mac/qcoretextfontdatabase.mm | 126 +- .../cocoa/qcocoaapplicationdelegate.mm | 38 +- .../platforms/cocoa/qcocoasystemtrayicon.mm | 57 +- .../plugins/platforms/cocoa/qcocoawindow.mm | 166 +- .../src/plugins/platforms/cocoa/qnsview.mm | 266 +- .../windows/qwindowsdialoghelpers.cpp | 135 +- .../platforms/windows/qwindowswindow.cpp | 471 +- .../platforms/windows/qwindowswindow.h | 37 +- .../src/widgets/dialogs/qfiledialog.cpp | 213 +- .../qtbase/src/widgets/dialogs/qfiledialog.h | 38 +- .../src/widgets/dialogs/qfiledialog_p.h | 48 +- .../qtbase/src/widgets/kernel/qwidget.cpp | 391 +- .../src/widgets/util/qsystemtrayicon.cpp | 62 +- .../widgets/widgets/qwidgetlinecontrol.cpp | 52 +- .../widgets/widgets/qwidgettextcontrol.cpp | 46 +- 38 files changed, 14746 insertions(+), 15905 deletions(-) delete mode 100644 Telegram/_qt_5_4_0_patch/qtbase/src/corelib/tools/qunicodetables.cpp delete mode 100644 Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/windows/qwindowskeymapper.cpp delete mode 100644 Telegram/_qt_5_4_0_patch/qtimageformats/src/3rdparty/libwebp/src/dec/vp8l.c rename Telegram/{_qt_5_4_0_patch.diff => _qt_5_5_0_patch.diff} (73%) rename Telegram/{_qt_5_4_0_patch/qtbase/mkspecs/win32-msvc2013/qmake.conf => _qt_5_5_0_patch/qtbase/mkspecs/common/msvc-desktop.conf} (59%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/qmake/generators/mac/pbuilder_pbx.cpp (84%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/qmake/generators/makefile.cpp (88%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c (99%) create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/corelib/tools/qunicodetables.cpp rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/gui/image/qbmphandler.cpp (96%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/gui/kernel/qplatformdialoghelper.h (96%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/gui/painting/qpaintengine_p.h (84%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/gui/text/qtextlayout.cpp (98%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/gui/text/qtextlayout.h (94%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/network/socket/qnativesocketengine_win.cpp (95%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp (63%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp (87%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm (90%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm (92%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm (91%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm (93%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/plugins/platforms/cocoa/qnsview.mm (89%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp (94%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp (85%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/plugins/platforms/windows/qwindowswindow.h (91%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/widgets/dialogs/qfiledialog.cpp (95%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/widgets/dialogs/qfiledialog.h (93%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/widgets/dialogs/qfiledialog_p.h (89%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/widgets/kernel/qwidget.cpp (97%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/widgets/util/qsystemtrayicon.cpp (92%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/widgets/widgets/qwidgetlinecontrol.cpp (98%) rename Telegram/{_qt_5_4_0_patch => _qt_5_5_0_patch}/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp (98%) diff --git a/Telegram/MetaEmoji.vcxproj b/Telegram/MetaEmoji.vcxproj index a2ddc04a4..6b43558eb 100644 --- a/Telegram/MetaEmoji.vcxproj +++ b/Telegram/MetaEmoji.vcxproj @@ -105,7 +105,7 @@ Console $(OutDir)\$(ProjectName).exe $(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;imm32.lib;winmm.lib;qtmaind.lib;glu32.lib;opengl32.lib;Qt5Cored.lib;Qt5Guid.lib;qtharfbuzzngd.lib;Qt5PlatformSupportd.lib;platforms\qwindowsd.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;imm32.lib;winmm.lib;qtmaind.lib;glu32.lib;opengl32.lib;Qt5Cored.lib;Qt5Guid.lib;qtharfbuzzngd.lib;qtpcred.lib;qtfreetyped.lib;Qt5PlatformSupportd.lib;platforms\qwindowsd.lib;%(AdditionalDependencies) true $(IntDir)$(TargetName).pdb $(IntDir)$(TargetName).pgd @@ -123,7 +123,7 @@ Console $(OutDir)\$(ProjectName).exe $(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;glu32.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;glu32.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;qtpcre.lib;qtfreetype.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies) false $(IntDir)$(TargetName).pdb $(IntDir)$(TargetName).pgd @@ -142,7 +142,7 @@ Console $(OutDir)\$(ProjectName).exe $(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;glu32.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;glu32.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;qtpcre.lib;qtfreetype.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies) false $(IntDir)$(TargetName).pdb $(IntDir)$(TargetName).pgd diff --git a/Telegram/MetaLang.vcxproj b/Telegram/MetaLang.vcxproj index d273a3e92..3b9617b5c 100644 --- a/Telegram/MetaLang.vcxproj +++ b/Telegram/MetaLang.vcxproj @@ -105,7 +105,7 @@ Console $(OutDir)\$(ProjectName).exe $(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;imm32.lib;winmm.lib;qtmaind.lib;glu32.lib;opengl32.lib;Qt5Cored.lib;Qt5Guid.lib;qtharfbuzzngd.lib;Qt5Widgetsd.lib;Qt5Networkd.lib;Qt5PlatformSupportd.lib;platforms\qwindowsd.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;imm32.lib;winmm.lib;qtmaind.lib;glu32.lib;opengl32.lib;Qt5Cored.lib;Qt5Guid.lib;qtharfbuzzngd.lib;qtpcred.lib;qtfreetyped.lib;Qt5Widgetsd.lib;Qt5Networkd.lib;Qt5PlatformSupportd.lib;platforms\qwindowsd.lib;%(AdditionalDependencies) true $(IntDir)$(TargetName).pdb $(IntDir)$(TargetName).pgd @@ -123,7 +123,7 @@ Console $(OutDir)\$(ProjectName).exe $(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;qtpcre.lib;qtfreetype.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies) false @@ -140,7 +140,7 @@ Console $(OutDir)\$(ProjectName).exe $(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;qtpcre.lib;qtfreetype.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies) false diff --git a/Telegram/MetaStyle.vcxproj b/Telegram/MetaStyle.vcxproj index 2f6148262..8a1cb42fb 100644 --- a/Telegram/MetaStyle.vcxproj +++ b/Telegram/MetaStyle.vcxproj @@ -126,7 +126,7 @@ Console $(OutDir)\$(ProjectName).exe $(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;imm32.lib;winmm.lib;qtmaind.lib;glu32.lib;opengl32.lib;Qt5Cored.lib;Qt5Guid.lib;qtharfbuzzngd.lib;Qt5Widgetsd.lib;Qt5Networkd.lib;Qt5PlatformSupportd.lib;platforms\qwindowsd.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;imm32.lib;winmm.lib;qtmaind.lib;glu32.lib;opengl32.lib;Qt5Cored.lib;Qt5Guid.lib;qtharfbuzzngd.lib;qtpcred.lib;qtfreetyped.lib;Qt5Widgetsd.lib;Qt5Networkd.lib;Qt5PlatformSupportd.lib;platforms\qwindowsd.lib;%(AdditionalDependencies) true $(IntDir)$(TargetName).pdb $(IntDir)$(TargetName).pgd @@ -145,7 +145,7 @@ Console $(OutDir)\$(ProjectName).exe $(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;qtpcre.lib;qtfreetype.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies) false @@ -162,7 +162,7 @@ Console $(OutDir)\$(ProjectName).exe $(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;opengl32.lib;imm32.lib;winmm.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;qtpcre.lib;qtfreetype.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;%(AdditionalDependencies) false diff --git a/Telegram/Packer.vcxproj b/Telegram/Packer.vcxproj index 19127ea18..f9b770acd 100644 --- a/Telegram/Packer.vcxproj +++ b/Telegram/Packer.vcxproj @@ -113,7 +113,7 @@ Console $(OutDir)\$(ProjectName).exe .\..\..\Libraries\lzma\C\Util\LzmaLib\Release;$(QTDIR)\lib;.\..\..\Libraries\zlib-1.2.8\contrib\vstudio\vc11\x86\ZlibStatRelease;.\..\..\Libraries\OpenSSL-Win32\lib\VC\static;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;zlibstat.lib;libeay32MT.lib;Qt5Core.lib;LzmaLib.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;qtmain.lib;zlibstat.lib;libeay32MT.lib;Qt5Core.lib;qtpcre.lib;LzmaLib.lib;%(AdditionalDependencies) false diff --git a/Telegram/SourceFiles/_other/packer.h b/Telegram/SourceFiles/_other/packer.h index f06997250..071c6f984 100644 --- a/Telegram/SourceFiles/_other/packer.h +++ b/Telegram/SourceFiles/_other/packer.h @@ -23,6 +23,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include #include #include +#include #include diff --git a/Telegram/Telegram.vcxproj b/Telegram/Telegram.vcxproj index 3d511a4c0..ccc8f6fda 100644 --- a/Telegram/Telegram.vcxproj +++ b/Telegram/Telegram.vcxproj @@ -65,8 +65,8 @@ - AL_LIBTYPE_STATIC;UNICODE;WIN32;WIN64;HAVE_STDINT_H;ZLIB_WINAPI;%(PreprocessorDefinitions) - .\..\..\Libraries\lzma\C;.\..\..\Libraries\libexif-0.6.20;.\..\..\Libraries\zlib-1.2.8;.\..\..\Libraries\OpenSSL-Win32\include;.\..\..\Libraries\ffmpeg-2.6.3;.\..\..\Libraries\openal-soft\include;.\SourceFiles;.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore;.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui;%(AdditionalIncludeDirectories) + AL_LIBTYPE_STATIC;UNICODE;WIN32;WIN64;HAVE_STDINT_H;ZLIB_WINAPI;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + .\..\..\Libraries\lzma\C;.\..\..\Libraries\libexif-0.6.20;.\..\..\Libraries\zlib-1.2.8;.\..\..\Libraries\OpenSSL-Win32\include;.\..\..\Libraries\ffmpeg-2.6.3;.\..\..\Libraries\openal-soft\include;.\SourceFiles;.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore;.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui;%(AdditionalIncludeDirectories) ProgramDatabase false Use @@ -80,7 +80,7 @@ Windows $(OutDir)$(ProjectName).exe .\..\..\Libraries\lzma\C\Util\LzmaLib\Debug;.\..\..\Libraries\libexif-0.6.20\win32\Debug;.\..\..\Libraries\ffmpeg-2.6.3;.\..\..\Libraries\opus\win32\VS2010\Win32\Debug;.\..\..\Libraries\openal-soft\build\Debug;.\..\..\Libraries\zlib-1.2.8\contrib\vstudio\vc11\x86\ZlibStatDebug;.\..\..\Libraries\OpenSSL-Win32\lib\VC\static;$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;gdi32.lib;comdlg32.lib;oleaut32.lib;imm32.lib;winmm.lib;qtmaind.lib;glu32.lib;opengl32.lib;Strmiids.lib;Qt5Cored.lib;Qt5Guid.lib;qtharfbuzzngd.lib;Qt5Widgetsd.lib;Qt5Networkd.lib;Qt5PlatformSupportd.lib;platforms\qwindowsd.lib;imageformats\qwebpd.lib;libeay32MTd.lib;ssleay32MTd.lib;Crypt32.lib;zlibstat.lib;LzmaLib.lib;lib_exif.lib;UxTheme.lib;DbgHelp.lib;OpenAL32.lib;common.lib;libavformat\libavformat.a;libavcodec\libavcodec.a;libavutil\libavutil.a;libswresample\libswresample.a;opus.lib;celt.lib;silk_common.lib;silk_float.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;gdi32.lib;comdlg32.lib;oleaut32.lib;imm32.lib;winmm.lib;qtmaind.lib;glu32.lib;opengl32.lib;Strmiids.lib;Qt5Cored.lib;Qt5Guid.lib;qtharfbuzzngd.lib;qtpcred.lib;qtfreetyped.lib;Qt5Widgetsd.lib;Qt5Networkd.lib;Qt5PlatformSupportd.lib;platforms\qwindowsd.lib;imageformats\qwebpd.lib;libeay32MTd.lib;ssleay32MTd.lib;Crypt32.lib;zlibstat.lib;LzmaLib.lib;lib_exif.lib;UxTheme.lib;DbgHelp.lib;OpenAL32.lib;common.lib;libavformat\libavformat.a;libavcodec\libavcodec.a;libavutil\libavutil.a;libswresample\libswresample.a;opus.lib;celt.lib;silk_common.lib;silk_float.lib;%(AdditionalDependencies) true LIBCMT @@ -92,8 +92,8 @@ - AL_LIBTYPE_STATIC;UNICODE;_WITH_DEBUG;WIN32;WIN64;HAVE_STDINT_H;ZLIB_WINAPI;QT_NO_DEBUG;NDEBUG;%(PreprocessorDefinitions) - .\..\..\Libraries\lzma\C;.\..\..\Libraries\libexif-0.6.20;.\..\..\Libraries\zlib-1.2.8;.\..\..\Libraries\OpenSSL-Win32\include;.\..\..\Libraries\libogg-1.3.2\include;.\..\..\Libraries\opus\include;.\..\..\Libraries\opusfile\include;.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++;.\..\..\Libraries\mpg123-1.22.1\src\libmpg123;.\..\..\Libraries\faad2-2.7\include;.\..\..\Libraries\faad2-2.7\common\mp4ff;.\..\..\Libraries\ffmpeg-2.6.3;.\..\..\Libraries\openal-soft\include;.\SourceFiles;.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore;.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui;%(AdditionalIncludeDirectories) + AL_LIBTYPE_STATIC;UNICODE;_WITH_DEBUG;WIN32;WIN64;HAVE_STDINT_H;ZLIB_WINAPI;QT_NO_DEBUG;NDEBUG;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + .\..\..\Libraries\lzma\C;.\..\..\Libraries\libexif-0.6.20;.\..\..\Libraries\zlib-1.2.8;.\..\..\Libraries\OpenSSL-Win32\include;.\..\..\Libraries\libogg-1.3.2\include;.\..\..\Libraries\opus\include;.\..\..\Libraries\opusfile\include;.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++;.\..\..\Libraries\mpg123-1.22.1\src\libmpg123;.\..\..\Libraries\faad2-2.7\include;.\..\..\Libraries\faad2-2.7\common\mp4ff;.\..\..\Libraries\ffmpeg-2.6.3;.\..\..\Libraries\openal-soft\include;.\SourceFiles;.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore;.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui;%(AdditionalIncludeDirectories) ProgramDatabase MultiThreaded false @@ -108,7 +108,7 @@ Windows $(OutDir)$(ProjectName).exe .\..\..\Libraries\lzma\C\Util\LzmaLib\Release;.\..\..\Libraries\libexif-0.6.20\win32\Release;.\..\..\Libraries\ffmpeg-2.6.3;.\..\..\Libraries\opus\win32\VS2010\Win32\Release;.\..\..\Libraries\openal-soft\build\Release;.\..\..\Libraries\zlib-1.2.8\contrib\vstudio\vc11\x86\ZlibStatRelease;.\..\..\Libraries\OpenSSL-Win32\lib\VC\static;$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;gdi32.lib;comdlg32.lib;oleaut32.lib;imm32.lib;winmm.lib;qtmain.lib;glu32.lib;opengl32.lib;Strmiids.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;Qt5Widgets.lib;Qt5Network.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;imageformats\qwebp.lib;libeay32MT.lib;ssleay32MT.lib;Crypt32.lib;zlibstat.lib;lib_exif.lib;UxTheme.lib;DbgHelp.lib;LzmaLib.lib;OpenAL32.lib;common.lib;libavformat\libavformat.a;libavcodec\libavcodec.a;libavutil\libavutil.a;libswresample\libswresample.a;opus.lib;celt.lib;silk_common.lib;silk_float.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;gdi32.lib;comdlg32.lib;oleaut32.lib;imm32.lib;winmm.lib;qtmain.lib;glu32.lib;opengl32.lib;Strmiids.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;qtpcre.lib;qtfreetype.lib;Qt5Widgets.lib;Qt5Network.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;imageformats\qwebp.lib;libeay32MT.lib;ssleay32MT.lib;Crypt32.lib;zlibstat.lib;lib_exif.lib;UxTheme.lib;DbgHelp.lib;LzmaLib.lib;OpenAL32.lib;common.lib;libavformat\libavformat.a;libavcodec\libavcodec.a;libavutil\libavutil.a;libswresample\libswresample.a;opus.lib;celt.lib;silk_common.lib;silk_float.lib;%(AdditionalDependencies) $(SolutionDir)$(Platform)\$(Configuration)Intermediate\$(TargetName).lib $(IntDir)$(TargetName).pgd @@ -119,8 +119,8 @@ - AL_LIBTYPE_STATIC;CUSTOM_API_ID;UNICODE;_WITH_DEBUG;WIN32;WIN64;HAVE_STDINT_H;ZLIB_WINAPI;QT_NO_DEBUG;NDEBUG;%(PreprocessorDefinitions) - .\..\..\Libraries\lzma\C;.\..\..\Libraries\libexif-0.6.20;.\..\..\Libraries\zlib-1.2.8;.\..\..\Libraries\OpenSSL-Win32\include;.\..\..\Libraries\ffmpeg-2.6.3;.\..\..\Libraries\openal-soft\include;.\SourceFiles;.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore;.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui;%(AdditionalIncludeDirectories) + AL_LIBTYPE_STATIC;CUSTOM_API_ID;UNICODE;_WITH_DEBUG;WIN32;WIN64;HAVE_STDINT_H;ZLIB_WINAPI;QT_NO_DEBUG;NDEBUG;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + .\..\..\Libraries\lzma\C;.\..\..\Libraries\libexif-0.6.20;.\..\..\Libraries\zlib-1.2.8;.\..\..\Libraries\OpenSSL-Win32\include;.\..\..\Libraries\ffmpeg-2.6.3;.\..\..\Libraries\openal-soft\include;.\SourceFiles;.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore;.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui;%(AdditionalIncludeDirectories) ProgramDatabase MultiThreaded false @@ -135,7 +135,7 @@ Windows $(OutDir)$(ProjectName).exe .\..\..\Libraries\lzma\C\Util\LzmaLib\Release;.\..\..\Libraries\libexif-0.6.20\win32\Release;.\..\..\Libraries\ffmpeg-2.6.3;.\..\..\Libraries\opus\win32\VS2010\Win32\Release;.\..\..\Libraries\openal-soft\build\Release;.\..\..\Libraries\zlib-1.2.8\contrib\vstudio\vc11\x86\ZlibStatRelease;.\..\..\Libraries\OpenSSL-Win32\lib\VC\static;$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;gdi32.lib;comdlg32.lib;oleaut32.lib;imm32.lib;winmm.lib;qtmain.lib;glu32.lib;opengl32.lib;Strmiids.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;Qt5Widgets.lib;Qt5Network.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;imageformats\qwebp.lib;libeay32MT.lib;ssleay32MT.lib;Crypt32.lib;zlibstat.lib;lib_exif.lib;UxTheme.lib;DbgHelp.lib;LzmaLib.lib;OpenAL32.lib;common.lib;libavformat\libavformat.a;libavcodec\libavcodec.a;libavutil\libavutil.a;libswresample\libswresample.a;opus.lib;celt.lib;silk_common.lib;silk_float.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;gdi32.lib;comdlg32.lib;oleaut32.lib;imm32.lib;winmm.lib;qtmain.lib;glu32.lib;opengl32.lib;Strmiids.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;qtpcre.lib;qtfreetype.lib;Qt5Widgets.lib;Qt5Network.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;imageformats\qwebp.lib;libeay32MT.lib;ssleay32MT.lib;Crypt32.lib;zlibstat.lib;lib_exif.lib;UxTheme.lib;DbgHelp.lib;LzmaLib.lib;OpenAL32.lib;common.lib;libavformat\libavformat.a;libavcodec\libavcodec.a;libavutil\libavutil.a;libswresample\libswresample.a;opus.lib;celt.lib;silk_common.lib;silk_float.lib;%(AdditionalDependencies) $(SolutionDir)$(Platform)\$(Configuration)Intermediate\$(TargetName).lib @@ -1087,26 +1087,26 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing types.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/types.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/types.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing types.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/types.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/types.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing types.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/types.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/types.h" Moc%27ing window.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/window.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/window.h" Moc%27ing window.h... Moc%27ing window.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/window.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/window.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/window.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/window.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1127,13 +1127,13 @@ Moc%27ing application.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/application.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/application.h" Moc%27ing application.h... Moc%27ing application.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/application.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/application.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/application.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/application.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1146,27 +1146,27 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing apiwrap.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/apiwrap.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/apiwrap.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing apiwrap.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/apiwrap.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/apiwrap.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing apiwrap.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/apiwrap.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/apiwrap.h" Moc%27ing aboutbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/aboutbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/aboutbox.h" Moc%27ing aboutbox.h... Moc%27ing aboutbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/aboutbox.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/aboutbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/aboutbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/aboutbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1174,13 +1174,13 @@ Moc%27ing addcontactbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/addcontactbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/addcontactbox.h" Moc%27ing addcontactbox.h... Moc%27ing addcontactbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/addcontactbox.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/addcontactbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/addcontactbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/addcontactbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1188,13 +1188,13 @@ Moc%27ing confirmbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/confirmbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/confirmbox.h" Moc%27ing confirmbox.h... Moc%27ing confirmbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/confirmbox.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/confirmbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/confirmbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/confirmbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1202,13 +1202,13 @@ Moc%27ing connectionbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/connectionbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/connectionbox.h" Moc%27ing connectionbox.h... Moc%27ing connectionbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/connectionbox.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/connectionbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/connectionbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/connectionbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1216,13 +1216,13 @@ Moc%27ing contactsbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/contactsbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/contactsbox.h" Moc%27ing contactsbox.h... Moc%27ing contactsbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/contactsbox.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/contactsbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/contactsbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/contactsbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1230,13 +1230,13 @@ Moc%27ing photocropbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photocropbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photocropbox.h" Moc%27ing photocropbox.h... Moc%27ing photocropbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photocropbox.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photocropbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photocropbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photocropbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1244,13 +1244,13 @@ Moc%27ing photosendbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photosendbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photosendbox.h" Moc%27ing photosendbox.h... Moc%27ing photosendbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photosendbox.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photosendbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photosendbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photosendbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1258,13 +1258,13 @@ Moc%27ing emojibox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/emojibox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/emojibox.h" Moc%27ing emojibox.h... Moc%27ing emojibox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/emojibox.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/emojibox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/emojibox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/emojibox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1272,13 +1272,13 @@ Moc%27ing downloadpathbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/downloadpathbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/downloadpathbox.h" Moc%27ing downloadpathbox.h... Moc%27ing downloadpathbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/downloadpathbox.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/downloadpathbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/downloadpathbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/downloadpathbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1287,153 +1287,153 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing audio.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/audio.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/audio.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing audio.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/audio.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/audio.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing audio.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/audio.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/audio.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing usernamebox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/usernamebox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/usernamebox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing usernamebox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/usernamebox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/usernamebox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing usernamebox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/usernamebox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/usernamebox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing languagebox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/languagebox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/languagebox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing languagebox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/languagebox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/languagebox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing languagebox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/languagebox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/languagebox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing backgroundbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/backgroundbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/backgroundbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing backgroundbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/backgroundbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/backgroundbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing backgroundbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/backgroundbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/backgroundbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing autolockbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/autolockbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/autolockbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing autolockbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/autolockbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/autolockbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing autolockbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/autolockbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/autolockbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing passcodebox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/passcodebox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/passcodebox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing passcodebox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/passcodebox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/passcodebox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing passcodebox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/passcodebox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/passcodebox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing sessionsbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/sessionsbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/sessionsbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing sessionsbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/sessionsbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/sessionsbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing sessionsbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/sessionsbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/sessionsbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing abstractbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/abstractbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/abstractbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing abstractbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/abstractbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/abstractbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing abstractbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/abstractbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/abstractbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing stickersetbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/stickersetbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/stickersetbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing stickersetbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/stickersetbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/stickersetbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing stickersetbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/stickersetbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/stickersetbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing autoupdater.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/autoupdater.h" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/autoupdater.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing autoupdater.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/autoupdater.h" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/autoupdater.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing autoupdater.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/autoupdater.h" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/autoupdater.h" Moc%27ing animation.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/animation.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/animation.h" Moc%27ing animation.h... Moc%27ing animation.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/animation.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/animation.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/animation.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/animation.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1441,13 +1441,13 @@ Moc%27ing button.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/button.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/button.h" Moc%27ing button.h... Moc%27ing button.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/button.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/button.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/button.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/button.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1455,13 +1455,13 @@ Moc%27ing flatbutton.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatbutton.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatbutton.h" Moc%27ing flatbutton.h... Moc%27ing flatbutton.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatbutton.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatbutton.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatbutton.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatbutton.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1469,13 +1469,13 @@ Moc%27ing flatinput.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatinput.h" Moc%27ing flatinput.h... Moc%27ing flatinput.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatinput.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatinput.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1483,13 +1483,13 @@ Moc%27ing countrycodeinput.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countrycodeinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countrycodeinput.h" Moc%27ing countrycodeinput.h... Moc%27ing countrycodeinput.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countrycodeinput.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countrycodeinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countrycodeinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countrycodeinput.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1497,13 +1497,13 @@ Moc%27ing phoneinput.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/phoneinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/phoneinput.h" Moc%27ing phoneinput.h... Moc%27ing phoneinput.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/phoneinput.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/phoneinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/phoneinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/phoneinput.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1511,13 +1511,13 @@ Moc%27ing countryinput.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countryinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countryinput.h" Moc%27ing countryinput.h... Moc%27ing countryinput.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countryinput.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countryinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countryinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countryinput.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1526,13 +1526,13 @@ Moc%27ing scrollarea.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/scrollarea.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/scrollarea.h" Moc%27ing scrollarea.h... Moc%27ing scrollarea.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/scrollarea.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/scrollarea.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/scrollarea.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/scrollarea.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1540,13 +1540,13 @@ Moc%27ing dialogswidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/dialogswidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/dialogswidget.h" Moc%27ing dialogswidget.h... Moc%27ing dialogswidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/dialogswidget.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/dialogswidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/dialogswidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/dialogswidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1554,13 +1554,13 @@ Moc%27ing flattextarea.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flattextarea.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flattextarea.h" Moc%27ing flattextarea.h... Moc%27ing flattextarea.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flattextarea.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flattextarea.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flattextarea.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flattextarea.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1568,13 +1568,13 @@ Moc%27ing fileuploader.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/fileuploader.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/fileuploader.h" Moc%27ing fileuploader.h... Moc%27ing fileuploader.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/fileuploader.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/fileuploader.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/fileuploader.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/fileuploader.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1582,13 +1582,13 @@ Moc%27ing dropdown.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/dropdown.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/dropdown.h" Moc%27ing dropdown.h... Moc%27ing dropdown.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/dropdown.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/dropdown.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/dropdown.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/dropdown.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1598,27 +1598,27 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing contextmenu.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/contextmenu.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/contextmenu.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing contextmenu.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/contextmenu.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/contextmenu.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing contextmenu.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/contextmenu.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/contextmenu.h" Moc%27ing flatcheckbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatcheckbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatcheckbox.h" Moc%27ing flatcheckbox.h... Moc%27ing flatcheckbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatcheckbox.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatcheckbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatcheckbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatcheckbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1647,13 +1647,13 @@ Moc%27ing flatlabel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatlabel.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatlabel.h" Moc%27ing flatlabel.h... Moc%27ing flatlabel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatlabel.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatlabel.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatlabel.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatlabel.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1661,13 +1661,13 @@ Moc%27ing twidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/twidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/twidget.h" Moc%27ing twidget.h... Moc%27ing twidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/twidget.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/twidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/twidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/twidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1677,41 +1677,41 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing switcher.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/switcher.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/switcher.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing switcher.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/switcher.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/switcher.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing switcher.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/switcher.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/switcher.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing history.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/history.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/history.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing history.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/history.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/history.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing history.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/history.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/history.h" Moc%27ing historywidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/historywidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/historywidget.h" Moc%27ing historywidget.h... Moc%27ing historywidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/historywidget.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/historywidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/historywidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/historywidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1719,13 +1719,13 @@ Moc%27ing intro.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intro.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intro.h" Moc%27ing intro.h... Moc%27ing intro.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intro.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intro.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intro.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intro.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1733,13 +1733,13 @@ Moc%27ing introcode.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introcode.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introcode.h" Moc%27ing introcode.h... Moc%27ing introcode.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introcode.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introcode.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introcode.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introcode.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1747,13 +1747,13 @@ Moc%27ing introphone.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introphone.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introphone.h" Moc%27ing introphone.h... Moc%27ing introphone.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introphone.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introphone.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introphone.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introphone.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1761,13 +1761,13 @@ Moc%27ing introsignup.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introsignup.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introsignup.h" Moc%27ing introsignup.h... Moc%27ing introsignup.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introsignup.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introsignup.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introsignup.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introsignup.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1776,27 +1776,27 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing intropwdcheck.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intropwdcheck.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intropwdcheck.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing intropwdcheck.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intropwdcheck.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intropwdcheck.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing intropwdcheck.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intropwdcheck.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intropwdcheck.h" Moc%27ing layerwidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/layerwidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/layerwidget.h" Moc%27ing layerwidget.h... Moc%27ing layerwidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/layerwidget.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/layerwidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/layerwidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/layerwidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1804,13 +1804,13 @@ Moc%27ing localimageloader.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/localimageloader.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/localimageloader.h" Moc%27ing localimageloader.h... Moc%27ing localimageloader.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/localimageloader.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/localimageloader.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/localimageloader.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/localimageloader.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1821,27 +1821,27 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing localstorage.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/localstorage.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/localstorage.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing localstorage.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/localstorage.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/localstorage.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing localstorage.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/localstorage.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/localstorage.h" Moc%27ing mtpConnection.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpConnection.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpConnection.h" Moc%27ing mtpConnection.h... Moc%27ing mtpConnection.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpConnection.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpConnection.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpConnection.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpConnection.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1849,13 +1849,13 @@ Moc%27ing mainwidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mainwidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mainwidget.h" Moc%27ing mainwidget.h... Moc%27ing mainwidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mainwidget.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mainwidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mainwidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mainwidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1863,13 +1863,13 @@ Moc%27ing mtp.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtp.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtp.h" Moc%27ing mtp.h... Moc%27ing mtp.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtp.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtp.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtp.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtp.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1878,27 +1878,27 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing mediaview.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mediaview.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mediaview.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing mediaview.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mediaview.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mediaview.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing mediaview.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mediaview.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mediaview.h" Moc%27ing mtpFileLoader.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpFileLoader.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpFileLoader.h" Moc%27ing mtpFileLoader.h... Moc%27ing mtpFileLoader.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpFileLoader.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpFileLoader.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpFileLoader.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpFileLoader.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1908,13 +1908,13 @@ Moc%27ing mtpDC.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpDC.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpDC.h" Moc%27ing mtpDC.h... Moc%27ing mtpDC.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpDC.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpDC.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpDC.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpDC.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1924,13 +1924,13 @@ Moc%27ing mtpSession.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpSession.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpSession.h" Moc%27ing mtpSession.h... Moc%27ing mtpSession.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpSession.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpSession.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpSession.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpSession.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1938,13 +1938,13 @@ Moc%27ing settingswidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/settingswidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/settingswidget.h" Moc%27ing settingswidget.h... Moc%27ing settingswidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/settingswidget.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/settingswidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/settingswidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/settingswidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1952,13 +1952,13 @@ Moc%27ing profilewidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/profilewidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/profilewidget.h" Moc%27ing profilewidget.h... Moc%27ing profilewidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/profilewidget.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/profilewidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/profilewidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/profilewidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1966,13 +1966,13 @@ Moc%27ing pspecific_wnd.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_wnd.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_wnd.h" Moc%27ing pspecific_wnd.h... Moc%27ing pspecific_wnd.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_wnd.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_wnd.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_wnd.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_wnd.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1982,58 +1982,58 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing overviewwidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/overviewwidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/overviewwidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing overviewwidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/overviewwidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/overviewwidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing overviewwidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/overviewwidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/overviewwidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing passcodewidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/passcodewidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/passcodewidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing passcodewidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/passcodewidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/passcodewidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing passcodewidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/passcodewidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/passcodewidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing playerwidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/playerwidget.h" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/playerwidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing playerwidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/playerwidget.h" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/playerwidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing playerwidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/playerwidget.h" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/playerwidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing pspecific_linux.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_linux.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_linux.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing pspecific_linux.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_linux.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_linux.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing pspecific_linux.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_linux.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_linux.h" true true true @@ -2042,15 +2042,15 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing pspecific_mac.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_mac.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_mac.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing pspecific_mac.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_mac.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_mac.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing pspecific_mac.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_mac.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_mac.h" true true true @@ -2066,13 +2066,13 @@ Moc%27ing sysbuttons.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/sysbuttons.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/sysbuttons.h" Moc%27ing sysbuttons.h... Moc%27ing sysbuttons.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/sysbuttons.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/sysbuttons.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/sysbuttons.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/sysbuttons.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -2080,13 +2080,13 @@ Moc%27ing title.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/title.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/title.h" Moc%27ing title.h... Moc%27ing title.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/title.h" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.4.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.4.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/title.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/title.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/title.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/corelib/tools/qunicodetables.cpp b/Telegram/_qt_5_4_0_patch/qtbase/src/corelib/tools/qunicodetables.cpp deleted file mode 100644 index 2bf3bfdab..000000000 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/corelib/tools/qunicodetables.cpp +++ /dev/null @@ -1,11084 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the QtCore module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL21$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 or version 3 as published by the Free -** Software Foundation and appearing in the file LICENSE.LGPLv21 and -** LICENSE.LGPLv3 included in the packaging of this file. Please review the -** following information to ensure the GNU Lesser General Public License -** requirements will be met: https://www.gnu.org/licenses/lgpl.html and -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/* This file is autogenerated from the Unicode 6.2 database. Do not edit */ - -#include "qunicodetables_p.h" - -QT_BEGIN_NAMESPACE - -namespace QUnicodeTables { - -static const unsigned short uc_property_trie[] = { - // 0 - 0x11000 - - 6256, 6288, 6320, 6352, 6384, 6416, 6448, 6480, - 6512, 6544, 6576, 6608, 6640, 6672, 6704, 6736, - 6768, 6800, 6832, 6864, 6896, 6928, 6960, 6992, - 7024, 7056, 7088, 7120, 7152, 7184, 7216, 7248, - 7280, 7312, 7344, 7376, 7408, 7440, 7472, 7504, - 7536, 7568, 7600, 7632, 7664, 7696, 7728, 7760, - 7792, 7824, 7856, 7888, 7920, 7952, 7984, 8016, - 8048, 8080, 8112, 8144, 8176, 8208, 8240, 8272, - 8304, 8336, 8368, 8400, 8400, 8432, 8464, 8496, - 8528, 8560, 8592, 8624, 8656, 8688, 8720, 8752, - 8784, 8816, 8848, 8880, 8912, 8944, 8976, 9008, - 9040, 9072, 9104, 9136, 9168, 9200, 9232, 9264, - 9296, 9328, 9360, 9392, 9424, 9456, 9488, 9520, - 9552, 9584, 9616, 9648, 9680, 9712, 9744, 9776, - 9808, 9840, 9872, 9904, 9936, 9968, 10000, 9904, - 10032, 10064, 10096, 10128, 10160, 10192, 10224, 9904, - - 10256, 10288, 10320, 10352, 10384, 10416, 10448, 10480, - 10512, 10512, 10544, 10576, 10608, 10640, 10672, 10704, - 10736, 10768, 10800, 10768, 10832, 10864, 10896, 10928, - 10960, 10768, 10992, 11024, 11056, 11088, 11088, 11120, - 11152, 11184, 11184, 11184, 11184, 11184, 11184, 11184, - 11184, 11184, 11184, 11184, 11184, 11184, 11184, 11184, - 11184, 11184, 11184, 11216, 11248, 11280, 11280, 11312, - 11344, 11376, 11408, 11440, 11472, 11504, 11536, 11568, - 11600, 11632, 11664, 11696, 11728, 11760, 11792, 11824, - 11856, 11888, 11920, 11952, 11984, 12016, 12048, 12080, - 12112, 12144, 12176, 12208, 12240, 12272, 9904, 9904, - 12304, 12336, 12368, 12400, 12432, 12464, 12496, 12528, - 12560, 12592, 12624, 12656, 9904, 9904, 12688, 12720, - 12752, 12784, 12816, 12848, 12880, 12912, 12944, 12976, - 13008, 13008, 13008, 13008, 13040, 13008, 13008, 13072, - 13104, 13136, 13168, 13200, 13232, 13264, 13296, 13328, - - 13360, 13392, 13424, 13456, 13488, 13520, 13552, 13584, - 13616, 13648, 13680, 13712, 13744, 13776, 13808, 13840, - 13872, 13904, 13936, 13968, 14000, 14032, 14064, 14096, - 14128, 14160, 14192, 14224, 14256, 14288, 14320, 14352, - 14384, 14416, 14448, 14480, 14512, 14544, 14576, 14608, - 14384, 14384, 14384, 14384, 14640, 14672, 14704, 14736, - 14768, 14800, 14384, 14832, 14864, 14896, 14928, 14960, - 14992, 15024, 15056, 15088, 15120, 15152, 15184, 15216, - 15248, 15248, 15248, 15248, 15248, 15248, 15248, 15248, - 15280, 15280, 15280, 15280, 15312, 15344, 15376, 15408, - 15440, 15472, 15280, 15504, 15536, 15568, 15600, 15632, - 15664, 15696, 15728, 9904, 9904, 9904, 9904, 9904, - 15760, 15792, 15824, 15856, 15888, 15888, 15888, 15920, - 15952, 15984, 16016, 16048, 16080, 16112, 16112, 16144, - 16176, 16208, 9904, 9904, 16240, 16272, 16272, 16304, - 16336, 16336, 16336, 16336, 16336, 16336, 16368, 16400, - - 16432, 16464, 16496, 16528, 16560, 16592, 16624, 16656, - 16688, 16720, 16752, 16752, 16784, 16816, 16848, 16880, - 16912, 16944, 16976, 17008, 16944, 17040, 17072, 17104, - 17136, 17136, 17168, 17200, 17232, 17232, 17264, 17296, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17328, 17328, 17328, - 17328, 17328, 17328, 17328, 17328, 17360, 17392, 17392, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17424, 17424, 17424, - 17424, 17424, 17424, 17424, 17424, 17456, 17488, 17520, - - 17552, 17584, 17584, 17584, 17584, 17584, 17584, 17584, - 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, - 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, - 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, - 17584, 17584, 17584, 17584, 17616, 17648, 17680, 17712, - 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744, - 17776, 17808, 17840, 17872, 17904, 17936, 17936, 17968, - 18000, 18032, 18064, 18096, 18128, 18160, 9904, 18192, - 18224, 18256, 18288, 18320, 18352, 18384, 18416, 18448, - 18480, 18512, 18544, 18576, 18608, 18640, 18672, 9904, - 18704, 18736, 18768, 18800, 18832, 18864, 18896, 18928, - 18960, 18992, 9904, 9904, 9904, 9904, 19024, 19056, - 19088, 19120, 19152, 19184, 19216, 19248, 19280, 19088, - 19120, 19152, 19184, 19216, 19248, 19280, 19088, 19120, - 19152, 19184, 19216, 19248, 19280, 19088, 19120, 19152, - 19184, 19216, 19248, 19280, 19088, 19120, 19152, 19184, - - 19216, 19248, 19280, 19088, 19120, 19152, 19184, 19216, - 19248, 19280, 19088, 19120, 19152, 19184, 19216, 19248, - 19280, 19088, 19120, 19152, 19184, 19216, 19248, 19280, - 19088, 19120, 19152, 19184, 19216, 19248, 19280, 19088, - 19120, 19152, 19184, 19216, 19248, 19280, 19088, 19120, - 19152, 19184, 19216, 19248, 19280, 19088, 19120, 19152, - 19184, 19216, 19248, 19280, 19088, 19120, 19152, 19184, - 19216, 19248, 19280, 19088, 19120, 19152, 19184, 19216, - 19248, 19280, 19088, 19120, 19152, 19184, 19216, 19248, - 19280, 19088, 19120, 19152, 19184, 19216, 19248, 19280, - 19088, 19120, 19152, 19184, 19216, 19248, 19280, 19088, - 19120, 19152, 19184, 19216, 19248, 19280, 19088, 19120, - 19152, 19184, 19216, 19248, 19280, 19088, 19120, 19152, - 19184, 19216, 19248, 19280, 19088, 19120, 19152, 19184, - 19216, 19248, 19280, 19088, 19120, 19152, 19184, 19216, - 19248, 19280, 19088, 19120, 19152, 19184, 19216, 19248, - - 19280, 19088, 19120, 19152, 19184, 19216, 19248, 19280, - 19088, 19120, 19152, 19184, 19216, 19248, 19280, 19088, - 19120, 19152, 19184, 19216, 19248, 19280, 19088, 19120, - 19152, 19184, 19216, 19248, 19280, 19088, 19120, 19152, - 19184, 19216, 19248, 19280, 19088, 19120, 19152, 19184, - 19216, 19248, 19280, 19088, 19120, 19152, 19184, 19216, - 19248, 19280, 19088, 19120, 19152, 19184, 19216, 19248, - 19280, 19088, 19120, 19152, 19184, 19216, 19248, 19280, - 19088, 19120, 19152, 19184, 19216, 19248, 19280, 19088, - 19120, 19152, 19184, 19216, 19248, 19280, 19088, 19120, - 19152, 19184, 19216, 19248, 19280, 19088, 19120, 19152, - 19184, 19216, 19248, 19280, 19088, 19120, 19152, 19184, - 19216, 19248, 19280, 19088, 19120, 19152, 19184, 19216, - 19248, 19280, 19088, 19120, 19152, 19184, 19216, 19248, - 19280, 19088, 19120, 19152, 19184, 19216, 19248, 19280, - 19088, 19120, 19152, 19184, 19216, 19248, 19280, 19088, - - 19120, 19152, 19184, 19216, 19248, 19280, 19088, 19120, - 19152, 19184, 19216, 19248, 19280, 19088, 19120, 19152, - 19184, 19216, 19248, 19280, 19088, 19120, 19152, 19184, - 19216, 19248, 19280, 19088, 19120, 19152, 19184, 19216, - 19248, 19280, 19088, 19120, 19152, 19184, 19216, 19248, - 19280, 19088, 19120, 19152, 19184, 19216, 19248, 19280, - 19088, 19120, 19152, 19184, 19216, 19248, 19280, 19088, - 19120, 19152, 19184, 19216, 19248, 19312, 19344, 19376, - 19408, 19408, 19408, 19408, 19408, 19408, 19408, 19408, - 19408, 19408, 19408, 19408, 19408, 19408, 19408, 19408, - 19408, 19408, 19408, 19408, 19408, 19408, 19408, 19408, - 19408, 19408, 19408, 19408, 19408, 19408, 19408, 19408, - 19408, 19408, 19408, 19408, 19408, 19408, 19408, 19408, - 19408, 19408, 19408, 19408, 19408, 19408, 19408, 19408, - 19408, 19408, 19408, 19408, 19408, 19408, 19408, 19408, - 19408, 19408, 19408, 19408, 19408, 19408, 19408, 19408, - - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19440, 19440, 19440, 19440, 19440, 19440, 19440, 19440, - 19472, 19472, 19472, 19472, 19472, 19472, 19472, 19472, - 19504, 19536, 19568, 19600, 19632, 19632, 19664, 17520, - 19696, 19728, 19760, 19792, 19792, 19824, 19856, 19792, - 19792, 19792, 19792, 19792, 19792, 19792, 19792, 19792, - 19792, 19888, 19920, 19792, 19952, 19792, 19984, 20016, - 20048, 20080, 20112, 20144, 19792, 19792, 19792, 20176, - 20208, 20240, 20272, 20304, 20336, 20368, 20400, 20432, - - 20464, 20496, 20528, 9904, 20560, 20560, 20560, 20592, - 20624, 20656, 20688, 20720, 20752, 9904, 20784, 20816, - 9904, 9904, 9904, 9904, 20848, 20880, 20912, 9904, - 20944, 20976, 21008, 9904, 21040, 21072, 21104, 9904, - 21136, 21168, 21200, 21232, 21264, 21296, 9904, 9904, - 9904, 9904, 9904, 9904, 9904, 9904, 9904, 9904, - 9904, 9904, 9904, 9904, 9904, 9904, 9904, 9904, - 9904, 9904, 9904, 9904, 9904, 9904, 9904, 9904, - 21328, 21360, 21392, 8400, 8400, 8400, 8400, 8400, - 21424, 21456, 8400, 8400, 21488, 21520, 8400, 8400, - 21552, 21584, 21616, 21648, 8400, 8400, 8400, 8400, - 21680, 21712, 21744, 21776, 8400, 8400, 8400, 8400, - 21808, 21808, 21840, 8400, 8400, 8400, 8400, 8400, - 8400, 8400, 8400, 8400, 8400, 8400, 8400, 8400, - 8400, 8400, 8400, 21872, 8400, 8400, 8400, 8400, - 8400, 8400, 8400, 8400, 8400, 8400, 8400, 8400, - - // 0x11000 - 0x110000 - - 21904, 22160, 22416, 22416, 22416, 22416, 22672, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22928, 22928, 22928, 23184, 23440, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 23696, 23696, 23952, 24208, 24464, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 24720, 24720, 24976, 22416, 22416, 22416, 22416, 25232, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 25488, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 25744, 26000, 26256, 26512, 26768, 27024, 27280, 27536, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 27792, 27792, 27792, 27792, 27792, 27792, 28048, 27792, - 28304, 28560, 28816, 29072, 29328, 29584, 29840, 30096, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 30352, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30608, 30608, - 30608, 30608, 30608, 30608, 30608, 30608, 30864, 31120, - 31120, 31120, 31120, 31120, 31120, 31120, 31120, 31120, - 31120, 31120, 31120, 31120, 31120, 31120, 31120, 31376, - 31632, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 32144, 32144, 32400, 31888, 31888, 31888, 31888, 32656, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 31888, - 31888, 31888, 31888, 31888, 31888, 31888, 31888, 32656, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 30352, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 30352, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 30352, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 30352, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 30352, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 30352, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 30352, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 30352, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 30352, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 30352, - 32912, 33168, 33424, 33424, 33424, 33424, 33424, 33424, - 33424, 33424, 33424, 33424, 33424, 33424, 33424, 33424, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 22416, - 22416, 22416, 22416, 22416, 22416, 22416, 22416, 30352, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33936, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33680, - 33680, 33680, 33680, 33680, 33680, 33680, 33680, 33936, - - - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 2, 3, 4, 5, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 6, 6, 7, - - 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 14, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 9, - - 14, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 39, 40, 41, 42, 43, - - 42, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 39, 45, 46, 36, 0, - - 0, 0, 0, 0, 0, 47, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - - 48, 49, 50, 12, 12, 12, 51, 14, - 52, 51, 53, 54, 36, 55, 51, 52, - 56, 57, 58, 59, 60, 61, 14, 62, - 52, 63, 53, 64, 65, 65, 65, 49, - - 66, 66, 66, 66, 66, 66, 38, 66, - 66, 66, 66, 66, 66, 66, 66, 66, - 38, 66, 66, 66, 66, 66, 66, 36, - 38, 66, 66, 66, 66, 66, 38, 67, - - 68, 68, 68, 68, 68, 68, 44, 68, - 68, 68, 68, 68, 68, 68, 68, 68, - 44, 68, 68, 68, 68, 68, 68, 36, - 44, 68, 68, 68, 68, 68, 44, 69, - - 70, 71, 70, 71, 70, 71, 70, 71, - 70, 71, 70, 71, 70, 71, 70, 71, - 72, 73, 70, 71, 70, 71, 70, 71, - 70, 71, 70, 71, 70, 71, 70, 71, - - 70, 71, 70, 71, 70, 71, 72, 73, - 70, 71, 70, 71, 70, 71, 70, 71, - 74, 75, 76, 77, 70, 71, 70, 71, - 78, 70, 71, 70, 71, 70, 71, 76, - - 77, 72, 73, 70, 71, 70, 71, 70, - 71, 79, 72, 73, 70, 71, 70, 71, - 70, 71, 72, 73, 70, 71, 70, 71, - 70, 71, 70, 71, 70, 71, 70, 71, - - 70, 71, 70, 71, 70, 71, 72, 73, - 70, 71, 70, 71, 70, 71, 70, 71, - 70, 71, 70, 71, 70, 71, 70, 71, - 80, 70, 71, 70, 71, 70, 71, 81, - - 82, 83, 72, 73, 72, 73, 84, 72, - 73, 85, 85, 72, 73, 78, 86, 87, - 88, 72, 73, 85, 89, 90, 91, 92, - 72, 73, 93, 78, 91, 94, 95, 96, - - 70, 71, 72, 73, 72, 73, 97, 72, - 73, 97, 78, 78, 72, 73, 97, 70, - 71, 98, 98, 72, 73, 72, 73, 99, - 72, 73, 78, 100, 72, 73, 78, 101, - - 100, 100, 100, 100, 102, 103, 104, 102, - 103, 104, 102, 103, 104, 70, 71, 70, - 71, 70, 71, 70, 71, 70, 71, 70, - 71, 70, 71, 70, 71, 105, 70, 71, - - 70, 71, 70, 71, 72, 73, 70, 71, - 70, 71, 70, 71, 70, 71, 70, 71, - 106, 102, 103, 104, 70, 71, 107, 108, - 109, 110, 70, 71, 70, 71, 70, 71, - - 70, 71, 70, 71, 70, 71, 70, 71, - 70, 71, 70, 71, 70, 71, 70, 71, - 70, 71, 70, 71, 70, 71, 70, 71, - 109, 110, 109, 110, 111, 112, 109, 110, - - 113, 114, 111, 112, 111, 112, 109, 110, - 109, 110, 109, 110, 109, 110, 109, 110, - 109, 110, 109, 110, 114, 114, 114, 115, - 115, 115, 116, 117, 118, 119, 120, 121, - - 121, 117, 122, 123, 124, 125, 126, 122, - 126, 122, 126, 122, 126, 122, 126, 122, - 127, 128, 129, 130, 131, 78, 132, 132, - 78, 133, 78, 134, 78, 78, 78, 78, - - 132, 78, 78, 135, 78, 136, 137, 78, - 138, 139, 78, 140, 78, 78, 78, 139, - 78, 141, 142, 78, 78, 143, 78, 78, - 78, 78, 78, 78, 78, 144, 78, 78, - - 145, 78, 78, 145, 78, 78, 78, 78, - 145, 146, 147, 147, 148, 78, 78, 78, - 78, 78, 149, 78, 100, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, - - 78, 78, 78, 78, 78, 78, 78, 78, - 78, 150, 150, 150, 150, 150, 114, 114, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 152, 152, 153, 153, 153, 153, 153, - - 154, 154, 42, 42, 42, 42, 152, 152, - 155, 152, 152, 152, 155, 152, 152, 152, - 153, 153, 42, 42, 42, 42, 42, 156, - 52, 52, 52, 52, 52, 52, 42, 157, - - 151, 151, 151, 151, 151, 42, 42, 42, - 42, 42, 158, 158, 159, 160, 161, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - - 163, 163, 163, 163, 163, 164, 163, 163, - 163, 163, 163, 163, 163, 164, 164, 163, - 164, 163, 164, 163, 163, 165, 166, 166, - 166, 166, 165, 167, 166, 166, 166, 166, - - 166, 168, 168, 169, 169, 169, 169, 170, - 170, 166, 166, 166, 166, 169, 169, 166, - 169, 169, 166, 166, 171, 171, 171, 171, - 172, 166, 166, 166, 166, 164, 164, 164, - - 173, 173, 163, 173, 173, 174, 175, 176, - 176, 176, 175, 175, 175, 176, 176, 177, - 178, 178, 178, 179, 179, 179, 179, 178, - 180, 181, 181, 182, 183, 184, 184, 185, - - 186, 186, 187, 188, 188, 188, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, - 189, 190, 189, 190, 191, 192, 189, 190, - 193, 193, 194, 195, 195, 195, 196, 193, - - 193, 193, 193, 193, 197, 198, 199, 200, - 201, 201, 201, 193, 202, 193, 203, 203, - 204, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 205, 205, 205, 205, 205, 205, - - 205, 205, 193, 205, 205, 205, 205, 205, - 205, 205, 206, 206, 207, 208, 208, 208, - 209, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, - - 210, 210, 211, 210, 210, 210, 210, 210, - 210, 210, 212, 212, 213, 214, 214, 215, - 216, 217, 218, 219, 219, 220, 221, 222, - 223, 224, 225, 226, 225, 226, 225, 226, - - 225, 226, 227, 228, 227, 228, 227, 228, - 227, 228, 227, 228, 227, 228, 227, 228, - 229, 230, 231, 232, 233, 234, 235, 236, - 237, 238, 236, 237, 239, 240, 240, 240, - - 241, 242, 243, 242, 243, 243, 243, 242, - 243, 243, 243, 243, 242, 241, 242, 243, - 244, 244, 244, 244, 244, 244, 244, 244, - 244, 245, 244, 244, 244, 244, 244, 244, - - 244, 244, 244, 244, 244, 244, 244, 244, - 244, 244, 244, 244, 244, 244, 244, 244, - 246, 246, 246, 246, 246, 246, 246, 246, - 246, 247, 246, 246, 246, 246, 246, 246, - - 246, 246, 246, 246, 246, 246, 246, 246, - 246, 246, 246, 246, 246, 246, 246, 246, - 248, 249, 250, 249, 250, 250, 250, 249, - 250, 250, 250, 250, 249, 248, 249, 250, - - 251, 252, 251, 252, 251, 252, 251, 252, - 251, 252, 251, 252, 251, 252, 251, 252, - 251, 252, 251, 252, 251, 252, 253, 254, - 251, 252, 251, 252, 251, 252, 251, 252, - - 251, 252, 255, 256, 256, 164, 164, 257, - 258, 258, 259, 260, 261, 262, 261, 262, - 251, 252, 251, 252, 251, 252, 251, 252, - 251, 252, 251, 252, 251, 252, 251, 252, - - 251, 252, 251, 252, 251, 252, 251, 252, - 251, 252, 251, 252, 251, 252, 251, 252, - 251, 252, 251, 252, 251, 252, 251, 252, - 251, 252, 251, 252, 251, 252, 251, 252, - - 263, 253, 254, 251, 252, 259, 260, 251, - 252, 259, 260, 251, 252, 259, 260, 264, - 253, 254, 253, 254, 251, 252, 253, 254, - 251, 252, 253, 254, 253, 254, 253, 254, - - 251, 252, 253, 254, 253, 254, 253, 254, - 251, 252, 253, 254, 265, 266, 253, 254, - 253, 254, 253, 254, 253, 254, 267, 268, - 253, 254, 269, 270, 269, 270, 269, 270, - - 259, 260, 259, 260, 259, 260, 259, 260, - 259, 260, 259, 260, 259, 260, 259, 260, - 269, 270, 269, 270, 271, 272, 271, 272, - 271, 272, 271, 272, 271, 272, 271, 272, - - 271, 272, 271, 272, 273, 274, 275, 276, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, - - 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 193, - 193, 278, 279, 279, 280, 281, 280, 279, - - 193, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, - - 282, 282, 282, 282, 282, 282, 282, 283, - 193, 284, 285, 193, 193, 193, 193, 286, - 287, 288, 289, 289, 289, 289, 288, 289, - 289, 289, 290, 288, 289, 289, 289, 289, - - 289, 289, 291, 288, 288, 288, 288, 288, - 289, 289, 288, 289, 289, 290, 292, 289, - 293, 294, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, - - 309, 310, 311, 309, 289, 291, 312, 313, - 287, 287, 287, 287, 287, 287, 287, 287, - 314, 314, 314, 314, 314, 314, 314, 314, - 314, 314, 314, 314, 314, 314, 314, 314, - - 314, 314, 314, 314, 314, 314, 314, 314, - 314, 314, 314, 287, 287, 287, 287, 287, - 314, 314, 314, 315, 316, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - - 317, 317, 317, 317, 318, 319, 320, 320, - 321, 322, 322, 323, 19, 324, 325, 325, - 326, 326, 326, 326, 326, 326, 327, 327, - 328, 329, 330, 331, 332, 319, 333, 334, - - 335, 336, 337, 337, 337, 337, 338, 339, - 340, 339, 340, 340, 340, 340, 340, 339, - 339, 339, 339, 340, 340, 340, 340, 340, - 340, 340, 340, 341, 341, 341, 341, 341, - - 342, 340, 340, 340, 340, 340, 340, 340, - 339, 340, 340, 343, 344, 345, 346, 347, - 348, 349, 350, 351, 351, 352, 353, 326, - 326, 354, 354, 354, 355, 354, 354, 356, - - 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 371, - 372, 339, 339, 339, 336, 373, 373, 373, - 374, 340, 340, 340, 340, 340, 340, 340, - - 340, 340, 340, 340, 340, 340, 340, 340, - 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 340, 340, 340, 340, 340, 340, - - 340, 340, 340, 340, 340, 340, 340, 340, - 340, 340, 340, 340, 340, 340, 340, 340, - 340, 340, 340, 340, 340, 340, 340, 340, - 375, 375, 340, 340, 340, 340, 340, 375, - - 337, 340, 338, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 340, 339, 340, 376, - 340, 340, 339, 337, 377, 339, 378, 378, - 378, 378, 378, 378, 378, 379, 380, 378, - - 378, 378, 378, 381, 378, 382, 382, 378, - 378, 380, 381, 378, 378, 381, 383, 383, - 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 375, 375, 375, 394, 394, 395, - - 396, 396, 396, 397, 397, 397, 397, 397, - 397, 397, 397, 397, 397, 397, 319, 398, - 399, 400, 401, 401, 401, 399, 399, 399, - 399, 399, 401, 401, 401, 401, 399, 401, - - 401, 401, 401, 401, 401, 401, 401, 401, - 399, 401, 399, 401, 399, 402, 402, 403, - 404, 405, 404, 404, 405, 404, 404, 405, - 405, 405, 404, 405, 405, 404, 405, 404, - - 404, 404, 405, 404, 405, 404, 405, 404, - 405, 404, 404, 319, 319, 403, 402, 402, - 406, 406, 406, 406, 406, 406, 406, 406, - 406, 407, 407, 407, 406, 406, 406, 406, - - 406, 406, 406, 406, 406, 406, 406, 406, - 406, 406, 406, 407, 407, 406, 341, 341, - 341, 408, 341, 408, 408, 341, 341, 341, - 408, 408, 341, 341, 341, 341, 341, 341, - - 409, 409, 409, 409, 409, 409, 409, 409, - 409, 409, 409, 409, 409, 409, 409, 409, - 409, 409, 409, 409, 409, 409, 409, 409, - 409, 409, 409, 409, 409, 409, 409, 409, - - 409, 409, 409, 409, 409, 409, 410, 410, - 410, 410, 410, 410, 410, 410, 410, 410, - 410, 411, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - - 412, 413, 414, 415, 416, 417, 418, 419, - 420, 421, 422, 422, 422, 422, 422, 422, - 422, 422, 422, 422, 422, 422, 422, 422, - 422, 422, 422, 422, 422, 422, 422, 422, - - 422, 422, 422, 422, 422, 422, 422, 422, - 422, 422, 422, 423, 423, 423, 423, 423, - 423, 423, 424, 423, 425, 425, 426, 427, - 428, 429, 430, 287, 287, 287, 287, 287, - - 431, 431, 431, 431, 431, 431, 431, 431, - 431, 431, 431, 431, 431, 431, 431, 431, - 431, 431, 431, 431, 431, 431, 432, 432, - 432, 432, 433, 432, 432, 432, 432, 432, - - 432, 432, 432, 432, 433, 432, 432, 432, - 433, 432, 432, 432, 432, 432, 287, 287, - 434, 434, 434, 434, 434, 434, 434, 434, - 434, 434, 434, 434, 434, 434, 434, 287, - - 435, 436, 436, 436, 436, 436, 435, 436, - 436, 435, 436, 436, 436, 436, 436, 435, - 436, 436, 436, 436, 435, 436, 437, 437, - 437, 438, 438, 438, 287, 287, 439, 287, - - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - - 440, 319, 440, 440, 440, 440, 440, 440, - 440, 440, 441, 441, 441, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - - 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - - 319, 319, 319, 319, 442, 442, 443, 442, - 442, 443, 442, 442, 442, 443, 443, 443, - 444, 445, 446, 442, 442, 442, 443, 442, - 442, 443, 443, 442, 442, 442, 442, 319, - - 447, 448, 448, 449, 450, 451, 451, 451, - 451, 451, 451, 451, 451, 451, 451, 451, - 451, 451, 451, 451, 451, 451, 451, 451, - 451, 451, 451, 451, 451, 451, 451, 451, - - 451, 451, 451, 451, 451, 451, 451, 451, - 451, 452, 451, 451, 451, 451, 451, 451, - 451, 452, 451, 451, 452, 451, 451, 451, - 451, 451, 453, 454, 455, 451, 449, 449, - - 449, 448, 448, 448, 448, 448, 448, 448, - 448, 449, 449, 449, 449, 456, 457, 454, - 451, 164, 166, 458, 458, 447, 453, 453, - 459, 459, 459, 459, 459, 459, 459, 459, - - 451, 451, 448, 448, 460, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 474, 474, 474, 474, - 193, 475, 475, 476, 476, 477, 476, 476, - - 193, 478, 479, 479, 193, 480, 480, 480, - 480, 480, 480, 480, 480, 193, 193, 480, - 480, 193, 193, 480, 480, 480, 480, 480, - 480, 480, 480, 480, 480, 480, 480, 480, - - 480, 480, 480, 480, 480, 480, 480, 480, - 480, 193, 480, 480, 480, 480, 480, 480, - 480, 193, 480, 193, 193, 193, 480, 480, - 480, 480, 193, 193, 481, 482, 483, 479, - - 479, 478, 478, 478, 478, 193, 193, 479, - 479, 193, 193, 484, 484, 485, 486, 193, - 193, 193, 193, 193, 193, 193, 193, 483, - 193, 193, 193, 193, 487, 487, 193, 487, - - 480, 480, 478, 478, 193, 193, 488, 489, - 490, 491, 492, 493, 494, 495, 496, 497, - 480, 480, 498, 498, 499, 499, 499, 499, - 499, 500, 501, 502, 193, 193, 193, 193, - - 193, 503, 504, 505, 193, 506, 506, 506, - 506, 506, 506, 193, 193, 193, 193, 506, - 506, 193, 193, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, - - 506, 506, 506, 506, 506, 506, 506, 506, - 506, 193, 506, 506, 506, 506, 506, 506, - 506, 193, 506, 507, 193, 506, 507, 193, - 506, 506, 193, 193, 508, 193, 509, 509, - - 509, 504, 504, 193, 193, 193, 193, 504, - 504, 193, 193, 504, 504, 510, 193, 193, - 193, 511, 193, 193, 193, 193, 193, 193, - 193, 507, 507, 507, 506, 193, 507, 193, - - 193, 193, 193, 193, 193, 193, 512, 513, - 514, 515, 516, 517, 518, 519, 520, 521, - 504, 504, 506, 506, 506, 511, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 193, 522, 522, 523, 193, 524, 524, 524, - 524, 524, 524, 524, 525, 524, 193, 524, - 524, 524, 193, 524, 524, 524, 524, 524, - 524, 524, 524, 524, 524, 524, 524, 524, - - 524, 524, 524, 524, 524, 524, 524, 524, - 524, 193, 524, 524, 524, 524, 524, 524, - 524, 193, 524, 524, 193, 524, 524, 524, - 524, 524, 193, 193, 526, 524, 523, 523, - - 523, 522, 522, 522, 522, 522, 193, 522, - 522, 523, 193, 523, 523, 527, 193, 193, - 524, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 524, 525, 528, 528, 193, 193, 529, 530, - 531, 532, 533, 534, 535, 536, 537, 538, - 539, 540, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 193, 541, 542, 542, 193, 543, 543, 543, - 543, 543, 543, 543, 543, 193, 193, 543, - 543, 193, 193, 543, 543, 543, 543, 543, - 543, 543, 543, 543, 543, 543, 543, 543, - - 543, 543, 543, 543, 543, 543, 543, 543, - 543, 193, 543, 543, 543, 543, 543, 543, - 543, 193, 543, 543, 193, 544, 543, 543, - 543, 543, 193, 193, 545, 543, 546, 541, - - 542, 541, 541, 541, 547, 193, 193, 542, - 548, 193, 193, 548, 548, 549, 193, 193, - 193, 193, 193, 193, 193, 193, 550, 546, - 193, 193, 193, 193, 551, 551, 193, 543, - - 543, 543, 547, 547, 193, 193, 552, 553, - 554, 555, 556, 557, 558, 559, 560, 561, - 562, 544, 563, 563, 563, 563, 563, 563, - 193, 193, 193, 193, 193, 193, 193, 193, - - 193, 193, 564, 565, 193, 565, 565, 565, - 565, 565, 565, 193, 193, 193, 565, 565, - 565, 193, 565, 565, 566, 565, 193, 193, - 193, 565, 565, 193, 565, 193, 565, 565, - - 193, 193, 193, 565, 565, 193, 193, 193, - 565, 565, 565, 193, 193, 193, 565, 565, - 565, 565, 565, 565, 565, 565, 567, 565, - 565, 565, 193, 193, 193, 193, 568, 569, - - 564, 569, 569, 193, 193, 193, 569, 569, - 569, 193, 570, 570, 570, 571, 193, 193, - 572, 193, 193, 193, 193, 193, 193, 568, - 193, 193, 193, 193, 193, 193, 193, 193, - - 193, 193, 193, 193, 193, 193, 573, 574, - 575, 576, 577, 578, 579, 580, 581, 582, - 583, 583, 583, 584, 584, 584, 584, 584, - 584, 585, 584, 193, 193, 193, 193, 193, - - 193, 586, 586, 586, 193, 587, 587, 587, - 587, 587, 587, 587, 587, 193, 587, 587, - 587, 193, 587, 587, 587, 587, 587, 587, - 587, 587, 587, 587, 587, 587, 587, 587, - - 587, 587, 587, 587, 587, 587, 587, 587, - 587, 193, 587, 587, 587, 587, 587, 587, - 587, 587, 587, 587, 193, 587, 587, 587, - 587, 587, 193, 193, 193, 588, 589, 589, - - 589, 586, 586, 586, 586, 193, 589, 589, - 590, 193, 589, 589, 589, 591, 193, 193, - 193, 193, 193, 193, 193, 592, 593, 193, - 588, 588, 193, 193, 193, 193, 193, 193, - - 587, 587, 594, 594, 193, 193, 595, 596, - 597, 598, 599, 600, 601, 602, 603, 604, - 193, 193, 193, 193, 193, 193, 193, 193, - 605, 605, 605, 605, 605, 605, 605, 606, - - 193, 193, 607, 607, 193, 608, 608, 608, - 608, 608, 608, 608, 608, 193, 608, 608, - 608, 193, 608, 608, 608, 608, 608, 608, - 608, 608, 608, 608, 608, 608, 608, 608, - - 608, 608, 608, 608, 608, 608, 608, 608, - 608, 193, 608, 608, 608, 608, 608, 608, - 608, 608, 608, 608, 193, 608, 608, 608, - 608, 608, 193, 193, 609, 610, 607, 611, - - 612, 607, 613, 607, 607, 193, 611, 612, - 612, 193, 612, 612, 614, 615, 193, 193, - 193, 193, 193, 193, 193, 613, 613, 193, - 193, 193, 193, 193, 193, 193, 608, 193, - - 608, 608, 616, 616, 193, 193, 617, 618, - 619, 620, 621, 622, 623, 624, 625, 626, - 193, 627, 627, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 193, 193, 628, 628, 193, 629, 629, 629, - 629, 629, 629, 629, 629, 193, 629, 629, - 629, 193, 629, 629, 629, 629, 629, 629, - 629, 629, 629, 629, 629, 629, 629, 629, - - 629, 629, 629, 629, 629, 629, 629, 629, - 629, 630, 629, 629, 629, 629, 629, 629, - 629, 629, 629, 629, 629, 629, 629, 629, - 629, 629, 630, 193, 193, 631, 632, 628, - - 628, 633, 633, 633, 634, 193, 628, 628, - 628, 193, 635, 635, 635, 636, 630, 193, - 193, 193, 193, 193, 193, 193, 193, 632, - 193, 193, 193, 193, 193, 193, 193, 193, - - 629, 629, 634, 634, 193, 193, 637, 638, - 639, 640, 641, 642, 643, 644, 645, 646, - 647, 647, 647, 647, 647, 647, 193, 193, - 193, 648, 631, 631, 631, 631, 631, 631, - - 193, 193, 649, 649, 193, 650, 650, 650, - 650, 650, 650, 650, 650, 650, 650, 650, - 650, 650, 650, 650, 650, 650, 650, 193, - 193, 193, 650, 650, 650, 650, 650, 650, - - 650, 650, 650, 650, 650, 650, 650, 650, - 650, 650, 650, 650, 650, 650, 650, 650, - 650, 650, 193, 650, 650, 650, 650, 650, - 650, 650, 650, 650, 193, 650, 193, 193, - - 650, 650, 650, 650, 650, 650, 650, 193, - 193, 193, 651, 193, 193, 193, 193, 652, - 649, 649, 653, 653, 653, 193, 653, 193, - 649, 649, 654, 649, 654, 654, 654, 652, - - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 649, 649, 655, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 193, 656, 656, 656, 656, 656, 656, 656, - 656, 656, 656, 656, 656, 656, 656, 656, - 656, 656, 656, 656, 656, 656, 656, 656, - 656, 656, 656, 656, 656, 656, 656, 656, - - 656, 656, 656, 656, 656, 656, 656, 656, - 656, 656, 656, 656, 656, 656, 656, 656, - 656, 657, 656, 658, 657, 657, 657, 657, - 659, 659, 660, 193, 193, 193, 193, 12, - - 656, 656, 656, 656, 656, 656, 661, 657, - 662, 662, 662, 662, 657, 657, 657, 663, - 664, 665, 666, 667, 668, 669, 670, 671, - 672, 673, 674, 674, 193, 193, 193, 193, - - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 193, 675, 675, 193, 675, 193, 193, 675, - 675, 193, 675, 193, 193, 675, 193, 193, - 193, 193, 193, 193, 675, 675, 675, 675, - 193, 675, 675, 675, 675, 675, 675, 675, - - 193, 675, 675, 675, 193, 675, 193, 675, - 193, 193, 675, 675, 193, 675, 675, 675, - 675, 676, 675, 677, 676, 676, 676, 676, - 678, 678, 193, 676, 676, 675, 193, 193, - - 675, 675, 675, 675, 675, 193, 679, 193, - 680, 680, 680, 680, 676, 676, 193, 193, - 681, 682, 683, 684, 685, 686, 687, 688, - 689, 690, 193, 193, 691, 691, 692, 692, - - 693, 694, 694, 694, 695, 696, 695, 695, - 697, 695, 695, 698, 699, 700, 700, 700, - 700, 700, 697, 701, 700, 701, 701, 701, - 702, 702, 701, 701, 701, 701, 701, 701, - - 703, 704, 705, 706, 707, 708, 709, 710, - 711, 712, 713, 713, 713, 713, 713, 713, - 713, 713, 713, 713, 714, 702, 701, 702, - 701, 715, 716, 717, 716, 717, 718, 718, - - 693, 693, 693, 719, 693, 693, 693, 693, - 193, 693, 693, 693, 693, 719, 693, 693, - 693, 693, 719, 693, 693, 693, 693, 719, - 693, 693, 693, 693, 719, 693, 693, 693, - - 693, 693, 693, 693, 693, 693, 693, 693, - 693, 719, 720, 721, 721, 193, 193, 193, - 193, 722, 723, 724, 725, 724, 724, 726, - 724, 726, 723, 723, 723, 723, 727, 728, - - 723, 724, 729, 729, 730, 698, 729, 729, - 693, 693, 693, 693, 731, 732, 732, 732, - 727, 727, 727, 724, 727, 727, 733, 727, - 193, 727, 727, 727, 727, 724, 727, 727, - - 727, 727, 724, 727, 727, 727, 727, 724, - 727, 727, 727, 727, 724, 727, 733, 733, - 733, 727, 727, 727, 727, 727, 727, 727, - 733, 724, 733, 733, 733, 193, 734, 734, - - 735, 735, 735, 735, 735, 735, 736, 735, - 735, 735, 735, 735, 735, 193, 737, 735, - 738, 738, 739, 740, 741, 742, 742, 742, - 742, 743, 743, 193, 193, 193, 193, 193, - - 744, 744, 744, 744, 744, 744, 744, 744, - 744, 744, 744, 744, 744, 744, 744, 744, - 744, 744, 744, 744, 744, 744, 744, 744, - 744, 744, 744, 744, 744, 744, 744, 744, - - 744, 744, 745, 744, 744, 744, 746, 744, - 745, 744, 744, 747, 748, 749, 750, 749, - 749, 751, 749, 752, 752, 752, 749, 753, - 748, 754, 755, 756, 756, 752, 752, 745, - - 757, 758, 759, 760, 761, 762, 763, 764, - 765, 766, 767, 767, 768, 768, 768, 768, - 744, 744, 744, 744, 744, 744, 751, 751, - 749, 749, 745, 745, 745, 745, 752, 752, - - 752, 745, 747, 747, 747, 745, 745, 747, - 747, 747, 747, 747, 747, 747, 745, 745, - 745, 752, 752, 752, 752, 745, 745, 745, - 745, 745, 745, 745, 745, 745, 745, 745, - - 745, 745, 752, 747, 756, 752, 752, 747, - 747, 747, 747, 747, 747, 769, 745, 747, - 770, 771, 772, 773, 774, 775, 776, 777, - 778, 779, 780, 780, 780, 781, 782, 782, - - 783, 783, 783, 783, 783, 783, 783, 783, - 783, 783, 783, 783, 783, 783, 783, 783, - 783, 783, 783, 783, 783, 783, 783, 783, - 783, 783, 783, 783, 783, 783, 783, 783, - - 783, 783, 783, 783, 783, 783, 193, 784, - 193, 193, 193, 193, 193, 784, 193, 193, - 785, 785, 785, 785, 785, 785, 785, 785, - 785, 785, 785, 785, 785, 785, 785, 785, - - 785, 785, 785, 785, 785, 785, 785, 785, - 785, 785, 785, 785, 785, 785, 785, 785, - 785, 785, 785, 785, 785, 785, 785, 786, - 786, 787, 787, 788, 789, 790, 790, 790, - - 791, 791, 791, 791, 791, 791, 791, 791, - 791, 791, 791, 791, 791, 791, 791, 791, - 791, 791, 791, 791, 791, 791, 791, 791, - 791, 791, 791, 791, 791, 791, 791, 791, - - 791, 791, 791, 791, 791, 791, 791, 791, - 791, 791, 791, 791, 791, 791, 791, 791, - 791, 791, 791, 791, 791, 791, 791, 791, - 791, 791, 792, 792, 792, 792, 792, 791, - - 793, 794, 794, 794, 794, 794, 794, 794, - 794, 794, 794, 794, 794, 794, 794, 794, - 794, 794, 794, 794, 794, 794, 793, 793, - 793, 793, 793, 793, 793, 793, 793, 793, - - 793, 793, 793, 793, 793, 793, 793, 793, - 793, 793, 793, 793, 793, 793, 793, 793, - 793, 793, 793, 793, 793, 793, 793, 793, - 793, 793, 793, 793, 793, 793, 793, 793, - - 793, 793, 793, 795, 795, 795, 795, 795, - 796, 796, 796, 796, 796, 796, 796, 796, - 796, 796, 796, 796, 796, 796, 796, 796, - 796, 796, 796, 796, 796, 796, 796, 796, - - 796, 796, 796, 797, 797, 797, 797, 797, - 797, 797, 797, 797, 797, 797, 797, 797, - 797, 797, 797, 797, 797, 797, 797, 797, - 797, 797, 797, 797, 797, 797, 797, 797, - - 797, 797, 797, 797, 797, 797, 797, 797, - 797, 797, 797, 797, 797, 797, 797, 797, - 797, 797, 797, 797, 797, 797, 797, 797, - 797, 797, 798, 798, 798, 798, 798, 798, - - 799, 799, 799, 799, 799, 799, 799, 800, - 799, 799, 799, 799, 799, 799, 799, 799, - 799, 799, 799, 799, 799, 799, 799, 799, - 799, 799, 799, 799, 799, 799, 799, 799, - - 799, 799, 799, 799, 799, 799, 799, 799, - 799, 799, 799, 799, 799, 799, 799, 799, - 799, 799, 799, 799, 799, 799, 799, 799, - 799, 799, 799, 799, 799, 799, 799, 799, - - 799, 799, 799, 799, 799, 799, 799, 800, - 799, 193, 799, 799, 799, 799, 193, 193, - 799, 799, 799, 799, 799, 799, 799, 193, - 799, 193, 799, 799, 799, 799, 193, 193, - - 799, 799, 799, 799, 799, 799, 799, 800, - 799, 193, 799, 799, 799, 799, 193, 193, - 799, 799, 799, 799, 799, 799, 799, 799, - 799, 799, 799, 799, 799, 799, 799, 799, - - 799, 799, 799, 799, 799, 799, 799, 799, - 799, 799, 799, 799, 799, 799, 799, 800, - 799, 193, 799, 799, 799, 799, 193, 193, - 799, 799, 799, 799, 799, 799, 799, 193, - - 799, 193, 799, 799, 799, 799, 193, 193, - 799, 799, 799, 799, 799, 799, 799, 800, - 799, 799, 799, 799, 799, 799, 799, 193, - 799, 799, 799, 799, 799, 799, 799, 799, - - 799, 799, 799, 799, 799, 799, 799, 799, - 799, 799, 799, 799, 799, 799, 799, 800, - 799, 799, 799, 799, 799, 799, 799, 799, - 799, 799, 799, 799, 799, 799, 799, 799, - - 799, 799, 799, 799, 799, 799, 799, 799, - 799, 799, 799, 799, 799, 799, 799, 800, - 799, 193, 799, 799, 799, 799, 193, 193, - 799, 799, 799, 799, 799, 799, 799, 800, - - 799, 799, 799, 799, 799, 799, 799, 800, - 799, 799, 799, 799, 799, 799, 799, 799, - 799, 799, 799, 799, 799, 799, 799, 799, - 799, 799, 799, 193, 193, 801, 801, 802, - - 803, 804, 805, 806, 806, 806, 806, 805, - 805, 807, 808, 809, 810, 811, 812, 813, - 814, 815, 816, 816, 816, 816, 816, 816, - 816, 816, 816, 816, 816, 193, 193, 193, - - 800, 800, 800, 800, 800, 800, 800, 800, - 800, 800, 800, 800, 800, 800, 800, 800, - 817, 817, 817, 817, 817, 817, 817, 817, - 817, 817, 193, 193, 193, 193, 193, 193, - - 818, 818, 818, 818, 818, 818, 818, 818, - 818, 818, 818, 818, 818, 818, 818, 818, - 818, 818, 818, 818, 818, 818, 818, 818, - 818, 818, 818, 818, 818, 818, 818, 818, - - 818, 818, 818, 818, 818, 818, 818, 818, - 818, 818, 818, 818, 818, 818, 818, 818, - 818, 818, 818, 818, 818, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 819, 820, 820, 820, 820, 820, 820, 820, - 820, 820, 820, 820, 820, 820, 820, 820, - 820, 820, 820, 820, 820, 820, 820, 820, - 820, 820, 820, 820, 820, 820, 820, 820, - - 820, 820, 820, 820, 820, 820, 820, 820, - 820, 820, 820, 820, 820, 820, 820, 820, - 820, 820, 820, 820, 820, 820, 820, 820, - 820, 820, 820, 820, 820, 820, 820, 820, - - 820, 820, 820, 820, 820, 820, 820, 820, - 820, 820, 820, 820, 820, 821, 822, 820, - 820, 820, 820, 820, 820, 820, 820, 823, - 823, 823, 823, 823, 823, 823, 823, 823, - - 824, 825, 825, 825, 825, 825, 825, 825, - 825, 825, 825, 825, 825, 825, 825, 825, - 825, 825, 825, 825, 825, 825, 825, 825, - 825, 825, 825, 826, 827, 193, 193, 193, - - 828, 828, 828, 828, 828, 828, 828, 828, - 828, 828, 828, 828, 828, 828, 828, 828, - 828, 828, 828, 828, 828, 828, 828, 828, - 828, 828, 828, 828, 828, 828, 828, 828, - - 828, 828, 828, 828, 828, 828, 828, 828, - 828, 828, 828, 829, 829, 829, 830, 830, - 830, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 193, 831, 831, - 831, 831, 832, 832, 833, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 834, 834, 834, 834, 834, 834, 834, 834, - 834, 834, 834, 834, 834, 834, 834, 834, - 834, 834, 835, 835, 836, 837, 837, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 838, 838, 838, 838, 838, 838, 838, 838, - 838, 838, 838, 838, 838, 838, 838, 838, - 838, 838, 839, 839, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 840, 840, 840, 840, 840, 840, 840, 840, - 840, 840, 840, 840, 840, 193, 840, 840, - 840, 193, 841, 841, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 842, 842, 842, 842, 842, 842, 842, 842, - 842, 842, 842, 842, 842, 842, 842, 842, - 842, 842, 842, 842, 842, 842, 842, 842, - 842, 842, 842, 842, 842, 842, 842, 842, - - 842, 842, 842, 842, 842, 842, 842, 842, - 842, 842, 842, 842, 842, 842, 842, 842, - 842, 842, 842, 842, 843, 843, 844, 843, - 843, 843, 843, 843, 843, 843, 844, 844, - - 844, 844, 844, 844, 844, 844, 843, 844, - 844, 843, 843, 843, 843, 843, 843, 843, - 843, 843, 845, 843, 846, 846, 847, 848, - 846, 849, 846, 850, 842, 851, 193, 193, - - 852, 853, 854, 855, 856, 857, 858, 859, - 860, 861, 193, 193, 193, 193, 193, 193, - 862, 862, 862, 862, 862, 862, 862, 862, - 862, 862, 193, 193, 193, 193, 193, 193, - - 863, 863, 864, 865, 866, 867, 868, 869, - 870, 871, 872, 873, 873, 873, 874, 193, - 875, 876, 877, 878, 879, 880, 881, 882, - 883, 884, 193, 193, 193, 193, 193, 193, - - 885, 885, 885, 885, 885, 885, 885, 885, - 885, 885, 885, 885, 885, 885, 885, 885, - 885, 885, 885, 885, 885, 885, 885, 885, - 885, 885, 885, 885, 885, 885, 885, 885, - - 885, 885, 885, 886, 885, 885, 885, 885, - 885, 885, 885, 885, 885, 885, 885, 885, - 885, 885, 885, 885, 885, 885, 885, 885, - 885, 885, 885, 885, 885, 885, 885, 885, - - 885, 885, 885, 885, 885, 885, 885, 885, - 885, 885, 885, 885, 885, 885, 885, 885, - 885, 885, 885, 885, 885, 885, 885, 885, - 193, 193, 193, 193, 193, 193, 193, 193, - - 887, 887, 887, 887, 887, 887, 887, 885, - 885, 885, 885, 885, 885, 885, 885, 885, - 885, 885, 885, 885, 885, 885, 885, 885, - 885, 885, 885, 885, 885, 885, 885, 885, - - 885, 885, 885, 885, 885, 885, 885, 885, - 885, 888, 889, 193, 193, 193, 193, 193, - 823, 823, 823, 823, 823, 823, 823, 823, - 823, 823, 823, 823, 823, 823, 823, 823, - - 823, 823, 823, 823, 823, 823, 823, 823, - 823, 823, 823, 823, 823, 823, 823, 823, - 823, 823, 823, 823, 823, 823, 823, 823, - 823, 823, 823, 823, 823, 823, 823, 823, - - 823, 823, 823, 823, 823, 823, 823, 823, - 823, 823, 823, 823, 823, 823, 823, 823, - 823, 823, 823, 823, 823, 823, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 890, 890, 890, 890, 890, 890, 890, 890, - 890, 890, 890, 890, 890, 890, 890, 890, - 890, 890, 890, 890, 890, 890, 890, 890, - 890, 890, 890, 890, 890, 193, 193, 193, - - 891, 891, 891, 892, 892, 892, 892, 891, - 891, 892, 892, 892, 193, 193, 193, 193, - 892, 892, 891, 892, 892, 892, 892, 892, - 892, 893, 894, 895, 193, 193, 193, 193, - - 896, 193, 193, 193, 897, 897, 898, 899, - 900, 901, 902, 903, 904, 905, 906, 907, - 908, 908, 908, 908, 908, 908, 908, 908, - 908, 908, 908, 908, 908, 908, 908, 908, - - 908, 908, 908, 908, 908, 908, 908, 908, - 908, 908, 908, 908, 908, 908, 193, 193, - 908, 908, 908, 908, 908, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 909, 909, 909, 909, 909, 909, 909, 909, - 909, 909, 909, 909, 909, 909, 909, 909, - 909, 909, 909, 909, 909, 909, 909, 909, - 909, 909, 909, 909, 909, 909, 909, 909, - - 909, 909, 909, 909, 909, 909, 909, 909, - 909, 909, 910, 910, 193, 193, 193, 193, - 911, 911, 911, 911, 911, 912, 912, 912, - 911, 911, 912, 911, 911, 911, 911, 911, - - 911, 909, 909, 909, 909, 909, 909, 909, - 911, 911, 193, 193, 193, 193, 193, 193, - 913, 914, 915, 916, 917, 918, 919, 920, - 921, 922, 923, 193, 193, 193, 924, 924, - - 925, 925, 925, 925, 925, 925, 925, 925, - 925, 925, 925, 925, 925, 925, 925, 925, - 925, 925, 925, 925, 925, 925, 925, 925, - 925, 925, 925, 925, 925, 925, 925, 925, - - 926, 926, 926, 926, 926, 926, 926, 926, - 926, 926, 926, 926, 926, 926, 926, 926, - 926, 926, 926, 926, 926, 926, 926, 927, - 928, 929, 929, 930, 193, 193, 931, 931, - - 932, 932, 932, 932, 932, 932, 932, 932, - 932, 932, 932, 932, 932, 932, 932, 932, - 932, 932, 932, 932, 932, 932, 932, 932, - 932, 932, 932, 932, 932, 932, 932, 932, - - 932, 932, 932, 932, 932, 932, 932, 932, - 932, 932, 932, 932, 932, 932, 932, 932, - 932, 932, 932, 932, 932, 933, 934, 933, - 934, 934, 934, 934, 934, 934, 934, 193, - - 935, 936, 934, 936, 936, 934, 934, 934, - 934, 934, 934, 934, 934, 933, 933, 933, - 933, 933, 933, 934, 934, 937, 937, 937, - 937, 937, 937, 937, 937, 193, 193, 938, - - 939, 940, 941, 942, 943, 944, 945, 946, - 947, 948, 193, 193, 193, 193, 193, 193, - 939, 940, 941, 942, 943, 944, 945, 946, - 947, 948, 193, 193, 193, 193, 193, 193, - - 949, 949, 949, 949, 949, 949, 949, 950, - 951, 951, 951, 951, 949, 949, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 952, 952, 952, 952, 953, 954, 955, 954, - 955, 954, 955, 954, 955, 954, 955, 954, - 954, 954, 955, 954, 954, 954, 954, 954, - 954, 954, 954, 954, 954, 954, 954, 954, - - 954, 954, 954, 954, 954, 954, 954, 954, - 954, 954, 954, 954, 954, 954, 954, 954, - 954, 954, 954, 954, 956, 957, 952, 952, - 952, 952, 952, 958, 952, 958, 953, 953, - - 958, 958, 952, 958, 959, 954, 954, 954, - 954, 954, 954, 954, 193, 193, 193, 193, - 960, 961, 962, 963, 964, 965, 966, 967, - 968, 969, 970, 970, 971, 972, 970, 970, - - 972, 973, 973, 973, 973, 973, 973, 973, - 973, 973, 973, 974, 975, 974, 974, 974, - 974, 974, 974, 974, 973, 973, 973, 973, - 973, 973, 973, 973, 973, 193, 193, 193, - - 976, 976, 977, 978, 978, 978, 978, 978, - 978, 978, 978, 978, 978, 978, 978, 978, - 978, 978, 978, 978, 978, 978, 978, 978, - 978, 978, 978, 978, 978, 978, 978, 978, - - 978, 977, 976, 976, 976, 976, 977, 977, - 976, 976, 979, 980, 981, 981, 978, 978, - 982, 983, 984, 985, 986, 987, 988, 989, - 990, 991, 992, 992, 992, 992, 992, 992, - - 993, 993, 993, 993, 993, 993, 993, 993, - 993, 993, 993, 993, 993, 993, 993, 993, - 993, 993, 993, 993, 993, 993, 993, 993, - 993, 993, 993, 993, 993, 993, 993, 993, - - 993, 993, 993, 993, 993, 993, 994, 995, - 996, 996, 995, 995, 995, 996, 995, 996, - 996, 996, 997, 997, 193, 193, 193, 193, - 193, 193, 193, 193, 998, 998, 998, 998, - - 999, 999, 999, 999, 999, 999, 999, 999, - 999, 999, 999, 999, 999, 999, 999, 999, - 999, 999, 999, 999, 999, 999, 999, 999, - 999, 999, 999, 999, 999, 999, 999, 999, - - 999, 999, 999, 999, 1000, 1000, 1000, 1000, - 1000, 1000, 1000, 1000, 1001, 1001, 1001, 1001, - 1001, 1001, 1001, 1001, 1000, 1000, 1001, 1002, - 193, 193, 193, 1003, 1003, 1004, 1004, 1004, - - 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, - 1013, 1014, 193, 193, 193, 999, 999, 999, - 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, - 1023, 1024, 1025, 1025, 1025, 1025, 1025, 1025, - - 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, - 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, - 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, - 1026, 1026, 1026, 1026, 1026, 1026, 1027, 1027, - - 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, - 193, 193, 193, 193, 193, 193, 193, 193, - 1029, 1029, 1029, 1030, 1031, 1032, 1032, 1032, - 1032, 1032, 1029, 1029, 1032, 1032, 1032, 1032, - - 1029, 1033, 1031, 1031, 1031, 1031, 1031, 1031, - 1031, 1034, 1034, 1034, 1034, 1032, 1034, 1034, - 1034, 1034, 1033, 1035, 1036, 1037, 1037, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 114, - - 114, 114, 114, 114, 114, 114, 1038, 1038, - 1038, 1038, 1038, 1039, 1040, 1040, 1040, 1041, - 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, - 1040, 1040, 1040, 1041, 1040, 1040, 1040, 1040, - - 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, - 1040, 1040, 1040, 1040, 1040, 1040, 1041, 1040, - 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, - 1040, 1040, 1040, 1040, 1040, 1042, 1042, 1042, - - 1042, 1042, 1040, 1040, 1040, 1040, 1042, 1042, - 1042, 1042, 1042, 114, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 1043, 1044, 115, 115, 115, 1045, 115, 115, - - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 1046, 1046, 1046, 1046, 1046, - - 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, - 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, - 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, - 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1047, - - 182, 182, 181, 182, 1048, 1048, 1048, 1048, - 1048, 1048, 1049, 1050, 1050, 1051, 1052, 1053, - 1054, 1050, 1050, 1050, 1050, 1050, 1050, 1050, - 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, - - 1050, 1050, 1050, 1050, 1050, 1050, 1050, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 1055, 1032, 1048, 1049, - - 70, 71, 70, 71, 70, 71, 70, 71, - 70, 71, 70, 71, 70, 71, 70, 71, - 70, 71, 70, 71, 70, 71, 70, 71, - 70, 71, 70, 71, 70, 71, 70, 71, - - 70, 71, 70, 71, 70, 71, 70, 71, - 70, 71, 70, 71, 70, 71, 70, 71, - 70, 71, 70, 71, 70, 71, 1056, 1057, - 1058, 1059, 1060, 1061, 1062, 1062, 1063, 1062, - - 70, 71, 70, 71, 70, 71, 70, 71, - 70, 71, 70, 71, 70, 71, 70, 71, - 70, 71, 70, 71, 70, 71, 70, 71, - 70, 71, 1064, 1065, 1064, 1065, 1064, 1065, - - 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, - 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, - 1066, 1066, 1066, 1066, 1066, 1066, 193, 193, - 1067, 1067, 1067, 1067, 1067, 1067, 193, 193, - - 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, - 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, - 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, - 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, - - 1066, 1066, 1066, 1066, 1066, 1066, 193, 193, - 1067, 1067, 1067, 1067, 1067, 1067, 193, 193, - 1068, 1066, 1069, 1066, 1070, 1066, 1071, 1066, - 193, 1067, 193, 1067, 193, 1067, 193, 1067, - - 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, - 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, - 1072, 1073, 1074, 1075, 1074, 1075, 1076, 1077, - 1078, 1079, 1080, 1081, 1082, 1083, 193, 193, - - 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, - 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, - 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, - 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, - - 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, - 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, - 1066, 1066, 1132, 1133, 1134, 193, 1135, 1136, - 1067, 1067, 1137, 1138, 1139, 197, 1140, 197, - - 197, 1141, 1142, 1143, 1144, 193, 1145, 1146, - 1147, 1148, 1147, 1148, 1149, 1141, 1141, 1141, - 1066, 1066, 1150, 1151, 193, 193, 1152, 1153, - 1067, 1067, 1154, 1155, 193, 1141, 1141, 1141, - - 1066, 1066, 1156, 1157, 1158, 1159, 1160, 1161, - 1067, 1067, 1162, 1163, 1164, 1141, 1165, 1165, - 193, 193, 1166, 1167, 1168, 193, 1169, 1170, - 1171, 1172, 1173, 1174, 1175, 1176, 197, 193, - - 1177, 1177, 1178, 1178, 1178, 1178, 1178, 1179, - 1178, 1178, 1178, 1180, 1181, 1182, 1183, 1184, - 1185, 1186, 1185, 1187, 1188, 1189, 14, 1190, - 1191, 1192, 1193, 1194, 1194, 1195, 1193, 1194, - - 14, 14, 14, 14, 1196, 1197, 1197, 1198, - 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, - 13, 13, 13, 1207, 1207, 1208, 1209, 1209, - 14, 1210, 1211, 14, 1212, 1213, 1190, 43, - - 43, 14, 14, 14, 1214, 16, 1215, 1216, - 1217, 1217, 1218, 1218, 1218, 1218, 1219, 1219, - 1219, 1219, 1220, 1221, 1222, 1223, 1224, 1225, - 1224, 1224, 1224, 1224, 1223, 1224, 1224, 1226, - - 1227, 1228, 1228, 1228, 1229, 1230, 1231, 1232, - 1233, 1234, 1235, 1235, 1235, 1235, 1235, 1235, - 1236, 1237, 193, 193, 1238, 1239, 1240, 1241, - 1242, 1243, 1244, 1244, 1245, 1246, 1247, 151, - - 1236, 63, 58, 59, 1238, 1239, 1240, 1241, - 1242, 1243, 1244, 1244, 1245, 1246, 1247, 193, - 1046, 1046, 1046, 1046, 1046, 1248, 1248, 1248, - 1248, 1248, 1248, 1248, 1248, 193, 193, 193, - - 12, 12, 12, 12, 12, 12, 12, 50, - 1249, 12, 12, 1250, 1251, 1252, 1252, 1252, - 1253, 1253, 1254, 1254, 1254, 1254, 1255, 1256, - 1256, 1257, 1258, 1259, 1259, 1259, 1259, 1259, - - 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, - 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, - 164, 164, 171, 171, 164, 164, 164, 164, - 171, 171, 171, 164, 164, 1260, 1260, 1260, - - 1260, 164, 1261, 1261, 1262, 1263, 1263, 188, - 1264, 188, 1263, 1265, 1049, 1049, 1049, 1049, - 1050, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1266, 1266, 1267, 1268, 51, 1266, 1266, 1267, - 51, 1268, 1269, 1267, 1267, 1267, 1269, 1269, - 1267, 1267, 1267, 1269, 51, 1267, 1270, 51, - 36, 1267, 1267, 1267, 1267, 1267, 51, 51, - - 1266, 1266, 1266, 51, 1267, 51, 1271, 51, - 1267, 51, 1272, 1273, 1267, 1267, 1274, 1269, - 1267, 1267, 1275, 1267, 1269, 1276, 1276, 1276, - 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1282, - - 1283, 1220, 1220, 1220, 1220, 1282, 1281, 1281, - 1281, 1281, 1284, 1220, 1285, 1286, 1287, 1288, - 1289, 1289, 1289, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 65, 65, 65, - - 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, - 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, - 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, - 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, - - 1292, 1292, 1292, 111, 122, 1293, 1293, 1293, - 1293, 1289, 193, 193, 193, 193, 193, 193, - 36, 36, 36, 36, 36, 51, 51, 51, - 51, 51, 1294, 1294, 51, 51, 51, 51, - - 36, 51, 51, 36, 51, 51, 36, 51, - 51, 51, 51, 51, 51, 51, 1294, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 1295, 1294, 1294, - 51, 51, 36, 51, 36, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 1278, 1278, 1278, 1278, 1278, - 1278, 1278, 1278, 1278, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - - 36, 36, 36, 36, 1294, 36, 36, 36, - 1296, 1297, 1296, 1298, 1299, 1298, 36, 36, - 36, 36, 18, 57, 36, 1300, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, - - 36, 36, 36, 36, 1294, 36, 1294, 36, - 36, 36, 36, 36, 1245, 1245, 36, 1245, - 1245, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 1301, 1302, 36, 36, - - 36, 1294, 36, 1303, 1294, 36, 36, 1294, - 36, 1294, 36, 36, 36, 36, 36, 36, - 36, 36, 1301, 1302, 1301, 1302, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, - - 1294, 36, 1294, 36, 1301, 1302, 1301, 1302, - 1301, 1302, 1301, 1302, 36, 1294, 1304, 1305, - 1304, 1305, 1301, 1302, 1304, 1305, 1301, 1302, - 1304, 1305, 1301, 1302, 1301, 1302, 1301, 1302, - - 1304, 1305, 1301, 1302, 1304, 1305, 1301, 1302, - 1304, 1305, 1301, 1302, 36, 36, 36, 1301, - 1302, 1301, 1302, 36, 36, 36, 36, 36, - 1306, 36, 36, 36, 36, 36, 36, 36, - - 36, 36, 1301, 1302, 36, 36, 1307, 36, - 1308, 1309, 36, 1309, 1294, 1294, 1294, 1294, - 1301, 1302, 1301, 1302, 1301, 1302, 1301, 1302, - 36, 36, 36, 36, 36, 36, 36, 36, - - 36, 36, 36, 36, 36, 36, 36, 36, - 36, 1301, 1302, 1301, 1302, 1310, 36, 36, - 1301, 1302, 36, 36, 36, 36, 1301, 1302, - 1301, 1302, 1301, 1302, 1301, 1302, 1301, 1302, - - 1304, 1305, 1304, 1305, 1301, 1302, 1301, 1302, - 1301, 1302, 1304, 1305, 1304, 1305, 36, 36, - 1301, 1302, 1311, 1311, 1311, 1220, 1312, 1312, - 1220, 1220, 1313, 1313, 1313, 1314, 1314, 1220, - - 51, 1278, 51, 51, 51, 51, 51, 51, - 1315, 1316, 1315, 1316, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 1317, 1317, 51, 51, 51, 51, - - 36, 36, 51, 51, 51, 51, 51, 51, - 51, 1318, 1319, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 1320, 1320, - 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, - - 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, - 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, - 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, - 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, - - 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, - 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, - 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, - 1320, 1320, 1320, 1278, 1220, 1278, 1278, 1278, - - 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, - 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, - 1278, 1278, 1278, 1278, 1278, 1321, 1278, 1278, - 1278, 1278, 1278, 1220, 1220, 1220, 1220, 1220, - - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1284, 1284, 1284, 1284, - 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, - - 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, - 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1322, - 1322, 1285, 1285, 1285, 1285, 1285, 1285, 1285, - 1285, 1285, 1285, 1285, 1323, 1323, 1323, 1323, - - 1323, 1323, 1286, 1286, 1286, 1286, 1286, 1286, - 1324, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1326, 1326, 1326, 1326, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - - 51, 51, 51, 51, 51, 1278, 1278, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, - 1335, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 1327, 1328, 1329, 1330, - 1331, 1332, 1333, 1334, 1335, 65, 65, 65, - - 65, 65, 65, 65, 65, 65, 65, 65, - 63, 58, 59, 1238, 1239, 1240, 1241, 1242, - 1243, 1336, 1336, 1336, 1336, 1336, 1336, 1336, - 1336, 1336, 1336, 1336, 1337, 1337, 1337, 1337, - - 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, - 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, - 1337, 1337, 1337, 1337, 1337, 1337, 1338, 1338, - 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, - - 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, - 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, - 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, - 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, - - 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, - 1339, 1339, 1340, 1341, 1341, 1341, 1341, 1341, - 1341, 1341, 1341, 1341, 1341, 1342, 1343, 1344, - 1345, 1346, 1347, 1348, 1349, 1350, 1341, 1351, - - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 1284, 1284, - 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, - - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 36, - 51, 51, 51, 51, 51, 51, 51, 51, - - 51, 36, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - - 1317, 1317, 1317, 1317, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 1352, 1352, 1284, 1284, - 1353, 1278, 1317, 1317, 1317, 1317, 1317, 1317, - - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 1317, 1317, 1317, 51, 51, 51, 51, - - 51, 51, 51, 51, 51, 51, 51, 51, - 1317, 51, 51, 51, 51, 51, 51, 36, - 1278, 1278, 1284, 1284, 1284, 1284, 1284, 1284, - 1284, 1284, 1284, 1284, 1284, 1284, 1285, 1353, - - 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, - 1284, 1284, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1285, 1285, 1285, 1285, 1285, 1285, - 1285, 1285, 1285, 1285, 1285, 1354, 1324, 1324, - - 1322, 1322, 1285, 1285, 1285, 1285, 1285, 1285, - 1285, 1285, 1285, 1285, 1355, 1285, 1285, 1285, - 1285, 1285, 1286, 1354, 1354, 1354, 1354, 1354, - 1354, 1354, 1354, 1354, 1354, 1356, 1356, 1356, - - 1357, 1357, 1357, 1357, 1356, 1356, 1356, 1356, - 1356, 1324, 1324, 1324, 1324, 1356, 1325, 1356, - 1356, 1356, 1324, 1356, 1356, 1324, 1324, 1324, - 1356, 1356, 1324, 1324, 1356, 1324, 1324, 1356, - - 1356, 1356, 1325, 1324, 1325, 1325, 1325, 1325, - 1324, 1324, 1356, 1324, 1324, 1324, 1324, 1324, - 1324, 1356, 1356, 1356, 1356, 1356, 1324, 1356, - 1356, 1356, 1356, 1324, 1324, 1356, 1356, 1356, - - 193, 1317, 1317, 1317, 1317, 1325, 51, 51, - 1317, 1317, 1326, 1326, 1317, 1317, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - - 51, 51, 51, 51, 51, 51, 51, 51, - 1325, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 1325, 51, 1325, 51, - 51, 51, 51, 1325, 1325, 1325, 51, 1324, - 51, 51, 51, 1358, 1358, 1358, 1358, 1325, - - 1325, 51, 1359, 1359, 51, 51, 51, 51, - 1360, 1361, 1360, 1361, 1360, 1361, 1360, 1361, - 1360, 1361, 1360, 1361, 1360, 1361, 1362, 1363, - 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, - - 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, - 1370, 1371, 1362, 1363, 1364, 1365, 1366, 1367, - 1368, 1369, 1370, 1371, 51, 1325, 1325, 1325, - 51, 51, 51, 51, 51, 51, 51, 51, - - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 1325, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 1325, - - 1372, 1372, 1372, 1373, 1374, 1375, 1376, 1323, - 1377, 1378, 1323, 1379, 1380, 1381, 1382, 1382, - 1220, 1220, 1220, 1220, 1220, 1383, 1384, 1220, - 1220, 1220, 1220, 1220, 1220, 1383, 1384, 1220, - - 1220, 1220, 1383, 1384, 1383, 1384, 1360, 1361, - 1360, 1361, 1360, 1361, 1385, 1386, 1385, 1386, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - - 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, - 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, - 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, - 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, - - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - - 1220, 1220, 1220, 1360, 1361, 1360, 1361, 1360, - 1361, 1360, 1361, 1360, 1361, 1388, 1389, 1390, - 1391, 1360, 1361, 1360, 1361, 1360, 1361, 1360, - 1361, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1392, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - - 1383, 1384, 1220, 1220, 1383, 1384, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1383, - 1384, 1383, 1384, 1220, 1383, 1384, 1220, 1220, - 1360, 1361, 1360, 1361, 1220, 1220, 1220, 1220, - - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1393, 1220, 1220, - 1383, 1384, 1220, 1220, 1360, 1361, 1220, 1220, - - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1283, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1383, 1384, 1383, 1384, 1220, - 1220, 1220, 1220, 1220, 1383, 1384, 1220, 1220, - 1220, 1220, 1220, 1220, 1383, 1384, 1220, 1220, - - 1220, 1220, 1220, 1220, 1383, 1384, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, - 1220, 1220, 1220, 1220, 1283, 1283, 1283, 1220, - 1220, 1383, 1384, 1220, 1220, 1383, 1384, 1383, - - 1384, 1383, 1384, 1383, 1384, 1220, 1220, 1220, - 1220, 1220, 1220, 1383, 1384, 1220, 1220, 1220, - 1220, 1383, 1384, 1383, 1384, 1383, 1384, 1383, - 1384, 1383, 1384, 1383, 1384, 1220, 1220, 1220, - - 1220, 1383, 1384, 1220, 1220, 1220, 1383, 1384, - 1383, 1384, 1383, 1384, 1383, 1384, 1220, 1383, - 1384, 1220, 1220, 1383, 1384, 1220, 1220, 1220, - 1220, 1220, 1220, 1383, 1384, 1383, 1384, 1383, - - 1384, 1383, 1384, 1383, 1384, 1383, 1384, 1220, - 1220, 1220, 1220, 1220, 1220, 1383, 1384, 1383, - 1384, 1383, 1384, 1383, 1384, 1383, 1384, 1220, - 1220, 1220, 1220, 1220, 1394, 1220, 1395, 1220, - - 1220, 1220, 1220, 1396, 1397, 1396, 1220, 1220, - 1220, 1220, 1220, 1220, 1383, 1384, 1220, 1220, - 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1383, - 1384, 1383, 1384, 1220, 1220, 1220, 1220, 1220, - - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1285, 1285, - 1285, 1285, 1285, 1285, 1286, 1286, 1286, 1286, - 1286, 1286, 1286, 1354, 1354, 1354, 1354, 1354, - - 1286, 1286, 1286, 1286, 1354, 1354, 1354, 1354, - 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, - 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, - 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, - - 1380, 1380, 1380, 1380, 1380, 1354, 1354, 1380, - 1380, 1380, 1380, 1380, 1380, 193, 193, 193, - 1354, 1354, 1354, 1354, 1354, 1324, 1324, 1324, - 1324, 1324, 193, 193, 193, 193, 193, 193, - - 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, - 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, - 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, - 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, - - 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, - 1398, 1398, 1398, 1398, 1398, 1398, 1398, 193, - 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, - 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, - - 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, - 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, - 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, - 1399, 1399, 1399, 1399, 1399, 1399, 1399, 193, - - 126, 122, 1400, 1401, 1402, 1403, 1404, 126, - 122, 126, 122, 126, 122, 1405, 1406, 1407, - 1408, 1062, 1064, 1065, 1409, 126, 122, 1409, - 1062, 1062, 1062, 1062, 1410, 1410, 1411, 1411, - - 1412, 1413, 1412, 1413, 1412, 1413, 1412, 1413, - 1412, 1413, 1412, 1413, 1412, 1413, 1412, 1413, - 1412, 1413, 1412, 1413, 1412, 1413, 1412, 1413, - 1412, 1413, 1412, 1413, 1412, 1413, 1412, 1413, - - 1412, 1413, 1412, 1413, 1414, 1415, 1415, 1415, - 1415, 1415, 1415, 1416, 1417, 1416, 1417, 1418, - 1418, 1418, 1419, 1420, 193, 193, 193, 193, - 193, 1421, 1422, 1422, 1422, 1423, 1421, 1422, - - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - - 1424, 1424, 1424, 1424, 1424, 1424, 193, 1425, - 193, 193, 193, 193, 193, 1425, 193, 193, - 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, - 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, - - 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, - 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, - 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, - 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, - - 1426, 1426, 1426, 1426, 1426, 1426, 1427, 1427, - 193, 193, 193, 193, 193, 193, 193, 1428, - 1429, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 1430, - - 800, 800, 800, 800, 800, 800, 800, 800, - 800, 800, 800, 800, 800, 800, 800, 800, - 800, 800, 800, 800, 800, 800, 800, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 800, 800, 800, 800, 800, 800, 800, 193, - 800, 800, 800, 800, 800, 800, 800, 193, - 800, 800, 800, 800, 800, 800, 800, 193, - 800, 800, 800, 800, 800, 800, 800, 193, - - 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, - - 1431, 1431, 1432, 1433, 1432, 1433, 1431, 1431, - 1431, 1432, 1433, 1431, 1432, 1433, 1224, 1224, - 1224, 1224, 1224, 1224, 1224, 1224, 1223, 1434, - 1435, 1436, 1437, 1438, 1432, 1433, 1438, 1438, - - 1439, 1440, 1385, 1386, 1385, 1386, 1385, 1386, - 1385, 1386, 1436, 1436, 1436, 1436, 1441, 1442, - 1436, 1443, 1444, 1445, 1445, 1444, 1444, 1444, - 1444, 1444, 1446, 1446, 193, 193, 193, 193, - - 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, - 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, - 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, - 1447, 1447, 193, 1447, 1447, 1447, 1447, 1448, - - 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, - 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, - 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, - 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, - - 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, - 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, - 1447, 1447, 1447, 1448, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, - 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, - 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, - 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, - - 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, - 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, - 1448, 1448, 1448, 1448, 1448, 1448, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, - 1449, 1449, 1449, 1449, 193, 193, 193, 193, - - 1178, 1450, 1451, 1452, 1317, 1453, 1454, 1455, - 16, 1215, 16, 1215, 16, 1215, 16, 1215, - 16, 1215, 1317, 1317, 16, 1215, 16, 1215, - 16, 1215, 16, 1215, 1456, 1193, 1457, 1457, - - 1317, 1455, 1455, 1455, 1455, 1455, 1455, 1455, - 1455, 1455, 1458, 1459, 165, 1460, 1461, 1461, - 1462, 1463, 1463, 1463, 1463, 1464, 1465, 1317, - 1466, 1466, 1466, 1467, 1468, 1469, 1449, 1317, - - 193, 1470, 1471, 1470, 1471, 1470, 1471, 1470, - 1471, 1470, 1471, 1471, 1472, 1471, 1472, 1471, - 1472, 1471, 1472, 1471, 1472, 1471, 1472, 1471, - 1472, 1471, 1472, 1471, 1472, 1471, 1472, 1471, - - 1472, 1471, 1472, 1470, 1471, 1472, 1471, 1472, - 1471, 1472, 1471, 1471, 1471, 1471, 1471, 1471, - 1472, 1472, 1471, 1472, 1472, 1471, 1472, 1472, - 1471, 1472, 1472, 1471, 1472, 1472, 1471, 1471, - - 1471, 1471, 1471, 1470, 1471, 1470, 1471, 1470, - 1471, 1471, 1471, 1471, 1471, 1471, 1470, 1471, - 1471, 1471, 1471, 1471, 1472, 1473, 1473, 193, - 193, 1474, 1474, 1475, 1475, 1476, 1477, 1478, - - 1479, 1480, 1481, 1480, 1481, 1480, 1481, 1480, - 1481, 1480, 1481, 1481, 1482, 1481, 1482, 1481, - 1482, 1481, 1482, 1481, 1482, 1481, 1482, 1481, - 1482, 1481, 1482, 1481, 1482, 1481, 1482, 1481, - - 1482, 1481, 1482, 1480, 1481, 1482, 1481, 1482, - 1481, 1482, 1481, 1481, 1481, 1481, 1481, 1481, - 1482, 1482, 1481, 1482, 1482, 1481, 1482, 1482, - 1481, 1482, 1482, 1481, 1482, 1482, 1481, 1481, - - 1481, 1481, 1481, 1480, 1481, 1480, 1481, 1480, - 1481, 1481, 1481, 1481, 1481, 1481, 1480, 1481, - 1481, 1481, 1481, 1481, 1482, 1480, 1480, 1482, - 1482, 1482, 1482, 1483, 1484, 1485, 1486, 1487, - - 193, 193, 193, 193, 193, 1488, 1488, 1488, - 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, - 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, - 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, - - 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, - 1488, 1488, 1488, 1488, 1488, 1489, 193, 193, - 193, 1490, 1490, 1490, 1490, 1490, 1490, 1490, - 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, - - 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, - 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, - 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, - 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, - - 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, - 1490, 1490, 1490, 1490, 1490, 1490, 1490, 193, - 1491, 1491, 1492, 1492, 1492, 1492, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - - 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, - 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, - 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, - 1495, 1495, 1495, 193, 193, 193, 193, 193, - - 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, - 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - - 1357, 1357, 1357, 1357, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, - 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, - - 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, - 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, - 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, - 1497, 1497, 1497, 1497, 1497, 1498, 1498, 193, - - 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, - 1492, 1492, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - - 1493, 1493, 1493, 1493, 1499, 1499, 1499, 1499, - 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, - 1501, 1502, 1502, 1502, 1502, 1502, 1502, 1502, - 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, - - 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, - 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, - 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, - 1497, 1497, 1497, 1497, 1498, 1498, 1503, 1491, - - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1502, 1502, 1502, 1502, 1502, 1502, 1502, - 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, - - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1501, 1501, 1501, 1501, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 193, - - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1501, - 1501, 1501, 1501, 1493, 1493, 1493, 1493, 1493, - - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1501, 1501, - - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1501, - - 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, - 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, - 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, - 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, - - 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, - 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, - 1505, 1505, 1505, 1505, 1505, 1505, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - - 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, - 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, - 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, - 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, - - 1507, 1507, 1507, 1507, 1507, 1507, 1508, 1508, - 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, - 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, - 1508, 1508, 1508, 1508, 1509, 1509, 1509, 1509, - - 1509, 1509, 1509, 1509, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1511, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - - 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, - 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, - 1512, 1512, 1512, 1512, 1512, 1513, 1512, 1512, - 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, - - 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, - 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, - 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, - 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, - - 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, - 1512, 1512, 1512, 1512, 1512, 193, 193, 193, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - - 1514, 1514, 1515, 1515, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1515, 1514, 1514, 1514, - 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, - - 1514, 1515, 1514, 1514, 1514, 1515, 1514, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, - 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, - - 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, - 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, - 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, - 1517, 1517, 1517, 1517, 1517, 1517, 1518, 1519, - - 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, - 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, - 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, - 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, - - 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, - 1520, 1520, 1520, 1520, 1521, 1522, 1523, 1524, - 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, - 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, - - 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, - 1533, 1534, 1520, 1520, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 271, 272, 271, 272, 271, 272, 271, 272, - 271, 272, 271, 272, 271, 272, 271, 272, - 271, 272, 271, 272, 271, 272, 271, 272, - 271, 272, 271, 272, 271, 272, 271, 272, - - 275, 276, 271, 272, 271, 272, 271, 272, - 271, 272, 271, 272, 271, 272, 1535, 257, - 1536, 1536, 1536, 1537, 1538, 1538, 1538, 1538, - 1538, 1538, 1538, 1538, 257, 257, 1537, 1539, - - 271, 272, 271, 272, 271, 272, 271, 272, - 271, 272, 271, 272, 271, 272, 271, 272, - 271, 272, 271, 272, 271, 272, 271, 272, - 193, 193, 193, 193, 193, 193, 193, 1538, - - 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, - 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, - 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, - 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, - - 1540, 1540, 1540, 1540, 1540, 1540, 1541, 1541, - 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, - 1542, 1542, 1543, 1544, 1545, 1545, 1545, 1544, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, - 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, - 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1547, - 1547, 1547, 1547, 1442, 1442, 1442, 1442, 1442, - - 1548, 1548, 1064, 1065, 1064, 1065, 1064, 1065, - 1064, 1065, 1064, 1065, 1064, 1065, 1064, 1065, - 1062, 1062, 1064, 1065, 1064, 1065, 1064, 1065, - 1064, 1065, 1064, 1065, 1064, 1065, 1064, 1065, - - 1064, 1065, 1064, 1065, 1064, 1065, 1064, 1065, - 1064, 1065, 1064, 1065, 1064, 1065, 1064, 1065, - 1064, 1065, 1064, 1065, 1064, 1065, 1064, 1065, - 1064, 1065, 1064, 1065, 1064, 1065, 1064, 1065, - - 1064, 1065, 1064, 1065, 1064, 1065, 1064, 1065, - 1064, 1065, 1064, 1065, 1064, 1065, 1064, 1065, - 1410, 1062, 1062, 1062, 1062, 1062, 1062, 1062, - 1062, 1064, 1065, 1064, 1065, 1549, 1064, 1065, - - 1064, 1065, 1064, 1065, 1064, 1065, 1064, 1065, - 1442, 1550, 1550, 1064, 1065, 1551, 1552, 193, - 1553, 1554, 1555, 1556, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1553, 1554, 1553, 1554, 1553, 1554, 1553, 1554, - 1553, 1554, 1557, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1558, 1558, 1552, 1559, 1559, 1559, 1559, 1559, - - 1560, 1560, 1561, 1560, 1560, 1560, 1562, 1560, - 1560, 1560, 1560, 1561, 1560, 1560, 1560, 1560, - 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, - 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, - - 1560, 1560, 1560, 1563, 1563, 1561, 1561, 1563, - 1564, 1564, 1564, 1564, 193, 193, 193, 193, - 1500, 1500, 1500, 1500, 1500, 1500, 742, 742, - 1255, 1565, 193, 193, 193, 193, 193, 193, - - 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, - 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, - 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, - 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, - - 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, - 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, - 1566, 1566, 1567, 1568, 1569, 1569, 1570, 1570, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1571, 1571, 1572, 1572, 1572, 1572, 1572, 1572, - 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, - 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, - 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, - - 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, - 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, - 1572, 1572, 1572, 1572, 1571, 1571, 1571, 1571, - 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, - - 1571, 1571, 1571, 1571, 1573, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 1574, 1574, - 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, - 1583, 1584, 193, 193, 193, 193, 193, 193, - - 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, - 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, - 1585, 1585, 475, 475, 475, 475, 475, 475, - 1586, 1586, 1586, 475, 193, 193, 193, 193, - - 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, - 1595, 1596, 1597, 1597, 1597, 1597, 1597, 1597, - 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, - 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, - - 1597, 1597, 1597, 1597, 1597, 1597, 1598, 1598, - 1598, 1598, 1598, 1599, 1599, 1599, 1600, 1601, - 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, - 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, - - 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1603, - 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, - 1603, 1603, 1604, 1605, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 1606, - - 792, 792, 792, 792, 792, 792, 792, 792, - 792, 792, 792, 792, 792, 792, 792, 792, - 792, 792, 792, 792, 792, 792, 792, 792, - 792, 792, 792, 792, 792, 193, 193, 193, - - 1607, 1607, 1607, 1608, 1609, 1609, 1609, 1609, - 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, - 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, - 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, - - 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, - 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, - 1609, 1609, 1609, 1610, 1608, 1608, 1607, 1607, - 1607, 1607, 1608, 1608, 1607, 1608, 1608, 1608, - - 1611, 1612, 1612, 1612, 1612, 1612, 1612, 1613, - 1614, 1614, 1612, 1612, 1612, 1612, 193, 1615, - 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, - 1624, 1625, 193, 193, 193, 193, 1612, 1612, - - 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, - 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, - 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, - 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, - - 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, - 1626, 1627, 1627, 1627, 1627, 1627, 1627, 1628, - 1628, 1627, 1627, 1628, 1628, 1627, 1627, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1626, 1626, 1626, 1627, 1626, 1626, 1626, 1626, - 1626, 1626, 1626, 1626, 1627, 1628, 193, 193, - 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, - 1637, 1638, 193, 193, 1639, 1640, 1640, 1640, - - 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, - 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, - 1642, 1641, 1641, 1641, 1641, 1641, 1641, 1643, - 1643, 1643, 1641, 780, 193, 193, 193, 193, - - 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, - 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, - 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, - 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, - - 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, - 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, - 1645, 1644, 1645, 1645, 1646, 1644, 1644, 1645, - 1645, 1644, 1644, 1644, 1644, 1644, 1645, 1645, - - 1644, 1645, 1644, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 1644, 1644, 1647, 1648, 1648, - - 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, - 1649, 1649, 1649, 1650, 1651, 1651, 1650, 1650, - 1652, 1652, 1649, 1653, 1653, 1650, 1654, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 193, 1655, 1655, 1655, 1655, 1655, 1655, 193, - 193, 1655, 1655, 1655, 1655, 1655, 1655, 193, - 193, 1655, 1655, 1655, 1655, 1655, 1655, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1655, 1655, 1655, 1655, 1655, 1655, 1655, 193, - 1655, 1655, 1655, 1655, 1655, 1655, 1655, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, - 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, - 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, - 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, - - 1656, 1656, 1656, 1657, 1657, 1658, 1657, 1657, - 1658, 1657, 1657, 1659, 1657, 1660, 193, 193, - 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, - 1669, 1670, 193, 193, 193, 193, 193, 193, - - 1671, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1671, 1672, 1672, 1672, - - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1671, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1671, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1671, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1671, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1671, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - - 1672, 1672, 1672, 1672, 1671, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, - - 1672, 1672, 1672, 1672, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 795, 795, 795, 795, 795, 795, 795, 795, - 795, 795, 795, 795, 795, 795, 795, 795, - - 795, 795, 795, 795, 795, 795, 795, 193, - 193, 193, 193, 798, 798, 798, 798, 798, - 798, 798, 798, 798, 798, 798, 798, 798, - 798, 798, 798, 798, 798, 798, 798, 798, - - 798, 798, 798, 798, 798, 798, 798, 798, - 798, 798, 798, 798, 798, 798, 798, 798, - 798, 798, 798, 798, 798, 798, 798, 798, - 798, 798, 798, 798, 193, 193, 193, 193, - - 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, - 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, - 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, - 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, - - 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, - 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, - 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, - 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, - - 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, - 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, - 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, - 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, - - 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, - 1675, 1675, 1675, 1675, 1675, 1675, 1507, 1507, - 1675, 1507, 1675, 1507, 1507, 1675, 1675, 1675, - 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1507, - - 1675, 1507, 1675, 1507, 1507, 1675, 1675, 1507, - 1507, 1507, 1675, 1675, 1675, 1675, 1676, 1676, - 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, - 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, - - 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, - 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, - 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, - 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, - - 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, - 1677, 1677, 1677, 1678, 1678, 1678, 1506, 1506, - 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, - 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, - - 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, - 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, - 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, - 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, - - 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, - 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, - 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, - 1679, 1679, 1506, 1506, 1506, 1506, 1506, 1506, - - 1680, 1681, 1682, 1683, 1684, 1685, 1685, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 1686, 1687, 1688, 1689, 1690, - 193, 193, 193, 193, 193, 1691, 1692, 1693, - - 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, - 1694, 1695, 1693, 1693, 1693, 1693, 1693, 1693, - 1693, 1693, 1693, 1693, 1693, 1693, 1693, 287, - 1693, 1693, 1693, 1693, 1693, 287, 1693, 287, - - 1693, 1693, 287, 1693, 1693, 287, 1693, 1693, - 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1694, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1697, 1697, 1697, 1697, 1697, 1697, - 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, - - 1697, 1697, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1193, 1457, - - 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 319, 319, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 319, 319, 319, 319, 319, 319, 319, 319, - 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, - 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, - - 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, - 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1699, 1322, 319, 319, - - 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, - 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, - 1701, 1702, 1703, 1704, 1705, 1706, 1706, 1707, - 1708, 1709, 193, 193, 193, 193, 193, 193, - - 164, 164, 164, 164, 1050, 1050, 1050, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1710, 1711, 1711, 1712, 1712, 1713, 1714, 1713, - 1714, 1713, 1714, 1713, 1714, 1713, 1714, 1713, - - 1714, 1713, 1714, 1713, 1714, 1469, 1469, 1715, - 1716, 1710, 1710, 1710, 1710, 1712, 1712, 1712, - 1717, 1718, 1719, 193, 1720, 1721, 1722, 1722, - 1711, 1246, 1247, 1246, 1247, 1246, 1247, 1723, - - 1710, 1710, 1724, 1725, 1726, 1727, 1728, 193, - 1710, 1249, 1207, 1710, 193, 193, 193, 193, - 1696, 1696, 1696, 1729, 1696, 319, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, - 1696, 1696, 1696, 1696, 1696, 319, 319, 1730, - - 193, 1722, 1710, 1723, 1249, 1207, 1710, 1731, - 1246, 1247, 1710, 1724, 1717, 1725, 1719, 1732, - 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, - 1741, 1742, 1721, 1720, 1743, 1728, 1744, 1722, - - 1710, 1745, 1745, 1745, 1745, 1745, 1745, 1745, - 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, - 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, - 1745, 1745, 1745, 1746, 1710, 1747, 1748, 1712, - - 1748, 1749, 1749, 1749, 1749, 1749, 1749, 1749, - 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, - 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, - 1749, 1749, 1749, 1746, 1728, 1747, 1728, 1750, - - 1751, 1752, 1246, 1247, 1753, 1754, 1755, 1756, - 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, - 1757, 1755, 1755, 1755, 1755, 1755, 1755, 1755, - 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, - - 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, - 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, - 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, - 1755, 1755, 1755, 1755, 1755, 1755, 1758, 1758, - - 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, - 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, - 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, - 1759, 1759, 1759, 1759, 1759, 1759, 1759, 193, - - 193, 193, 1759, 1759, 1759, 1759, 1759, 1759, - 193, 193, 1759, 1759, 1759, 1759, 1759, 1759, - 193, 193, 1759, 1759, 1759, 1759, 1759, 1759, - 193, 193, 1759, 1759, 1759, 193, 193, 193, - - 1760, 1249, 1728, 1748, 1465, 1249, 1249, 193, - 1266, 1245, 1245, 1245, 1245, 1266, 1266, 193, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1761, 1761, 1761, 1762, 51, 1763, 1763, - - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - 1764, 1764, 1764, 1764, 193, 1764, 1764, 1764, - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 193, - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - 1764, 1764, 1764, 193, 1764, 1764, 193, 1764, - - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - 1764, 1764, 1764, 1764, 1764, 1764, 193, 193, - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - 1764, 1764, 1764, 1764, 1764, 1764, 193, 193, - - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, - 1764, 1764, 1764, 193, 193, 193, 193, 193, - - 1765, 1766, 1765, 193, 193, 193, 193, 1767, - 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, - 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, - 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, - - 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, - 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, - 1767, 1767, 1767, 1767, 193, 193, 193, 1768, - 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, - - 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, - 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, - 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, - 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, - - 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, - 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, - 1769, 1769, 1769, 1769, 1769, 1770, 1770, 1770, - 1770, 1771, 1771, 1771, 1771, 1771, 1771, 1771, - - 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, - 1771, 1771, 1770, 193, 193, 193, 193, 193, - 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, - 1354, 1354, 1354, 1354, 193, 193, 193, 193, - - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, - 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, - - 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, - 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, - 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, - 1288, 1288, 1288, 1288, 1288, 1053, 193, 193, - - 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, - 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, - 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, - 1772, 1772, 1772, 1772, 1772, 193, 193, 193, - - 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, - 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, - 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, - 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, - - 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, - 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, - 1773, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, - 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, - 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, - 1774, 1774, 1774, 1774, 1774, 1774, 1774, 193, - - 1775, 1775, 1775, 1775, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, - 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, - - 1776, 1777, 1776, 1776, 1776, 1776, 1776, 1776, - 1776, 1776, 1777, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, - 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, - 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, - 1778, 1778, 1778, 1778, 1778, 1778, 193, 1779, - - 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, - 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, - 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, - 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, - - 1780, 1780, 1780, 1780, 193, 193, 193, 193, - 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, - 1781, 1782, 1782, 1782, 1782, 1782, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, - 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, - 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, - 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, - - 1783, 1783, 1783, 1783, 1783, 1783, 1784, 1784, - 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, - 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, - 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, - - 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, - 1785, 1785, 1785, 1785, 1785, 1785, 1786, 1786, - 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, - 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, - - 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, - 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, - 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, - 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, - - 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, - 1788, 1788, 1788, 1788, 1788, 1788, 193, 193, - - 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, - 1797, 1798, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1799, 1799, 1799, 1799, 1799, 1799, 287, 287, - 1799, 287, 1799, 1799, 1799, 1799, 1799, 1799, - 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, - 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, - - 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, - 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, - 1799, 1799, 1799, 1799, 1799, 1799, 287, 1799, - 1799, 287, 287, 287, 1799, 287, 287, 1799, - - 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, - 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, - 1800, 1800, 1800, 1800, 1800, 1800, 287, 1801, - 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, - - 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, - 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, - 1803, 1803, 1803, 1803, 1803, 1803, 1804, 1804, - 1804, 1804, 1805, 1805, 287, 287, 287, 1806, - - 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, - 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, - 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, - 1807, 1807, 287, 287, 287, 287, 287, 1808, - - 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, - 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, - 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, - 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, - - 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, - 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, - 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, - 287, 287, 287, 287, 287, 287, 1810, 1810, - - 1811, 1812, 1812, 1812, 287, 1812, 1812, 287, - 287, 287, 287, 287, 1812, 1813, 1812, 1814, - 1811, 1811, 1811, 1811, 287, 1811, 1811, 1811, - 287, 1811, 1811, 1811, 1811, 1811, 1811, 1811, - - 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, - 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, - 1811, 1811, 1811, 1811, 287, 287, 287, 287, - 1814, 1815, 1813, 287, 287, 287, 287, 1816, - - 1817, 1818, 1819, 1820, 1821, 1821, 1821, 1821, - 287, 287, 287, 287, 287, 287, 287, 287, - 1822, 1822, 1822, 1822, 1822, 1822, 1823, 1823, - 1824, 287, 287, 287, 287, 287, 287, 287, - - 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, - 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, - 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, - 1825, 1825, 1825, 1825, 1825, 1826, 1826, 1827, - - 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, - 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, - 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, - 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, - - 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, - 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, - 1828, 1828, 1828, 1828, 1828, 1828, 287, 287, - 287, 1829, 1829, 1829, 1829, 1829, 1829, 1829, - - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, - 1830, 1830, 1830, 1830, 1830, 1830, 287, 287, - 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, - - 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, - 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, - 1832, 1832, 1832, 287, 287, 287, 287, 287, - 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, - - 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, - 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, - 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, - 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, - - 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, - 1834, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - - 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, - 1843, 1844, 1844, 1844, 1844, 1844, 1844, 1844, - 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, - 1844, 1844, 1844, 1844, 1844, 1844, 1844, 287, - - 1845, 1846, 1845, 1847, 1847, 1847, 1847, 1847, - 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, - 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, - 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, - 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, - 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, - 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, - 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, - 1846, 1846, 1846, 1846, 1846, 1846, 1848, 1849, - 1849, 1850, 1850, 1850, 1850, 1850, 193, 193, - 193, 193, 1851, 1852, 1853, 1854, 1855, 1856, - 1857, 1858, 1859, 1860, 1860, 1860, 1860, 1860, - 1860, 1860, 1860, 1860, 1860, 1860, 1861, 1862, - 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1871, 1871, 1872, 1873, 1873, 1873, 1873, 1873, - 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, - 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, - 1873, 1873, 1874, 1873, 1874, 1873, 1873, 1873, - 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, - 1873, 1873, 1873, 1874, 1873, 1873, 1873, 1873, - 1872, 1872, 1872, 1871, 1871, 1871, 1871, 1872, - 1872, 1875, 1876, 1877, 1877, 1878, 1879, 1879, - 1879, 1879, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, - 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, - 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, - 1880, 193, 193, 193, 193, 193, 193, 193, - 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, - 1889, 1890, 193, 193, 193, 193, 193, 193, - - 1891, 1891, 1891, 1892, 1892, 1892, 1892, 1892, - 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, - 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, - 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, - 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1893, - 1894, 1894, 1894, 1894, 1895, 1894, 1896, 1896, - 1894, 1894, 1894, 1897, 1897, 193, 1898, 1899, - 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, - 1908, 1909, 1909, 1909, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1910, 1910, 1911, 1912, 1912, 1912, 1912, 1912, - 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, - 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, - 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, - 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, - 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, - 1912, 1912, 1912, 1911, 1911, 1911, 1910, 1910, - 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1911, - 1913, 1912, 1912, 1912, 1912, 1914, 1914, 1915, - 1916, 193, 193, 193, 193, 193, 193, 193, - 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, - 1925, 1926, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, - 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, - 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, - 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, - 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, - 1927, 1927, 1927, 1928, 1929, 1928, 1929, 1929, - 1928, 1928, 1928, 1928, 1928, 1928, 1930, 1931, - 193, 193, 193, 193, 193, 193, 193, 193, - 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, - 1940, 1941, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, - 1942, 1942, 1942, 1942, 1942, 1942, 1942, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, - 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, - 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, - 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, - 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, - 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, - 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, - 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, - 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, - 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, - 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, - 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, - 1943, 1943, 1943, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1944, 1944, 1944, 1944, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1946, 1946, 1946, 1947, 1947, 1947, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1947, 1945, 1945, 1945, 1946, 1947, - 1946, 1947, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1946, 1947, 1947, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, - 1945, 1945, 1945, 1945, 1945, 1945, 1945, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, - 1948, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, - 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, - 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, - 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, - 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, - 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, - 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, - 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, - 1949, 1949, 1949, 1949, 1949, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1949, 1950, 1950, 1950, 1950, 1950, 1950, 1950, - 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, - 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, - 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, - 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, - 1950, 1950, 1950, 1950, 1950, 1950, 1950, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 1951, - 1951, 1951, 1951, 1952, 1952, 1952, 1952, 1952, - 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1953, 1954, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 193, - 193, 1288, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1956, 1956, - 1956, 1956, 1956, 1956, 1956, 1957, 1958, 1959, - 1959, 1959, 1955, 1955, 1955, 1960, 1957, 1957, - 1957, 1957, 1957, 1961, 1961, 1961, 1961, 1961, - 1961, 1961, 1961, 1962, 1962, 1962, 1962, 1962, - 1962, 1962, 1962, 1955, 1955, 1963, 1963, 1963, - 1963, 1963, 1962, 1962, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1963, 1963, 1963, 1963, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1956, 1956, 1956, 1956, 1956, - 1956, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, - 1955, 1955, 1955, 1955, 1955, 1955, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, - 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, - 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, - 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, - 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, - 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, - 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, - 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, - 1771, 1771, 1964, 1964, 1964, 1771, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - 1322, 1322, 1322, 1322, 1322, 1322, 1322, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, - 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, - 1965, 1965, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 193, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1966, 193, 1966, 1966, - 193, 193, 1966, 193, 193, 1966, 1966, 193, - 193, 1966, 1966, 1966, 1966, 193, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1967, 1967, - 1967, 1967, 193, 1967, 193, 1967, 1967, 1967, - 1967, 1968, 1967, 1967, 193, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - - 1967, 1967, 1967, 1967, 1966, 1966, 193, 1966, - 1966, 1966, 1966, 193, 193, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 193, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 193, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1966, 1966, 193, 1966, 1966, 1966, 1966, 193, - 1966, 1966, 1966, 1966, 1966, 193, 1966, 193, - 193, 193, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 193, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1280, 1280, 193, 193, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1969, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1970, 1967, 1967, 1967, 1967, - 1967, 1967, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1969, 1967, 1967, 1967, 1967, - - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1970, 1967, 1967, - 1967, 1967, 1967, 1967, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1969, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1970, - 1967, 1967, 1967, 1967, 1967, 1967, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1969, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1970, 1967, 1967, 1967, 1967, 1967, 1967, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, - 1966, 1969, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, - 1967, 1967, 1967, 1970, 1967, 1967, 1967, 1967, - 1967, 1967, 1971, 1972, 193, 193, 1973, 1974, - 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, - 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, - 1981, 1982, 1973, 1974, 1975, 1976, 1977, 1978, - 1979, 1980, 1981, 1982, 1973, 1974, 1975, 1976, - 1977, 1978, 1979, 1980, 1981, 1982, 1973, 1974, - 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, - - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - - 1983, 1983, 1983, 1983, 319, 1983, 1983, 1983, - 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, - 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, - 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, - 319, 1983, 1983, 319, 1983, 319, 319, 1983, - 319, 1983, 1983, 1983, 1983, 1983, 1983, 1983, - 1983, 1983, 1983, 319, 1983, 1983, 1983, 1983, - 319, 1983, 319, 1983, 319, 319, 319, 319, - 319, 319, 1983, 319, 319, 319, 319, 1983, - 319, 1983, 319, 1983, 319, 1983, 1983, 1983, - 319, 1983, 1983, 319, 1983, 319, 319, 1983, - 319, 1983, 319, 1983, 319, 1983, 319, 1983, - 319, 1983, 1983, 319, 1983, 319, 319, 1983, - 1983, 1983, 1983, 319, 1983, 1983, 1983, 1983, - 1983, 1983, 1983, 319, 1983, 1983, 1983, 1983, - 319, 1983, 1983, 1983, 1983, 319, 1983, 319, - 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, - 1983, 1983, 319, 1983, 1983, 1983, 1983, 1983, - 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, - 1983, 1983, 1983, 1983, 319, 319, 319, 319, - 319, 1983, 1983, 1983, 319, 1983, 1983, 1983, - 1983, 1983, 319, 1983, 1983, 1983, 1983, 1983, - 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, - 1983, 1983, 1983, 1983, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - 1984, 1984, 319, 319, 319, 319, 319, 319, - 319, 319, 319, 319, 319, 319, 319, 319, - - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 193, 193, 193, 193, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, - 1357, 1357, 1357, 1357, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 193, - 193, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 193, - 193, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 193, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1985, 1985, 1986, 1987, 1988, 1989, 1990, 1991, - 1992, 1993, 1994, 193, 193, 193, 193, 193, - 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, - 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, - 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, - 1995, 1995, 1995, 1995, 1995, 1995, 1995, 193, - 1996, 1995, 1996, 1996, 1996, 1996, 1996, 1996, - 1996, 1996, 1996, 1996, 1996, 1995, 1996, 1995, - 1996, 1996, 1995, 1996, 1996, 1996, 1995, 1996, - 1996, 1996, 1995, 1995, 1995, 1995, 1995, 1996, - 1997, 1997, 1997, 1997, 1997, 1997, 1997, 742, - 1997, 1997, 1997, 1997, 1997, 1997, 1997, 742, - 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, - 1997, 1997, 1998, 1998, 193, 193, 193, 193, - 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, - 1997, 742, 1997, 742, 742, 1997, 1997, 742, - 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, - 1997, 1997, 742, 742, 742, 742, 1997, 1997, - 1995, 1997, 1997, 1997, 1997, 1997, 1997, 1997, - 1997, 1997, 1997, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 1999, 1999, - 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, - 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, - 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, - - 2000, 2001, 2001, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, - 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, - 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, - 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, - 1499, 1499, 2001, 2001, 2001, 2001, 2001, 2001, - 2001, 2001, 2001, 193, 193, 193, 193, 193, - 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, - 1499, 193, 193, 193, 193, 193, 193, 193, - 2001, 2001, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1326, 1326, 1326, 1326, 1326, 1326, 193, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 193, 193, 193, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1325, 1325, 1326, - 1326, 1326, 1326, 1326, 1325, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 193, 1326, 1326, - 1326, 1326, 1326, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 193, - 1326, 193, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1325, 1326, 1325, 1326, 1325, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1325, - 1326, 1325, 1325, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 193, 1326, 1326, 1326, 1326, 193, 193, 193, - - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 193, 193, - 2002, 2002, 2002, 2002, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 1326, 1326, 1326, 1326, 1326, - - 2003, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 2003, 1326, 1326, 1326, 2003, 1326, 2003, - 1326, 2003, 1326, 2003, 1326, 1326, 1326, 2003, - 1326, 1326, 1326, 1326, 1326, 1326, 2003, 2003, - 1326, 1326, 1326, 1326, 2003, 1326, 2003, 2003, - 1326, 1326, 1326, 1326, 2003, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 193, 193, 193, 193, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, - 1326, 1326, 1326, 1326, 1326, 1326, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, - 1325, 1325, 1325, 1325, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 2004, 2004, - - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, - 2005, 2005, 2005, 2005, 2005, 2005, 2005, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, - 2006, 2006, 2006, 2006, 2006, 2006, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, - 2007, 2007, 2007, 2007, 2007, 2007, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, - 1506, 1506, 1506, 1506, 1506, 1506, 2004, 2004, - - 1230, 1961, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, - 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, - 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, - 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, - 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, - 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, - 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, - 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, - 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, - 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, - 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, - 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, - - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, - 2009, 2009, 2009, 2009, 2009, 2009, 2004, 2004, -}; - -#define GET_PROP_INDEX(ucs4) \ - (ucs4 < 0x11000 \ - ? (uc_property_trie[uc_property_trie[ucs4>>5] + (ucs4 & 0x1f)]) \ - : (uc_property_trie[uc_property_trie[((ucs4 - 0x11000)>>8) + 0x880] + (ucs4 & 0xff)])) - -#define GET_PROP_INDEX_UCS2(ucs2) \ - (uc_property_trie[uc_property_trie[ucs2>>5] + (ucs2 & 0x1f)]) - -static const Properties uc_properties[] = { - { 9, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 21, 2 }, - { 9, 8, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 5, 17, 2 }, - { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 2, 2, 34, 2 }, - { 9, 8, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 5, 35, 2 }, - { 9, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 5, 35, 2 }, - { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 33, 2 }, - { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 21, 2 }, - { 9, 8, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 21, 2 }, - { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 5, 32, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 6, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 13, 3, 2 }, - { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 9, 2 }, - { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 9, 13, 3, 2 }, - { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 0, 2 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 2, 2 }, - { 26, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 9, 2 }, - { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 11, 8, 2 }, - { 20, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 16, 2 }, - { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 10, 8, 2 }, - { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 7, 2 }, - { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 8, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 0, 8, 2 }, - { 26, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 32, 0, 0, 32, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 21, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 0, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 9, 2 }, - { 22, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 2, 2 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 19, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 15, 0, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, -32, -32, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 17, 2 }, - { 22, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 1, 2 }, - { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 3, 35, 2 }, - { 6, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 5, 4, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 23, 10, 0, 0, -1, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, - { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 17, 2 }, - { 29, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 2 }, - { 26, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 9, 2 }, - { 5, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 18, 2 }, - { 15, 0, 0, 0, -1, 0, 0, 743, 743, 775, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 0, 12, 2 }, - { 5, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 24, 10, 0, 0, -1, -16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 32, 0, 0, 32, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 16, 13, 0, 0, 1, 1, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -32, -32, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 121, 121, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 19, 0, 0, 0, 1, 0, 0, 0, 1, 17, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -232, -232, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 80, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 98, 98, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -121, 0, 0, -121, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -300, -300, -268, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 195, 195, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 210, 0, 0, 210, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 206, 0, 0, 206, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 205, 0, 0, 205, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 79, 0, 0, 79, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 202, 0, 0, 202, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 203, 0, 0, 203, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 207, 0, 0, 207, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 97, 97, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 211, 0, 0, 211, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 209, 0, 0, 209, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 163, 163, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 213, 0, 0, 213, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 130, 130, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 214, 0, 0, 214, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 218, 0, 0, 218, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 217, 0, 0, 217, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 219, 0, 0, 219, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 56, 56, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 2, 0, 1, 2, 0, 0, 0, 0, 1, 80, 0, 8, 7, 12, 3 }, - { 16, 0, 0, 0, -1, 0, 1, -1, 0, 1, 0, 0, 0, 0, 1, 80, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -2, -1, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -79, -79, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 109, 109, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -97, 0, 0, -97, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -56, 0, 0, -56, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 4, 17, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 4, 17, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 4, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -130, 0, 0, -130, 0, 0, 0, 0, 6, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 10795, 0, 0, 10795, 0, 0, 0, 0, 8, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 8, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -163, 0, 0, -163, 0, 0, 0, 0, 8, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 10792, 0, 0, 10792, 0, 0, 0, 0, 8, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 10815, 10815, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 9, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -195, 0, 0, -195, 0, 0, 0, 0, 9, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 69, 0, 0, 69, 0, 0, 0, 0, 9, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 71, 0, 0, 71, 0, 0, 0, 0, 9, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 9, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 10783, 10783, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 10780, 10780, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 10782, 10782, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -210, -210, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -206, -206, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -205, -205, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -202, -202, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -203, -203, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -207, -207, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 3, 3, 0, 0, 1, 1, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -209, -209, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -211, -211, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 10743, 10743, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 10749, 10749, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -213, -213, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -214, -214, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 10727, 10727, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -218, -218, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -69, -69, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -217, -217, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -71, -71, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -219, -219, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 6, 12, 3 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 2 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 2 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 2 }, - { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 18, 2 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 0, 12, 2 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 18, 2 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 36 }, - { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 2 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 2 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 2 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 232, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 216, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 }, - { 0, 17, 202, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 }, - { 0, 17, 202, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 }, - { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 4, 4, 4, 21, 1 }, - { 0, 17, 240, 5, -1, 0, 0, 84, 84, 116, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 4, 1 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 232, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 233, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 4, 1 }, - { 0, 17, 234, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 4, 1 }, - { 0, 17, 233, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 4, 1 }, - { 0, 17, 234, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 4, 1 }, - { 0, 17, 233, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 4, 1 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 1 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 10, 0, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 10, 0, 0, 8, 6, 12, 4 }, - { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 2 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 4 }, - { 13, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 130, 130, 0, 0, 0, 0, 0, 9, 0, 0, 8, 6, 12, 4 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 13, 0, 8, 2 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 4 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 81, 0, 0, 0, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 38, 0, 0, 38, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 12, 0, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 37, 0, 0, 37, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, 64, 0, 0, 64, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, 63, 0, 0, 63, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 101, 101, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, 32, 0, 0, 32, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, 32, 0, 0, 32, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -38, -38, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -37, -37, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 105, 105, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -32, -32, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -31, -31, 1, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -32, -32, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -64, -64, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -63, -63, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, 8, 0, 0, 8, 0, 0, 0, 0, 10, 0, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -62, -62, -30, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -57, -57, -25, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 81, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -47, -47, -15, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -54, -54, -22, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -8, -8, 0, 0, 0, 0, 0, 4, 0, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 6, 0, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 6, 0, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 4, 0, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 46 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 46 }, - { 15, 0, 0, 0, -1, 0, 0, -86, -86, -54, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -80, -80, -48, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 7, 7, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -60, 0, 0, -60, 0, 0, 0, 0, 5, 80, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -96, -96, -64, 0, 0, 0, 0, 5, 80, 0, 8, 6, 12, 4 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 4 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 7, 0, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 7, 0, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -7, 0, 0, -7, 0, 0, 0, 0, 7, 80, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -130, 0, 0, -130, 0, 0, 0, 0, 8, 0, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, 80, 0, 0, 80, 0, 0, 0, 0, 4, 17, 0, 8, 7, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 80, 0, 0, 80, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 80, 0, 0, 80, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 32, 0, 0, 32, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 32, 0, 0, 32, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -32, -32, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -32, -32, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -80, -80, 0, 0, 0, 0, 0, 4, 17, 0, 8, 6, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -80, -80, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -80, -80, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 5 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 5 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 5 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 5 }, - { 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 5 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 6, 0, 0, 8, 7, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 6, 0, 0, 8, 6, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 4, 0, 0, 8, 6, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 15, 0, 0, 15, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -15, -15, 0, 0, 0, 0, 0, 9, 0, 0, 8, 6, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 4, 17, 0, 8, 7, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 4, 17, 0, 8, 6, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 8, 0, 0, 8, 7, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 9, 0, 0, 8, 7, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 9, 0, 0, 8, 6, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 10, 0, 0, 8, 7, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 10, 0, 0, 8, 6, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 11, 0, 0, 8, 7, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 11, 0, 0, 8, 6, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 12, 0, 0, 8, 7, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 12, 0, 0, 8, 6, 12, 5 }, - { 14, 0, 0, 0, -1, 0, 48, 0, 0, 48, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 6 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 6 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 6 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 12, 6 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 12, 6 }, - { 15, 0, 0, 0, -1, 0, 0, -48, -48, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 6 }, - { 15, 0, 0, 0, -1, 0, 0, 65, 62, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 6 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 12, 8, 2 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 6 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 9, 6 }, - { 13, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 222, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 228, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 10, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 11, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 12, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 13, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 14, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 15, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 16, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 17, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 18, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 19, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 19, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 20, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 21, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 22, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 20, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 17, 7 }, - { 0, 17, 23, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 7 }, - { 0, 17, 24, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 0, 17, 25, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 6, 7 }, - { 0, 17, 18, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 7 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 7, 8, 13, 7 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 7 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 0, 12, 7 }, - { 10, 5, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 3, 4, 4, 12, 8 }, - { 10, 5, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 3, 4, 4, 12, 8 }, - { 13, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 8 }, - { 26, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 8 }, - { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 10, 8 }, - { 27, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 10, 8 }, - { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 13, 11, 8, 8 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 8 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 8 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 8 }, - { 0, 17, 30, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 8 }, - { 0, 17, 31, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 8 }, - { 0, 17, 32, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 8 }, - { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 6, 2 }, - { 10, 13, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 4, 4, 21, 8 }, - { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 6, 8 }, - { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 6, 2 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 8 }, - { 17, 13, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 2 }, - { 0, 17, 27, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 28, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 29, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 30, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 31, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 32, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 33, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 34, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 204, 4, 4, 4, 21, 1 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 204, 4, 4, 4, 21, 1 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 8 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 8 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 8 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 8 }, - { 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 5, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 5, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 5, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 5, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 5, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 5, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 3, 5, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, - { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 8 }, - { 25, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, - { 25, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 9, 11, 8 }, - { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 8 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 8 }, - { 0, 17, 35, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 8 }, - { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 6, 8 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 8 }, - { 10, 5, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 8 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 8 }, - { 17, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 8 }, - { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, - { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, - { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, - { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, - { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, - { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, - { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, - { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, - { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, - { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, - { 29, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 8 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 8 }, - { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 12, 9 }, - { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 9 }, - { 10, 13, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 3, 4, 4, 12, 9 }, - { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 9 }, - { 0, 17, 36, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 9 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 9 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 9 }, - { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 9 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 9 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 9 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 10 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 10 }, - { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 10 }, - { 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, - { 3, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, - { 3, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, - { 3, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, - { 3, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, - { 3, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, - { 3, 1, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, - { 3, 1, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, - { 3, 1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, - { 3, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, - { 18, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 66 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 66 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 66 }, - { 17, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 66 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 66 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 66 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 13, 11, 8, 66 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 6, 66 }, - { 17, 1, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 66 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 82 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 82 }, - { 17, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 82 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 82 }, - { 18, 1, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 95 }, - { 18, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 95 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 95 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 95 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 95 }, - { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 8 }, - { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 8 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 8 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 8 }, - { 0, 17, 27, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 8 }, - { 0, 17, 28, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 8 }, - { 0, 17, 29, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 8 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 11 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 11 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 11 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 11 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 11 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 8, 8, 12, 11 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 11 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 4, 4, 21, 11 }, - { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 11 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 11 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 11 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 11 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 11 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 17, 11 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 11 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 11 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 11 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 11 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 11 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 11 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 11 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 12 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 12 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 12 }, - { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 12 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 12 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 12 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 7, 4, 4, 21, 12 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 12 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 12 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 12 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 12 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 12 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 12 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 12 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 9, 12 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 13 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 13 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 4, 4, 21, 13 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 13 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 13 }, - { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 13 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 13 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 13 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 13 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 14 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 14 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 14 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 14 }, - { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 14 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 14 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 14 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 14 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 9, 14 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 15 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 15 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 15 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 15 }, - { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 15 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 15 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 15 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 7, 4, 4, 21, 15 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 15 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 15 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 15 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 15 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 15 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 16 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 16 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 8, 8, 12, 16 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 16 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 16 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 16 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 7, 4, 4, 21, 16 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 16 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 16 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 16 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 16 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 16 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 9, 16 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 17 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 17 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 17 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 17 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 4, 4, 21, 17 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 17 }, - { 0, 17, 84, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 17 }, - { 0, 17, 91, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 17 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 17 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 17 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 17 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 18 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 18 }, - { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 18 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 18 }, - { 0, 0, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 18 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 7, 4, 4, 21, 18 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 18 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 18 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 18 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 18 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 18 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 19 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 19 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 19 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 19 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 19 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 19 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 19 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 7, 4, 4, 21, 19 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 19 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 19 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 10, 19 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 4, 4, 21, 20 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 20 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 204, 4, 4, 4, 21, 20 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 204, 4, 4, 4, 21, 20 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 20 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 17, 7, 4, 4, 21, 20 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 20 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 30, 21 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 21 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 7, 0, 8, 30, 21 }, - { 0, 17, 103, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 21 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 21 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 30, 21 }, - { 0, 17, 107, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 21 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 21 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 17, 21 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 30, 22 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 22 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 7, 0, 8, 30, 22 }, - { 0, 17, 118, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 22 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 30, 22 }, - { 0, 17, 122, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 22 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 8, 30, 22 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 8, 30, 22 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 8, 8, 12, 23 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 18, 23 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 18, 23 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 12, 23 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 4, 23 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 17, 23 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 80, 0, 0, 0, 4, 23 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 6, 23 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 12, 23 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 12, 23 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 17, 23 }, - { 0, 17, 216, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, - { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 13, 0, 23 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 13, 1, 23 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 7, 4, 4, 21, 23 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 85, 0, 8, 8, 12, 23 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 23 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 23 }, - { 0, 17, 129, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, - { 0, 17, 130, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 85, 4, 4, 4, 21, 23 }, - { 0, 17, 132, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 80, 4, 4, 4, 21, 23 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 7, 4, 4, 17, 23 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 23 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 23 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 23 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 23 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 23 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 23 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 23 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 18, 23 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 17, 23 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 18, 23 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 23 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 2 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 4, 23 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 8, 30, 24 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 8, 30, 24 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 17, 0, 0, 8, 30, 24 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 4, 4, 30, 24 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 4, 4, 30, 24 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 30, 24 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 204, 4, 4, 4, 30, 24 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 4, 4, 30, 24 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 30, 24 }, - { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 30, 24 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 30, 24 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 30, 24 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 30, 24 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 17, 24 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 24 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 30, 24 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 4, 4, 30, 24 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 24 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 30, 24 }, - { 14, 0, 0, 0, -1, 0, 7264, 0, 0, 7264, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 25 }, - { 14, 0, 0, 0, -1, 0, 7264, 0, 0, 7264, 0, 0, 0, 0, 13, 0, 0, 8, 7, 12, 25 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 25 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 25 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 25 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 8, 12, 25 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 25 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8, 8, 8, 25, 26 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 8, 8, 8, 25, 26 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9, 8, 8, 26, 26 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 9, 8, 8, 26, 26 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 9, 8, 8, 26, 26 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 10, 8, 8, 27, 26 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 8, 8, 27, 26 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 10, 8, 8, 27, 26 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 27 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 27 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 27 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 27 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 27 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 27 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 12, 27 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, - { 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, - { 5, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, - { 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, - { 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, - { 5, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, - { 5, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, - { 5, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, - { 5, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, - { 5, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 27 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 28 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 29 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 29 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 29 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 12, 29 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 29 }, - { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5, 17, 30 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 30 }, - { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 13, 0, 30 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 13, 1, 30 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 31 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 2 }, - { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 31 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 42 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 42 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 42 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 43 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 43 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 43 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 17, 2 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 44 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 44 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 45 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 45 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 8, 30, 32 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 30, 32 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 4, 4, 30, 32 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 30, 32 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 32 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 5, 32 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 8, 30, 32 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 32 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 9, 32 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 30, 32 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 32 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 33 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 11, 6, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 6, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 33 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 2 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 18, 33 }, - { 25, 10, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 33 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 11, 6, 33 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 6, 33 }, - { 25, 10, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 33 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 33 }, - { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 3, 4, 4, 4, 33 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, - { 18, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 33 }, - { 17, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 33 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 33 }, - { 0, 17, 228, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 33 }, - { 18, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 33 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 47 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 47 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 4, 4, 21, 47 }, - { 0, 17, 222, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 47 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 47 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 47 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 47 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12, 6, 47 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 8, 30, 48 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 8, 30, 56 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 56 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 4, 4, 30, 56 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 4, 4, 30, 56 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, - { 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 30, 56 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 30, 56 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 32 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 55 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 55 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 55 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 4, 4, 21, 55 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 55 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 55 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 78 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 30, 78 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 78 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 78 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 4, 4, 30, 78 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 78 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 78 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 30, 78 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 78 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 30, 78 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 62 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 4, 4, 21, 62 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 62 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 17, 0, 8, 8, 12, 62 }, - { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 62 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 204, 7, 4, 4, 21, 62 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 17, 7, 4, 4, 21, 62 }, - { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 4, 4, 21, 62 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 17, 62 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 62 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 17, 62 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 62 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 62 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 62 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 67 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 67 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 67 }, - { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 67 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 67 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 67 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 67 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 93 }, - { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 93 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 4, 4, 21, 93 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 93 }, - { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 4, 4, 21, 93 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 93 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 68 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 68 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 68 }, - { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 68 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 68 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 17, 68 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 69 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 69 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 69 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 67 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 1 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 2 }, - { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 1 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 2 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 2 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 2 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 1 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 6, 12, 5 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 8, 6, 12, 3 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 6, 12, 3 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 8, 6, 12, 4 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 6, 12, 5 }, - { 15, 0, 0, 0, -1, 0, 0, 5, 5, 0, 0, 1, 1, 0, 8, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 3814, 3814, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 3 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 6, 12, 3 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 6, 12, 4 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 234, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 214, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 202, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 233, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 1 }, - { 15, 0, 0, 0, -1, 0, 0, 112, 112, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 115, 115, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 118, 118, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 121, 121, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 124, 124, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -59, -59, -58, 0, 0, 0, 0, 2, 81, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -7615, 0, 0, -7615, 0, 0, 0, 0, 10, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 10, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 10, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 8, 8, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -8, 0, 0, -8, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 127, 127, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 130, 130, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 134, 134, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 138, 138, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 74, 74, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 74, 74, 0, 0, 0, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 86, 86, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 86, 86, 0, 0, 0, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 100, 100, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 100, 100, 0, 0, 0, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 128, 128, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 128, 128, 0, 0, 0, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 112, 112, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 112, 112, 0, 0, 0, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 126, 126, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 126, 126, 0, 0, 0, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 176, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 179, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 182, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 185, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 188, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 191, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 194, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 197, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 176, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 179, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 182, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 185, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 188, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 191, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 194, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 197, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 200, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 203, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 206, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 209, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 212, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 215, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 218, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 221, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 200, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 203, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 206, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 209, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 212, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 215, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 218, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 221, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 224, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 227, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 230, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 233, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 236, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 239, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 242, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 245, 8, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 224, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 227, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 230, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 233, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 236, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 239, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 242, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -8, 245, 0, -8, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 260, 257, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 248, 9, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 266, 263, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 142, 142, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 297, 293, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -74, 0, 0, -74, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -74, 0, 0, -74, 0, 0, 0, 0, 1, 85, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -9, 248, 0, -9, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, -7205, -7205, -7173, 0, 0, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 81, 0, 0, 0, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 272, 269, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 251, 9, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 278, 275, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 145, 145, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 305, 301, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -86, 0, 0, -86, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -86, 0, 0, -86, 0, 0, 0, 0, 1, 85, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -9, 251, 0, -9, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 148, 148, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 101, 101, 0, 0, 1, 1, 0, 1, 85, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 152, 152, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 155, 155, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -100, 0, 0, -100, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -100, 0, 0, -100, 0, 0, 0, 0, 1, 85, 0, 8, 7, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 159, 159, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 105, 105, 0, 0, 1, 1, 0, 1, 85, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 163, 163, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 7, 7, 0, 0, 0, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 166, 166, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 169, 169, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -112, 0, 0, -112, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -112, 0, 0, -112, 0, 0, 0, 0, 1, 85, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -7, 0, 0, -7, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 0, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 284, 281, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 254, 9, 0, 0, 1, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 290, 287, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 173, 173, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 15, 0, 0, 0, -1, 0, 0, 313, 309, 0, 0, 1, 1, 0, 1, 17, 0, 8, 6, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -128, 0, 0, -128, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -128, 0, 0, -128, 0, 0, 0, 0, 1, 85, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -126, 0, 0, -126, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -126, 0, 0, -126, 0, 0, 0, 0, 1, 85, 0, 8, 7, 12, 4 }, - { 16, 0, 0, 0, -1, 0, -9, 254, 0, -9, 0, 1, 0, 0, 1, 17, 0, 8, 7, 12, 4 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 0, 18, 4 }, - { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 5, 17, 2 }, - { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 5, 17, 2 }, - { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 5, 4, 2 }, - { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 4, 20, 2 }, - { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 10, 18, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 10, 0, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, - { 10, 1, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 17, 2 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 4, 2 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 17, 2 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 19, 2 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 23, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 13, 3, 2 }, - { 24, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 13, 3, 2 }, - { 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 0, 2 }, - { 23, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, - { 24, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 11, 10, 15, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 15, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 0, 17, 2 }, - { 7, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 3, 35, 2 }, - { 8, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 3, 35, 2 }, - { 10, 11, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, - { 10, 14, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, - { 10, 16, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, - { 10, 12, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, - { 10, 15, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, - { 6, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 80, 0, 0, 5, 4, 2 }, - { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 10, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 10, 2 }, - { 23, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, - { 24, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 12, 5, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 5, 2 }, - { 26, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 0, 8, 2 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 1, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 12, 5, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 80, 0, 0, 12, 5, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 }, - { 19, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 15, 0, 12, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 17, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 0, 12, 2 }, - { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 5, 17, 2 }, - { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 3, 4, 4, 22, 2 }, - { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 3, 4, 4, 12, 2 }, - { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 3, 4, 4, 12, 2 }, - { 13, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 12, 0 }, - { 10, 19, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 4, 4, 21, 2 }, - { 10, 20, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 4, 4, 21, 2 }, - { 10, 21, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 4, 4, 21, 2 }, - { 10, 22, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 4, 4, 21, 2 }, - { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, - { 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 8, 6, 12, 3 }, - { 5, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 26, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 0, 2 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 1, 2 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 80, 0, 8, 6, 12, 3 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 9, 2 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 9, 2 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 9, 2 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 9, 2 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 9, 2 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 9, 2 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 10, 2 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 9, 2 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 9, 2 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 9, 2 }, - { 13, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0 }, - { 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 1 }, - { 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 1 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 7, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 10, 2 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 9, 2 }, - { 14, 0, 0, 0, -1, 0, -7517, 0, 0, -7517, 0, 0, 0, 0, 1, 85, 0, 8, 7, 12, 4 }, - { 14, 0, 0, 0, -1, 0, -8383, 0, 0, -8383, 0, 0, 0, 0, 1, 85, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -8262, 0, 0, -8262, 0, 0, 0, 0, 1, 85, 0, 8, 7, 12, 3 }, - { 29, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 28, 0, 0, 28, 0, 0, 0, 0, 1, 0, 0, 8, 7, 12, 3 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 80, 0, 8, 6, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 0, 0, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 6, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 8, 6, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 8, 7, 12, 2 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, -28, -28, 0, 0, 0, 0, 0, 9, 0, 0, 8, 6, 12, 3 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, - { 4, 0, 0, 0, -1, 0, 16, 0, 0, 16, 0, 0, 0, 0, 1, 80, 0, 8, 7, 12, 3 }, - { 4, 0, 0, 0, -1, 0, 0, -16, -16, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 3 }, - { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 3 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 2016, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 138, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 1824, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 2104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 2108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 2106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -138, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -8, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -7, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 12, 2 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 14, 2 }, - { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 13, 0, 2 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 13, 1, 2 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 14, 2 }, - { 5, 10, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 29, 0, 0, 0, -1, 0, 26, 0, 0, 26, 0, 0, 0, 0, 1, 80, 0, 8, 7, 12, 2 }, - { 29, 0, 0, 0, -1, 0, 0, -26, -26, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 2 }, - { 5, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 14, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 14, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 14, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 14, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 6, 2 }, - { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 13, 0, 2 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 13, 1, 2 }, - { 5, 10, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, - { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 13, 0, 2 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 13, 1, 2 }, - { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 13, 0, 2 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 13, 1, 2 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 54 }, - { 21, 10, 0, 0, -1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 13, 0, 2 }, - { 22, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 13, 1, 2 }, - { 21, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 13, 0, 2 }, - { 22, 10, 0, 0, -1, -3, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 13, 1, 2 }, - { 26, 10, 0, 0, -1, -1824, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -2016, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 85, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -2104, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -2106, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, -2108, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 48, 0, 0, 48, 0, 0, 0, 0, 8, 0, 0, 8, 7, 12, 57 }, - { 15, 0, 0, 0, -1, 0, 0, -48, -48, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 57 }, - { 14, 0, 0, 0, -1, 0, -10743, 0, 0, -10743, 0, 0, 0, 0, 9, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -3814, 0, 0, -3814, 0, 0, 0, 0, 9, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -10727, 0, 0, -10727, 0, 0, 0, 0, 9, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -10795, -10795, 0, 0, 0, 0, 0, 9, 0, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -10792, -10792, 0, 0, 0, 0, 0, 9, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -10780, 0, 0, -10780, 0, 0, 0, 0, 10, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -10749, 0, 0, -10749, 0, 0, 0, 0, 10, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -10783, 0, 0, -10783, 0, 0, 0, 0, 10, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -10782, 0, 0, -10782, 0, 0, 0, 0, 11, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 6, 12, 3 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 80, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, -10815, 0, 0, -10815, 0, 0, 0, 0, 11, 0, 0, 8, 7, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 8, 0, 0, 8, 7, 12, 46 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 46 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 46 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 46 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 11, 0, 0, 8, 7, 12, 46 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 11, 0, 0, 8, 6, 12, 46 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 46 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 13, 0, 0, 8, 7, 12, 46 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 13, 0, 0, 8, 6, 12, 46 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 6, 46 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 17, 46 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 46 }, - { 15, 0, 0, 0, -1, 0, 0, -7264, -7264, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 25 }, - { 15, 0, 0, 0, -1, 0, 0, -7264, -7264, 0, 0, 0, 0, 0, 13, 0, 0, 8, 6, 12, 25 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 58 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 58 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 8, 12, 58 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 17, 58 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 58 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 13, 3, 2 }, - { 23, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 13, 3, 2 }, - { 24, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 13, 3, 2 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 17, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 17, 2 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 }, - { 23, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 13, 3, 2 }, - { 24, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 13, 3, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 6, 2 }, - { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 17, 2 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 19, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 14, 37 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 80, 0, 0, 0, 14, 37 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 14, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 1, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 1, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 14, 2 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 5, 37 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 14, 2 }, - { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 14, 37 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 5, 2 }, - { 22, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 1, 2 }, - { 0, 17, 218, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 228, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 222, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, - { 1, 0, 224, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 26 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 14, 2 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 14, 2 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 21, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 80, 0, 0, 8, 14, 37 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 5, 37 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 5, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 14, 2 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 5, 34 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 14, 34 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 8, 14, 34 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 8, 5, 34 }, - { 0, 17, 8, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 6, 0, 5, 2 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 5, 34 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 8, 5, 34 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 8, 14, 34 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 6, 0, 5, 2 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 5, 35 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 14, 35 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 6, 8, 14, 35 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 5, 2 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 5, 2 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 5, 35 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 6, 8, 5, 35 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 6, 8, 14, 35 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 14, 36 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 14, 36 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 14, 26 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 14, 2 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 14, 36 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 14, 36 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 6, 8, 5, 35 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 26 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 0, 0, 14, 26 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 14, 2 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 0, 0, 14, 2 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 0, 14, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 0, 14, 26 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 6, 0, 14, 35 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 8, 14, 37 }, - { 13, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 14, 37 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 8, 14, 37 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 8, 14, 37 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 14, 37 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 8, 14, 37 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 14, 38 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 5, 38 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 14, 38 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 14, 38 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 83 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 83 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 83 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 17, 83 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 70 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 70 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 17, 70 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 6, 70 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 70 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 5 }, - { 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 5 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 5 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 5 }, - { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 5 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 84 }, - { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 84 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 84 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 84 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 17, 84 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 84 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, - { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 2 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 7, 0, 0, 7, 1, 0, 0, 1, 10, 0, 0, 8, 7, 12, 3 }, - { 28, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 9, 0, 0, 9, 1, 0, 0, 1, 12, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 12, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 12, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 13, 0, 0, 8, 7, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 13, 0, 0, 8, 6, 12, 3 }, - { 14, 0, 0, 0, -1, 0, 11, 0, 0, 11, 1, 0, 0, 1, 13, 0, 0, 8, 7, 12, 3 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 80, 0, 8, 6, 12, 3 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 3 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 59 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 59 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 59 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 4, 4, 21, 59 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 59 }, - { 29, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 2 }, - { 18, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 65 }, - { 18, 0, 0, 4, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 65 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 65 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 18, 65 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 6, 65 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 71 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 71 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 71 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 71 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 11 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 11 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 72 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 72 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 72 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 17, 72 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 72 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 73 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 73 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 73 }, - { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 73 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 73 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 85 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 85 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 85 }, - { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 85 }, - { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 85 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 85 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 85 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 17, 85 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 2 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 77 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 77 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 77 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 77 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 77 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 24 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 24 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 30, 24 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 79 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 79 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 79 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 79 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 30, 79 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 86 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 86 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 86 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 17, 86 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 86 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 86 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 27 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 86 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 86 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 86 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 17, 86 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 86 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 17, 11, 8, 8, 23, 26 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 17, 12, 8, 8, 24, 26 }, - { 11, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 31, 0 }, - { 12, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 8, 14, 37 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 85, 0, 0, 8, 14, 37 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 85, 0, 0, 8, 14, 37 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 85, 0, 0, 8, 14, 37 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 85, 0, 0, 8, 14, 37 }, - { 15, 0, 0, 0, -1, 0, 0, 25, 22, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 31, 28, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 37, 34, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 44, 40, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 52, 48, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 59, 56, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 3 }, - { 15, 0, 0, 0, -1, 0, 0, 71, 68, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 6 }, - { 15, 0, 0, 0, -1, 0, 0, 77, 74, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 6 }, - { 15, 0, 0, 0, -1, 0, 0, 83, 80, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 6 }, - { 15, 0, 0, 0, -1, 0, 0, 89, 86, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 6 }, - { 15, 0, 0, 0, -1, 0, 0, 95, 92, 0, 0, 1, 1, 0, 1, 80, 0, 8, 6, 12, 6 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 85, 0, 7, 8, 13, 7 }, - { 0, 17, 26, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 7, 8, 13, 7 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 7, 8, 13, 7 }, - { 26, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 7 }, - { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 12, 8 }, - { 28, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 8 }, - { 13, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 12, 0 }, - { 27, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 0, 10, 8 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 1 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 13, 11, 8, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 11, 1, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 0, 1, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 12, 11, 8, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 13, 0, 8, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 0, 6, 2 }, - { 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 13, 0, 2 }, - { 22, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 13, 1, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 0, 15, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 11, 14, 2 }, - { 19, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 15, 0, 14, 2 }, - { 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 0, 2 }, - { 22, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 1, 2 }, - { 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 0, 13, 0, 2 }, - { 22, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 0, 13, 1, 2 }, - { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 13, 11, 1, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 11, 14, 2 }, - { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 11, 10, 1, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 13, 0, 5, 2 }, - { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 12, 11, 5, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 12, 6, 2 }, - { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 26, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 20, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 11, 14, 2 }, - { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 8 }, - { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 22, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 11, 0, 14, 2 }, - { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 26, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 26, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 14, 0, 0, 0, -1, 0, 32, 0, 0, 32, 0, 0, 0, 0, 1, 80, 0, 8, 7, 14, 3 }, - { 21, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 0, 2 }, - { 22, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 1, 2 }, - { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, - { 15, 0, 0, 0, -1, 0, 0, -32, -32, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 14, 3 }, - { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 13, 0, 2 }, - { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 13, 1, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 12, 1, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 11, 1, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 5, 2 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 6, 8, 12, 35 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 6, 8, 5, 35 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 6, 8, 5, 2 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 4, 4, 4, 5, 2 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 12, 26 }, - { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 10, 2 }, - { 10, 10, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 3, 4, 4, 21, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 29, 2 }, - { 13, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 49 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 17, 2 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 17, 2 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 }, - { 4, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 4 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 4 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 4 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 74 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 75 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 8, 8, 12, 39 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 12, 39 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 8, 8, 12, 40 }, - { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 8, 8, 12, 40 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 50 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 17, 50 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 60 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 17, 60 }, - { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 60 }, - { 14, 0, 0, 0, -1, 0, 40, 0, 0, 40, 0, 0, 0, 0, 5, 0, 0, 8, 7, 12, 41 }, - { 14, 0, 0, 0, -1, 0, 40, 0, 0, 40, 0, 0, 0, 0, 7, 0, 0, 8, 7, 12, 41 }, - { 15, 0, 0, 0, -1, 0, 0, -40, -40, 0, 0, 0, 0, 0, 5, 0, 0, 8, 6, 12, 41 }, - { 15, 0, 0, 0, -1, 0, 0, -40, -40, 0, 0, 0, 0, 0, 7, 0, 0, 8, 6, 12, 41 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 51 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 52 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 53 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 87 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 87 }, - { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 87 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 64 }, - { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 64 }, - { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 64 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 17, 64 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 76 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 76 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 98 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 97 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 61 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 61 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 61 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 61 }, - { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 61 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 61 }, - { 5, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 61 }, - { 5, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 61 }, - { 5, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 61 }, - { 5, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 61 }, - { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 61 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 17, 61 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 17, 61 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 61 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 88 }, - { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 88 }, - { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 88 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 80 }, - { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 80 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 89 }, - { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 89 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 90 }, - { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 90 }, - { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 91 }, - { 5, 5, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, - { 5, 5, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, - { 5, 5, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, - { 5, 5, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, - { 5, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, - { 5, 5, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, - { 5, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, - { 5, 5, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, - { 5, 5, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, - { 5, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 4, 4, 21, 94 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 94 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 94 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 94 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 17, 94 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, - { 5, 10, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, - { 5, 10, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, - { 5, 10, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, - { 5, 10, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, - { 5, 10, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, - { 5, 10, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, - { 5, 10, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, - { 5, 10, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, - { 5, 10, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, - { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 92 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 92 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 92 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 17, 0, 8, 8, 12, 92 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 92 }, - { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 204, 4, 4, 4, 21, 92 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 92 }, - { 10, 0, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 3, 4, 4, 12, 92 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 17, 92 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 101 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 96 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 96 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 204, 4, 4, 4, 21, 96 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 96 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 96 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 17, 4, 4, 4, 21, 96 }, - { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 96 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 17, 96 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 17, 96 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 100 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 100 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 100 }, - { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 100 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 17, 100 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 100 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 17, 100 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 102 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 102 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 102 }, - { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 102 }, - { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 102 }, - { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, - { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, - { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, - { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, - { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, - { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, - { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, - { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, - { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, - { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 63 }, - { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 63 }, - { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 17, 63 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 81 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 0, 81 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 1, 81 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 84 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 99 }, - { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 99 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 99 }, - { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 99 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 6, 8, 14, 35 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 8, 14, 34 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 12, 2 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 85, 0, 0, 0, 12, 2 }, - { 1, 0, 216, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 4, 4, 4, 21, 2 }, - { 1, 0, 216, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 7, 4, 4, 21, 2 }, - { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 4, 4, 4, 21, 1 }, - { 1, 0, 226, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 7, 4, 4, 21, 2 }, - { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 3, 4, 4, 21, 2 }, - { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 4, 4, 4, 21, 1 }, - { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 4 }, - { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 8, 7, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 8, 6, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 8, 6, 12, 2 }, - { 26, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 0, 0, 12, 2 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 0, 0, 12, 2 }, - { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 80, 0, 8, 7, 12, 2 }, - { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 80, 0, 8, 6, 12, 2 }, - { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, - { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, - { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 80, 0, 8, 8, 12, 8 }, - { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 8 }, - { 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, - { 5, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 80, 0, 0, 0, 12, 2 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 80, 0, 0, 0, 12, 2 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 5, 5, 0, 28, 2 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 14, 34 }, - { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 80, 0, 0, 0, 14, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 2 }, - { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 14, 2 }, - { 13, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 12, 0 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 8, 14, 37 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 8, 14, 37 }, - { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 85, 0, 0, 8, 14, 37 }, - { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 1 }, - { 12, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 12, 0 } -}; - -Q_DECL_CONST_FUNCTION static inline const Properties *qGetProp(uint ucs4) -{ - const int index = GET_PROP_INDEX(ucs4); - return uc_properties + index; -} - -Q_DECL_CONST_FUNCTION static inline const Properties *qGetProp(ushort ucs2) -{ - const int index = GET_PROP_INDEX_UCS2(ucs2); - return uc_properties + index; -} - -Q_DECL_CONST_FUNCTION Q_CORE_EXPORT const Properties * QT_FASTCALL properties(uint ucs4) -{ - return qGetProp(ucs4); -} - -Q_DECL_CONST_FUNCTION Q_CORE_EXPORT const Properties * QT_FASTCALL properties(ushort ucs2) -{ - return qGetProp(ucs2); -} - -Q_CORE_EXPORT GraphemeBreakClass QT_FASTCALL graphemeBreakClass(uint ucs4) -{ - return (GraphemeBreakClass)qGetProp(ucs4)->graphemeBreakClass; -} - -Q_CORE_EXPORT WordBreakClass QT_FASTCALL wordBreakClass(uint ucs4) -{ - return (WordBreakClass)qGetProp(ucs4)->wordBreakClass; -} - -Q_CORE_EXPORT SentenceBreakClass QT_FASTCALL sentenceBreakClass(uint ucs4) -{ - return (SentenceBreakClass)qGetProp(ucs4)->sentenceBreakClass; -} - -Q_CORE_EXPORT LineBreakClass QT_FASTCALL lineBreakClass(uint ucs4) -{ - return (LineBreakClass)qGetProp(ucs4)->lineBreakClass; -} - - -static const ushort specialCaseMap[] = { - 0x0, // placeholder - 0x1, 0xa78d, - 0x1, 0xa7aa, - 0x1, 0xa77d, - 0x1, 0x1d79, - 0x1, 0x265, - 0x1, 0x266, - 0x2, 0x53, 0x73, - 0x2, 0x53, 0x53, - 0x2, 0x69, 0x307, - 0x2, 0x46, 0x66, - 0x2, 0x46, 0x46, - 0x2, 0x46, 0x69, - 0x2, 0x46, 0x49, - 0x2, 0x46, 0x6c, - 0x2, 0x46, 0x4c, - 0x3, 0x46, 0x66, 0x69, - 0x3, 0x46, 0x46, 0x49, - 0x3, 0x46, 0x66, 0x6c, - 0x3, 0x46, 0x46, 0x4c, - 0x2, 0x53, 0x74, - 0x2, 0x53, 0x54, - 0x2, 0x535, 0x582, - 0x2, 0x535, 0x552, - 0x2, 0x544, 0x576, - 0x2, 0x544, 0x546, - 0x2, 0x544, 0x565, - 0x2, 0x544, 0x535, - 0x2, 0x544, 0x56b, - 0x2, 0x544, 0x53b, - 0x2, 0x54e, 0x576, - 0x2, 0x54e, 0x546, - 0x2, 0x544, 0x56d, - 0x2, 0x544, 0x53d, - 0x2, 0x2bc, 0x4e, - 0x3, 0x399, 0x308, 0x301, - 0x3, 0x3a5, 0x308, 0x301, - 0x2, 0x4a, 0x30c, - 0x2, 0x48, 0x331, - 0x2, 0x54, 0x308, - 0x2, 0x57, 0x30a, - 0x2, 0x59, 0x30a, - 0x2, 0x41, 0x2be, - 0x2, 0x3a5, 0x313, - 0x3, 0x3a5, 0x313, 0x300, - 0x3, 0x3a5, 0x313, 0x301, - 0x3, 0x3a5, 0x313, 0x342, - 0x2, 0x391, 0x342, - 0x2, 0x397, 0x342, - 0x3, 0x399, 0x308, 0x300, - 0x2, 0x399, 0x342, - 0x3, 0x399, 0x308, 0x342, - 0x3, 0x3a5, 0x308, 0x300, - 0x2, 0x3a1, 0x313, - 0x2, 0x3a5, 0x342, - 0x3, 0x3a5, 0x308, 0x342, - 0x2, 0x3a9, 0x342, - 0x2, 0x1f08, 0x399, - 0x2, 0x1f09, 0x399, - 0x2, 0x1f0a, 0x399, - 0x2, 0x1f0b, 0x399, - 0x2, 0x1f0c, 0x399, - 0x2, 0x1f0d, 0x399, - 0x2, 0x1f0e, 0x399, - 0x2, 0x1f0f, 0x399, - 0x2, 0x1f28, 0x399, - 0x2, 0x1f29, 0x399, - 0x2, 0x1f2a, 0x399, - 0x2, 0x1f2b, 0x399, - 0x2, 0x1f2c, 0x399, - 0x2, 0x1f2d, 0x399, - 0x2, 0x1f2e, 0x399, - 0x2, 0x1f2f, 0x399, - 0x2, 0x1f68, 0x399, - 0x2, 0x1f69, 0x399, - 0x2, 0x1f6a, 0x399, - 0x2, 0x1f6b, 0x399, - 0x2, 0x1f6c, 0x399, - 0x2, 0x1f6d, 0x399, - 0x2, 0x1f6e, 0x399, - 0x2, 0x1f6f, 0x399, - 0x2, 0x391, 0x399, - 0x2, 0x397, 0x399, - 0x2, 0x3a9, 0x399, - 0x2, 0x1fba, 0x345, - 0x2, 0x1fba, 0x399, - 0x2, 0x386, 0x345, - 0x2, 0x386, 0x399, - 0x2, 0x1fca, 0x345, - 0x2, 0x1fca, 0x399, - 0x2, 0x389, 0x345, - 0x2, 0x389, 0x399, - 0x2, 0x1ffa, 0x345, - 0x2, 0x1ffa, 0x399, - 0x2, 0x38f, 0x345, - 0x2, 0x38f, 0x399, - 0x3, 0x391, 0x342, 0x345, - 0x3, 0x391, 0x342, 0x399, - 0x3, 0x397, 0x342, 0x345, - 0x3, 0x397, 0x342, 0x399, - 0x3, 0x3a9, 0x342, 0x345, - 0x3, 0x3a9, 0x342, 0x399 -}; - - -static const unsigned short uc_decomposition_trie[] = { - // 0 - 0x3400 - - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1564, 1580, 1596, 1612, 1628, 1644, - 1660, 1676, 1692, 1708, 1724, 1740, 1756, 1772, - 1548, 1548, 1788, 1804, 1820, 1836, 1852, 1868, - 1884, 1900, 1916, 1932, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1948, 1548, 1964, 1980, 1548, - 1548, 1548, 1548, 1548, 1996, 1548, 1548, 2012, - 2028, 2044, 2060, 2076, 2092, 2108, 1548, 2124, - 2140, 2156, 1548, 2172, 1548, 2188, 1548, 2204, - 1548, 1548, 1548, 1548, 2220, 2236, 2252, 2268, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 2284, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 2300, 1548, 1548, 1548, 1548, 2316, - 1548, 1548, 1548, 1548, 2332, 2348, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 2364, 2380, 1548, 2396, 1548, 1548, - 1548, 1548, 1548, 1548, 2412, 2428, 1548, 1548, - 1548, 1548, 1548, 2444, 1548, 2460, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 2476, 2492, 1548, 1548, - 1548, 2508, 1548, 1548, 2524, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 2540, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 2556, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 2572, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 2588, 1548, 1548, - 1548, 1548, 1548, 2604, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 2620, 1548, 2636, 1548, 1548, - 2652, 1548, 1548, 1548, 2668, 2684, 2700, 2716, - 2732, 2748, 2764, 2780, 1548, 1548, 1548, 1548, - - 1548, 1548, 2796, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 2812, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 2828, 2844, 1548, 2860, 2876, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 2892, 2908, 2924, 2940, 2956, 2972, - 1548, 2988, 3004, 3020, 1548, 1548, 1548, 1548, - 3036, 3052, 3068, 3084, 3100, 3116, 3132, 3148, - 3164, 3180, 3196, 3212, 3228, 3244, 3260, 3276, - 3292, 3308, 3324, 3340, 3356, 3372, 3388, 3404, - 3420, 3436, 3452, 3468, 3484, 3500, 3516, 3532, - - 3548, 3564, 3580, 3596, 3612, 3628, 1548, 3644, - 3660, 3676, 3692, 1548, 1548, 1548, 1548, 1548, - 3708, 3724, 3740, 3756, 3772, 3788, 3804, 3820, - 3836, 3852, 3868, 1548, 3884, 1548, 1548, 1548, - 3900, 1548, 3916, 3932, 3948, 1548, 3964, 3980, - 3996, 1548, 4012, 1548, 1548, 1548, 4028, 1548, - 1548, 1548, 4044, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 4060, 4076, - 4092, 4108, 4124, 4140, 4156, 4172, 4188, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 4204, 1548, 1548, 1548, 1548, 1548, 1548, 4220, - 1548, 1548, 1548, 1548, 1548, 4236, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 4252, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 4268, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, - 1548, 4284, 1548, 1548, 1548, 1548, 1548, 4300, - 4316, 4332, 4348, 4364, 4380, 4396, 4412, 4428, - 4444, 4460, 4476, 4492, 4508, 4524, 1548, 1548, - - 4540, 1548, 1548, 4556, 4572, 4588, 4604, 4620, - 1548, 4636, 4652, 4668, 4684, 4700, 1548, 4716, - 1548, 1548, 1548, 4732, 4748, 4764, 4780, 4796, - 4812, 4828, 1548, 1548, 1548, 1548, 1548, 1548, - 4844, 4860, 4876, 4892, 4908, 4924, 4940, 4956, - 4972, 4988, 5004, 5020, 5036, 5052, 5068, 5084, - 5100, 5116, 5132, 5148, 5164, 5180, 5196, 5212, - 5228, 5244, 5260, 5276, 5292, 5308, 5324, 5340, - - // 0x3400 - 0x30000 - - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5612, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - - 5356, 5356, 5356, 5356, 5356, 5868, 6124, 6380, - 6636, 6892, 7148, 7404, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 7660, 7916, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 8172, 5356, 5356, - 8428, 8684, 8940, 9196, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 9452, 5356, 5356, 9708, 9964, 5356, - - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, - - 5356, 5356, 5356, 5356, 10220, 10476, 10732, 5356, - 5356, 5356, 5356, 5356, - - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x2, 0xffff, 0x5, 0xffff, 0xffff, 0xffff, 0xffff, 0x7, - - 0xffff, 0xffff, 0xa, 0xc, 0xe, 0x11, 0xffff, 0xffff, - 0x13, 0x16, 0x18, 0xffff, 0x1a, 0x1e, 0x22, 0xffff, - - 0x26, 0x29, 0x2c, 0x2f, 0x32, 0x35, 0xffff, 0x38, - 0x3b, 0x3e, 0x41, 0x44, 0x47, 0x4a, 0x4d, 0x50, - - 0xffff, 0x53, 0x56, 0x59, 0x5c, 0x5f, 0x62, 0xffff, - 0xffff, 0x65, 0x68, 0x6b, 0x6e, 0x71, 0xffff, 0xffff, - - 0x74, 0x77, 0x7a, 0x7d, 0x80, 0x83, 0xffff, 0x86, - 0x89, 0x8c, 0x8f, 0x92, 0x95, 0x98, 0x9b, 0x9e, - - 0xffff, 0xa1, 0xa4, 0xa7, 0xaa, 0xad, 0xb0, 0xffff, - 0xffff, 0xb3, 0xb6, 0xb9, 0xbc, 0xbf, 0xffff, 0xc2, - - 0xc5, 0xc8, 0xcb, 0xce, 0xd1, 0xd4, 0xd7, 0xda, - 0xdd, 0xe0, 0xe3, 0xe6, 0xe9, 0xec, 0xef, 0xf2, - - 0xffff, 0xffff, 0xf5, 0xf8, 0xfb, 0xfe, 0x101, 0x104, - 0x107, 0x10a, 0x10d, 0x110, 0x113, 0x116, 0x119, 0x11c, - - 0x11f, 0x122, 0x125, 0x128, 0x12b, 0x12e, 0xffff, 0xffff, - 0x131, 0x134, 0x137, 0x13a, 0x13d, 0x140, 0x143, 0x146, - - 0x149, 0xffff, 0x14c, 0x14f, 0x152, 0x155, 0x158, 0x15b, - 0xffff, 0x15e, 0x161, 0x164, 0x167, 0x16a, 0x16d, 0x170, - - 0x173, 0xffff, 0xffff, 0x176, 0x179, 0x17c, 0x17f, 0x182, - 0x185, 0x188, 0xffff, 0xffff, 0x18b, 0x18e, 0x191, 0x194, - - 0x197, 0x19a, 0xffff, 0xffff, 0x19d, 0x1a0, 0x1a3, 0x1a6, - 0x1a9, 0x1ac, 0x1af, 0x1b2, 0x1b5, 0x1b8, 0x1bb, 0x1be, - - 0x1c1, 0x1c4, 0x1c7, 0x1ca, 0x1cd, 0x1d0, 0xffff, 0xffff, - 0x1d3, 0x1d6, 0x1d9, 0x1dc, 0x1df, 0x1e2, 0x1e5, 0x1e8, - - 0x1eb, 0x1ee, 0x1f1, 0x1f4, 0x1f7, 0x1fa, 0x1fd, 0x200, - 0x203, 0x206, 0x209, 0x20c, 0x20f, 0x212, 0x215, 0x218, - - 0x21a, 0x21d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x220, - - 0x223, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0x226, 0x229, 0x22c, 0x22f, - 0x232, 0x235, 0x238, 0x23b, 0x23e, 0x241, 0x244, 0x247, - - 0x24a, 0x24d, 0x250, 0x253, 0x256, 0x259, 0x25c, 0x25f, - 0x262, 0x265, 0x268, 0x26b, 0x26e, 0xffff, 0x271, 0x274, - - 0x277, 0x27a, 0x27d, 0x280, 0xffff, 0xffff, 0x283, 0x286, - 0x289, 0x28c, 0x28f, 0x292, 0x295, 0x298, 0x29b, 0x29e, - - 0x2a1, 0x2a4, 0x2a7, 0x2aa, 0x2ad, 0x2b0, 0xffff, 0xffff, - 0x2b3, 0x2b6, 0x2b9, 0x2bc, 0x2bf, 0x2c2, 0x2c5, 0x2c8, - - 0x2cb, 0x2ce, 0x2d1, 0x2d4, 0x2d7, 0x2da, 0x2dd, 0x2e0, - 0x2e3, 0x2e6, 0x2e9, 0x2ec, 0x2ef, 0x2f2, 0x2f5, 0x2f8, - - 0x2fb, 0x2fe, 0x301, 0x304, 0x307, 0x30a, 0x30d, 0x310, - 0x313, 0x316, 0x319, 0x31c, 0xffff, 0xffff, 0x31f, 0x322, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x325, 0x328, - 0x32b, 0x32e, 0x331, 0x334, 0x337, 0x33a, 0x33d, 0x340, - - 0x343, 0x346, 0x349, 0x34c, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x34f, 0x351, 0x353, 0x355, 0x357, 0x359, 0x35b, 0x35d, - 0x35f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x361, 0x364, 0x367, 0x36a, 0x36d, 0x370, 0xffff, 0xffff, - - 0x373, 0x375, 0x377, 0x379, 0x37b, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x37d, 0x37f, 0xffff, 0x381, 0x383, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0x386, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0x388, 0xffff, 0xffff, 0xffff, 0x38b, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0x38d, 0x390, 0x393, 0x396, - 0x398, 0x39b, 0x39e, 0xffff, 0x3a1, 0xffff, 0x3a4, 0x3a7, - - 0x3aa, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0x3ad, 0x3b0, 0x3b3, 0x3b6, 0x3b9, 0x3bc, - - 0x3bf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0x3c2, 0x3c5, 0x3c8, 0x3cb, 0x3ce, 0xffff, - - 0x3d1, 0x3d3, 0x3d5, 0x3d7, 0x3da, 0x3dd, 0x3df, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x3e1, 0x3e3, 0x3e5, 0xffff, 0x3e7, 0x3e9, 0xffff, 0xffff, - 0xffff, 0x3eb, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x3ed, 0x3f0, 0xffff, 0x3f3, 0xffff, 0xffff, 0xffff, 0x3f6, - 0xffff, 0xffff, 0xffff, 0xffff, 0x3f9, 0x3fc, 0x3ff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0x402, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0x405, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x408, 0x40b, 0xffff, 0x40e, 0xffff, 0xffff, 0xffff, 0x411, - 0xffff, 0xffff, 0xffff, 0xffff, 0x414, 0x417, 0x41a, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x41d, 0x420, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0x423, 0x426, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x429, 0x42c, 0x42f, 0x432, 0xffff, 0xffff, 0x435, 0x438, - 0xffff, 0xffff, 0x43b, 0x43e, 0x441, 0x444, 0x447, 0x44a, - - 0xffff, 0xffff, 0x44d, 0x450, 0x453, 0x456, 0x459, 0x45c, - 0xffff, 0xffff, 0x45f, 0x462, 0x465, 0x468, 0x46b, 0x46e, - - 0x471, 0x474, 0x477, 0x47a, 0x47d, 0x480, 0xffff, 0xffff, - 0x483, 0x486, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x489, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0x48c, 0x48f, 0x492, 0x495, 0x498, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x49b, 0x49e, 0x4a1, - 0x4a4, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x4a7, 0xffff, 0x4aa, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0x4ad, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0x4b0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0x4b3, 0xffff, 0xffff, 0x4b6, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x4b9, 0x4bc, 0x4bf, 0x4c2, 0x4c5, 0x4c8, 0x4cb, 0x4ce, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0x4d1, 0x4d4, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x4d7, 0x4da, 0xffff, 0x4dd, - - 0xffff, 0xffff, 0xffff, 0x4e0, 0xffff, 0xffff, 0x4e3, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0x4e6, 0x4e9, 0x4ec, 0xffff, 0xffff, 0x4ef, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x4f2, 0xffff, 0xffff, 0x4f5, 0x4f8, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x4fb, 0x4fe, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0x501, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0x504, 0x507, 0x50a, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x50d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x510, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x513, - 0x516, 0xffff, 0x519, 0x51c, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0x51f, 0x522, 0x525, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0x528, 0xffff, 0x52b, 0x52e, 0x531, 0xffff, - - 0xffff, 0xffff, 0xffff, 0x534, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0x537, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x53a, 0x53d, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x540, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0x542, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x545, 0xffff, 0xffff, - - 0xffff, 0xffff, 0x548, 0xffff, 0xffff, 0xffff, 0xffff, 0x54b, - 0xffff, 0xffff, 0xffff, 0xffff, 0x54e, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0x551, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0x554, 0xffff, 0x557, 0x55a, 0x55d, - 0x560, 0x563, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0x566, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0x569, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x56c, 0xffff, 0xffff, - - 0xffff, 0xffff, 0x56f, 0xffff, 0xffff, 0xffff, 0xffff, 0x572, - 0xffff, 0xffff, 0xffff, 0xffff, 0x575, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0x578, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x57b, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x57e, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x580, 0xffff, - 0x583, 0xffff, 0x586, 0xffff, 0x589, 0xffff, 0x58c, 0xffff, - - 0xffff, 0xffff, 0x58f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0x592, 0xffff, 0x595, 0xffff, 0xffff, - - 0x598, 0x59b, 0xffff, 0x59e, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x5a1, 0x5a3, 0x5a5, 0xffff, - - 0x5a7, 0x5a9, 0x5ab, 0x5ad, 0x5af, 0x5b1, 0x5b3, 0x5b5, - 0x5b7, 0x5b9, 0x5bb, 0xffff, 0x5bd, 0x5bf, 0x5c1, 0x5c3, - - 0x5c5, 0x5c7, 0x5c9, 0x5cb, 0x5cd, 0x5cf, 0x5d1, 0x5d3, - 0x5d5, 0x5d7, 0x5d9, 0x5db, 0x5dd, 0x5df, 0xffff, 0x5e1, - - 0x5e3, 0x5e5, 0x5e7, 0x5e9, 0x5eb, 0x5ed, 0x5ef, 0x5f1, - 0x5f3, 0x5f5, 0x5f7, 0x5f9, 0x5fb, 0x5fd, 0x5ff, 0x601, - - 0x603, 0x605, 0x607, 0x609, 0x60b, 0x60d, 0x60f, 0x611, - 0x613, 0x615, 0x617, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x619, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0x61b, 0x61d, 0x61f, 0x621, 0x623, - - 0x625, 0x627, 0x629, 0x62b, 0x62d, 0x62f, 0x631, 0x633, - 0x635, 0x637, 0x639, 0x63b, 0x63d, 0x63f, 0x641, 0x643, - - 0x645, 0x647, 0x649, 0x64b, 0x64d, 0x64f, 0x651, 0x653, - 0x655, 0x657, 0x659, 0x65b, 0x65d, 0x65f, 0x661, 0x663, - - 0x665, 0x668, 0x66b, 0x66e, 0x671, 0x674, 0x677, 0x67a, - 0x67d, 0x680, 0x683, 0x686, 0x689, 0x68c, 0x68f, 0x692, - - 0x695, 0x698, 0x69b, 0x69e, 0x6a1, 0x6a4, 0x6a7, 0x6aa, - 0x6ad, 0x6b0, 0x6b3, 0x6b6, 0x6b9, 0x6bc, 0x6bf, 0x6c2, - - 0x6c5, 0x6c8, 0x6cb, 0x6ce, 0x6d1, 0x6d4, 0x6d7, 0x6da, - 0x6dd, 0x6e0, 0x6e3, 0x6e6, 0x6e9, 0x6ec, 0x6ef, 0x6f2, - - 0x6f5, 0x6f8, 0x6fb, 0x6fe, 0x701, 0x704, 0x707, 0x70a, - 0x70d, 0x710, 0x713, 0x716, 0x719, 0x71c, 0x71f, 0x722, - - 0x725, 0x728, 0x72b, 0x72e, 0x731, 0x734, 0x737, 0x73a, - 0x73d, 0x740, 0x743, 0x746, 0x749, 0x74c, 0x74f, 0x752, - - 0x755, 0x758, 0x75b, 0x75e, 0x761, 0x764, 0x767, 0x76a, - 0x76d, 0x770, 0x773, 0x776, 0x779, 0x77c, 0x77f, 0x782, - - 0x785, 0x788, 0x78b, 0x78e, 0x791, 0x794, 0x797, 0x79a, - 0x79d, 0x7a0, 0x7a3, 0x7a6, 0x7a9, 0x7ac, 0x7af, 0x7b2, - - 0x7b5, 0x7b8, 0x7bb, 0x7be, 0x7c1, 0x7c4, 0x7c7, 0x7ca, - 0x7cd, 0x7d0, 0x7d3, 0x7d6, 0x7d9, 0x7dc, 0x7df, 0x7e2, - - 0x7e5, 0x7e8, 0x7eb, 0x7ee, 0x7f1, 0x7f4, 0x7f7, 0x7fa, - 0x7fd, 0x800, 0x803, 0x806, 0x809, 0x80c, 0x80f, 0x812, - - 0x815, 0x818, 0x81b, 0x81e, 0x821, 0x824, 0x827, 0x82a, - 0x82d, 0x830, 0x833, 0x836, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x839, 0x83c, 0x83f, 0x842, 0x845, 0x848, 0x84b, 0x84e, - 0x851, 0x854, 0x857, 0x85a, 0x85d, 0x860, 0x863, 0x866, - - 0x869, 0x86c, 0x86f, 0x872, 0x875, 0x878, 0x87b, 0x87e, - 0x881, 0x884, 0x887, 0x88a, 0x88d, 0x890, 0x893, 0x896, - - 0x899, 0x89c, 0x89f, 0x8a2, 0x8a5, 0x8a8, 0x8ab, 0x8ae, - 0x8b1, 0x8b4, 0x8b7, 0x8ba, 0x8bd, 0x8c0, 0x8c3, 0x8c6, - - 0x8c9, 0x8cc, 0x8cf, 0x8d2, 0x8d5, 0x8d8, 0x8db, 0x8de, - 0x8e1, 0x8e4, 0x8e7, 0x8ea, 0x8ed, 0x8f0, 0x8f3, 0x8f6, - - 0x8f9, 0x8fc, 0x8ff, 0x902, 0x905, 0x908, 0x90b, 0x90e, - 0x911, 0x914, 0x917, 0x91a, 0x91d, 0x920, 0x923, 0x926, - - 0x929, 0x92c, 0x92f, 0x932, 0x935, 0x938, 0x93b, 0x93e, - 0x941, 0x944, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x947, 0x94a, 0x94d, 0x950, 0x953, 0x956, 0x959, 0x95c, - 0x95f, 0x962, 0x965, 0x968, 0x96b, 0x96e, 0x971, 0x974, - - 0x977, 0x97a, 0x97d, 0x980, 0x983, 0x986, 0xffff, 0xffff, - 0x989, 0x98c, 0x98f, 0x992, 0x995, 0x998, 0xffff, 0xffff, - - 0x99b, 0x99e, 0x9a1, 0x9a4, 0x9a7, 0x9aa, 0x9ad, 0x9b0, - 0x9b3, 0x9b6, 0x9b9, 0x9bc, 0x9bf, 0x9c2, 0x9c5, 0x9c8, - - 0x9cb, 0x9ce, 0x9d1, 0x9d4, 0x9d7, 0x9da, 0x9dd, 0x9e0, - 0x9e3, 0x9e6, 0x9e9, 0x9ec, 0x9ef, 0x9f2, 0x9f5, 0x9f8, - - 0x9fb, 0x9fe, 0xa01, 0xa04, 0xa07, 0xa0a, 0xffff, 0xffff, - 0xa0d, 0xa10, 0xa13, 0xa16, 0xa19, 0xa1c, 0xffff, 0xffff, - - 0xa1f, 0xa22, 0xa25, 0xa28, 0xa2b, 0xa2e, 0xa31, 0xa34, - 0xffff, 0xa37, 0xffff, 0xa3a, 0xffff, 0xa3d, 0xffff, 0xa40, - - 0xa43, 0xa46, 0xa49, 0xa4c, 0xa4f, 0xa52, 0xa55, 0xa58, - 0xa5b, 0xa5e, 0xa61, 0xa64, 0xa67, 0xa6a, 0xa6d, 0xa70, - - 0xa73, 0xa76, 0xa78, 0xa7b, 0xa7d, 0xa80, 0xa82, 0xa85, - 0xa87, 0xa8a, 0xa8c, 0xa8f, 0xa91, 0xa94, 0xffff, 0xffff, - - 0xa96, 0xa99, 0xa9c, 0xa9f, 0xaa2, 0xaa5, 0xaa8, 0xaab, - 0xaae, 0xab1, 0xab4, 0xab7, 0xaba, 0xabd, 0xac0, 0xac3, - - 0xac6, 0xac9, 0xacc, 0xacf, 0xad2, 0xad5, 0xad8, 0xadb, - 0xade, 0xae1, 0xae4, 0xae7, 0xaea, 0xaed, 0xaf0, 0xaf3, - - 0xaf6, 0xaf9, 0xafc, 0xaff, 0xb02, 0xb05, 0xb08, 0xb0b, - 0xb0e, 0xb11, 0xb14, 0xb17, 0xb1a, 0xb1d, 0xb20, 0xb23, - - 0xb26, 0xb29, 0xb2c, 0xb2f, 0xb32, 0xffff, 0xb35, 0xb38, - 0xb3b, 0xb3e, 0xb41, 0xb44, 0xb46, 0xb49, 0xb4c, 0xb4e, - - 0xb51, 0xb54, 0xb57, 0xb5a, 0xb5d, 0xffff, 0xb60, 0xb63, - 0xb66, 0xb69, 0xb6b, 0xb6e, 0xb70, 0xb73, 0xb76, 0xb79, - - 0xb7c, 0xb7f, 0xb82, 0xb85, 0xffff, 0xffff, 0xb87, 0xb8a, - 0xb8d, 0xb90, 0xb93, 0xb96, 0xffff, 0xb98, 0xb9b, 0xb9e, - - 0xba1, 0xba4, 0xba7, 0xbaa, 0xbac, 0xbaf, 0xbb2, 0xbb5, - 0xbb8, 0xbbb, 0xbbe, 0xbc1, 0xbc3, 0xbc6, 0xbc9, 0xbcb, - - 0xffff, 0xffff, 0xbcd, 0xbd0, 0xbd3, 0xffff, 0xbd6, 0xbd9, - 0xbdc, 0xbdf, 0xbe1, 0xbe4, 0xbe6, 0xbe9, 0xbeb, 0xffff, - - 0xbee, 0xbf0, 0xbf2, 0xbf4, 0xbf6, 0xbf8, 0xbfa, 0xbfc, - 0xbfe, 0xc00, 0xc02, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xc04, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xc06, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xc09, 0xc0b, 0xc0e, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xc12, - - 0xffff, 0xffff, 0xffff, 0xc14, 0xc17, 0xffff, 0xc1b, 0xc1e, - 0xffff, 0xffff, 0xffff, 0xffff, 0xc22, 0xffff, 0xc25, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xc28, - 0xc2b, 0xc2e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xc31, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xc36, - - 0xc38, 0xc3a, 0xffff, 0xffff, 0xc3c, 0xc3e, 0xc40, 0xc42, - 0xc44, 0xc46, 0xc48, 0xc4a, 0xc4c, 0xc4e, 0xc50, 0xc52, - - 0xc54, 0xc56, 0xc58, 0xc5a, 0xc5c, 0xc5e, 0xc60, 0xc62, - 0xc64, 0xc66, 0xc68, 0xc6a, 0xc6c, 0xc6e, 0xc70, 0xffff, - - 0xc72, 0xc74, 0xc76, 0xc78, 0xc7a, 0xc7c, 0xc7e, 0xc80, - 0xc82, 0xc84, 0xc86, 0xc88, 0xc8a, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xc8c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xc8f, 0xc93, 0xc97, 0xc99, 0xffff, 0xc9c, 0xca0, 0xca4, - 0xffff, 0xca6, 0xca9, 0xcab, 0xcad, 0xcaf, 0xcb1, 0xcb3, - - 0xcb5, 0xcb7, 0xcb9, 0xcbb, 0xffff, 0xcbd, 0xcbf, 0xffff, - 0xffff, 0xcc2, 0xcc4, 0xcc6, 0xcc8, 0xcca, 0xffff, 0xffff, - - 0xccc, 0xccf, 0xcd3, 0xffff, 0xcd6, 0xffff, 0xcd8, 0xffff, - 0xcda, 0xffff, 0xcdc, 0xcde, 0xce0, 0xce2, 0xffff, 0xce4, - - 0xce6, 0xce8, 0xffff, 0xcea, 0xcec, 0xcee, 0xcf0, 0xcf2, - 0xcf4, 0xcf6, 0xffff, 0xcf8, 0xcfc, 0xcfe, 0xd00, 0xd02, - - 0xd04, 0xffff, 0xffff, 0xffff, 0xffff, 0xd06, 0xd08, 0xd0a, - 0xd0c, 0xd0e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xd10, 0xd14, 0xd18, 0xd1d, 0xd21, 0xd25, 0xd29, 0xd2d, - 0xd31, 0xd35, 0xd39, 0xd3d, 0xd41, 0xd45, 0xd49, 0xd4d, - - 0xd50, 0xd52, 0xd55, 0xd59, 0xd5c, 0xd5e, 0xd61, 0xd65, - 0xd6a, 0xd6d, 0xd6f, 0xd72, 0xd76, 0xd78, 0xd7a, 0xd7c, - - 0xd7e, 0xd80, 0xd83, 0xd87, 0xd8a, 0xd8c, 0xd8f, 0xd93, - 0xd98, 0xd9b, 0xd9d, 0xda0, 0xda4, 0xda6, 0xda8, 0xdaa, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xdac, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xdb0, 0xdb3, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdb6, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdb9, 0xdbc, 0xdbf, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xdc2, 0xffff, 0xffff, 0xffff, - 0xffff, 0xdc5, 0xffff, 0xffff, 0xdc8, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xdcb, 0xffff, 0xdce, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xdd1, 0xdd4, 0xffff, 0xdd8, - - 0xddb, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xddf, 0xffff, 0xffff, 0xde2, 0xffff, 0xffff, 0xde5, - 0xffff, 0xde8, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xdeb, 0xffff, 0xdee, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdf1, 0xdf4, 0xdf7, - - 0xdfa, 0xdfd, 0xffff, 0xffff, 0xe00, 0xe03, 0xffff, 0xffff, - 0xe06, 0xe09, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xe0c, 0xe0f, 0xffff, 0xffff, 0xe12, 0xe15, 0xffff, 0xffff, - 0xe18, 0xe1b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xe1e, 0xe21, 0xe24, 0xe27, - - 0xe2a, 0xe2d, 0xe30, 0xe33, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xe36, 0xe39, 0xe3c, 0xe3f, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xe42, 0xe44, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xe46, 0xe48, 0xe4a, 0xe4c, 0xe4e, 0xe50, 0xe52, 0xe54, - 0xe56, 0xe58, 0xe5b, 0xe5e, 0xe61, 0xe64, 0xe67, 0xe6a, - - 0xe6d, 0xe70, 0xe73, 0xe76, 0xe79, 0xe7d, 0xe81, 0xe85, - 0xe89, 0xe8d, 0xe91, 0xe95, 0xe99, 0xe9d, 0xea2, 0xea7, - - 0xeac, 0xeb1, 0xeb6, 0xebb, 0xec0, 0xec5, 0xeca, 0xecf, - 0xed4, 0xed7, 0xeda, 0xedd, 0xee0, 0xee3, 0xee6, 0xee9, - - 0xeec, 0xeef, 0xef3, 0xef7, 0xefb, 0xeff, 0xf03, 0xf07, - 0xf0b, 0xf0f, 0xf13, 0xf17, 0xf1b, 0xf1f, 0xf23, 0xf27, - - 0xf2b, 0xf2f, 0xf33, 0xf37, 0xf3b, 0xf3f, 0xf43, 0xf47, - 0xf4b, 0xf4f, 0xf53, 0xf57, 0xf5b, 0xf5f, 0xf63, 0xf67, - - 0xf6b, 0xf6f, 0xf73, 0xf77, 0xf7b, 0xf7f, 0xf83, 0xf85, - 0xf87, 0xf89, 0xf8b, 0xf8d, 0xf8f, 0xf91, 0xf93, 0xf95, - - 0xf97, 0xf99, 0xf9b, 0xf9d, 0xf9f, 0xfa1, 0xfa3, 0xfa5, - 0xfa7, 0xfa9, 0xfab, 0xfad, 0xfaf, 0xfb1, 0xfb3, 0xfb5, - - 0xfb7, 0xfb9, 0xfbb, 0xfbd, 0xfbf, 0xfc1, 0xfc3, 0xfc5, - 0xfc7, 0xfc9, 0xfcb, 0xfcd, 0xfcf, 0xfd1, 0xfd3, 0xfd5, - - 0xfd7, 0xfd9, 0xfdb, 0xfdd, 0xfdf, 0xfe1, 0xfe3, 0xfe5, - 0xfe7, 0xfe9, 0xfeb, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xfed, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xff2, 0xff6, 0xff9, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffd, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x1000, 0x1002, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1004, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1006, - - 0xffff, 0xffff, 0xffff, 0x1008, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x100a, 0x100c, 0x100e, 0x1010, 0x1012, 0x1014, 0x1016, 0x1018, - 0x101a, 0x101c, 0x101e, 0x1020, 0x1022, 0x1024, 0x1026, 0x1028, - - 0x102a, 0x102c, 0x102e, 0x1030, 0x1032, 0x1034, 0x1036, 0x1038, - 0x103a, 0x103c, 0x103e, 0x1040, 0x1042, 0x1044, 0x1046, 0x1048, - - 0x104a, 0x104c, 0x104e, 0x1050, 0x1052, 0x1054, 0x1056, 0x1058, - 0x105a, 0x105c, 0x105e, 0x1060, 0x1062, 0x1064, 0x1066, 0x1068, - - 0x106a, 0x106c, 0x106e, 0x1070, 0x1072, 0x1074, 0x1076, 0x1078, - 0x107a, 0x107c, 0x107e, 0x1080, 0x1082, 0x1084, 0x1086, 0x1088, - - 0x108a, 0x108c, 0x108e, 0x1090, 0x1092, 0x1094, 0x1096, 0x1098, - 0x109a, 0x109c, 0x109e, 0x10a0, 0x10a2, 0x10a4, 0x10a6, 0x10a8, - - 0x10aa, 0x10ac, 0x10ae, 0x10b0, 0x10b2, 0x10b4, 0x10b6, 0x10b8, - 0x10ba, 0x10bc, 0x10be, 0x10c0, 0x10c2, 0x10c4, 0x10c6, 0x10c8, - - 0x10ca, 0x10cc, 0x10ce, 0x10d0, 0x10d2, 0x10d4, 0x10d6, 0x10d8, - 0x10da, 0x10dc, 0x10de, 0x10e0, 0x10e2, 0x10e4, 0x10e6, 0x10e8, - - 0x10ea, 0x10ec, 0x10ee, 0x10f0, 0x10f2, 0x10f4, 0x10f6, 0x10f8, - 0x10fa, 0x10fc, 0x10fe, 0x1100, 0x1102, 0x1104, 0x1106, 0x1108, - - 0x110a, 0x110c, 0x110e, 0x1110, 0x1112, 0x1114, 0x1116, 0x1118, - 0x111a, 0x111c, 0x111e, 0x1120, 0x1122, 0x1124, 0x1126, 0x1128, - - 0x112a, 0x112c, 0x112e, 0x1130, 0x1132, 0x1134, 0x1136, 0x1138, - 0x113a, 0x113c, 0x113e, 0x1140, 0x1142, 0x1144, 0x1146, 0x1148, - - 0x114a, 0x114c, 0x114e, 0x1150, 0x1152, 0x1154, 0x1156, 0x1158, - 0x115a, 0x115c, 0x115e, 0x1160, 0x1162, 0x1164, 0x1166, 0x1168, - - 0x116a, 0x116c, 0x116e, 0x1170, 0x1172, 0x1174, 0x1176, 0x1178, - 0x117a, 0x117c, 0x117e, 0x1180, 0x1182, 0x1184, 0x1186, 0x1188, - - 0x118a, 0x118c, 0x118e, 0x1190, 0x1192, 0x1194, 0x1196, 0x1198, - 0x119a, 0x119c, 0x119e, 0x11a0, 0x11a2, 0x11a4, 0x11a6, 0x11a8, - - 0x11aa, 0x11ac, 0x11ae, 0x11b0, 0x11b2, 0x11b4, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x11b6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x11b8, 0xffff, - 0x11ba, 0x11bc, 0x11be, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x11c0, 0xffff, 0x11c3, 0xffff, - - 0x11c6, 0xffff, 0x11c9, 0xffff, 0x11cc, 0xffff, 0x11cf, 0xffff, - 0x11d2, 0xffff, 0x11d5, 0xffff, 0x11d8, 0xffff, 0x11db, 0xffff, - - 0x11de, 0xffff, 0x11e1, 0xffff, 0xffff, 0x11e4, 0xffff, 0x11e7, - 0xffff, 0x11ea, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x11ed, 0x11f0, 0xffff, 0x11f3, 0x11f6, 0xffff, 0x11f9, 0x11fc, - 0xffff, 0x11ff, 0x1202, 0xffff, 0x1205, 0x1208, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0x120b, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0x120e, 0x1211, 0xffff, 0x1214, 0x1217, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x121a, 0xffff, 0x121d, 0xffff, - - 0x1220, 0xffff, 0x1223, 0xffff, 0x1226, 0xffff, 0x1229, 0xffff, - 0x122c, 0xffff, 0x122f, 0xffff, 0x1232, 0xffff, 0x1235, 0xffff, - - 0x1238, 0xffff, 0x123b, 0xffff, 0xffff, 0x123e, 0xffff, 0x1241, - 0xffff, 0x1244, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x1247, 0x124a, 0xffff, 0x124d, 0x1250, 0xffff, 0x1253, 0x1256, - 0xffff, 0x1259, 0x125c, 0xffff, 0x125f, 0x1262, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0x1265, 0xffff, 0xffff, 0x1268, - 0x126b, 0x126e, 0x1271, 0xffff, 0xffff, 0xffff, 0x1274, 0x1277, - - 0xffff, 0x127a, 0x127c, 0x127e, 0x1280, 0x1282, 0x1284, 0x1286, - 0x1288, 0x128a, 0x128c, 0x128e, 0x1290, 0x1292, 0x1294, 0x1296, - - 0x1298, 0x129a, 0x129c, 0x129e, 0x12a0, 0x12a2, 0x12a4, 0x12a6, - 0x12a8, 0x12aa, 0x12ac, 0x12ae, 0x12b0, 0x12b2, 0x12b4, 0x12b6, - - 0x12b8, 0x12ba, 0x12bc, 0x12be, 0x12c0, 0x12c2, 0x12c4, 0x12c6, - 0x12c8, 0x12ca, 0x12cc, 0x12ce, 0x12d0, 0x12d2, 0x12d4, 0x12d6, - - 0x12d8, 0x12da, 0x12dc, 0x12de, 0x12e0, 0x12e2, 0x12e4, 0x12e6, - 0x12e8, 0x12ea, 0x12ec, 0x12ee, 0x12f0, 0x12f2, 0x12f4, 0x12f6, - - 0x12f8, 0x12fa, 0x12fc, 0x12fe, 0x1300, 0x1302, 0x1304, 0x1306, - 0x1308, 0x130a, 0x130c, 0x130e, 0x1310, 0x1312, 0x1314, 0x1316, - - 0x1318, 0x131a, 0x131c, 0x131e, 0x1320, 0x1322, 0x1324, 0x1326, - 0x1328, 0x132a, 0x132c, 0x132e, 0x1330, 0x1332, 0x1334, 0xffff, - - 0xffff, 0xffff, 0x1336, 0x1338, 0x133a, 0x133c, 0x133e, 0x1340, - 0x1342, 0x1344, 0x1346, 0x1348, 0x134a, 0x134c, 0x134e, 0x1350, - - 0x1352, 0x1356, 0x135a, 0x135e, 0x1362, 0x1366, 0x136a, 0x136e, - 0x1372, 0x1376, 0x137a, 0x137e, 0x1382, 0x1386, 0x138a, 0x138f, - - 0x1394, 0x1399, 0x139e, 0x13a3, 0x13a8, 0x13ad, 0x13b2, 0x13b7, - 0x13bc, 0x13c1, 0x13c6, 0x13cb, 0x13d0, 0x13d5, 0x13dd, 0xffff, - - 0x13e4, 0x13e8, 0x13ec, 0x13f0, 0x13f4, 0x13f8, 0x13fc, 0x1400, - 0x1404, 0x1408, 0x140c, 0x1410, 0x1414, 0x1418, 0x141c, 0x1420, - - 0x1424, 0x1428, 0x142c, 0x1430, 0x1434, 0x1438, 0x143c, 0x1440, - 0x1444, 0x1448, 0x144c, 0x1450, 0x1454, 0x1458, 0x145c, 0x1460, - - 0x1464, 0x1468, 0x146c, 0x1470, 0x1474, 0x1476, 0x1478, 0x147a, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x147c, 0x1480, 0x1483, 0x1486, 0x1489, 0x148c, 0x148f, 0x1492, - 0x1495, 0x1498, 0x149b, 0x149e, 0x14a1, 0x14a4, 0x14a7, 0x14aa, - - 0x14ad, 0x14af, 0x14b1, 0x14b3, 0x14b5, 0x14b7, 0x14b9, 0x14bb, - 0x14bd, 0x14bf, 0x14c1, 0x14c3, 0x14c5, 0x14c7, 0x14c9, 0x14cc, - - 0x14cf, 0x14d2, 0x14d5, 0x14d8, 0x14db, 0x14de, 0x14e1, 0x14e4, - 0x14e7, 0x14ea, 0x14ed, 0x14f0, 0x14f3, 0x14f9, 0x14fe, 0xffff, - - 0x1501, 0x1503, 0x1505, 0x1507, 0x1509, 0x150b, 0x150d, 0x150f, - 0x1511, 0x1513, 0x1515, 0x1517, 0x1519, 0x151b, 0x151d, 0x151f, - - 0x1521, 0x1523, 0x1525, 0x1527, 0x1529, 0x152b, 0x152d, 0x152f, - 0x1531, 0x1533, 0x1535, 0x1537, 0x1539, 0x153b, 0x153d, 0x153f, - - 0x1541, 0x1543, 0x1545, 0x1547, 0x1549, 0x154b, 0x154d, 0x154f, - 0x1551, 0x1553, 0x1555, 0x1557, 0x1559, 0x155b, 0x155d, 0x155f, - - 0x1561, 0x1563, 0x1566, 0x1569, 0x156c, 0x156f, 0x1572, 0x1575, - 0x1578, 0x157b, 0x157e, 0x1581, 0x1584, 0x1587, 0x158a, 0x158d, - - 0x1590, 0x1593, 0x1596, 0x1599, 0x159c, 0x159f, 0x15a2, 0x15a5, - 0x15a8, 0x15ab, 0x15af, 0x15b3, 0x15b7, 0x15ba, 0x15be, 0x15c1, - - 0x15c5, 0x15c7, 0x15c9, 0x15cb, 0x15cd, 0x15cf, 0x15d1, 0x15d3, - 0x15d5, 0x15d7, 0x15d9, 0x15db, 0x15dd, 0x15df, 0x15e1, 0x15e3, - - 0x15e5, 0x15e7, 0x15e9, 0x15eb, 0x15ed, 0x15ef, 0x15f1, 0x15f3, - 0x15f5, 0x15f7, 0x15f9, 0x15fb, 0x15fd, 0x15ff, 0x1601, 0x1603, - - 0x1605, 0x1607, 0x1609, 0x160b, 0x160d, 0x160f, 0x1611, 0x1613, - 0x1615, 0x1617, 0x1619, 0x161b, 0x161d, 0x161f, 0x1621, 0xffff, - - 0x1623, 0x1628, 0x162d, 0x1632, 0x1636, 0x163b, 0x163f, 0x1643, - 0x1649, 0x164e, 0x1652, 0x1656, 0x165a, 0x165f, 0x1664, 0x1668, - - 0x166c, 0x166f, 0x1673, 0x1678, 0x167d, 0x1680, 0x1686, 0x168d, - 0x1693, 0x1697, 0x169d, 0x16a3, 0x16a8, 0x16ac, 0x16b0, 0x16b4, - - 0x16b9, 0x16bf, 0x16c4, 0x16c8, 0x16cc, 0x16d0, 0x16d3, 0x16d6, - 0x16d9, 0x16dc, 0x16e0, 0x16e4, 0x16ea, 0x16ee, 0x16f3, 0x16f9, - - 0x16fd, 0x1700, 0x1703, 0x1709, 0x170e, 0x1714, 0x1718, 0x171e, - 0x1721, 0x1725, 0x1729, 0x172d, 0x1731, 0x1735, 0x173a, 0x173e, - - 0x1741, 0x1745, 0x1749, 0x174d, 0x1752, 0x1756, 0x175a, 0x175e, - 0x1764, 0x1769, 0x176c, 0x1772, 0x1775, 0x177a, 0x177f, 0x1783, - - 0x1787, 0x178b, 0x1790, 0x1793, 0x1797, 0x179c, 0x179f, 0x17a5, - 0x17a9, 0x17ac, 0x17af, 0x17b2, 0x17b5, 0x17b8, 0x17bb, 0x17be, - - 0x17c1, 0x17c4, 0x17c7, 0x17cb, 0x17cf, 0x17d3, 0x17d7, 0x17db, - 0x17df, 0x17e3, 0x17e7, 0x17eb, 0x17ef, 0x17f3, 0x17f7, 0x17fb, - - 0x17ff, 0x1803, 0x1807, 0x180a, 0x180d, 0x1811, 0x1814, 0x1817, - 0x181a, 0x181e, 0x1822, 0x1825, 0x1828, 0x182b, 0x182e, 0x1831, - - 0x1836, 0x1839, 0x183c, 0x183f, 0x1842, 0x1845, 0x1848, 0x184b, - 0x184e, 0x1852, 0x1857, 0x185a, 0x185d, 0x1860, 0x1863, 0x1866, - - 0x1869, 0x186c, 0x1870, 0x1874, 0x1878, 0x187c, 0x187f, 0x1882, - 0x1885, 0x1888, 0x188b, 0x188e, 0x1891, 0x1894, 0x1897, 0x189a, - - 0x189e, 0x18a2, 0x18a5, 0x18a9, 0x18ad, 0x18b1, 0x18b4, 0x18b8, - 0x18bc, 0x18c1, 0x18c4, 0x18c8, 0x18cc, 0x18d0, 0x18d4, 0x18da, - - 0x18e1, 0x18e4, 0x18e7, 0x18ea, 0x18ed, 0x18f0, 0x18f3, 0x18f6, - 0x18f9, 0x18fc, 0x18ff, 0x1902, 0x1905, 0x1908, 0x190b, 0x190e, - - 0x1911, 0x1914, 0x1917, 0x191c, 0x191f, 0x1922, 0x1925, 0x192a, - 0x192e, 0x1931, 0x1934, 0x1937, 0x193a, 0x193d, 0x1940, 0x1943, - - 0x1946, 0x1949, 0x194c, 0x1950, 0x1953, 0x1956, 0x195a, 0x195e, - 0x1961, 0x1966, 0x196a, 0x196d, 0x1970, 0x1973, 0x1976, 0x197a, - - 0x197e, 0x1981, 0x1984, 0x1987, 0x198a, 0x198d, 0x1990, 0x1993, - 0x1996, 0x1999, 0x199d, 0x19a1, 0x19a5, 0x19a9, 0x19ad, 0x19b1, - - 0x19b5, 0x19b9, 0x19bd, 0x19c1, 0x19c5, 0x19c9, 0x19cd, 0x19d1, - 0x19d5, 0x19d9, 0x19dd, 0x19e1, 0x19e5, 0x19e9, 0x19ed, 0x19f1, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x19f5, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x19f7, 0x19f9, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x19fb, 0x19fd, 0x19ff, 0x1a01, 0x1a03, 0x1a05, 0x1a07, 0x1a09, - 0x1a0b, 0x1a0d, 0x1a0f, 0x1a11, 0x1a13, 0x1a15, 0x1a17, 0x1a19, - 0x1a1b, 0x1a1d, 0x1a1f, 0x1a21, 0x1a23, 0x1a25, 0x1a27, 0x1a29, - 0x1a2b, 0x1a2d, 0x1a2f, 0x1a31, 0x1a33, 0x1a35, 0x1a37, 0x1a39, - 0x1a3b, 0x1a3d, 0x1a3f, 0x1a41, 0x1a43, 0x1a45, 0x1a47, 0x1a49, - 0x1a4b, 0x1a4d, 0x1a4f, 0x1a51, 0x1a53, 0x1a55, 0x1a57, 0x1a59, - 0x1a5b, 0x1a5d, 0x1a5f, 0x1a61, 0x1a63, 0x1a65, 0x1a67, 0x1a69, - 0x1a6b, 0x1a6d, 0x1a6f, 0x1a71, 0x1a73, 0x1a75, 0x1a77, 0x1a79, - 0x1a7b, 0x1a7d, 0x1a7f, 0x1a81, 0x1a83, 0x1a85, 0x1a87, 0x1a89, - 0x1a8b, 0x1a8d, 0x1a8f, 0x1a91, 0x1a93, 0x1a95, 0x1a97, 0x1a99, - 0x1a9b, 0x1a9d, 0x1a9f, 0x1aa1, 0x1aa3, 0x1aa5, 0x1aa7, 0x1aa9, - 0x1aab, 0x1aad, 0x1aaf, 0x1ab1, 0x1ab3, 0x1ab5, 0x1ab7, 0x1ab9, - 0x1abb, 0x1abd, 0x1abf, 0x1ac1, 0x1ac3, 0x1ac5, 0x1ac7, 0x1ac9, - 0x1acb, 0x1acd, 0x1acf, 0x1ad1, 0x1ad3, 0x1ad5, 0x1ad7, 0x1ad9, - 0x1adb, 0x1add, 0x1adf, 0x1ae1, 0x1ae3, 0x1ae5, 0x1ae7, 0x1ae9, - 0x1aeb, 0x1aed, 0x1aef, 0x1af1, 0x1af3, 0x1af5, 0x1af7, 0x1af9, - 0x1afb, 0x1afd, 0x1aff, 0x1b01, 0x1b03, 0x1b05, 0x1b07, 0x1b09, - 0x1b0b, 0x1b0d, 0x1b0f, 0x1b11, 0x1b13, 0x1b15, 0x1b17, 0x1b19, - 0x1b1b, 0x1b1d, 0x1b1f, 0x1b21, 0x1b23, 0x1b25, 0x1b27, 0x1b29, - 0x1b2b, 0x1b2d, 0x1b2f, 0x1b31, 0x1b33, 0x1b35, 0x1b37, 0x1b39, - 0x1b3b, 0x1b3d, 0x1b3f, 0x1b41, 0x1b43, 0x1b45, 0x1b47, 0x1b49, - 0x1b4b, 0x1b4d, 0x1b4f, 0x1b51, 0x1b53, 0x1b55, 0x1b57, 0x1b59, - 0x1b5b, 0x1b5d, 0x1b5f, 0x1b61, 0x1b63, 0x1b65, 0x1b67, 0x1b69, - 0x1b6b, 0x1b6d, 0x1b6f, 0x1b71, 0x1b73, 0x1b75, 0x1b77, 0x1b79, - 0x1b7b, 0x1b7d, 0x1b7f, 0x1b81, 0x1b83, 0x1b85, 0x1b87, 0x1b89, - 0x1b8b, 0x1b8d, 0x1b8f, 0x1b91, 0x1b93, 0x1b95, 0x1b97, 0x1b99, - 0x1b9b, 0x1b9d, 0x1b9f, 0x1ba1, 0x1ba3, 0x1ba5, 0x1ba7, 0x1ba9, - 0x1bab, 0x1bad, 0x1baf, 0x1bb1, 0x1bb3, 0x1bb5, 0x1bb7, 0x1bb9, - 0x1bbb, 0x1bbd, 0x1bbf, 0x1bc1, 0x1bc3, 0x1bc5, 0x1bc7, 0x1bc9, - 0x1bcb, 0x1bcd, 0x1bcf, 0x1bd1, 0x1bd3, 0x1bd5, 0x1bd7, 0x1bd9, - 0x1bdb, 0x1bdd, 0x1bdf, 0x1be1, 0x1be3, 0x1be5, 0x1be7, 0x1be9, - 0x1beb, 0x1bed, 0x1bef, 0x1bf1, 0x1bf3, 0x1bf5, 0x1bf7, 0x1bf9, - - 0x1bfb, 0x1bfd, 0x1bff, 0x1c01, 0x1c03, 0x1c05, 0x1c07, 0x1c09, - 0x1c0b, 0x1c0d, 0x1c0f, 0x1c11, 0x1c13, 0x1c15, 0xffff, 0xffff, - 0x1c17, 0xffff, 0x1c19, 0xffff, 0xffff, 0x1c1b, 0x1c1d, 0x1c1f, - 0x1c21, 0x1c23, 0x1c25, 0x1c27, 0x1c29, 0x1c2b, 0x1c2d, 0xffff, - 0x1c2f, 0xffff, 0x1c31, 0xffff, 0xffff, 0x1c33, 0x1c35, 0xffff, - 0xffff, 0xffff, 0x1c37, 0x1c39, 0x1c3b, 0x1c3d, 0x1c3f, 0x1c41, - 0x1c43, 0x1c45, 0x1c47, 0x1c49, 0x1c4b, 0x1c4d, 0x1c4f, 0x1c51, - 0x1c53, 0x1c55, 0x1c57, 0x1c59, 0x1c5b, 0x1c5d, 0x1c5f, 0x1c61, - 0x1c63, 0x1c65, 0x1c67, 0x1c69, 0x1c6b, 0x1c6d, 0x1c6f, 0x1c71, - 0x1c73, 0x1c75, 0x1c77, 0x1c79, 0x1c7b, 0x1c7d, 0x1c7f, 0x1c81, - 0x1c83, 0x1c85, 0x1c87, 0x1c89, 0x1c8b, 0x1c8d, 0x1c8f, 0x1c91, - 0x1c93, 0x1c95, 0x1c97, 0x1c99, 0x1c9b, 0x1c9d, 0x1c9f, 0x1ca1, - 0x1ca3, 0x1ca5, 0x1ca7, 0x1ca9, 0x1cab, 0x1cad, 0x1caf, 0x1cb1, - 0x1cb3, 0x1cb5, 0x1cb7, 0x1cb9, 0x1cbb, 0x1cbe, 0xffff, 0xffff, - 0x1cc0, 0x1cc2, 0x1cc4, 0x1cc6, 0x1cc8, 0x1cca, 0x1ccc, 0x1cce, - 0x1cd0, 0x1cd2, 0x1cd4, 0x1cd6, 0x1cd8, 0x1cda, 0x1cdc, 0x1cde, - 0x1ce0, 0x1ce2, 0x1ce4, 0x1ce6, 0x1ce8, 0x1cea, 0x1cec, 0x1cee, - 0x1cf0, 0x1cf2, 0x1cf4, 0x1cf6, 0x1cf8, 0x1cfa, 0x1cfc, 0x1cfe, - 0x1d00, 0x1d02, 0x1d04, 0x1d06, 0x1d08, 0x1d0a, 0x1d0c, 0x1d0e, - 0x1d10, 0x1d12, 0x1d14, 0x1d16, 0x1d18, 0x1d1a, 0x1d1c, 0x1d1e, - 0x1d20, 0x1d22, 0x1d24, 0x1d26, 0x1d28, 0x1d2a, 0x1d2c, 0x1d2e, - 0x1d30, 0x1d32, 0x1d34, 0x1d36, 0x1d38, 0x1d3a, 0x1d3c, 0x1d3e, - 0x1d40, 0x1d42, 0x1d44, 0x1d46, 0x1d48, 0x1d4a, 0x1d4c, 0x1d4e, - 0x1d50, 0x1d52, 0x1d54, 0x1d56, 0x1d58, 0x1d5a, 0x1d5c, 0x1d5e, - 0x1d60, 0x1d62, 0x1d64, 0x1d66, 0x1d68, 0x1d6a, 0x1d6c, 0x1d6e, - 0x1d70, 0x1d72, 0x1d74, 0x1d76, 0x1d78, 0x1d7a, 0x1d7c, 0x1d7e, - 0x1d81, 0x1d84, 0x1d87, 0x1d89, 0x1d8b, 0x1d8d, 0x1d90, 0x1d93, - 0x1d96, 0x1d98, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x1d9a, 0x1d9d, 0x1da0, 0x1da3, 0x1da7, 0x1dab, 0x1dae, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0x1db1, 0x1db4, 0x1db7, 0x1dba, 0x1dbd, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1dc0, 0xffff, 0x1dc3, - 0x1dc6, 0x1dc8, 0x1dca, 0x1dcc, 0x1dce, 0x1dd0, 0x1dd2, 0x1dd4, - 0x1dd6, 0x1dd8, 0x1dda, 0x1ddd, 0x1de0, 0x1de3, 0x1de6, 0x1de9, - 0x1dec, 0x1def, 0x1df2, 0x1df5, 0x1df8, 0x1dfb, 0x1dfe, 0xffff, - 0x1e01, 0x1e04, 0x1e07, 0x1e0a, 0x1e0d, 0xffff, 0x1e10, 0xffff, - 0x1e13, 0x1e16, 0xffff, 0x1e19, 0x1e1c, 0xffff, 0x1e1f, 0x1e22, - 0x1e25, 0x1e28, 0x1e2b, 0x1e2e, 0x1e31, 0x1e34, 0x1e37, 0x1e3a, - 0x1e3d, 0x1e3f, 0x1e41, 0x1e43, 0x1e45, 0x1e47, 0x1e49, 0x1e4b, - 0x1e4d, 0x1e4f, 0x1e51, 0x1e53, 0x1e55, 0x1e57, 0x1e59, 0x1e5b, - 0x1e5d, 0x1e5f, 0x1e61, 0x1e63, 0x1e65, 0x1e67, 0x1e69, 0x1e6b, - 0x1e6d, 0x1e6f, 0x1e71, 0x1e73, 0x1e75, 0x1e77, 0x1e79, 0x1e7b, - 0x1e7d, 0x1e7f, 0x1e81, 0x1e83, 0x1e85, 0x1e87, 0x1e89, 0x1e8b, - 0x1e8d, 0x1e8f, 0x1e91, 0x1e93, 0x1e95, 0x1e97, 0x1e99, 0x1e9b, - 0x1e9d, 0x1e9f, 0x1ea1, 0x1ea3, 0x1ea5, 0x1ea7, 0x1ea9, 0x1eab, - 0x1ead, 0x1eaf, 0x1eb1, 0x1eb3, 0x1eb5, 0x1eb7, 0x1eb9, 0x1ebb, - 0x1ebd, 0x1ebf, 0x1ec1, 0x1ec3, 0x1ec5, 0x1ec7, 0x1ec9, 0x1ecb, - 0x1ecd, 0x1ecf, 0x1ed1, 0x1ed3, 0x1ed5, 0x1ed7, 0x1ed9, 0x1edb, - 0x1edd, 0x1edf, 0x1ee1, 0x1ee3, 0x1ee5, 0x1ee7, 0x1ee9, 0x1eeb, - 0x1eed, 0x1eef, 0x1ef1, 0x1ef3, 0x1ef5, 0x1ef7, 0x1ef9, 0x1efb, - 0x1efd, 0x1eff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0x1f01, 0x1f03, 0x1f05, 0x1f07, 0x1f09, - 0x1f0b, 0x1f0d, 0x1f0f, 0x1f11, 0x1f13, 0x1f15, 0x1f17, 0x1f19, - 0x1f1b, 0x1f1d, 0x1f1f, 0x1f21, 0x1f23, 0x1f25, 0x1f27, 0x1f29, - 0x1f2b, 0x1f2d, 0x1f2f, 0x1f32, 0x1f35, 0x1f38, 0x1f3b, 0x1f3e, - 0x1f41, 0x1f44, 0x1f47, 0x1f4a, 0x1f4d, 0x1f50, 0x1f53, 0x1f56, - 0x1f59, 0x1f5c, 0x1f5f, 0x1f62, 0x1f65, 0x1f67, 0x1f69, 0x1f6b, - - 0x1f6d, 0x1f70, 0x1f73, 0x1f76, 0x1f79, 0x1f7c, 0x1f7f, 0x1f82, - 0x1f85, 0x1f88, 0x1f8b, 0x1f8e, 0x1f91, 0x1f94, 0x1f97, 0x1f9a, - 0x1f9d, 0x1fa0, 0x1fa3, 0x1fa6, 0x1fa9, 0x1fac, 0x1faf, 0x1fb2, - 0x1fb5, 0x1fb8, 0x1fbb, 0x1fbe, 0x1fc1, 0x1fc4, 0x1fc7, 0x1fca, - 0x1fcd, 0x1fd0, 0x1fd3, 0x1fd6, 0x1fd9, 0x1fdc, 0x1fdf, 0x1fe2, - 0x1fe5, 0x1fe8, 0x1feb, 0x1fee, 0x1ff1, 0x1ff4, 0x1ff7, 0x1ffa, - 0x1ffd, 0x2000, 0x2003, 0x2006, 0x2009, 0x200c, 0x200f, 0x2012, - 0x2015, 0x2018, 0x201b, 0x201e, 0x2021, 0x2024, 0x2027, 0x202a, - 0x202d, 0x2030, 0x2033, 0x2036, 0x2039, 0x203c, 0x203f, 0x2042, - 0x2045, 0x2048, 0x204b, 0x204e, 0x2051, 0x2054, 0x2057, 0x205a, - 0x205d, 0x2060, 0x2063, 0x2066, 0x2069, 0x206c, 0x206f, 0x2072, - 0x2075, 0x2078, 0x207b, 0x207e, 0x2081, 0x2084, 0x2087, 0x208b, - 0x208f, 0x2093, 0x2097, 0x209b, 0x209f, 0x20a2, 0x20a5, 0x20a8, - 0x20ab, 0x20ae, 0x20b1, 0x20b4, 0x20b7, 0x20ba, 0x20bd, 0x20c0, - 0x20c3, 0x20c6, 0x20c9, 0x20cc, 0x20cf, 0x20d2, 0x20d5, 0x20d8, - 0x20db, 0x20de, 0x20e1, 0x20e4, 0x20e7, 0x20ea, 0x20ed, 0x20f0, - 0x20f3, 0x20f6, 0x20f9, 0x20fc, 0x20ff, 0x2102, 0x2105, 0x2108, - 0x210b, 0x210e, 0x2111, 0x2114, 0x2117, 0x211a, 0x211d, 0x2120, - 0x2123, 0x2126, 0x2129, 0x212c, 0x212f, 0x2132, 0x2135, 0x2138, - 0x213b, 0x213e, 0x2141, 0x2144, 0x2147, 0x214a, 0x214d, 0x2150, - 0x2153, 0x2156, 0x2159, 0x215c, 0x215f, 0x2162, 0x2165, 0x2168, - 0x216b, 0x216e, 0x2171, 0x2174, 0x2177, 0x217a, 0x217d, 0x2180, - 0x2183, 0x2186, 0x2189, 0x218c, 0x218f, 0x2192, 0x2195, 0x2198, - 0x219b, 0x219e, 0x21a1, 0x21a4, 0x21a7, 0x21aa, 0x21ad, 0x21b0, - 0x21b3, 0x21b6, 0x21b9, 0x21bc, 0x21bf, 0x21c2, 0x21c5, 0x21c8, - 0x21cb, 0x21ce, 0x21d1, 0x21d4, 0x21d7, 0x21da, 0x21dd, 0x21e0, - 0x21e3, 0x21e6, 0x21e9, 0x21ec, 0x21ef, 0x21f2, 0x21f5, 0x21f8, - 0x21fb, 0x21fe, 0x2201, 0x2204, 0x2207, 0x220a, 0x220d, 0x2210, - 0x2213, 0x2216, 0x2219, 0x221c, 0x221f, 0x2222, 0x2225, 0x2228, - 0x222b, 0x222e, 0x2231, 0x2234, 0x2237, 0x223a, 0x223d, 0x2240, - 0x2243, 0x2246, 0x2249, 0x224d, 0x2251, 0x2255, 0x2258, 0x225b, - 0x225e, 0x2261, 0x2264, 0x2267, 0x226a, 0x226d, 0x2270, 0x2273, - - 0x2276, 0x2279, 0x227c, 0x227f, 0x2282, 0x2285, 0x2288, 0x228b, - 0x228e, 0x2291, 0x2294, 0x2297, 0x229a, 0x229d, 0x22a0, 0x22a3, - 0x22a6, 0x22a9, 0x22ac, 0x22af, 0x22b2, 0x22b5, 0x22b8, 0x22bb, - 0x22be, 0x22c1, 0x22c4, 0x22c7, 0x22ca, 0x22cd, 0x22d0, 0x22d3, - 0x22d6, 0x22d9, 0x22dc, 0x22df, 0x22e2, 0x22e5, 0x22e8, 0x22eb, - 0x22ee, 0x22f1, 0x22f4, 0x22f7, 0x22fa, 0x22fd, 0x2300, 0x2303, - 0x2306, 0x2309, 0x230c, 0x230f, 0x2312, 0x2315, 0x2318, 0x231b, - 0x231e, 0x2321, 0x2324, 0x2327, 0x232a, 0x232d, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x2330, 0x2334, 0x2338, 0x233c, 0x2340, 0x2344, 0x2348, 0x234c, - 0x2350, 0x2354, 0x2358, 0x235c, 0x2360, 0x2364, 0x2368, 0x236c, - 0x2370, 0x2374, 0x2378, 0x237c, 0x2380, 0x2384, 0x2388, 0x238c, - 0x2390, 0x2394, 0x2398, 0x239c, 0x23a0, 0x23a4, 0x23a8, 0x23ac, - 0x23b0, 0x23b4, 0x23b8, 0x23bc, 0x23c0, 0x23c4, 0x23c8, 0x23cc, - 0x23d0, 0x23d4, 0x23d8, 0x23dc, 0x23e0, 0x23e4, 0x23e8, 0x23ec, - 0x23f0, 0x23f4, 0x23f8, 0x23fc, 0x2400, 0x2404, 0x2408, 0x240c, - 0x2410, 0x2414, 0x2418, 0x241c, 0x2420, 0x2424, 0x2428, 0x242c, - 0xffff, 0xffff, 0x2430, 0x2434, 0x2438, 0x243c, 0x2440, 0x2444, - 0x2448, 0x244c, 0x2450, 0x2454, 0x2458, 0x245c, 0x2460, 0x2464, - 0x2468, 0x246c, 0x2470, 0x2474, 0x2478, 0x247c, 0x2480, 0x2484, - 0x2488, 0x248c, 0x2490, 0x2494, 0x2498, 0x249c, 0x24a0, 0x24a4, - 0x24a8, 0x24ac, 0x24b0, 0x24b4, 0x24b8, 0x24bc, 0x24c0, 0x24c4, - 0x24c8, 0x24cc, 0x24d0, 0x24d4, 0x24d8, 0x24dc, 0x24e0, 0x24e4, - 0x24e8, 0x24ec, 0x24f0, 0x24f4, 0x24f8, 0x24fc, 0x2500, 0x2504, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x2508, 0x250c, 0x2510, 0x2515, 0x251a, 0x251f, 0x2524, 0x2529, - 0x252e, 0x2533, 0x2537, 0x254a, 0x2553, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x2558, 0x255a, 0x255c, 0x255e, 0x2560, 0x2562, 0x2564, 0x2566, - 0x2568, 0x256a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x256c, 0x256e, 0x2570, 0x2572, 0x2574, 0x2576, 0x2578, 0x257a, - 0x257c, 0x257e, 0x2580, 0x2582, 0x2584, 0x2586, 0x2588, 0x258a, - 0x258c, 0x258e, 0x2590, 0x2592, 0x2594, 0xffff, 0xffff, 0x2596, - 0x2598, 0x259a, 0x259c, 0x259e, 0x25a0, 0x25a2, 0x25a4, 0x25a6, - 0x25a8, 0x25aa, 0x25ac, 0xffff, 0x25ae, 0x25b0, 0x25b2, 0x25b4, - 0x25b6, 0x25b8, 0x25ba, 0x25bc, 0x25be, 0x25c0, 0x25c2, 0x25c4, - 0x25c6, 0x25c8, 0x25ca, 0x25cc, 0x25ce, 0x25d0, 0x25d2, 0xffff, - 0x25d4, 0x25d6, 0x25d8, 0x25da, 0xffff, 0xffff, 0xffff, 0xffff, - 0x25dc, 0x25df, 0x25e2, 0xffff, 0x25e5, 0xffff, 0x25e8, 0x25eb, - 0x25ee, 0x25f1, 0x25f4, 0x25f7, 0x25fa, 0x25fd, 0x2600, 0x2603, - 0x2606, 0x2608, 0x260a, 0x260c, 0x260e, 0x2610, 0x2612, 0x2614, - 0x2616, 0x2618, 0x261a, 0x261c, 0x261e, 0x2620, 0x2622, 0x2624, - 0x2626, 0x2628, 0x262a, 0x262c, 0x262e, 0x2630, 0x2632, 0x2634, - 0x2636, 0x2638, 0x263a, 0x263c, 0x263e, 0x2640, 0x2642, 0x2644, - 0x2646, 0x2648, 0x264a, 0x264c, 0x264e, 0x2650, 0x2652, 0x2654, - 0x2656, 0x2658, 0x265a, 0x265c, 0x265e, 0x2660, 0x2662, 0x2664, - 0x2666, 0x2668, 0x266a, 0x266c, 0x266e, 0x2670, 0x2672, 0x2674, - 0x2676, 0x2678, 0x267a, 0x267c, 0x267e, 0x2680, 0x2682, 0x2684, - 0x2686, 0x2688, 0x268a, 0x268c, 0x268e, 0x2690, 0x2692, 0x2694, - 0x2696, 0x2698, 0x269a, 0x269c, 0x269e, 0x26a0, 0x26a2, 0x26a4, - 0x26a6, 0x26a8, 0x26aa, 0x26ac, 0x26ae, 0x26b0, 0x26b2, 0x26b4, - 0x26b6, 0x26b8, 0x26ba, 0x26bc, 0x26be, 0x26c0, 0x26c2, 0x26c4, - 0x26c6, 0x26c8, 0x26ca, 0x26cc, 0x26ce, 0x26d0, 0x26d2, 0x26d4, - 0x26d6, 0x26d8, 0x26da, 0x26dc, 0x26de, 0x26e0, 0x26e2, 0x26e4, - 0x26e6, 0x26e8, 0x26ea, 0x26ec, 0x26ee, 0x26f0, 0x26f3, 0x26f6, - 0x26f9, 0x26fc, 0x26ff, 0x2702, 0x2705, 0xffff, 0xffff, 0xffff, - - 0xffff, 0x2708, 0x270a, 0x270c, 0x270e, 0x2710, 0x2712, 0x2714, - 0x2716, 0x2718, 0x271a, 0x271c, 0x271e, 0x2720, 0x2722, 0x2724, - 0x2726, 0x2728, 0x272a, 0x272c, 0x272e, 0x2730, 0x2732, 0x2734, - 0x2736, 0x2738, 0x273a, 0x273c, 0x273e, 0x2740, 0x2742, 0x2744, - 0x2746, 0x2748, 0x274a, 0x274c, 0x274e, 0x2750, 0x2752, 0x2754, - 0x2756, 0x2758, 0x275a, 0x275c, 0x275e, 0x2760, 0x2762, 0x2764, - 0x2766, 0x2768, 0x276a, 0x276c, 0x276e, 0x2770, 0x2772, 0x2774, - 0x2776, 0x2778, 0x277a, 0x277c, 0x277e, 0x2780, 0x2782, 0x2784, - 0x2786, 0x2788, 0x278a, 0x278c, 0x278e, 0x2790, 0x2792, 0x2794, - 0x2796, 0x2798, 0x279a, 0x279c, 0x279e, 0x27a0, 0x27a2, 0x27a4, - 0x27a6, 0x27a8, 0x27aa, 0x27ac, 0x27ae, 0x27b0, 0x27b2, 0x27b4, - 0x27b6, 0x27b8, 0x27ba, 0x27bc, 0x27be, 0x27c0, 0x27c2, 0x27c4, - 0x27c6, 0x27c8, 0x27ca, 0x27cc, 0x27ce, 0x27d0, 0x27d2, 0x27d4, - 0x27d6, 0x27d8, 0x27da, 0x27dc, 0x27de, 0x27e0, 0x27e2, 0x27e4, - 0x27e6, 0x27e8, 0x27ea, 0x27ec, 0x27ee, 0x27f0, 0x27f2, 0x27f4, - 0x27f6, 0x27f8, 0x27fa, 0x27fc, 0x27fe, 0x2800, 0x2802, 0x2804, - 0x2806, 0x2808, 0x280a, 0x280c, 0x280e, 0x2810, 0x2812, 0x2814, - 0x2816, 0x2818, 0x281a, 0x281c, 0x281e, 0x2820, 0x2822, 0x2824, - 0x2826, 0x2828, 0x282a, 0x282c, 0x282e, 0x2830, 0x2832, 0x2834, - 0x2836, 0x2838, 0x283a, 0x283c, 0x283e, 0x2840, 0x2842, 0x2844, - 0x2846, 0x2848, 0x284a, 0x284c, 0x284e, 0x2850, 0x2852, 0x2854, - 0x2856, 0x2858, 0x285a, 0x285c, 0x285e, 0x2860, 0x2862, 0x2864, - 0x2866, 0x2868, 0x286a, 0x286c, 0x286e, 0x2870, 0x2872, 0x2874, - 0x2876, 0x2878, 0x287a, 0x287c, 0x287e, 0x2880, 0x2882, 0xffff, - 0xffff, 0xffff, 0x2884, 0x2886, 0x2888, 0x288a, 0x288c, 0x288e, - 0xffff, 0xffff, 0x2890, 0x2892, 0x2894, 0x2896, 0x2898, 0x289a, - 0xffff, 0xffff, 0x289c, 0x289e, 0x28a0, 0x28a2, 0x28a4, 0x28a6, - 0xffff, 0xffff, 0x28a8, 0x28aa, 0x28ac, 0xffff, 0xffff, 0xffff, - 0x28ae, 0x28b0, 0x28b2, 0x28b4, 0x28b6, 0x28b8, 0x28ba, 0xffff, - 0x28bc, 0x28be, 0x28c0, 0x28c2, 0x28c4, 0x28c6, 0x28c8, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0x28ca, 0xffff, 0x28cf, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0x28d4, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x28d9, 0x28de, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x28e3, 0x28e8, - 0x28ed, 0x28f2, 0x28f7, 0x28fc, 0x2901, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0x2906, 0x290b, 0x2910, 0x2915, 0x291a, - 0x291f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x2924, 0x2926, 0x2928, 0x292a, 0x292c, 0x292e, 0x2930, 0x2932, - 0x2934, 0x2936, 0x2938, 0x293a, 0x293c, 0x293e, 0x2940, 0x2942, - 0x2944, 0x2946, 0x2948, 0x294a, 0x294c, 0x294e, 0x2950, 0x2952, - 0x2954, 0x2956, 0x2958, 0x295a, 0x295c, 0x295e, 0x2960, 0x2962, - 0x2964, 0x2966, 0x2968, 0x296a, 0x296c, 0x296e, 0x2970, 0x2972, - 0x2974, 0x2976, 0x2978, 0x297a, 0x297c, 0x297e, 0x2980, 0x2982, - 0x2984, 0x2986, 0x2988, 0x298a, 0x298c, 0x298e, 0x2990, 0x2992, - 0x2994, 0x2996, 0x2998, 0x299a, 0x299c, 0x299e, 0x29a0, 0x29a2, - 0x29a4, 0x29a6, 0x29a8, 0x29aa, 0x29ac, 0x29ae, 0x29b0, 0x29b2, - 0x29b4, 0x29b6, 0x29b8, 0x29ba, 0x29bc, 0x29be, 0x29c0, 0x29c2, - 0x29c4, 0x29c6, 0x29c8, 0x29ca, 0x29cc, 0xffff, 0x29ce, 0x29d0, - 0x29d2, 0x29d4, 0x29d6, 0x29d8, 0x29da, 0x29dc, 0x29de, 0x29e0, - 0x29e2, 0x29e4, 0x29e6, 0x29e8, 0x29ea, 0x29ec, 0x29ee, 0x29f0, - 0x29f2, 0x29f4, 0x29f6, 0x29f8, 0x29fa, 0x29fc, 0x29fe, 0x2a00, - 0x2a02, 0x2a04, 0x2a06, 0x2a08, 0x2a0a, 0x2a0c, 0x2a0e, 0x2a10, - 0x2a12, 0x2a14, 0x2a16, 0x2a18, 0x2a1a, 0x2a1c, 0x2a1e, 0x2a20, - 0x2a22, 0x2a24, 0x2a26, 0x2a28, 0x2a2a, 0x2a2c, 0x2a2e, 0x2a30, - 0x2a32, 0x2a34, 0x2a36, 0x2a38, 0x2a3a, 0x2a3c, 0x2a3e, 0x2a40, - 0x2a42, 0x2a44, 0x2a46, 0x2a48, 0x2a4a, 0x2a4c, 0x2a4e, 0x2a50, - 0x2a52, 0x2a54, 0x2a56, 0x2a58, 0x2a5a, 0xffff, 0x2a5c, 0x2a5e, - 0xffff, 0xffff, 0x2a60, 0xffff, 0xffff, 0x2a62, 0x2a64, 0xffff, - 0xffff, 0x2a66, 0x2a68, 0x2a6a, 0x2a6c, 0xffff, 0x2a6e, 0x2a70, - 0x2a72, 0x2a74, 0x2a76, 0x2a78, 0x2a7a, 0x2a7c, 0x2a7e, 0x2a80, - 0x2a82, 0x2a84, 0xffff, 0x2a86, 0xffff, 0x2a88, 0x2a8a, 0x2a8c, - 0x2a8e, 0x2a90, 0x2a92, 0x2a94, 0xffff, 0x2a96, 0x2a98, 0x2a9a, - 0x2a9c, 0x2a9e, 0x2aa0, 0x2aa2, 0x2aa4, 0x2aa6, 0x2aa8, 0x2aaa, - 0x2aac, 0x2aae, 0x2ab0, 0x2ab2, 0x2ab4, 0x2ab6, 0x2ab8, 0x2aba, - 0x2abc, 0x2abe, 0x2ac0, 0x2ac2, 0x2ac4, 0x2ac6, 0x2ac8, 0x2aca, - 0x2acc, 0x2ace, 0x2ad0, 0x2ad2, 0x2ad4, 0x2ad6, 0x2ad8, 0x2ada, - 0x2adc, 0x2ade, 0x2ae0, 0x2ae2, 0x2ae4, 0x2ae6, 0x2ae8, 0x2aea, - 0x2aec, 0x2aee, 0x2af0, 0x2af2, 0x2af4, 0x2af6, 0x2af8, 0x2afa, - 0x2afc, 0x2afe, 0x2b00, 0x2b02, 0x2b04, 0x2b06, 0x2b08, 0x2b0a, - - 0x2b0c, 0x2b0e, 0x2b10, 0x2b12, 0x2b14, 0x2b16, 0xffff, 0x2b18, - 0x2b1a, 0x2b1c, 0x2b1e, 0xffff, 0xffff, 0x2b20, 0x2b22, 0x2b24, - 0x2b26, 0x2b28, 0x2b2a, 0x2b2c, 0x2b2e, 0xffff, 0x2b30, 0x2b32, - 0x2b34, 0x2b36, 0x2b38, 0x2b3a, 0x2b3c, 0xffff, 0x2b3e, 0x2b40, - 0x2b42, 0x2b44, 0x2b46, 0x2b48, 0x2b4a, 0x2b4c, 0x2b4e, 0x2b50, - 0x2b52, 0x2b54, 0x2b56, 0x2b58, 0x2b5a, 0x2b5c, 0x2b5e, 0x2b60, - 0x2b62, 0x2b64, 0x2b66, 0x2b68, 0x2b6a, 0x2b6c, 0x2b6e, 0x2b70, - 0x2b72, 0x2b74, 0xffff, 0x2b76, 0x2b78, 0x2b7a, 0x2b7c, 0xffff, - 0x2b7e, 0x2b80, 0x2b82, 0x2b84, 0x2b86, 0xffff, 0x2b88, 0xffff, - 0xffff, 0xffff, 0x2b8a, 0x2b8c, 0x2b8e, 0x2b90, 0x2b92, 0x2b94, - 0x2b96, 0xffff, 0x2b98, 0x2b9a, 0x2b9c, 0x2b9e, 0x2ba0, 0x2ba2, - 0x2ba4, 0x2ba6, 0x2ba8, 0x2baa, 0x2bac, 0x2bae, 0x2bb0, 0x2bb2, - 0x2bb4, 0x2bb6, 0x2bb8, 0x2bba, 0x2bbc, 0x2bbe, 0x2bc0, 0x2bc2, - 0x2bc4, 0x2bc6, 0x2bc8, 0x2bca, 0x2bcc, 0x2bce, 0x2bd0, 0x2bd2, - 0x2bd4, 0x2bd6, 0x2bd8, 0x2bda, 0x2bdc, 0x2bde, 0x2be0, 0x2be2, - 0x2be4, 0x2be6, 0x2be8, 0x2bea, 0x2bec, 0x2bee, 0x2bf0, 0x2bf2, - 0x2bf4, 0x2bf6, 0x2bf8, 0x2bfa, 0x2bfc, 0x2bfe, 0x2c00, 0x2c02, - 0x2c04, 0x2c06, 0x2c08, 0x2c0a, 0x2c0c, 0x2c0e, 0x2c10, 0x2c12, - 0x2c14, 0x2c16, 0x2c18, 0x2c1a, 0x2c1c, 0x2c1e, 0x2c20, 0x2c22, - 0x2c24, 0x2c26, 0x2c28, 0x2c2a, 0x2c2c, 0x2c2e, 0x2c30, 0x2c32, - 0x2c34, 0x2c36, 0x2c38, 0x2c3a, 0x2c3c, 0x2c3e, 0x2c40, 0x2c42, - 0x2c44, 0x2c46, 0x2c48, 0x2c4a, 0x2c4c, 0x2c4e, 0x2c50, 0x2c52, - 0x2c54, 0x2c56, 0x2c58, 0x2c5a, 0x2c5c, 0x2c5e, 0x2c60, 0x2c62, - 0x2c64, 0x2c66, 0x2c68, 0x2c6a, 0x2c6c, 0x2c6e, 0x2c70, 0x2c72, - 0x2c74, 0x2c76, 0x2c78, 0x2c7a, 0x2c7c, 0x2c7e, 0x2c80, 0x2c82, - 0x2c84, 0x2c86, 0x2c88, 0x2c8a, 0x2c8c, 0x2c8e, 0x2c90, 0x2c92, - 0x2c94, 0x2c96, 0x2c98, 0x2c9a, 0x2c9c, 0x2c9e, 0x2ca0, 0x2ca2, - 0x2ca4, 0x2ca6, 0x2ca8, 0x2caa, 0x2cac, 0x2cae, 0x2cb0, 0x2cb2, - 0x2cb4, 0x2cb6, 0x2cb8, 0x2cba, 0x2cbc, 0x2cbe, 0x2cc0, 0x2cc2, - 0x2cc4, 0x2cc6, 0x2cc8, 0x2cca, 0x2ccc, 0x2cce, 0x2cd0, 0x2cd2, - 0x2cd4, 0x2cd6, 0x2cd8, 0x2cda, 0x2cdc, 0x2cde, 0x2ce0, 0x2ce2, - 0x2ce4, 0x2ce6, 0x2ce8, 0x2cea, 0x2cec, 0x2cee, 0x2cf0, 0x2cf2, - - 0x2cf4, 0x2cf6, 0x2cf8, 0x2cfa, 0x2cfc, 0x2cfe, 0x2d00, 0x2d02, - 0x2d04, 0x2d06, 0x2d08, 0x2d0a, 0x2d0c, 0x2d0e, 0x2d10, 0x2d12, - 0x2d14, 0x2d16, 0x2d18, 0x2d1a, 0x2d1c, 0x2d1e, 0x2d20, 0x2d22, - 0x2d24, 0x2d26, 0x2d28, 0x2d2a, 0x2d2c, 0x2d2e, 0x2d30, 0x2d32, - 0x2d34, 0x2d36, 0x2d38, 0x2d3a, 0x2d3c, 0x2d3e, 0x2d40, 0x2d42, - 0x2d44, 0x2d46, 0x2d48, 0x2d4a, 0x2d4c, 0x2d4e, 0x2d50, 0x2d52, - 0x2d54, 0x2d56, 0x2d58, 0x2d5a, 0x2d5c, 0x2d5e, 0x2d60, 0x2d62, - 0x2d64, 0x2d66, 0x2d68, 0x2d6a, 0x2d6c, 0x2d6e, 0x2d70, 0x2d72, - 0x2d74, 0x2d76, 0x2d78, 0x2d7a, 0x2d7c, 0x2d7e, 0x2d80, 0x2d82, - 0x2d84, 0x2d86, 0x2d88, 0x2d8a, 0x2d8c, 0x2d8e, 0x2d90, 0x2d92, - 0x2d94, 0x2d96, 0x2d98, 0x2d9a, 0x2d9c, 0x2d9e, 0x2da0, 0x2da2, - 0x2da4, 0x2da6, 0x2da8, 0x2daa, 0x2dac, 0x2dae, 0x2db0, 0x2db2, - 0x2db4, 0x2db6, 0x2db8, 0x2dba, 0x2dbc, 0x2dbe, 0x2dc0, 0x2dc2, - 0x2dc4, 0x2dc6, 0x2dc8, 0x2dca, 0x2dcc, 0x2dce, 0x2dd0, 0x2dd2, - 0x2dd4, 0x2dd6, 0x2dd8, 0x2dda, 0x2ddc, 0x2dde, 0x2de0, 0x2de2, - 0x2de4, 0x2de6, 0x2de8, 0x2dea, 0x2dec, 0x2dee, 0x2df0, 0x2df2, - 0x2df4, 0x2df6, 0x2df8, 0x2dfa, 0x2dfc, 0x2dfe, 0x2e00, 0x2e02, - 0x2e04, 0x2e06, 0x2e08, 0x2e0a, 0x2e0c, 0x2e0e, 0x2e10, 0x2e12, - 0x2e14, 0x2e16, 0x2e18, 0x2e1a, 0x2e1c, 0x2e1e, 0x2e20, 0x2e22, - 0x2e24, 0x2e26, 0x2e28, 0x2e2a, 0x2e2c, 0x2e2e, 0x2e30, 0x2e32, - 0x2e34, 0x2e36, 0x2e38, 0x2e3a, 0x2e3c, 0x2e3e, 0xffff, 0xffff, - 0x2e40, 0x2e42, 0x2e44, 0x2e46, 0x2e48, 0x2e4a, 0x2e4c, 0x2e4e, - 0x2e50, 0x2e52, 0x2e54, 0x2e56, 0x2e58, 0x2e5a, 0x2e5c, 0x2e5e, - 0x2e60, 0x2e62, 0x2e64, 0x2e66, 0x2e68, 0x2e6a, 0x2e6c, 0x2e6e, - 0x2e70, 0x2e72, 0x2e74, 0x2e76, 0x2e78, 0x2e7a, 0x2e7c, 0x2e7e, - 0x2e80, 0x2e82, 0x2e84, 0x2e86, 0x2e88, 0x2e8a, 0x2e8c, 0x2e8e, - 0x2e90, 0x2e92, 0x2e94, 0x2e96, 0x2e98, 0x2e9a, 0x2e9c, 0x2e9e, - 0x2ea0, 0x2ea2, 0x2ea4, 0x2ea6, 0x2ea8, 0x2eaa, 0x2eac, 0x2eae, - 0x2eb0, 0x2eb2, 0x2eb4, 0x2eb6, 0x2eb8, 0x2eba, 0x2ebc, 0x2ebe, - 0x2ec0, 0x2ec2, 0x2ec4, 0x2ec6, 0x2ec8, 0x2eca, 0x2ecc, 0x2ece, - 0x2ed0, 0x2ed2, 0x2ed4, 0x2ed6, 0x2ed8, 0x2eda, 0x2edc, 0x2ede, - 0x2ee0, 0x2ee2, 0x2ee4, 0x2ee6, 0x2ee8, 0x2eea, 0x2eec, 0x2eee, - - 0x2ef0, 0x2ef2, 0x2ef4, 0x2ef6, 0x2ef8, 0x2efa, 0x2efc, 0x2efe, - 0x2f00, 0x2f02, 0x2f04, 0x2f06, 0x2f08, 0x2f0a, 0x2f0c, 0x2f0e, - 0x2f10, 0x2f12, 0x2f14, 0x2f16, 0x2f18, 0x2f1a, 0x2f1c, 0x2f1e, - 0x2f20, 0x2f22, 0x2f24, 0x2f26, 0x2f28, 0x2f2a, 0x2f2c, 0x2f2e, - 0x2f30, 0x2f32, 0x2f34, 0x2f36, 0x2f38, 0x2f3a, 0x2f3c, 0x2f3e, - 0x2f40, 0x2f42, 0x2f44, 0x2f46, 0x2f48, 0x2f4a, 0x2f4c, 0x2f4e, - 0x2f50, 0x2f52, 0x2f54, 0x2f56, 0x2f58, 0x2f5a, 0x2f5c, 0x2f5e, - 0x2f60, 0x2f62, 0x2f64, 0x2f66, 0x2f68, 0x2f6a, 0x2f6c, 0x2f6e, - 0x2f70, 0x2f72, 0x2f74, 0x2f76, 0x2f78, 0x2f7a, 0x2f7c, 0x2f7e, - 0x2f80, 0x2f82, 0x2f84, 0x2f86, 0x2f88, 0x2f8a, 0x2f8c, 0x2f8e, - 0x2f90, 0x2f92, 0x2f94, 0x2f96, 0x2f98, 0x2f9a, 0x2f9c, 0x2f9e, - 0x2fa0, 0x2fa2, 0x2fa4, 0x2fa6, 0x2fa8, 0x2faa, 0x2fac, 0x2fae, - 0x2fb0, 0x2fb2, 0x2fb4, 0x2fb6, 0x2fb8, 0x2fba, 0x2fbc, 0x2fbe, - 0x2fc0, 0x2fc2, 0x2fc4, 0x2fc6, 0x2fc8, 0x2fca, 0x2fcc, 0x2fce, - 0x2fd0, 0x2fd2, 0x2fd4, 0x2fd6, 0x2fd8, 0x2fda, 0x2fdc, 0x2fde, - 0x2fe0, 0x2fe2, 0x2fe4, 0x2fe6, 0x2fe8, 0x2fea, 0x2fec, 0x2fee, - 0x2ff0, 0x2ff2, 0x2ff4, 0x2ff6, 0x2ff8, 0x2ffa, 0x2ffc, 0x2ffe, - 0x3000, 0x3002, 0x3004, 0x3006, 0x3008, 0x300a, 0x300c, 0x300e, - 0x3010, 0x3012, 0x3014, 0x3016, 0x3018, 0x301a, 0x301c, 0x301e, - 0x3020, 0x3022, 0x3024, 0x3026, 0x3028, 0x302a, 0x302c, 0x302e, - 0x3030, 0x3032, 0x3034, 0x3036, 0x3038, 0x303a, 0x303c, 0x303e, - 0x3040, 0x3042, 0x3044, 0x3046, 0x3048, 0x304a, 0x304c, 0x304e, - 0x3050, 0x3052, 0x3054, 0x3056, 0x3058, 0x305a, 0x305c, 0x305e, - 0x3060, 0x3062, 0x3064, 0x3066, 0x3068, 0x306a, 0x306c, 0x306e, - 0x3070, 0x3072, 0x3074, 0x3076, 0x3078, 0x307a, 0x307c, 0x307e, - 0x3080, 0x3082, 0x3084, 0x3086, 0xffff, 0xffff, 0x3088, 0x308a, - 0x308c, 0x308e, 0x3090, 0x3092, 0x3094, 0x3096, 0x3098, 0x309a, - 0x309c, 0x309e, 0x30a0, 0x30a2, 0x30a4, 0x30a6, 0x30a8, 0x30aa, - 0x30ac, 0x30ae, 0x30b0, 0x30b2, 0x30b4, 0x30b6, 0x30b8, 0x30ba, - 0x30bc, 0x30be, 0x30c0, 0x30c2, 0x30c4, 0x30c6, 0x30c8, 0x30ca, - 0x30cc, 0x30ce, 0x30d0, 0x30d2, 0x30d4, 0x30d6, 0x30d8, 0x30da, - 0x30dc, 0x30de, 0x30e0, 0x30e2, 0x30e4, 0x30e6, 0x30e8, 0x30ea, - - 0x30ec, 0x30ee, 0x30f0, 0x30f2, 0xffff, 0x30f4, 0x30f6, 0x30f8, - 0x30fa, 0x30fc, 0x30fe, 0x3100, 0x3102, 0x3104, 0x3106, 0x3108, - 0x310a, 0x310c, 0x310e, 0x3110, 0x3112, 0x3114, 0x3116, 0x3118, - 0x311a, 0x311c, 0x311e, 0x3120, 0x3122, 0x3124, 0x3126, 0x3128, - 0xffff, 0x312a, 0x312c, 0xffff, 0x312e, 0xffff, 0xffff, 0x3130, - 0xffff, 0x3132, 0x3134, 0x3136, 0x3138, 0x313a, 0x313c, 0x313e, - 0x3140, 0x3142, 0x3144, 0xffff, 0x3146, 0x3148, 0x314a, 0x314c, - 0xffff, 0x314e, 0xffff, 0x3150, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0x3152, 0xffff, 0xffff, 0xffff, 0xffff, 0x3154, - 0xffff, 0x3156, 0xffff, 0x3158, 0xffff, 0x315a, 0x315c, 0x315e, - 0xffff, 0x3160, 0x3162, 0xffff, 0x3164, 0xffff, 0xffff, 0x3166, - 0xffff, 0x3168, 0xffff, 0x316a, 0xffff, 0x316c, 0xffff, 0x316e, - 0xffff, 0x3170, 0x3172, 0xffff, 0x3174, 0xffff, 0xffff, 0x3176, - 0x3178, 0x317a, 0x317c, 0xffff, 0x317e, 0x3180, 0x3182, 0x3184, - 0x3186, 0x3188, 0x318a, 0xffff, 0x318c, 0x318e, 0x3190, 0x3192, - 0xffff, 0x3194, 0x3196, 0x3198, 0x319a, 0xffff, 0x319c, 0xffff, - 0x319e, 0x31a0, 0x31a2, 0x31a4, 0x31a6, 0x31a8, 0x31aa, 0x31ac, - 0x31ae, 0x31b0, 0xffff, 0x31b2, 0x31b4, 0x31b6, 0x31b8, 0x31ba, - 0x31bc, 0x31be, 0x31c0, 0x31c2, 0x31c4, 0x31c6, 0x31c8, 0x31ca, - 0x31cc, 0x31ce, 0x31d0, 0x31d2, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0x31d4, 0x31d6, 0x31d8, 0xffff, 0x31da, 0x31dc, 0x31de, - 0x31e0, 0x31e2, 0xffff, 0x31e4, 0x31e6, 0x31e8, 0x31ea, 0x31ec, - 0x31ee, 0x31f0, 0x31f2, 0x31f4, 0x31f6, 0x31f8, 0x31fa, 0x31fc, - 0x31fe, 0x3200, 0x3202, 0x3204, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x3206, 0x3209, 0x320c, 0x320f, 0x3212, 0x3215, 0x3218, 0x321b, - 0x321e, 0x3221, 0x3224, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x3227, 0x322b, 0x322f, 0x3233, 0x3237, 0x323b, 0x323f, 0x3243, - 0x3247, 0x324b, 0x324f, 0x3253, 0x3257, 0x325b, 0x325f, 0x3263, - 0x3267, 0x326b, 0x326f, 0x3273, 0x3277, 0x327b, 0x327f, 0x3283, - 0x3287, 0x328b, 0x328f, 0x3293, 0x3295, 0x3297, 0x329a, 0xffff, - 0x329d, 0x329f, 0x32a1, 0x32a3, 0x32a5, 0x32a7, 0x32a9, 0x32ab, - 0x32ad, 0x32af, 0x32b1, 0x32b3, 0x32b5, 0x32b7, 0x32b9, 0x32bb, - 0x32bd, 0x32bf, 0x32c1, 0x32c3, 0x32c5, 0x32c7, 0x32c9, 0x32cb, - 0x32cd, 0x32cf, 0x32d1, 0x32d4, 0x32d7, 0x32da, 0x32dd, 0x32e1, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0x32e4, 0x32e7, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x32ea, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x32ed, 0x32f0, 0x32f3, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x32f5, 0x32f7, 0x32f9, 0x32fb, 0x32fd, 0x32ff, 0x3301, 0x3303, - 0x3305, 0x3307, 0x3309, 0x330b, 0x330d, 0x330f, 0x3311, 0x3313, - 0x3315, 0x3317, 0x3319, 0x331b, 0x331d, 0x331f, 0x3321, 0x3323, - 0x3325, 0x3327, 0x3329, 0x332b, 0x332d, 0x332f, 0x3331, 0x3333, - 0x3335, 0x3337, 0x3339, 0x333b, 0x333d, 0x333f, 0x3341, 0x3343, - 0x3345, 0x3347, 0x3349, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x334b, 0x334f, 0x3353, 0x3357, 0x335b, 0x335f, 0x3363, 0x3367, - 0x336b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x336f, 0x3371, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x3373, 0x3375, 0x3377, 0x3379, 0x337c, 0x337e, 0x3380, 0x3382, - 0x3384, 0x3386, 0x3388, 0x338a, 0x338c, 0x338e, 0x3391, 0x3393, - 0x3395, 0x3397, 0x3399, 0x339c, 0x339e, 0x33a0, 0x33a2, 0x33a5, - 0x33a7, 0x33a9, 0x33ab, 0x33ad, 0x33af, 0x33b2, 0x33b4, 0x33b6, - 0x33b8, 0x33ba, 0x33bc, 0x33be, 0x33c0, 0x33c2, 0x33c4, 0x33c6, - 0x33c8, 0x33ca, 0x33cc, 0x33ce, 0x33d0, 0x33d2, 0x33d4, 0x33d6, - 0x33d8, 0x33da, 0x33dc, 0x33de, 0x33e0, 0x33e3, 0x33e5, 0x33e7, - 0x33e9, 0x33ec, 0x33ee, 0x33f0, 0x33f2, 0x33f4, 0x33f6, 0x33f8, - 0x33fa, 0x33fc, 0x33fe, 0x3400, 0x3402, 0x3404, 0x3406, 0x3408, - 0x340a, 0x340c, 0x340e, 0x3410, 0x3412, 0x3414, 0x3416, 0x3418, - 0x341a, 0x341c, 0x341e, 0x3420, 0x3422, 0x3424, 0x3426, 0x3428, - 0x342a, 0x342c, 0x342f, 0x3431, 0x3433, 0x3435, 0x3437, 0x3439, - 0x343b, 0x343e, 0x3441, 0x3443, 0x3445, 0x3447, 0x3449, 0x344b, - 0x344d, 0x344f, 0x3451, 0x3453, 0x3455, 0x3458, 0x345a, 0x345c, - 0x345e, 0x3460, 0x3463, 0x3465, 0x3467, 0x3469, 0x346b, 0x346d, - 0x346f, 0x3471, 0x3473, 0x3475, 0x3478, 0x347a, 0x347d, 0x347f, - 0x3481, 0x3483, 0x3485, 0x3487, 0x3489, 0x348b, 0x348d, 0x348f, - 0x3491, 0x3493, 0x3496, 0x3498, 0x349a, 0x349c, 0x349e, 0x34a0, - 0x34a3, 0x34a5, 0x34a8, 0x34ab, 0x34ad, 0x34af, 0x34b1, 0x34b3, - 0x34b6, 0x34b9, 0x34bb, 0x34bd, 0x34bf, 0x34c1, 0x34c3, 0x34c5, - 0x34c7, 0x34c9, 0x34cb, 0x34cd, 0x34cf, 0x34d2, 0x34d4, 0x34d6, - 0x34d8, 0x34da, 0x34dc, 0x34de, 0x34e0, 0x34e2, 0x34e4, 0x34e6, - 0x34e8, 0x34ea, 0x34ec, 0x34ee, 0x34f0, 0x34f2, 0x34f4, 0x34f6, - 0x34f8, 0x34fb, 0x34fd, 0x34ff, 0x3501, 0x3503, 0x3505, 0x3508, - 0x350a, 0x350c, 0x350e, 0x3510, 0x3512, 0x3514, 0x3516, 0x3518, - 0x351a, 0x351c, 0x351e, 0x3521, 0x3523, 0x3525, 0x3527, 0x3529, - 0x352b, 0x352d, 0x352f, 0x3531, 0x3533, 0x3535, 0x3537, 0x3539, - 0x353b, 0x353d, 0x353f, 0x3541, 0x3543, 0x3545, 0x3548, 0x354a, - 0x354c, 0x354e, 0x3550, 0x3552, 0x3555, 0x3557, 0x3559, 0x355b, - 0x355d, 0x355f, 0x3561, 0x3563, 0x3565, 0x3568, 0x356a, 0x356c, - 0x356e, 0x3571, 0x3573, 0x3575, 0x3577, 0x3579, 0x357b, 0x357d, - 0x3580, 0x3583, 0x3586, 0x3588, 0x358b, 0x358d, 0x358f, 0x3591, - - 0x3593, 0x3595, 0x3597, 0x3599, 0x359b, 0x359d, 0x359f, 0x35a2, - 0x35a4, 0x35a6, 0x35a8, 0x35aa, 0x35ac, 0x35ae, 0x35b1, 0x35b3, - 0x35b5, 0x35b8, 0x35bb, 0x35bd, 0x35bf, 0x35c1, 0x35c3, 0x35c5, - 0x35c7, 0x35c9, 0x35cb, 0x35cd, 0x35d0, 0x35d2, 0x35d5, 0x35d7, - 0x35da, 0x35dc, 0x35de, 0x35e0, 0x35e3, 0x35e5, 0x35e7, 0x35ea, - 0x35ed, 0x35ef, 0x35f1, 0x35f3, 0x35f5, 0x35f7, 0x35f9, 0x35fb, - 0x35fd, 0x35ff, 0x3601, 0x3603, 0x3605, 0x3607, 0x360a, 0x360c, - 0x360f, 0x3611, 0x3614, 0x3616, 0x3619, 0x361c, 0x361f, 0x3621, - 0x3623, 0x3625, 0x3628, 0x362b, 0x362e, 0x3631, 0x3633, 0x3635, - 0x3637, 0x3639, 0x363b, 0x363d, 0x363f, 0x3641, 0x3644, 0x3646, - 0x3648, 0x364a, 0x364c, 0x364f, 0x3651, 0x3654, 0x3657, 0x3659, - 0x365b, 0x365d, 0x365f, 0x3661, 0x3663, 0x3666, 0x3669, 0x366c, - 0x366e, 0x3670, 0x3673, 0x3675, 0x3677, 0x3679, 0x367c, 0x367e, - 0x3680, 0x3682, 0x3684, 0x3686, 0x3689, 0x368b, 0x368d, 0x368f, - 0x3691, 0x3693, 0x3695, 0x3698, 0x369b, 0x369d, 0x36a0, 0x36a2, - 0x36a5, 0x36a7, 0x36a9, 0x36ab, 0x36ae, 0x36b1, 0x36b3, 0x36b6, - 0x36b8, 0x36bb, 0x36bd, 0x36bf, 0x36c1, 0x36c3, 0x36c5, 0x36c7, - 0x36ca, 0x36cd, 0x36d0, 0x36d3, 0x36d5, 0x36d7, 0x36d9, 0x36db, - 0x36dd, 0x36df, 0x36e1, 0x36e3, 0x36e5, 0x36e7, 0x36e9, 0x36eb, - 0x36ee, 0x36f0, 0x36f2, 0x36f4, 0x36f6, 0x36f8, 0x36fa, 0x36fc, - 0x36fe, 0x3700, 0x3702, 0x3704, 0x3706, 0x3709, 0x370c, 0x370f, - 0x3711, 0x3713, 0x3715, 0x3717, 0x371a, 0x371c, 0x371f, 0x3721, - 0x3723, 0x3726, 0x3729, 0x372b, 0x372d, 0x372f, 0x3731, 0x3733, - 0x3735, 0x3737, 0x3739, 0x373b, 0x373d, 0x373f, 0x3741, 0x3743, - 0x3745, 0x3747, 0x3749, 0x374b, 0x374d, 0x374f, 0x3752, 0x3754, - 0x3756, 0x3758, 0x375a, 0x375c, 0x375f, 0x3762, 0x3764, 0x3766, - 0x3768, 0x376a, 0x376c, 0x376e, 0x3771, 0x3773, 0x3775, 0x3777, - 0x3779, 0x377c, 0x377f, 0x3781, 0x3783, 0x3785, 0x3788, 0x378a, - 0x378c, 0x378f, 0x3792, 0x3794, 0x3796, 0x3798, 0x379b, 0x379d, - 0x379f, 0x37a1, 0x37a3, 0x37a5, 0x37a7, 0x37a9, 0x37ac, 0x37ae, - 0x37b0, 0x37b2, 0x37b5, 0x37b7, 0x37b9, 0x37bb, 0x37bd, 0x37c0, - 0x37c3, 0x37c5, 0x37c7, 0x37c9, 0x37cc, 0x37ce, 0x37d1, 0x37d3, - - 0x37d5, 0x37d7, 0x37da, 0x37dc, 0x37de, 0x37e0, 0x37e2, 0x37e4, - 0x37e6, 0x37e8, 0x37eb, 0x37ed, 0x37ef, 0x37f1, 0x37f3, 0x37f5, - 0x37f7, 0x37fa, 0x37fc, 0x37ff, 0x3802, 0x3805, 0x3807, 0x3809, - 0x380b, 0x380d, 0x380f, 0x3811, 0x3813, 0x3815, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff -}; - -#define GET_DECOMPOSITION_INDEX(ucs4) \ - (ucs4 < 0x3400 \ - ? (uc_decomposition_trie[uc_decomposition_trie[ucs4>>4] + (ucs4 & 0xf)]) \ - : (ucs4 < 0x30000\ - ? uc_decomposition_trie[uc_decomposition_trie[((ucs4 - 0x3400)>>8) + 0x340] + (ucs4 & 0xff)]\ - : 0xffff)) - -static const unsigned short uc_decomposition_map[] = { - 0x103, 0x20, 0x210, 0x20, 0x308, 0x109, 0x61, 0x210, - 0x20, 0x304, 0x109, 0x32, 0x109, 0x33, 0x210, 0x20, - 0x301, 0x110, 0x3bc, 0x210, 0x20, 0x327, 0x109, 0x31, - 0x109, 0x6f, 0x311, 0x31, 0x2044, 0x34, 0x311, 0x31, - 0x2044, 0x32, 0x311, 0x33, 0x2044, 0x34, 0x201, 0x41, - 0x300, 0x201, 0x41, 0x301, 0x201, 0x41, 0x302, 0x201, - 0x41, 0x303, 0x201, 0x41, 0x308, 0x201, 0x41, 0x30a, - 0x201, 0x43, 0x327, 0x201, 0x45, 0x300, 0x201, 0x45, - 0x301, 0x201, 0x45, 0x302, 0x201, 0x45, 0x308, 0x201, - 0x49, 0x300, 0x201, 0x49, 0x301, 0x201, 0x49, 0x302, - 0x201, 0x49, 0x308, 0x201, 0x4e, 0x303, 0x201, 0x4f, - 0x300, 0x201, 0x4f, 0x301, 0x201, 0x4f, 0x302, 0x201, - 0x4f, 0x303, 0x201, 0x4f, 0x308, 0x201, 0x55, 0x300, - 0x201, 0x55, 0x301, 0x201, 0x55, 0x302, 0x201, 0x55, - 0x308, 0x201, 0x59, 0x301, 0x201, 0x61, 0x300, 0x201, - 0x61, 0x301, 0x201, 0x61, 0x302, 0x201, 0x61, 0x303, - 0x201, 0x61, 0x308, 0x201, 0x61, 0x30a, 0x201, 0x63, - 0x327, 0x201, 0x65, 0x300, 0x201, 0x65, 0x301, 0x201, - 0x65, 0x302, 0x201, 0x65, 0x308, 0x201, 0x69, 0x300, - 0x201, 0x69, 0x301, 0x201, 0x69, 0x302, 0x201, 0x69, - 0x308, 0x201, 0x6e, 0x303, 0x201, 0x6f, 0x300, 0x201, - 0x6f, 0x301, 0x201, 0x6f, 0x302, 0x201, 0x6f, 0x303, - 0x201, 0x6f, 0x308, 0x201, 0x75, 0x300, 0x201, 0x75, - 0x301, 0x201, 0x75, 0x302, 0x201, 0x75, 0x308, 0x201, - 0x79, 0x301, 0x201, 0x79, 0x308, 0x201, 0x41, 0x304, - 0x201, 0x61, 0x304, 0x201, 0x41, 0x306, 0x201, 0x61, - 0x306, 0x201, 0x41, 0x328, 0x201, 0x61, 0x328, 0x201, - 0x43, 0x301, 0x201, 0x63, 0x301, 0x201, 0x43, 0x302, - 0x201, 0x63, 0x302, 0x201, 0x43, 0x307, 0x201, 0x63, - 0x307, 0x201, 0x43, 0x30c, 0x201, 0x63, 0x30c, 0x201, - 0x44, 0x30c, 0x201, 0x64, 0x30c, 0x201, 0x45, 0x304, - 0x201, 0x65, 0x304, 0x201, 0x45, 0x306, 0x201, 0x65, - 0x306, 0x201, 0x45, 0x307, 0x201, 0x65, 0x307, 0x201, - 0x45, 0x328, 0x201, 0x65, 0x328, 0x201, 0x45, 0x30c, - 0x201, 0x65, 0x30c, 0x201, 0x47, 0x302, 0x201, 0x67, - 0x302, 0x201, 0x47, 0x306, 0x201, 0x67, 0x306, 0x201, - 0x47, 0x307, 0x201, 0x67, 0x307, 0x201, 0x47, 0x327, - 0x201, 0x67, 0x327, 0x201, 0x48, 0x302, 0x201, 0x68, - 0x302, 0x201, 0x49, 0x303, 0x201, 0x69, 0x303, 0x201, - 0x49, 0x304, 0x201, 0x69, 0x304, 0x201, 0x49, 0x306, - 0x201, 0x69, 0x306, 0x201, 0x49, 0x328, 0x201, 0x69, - 0x328, 0x201, 0x49, 0x307, 0x210, 0x49, 0x4a, 0x210, - 0x69, 0x6a, 0x201, 0x4a, 0x302, 0x201, 0x6a, 0x302, - 0x201, 0x4b, 0x327, 0x201, 0x6b, 0x327, 0x201, 0x4c, - 0x301, 0x201, 0x6c, 0x301, 0x201, 0x4c, 0x327, 0x201, - 0x6c, 0x327, 0x201, 0x4c, 0x30c, 0x201, 0x6c, 0x30c, - 0x210, 0x4c, 0xb7, 0x210, 0x6c, 0xb7, 0x201, 0x4e, - 0x301, 0x201, 0x6e, 0x301, 0x201, 0x4e, 0x327, 0x201, - 0x6e, 0x327, 0x201, 0x4e, 0x30c, 0x201, 0x6e, 0x30c, - 0x210, 0x2bc, 0x6e, 0x201, 0x4f, 0x304, 0x201, 0x6f, - 0x304, 0x201, 0x4f, 0x306, 0x201, 0x6f, 0x306, 0x201, - 0x4f, 0x30b, 0x201, 0x6f, 0x30b, 0x201, 0x52, 0x301, - 0x201, 0x72, 0x301, 0x201, 0x52, 0x327, 0x201, 0x72, - 0x327, 0x201, 0x52, 0x30c, 0x201, 0x72, 0x30c, 0x201, - 0x53, 0x301, 0x201, 0x73, 0x301, 0x201, 0x53, 0x302, - 0x201, 0x73, 0x302, 0x201, 0x53, 0x327, 0x201, 0x73, - 0x327, 0x201, 0x53, 0x30c, 0x201, 0x73, 0x30c, 0x201, - 0x54, 0x327, 0x201, 0x74, 0x327, 0x201, 0x54, 0x30c, - 0x201, 0x74, 0x30c, 0x201, 0x55, 0x303, 0x201, 0x75, - 0x303, 0x201, 0x55, 0x304, 0x201, 0x75, 0x304, 0x201, - 0x55, 0x306, 0x201, 0x75, 0x306, 0x201, 0x55, 0x30a, - 0x201, 0x75, 0x30a, 0x201, 0x55, 0x30b, 0x201, 0x75, - 0x30b, 0x201, 0x55, 0x328, 0x201, 0x75, 0x328, 0x201, - 0x57, 0x302, 0x201, 0x77, 0x302, 0x201, 0x59, 0x302, - 0x201, 0x79, 0x302, 0x201, 0x59, 0x308, 0x201, 0x5a, - 0x301, 0x201, 0x7a, 0x301, 0x201, 0x5a, 0x307, 0x201, - 0x7a, 0x307, 0x201, 0x5a, 0x30c, 0x201, 0x7a, 0x30c, - 0x110, 0x73, 0x201, 0x4f, 0x31b, 0x201, 0x6f, 0x31b, - 0x201, 0x55, 0x31b, 0x201, 0x75, 0x31b, 0x210, 0x44, - 0x17d, 0x210, 0x44, 0x17e, 0x210, 0x64, 0x17e, 0x210, - 0x4c, 0x4a, 0x210, 0x4c, 0x6a, 0x210, 0x6c, 0x6a, - 0x210, 0x4e, 0x4a, 0x210, 0x4e, 0x6a, 0x210, 0x6e, - 0x6a, 0x201, 0x41, 0x30c, 0x201, 0x61, 0x30c, 0x201, - 0x49, 0x30c, 0x201, 0x69, 0x30c, 0x201, 0x4f, 0x30c, - 0x201, 0x6f, 0x30c, 0x201, 0x55, 0x30c, 0x201, 0x75, - 0x30c, 0x201, 0xdc, 0x304, 0x201, 0xfc, 0x304, 0x201, - 0xdc, 0x301, 0x201, 0xfc, 0x301, 0x201, 0xdc, 0x30c, - 0x201, 0xfc, 0x30c, 0x201, 0xdc, 0x300, 0x201, 0xfc, - 0x300, 0x201, 0xc4, 0x304, 0x201, 0xe4, 0x304, 0x201, - 0x226, 0x304, 0x201, 0x227, 0x304, 0x201, 0xc6, 0x304, - 0x201, 0xe6, 0x304, 0x201, 0x47, 0x30c, 0x201, 0x67, - 0x30c, 0x201, 0x4b, 0x30c, 0x201, 0x6b, 0x30c, 0x201, - 0x4f, 0x328, 0x201, 0x6f, 0x328, 0x201, 0x1ea, 0x304, - 0x201, 0x1eb, 0x304, 0x201, 0x1b7, 0x30c, 0x201, 0x292, - 0x30c, 0x201, 0x6a, 0x30c, 0x210, 0x44, 0x5a, 0x210, - 0x44, 0x7a, 0x210, 0x64, 0x7a, 0x201, 0x47, 0x301, - 0x201, 0x67, 0x301, 0x201, 0x4e, 0x300, 0x201, 0x6e, - 0x300, 0x201, 0xc5, 0x301, 0x201, 0xe5, 0x301, 0x201, - 0xc6, 0x301, 0x201, 0xe6, 0x301, 0x201, 0xd8, 0x301, - 0x201, 0xf8, 0x301, 0x201, 0x41, 0x30f, 0x201, 0x61, - 0x30f, 0x201, 0x41, 0x311, 0x201, 0x61, 0x311, 0x201, - 0x45, 0x30f, 0x201, 0x65, 0x30f, 0x201, 0x45, 0x311, - 0x201, 0x65, 0x311, 0x201, 0x49, 0x30f, 0x201, 0x69, - 0x30f, 0x201, 0x49, 0x311, 0x201, 0x69, 0x311, 0x201, - 0x4f, 0x30f, 0x201, 0x6f, 0x30f, 0x201, 0x4f, 0x311, - 0x201, 0x6f, 0x311, 0x201, 0x52, 0x30f, 0x201, 0x72, - 0x30f, 0x201, 0x52, 0x311, 0x201, 0x72, 0x311, 0x201, - 0x55, 0x30f, 0x201, 0x75, 0x30f, 0x201, 0x55, 0x311, - 0x201, 0x75, 0x311, 0x201, 0x53, 0x326, 0x201, 0x73, - 0x326, 0x201, 0x54, 0x326, 0x201, 0x74, 0x326, 0x201, - 0x48, 0x30c, 0x201, 0x68, 0x30c, 0x201, 0x41, 0x307, - 0x201, 0x61, 0x307, 0x201, 0x45, 0x327, 0x201, 0x65, - 0x327, 0x201, 0xd6, 0x304, 0x201, 0xf6, 0x304, 0x201, - 0xd5, 0x304, 0x201, 0xf5, 0x304, 0x201, 0x4f, 0x307, - 0x201, 0x6f, 0x307, 0x201, 0x22e, 0x304, 0x201, 0x22f, - 0x304, 0x201, 0x59, 0x304, 0x201, 0x79, 0x304, 0x109, - 0x68, 0x109, 0x266, 0x109, 0x6a, 0x109, 0x72, 0x109, - 0x279, 0x109, 0x27b, 0x109, 0x281, 0x109, 0x77, 0x109, - 0x79, 0x210, 0x20, 0x306, 0x210, 0x20, 0x307, 0x210, - 0x20, 0x30a, 0x210, 0x20, 0x328, 0x210, 0x20, 0x303, - 0x210, 0x20, 0x30b, 0x109, 0x263, 0x109, 0x6c, 0x109, - 0x73, 0x109, 0x78, 0x109, 0x295, 0x101, 0x300, 0x101, - 0x301, 0x101, 0x313, 0x201, 0x308, 0x301, 0x101, 0x2b9, - 0x210, 0x20, 0x345, 0x101, 0x3b, 0x210, 0x20, 0x301, - 0x201, 0xa8, 0x301, 0x201, 0x391, 0x301, 0x101, 0xb7, - 0x201, 0x395, 0x301, 0x201, 0x397, 0x301, 0x201, 0x399, - 0x301, 0x201, 0x39f, 0x301, 0x201, 0x3a5, 0x301, 0x201, - 0x3a9, 0x301, 0x201, 0x3ca, 0x301, 0x201, 0x399, 0x308, - 0x201, 0x3a5, 0x308, 0x201, 0x3b1, 0x301, 0x201, 0x3b5, - 0x301, 0x201, 0x3b7, 0x301, 0x201, 0x3b9, 0x301, 0x201, - 0x3cb, 0x301, 0x201, 0x3b9, 0x308, 0x201, 0x3c5, 0x308, - 0x201, 0x3bf, 0x301, 0x201, 0x3c5, 0x301, 0x201, 0x3c9, - 0x301, 0x110, 0x3b2, 0x110, 0x3b8, 0x110, 0x3a5, 0x201, - 0x3d2, 0x301, 0x201, 0x3d2, 0x308, 0x110, 0x3c6, 0x110, - 0x3c0, 0x110, 0x3ba, 0x110, 0x3c1, 0x110, 0x3c2, 0x110, - 0x398, 0x110, 0x3b5, 0x110, 0x3a3, 0x201, 0x415, 0x300, - 0x201, 0x415, 0x308, 0x201, 0x413, 0x301, 0x201, 0x406, - 0x308, 0x201, 0x41a, 0x301, 0x201, 0x418, 0x300, 0x201, - 0x423, 0x306, 0x201, 0x418, 0x306, 0x201, 0x438, 0x306, - 0x201, 0x435, 0x300, 0x201, 0x435, 0x308, 0x201, 0x433, - 0x301, 0x201, 0x456, 0x308, 0x201, 0x43a, 0x301, 0x201, - 0x438, 0x300, 0x201, 0x443, 0x306, 0x201, 0x474, 0x30f, - 0x201, 0x475, 0x30f, 0x201, 0x416, 0x306, 0x201, 0x436, - 0x306, 0x201, 0x410, 0x306, 0x201, 0x430, 0x306, 0x201, - 0x410, 0x308, 0x201, 0x430, 0x308, 0x201, 0x415, 0x306, - 0x201, 0x435, 0x306, 0x201, 0x4d8, 0x308, 0x201, 0x4d9, - 0x308, 0x201, 0x416, 0x308, 0x201, 0x436, 0x308, 0x201, - 0x417, 0x308, 0x201, 0x437, 0x308, 0x201, 0x418, 0x304, - 0x201, 0x438, 0x304, 0x201, 0x418, 0x308, 0x201, 0x438, - 0x308, 0x201, 0x41e, 0x308, 0x201, 0x43e, 0x308, 0x201, - 0x4e8, 0x308, 0x201, 0x4e9, 0x308, 0x201, 0x42d, 0x308, - 0x201, 0x44d, 0x308, 0x201, 0x423, 0x304, 0x201, 0x443, - 0x304, 0x201, 0x423, 0x308, 0x201, 0x443, 0x308, 0x201, - 0x423, 0x30b, 0x201, 0x443, 0x30b, 0x201, 0x427, 0x308, - 0x201, 0x447, 0x308, 0x201, 0x42b, 0x308, 0x201, 0x44b, - 0x308, 0x210, 0x565, 0x582, 0x201, 0x627, 0x653, 0x201, - 0x627, 0x654, 0x201, 0x648, 0x654, 0x201, 0x627, 0x655, - 0x201, 0x64a, 0x654, 0x210, 0x627, 0x674, 0x210, 0x648, - 0x674, 0x210, 0x6c7, 0x674, 0x210, 0x64a, 0x674, 0x201, - 0x6d5, 0x654, 0x201, 0x6c1, 0x654, 0x201, 0x6d2, 0x654, - 0x201, 0x928, 0x93c, 0x201, 0x930, 0x93c, 0x201, 0x933, - 0x93c, 0x201, 0x915, 0x93c, 0x201, 0x916, 0x93c, 0x201, - 0x917, 0x93c, 0x201, 0x91c, 0x93c, 0x201, 0x921, 0x93c, - 0x201, 0x922, 0x93c, 0x201, 0x92b, 0x93c, 0x201, 0x92f, - 0x93c, 0x201, 0x9c7, 0x9be, 0x201, 0x9c7, 0x9d7, 0x201, - 0x9a1, 0x9bc, 0x201, 0x9a2, 0x9bc, 0x201, 0x9af, 0x9bc, - 0x201, 0xa32, 0xa3c, 0x201, 0xa38, 0xa3c, 0x201, 0xa16, - 0xa3c, 0x201, 0xa17, 0xa3c, 0x201, 0xa1c, 0xa3c, 0x201, - 0xa2b, 0xa3c, 0x201, 0xb47, 0xb56, 0x201, 0xb47, 0xb3e, - 0x201, 0xb47, 0xb57, 0x201, 0xb21, 0xb3c, 0x201, 0xb22, - 0xb3c, 0x201, 0xb92, 0xbd7, 0x201, 0xbc6, 0xbbe, 0x201, - 0xbc7, 0xbbe, 0x201, 0xbc6, 0xbd7, 0x201, 0xc46, 0xc56, - 0x201, 0xcbf, 0xcd5, 0x201, 0xcc6, 0xcd5, 0x201, 0xcc6, - 0xcd6, 0x201, 0xcc6, 0xcc2, 0x201, 0xcca, 0xcd5, 0x201, - 0xd46, 0xd3e, 0x201, 0xd47, 0xd3e, 0x201, 0xd46, 0xd57, - 0x201, 0xdd9, 0xdca, 0x201, 0xdd9, 0xdcf, 0x201, 0xddc, - 0xdca, 0x201, 0xdd9, 0xddf, 0x210, 0xe4d, 0xe32, 0x210, - 0xecd, 0xeb2, 0x210, 0xeab, 0xe99, 0x210, 0xeab, 0xea1, - 0x103, 0xf0b, 0x201, 0xf42, 0xfb7, 0x201, 0xf4c, 0xfb7, - 0x201, 0xf51, 0xfb7, 0x201, 0xf56, 0xfb7, 0x201, 0xf5b, - 0xfb7, 0x201, 0xf40, 0xfb5, 0x201, 0xf71, 0xf72, 0x201, - 0xf71, 0xf74, 0x201, 0xfb2, 0xf80, 0x210, 0xfb2, 0xf81, - 0x201, 0xfb3, 0xf80, 0x210, 0xfb3, 0xf81, 0x201, 0xf71, - 0xf80, 0x201, 0xf92, 0xfb7, 0x201, 0xf9c, 0xfb7, 0x201, - 0xfa1, 0xfb7, 0x201, 0xfa6, 0xfb7, 0x201, 0xfab, 0xfb7, - 0x201, 0xf90, 0xfb5, 0x201, 0x1025, 0x102e, 0x109, 0x10dc, - 0x201, 0x1b05, 0x1b35, 0x201, 0x1b07, 0x1b35, 0x201, 0x1b09, - 0x1b35, 0x201, 0x1b0b, 0x1b35, 0x201, 0x1b0d, 0x1b35, 0x201, - 0x1b11, 0x1b35, 0x201, 0x1b3a, 0x1b35, 0x201, 0x1b3c, 0x1b35, - 0x201, 0x1b3e, 0x1b35, 0x201, 0x1b3f, 0x1b35, 0x201, 0x1b42, - 0x1b35, 0x109, 0x41, 0x109, 0xc6, 0x109, 0x42, 0x109, - 0x44, 0x109, 0x45, 0x109, 0x18e, 0x109, 0x47, 0x109, - 0x48, 0x109, 0x49, 0x109, 0x4a, 0x109, 0x4b, 0x109, - 0x4c, 0x109, 0x4d, 0x109, 0x4e, 0x109, 0x4f, 0x109, - 0x222, 0x109, 0x50, 0x109, 0x52, 0x109, 0x54, 0x109, - 0x55, 0x109, 0x57, 0x109, 0x61, 0x109, 0x250, 0x109, - 0x251, 0x109, 0x1d02, 0x109, 0x62, 0x109, 0x64, 0x109, - 0x65, 0x109, 0x259, 0x109, 0x25b, 0x109, 0x25c, 0x109, - 0x67, 0x109, 0x6b, 0x109, 0x6d, 0x109, 0x14b, 0x109, - 0x6f, 0x109, 0x254, 0x109, 0x1d16, 0x109, 0x1d17, 0x109, - 0x70, 0x109, 0x74, 0x109, 0x75, 0x109, 0x1d1d, 0x109, - 0x26f, 0x109, 0x76, 0x109, 0x1d25, 0x109, 0x3b2, 0x109, - 0x3b3, 0x109, 0x3b4, 0x109, 0x3c6, 0x109, 0x3c7, 0x10a, - 0x69, 0x10a, 0x72, 0x10a, 0x75, 0x10a, 0x76, 0x10a, - 0x3b2, 0x10a, 0x3b3, 0x10a, 0x3c1, 0x10a, 0x3c6, 0x10a, - 0x3c7, 0x109, 0x43d, 0x109, 0x252, 0x109, 0x63, 0x109, - 0x255, 0x109, 0xf0, 0x109, 0x25c, 0x109, 0x66, 0x109, - 0x25f, 0x109, 0x261, 0x109, 0x265, 0x109, 0x268, 0x109, - 0x269, 0x109, 0x26a, 0x109, 0x1d7b, 0x109, 0x29d, 0x109, - 0x26d, 0x109, 0x1d85, 0x109, 0x29f, 0x109, 0x271, 0x109, - 0x270, 0x109, 0x272, 0x109, 0x273, 0x109, 0x274, 0x109, - 0x275, 0x109, 0x278, 0x109, 0x282, 0x109, 0x283, 0x109, - 0x1ab, 0x109, 0x289, 0x109, 0x28a, 0x109, 0x1d1c, 0x109, - 0x28b, 0x109, 0x28c, 0x109, 0x7a, 0x109, 0x290, 0x109, - 0x291, 0x109, 0x292, 0x109, 0x3b8, 0x201, 0x41, 0x325, - 0x201, 0x61, 0x325, 0x201, 0x42, 0x307, 0x201, 0x62, - 0x307, 0x201, 0x42, 0x323, 0x201, 0x62, 0x323, 0x201, - 0x42, 0x331, 0x201, 0x62, 0x331, 0x201, 0xc7, 0x301, - 0x201, 0xe7, 0x301, 0x201, 0x44, 0x307, 0x201, 0x64, - 0x307, 0x201, 0x44, 0x323, 0x201, 0x64, 0x323, 0x201, - 0x44, 0x331, 0x201, 0x64, 0x331, 0x201, 0x44, 0x327, - 0x201, 0x64, 0x327, 0x201, 0x44, 0x32d, 0x201, 0x64, - 0x32d, 0x201, 0x112, 0x300, 0x201, 0x113, 0x300, 0x201, - 0x112, 0x301, 0x201, 0x113, 0x301, 0x201, 0x45, 0x32d, - 0x201, 0x65, 0x32d, 0x201, 0x45, 0x330, 0x201, 0x65, - 0x330, 0x201, 0x228, 0x306, 0x201, 0x229, 0x306, 0x201, - 0x46, 0x307, 0x201, 0x66, 0x307, 0x201, 0x47, 0x304, - 0x201, 0x67, 0x304, 0x201, 0x48, 0x307, 0x201, 0x68, - 0x307, 0x201, 0x48, 0x323, 0x201, 0x68, 0x323, 0x201, - 0x48, 0x308, 0x201, 0x68, 0x308, 0x201, 0x48, 0x327, - 0x201, 0x68, 0x327, 0x201, 0x48, 0x32e, 0x201, 0x68, - 0x32e, 0x201, 0x49, 0x330, 0x201, 0x69, 0x330, 0x201, - 0xcf, 0x301, 0x201, 0xef, 0x301, 0x201, 0x4b, 0x301, - 0x201, 0x6b, 0x301, 0x201, 0x4b, 0x323, 0x201, 0x6b, - 0x323, 0x201, 0x4b, 0x331, 0x201, 0x6b, 0x331, 0x201, - 0x4c, 0x323, 0x201, 0x6c, 0x323, 0x201, 0x1e36, 0x304, - 0x201, 0x1e37, 0x304, 0x201, 0x4c, 0x331, 0x201, 0x6c, - 0x331, 0x201, 0x4c, 0x32d, 0x201, 0x6c, 0x32d, 0x201, - 0x4d, 0x301, 0x201, 0x6d, 0x301, 0x201, 0x4d, 0x307, - 0x201, 0x6d, 0x307, 0x201, 0x4d, 0x323, 0x201, 0x6d, - 0x323, 0x201, 0x4e, 0x307, 0x201, 0x6e, 0x307, 0x201, - 0x4e, 0x323, 0x201, 0x6e, 0x323, 0x201, 0x4e, 0x331, - 0x201, 0x6e, 0x331, 0x201, 0x4e, 0x32d, 0x201, 0x6e, - 0x32d, 0x201, 0xd5, 0x301, 0x201, 0xf5, 0x301, 0x201, - 0xd5, 0x308, 0x201, 0xf5, 0x308, 0x201, 0x14c, 0x300, - 0x201, 0x14d, 0x300, 0x201, 0x14c, 0x301, 0x201, 0x14d, - 0x301, 0x201, 0x50, 0x301, 0x201, 0x70, 0x301, 0x201, - 0x50, 0x307, 0x201, 0x70, 0x307, 0x201, 0x52, 0x307, - 0x201, 0x72, 0x307, 0x201, 0x52, 0x323, 0x201, 0x72, - 0x323, 0x201, 0x1e5a, 0x304, 0x201, 0x1e5b, 0x304, 0x201, - 0x52, 0x331, 0x201, 0x72, 0x331, 0x201, 0x53, 0x307, - 0x201, 0x73, 0x307, 0x201, 0x53, 0x323, 0x201, 0x73, - 0x323, 0x201, 0x15a, 0x307, 0x201, 0x15b, 0x307, 0x201, - 0x160, 0x307, 0x201, 0x161, 0x307, 0x201, 0x1e62, 0x307, - 0x201, 0x1e63, 0x307, 0x201, 0x54, 0x307, 0x201, 0x74, - 0x307, 0x201, 0x54, 0x323, 0x201, 0x74, 0x323, 0x201, - 0x54, 0x331, 0x201, 0x74, 0x331, 0x201, 0x54, 0x32d, - 0x201, 0x74, 0x32d, 0x201, 0x55, 0x324, 0x201, 0x75, - 0x324, 0x201, 0x55, 0x330, 0x201, 0x75, 0x330, 0x201, - 0x55, 0x32d, 0x201, 0x75, 0x32d, 0x201, 0x168, 0x301, - 0x201, 0x169, 0x301, 0x201, 0x16a, 0x308, 0x201, 0x16b, - 0x308, 0x201, 0x56, 0x303, 0x201, 0x76, 0x303, 0x201, - 0x56, 0x323, 0x201, 0x76, 0x323, 0x201, 0x57, 0x300, - 0x201, 0x77, 0x300, 0x201, 0x57, 0x301, 0x201, 0x77, - 0x301, 0x201, 0x57, 0x308, 0x201, 0x77, 0x308, 0x201, - 0x57, 0x307, 0x201, 0x77, 0x307, 0x201, 0x57, 0x323, - 0x201, 0x77, 0x323, 0x201, 0x58, 0x307, 0x201, 0x78, - 0x307, 0x201, 0x58, 0x308, 0x201, 0x78, 0x308, 0x201, - 0x59, 0x307, 0x201, 0x79, 0x307, 0x201, 0x5a, 0x302, - 0x201, 0x7a, 0x302, 0x201, 0x5a, 0x323, 0x201, 0x7a, - 0x323, 0x201, 0x5a, 0x331, 0x201, 0x7a, 0x331, 0x201, - 0x68, 0x331, 0x201, 0x74, 0x308, 0x201, 0x77, 0x30a, - 0x201, 0x79, 0x30a, 0x210, 0x61, 0x2be, 0x201, 0x17f, - 0x307, 0x201, 0x41, 0x323, 0x201, 0x61, 0x323, 0x201, - 0x41, 0x309, 0x201, 0x61, 0x309, 0x201, 0xc2, 0x301, - 0x201, 0xe2, 0x301, 0x201, 0xc2, 0x300, 0x201, 0xe2, - 0x300, 0x201, 0xc2, 0x309, 0x201, 0xe2, 0x309, 0x201, - 0xc2, 0x303, 0x201, 0xe2, 0x303, 0x201, 0x1ea0, 0x302, - 0x201, 0x1ea1, 0x302, 0x201, 0x102, 0x301, 0x201, 0x103, - 0x301, 0x201, 0x102, 0x300, 0x201, 0x103, 0x300, 0x201, - 0x102, 0x309, 0x201, 0x103, 0x309, 0x201, 0x102, 0x303, - 0x201, 0x103, 0x303, 0x201, 0x1ea0, 0x306, 0x201, 0x1ea1, - 0x306, 0x201, 0x45, 0x323, 0x201, 0x65, 0x323, 0x201, - 0x45, 0x309, 0x201, 0x65, 0x309, 0x201, 0x45, 0x303, - 0x201, 0x65, 0x303, 0x201, 0xca, 0x301, 0x201, 0xea, - 0x301, 0x201, 0xca, 0x300, 0x201, 0xea, 0x300, 0x201, - 0xca, 0x309, 0x201, 0xea, 0x309, 0x201, 0xca, 0x303, - 0x201, 0xea, 0x303, 0x201, 0x1eb8, 0x302, 0x201, 0x1eb9, - 0x302, 0x201, 0x49, 0x309, 0x201, 0x69, 0x309, 0x201, - 0x49, 0x323, 0x201, 0x69, 0x323, 0x201, 0x4f, 0x323, - 0x201, 0x6f, 0x323, 0x201, 0x4f, 0x309, 0x201, 0x6f, - 0x309, 0x201, 0xd4, 0x301, 0x201, 0xf4, 0x301, 0x201, - 0xd4, 0x300, 0x201, 0xf4, 0x300, 0x201, 0xd4, 0x309, - 0x201, 0xf4, 0x309, 0x201, 0xd4, 0x303, 0x201, 0xf4, - 0x303, 0x201, 0x1ecc, 0x302, 0x201, 0x1ecd, 0x302, 0x201, - 0x1a0, 0x301, 0x201, 0x1a1, 0x301, 0x201, 0x1a0, 0x300, - 0x201, 0x1a1, 0x300, 0x201, 0x1a0, 0x309, 0x201, 0x1a1, - 0x309, 0x201, 0x1a0, 0x303, 0x201, 0x1a1, 0x303, 0x201, - 0x1a0, 0x323, 0x201, 0x1a1, 0x323, 0x201, 0x55, 0x323, - 0x201, 0x75, 0x323, 0x201, 0x55, 0x309, 0x201, 0x75, - 0x309, 0x201, 0x1af, 0x301, 0x201, 0x1b0, 0x301, 0x201, - 0x1af, 0x300, 0x201, 0x1b0, 0x300, 0x201, 0x1af, 0x309, - 0x201, 0x1b0, 0x309, 0x201, 0x1af, 0x303, 0x201, 0x1b0, - 0x303, 0x201, 0x1af, 0x323, 0x201, 0x1b0, 0x323, 0x201, - 0x59, 0x300, 0x201, 0x79, 0x300, 0x201, 0x59, 0x323, - 0x201, 0x79, 0x323, 0x201, 0x59, 0x309, 0x201, 0x79, - 0x309, 0x201, 0x59, 0x303, 0x201, 0x79, 0x303, 0x201, - 0x3b1, 0x313, 0x201, 0x3b1, 0x314, 0x201, 0x1f00, 0x300, - 0x201, 0x1f01, 0x300, 0x201, 0x1f00, 0x301, 0x201, 0x1f01, - 0x301, 0x201, 0x1f00, 0x342, 0x201, 0x1f01, 0x342, 0x201, - 0x391, 0x313, 0x201, 0x391, 0x314, 0x201, 0x1f08, 0x300, - 0x201, 0x1f09, 0x300, 0x201, 0x1f08, 0x301, 0x201, 0x1f09, - 0x301, 0x201, 0x1f08, 0x342, 0x201, 0x1f09, 0x342, 0x201, - 0x3b5, 0x313, 0x201, 0x3b5, 0x314, 0x201, 0x1f10, 0x300, - 0x201, 0x1f11, 0x300, 0x201, 0x1f10, 0x301, 0x201, 0x1f11, - 0x301, 0x201, 0x395, 0x313, 0x201, 0x395, 0x314, 0x201, - 0x1f18, 0x300, 0x201, 0x1f19, 0x300, 0x201, 0x1f18, 0x301, - 0x201, 0x1f19, 0x301, 0x201, 0x3b7, 0x313, 0x201, 0x3b7, - 0x314, 0x201, 0x1f20, 0x300, 0x201, 0x1f21, 0x300, 0x201, - 0x1f20, 0x301, 0x201, 0x1f21, 0x301, 0x201, 0x1f20, 0x342, - 0x201, 0x1f21, 0x342, 0x201, 0x397, 0x313, 0x201, 0x397, - 0x314, 0x201, 0x1f28, 0x300, 0x201, 0x1f29, 0x300, 0x201, - 0x1f28, 0x301, 0x201, 0x1f29, 0x301, 0x201, 0x1f28, 0x342, - 0x201, 0x1f29, 0x342, 0x201, 0x3b9, 0x313, 0x201, 0x3b9, - 0x314, 0x201, 0x1f30, 0x300, 0x201, 0x1f31, 0x300, 0x201, - 0x1f30, 0x301, 0x201, 0x1f31, 0x301, 0x201, 0x1f30, 0x342, - 0x201, 0x1f31, 0x342, 0x201, 0x399, 0x313, 0x201, 0x399, - 0x314, 0x201, 0x1f38, 0x300, 0x201, 0x1f39, 0x300, 0x201, - 0x1f38, 0x301, 0x201, 0x1f39, 0x301, 0x201, 0x1f38, 0x342, - 0x201, 0x1f39, 0x342, 0x201, 0x3bf, 0x313, 0x201, 0x3bf, - 0x314, 0x201, 0x1f40, 0x300, 0x201, 0x1f41, 0x300, 0x201, - 0x1f40, 0x301, 0x201, 0x1f41, 0x301, 0x201, 0x39f, 0x313, - 0x201, 0x39f, 0x314, 0x201, 0x1f48, 0x300, 0x201, 0x1f49, - 0x300, 0x201, 0x1f48, 0x301, 0x201, 0x1f49, 0x301, 0x201, - 0x3c5, 0x313, 0x201, 0x3c5, 0x314, 0x201, 0x1f50, 0x300, - 0x201, 0x1f51, 0x300, 0x201, 0x1f50, 0x301, 0x201, 0x1f51, - 0x301, 0x201, 0x1f50, 0x342, 0x201, 0x1f51, 0x342, 0x201, - 0x3a5, 0x314, 0x201, 0x1f59, 0x300, 0x201, 0x1f59, 0x301, - 0x201, 0x1f59, 0x342, 0x201, 0x3c9, 0x313, 0x201, 0x3c9, - 0x314, 0x201, 0x1f60, 0x300, 0x201, 0x1f61, 0x300, 0x201, - 0x1f60, 0x301, 0x201, 0x1f61, 0x301, 0x201, 0x1f60, 0x342, - 0x201, 0x1f61, 0x342, 0x201, 0x3a9, 0x313, 0x201, 0x3a9, - 0x314, 0x201, 0x1f68, 0x300, 0x201, 0x1f69, 0x300, 0x201, - 0x1f68, 0x301, 0x201, 0x1f69, 0x301, 0x201, 0x1f68, 0x342, - 0x201, 0x1f69, 0x342, 0x201, 0x3b1, 0x300, 0x101, 0x3ac, - 0x201, 0x3b5, 0x300, 0x101, 0x3ad, 0x201, 0x3b7, 0x300, - 0x101, 0x3ae, 0x201, 0x3b9, 0x300, 0x101, 0x3af, 0x201, - 0x3bf, 0x300, 0x101, 0x3cc, 0x201, 0x3c5, 0x300, 0x101, - 0x3cd, 0x201, 0x3c9, 0x300, 0x101, 0x3ce, 0x201, 0x1f00, - 0x345, 0x201, 0x1f01, 0x345, 0x201, 0x1f02, 0x345, 0x201, - 0x1f03, 0x345, 0x201, 0x1f04, 0x345, 0x201, 0x1f05, 0x345, - 0x201, 0x1f06, 0x345, 0x201, 0x1f07, 0x345, 0x201, 0x1f08, - 0x345, 0x201, 0x1f09, 0x345, 0x201, 0x1f0a, 0x345, 0x201, - 0x1f0b, 0x345, 0x201, 0x1f0c, 0x345, 0x201, 0x1f0d, 0x345, - 0x201, 0x1f0e, 0x345, 0x201, 0x1f0f, 0x345, 0x201, 0x1f20, - 0x345, 0x201, 0x1f21, 0x345, 0x201, 0x1f22, 0x345, 0x201, - 0x1f23, 0x345, 0x201, 0x1f24, 0x345, 0x201, 0x1f25, 0x345, - 0x201, 0x1f26, 0x345, 0x201, 0x1f27, 0x345, 0x201, 0x1f28, - 0x345, 0x201, 0x1f29, 0x345, 0x201, 0x1f2a, 0x345, 0x201, - 0x1f2b, 0x345, 0x201, 0x1f2c, 0x345, 0x201, 0x1f2d, 0x345, - 0x201, 0x1f2e, 0x345, 0x201, 0x1f2f, 0x345, 0x201, 0x1f60, - 0x345, 0x201, 0x1f61, 0x345, 0x201, 0x1f62, 0x345, 0x201, - 0x1f63, 0x345, 0x201, 0x1f64, 0x345, 0x201, 0x1f65, 0x345, - 0x201, 0x1f66, 0x345, 0x201, 0x1f67, 0x345, 0x201, 0x1f68, - 0x345, 0x201, 0x1f69, 0x345, 0x201, 0x1f6a, 0x345, 0x201, - 0x1f6b, 0x345, 0x201, 0x1f6c, 0x345, 0x201, 0x1f6d, 0x345, - 0x201, 0x1f6e, 0x345, 0x201, 0x1f6f, 0x345, 0x201, 0x3b1, - 0x306, 0x201, 0x3b1, 0x304, 0x201, 0x1f70, 0x345, 0x201, - 0x3b1, 0x345, 0x201, 0x3ac, 0x345, 0x201, 0x3b1, 0x342, - 0x201, 0x1fb6, 0x345, 0x201, 0x391, 0x306, 0x201, 0x391, - 0x304, 0x201, 0x391, 0x300, 0x101, 0x386, 0x201, 0x391, - 0x345, 0x210, 0x20, 0x313, 0x101, 0x3b9, 0x210, 0x20, - 0x313, 0x210, 0x20, 0x342, 0x201, 0xa8, 0x342, 0x201, - 0x1f74, 0x345, 0x201, 0x3b7, 0x345, 0x201, 0x3ae, 0x345, - 0x201, 0x3b7, 0x342, 0x201, 0x1fc6, 0x345, 0x201, 0x395, - 0x300, 0x101, 0x388, 0x201, 0x397, 0x300, 0x101, 0x389, - 0x201, 0x397, 0x345, 0x201, 0x1fbf, 0x300, 0x201, 0x1fbf, - 0x301, 0x201, 0x1fbf, 0x342, 0x201, 0x3b9, 0x306, 0x201, - 0x3b9, 0x304, 0x201, 0x3ca, 0x300, 0x101, 0x390, 0x201, - 0x3b9, 0x342, 0x201, 0x3ca, 0x342, 0x201, 0x399, 0x306, - 0x201, 0x399, 0x304, 0x201, 0x399, 0x300, 0x101, 0x38a, - 0x201, 0x1ffe, 0x300, 0x201, 0x1ffe, 0x301, 0x201, 0x1ffe, - 0x342, 0x201, 0x3c5, 0x306, 0x201, 0x3c5, 0x304, 0x201, - 0x3cb, 0x300, 0x101, 0x3b0, 0x201, 0x3c1, 0x313, 0x201, - 0x3c1, 0x314, 0x201, 0x3c5, 0x342, 0x201, 0x3cb, 0x342, - 0x201, 0x3a5, 0x306, 0x201, 0x3a5, 0x304, 0x201, 0x3a5, - 0x300, 0x101, 0x38e, 0x201, 0x3a1, 0x314, 0x201, 0xa8, - 0x300, 0x101, 0x385, 0x101, 0x60, 0x201, 0x1f7c, 0x345, - 0x201, 0x3c9, 0x345, 0x201, 0x3ce, 0x345, 0x201, 0x3c9, - 0x342, 0x201, 0x1ff6, 0x345, 0x201, 0x39f, 0x300, 0x101, - 0x38c, 0x201, 0x3a9, 0x300, 0x101, 0x38f, 0x201, 0x3a9, - 0x345, 0x101, 0xb4, 0x210, 0x20, 0x314, 0x101, 0x2002, - 0x101, 0x2003, 0x110, 0x20, 0x110, 0x20, 0x110, 0x20, - 0x110, 0x20, 0x110, 0x20, 0x103, 0x20, 0x110, 0x20, - 0x110, 0x20, 0x110, 0x20, 0x103, 0x2010, 0x210, 0x20, - 0x333, 0x110, 0x2e, 0x210, 0x2e, 0x2e, 0x310, 0x2e, - 0x2e, 0x2e, 0x103, 0x20, 0x210, 0x2032, 0x2032, 0x310, - 0x2032, 0x2032, 0x2032, 0x210, 0x2035, 0x2035, 0x310, 0x2035, - 0x2035, 0x2035, 0x210, 0x21, 0x21, 0x210, 0x20, 0x305, - 0x210, 0x3f, 0x3f, 0x210, 0x3f, 0x21, 0x210, 0x21, - 0x3f, 0x410, 0x2032, 0x2032, 0x2032, 0x2032, 0x110, 0x20, - 0x109, 0x30, 0x109, 0x69, 0x109, 0x34, 0x109, 0x35, - 0x109, 0x36, 0x109, 0x37, 0x109, 0x38, 0x109, 0x39, - 0x109, 0x2b, 0x109, 0x2212, 0x109, 0x3d, 0x109, 0x28, - 0x109, 0x29, 0x109, 0x6e, 0x10a, 0x30, 0x10a, 0x31, - 0x10a, 0x32, 0x10a, 0x33, 0x10a, 0x34, 0x10a, 0x35, - 0x10a, 0x36, 0x10a, 0x37, 0x10a, 0x38, 0x10a, 0x39, - 0x10a, 0x2b, 0x10a, 0x2212, 0x10a, 0x3d, 0x10a, 0x28, - 0x10a, 0x29, 0x10a, 0x61, 0x10a, 0x65, 0x10a, 0x6f, - 0x10a, 0x78, 0x10a, 0x259, 0x10a, 0x68, 0x10a, 0x6b, - 0x10a, 0x6c, 0x10a, 0x6d, 0x10a, 0x6e, 0x10a, 0x70, - 0x10a, 0x73, 0x10a, 0x74, 0x210, 0x52, 0x73, 0x310, - 0x61, 0x2f, 0x63, 0x310, 0x61, 0x2f, 0x73, 0x102, - 0x43, 0x210, 0xb0, 0x43, 0x310, 0x63, 0x2f, 0x6f, - 0x310, 0x63, 0x2f, 0x75, 0x110, 0x190, 0x210, 0xb0, - 0x46, 0x102, 0x67, 0x102, 0x48, 0x102, 0x48, 0x102, - 0x48, 0x102, 0x68, 0x102, 0x127, 0x102, 0x49, 0x102, - 0x49, 0x102, 0x4c, 0x102, 0x6c, 0x102, 0x4e, 0x210, - 0x4e, 0x6f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, - 0x102, 0x52, 0x102, 0x52, 0x209, 0x53, 0x4d, 0x310, - 0x54, 0x45, 0x4c, 0x209, 0x54, 0x4d, 0x102, 0x5a, - 0x101, 0x3a9, 0x102, 0x5a, 0x101, 0x4b, 0x101, 0xc5, - 0x102, 0x42, 0x102, 0x43, 0x102, 0x65, 0x102, 0x45, - 0x102, 0x46, 0x102, 0x4d, 0x102, 0x6f, 0x110, 0x5d0, - 0x110, 0x5d1, 0x110, 0x5d2, 0x110, 0x5d3, 0x102, 0x69, - 0x310, 0x46, 0x41, 0x58, 0x102, 0x3c0, 0x102, 0x3b3, - 0x102, 0x393, 0x102, 0x3a0, 0x102, 0x2211, 0x102, 0x44, - 0x102, 0x64, 0x102, 0x65, 0x102, 0x69, 0x102, 0x6a, - 0x311, 0x31, 0x2044, 0x37, 0x311, 0x31, 0x2044, 0x39, - 0x411, 0x31, 0x2044, 0x31, 0x30, 0x311, 0x31, 0x2044, - 0x33, 0x311, 0x32, 0x2044, 0x33, 0x311, 0x31, 0x2044, - 0x35, 0x311, 0x32, 0x2044, 0x35, 0x311, 0x33, 0x2044, - 0x35, 0x311, 0x34, 0x2044, 0x35, 0x311, 0x31, 0x2044, - 0x36, 0x311, 0x35, 0x2044, 0x36, 0x311, 0x31, 0x2044, - 0x38, 0x311, 0x33, 0x2044, 0x38, 0x311, 0x35, 0x2044, - 0x38, 0x311, 0x37, 0x2044, 0x38, 0x211, 0x31, 0x2044, - 0x110, 0x49, 0x210, 0x49, 0x49, 0x310, 0x49, 0x49, - 0x49, 0x210, 0x49, 0x56, 0x110, 0x56, 0x210, 0x56, - 0x49, 0x310, 0x56, 0x49, 0x49, 0x410, 0x56, 0x49, - 0x49, 0x49, 0x210, 0x49, 0x58, 0x110, 0x58, 0x210, - 0x58, 0x49, 0x310, 0x58, 0x49, 0x49, 0x110, 0x4c, - 0x110, 0x43, 0x110, 0x44, 0x110, 0x4d, 0x110, 0x69, - 0x210, 0x69, 0x69, 0x310, 0x69, 0x69, 0x69, 0x210, - 0x69, 0x76, 0x110, 0x76, 0x210, 0x76, 0x69, 0x310, - 0x76, 0x69, 0x69, 0x410, 0x76, 0x69, 0x69, 0x69, - 0x210, 0x69, 0x78, 0x110, 0x78, 0x210, 0x78, 0x69, - 0x310, 0x78, 0x69, 0x69, 0x110, 0x6c, 0x110, 0x63, - 0x110, 0x64, 0x110, 0x6d, 0x311, 0x30, 0x2044, 0x33, - 0x201, 0x2190, 0x338, 0x201, 0x2192, 0x338, 0x201, 0x2194, - 0x338, 0x201, 0x21d0, 0x338, 0x201, 0x21d4, 0x338, 0x201, - 0x21d2, 0x338, 0x201, 0x2203, 0x338, 0x201, 0x2208, 0x338, - 0x201, 0x220b, 0x338, 0x201, 0x2223, 0x338, 0x201, 0x2225, - 0x338, 0x210, 0x222b, 0x222b, 0x310, 0x222b, 0x222b, 0x222b, - 0x210, 0x222e, 0x222e, 0x310, 0x222e, 0x222e, 0x222e, 0x201, - 0x223c, 0x338, 0x201, 0x2243, 0x338, 0x201, 0x2245, 0x338, - 0x201, 0x2248, 0x338, 0x201, 0x3d, 0x338, 0x201, 0x2261, - 0x338, 0x201, 0x224d, 0x338, 0x201, 0x3c, 0x338, 0x201, - 0x3e, 0x338, 0x201, 0x2264, 0x338, 0x201, 0x2265, 0x338, - 0x201, 0x2272, 0x338, 0x201, 0x2273, 0x338, 0x201, 0x2276, - 0x338, 0x201, 0x2277, 0x338, 0x201, 0x227a, 0x338, 0x201, - 0x227b, 0x338, 0x201, 0x2282, 0x338, 0x201, 0x2283, 0x338, - 0x201, 0x2286, 0x338, 0x201, 0x2287, 0x338, 0x201, 0x22a2, - 0x338, 0x201, 0x22a8, 0x338, 0x201, 0x22a9, 0x338, 0x201, - 0x22ab, 0x338, 0x201, 0x227c, 0x338, 0x201, 0x227d, 0x338, - 0x201, 0x2291, 0x338, 0x201, 0x2292, 0x338, 0x201, 0x22b2, - 0x338, 0x201, 0x22b3, 0x338, 0x201, 0x22b4, 0x338, 0x201, - 0x22b5, 0x338, 0x101, 0x3008, 0x101, 0x3009, 0x108, 0x31, - 0x108, 0x32, 0x108, 0x33, 0x108, 0x34, 0x108, 0x35, - 0x108, 0x36, 0x108, 0x37, 0x108, 0x38, 0x108, 0x39, - 0x208, 0x31, 0x30, 0x208, 0x31, 0x31, 0x208, 0x31, - 0x32, 0x208, 0x31, 0x33, 0x208, 0x31, 0x34, 0x208, - 0x31, 0x35, 0x208, 0x31, 0x36, 0x208, 0x31, 0x37, - 0x208, 0x31, 0x38, 0x208, 0x31, 0x39, 0x208, 0x32, - 0x30, 0x310, 0x28, 0x31, 0x29, 0x310, 0x28, 0x32, - 0x29, 0x310, 0x28, 0x33, 0x29, 0x310, 0x28, 0x34, - 0x29, 0x310, 0x28, 0x35, 0x29, 0x310, 0x28, 0x36, - 0x29, 0x310, 0x28, 0x37, 0x29, 0x310, 0x28, 0x38, - 0x29, 0x310, 0x28, 0x39, 0x29, 0x410, 0x28, 0x31, - 0x30, 0x29, 0x410, 0x28, 0x31, 0x31, 0x29, 0x410, - 0x28, 0x31, 0x32, 0x29, 0x410, 0x28, 0x31, 0x33, - 0x29, 0x410, 0x28, 0x31, 0x34, 0x29, 0x410, 0x28, - 0x31, 0x35, 0x29, 0x410, 0x28, 0x31, 0x36, 0x29, - 0x410, 0x28, 0x31, 0x37, 0x29, 0x410, 0x28, 0x31, - 0x38, 0x29, 0x410, 0x28, 0x31, 0x39, 0x29, 0x410, - 0x28, 0x32, 0x30, 0x29, 0x210, 0x31, 0x2e, 0x210, - 0x32, 0x2e, 0x210, 0x33, 0x2e, 0x210, 0x34, 0x2e, - 0x210, 0x35, 0x2e, 0x210, 0x36, 0x2e, 0x210, 0x37, - 0x2e, 0x210, 0x38, 0x2e, 0x210, 0x39, 0x2e, 0x310, - 0x31, 0x30, 0x2e, 0x310, 0x31, 0x31, 0x2e, 0x310, - 0x31, 0x32, 0x2e, 0x310, 0x31, 0x33, 0x2e, 0x310, - 0x31, 0x34, 0x2e, 0x310, 0x31, 0x35, 0x2e, 0x310, - 0x31, 0x36, 0x2e, 0x310, 0x31, 0x37, 0x2e, 0x310, - 0x31, 0x38, 0x2e, 0x310, 0x31, 0x39, 0x2e, 0x310, - 0x32, 0x30, 0x2e, 0x310, 0x28, 0x61, 0x29, 0x310, - 0x28, 0x62, 0x29, 0x310, 0x28, 0x63, 0x29, 0x310, - 0x28, 0x64, 0x29, 0x310, 0x28, 0x65, 0x29, 0x310, - 0x28, 0x66, 0x29, 0x310, 0x28, 0x67, 0x29, 0x310, - 0x28, 0x68, 0x29, 0x310, 0x28, 0x69, 0x29, 0x310, - 0x28, 0x6a, 0x29, 0x310, 0x28, 0x6b, 0x29, 0x310, - 0x28, 0x6c, 0x29, 0x310, 0x28, 0x6d, 0x29, 0x310, - 0x28, 0x6e, 0x29, 0x310, 0x28, 0x6f, 0x29, 0x310, - 0x28, 0x70, 0x29, 0x310, 0x28, 0x71, 0x29, 0x310, - 0x28, 0x72, 0x29, 0x310, 0x28, 0x73, 0x29, 0x310, - 0x28, 0x74, 0x29, 0x310, 0x28, 0x75, 0x29, 0x310, - 0x28, 0x76, 0x29, 0x310, 0x28, 0x77, 0x29, 0x310, - 0x28, 0x78, 0x29, 0x310, 0x28, 0x79, 0x29, 0x310, - 0x28, 0x7a, 0x29, 0x108, 0x41, 0x108, 0x42, 0x108, - 0x43, 0x108, 0x44, 0x108, 0x45, 0x108, 0x46, 0x108, - 0x47, 0x108, 0x48, 0x108, 0x49, 0x108, 0x4a, 0x108, - 0x4b, 0x108, 0x4c, 0x108, 0x4d, 0x108, 0x4e, 0x108, - 0x4f, 0x108, 0x50, 0x108, 0x51, 0x108, 0x52, 0x108, - 0x53, 0x108, 0x54, 0x108, 0x55, 0x108, 0x56, 0x108, - 0x57, 0x108, 0x58, 0x108, 0x59, 0x108, 0x5a, 0x108, - 0x61, 0x108, 0x62, 0x108, 0x63, 0x108, 0x64, 0x108, - 0x65, 0x108, 0x66, 0x108, 0x67, 0x108, 0x68, 0x108, - 0x69, 0x108, 0x6a, 0x108, 0x6b, 0x108, 0x6c, 0x108, - 0x6d, 0x108, 0x6e, 0x108, 0x6f, 0x108, 0x70, 0x108, - 0x71, 0x108, 0x72, 0x108, 0x73, 0x108, 0x74, 0x108, - 0x75, 0x108, 0x76, 0x108, 0x77, 0x108, 0x78, 0x108, - 0x79, 0x108, 0x7a, 0x108, 0x30, 0x410, 0x222b, 0x222b, - 0x222b, 0x222b, 0x310, 0x3a, 0x3a, 0x3d, 0x210, 0x3d, - 0x3d, 0x310, 0x3d, 0x3d, 0x3d, 0x201, 0x2add, 0x338, - 0x10a, 0x6a, 0x109, 0x56, 0x109, 0x2d61, 0x110, 0x6bcd, - 0x110, 0x9f9f, 0x110, 0x4e00, 0x110, 0x4e28, 0x110, 0x4e36, - 0x110, 0x4e3f, 0x110, 0x4e59, 0x110, 0x4e85, 0x110, 0x4e8c, - 0x110, 0x4ea0, 0x110, 0x4eba, 0x110, 0x513f, 0x110, 0x5165, - 0x110, 0x516b, 0x110, 0x5182, 0x110, 0x5196, 0x110, 0x51ab, - 0x110, 0x51e0, 0x110, 0x51f5, 0x110, 0x5200, 0x110, 0x529b, - 0x110, 0x52f9, 0x110, 0x5315, 0x110, 0x531a, 0x110, 0x5338, - 0x110, 0x5341, 0x110, 0x535c, 0x110, 0x5369, 0x110, 0x5382, - 0x110, 0x53b6, 0x110, 0x53c8, 0x110, 0x53e3, 0x110, 0x56d7, - 0x110, 0x571f, 0x110, 0x58eb, 0x110, 0x5902, 0x110, 0x590a, - 0x110, 0x5915, 0x110, 0x5927, 0x110, 0x5973, 0x110, 0x5b50, - 0x110, 0x5b80, 0x110, 0x5bf8, 0x110, 0x5c0f, 0x110, 0x5c22, - 0x110, 0x5c38, 0x110, 0x5c6e, 0x110, 0x5c71, 0x110, 0x5ddb, - 0x110, 0x5de5, 0x110, 0x5df1, 0x110, 0x5dfe, 0x110, 0x5e72, - 0x110, 0x5e7a, 0x110, 0x5e7f, 0x110, 0x5ef4, 0x110, 0x5efe, - 0x110, 0x5f0b, 0x110, 0x5f13, 0x110, 0x5f50, 0x110, 0x5f61, - 0x110, 0x5f73, 0x110, 0x5fc3, 0x110, 0x6208, 0x110, 0x6236, - 0x110, 0x624b, 0x110, 0x652f, 0x110, 0x6534, 0x110, 0x6587, - 0x110, 0x6597, 0x110, 0x65a4, 0x110, 0x65b9, 0x110, 0x65e0, - 0x110, 0x65e5, 0x110, 0x66f0, 0x110, 0x6708, 0x110, 0x6728, - 0x110, 0x6b20, 0x110, 0x6b62, 0x110, 0x6b79, 0x110, 0x6bb3, - 0x110, 0x6bcb, 0x110, 0x6bd4, 0x110, 0x6bdb, 0x110, 0x6c0f, - 0x110, 0x6c14, 0x110, 0x6c34, 0x110, 0x706b, 0x110, 0x722a, - 0x110, 0x7236, 0x110, 0x723b, 0x110, 0x723f, 0x110, 0x7247, - 0x110, 0x7259, 0x110, 0x725b, 0x110, 0x72ac, 0x110, 0x7384, - 0x110, 0x7389, 0x110, 0x74dc, 0x110, 0x74e6, 0x110, 0x7518, - 0x110, 0x751f, 0x110, 0x7528, 0x110, 0x7530, 0x110, 0x758b, - 0x110, 0x7592, 0x110, 0x7676, 0x110, 0x767d, 0x110, 0x76ae, - 0x110, 0x76bf, 0x110, 0x76ee, 0x110, 0x77db, 0x110, 0x77e2, - 0x110, 0x77f3, 0x110, 0x793a, 0x110, 0x79b8, 0x110, 0x79be, - 0x110, 0x7a74, 0x110, 0x7acb, 0x110, 0x7af9, 0x110, 0x7c73, - 0x110, 0x7cf8, 0x110, 0x7f36, 0x110, 0x7f51, 0x110, 0x7f8a, - 0x110, 0x7fbd, 0x110, 0x8001, 0x110, 0x800c, 0x110, 0x8012, - 0x110, 0x8033, 0x110, 0x807f, 0x110, 0x8089, 0x110, 0x81e3, - 0x110, 0x81ea, 0x110, 0x81f3, 0x110, 0x81fc, 0x110, 0x820c, - 0x110, 0x821b, 0x110, 0x821f, 0x110, 0x826e, 0x110, 0x8272, - 0x110, 0x8278, 0x110, 0x864d, 0x110, 0x866b, 0x110, 0x8840, - 0x110, 0x884c, 0x110, 0x8863, 0x110, 0x897e, 0x110, 0x898b, - 0x110, 0x89d2, 0x110, 0x8a00, 0x110, 0x8c37, 0x110, 0x8c46, - 0x110, 0x8c55, 0x110, 0x8c78, 0x110, 0x8c9d, 0x110, 0x8d64, - 0x110, 0x8d70, 0x110, 0x8db3, 0x110, 0x8eab, 0x110, 0x8eca, - 0x110, 0x8f9b, 0x110, 0x8fb0, 0x110, 0x8fb5, 0x110, 0x9091, - 0x110, 0x9149, 0x110, 0x91c6, 0x110, 0x91cc, 0x110, 0x91d1, - 0x110, 0x9577, 0x110, 0x9580, 0x110, 0x961c, 0x110, 0x96b6, - 0x110, 0x96b9, 0x110, 0x96e8, 0x110, 0x9751, 0x110, 0x975e, - 0x110, 0x9762, 0x110, 0x9769, 0x110, 0x97cb, 0x110, 0x97ed, - 0x110, 0x97f3, 0x110, 0x9801, 0x110, 0x98a8, 0x110, 0x98db, - 0x110, 0x98df, 0x110, 0x9996, 0x110, 0x9999, 0x110, 0x99ac, - 0x110, 0x9aa8, 0x110, 0x9ad8, 0x110, 0x9adf, 0x110, 0x9b25, - 0x110, 0x9b2f, 0x110, 0x9b32, 0x110, 0x9b3c, 0x110, 0x9b5a, - 0x110, 0x9ce5, 0x110, 0x9e75, 0x110, 0x9e7f, 0x110, 0x9ea5, - 0x110, 0x9ebb, 0x110, 0x9ec3, 0x110, 0x9ecd, 0x110, 0x9ed1, - 0x110, 0x9ef9, 0x110, 0x9efd, 0x110, 0x9f0e, 0x110, 0x9f13, - 0x110, 0x9f20, 0x110, 0x9f3b, 0x110, 0x9f4a, 0x110, 0x9f52, - 0x110, 0x9f8d, 0x110, 0x9f9c, 0x110, 0x9fa0, 0x10c, 0x20, - 0x110, 0x3012, 0x110, 0x5341, 0x110, 0x5344, 0x110, 0x5345, - 0x201, 0x304b, 0x3099, 0x201, 0x304d, 0x3099, 0x201, 0x304f, - 0x3099, 0x201, 0x3051, 0x3099, 0x201, 0x3053, 0x3099, 0x201, - 0x3055, 0x3099, 0x201, 0x3057, 0x3099, 0x201, 0x3059, 0x3099, - 0x201, 0x305b, 0x3099, 0x201, 0x305d, 0x3099, 0x201, 0x305f, - 0x3099, 0x201, 0x3061, 0x3099, 0x201, 0x3064, 0x3099, 0x201, - 0x3066, 0x3099, 0x201, 0x3068, 0x3099, 0x201, 0x306f, 0x3099, - 0x201, 0x306f, 0x309a, 0x201, 0x3072, 0x3099, 0x201, 0x3072, - 0x309a, 0x201, 0x3075, 0x3099, 0x201, 0x3075, 0x309a, 0x201, - 0x3078, 0x3099, 0x201, 0x3078, 0x309a, 0x201, 0x307b, 0x3099, - 0x201, 0x307b, 0x309a, 0x201, 0x3046, 0x3099, 0x210, 0x20, - 0x3099, 0x210, 0x20, 0x309a, 0x201, 0x309d, 0x3099, 0x20b, - 0x3088, 0x308a, 0x201, 0x30ab, 0x3099, 0x201, 0x30ad, 0x3099, - 0x201, 0x30af, 0x3099, 0x201, 0x30b1, 0x3099, 0x201, 0x30b3, - 0x3099, 0x201, 0x30b5, 0x3099, 0x201, 0x30b7, 0x3099, 0x201, - 0x30b9, 0x3099, 0x201, 0x30bb, 0x3099, 0x201, 0x30bd, 0x3099, - 0x201, 0x30bf, 0x3099, 0x201, 0x30c1, 0x3099, 0x201, 0x30c4, - 0x3099, 0x201, 0x30c6, 0x3099, 0x201, 0x30c8, 0x3099, 0x201, - 0x30cf, 0x3099, 0x201, 0x30cf, 0x309a, 0x201, 0x30d2, 0x3099, - 0x201, 0x30d2, 0x309a, 0x201, 0x30d5, 0x3099, 0x201, 0x30d5, - 0x309a, 0x201, 0x30d8, 0x3099, 0x201, 0x30d8, 0x309a, 0x201, - 0x30db, 0x3099, 0x201, 0x30db, 0x309a, 0x201, 0x30a6, 0x3099, - 0x201, 0x30ef, 0x3099, 0x201, 0x30f0, 0x3099, 0x201, 0x30f1, - 0x3099, 0x201, 0x30f2, 0x3099, 0x201, 0x30fd, 0x3099, 0x20b, - 0x30b3, 0x30c8, 0x110, 0x1100, 0x110, 0x1101, 0x110, 0x11aa, - 0x110, 0x1102, 0x110, 0x11ac, 0x110, 0x11ad, 0x110, 0x1103, - 0x110, 0x1104, 0x110, 0x1105, 0x110, 0x11b0, 0x110, 0x11b1, - 0x110, 0x11b2, 0x110, 0x11b3, 0x110, 0x11b4, 0x110, 0x11b5, - 0x110, 0x111a, 0x110, 0x1106, 0x110, 0x1107, 0x110, 0x1108, - 0x110, 0x1121, 0x110, 0x1109, 0x110, 0x110a, 0x110, 0x110b, - 0x110, 0x110c, 0x110, 0x110d, 0x110, 0x110e, 0x110, 0x110f, - 0x110, 0x1110, 0x110, 0x1111, 0x110, 0x1112, 0x110, 0x1161, - 0x110, 0x1162, 0x110, 0x1163, 0x110, 0x1164, 0x110, 0x1165, - 0x110, 0x1166, 0x110, 0x1167, 0x110, 0x1168, 0x110, 0x1169, - 0x110, 0x116a, 0x110, 0x116b, 0x110, 0x116c, 0x110, 0x116d, - 0x110, 0x116e, 0x110, 0x116f, 0x110, 0x1170, 0x110, 0x1171, - 0x110, 0x1172, 0x110, 0x1173, 0x110, 0x1174, 0x110, 0x1175, - 0x110, 0x1160, 0x110, 0x1114, 0x110, 0x1115, 0x110, 0x11c7, - 0x110, 0x11c8, 0x110, 0x11cc, 0x110, 0x11ce, 0x110, 0x11d3, - 0x110, 0x11d7, 0x110, 0x11d9, 0x110, 0x111c, 0x110, 0x11dd, - 0x110, 0x11df, 0x110, 0x111d, 0x110, 0x111e, 0x110, 0x1120, - 0x110, 0x1122, 0x110, 0x1123, 0x110, 0x1127, 0x110, 0x1129, - 0x110, 0x112b, 0x110, 0x112c, 0x110, 0x112d, 0x110, 0x112e, - 0x110, 0x112f, 0x110, 0x1132, 0x110, 0x1136, 0x110, 0x1140, - 0x110, 0x1147, 0x110, 0x114c, 0x110, 0x11f1, 0x110, 0x11f2, - 0x110, 0x1157, 0x110, 0x1158, 0x110, 0x1159, 0x110, 0x1184, - 0x110, 0x1185, 0x110, 0x1188, 0x110, 0x1191, 0x110, 0x1192, - 0x110, 0x1194, 0x110, 0x119e, 0x110, 0x11a1, 0x109, 0x4e00, - 0x109, 0x4e8c, 0x109, 0x4e09, 0x109, 0x56db, 0x109, 0x4e0a, - 0x109, 0x4e2d, 0x109, 0x4e0b, 0x109, 0x7532, 0x109, 0x4e59, - 0x109, 0x4e19, 0x109, 0x4e01, 0x109, 0x5929, 0x109, 0x5730, - 0x109, 0x4eba, 0x310, 0x28, 0x1100, 0x29, 0x310, 0x28, - 0x1102, 0x29, 0x310, 0x28, 0x1103, 0x29, 0x310, 0x28, - 0x1105, 0x29, 0x310, 0x28, 0x1106, 0x29, 0x310, 0x28, - 0x1107, 0x29, 0x310, 0x28, 0x1109, 0x29, 0x310, 0x28, - 0x110b, 0x29, 0x310, 0x28, 0x110c, 0x29, 0x310, 0x28, - 0x110e, 0x29, 0x310, 0x28, 0x110f, 0x29, 0x310, 0x28, - 0x1110, 0x29, 0x310, 0x28, 0x1111, 0x29, 0x310, 0x28, - 0x1112, 0x29, 0x410, 0x28, 0x1100, 0x1161, 0x29, 0x410, - 0x28, 0x1102, 0x1161, 0x29, 0x410, 0x28, 0x1103, 0x1161, - 0x29, 0x410, 0x28, 0x1105, 0x1161, 0x29, 0x410, 0x28, - 0x1106, 0x1161, 0x29, 0x410, 0x28, 0x1107, 0x1161, 0x29, - 0x410, 0x28, 0x1109, 0x1161, 0x29, 0x410, 0x28, 0x110b, - 0x1161, 0x29, 0x410, 0x28, 0x110c, 0x1161, 0x29, 0x410, - 0x28, 0x110e, 0x1161, 0x29, 0x410, 0x28, 0x110f, 0x1161, - 0x29, 0x410, 0x28, 0x1110, 0x1161, 0x29, 0x410, 0x28, - 0x1111, 0x1161, 0x29, 0x410, 0x28, 0x1112, 0x1161, 0x29, - 0x410, 0x28, 0x110c, 0x116e, 0x29, 0x710, 0x28, 0x110b, - 0x1169, 0x110c, 0x1165, 0x11ab, 0x29, 0x610, 0x28, 0x110b, - 0x1169, 0x1112, 0x116e, 0x29, 0x310, 0x28, 0x4e00, 0x29, - 0x310, 0x28, 0x4e8c, 0x29, 0x310, 0x28, 0x4e09, 0x29, - 0x310, 0x28, 0x56db, 0x29, 0x310, 0x28, 0x4e94, 0x29, - 0x310, 0x28, 0x516d, 0x29, 0x310, 0x28, 0x4e03, 0x29, - 0x310, 0x28, 0x516b, 0x29, 0x310, 0x28, 0x4e5d, 0x29, - 0x310, 0x28, 0x5341, 0x29, 0x310, 0x28, 0x6708, 0x29, - 0x310, 0x28, 0x706b, 0x29, 0x310, 0x28, 0x6c34, 0x29, - 0x310, 0x28, 0x6728, 0x29, 0x310, 0x28, 0x91d1, 0x29, - 0x310, 0x28, 0x571f, 0x29, 0x310, 0x28, 0x65e5, 0x29, - 0x310, 0x28, 0x682a, 0x29, 0x310, 0x28, 0x6709, 0x29, - 0x310, 0x28, 0x793e, 0x29, 0x310, 0x28, 0x540d, 0x29, - 0x310, 0x28, 0x7279, 0x29, 0x310, 0x28, 0x8ca1, 0x29, - 0x310, 0x28, 0x795d, 0x29, 0x310, 0x28, 0x52b4, 0x29, - 0x310, 0x28, 0x4ee3, 0x29, 0x310, 0x28, 0x547c, 0x29, - 0x310, 0x28, 0x5b66, 0x29, 0x310, 0x28, 0x76e3, 0x29, - 0x310, 0x28, 0x4f01, 0x29, 0x310, 0x28, 0x8cc7, 0x29, - 0x310, 0x28, 0x5354, 0x29, 0x310, 0x28, 0x796d, 0x29, - 0x310, 0x28, 0x4f11, 0x29, 0x310, 0x28, 0x81ea, 0x29, - 0x310, 0x28, 0x81f3, 0x29, 0x108, 0x554f, 0x108, 0x5e7c, - 0x108, 0x6587, 0x108, 0x7b8f, 0x30f, 0x50, 0x54, 0x45, - 0x208, 0x32, 0x31, 0x208, 0x32, 0x32, 0x208, 0x32, - 0x33, 0x208, 0x32, 0x34, 0x208, 0x32, 0x35, 0x208, - 0x32, 0x36, 0x208, 0x32, 0x37, 0x208, 0x32, 0x38, - 0x208, 0x32, 0x39, 0x208, 0x33, 0x30, 0x208, 0x33, - 0x31, 0x208, 0x33, 0x32, 0x208, 0x33, 0x33, 0x208, - 0x33, 0x34, 0x208, 0x33, 0x35, 0x108, 0x1100, 0x108, - 0x1102, 0x108, 0x1103, 0x108, 0x1105, 0x108, 0x1106, 0x108, - 0x1107, 0x108, 0x1109, 0x108, 0x110b, 0x108, 0x110c, 0x108, - 0x110e, 0x108, 0x110f, 0x108, 0x1110, 0x108, 0x1111, 0x108, - 0x1112, 0x208, 0x1100, 0x1161, 0x208, 0x1102, 0x1161, 0x208, - 0x1103, 0x1161, 0x208, 0x1105, 0x1161, 0x208, 0x1106, 0x1161, - 0x208, 0x1107, 0x1161, 0x208, 0x1109, 0x1161, 0x208, 0x110b, - 0x1161, 0x208, 0x110c, 0x1161, 0x208, 0x110e, 0x1161, 0x208, - 0x110f, 0x1161, 0x208, 0x1110, 0x1161, 0x208, 0x1111, 0x1161, - 0x208, 0x1112, 0x1161, 0x508, 0x110e, 0x1161, 0x11b7, 0x1100, - 0x1169, 0x408, 0x110c, 0x116e, 0x110b, 0x1174, 0x208, 0x110b, - 0x116e, 0x108, 0x4e00, 0x108, 0x4e8c, 0x108, 0x4e09, 0x108, - 0x56db, 0x108, 0x4e94, 0x108, 0x516d, 0x108, 0x4e03, 0x108, - 0x516b, 0x108, 0x4e5d, 0x108, 0x5341, 0x108, 0x6708, 0x108, - 0x706b, 0x108, 0x6c34, 0x108, 0x6728, 0x108, 0x91d1, 0x108, - 0x571f, 0x108, 0x65e5, 0x108, 0x682a, 0x108, 0x6709, 0x108, - 0x793e, 0x108, 0x540d, 0x108, 0x7279, 0x108, 0x8ca1, 0x108, - 0x795d, 0x108, 0x52b4, 0x108, 0x79d8, 0x108, 0x7537, 0x108, - 0x5973, 0x108, 0x9069, 0x108, 0x512a, 0x108, 0x5370, 0x108, - 0x6ce8, 0x108, 0x9805, 0x108, 0x4f11, 0x108, 0x5199, 0x108, - 0x6b63, 0x108, 0x4e0a, 0x108, 0x4e2d, 0x108, 0x4e0b, 0x108, - 0x5de6, 0x108, 0x53f3, 0x108, 0x533b, 0x108, 0x5b97, 0x108, - 0x5b66, 0x108, 0x76e3, 0x108, 0x4f01, 0x108, 0x8cc7, 0x108, - 0x5354, 0x108, 0x591c, 0x208, 0x33, 0x36, 0x208, 0x33, - 0x37, 0x208, 0x33, 0x38, 0x208, 0x33, 0x39, 0x208, - 0x34, 0x30, 0x208, 0x34, 0x31, 0x208, 0x34, 0x32, - 0x208, 0x34, 0x33, 0x208, 0x34, 0x34, 0x208, 0x34, - 0x35, 0x208, 0x34, 0x36, 0x208, 0x34, 0x37, 0x208, - 0x34, 0x38, 0x208, 0x34, 0x39, 0x208, 0x35, 0x30, - 0x210, 0x31, 0x6708, 0x210, 0x32, 0x6708, 0x210, 0x33, - 0x6708, 0x210, 0x34, 0x6708, 0x210, 0x35, 0x6708, 0x210, - 0x36, 0x6708, 0x210, 0x37, 0x6708, 0x210, 0x38, 0x6708, - 0x210, 0x39, 0x6708, 0x310, 0x31, 0x30, 0x6708, 0x310, - 0x31, 0x31, 0x6708, 0x310, 0x31, 0x32, 0x6708, 0x20f, - 0x48, 0x67, 0x30f, 0x65, 0x72, 0x67, 0x20f, 0x65, - 0x56, 0x30f, 0x4c, 0x54, 0x44, 0x108, 0x30a2, 0x108, - 0x30a4, 0x108, 0x30a6, 0x108, 0x30a8, 0x108, 0x30aa, 0x108, - 0x30ab, 0x108, 0x30ad, 0x108, 0x30af, 0x108, 0x30b1, 0x108, - 0x30b3, 0x108, 0x30b5, 0x108, 0x30b7, 0x108, 0x30b9, 0x108, - 0x30bb, 0x108, 0x30bd, 0x108, 0x30bf, 0x108, 0x30c1, 0x108, - 0x30c4, 0x108, 0x30c6, 0x108, 0x30c8, 0x108, 0x30ca, 0x108, - 0x30cb, 0x108, 0x30cc, 0x108, 0x30cd, 0x108, 0x30ce, 0x108, - 0x30cf, 0x108, 0x30d2, 0x108, 0x30d5, 0x108, 0x30d8, 0x108, - 0x30db, 0x108, 0x30de, 0x108, 0x30df, 0x108, 0x30e0, 0x108, - 0x30e1, 0x108, 0x30e2, 0x108, 0x30e4, 0x108, 0x30e6, 0x108, - 0x30e8, 0x108, 0x30e9, 0x108, 0x30ea, 0x108, 0x30eb, 0x108, - 0x30ec, 0x108, 0x30ed, 0x108, 0x30ef, 0x108, 0x30f0, 0x108, - 0x30f1, 0x108, 0x30f2, 0x40f, 0x30a2, 0x30d1, 0x30fc, 0x30c8, - 0x40f, 0x30a2, 0x30eb, 0x30d5, 0x30a1, 0x40f, 0x30a2, 0x30f3, - 0x30da, 0x30a2, 0x30f, 0x30a2, 0x30fc, 0x30eb, 0x40f, 0x30a4, - 0x30cb, 0x30f3, 0x30b0, 0x30f, 0x30a4, 0x30f3, 0x30c1, 0x30f, - 0x30a6, 0x30a9, 0x30f3, 0x50f, 0x30a8, 0x30b9, 0x30af, 0x30fc, - 0x30c9, 0x40f, 0x30a8, 0x30fc, 0x30ab, 0x30fc, 0x30f, 0x30aa, - 0x30f3, 0x30b9, 0x30f, 0x30aa, 0x30fc, 0x30e0, 0x30f, 0x30ab, - 0x30a4, 0x30ea, 0x40f, 0x30ab, 0x30e9, 0x30c3, 0x30c8, 0x40f, - 0x30ab, 0x30ed, 0x30ea, 0x30fc, 0x30f, 0x30ac, 0x30ed, 0x30f3, - 0x30f, 0x30ac, 0x30f3, 0x30de, 0x20f, 0x30ae, 0x30ac, 0x30f, - 0x30ae, 0x30cb, 0x30fc, 0x40f, 0x30ad, 0x30e5, 0x30ea, 0x30fc, - 0x40f, 0x30ae, 0x30eb, 0x30c0, 0x30fc, 0x20f, 0x30ad, 0x30ed, - 0x50f, 0x30ad, 0x30ed, 0x30b0, 0x30e9, 0x30e0, 0x60f, 0x30ad, - 0x30ed, 0x30e1, 0x30fc, 0x30c8, 0x30eb, 0x50f, 0x30ad, 0x30ed, - 0x30ef, 0x30c3, 0x30c8, 0x30f, 0x30b0, 0x30e9, 0x30e0, 0x50f, - 0x30b0, 0x30e9, 0x30e0, 0x30c8, 0x30f3, 0x50f, 0x30af, 0x30eb, - 0x30bc, 0x30a4, 0x30ed, 0x40f, 0x30af, 0x30ed, 0x30fc, 0x30cd, - 0x30f, 0x30b1, 0x30fc, 0x30b9, 0x30f, 0x30b3, 0x30eb, 0x30ca, - 0x30f, 0x30b3, 0x30fc, 0x30dd, 0x40f, 0x30b5, 0x30a4, 0x30af, - 0x30eb, 0x50f, 0x30b5, 0x30f3, 0x30c1, 0x30fc, 0x30e0, 0x40f, - 0x30b7, 0x30ea, 0x30f3, 0x30b0, 0x30f, 0x30bb, 0x30f3, 0x30c1, - 0x30f, 0x30bb, 0x30f3, 0x30c8, 0x30f, 0x30c0, 0x30fc, 0x30b9, - 0x20f, 0x30c7, 0x30b7, 0x20f, 0x30c9, 0x30eb, 0x20f, 0x30c8, - 0x30f3, 0x20f, 0x30ca, 0x30ce, 0x30f, 0x30ce, 0x30c3, 0x30c8, - 0x30f, 0x30cf, 0x30a4, 0x30c4, 0x50f, 0x30d1, 0x30fc, 0x30bb, - 0x30f3, 0x30c8, 0x30f, 0x30d1, 0x30fc, 0x30c4, 0x40f, 0x30d0, - 0x30fc, 0x30ec, 0x30eb, 0x50f, 0x30d4, 0x30a2, 0x30b9, 0x30c8, - 0x30eb, 0x30f, 0x30d4, 0x30af, 0x30eb, 0x20f, 0x30d4, 0x30b3, - 0x20f, 0x30d3, 0x30eb, 0x50f, 0x30d5, 0x30a1, 0x30e9, 0x30c3, - 0x30c9, 0x40f, 0x30d5, 0x30a3, 0x30fc, 0x30c8, 0x50f, 0x30d6, - 0x30c3, 0x30b7, 0x30a7, 0x30eb, 0x30f, 0x30d5, 0x30e9, 0x30f3, - 0x50f, 0x30d8, 0x30af, 0x30bf, 0x30fc, 0x30eb, 0x20f, 0x30da, - 0x30bd, 0x30f, 0x30da, 0x30cb, 0x30d2, 0x30f, 0x30d8, 0x30eb, - 0x30c4, 0x30f, 0x30da, 0x30f3, 0x30b9, 0x30f, 0x30da, 0x30fc, - 0x30b8, 0x30f, 0x30d9, 0x30fc, 0x30bf, 0x40f, 0x30dd, 0x30a4, - 0x30f3, 0x30c8, 0x30f, 0x30dc, 0x30eb, 0x30c8, 0x20f, 0x30db, - 0x30f3, 0x30f, 0x30dd, 0x30f3, 0x30c9, 0x30f, 0x30db, 0x30fc, - 0x30eb, 0x30f, 0x30db, 0x30fc, 0x30f3, 0x40f, 0x30de, 0x30a4, - 0x30af, 0x30ed, 0x30f, 0x30de, 0x30a4, 0x30eb, 0x30f, 0x30de, - 0x30c3, 0x30cf, 0x30f, 0x30de, 0x30eb, 0x30af, 0x50f, 0x30de, - 0x30f3, 0x30b7, 0x30e7, 0x30f3, 0x40f, 0x30df, 0x30af, 0x30ed, - 0x30f3, 0x20f, 0x30df, 0x30ea, 0x50f, 0x30df, 0x30ea, 0x30d0, - 0x30fc, 0x30eb, 0x20f, 0x30e1, 0x30ac, 0x40f, 0x30e1, 0x30ac, - 0x30c8, 0x30f3, 0x40f, 0x30e1, 0x30fc, 0x30c8, 0x30eb, 0x30f, - 0x30e4, 0x30fc, 0x30c9, 0x30f, 0x30e4, 0x30fc, 0x30eb, 0x30f, - 0x30e6, 0x30a2, 0x30f3, 0x40f, 0x30ea, 0x30c3, 0x30c8, 0x30eb, - 0x20f, 0x30ea, 0x30e9, 0x30f, 0x30eb, 0x30d4, 0x30fc, 0x40f, - 0x30eb, 0x30fc, 0x30d6, 0x30eb, 0x20f, 0x30ec, 0x30e0, 0x50f, - 0x30ec, 0x30f3, 0x30c8, 0x30b2, 0x30f3, 0x30f, 0x30ef, 0x30c3, - 0x30c8, 0x210, 0x30, 0x70b9, 0x210, 0x31, 0x70b9, 0x210, - 0x32, 0x70b9, 0x210, 0x33, 0x70b9, 0x210, 0x34, 0x70b9, - 0x210, 0x35, 0x70b9, 0x210, 0x36, 0x70b9, 0x210, 0x37, - 0x70b9, 0x210, 0x38, 0x70b9, 0x210, 0x39, 0x70b9, 0x310, - 0x31, 0x30, 0x70b9, 0x310, 0x31, 0x31, 0x70b9, 0x310, - 0x31, 0x32, 0x70b9, 0x310, 0x31, 0x33, 0x70b9, 0x310, - 0x31, 0x34, 0x70b9, 0x310, 0x31, 0x35, 0x70b9, 0x310, - 0x31, 0x36, 0x70b9, 0x310, 0x31, 0x37, 0x70b9, 0x310, - 0x31, 0x38, 0x70b9, 0x310, 0x31, 0x39, 0x70b9, 0x310, - 0x32, 0x30, 0x70b9, 0x310, 0x32, 0x31, 0x70b9, 0x310, - 0x32, 0x32, 0x70b9, 0x310, 0x32, 0x33, 0x70b9, 0x310, - 0x32, 0x34, 0x70b9, 0x30f, 0x68, 0x50, 0x61, 0x20f, - 0x64, 0x61, 0x20f, 0x41, 0x55, 0x30f, 0x62, 0x61, - 0x72, 0x20f, 0x6f, 0x56, 0x20f, 0x70, 0x63, 0x20f, - 0x64, 0x6d, 0x30f, 0x64, 0x6d, 0xb2, 0x30f, 0x64, - 0x6d, 0xb3, 0x20f, 0x49, 0x55, 0x20f, 0x5e73, 0x6210, - 0x20f, 0x662d, 0x548c, 0x20f, 0x5927, 0x6b63, 0x20f, 0x660e, - 0x6cbb, 0x40f, 0x682a, 0x5f0f, 0x4f1a, 0x793e, 0x20f, 0x70, - 0x41, 0x20f, 0x6e, 0x41, 0x20f, 0x3bc, 0x41, 0x20f, - 0x6d, 0x41, 0x20f, 0x6b, 0x41, 0x20f, 0x4b, 0x42, - 0x20f, 0x4d, 0x42, 0x20f, 0x47, 0x42, 0x30f, 0x63, - 0x61, 0x6c, 0x40f, 0x6b, 0x63, 0x61, 0x6c, 0x20f, - 0x70, 0x46, 0x20f, 0x6e, 0x46, 0x20f, 0x3bc, 0x46, - 0x20f, 0x3bc, 0x67, 0x20f, 0x6d, 0x67, 0x20f, 0x6b, - 0x67, 0x20f, 0x48, 0x7a, 0x30f, 0x6b, 0x48, 0x7a, - 0x30f, 0x4d, 0x48, 0x7a, 0x30f, 0x47, 0x48, 0x7a, - 0x30f, 0x54, 0x48, 0x7a, 0x20f, 0x3bc, 0x2113, 0x20f, - 0x6d, 0x2113, 0x20f, 0x64, 0x2113, 0x20f, 0x6b, 0x2113, - 0x20f, 0x66, 0x6d, 0x20f, 0x6e, 0x6d, 0x20f, 0x3bc, - 0x6d, 0x20f, 0x6d, 0x6d, 0x20f, 0x63, 0x6d, 0x20f, - 0x6b, 0x6d, 0x30f, 0x6d, 0x6d, 0xb2, 0x30f, 0x63, - 0x6d, 0xb2, 0x20f, 0x6d, 0xb2, 0x30f, 0x6b, 0x6d, - 0xb2, 0x30f, 0x6d, 0x6d, 0xb3, 0x30f, 0x63, 0x6d, - 0xb3, 0x20f, 0x6d, 0xb3, 0x30f, 0x6b, 0x6d, 0xb3, - 0x30f, 0x6d, 0x2215, 0x73, 0x40f, 0x6d, 0x2215, 0x73, - 0xb2, 0x20f, 0x50, 0x61, 0x30f, 0x6b, 0x50, 0x61, - 0x30f, 0x4d, 0x50, 0x61, 0x30f, 0x47, 0x50, 0x61, - 0x30f, 0x72, 0x61, 0x64, 0x50f, 0x72, 0x61, 0x64, - 0x2215, 0x73, 0x60f, 0x72, 0x61, 0x64, 0x2215, 0x73, - 0xb2, 0x20f, 0x70, 0x73, 0x20f, 0x6e, 0x73, 0x20f, - 0x3bc, 0x73, 0x20f, 0x6d, 0x73, 0x20f, 0x70, 0x56, - 0x20f, 0x6e, 0x56, 0x20f, 0x3bc, 0x56, 0x20f, 0x6d, - 0x56, 0x20f, 0x6b, 0x56, 0x20f, 0x4d, 0x56, 0x20f, - 0x70, 0x57, 0x20f, 0x6e, 0x57, 0x20f, 0x3bc, 0x57, - 0x20f, 0x6d, 0x57, 0x20f, 0x6b, 0x57, 0x20f, 0x4d, - 0x57, 0x20f, 0x6b, 0x3a9, 0x20f, 0x4d, 0x3a9, 0x40f, - 0x61, 0x2e, 0x6d, 0x2e, 0x20f, 0x42, 0x71, 0x20f, - 0x63, 0x63, 0x20f, 0x63, 0x64, 0x40f, 0x43, 0x2215, - 0x6b, 0x67, 0x30f, 0x43, 0x6f, 0x2e, 0x20f, 0x64, - 0x42, 0x20f, 0x47, 0x79, 0x20f, 0x68, 0x61, 0x20f, - 0x48, 0x50, 0x20f, 0x69, 0x6e, 0x20f, 0x4b, 0x4b, - 0x20f, 0x4b, 0x4d, 0x20f, 0x6b, 0x74, 0x20f, 0x6c, - 0x6d, 0x20f, 0x6c, 0x6e, 0x30f, 0x6c, 0x6f, 0x67, - 0x20f, 0x6c, 0x78, 0x20f, 0x6d, 0x62, 0x30f, 0x6d, - 0x69, 0x6c, 0x30f, 0x6d, 0x6f, 0x6c, 0x20f, 0x50, - 0x48, 0x40f, 0x70, 0x2e, 0x6d, 0x2e, 0x30f, 0x50, - 0x50, 0x4d, 0x20f, 0x50, 0x52, 0x20f, 0x73, 0x72, - 0x20f, 0x53, 0x76, 0x20f, 0x57, 0x62, 0x30f, 0x56, - 0x2215, 0x6d, 0x30f, 0x41, 0x2215, 0x6d, 0x210, 0x31, - 0x65e5, 0x210, 0x32, 0x65e5, 0x210, 0x33, 0x65e5, 0x210, - 0x34, 0x65e5, 0x210, 0x35, 0x65e5, 0x210, 0x36, 0x65e5, - 0x210, 0x37, 0x65e5, 0x210, 0x38, 0x65e5, 0x210, 0x39, - 0x65e5, 0x310, 0x31, 0x30, 0x65e5, 0x310, 0x31, 0x31, - 0x65e5, 0x310, 0x31, 0x32, 0x65e5, 0x310, 0x31, 0x33, - 0x65e5, 0x310, 0x31, 0x34, 0x65e5, 0x310, 0x31, 0x35, - 0x65e5, 0x310, 0x31, 0x36, 0x65e5, 0x310, 0x31, 0x37, - 0x65e5, 0x310, 0x31, 0x38, 0x65e5, 0x310, 0x31, 0x39, - 0x65e5, 0x310, 0x32, 0x30, 0x65e5, 0x310, 0x32, 0x31, - 0x65e5, 0x310, 0x32, 0x32, 0x65e5, 0x310, 0x32, 0x33, - 0x65e5, 0x310, 0x32, 0x34, 0x65e5, 0x310, 0x32, 0x35, - 0x65e5, 0x310, 0x32, 0x36, 0x65e5, 0x310, 0x32, 0x37, - 0x65e5, 0x310, 0x32, 0x38, 0x65e5, 0x310, 0x32, 0x39, - 0x65e5, 0x310, 0x33, 0x30, 0x65e5, 0x310, 0x33, 0x31, - 0x65e5, 0x30f, 0x67, 0x61, 0x6c, 0x109, 0xa76f, 0x109, - 0x126, 0x109, 0x153, 0x101, 0x8c48, 0x101, 0x66f4, 0x101, - 0x8eca, 0x101, 0x8cc8, 0x101, 0x6ed1, 0x101, 0x4e32, 0x101, - 0x53e5, 0x101, 0x9f9c, 0x101, 0x9f9c, 0x101, 0x5951, 0x101, - 0x91d1, 0x101, 0x5587, 0x101, 0x5948, 0x101, 0x61f6, 0x101, - 0x7669, 0x101, 0x7f85, 0x101, 0x863f, 0x101, 0x87ba, 0x101, - 0x88f8, 0x101, 0x908f, 0x101, 0x6a02, 0x101, 0x6d1b, 0x101, - 0x70d9, 0x101, 0x73de, 0x101, 0x843d, 0x101, 0x916a, 0x101, - 0x99f1, 0x101, 0x4e82, 0x101, 0x5375, 0x101, 0x6b04, 0x101, - 0x721b, 0x101, 0x862d, 0x101, 0x9e1e, 0x101, 0x5d50, 0x101, - 0x6feb, 0x101, 0x85cd, 0x101, 0x8964, 0x101, 0x62c9, 0x101, - 0x81d8, 0x101, 0x881f, 0x101, 0x5eca, 0x101, 0x6717, 0x101, - 0x6d6a, 0x101, 0x72fc, 0x101, 0x90ce, 0x101, 0x4f86, 0x101, - 0x51b7, 0x101, 0x52de, 0x101, 0x64c4, 0x101, 0x6ad3, 0x101, - 0x7210, 0x101, 0x76e7, 0x101, 0x8001, 0x101, 0x8606, 0x101, - 0x865c, 0x101, 0x8def, 0x101, 0x9732, 0x101, 0x9b6f, 0x101, - 0x9dfa, 0x101, 0x788c, 0x101, 0x797f, 0x101, 0x7da0, 0x101, - 0x83c9, 0x101, 0x9304, 0x101, 0x9e7f, 0x101, 0x8ad6, 0x101, - 0x58df, 0x101, 0x5f04, 0x101, 0x7c60, 0x101, 0x807e, 0x101, - 0x7262, 0x101, 0x78ca, 0x101, 0x8cc2, 0x101, 0x96f7, 0x101, - 0x58d8, 0x101, 0x5c62, 0x101, 0x6a13, 0x101, 0x6dda, 0x101, - 0x6f0f, 0x101, 0x7d2f, 0x101, 0x7e37, 0x101, 0x964b, 0x101, - 0x52d2, 0x101, 0x808b, 0x101, 0x51dc, 0x101, 0x51cc, 0x101, - 0x7a1c, 0x101, 0x7dbe, 0x101, 0x83f1, 0x101, 0x9675, 0x101, - 0x8b80, 0x101, 0x62cf, 0x101, 0x6a02, 0x101, 0x8afe, 0x101, - 0x4e39, 0x101, 0x5be7, 0x101, 0x6012, 0x101, 0x7387, 0x101, - 0x7570, 0x101, 0x5317, 0x101, 0x78fb, 0x101, 0x4fbf, 0x101, - 0x5fa9, 0x101, 0x4e0d, 0x101, 0x6ccc, 0x101, 0x6578, 0x101, - 0x7d22, 0x101, 0x53c3, 0x101, 0x585e, 0x101, 0x7701, 0x101, - 0x8449, 0x101, 0x8aaa, 0x101, 0x6bba, 0x101, 0x8fb0, 0x101, - 0x6c88, 0x101, 0x62fe, 0x101, 0x82e5, 0x101, 0x63a0, 0x101, - 0x7565, 0x101, 0x4eae, 0x101, 0x5169, 0x101, 0x51c9, 0x101, - 0x6881, 0x101, 0x7ce7, 0x101, 0x826f, 0x101, 0x8ad2, 0x101, - 0x91cf, 0x101, 0x52f5, 0x101, 0x5442, 0x101, 0x5973, 0x101, - 0x5eec, 0x101, 0x65c5, 0x101, 0x6ffe, 0x101, 0x792a, 0x101, - 0x95ad, 0x101, 0x9a6a, 0x101, 0x9e97, 0x101, 0x9ece, 0x101, - 0x529b, 0x101, 0x66c6, 0x101, 0x6b77, 0x101, 0x8f62, 0x101, - 0x5e74, 0x101, 0x6190, 0x101, 0x6200, 0x101, 0x649a, 0x101, - 0x6f23, 0x101, 0x7149, 0x101, 0x7489, 0x101, 0x79ca, 0x101, - 0x7df4, 0x101, 0x806f, 0x101, 0x8f26, 0x101, 0x84ee, 0x101, - 0x9023, 0x101, 0x934a, 0x101, 0x5217, 0x101, 0x52a3, 0x101, - 0x54bd, 0x101, 0x70c8, 0x101, 0x88c2, 0x101, 0x8aaa, 0x101, - 0x5ec9, 0x101, 0x5ff5, 0x101, 0x637b, 0x101, 0x6bae, 0x101, - 0x7c3e, 0x101, 0x7375, 0x101, 0x4ee4, 0x101, 0x56f9, 0x101, - 0x5be7, 0x101, 0x5dba, 0x101, 0x601c, 0x101, 0x73b2, 0x101, - 0x7469, 0x101, 0x7f9a, 0x101, 0x8046, 0x101, 0x9234, 0x101, - 0x96f6, 0x101, 0x9748, 0x101, 0x9818, 0x101, 0x4f8b, 0x101, - 0x79ae, 0x101, 0x91b4, 0x101, 0x96b8, 0x101, 0x60e1, 0x101, - 0x4e86, 0x101, 0x50da, 0x101, 0x5bee, 0x101, 0x5c3f, 0x101, - 0x6599, 0x101, 0x6a02, 0x101, 0x71ce, 0x101, 0x7642, 0x101, - 0x84fc, 0x101, 0x907c, 0x101, 0x9f8d, 0x101, 0x6688, 0x101, - 0x962e, 0x101, 0x5289, 0x101, 0x677b, 0x101, 0x67f3, 0x101, - 0x6d41, 0x101, 0x6e9c, 0x101, 0x7409, 0x101, 0x7559, 0x101, - 0x786b, 0x101, 0x7d10, 0x101, 0x985e, 0x101, 0x516d, 0x101, - 0x622e, 0x101, 0x9678, 0x101, 0x502b, 0x101, 0x5d19, 0x101, - 0x6dea, 0x101, 0x8f2a, 0x101, 0x5f8b, 0x101, 0x6144, 0x101, - 0x6817, 0x101, 0x7387, 0x101, 0x9686, 0x101, 0x5229, 0x101, - 0x540f, 0x101, 0x5c65, 0x101, 0x6613, 0x101, 0x674e, 0x101, - 0x68a8, 0x101, 0x6ce5, 0x101, 0x7406, 0x101, 0x75e2, 0x101, - 0x7f79, 0x101, 0x88cf, 0x101, 0x88e1, 0x101, 0x91cc, 0x101, - 0x96e2, 0x101, 0x533f, 0x101, 0x6eba, 0x101, 0x541d, 0x101, - 0x71d0, 0x101, 0x7498, 0x101, 0x85fa, 0x101, 0x96a3, 0x101, - 0x9c57, 0x101, 0x9e9f, 0x101, 0x6797, 0x101, 0x6dcb, 0x101, - 0x81e8, 0x101, 0x7acb, 0x101, 0x7b20, 0x101, 0x7c92, 0x101, - 0x72c0, 0x101, 0x7099, 0x101, 0x8b58, 0x101, 0x4ec0, 0x101, - 0x8336, 0x101, 0x523a, 0x101, 0x5207, 0x101, 0x5ea6, 0x101, - 0x62d3, 0x101, 0x7cd6, 0x101, 0x5b85, 0x101, 0x6d1e, 0x101, - 0x66b4, 0x101, 0x8f3b, 0x101, 0x884c, 0x101, 0x964d, 0x101, - 0x898b, 0x101, 0x5ed3, 0x101, 0x5140, 0x101, 0x55c0, 0x101, - 0x585a, 0x101, 0x6674, 0x101, 0x51de, 0x101, 0x732a, 0x101, - 0x76ca, 0x101, 0x793c, 0x101, 0x795e, 0x101, 0x7965, 0x101, - 0x798f, 0x101, 0x9756, 0x101, 0x7cbe, 0x101, 0x7fbd, 0x101, - 0x8612, 0x101, 0x8af8, 0x101, 0x9038, 0x101, 0x90fd, 0x101, - 0x98ef, 0x101, 0x98fc, 0x101, 0x9928, 0x101, 0x9db4, 0x101, - 0x90de, 0x101, 0x96b7, 0x101, 0x4fae, 0x101, 0x50e7, 0x101, - 0x514d, 0x101, 0x52c9, 0x101, 0x52e4, 0x101, 0x5351, 0x101, - 0x559d, 0x101, 0x5606, 0x101, 0x5668, 0x101, 0x5840, 0x101, - 0x58a8, 0x101, 0x5c64, 0x101, 0x5c6e, 0x101, 0x6094, 0x101, - 0x6168, 0x101, 0x618e, 0x101, 0x61f2, 0x101, 0x654f, 0x101, - 0x65e2, 0x101, 0x6691, 0x101, 0x6885, 0x101, 0x6d77, 0x101, - 0x6e1a, 0x101, 0x6f22, 0x101, 0x716e, 0x101, 0x722b, 0x101, - 0x7422, 0x101, 0x7891, 0x101, 0x793e, 0x101, 0x7949, 0x101, - 0x7948, 0x101, 0x7950, 0x101, 0x7956, 0x101, 0x795d, 0x101, - 0x798d, 0x101, 0x798e, 0x101, 0x7a40, 0x101, 0x7a81, 0x101, - 0x7bc0, 0x101, 0x7df4, 0x101, 0x7e09, 0x101, 0x7e41, 0x101, - 0x7f72, 0x101, 0x8005, 0x101, 0x81ed, 0x101, 0x8279, 0x101, - 0x8279, 0x101, 0x8457, 0x101, 0x8910, 0x101, 0x8996, 0x101, - 0x8b01, 0x101, 0x8b39, 0x101, 0x8cd3, 0x101, 0x8d08, 0x101, - 0x8fb6, 0x101, 0x9038, 0x101, 0x96e3, 0x101, 0x97ff, 0x101, - 0x983b, 0x101, 0x6075, 0x201, 0xd850, 0xdeee, 0x101, 0x8218, - 0x101, 0x4e26, 0x101, 0x51b5, 0x101, 0x5168, 0x101, 0x4f80, - 0x101, 0x5145, 0x101, 0x5180, 0x101, 0x52c7, 0x101, 0x52fa, - 0x101, 0x559d, 0x101, 0x5555, 0x101, 0x5599, 0x101, 0x55e2, - 0x101, 0x585a, 0x101, 0x58b3, 0x101, 0x5944, 0x101, 0x5954, - 0x101, 0x5a62, 0x101, 0x5b28, 0x101, 0x5ed2, 0x101, 0x5ed9, - 0x101, 0x5f69, 0x101, 0x5fad, 0x101, 0x60d8, 0x101, 0x614e, - 0x101, 0x6108, 0x101, 0x618e, 0x101, 0x6160, 0x101, 0x61f2, - 0x101, 0x6234, 0x101, 0x63c4, 0x101, 0x641c, 0x101, 0x6452, - 0x101, 0x6556, 0x101, 0x6674, 0x101, 0x6717, 0x101, 0x671b, - 0x101, 0x6756, 0x101, 0x6b79, 0x101, 0x6bba, 0x101, 0x6d41, - 0x101, 0x6edb, 0x101, 0x6ecb, 0x101, 0x6f22, 0x101, 0x701e, - 0x101, 0x716e, 0x101, 0x77a7, 0x101, 0x7235, 0x101, 0x72af, - 0x101, 0x732a, 0x101, 0x7471, 0x101, 0x7506, 0x101, 0x753b, - 0x101, 0x761d, 0x101, 0x761f, 0x101, 0x76ca, 0x101, 0x76db, - 0x101, 0x76f4, 0x101, 0x774a, 0x101, 0x7740, 0x101, 0x78cc, - 0x101, 0x7ab1, 0x101, 0x7bc0, 0x101, 0x7c7b, 0x101, 0x7d5b, - 0x101, 0x7df4, 0x101, 0x7f3e, 0x101, 0x8005, 0x101, 0x8352, - 0x101, 0x83ef, 0x101, 0x8779, 0x101, 0x8941, 0x101, 0x8986, - 0x101, 0x8996, 0x101, 0x8abf, 0x101, 0x8af8, 0x101, 0x8acb, - 0x101, 0x8b01, 0x101, 0x8afe, 0x101, 0x8aed, 0x101, 0x8b39, - 0x101, 0x8b8a, 0x101, 0x8d08, 0x101, 0x8f38, 0x101, 0x9072, - 0x101, 0x9199, 0x101, 0x9276, 0x101, 0x967c, 0x101, 0x96e3, - 0x101, 0x9756, 0x101, 0x97db, 0x101, 0x97ff, 0x101, 0x980b, - 0x101, 0x983b, 0x101, 0x9b12, 0x101, 0x9f9c, 0x201, 0xd84a, - 0xdc4a, 0x201, 0xd84a, 0xdc44, 0x201, 0xd84c, 0xdfd5, 0x101, - 0x3b9d, 0x101, 0x4018, 0x101, 0x4039, 0x201, 0xd854, 0xde49, - 0x201, 0xd857, 0xdcd0, 0x201, 0xd85f, 0xded3, 0x101, 0x9f43, - 0x101, 0x9f8e, 0x210, 0x66, 0x66, 0x210, 0x66, 0x69, - 0x210, 0x66, 0x6c, 0x310, 0x66, 0x66, 0x69, 0x310, - 0x66, 0x66, 0x6c, 0x210, 0x17f, 0x74, 0x210, 0x73, - 0x74, 0x210, 0x574, 0x576, 0x210, 0x574, 0x565, 0x210, - 0x574, 0x56b, 0x210, 0x57e, 0x576, 0x210, 0x574, 0x56d, - 0x201, 0x5d9, 0x5b4, 0x201, 0x5f2, 0x5b7, 0x102, 0x5e2, - 0x102, 0x5d0, 0x102, 0x5d3, 0x102, 0x5d4, 0x102, 0x5db, - 0x102, 0x5dc, 0x102, 0x5dd, 0x102, 0x5e8, 0x102, 0x5ea, - 0x102, 0x2b, 0x201, 0x5e9, 0x5c1, 0x201, 0x5e9, 0x5c2, - 0x201, 0xfb49, 0x5c1, 0x201, 0xfb49, 0x5c2, 0x201, 0x5d0, - 0x5b7, 0x201, 0x5d0, 0x5b8, 0x201, 0x5d0, 0x5bc, 0x201, - 0x5d1, 0x5bc, 0x201, 0x5d2, 0x5bc, 0x201, 0x5d3, 0x5bc, - 0x201, 0x5d4, 0x5bc, 0x201, 0x5d5, 0x5bc, 0x201, 0x5d6, - 0x5bc, 0x201, 0x5d8, 0x5bc, 0x201, 0x5d9, 0x5bc, 0x201, - 0x5da, 0x5bc, 0x201, 0x5db, 0x5bc, 0x201, 0x5dc, 0x5bc, - 0x201, 0x5de, 0x5bc, 0x201, 0x5e0, 0x5bc, 0x201, 0x5e1, - 0x5bc, 0x201, 0x5e3, 0x5bc, 0x201, 0x5e4, 0x5bc, 0x201, - 0x5e6, 0x5bc, 0x201, 0x5e7, 0x5bc, 0x201, 0x5e8, 0x5bc, - 0x201, 0x5e9, 0x5bc, 0x201, 0x5ea, 0x5bc, 0x201, 0x5d5, - 0x5b9, 0x201, 0x5d1, 0x5bf, 0x201, 0x5db, 0x5bf, 0x201, - 0x5e4, 0x5bf, 0x210, 0x5d0, 0x5dc, 0x107, 0x671, 0x106, - 0x671, 0x107, 0x67b, 0x106, 0x67b, 0x104, 0x67b, 0x105, - 0x67b, 0x107, 0x67e, 0x106, 0x67e, 0x104, 0x67e, 0x105, - 0x67e, 0x107, 0x680, 0x106, 0x680, 0x104, 0x680, 0x105, - 0x680, 0x107, 0x67a, 0x106, 0x67a, 0x104, 0x67a, 0x105, - 0x67a, 0x107, 0x67f, 0x106, 0x67f, 0x104, 0x67f, 0x105, - 0x67f, 0x107, 0x679, 0x106, 0x679, 0x104, 0x679, 0x105, - 0x679, 0x107, 0x6a4, 0x106, 0x6a4, 0x104, 0x6a4, 0x105, - 0x6a4, 0x107, 0x6a6, 0x106, 0x6a6, 0x104, 0x6a6, 0x105, - 0x6a6, 0x107, 0x684, 0x106, 0x684, 0x104, 0x684, 0x105, - 0x684, 0x107, 0x683, 0x106, 0x683, 0x104, 0x683, 0x105, - 0x683, 0x107, 0x686, 0x106, 0x686, 0x104, 0x686, 0x105, - 0x686, 0x107, 0x687, 0x106, 0x687, 0x104, 0x687, 0x105, - 0x687, 0x107, 0x68d, 0x106, 0x68d, 0x107, 0x68c, 0x106, - 0x68c, 0x107, 0x68e, 0x106, 0x68e, 0x107, 0x688, 0x106, - 0x688, 0x107, 0x698, 0x106, 0x698, 0x107, 0x691, 0x106, - 0x691, 0x107, 0x6a9, 0x106, 0x6a9, 0x104, 0x6a9, 0x105, - 0x6a9, 0x107, 0x6af, 0x106, 0x6af, 0x104, 0x6af, 0x105, - 0x6af, 0x107, 0x6b3, 0x106, 0x6b3, 0x104, 0x6b3, 0x105, - 0x6b3, 0x107, 0x6b1, 0x106, 0x6b1, 0x104, 0x6b1, 0x105, - 0x6b1, 0x107, 0x6ba, 0x106, 0x6ba, 0x107, 0x6bb, 0x106, - 0x6bb, 0x104, 0x6bb, 0x105, 0x6bb, 0x107, 0x6c0, 0x106, - 0x6c0, 0x107, 0x6c1, 0x106, 0x6c1, 0x104, 0x6c1, 0x105, - 0x6c1, 0x107, 0x6be, 0x106, 0x6be, 0x104, 0x6be, 0x105, - 0x6be, 0x107, 0x6d2, 0x106, 0x6d2, 0x107, 0x6d3, 0x106, - 0x6d3, 0x107, 0x6ad, 0x106, 0x6ad, 0x104, 0x6ad, 0x105, - 0x6ad, 0x107, 0x6c7, 0x106, 0x6c7, 0x107, 0x6c6, 0x106, - 0x6c6, 0x107, 0x6c8, 0x106, 0x6c8, 0x107, 0x677, 0x107, - 0x6cb, 0x106, 0x6cb, 0x107, 0x6c5, 0x106, 0x6c5, 0x107, - 0x6c9, 0x106, 0x6c9, 0x107, 0x6d0, 0x106, 0x6d0, 0x104, - 0x6d0, 0x105, 0x6d0, 0x104, 0x649, 0x105, 0x649, 0x207, - 0x626, 0x627, 0x206, 0x626, 0x627, 0x207, 0x626, 0x6d5, - 0x206, 0x626, 0x6d5, 0x207, 0x626, 0x648, 0x206, 0x626, - 0x648, 0x207, 0x626, 0x6c7, 0x206, 0x626, 0x6c7, 0x207, - 0x626, 0x6c6, 0x206, 0x626, 0x6c6, 0x207, 0x626, 0x6c8, - 0x206, 0x626, 0x6c8, 0x207, 0x626, 0x6d0, 0x206, 0x626, - 0x6d0, 0x204, 0x626, 0x6d0, 0x207, 0x626, 0x649, 0x206, - 0x626, 0x649, 0x204, 0x626, 0x649, 0x107, 0x6cc, 0x106, - 0x6cc, 0x104, 0x6cc, 0x105, 0x6cc, 0x207, 0x626, 0x62c, - 0x207, 0x626, 0x62d, 0x207, 0x626, 0x645, 0x207, 0x626, - 0x649, 0x207, 0x626, 0x64a, 0x207, 0x628, 0x62c, 0x207, - 0x628, 0x62d, 0x207, 0x628, 0x62e, 0x207, 0x628, 0x645, - 0x207, 0x628, 0x649, 0x207, 0x628, 0x64a, 0x207, 0x62a, - 0x62c, 0x207, 0x62a, 0x62d, 0x207, 0x62a, 0x62e, 0x207, - 0x62a, 0x645, 0x207, 0x62a, 0x649, 0x207, 0x62a, 0x64a, - 0x207, 0x62b, 0x62c, 0x207, 0x62b, 0x645, 0x207, 0x62b, - 0x649, 0x207, 0x62b, 0x64a, 0x207, 0x62c, 0x62d, 0x207, - 0x62c, 0x645, 0x207, 0x62d, 0x62c, 0x207, 0x62d, 0x645, - 0x207, 0x62e, 0x62c, 0x207, 0x62e, 0x62d, 0x207, 0x62e, - 0x645, 0x207, 0x633, 0x62c, 0x207, 0x633, 0x62d, 0x207, - 0x633, 0x62e, 0x207, 0x633, 0x645, 0x207, 0x635, 0x62d, - 0x207, 0x635, 0x645, 0x207, 0x636, 0x62c, 0x207, 0x636, - 0x62d, 0x207, 0x636, 0x62e, 0x207, 0x636, 0x645, 0x207, - 0x637, 0x62d, 0x207, 0x637, 0x645, 0x207, 0x638, 0x645, - 0x207, 0x639, 0x62c, 0x207, 0x639, 0x645, 0x207, 0x63a, - 0x62c, 0x207, 0x63a, 0x645, 0x207, 0x641, 0x62c, 0x207, - 0x641, 0x62d, 0x207, 0x641, 0x62e, 0x207, 0x641, 0x645, - 0x207, 0x641, 0x649, 0x207, 0x641, 0x64a, 0x207, 0x642, - 0x62d, 0x207, 0x642, 0x645, 0x207, 0x642, 0x649, 0x207, - 0x642, 0x64a, 0x207, 0x643, 0x627, 0x207, 0x643, 0x62c, - 0x207, 0x643, 0x62d, 0x207, 0x643, 0x62e, 0x207, 0x643, - 0x644, 0x207, 0x643, 0x645, 0x207, 0x643, 0x649, 0x207, - 0x643, 0x64a, 0x207, 0x644, 0x62c, 0x207, 0x644, 0x62d, - 0x207, 0x644, 0x62e, 0x207, 0x644, 0x645, 0x207, 0x644, - 0x649, 0x207, 0x644, 0x64a, 0x207, 0x645, 0x62c, 0x207, - 0x645, 0x62d, 0x207, 0x645, 0x62e, 0x207, 0x645, 0x645, - 0x207, 0x645, 0x649, 0x207, 0x645, 0x64a, 0x207, 0x646, - 0x62c, 0x207, 0x646, 0x62d, 0x207, 0x646, 0x62e, 0x207, - 0x646, 0x645, 0x207, 0x646, 0x649, 0x207, 0x646, 0x64a, - 0x207, 0x647, 0x62c, 0x207, 0x647, 0x645, 0x207, 0x647, - 0x649, 0x207, 0x647, 0x64a, 0x207, 0x64a, 0x62c, 0x207, - 0x64a, 0x62d, 0x207, 0x64a, 0x62e, 0x207, 0x64a, 0x645, - 0x207, 0x64a, 0x649, 0x207, 0x64a, 0x64a, 0x207, 0x630, - 0x670, 0x207, 0x631, 0x670, 0x207, 0x649, 0x670, 0x307, - 0x20, 0x64c, 0x651, 0x307, 0x20, 0x64d, 0x651, 0x307, - 0x20, 0x64e, 0x651, 0x307, 0x20, 0x64f, 0x651, 0x307, - 0x20, 0x650, 0x651, 0x307, 0x20, 0x651, 0x670, 0x206, - 0x626, 0x631, 0x206, 0x626, 0x632, 0x206, 0x626, 0x645, - 0x206, 0x626, 0x646, 0x206, 0x626, 0x649, 0x206, 0x626, - 0x64a, 0x206, 0x628, 0x631, 0x206, 0x628, 0x632, 0x206, - 0x628, 0x645, 0x206, 0x628, 0x646, 0x206, 0x628, 0x649, - 0x206, 0x628, 0x64a, 0x206, 0x62a, 0x631, 0x206, 0x62a, - 0x632, 0x206, 0x62a, 0x645, 0x206, 0x62a, 0x646, 0x206, - 0x62a, 0x649, 0x206, 0x62a, 0x64a, 0x206, 0x62b, 0x631, - 0x206, 0x62b, 0x632, 0x206, 0x62b, 0x645, 0x206, 0x62b, - 0x646, 0x206, 0x62b, 0x649, 0x206, 0x62b, 0x64a, 0x206, - 0x641, 0x649, 0x206, 0x641, 0x64a, 0x206, 0x642, 0x649, - 0x206, 0x642, 0x64a, 0x206, 0x643, 0x627, 0x206, 0x643, - 0x644, 0x206, 0x643, 0x645, 0x206, 0x643, 0x649, 0x206, - 0x643, 0x64a, 0x206, 0x644, 0x645, 0x206, 0x644, 0x649, - 0x206, 0x644, 0x64a, 0x206, 0x645, 0x627, 0x206, 0x645, - 0x645, 0x206, 0x646, 0x631, 0x206, 0x646, 0x632, 0x206, - 0x646, 0x645, 0x206, 0x646, 0x646, 0x206, 0x646, 0x649, - 0x206, 0x646, 0x64a, 0x206, 0x649, 0x670, 0x206, 0x64a, - 0x631, 0x206, 0x64a, 0x632, 0x206, 0x64a, 0x645, 0x206, - 0x64a, 0x646, 0x206, 0x64a, 0x649, 0x206, 0x64a, 0x64a, - 0x204, 0x626, 0x62c, 0x204, 0x626, 0x62d, 0x204, 0x626, - 0x62e, 0x204, 0x626, 0x645, 0x204, 0x626, 0x647, 0x204, - 0x628, 0x62c, 0x204, 0x628, 0x62d, 0x204, 0x628, 0x62e, - 0x204, 0x628, 0x645, 0x204, 0x628, 0x647, 0x204, 0x62a, - 0x62c, 0x204, 0x62a, 0x62d, 0x204, 0x62a, 0x62e, 0x204, - 0x62a, 0x645, 0x204, 0x62a, 0x647, 0x204, 0x62b, 0x645, - 0x204, 0x62c, 0x62d, 0x204, 0x62c, 0x645, 0x204, 0x62d, - 0x62c, 0x204, 0x62d, 0x645, 0x204, 0x62e, 0x62c, 0x204, - 0x62e, 0x645, 0x204, 0x633, 0x62c, 0x204, 0x633, 0x62d, - 0x204, 0x633, 0x62e, 0x204, 0x633, 0x645, 0x204, 0x635, - 0x62d, 0x204, 0x635, 0x62e, 0x204, 0x635, 0x645, 0x204, - 0x636, 0x62c, 0x204, 0x636, 0x62d, 0x204, 0x636, 0x62e, - 0x204, 0x636, 0x645, 0x204, 0x637, 0x62d, 0x204, 0x638, - 0x645, 0x204, 0x639, 0x62c, 0x204, 0x639, 0x645, 0x204, - 0x63a, 0x62c, 0x204, 0x63a, 0x645, 0x204, 0x641, 0x62c, - 0x204, 0x641, 0x62d, 0x204, 0x641, 0x62e, 0x204, 0x641, - 0x645, 0x204, 0x642, 0x62d, 0x204, 0x642, 0x645, 0x204, - 0x643, 0x62c, 0x204, 0x643, 0x62d, 0x204, 0x643, 0x62e, - 0x204, 0x643, 0x644, 0x204, 0x643, 0x645, 0x204, 0x644, - 0x62c, 0x204, 0x644, 0x62d, 0x204, 0x644, 0x62e, 0x204, - 0x644, 0x645, 0x204, 0x644, 0x647, 0x204, 0x645, 0x62c, - 0x204, 0x645, 0x62d, 0x204, 0x645, 0x62e, 0x204, 0x645, - 0x645, 0x204, 0x646, 0x62c, 0x204, 0x646, 0x62d, 0x204, - 0x646, 0x62e, 0x204, 0x646, 0x645, 0x204, 0x646, 0x647, - 0x204, 0x647, 0x62c, 0x204, 0x647, 0x645, 0x204, 0x647, - 0x670, 0x204, 0x64a, 0x62c, 0x204, 0x64a, 0x62d, 0x204, - 0x64a, 0x62e, 0x204, 0x64a, 0x645, 0x204, 0x64a, 0x647, - 0x205, 0x626, 0x645, 0x205, 0x626, 0x647, 0x205, 0x628, - 0x645, 0x205, 0x628, 0x647, 0x205, 0x62a, 0x645, 0x205, - 0x62a, 0x647, 0x205, 0x62b, 0x645, 0x205, 0x62b, 0x647, - 0x205, 0x633, 0x645, 0x205, 0x633, 0x647, 0x205, 0x634, - 0x645, 0x205, 0x634, 0x647, 0x205, 0x643, 0x644, 0x205, - 0x643, 0x645, 0x205, 0x644, 0x645, 0x205, 0x646, 0x645, - 0x205, 0x646, 0x647, 0x205, 0x64a, 0x645, 0x205, 0x64a, - 0x647, 0x305, 0x640, 0x64e, 0x651, 0x305, 0x640, 0x64f, - 0x651, 0x305, 0x640, 0x650, 0x651, 0x207, 0x637, 0x649, - 0x207, 0x637, 0x64a, 0x207, 0x639, 0x649, 0x207, 0x639, - 0x64a, 0x207, 0x63a, 0x649, 0x207, 0x63a, 0x64a, 0x207, - 0x633, 0x649, 0x207, 0x633, 0x64a, 0x207, 0x634, 0x649, - 0x207, 0x634, 0x64a, 0x207, 0x62d, 0x649, 0x207, 0x62d, - 0x64a, 0x207, 0x62c, 0x649, 0x207, 0x62c, 0x64a, 0x207, - 0x62e, 0x649, 0x207, 0x62e, 0x64a, 0x207, 0x635, 0x649, - 0x207, 0x635, 0x64a, 0x207, 0x636, 0x649, 0x207, 0x636, - 0x64a, 0x207, 0x634, 0x62c, 0x207, 0x634, 0x62d, 0x207, - 0x634, 0x62e, 0x207, 0x634, 0x645, 0x207, 0x634, 0x631, - 0x207, 0x633, 0x631, 0x207, 0x635, 0x631, 0x207, 0x636, - 0x631, 0x206, 0x637, 0x649, 0x206, 0x637, 0x64a, 0x206, - 0x639, 0x649, 0x206, 0x639, 0x64a, 0x206, 0x63a, 0x649, - 0x206, 0x63a, 0x64a, 0x206, 0x633, 0x649, 0x206, 0x633, - 0x64a, 0x206, 0x634, 0x649, 0x206, 0x634, 0x64a, 0x206, - 0x62d, 0x649, 0x206, 0x62d, 0x64a, 0x206, 0x62c, 0x649, - 0x206, 0x62c, 0x64a, 0x206, 0x62e, 0x649, 0x206, 0x62e, - 0x64a, 0x206, 0x635, 0x649, 0x206, 0x635, 0x64a, 0x206, - 0x636, 0x649, 0x206, 0x636, 0x64a, 0x206, 0x634, 0x62c, - 0x206, 0x634, 0x62d, 0x206, 0x634, 0x62e, 0x206, 0x634, - 0x645, 0x206, 0x634, 0x631, 0x206, 0x633, 0x631, 0x206, - 0x635, 0x631, 0x206, 0x636, 0x631, 0x204, 0x634, 0x62c, - 0x204, 0x634, 0x62d, 0x204, 0x634, 0x62e, 0x204, 0x634, - 0x645, 0x204, 0x633, 0x647, 0x204, 0x634, 0x647, 0x204, - 0x637, 0x645, 0x205, 0x633, 0x62c, 0x205, 0x633, 0x62d, - 0x205, 0x633, 0x62e, 0x205, 0x634, 0x62c, 0x205, 0x634, - 0x62d, 0x205, 0x634, 0x62e, 0x205, 0x637, 0x645, 0x205, - 0x638, 0x645, 0x206, 0x627, 0x64b, 0x207, 0x627, 0x64b, - 0x304, 0x62a, 0x62c, 0x645, 0x306, 0x62a, 0x62d, 0x62c, - 0x304, 0x62a, 0x62d, 0x62c, 0x304, 0x62a, 0x62d, 0x645, - 0x304, 0x62a, 0x62e, 0x645, 0x304, 0x62a, 0x645, 0x62c, - 0x304, 0x62a, 0x645, 0x62d, 0x304, 0x62a, 0x645, 0x62e, - 0x306, 0x62c, 0x645, 0x62d, 0x304, 0x62c, 0x645, 0x62d, - 0x306, 0x62d, 0x645, 0x64a, 0x306, 0x62d, 0x645, 0x649, - 0x304, 0x633, 0x62d, 0x62c, 0x304, 0x633, 0x62c, 0x62d, - 0x306, 0x633, 0x62c, 0x649, 0x306, 0x633, 0x645, 0x62d, - 0x304, 0x633, 0x645, 0x62d, 0x304, 0x633, 0x645, 0x62c, - 0x306, 0x633, 0x645, 0x645, 0x304, 0x633, 0x645, 0x645, - 0x306, 0x635, 0x62d, 0x62d, 0x304, 0x635, 0x62d, 0x62d, - 0x306, 0x635, 0x645, 0x645, 0x306, 0x634, 0x62d, 0x645, - 0x304, 0x634, 0x62d, 0x645, 0x306, 0x634, 0x62c, 0x64a, - 0x306, 0x634, 0x645, 0x62e, 0x304, 0x634, 0x645, 0x62e, - 0x306, 0x634, 0x645, 0x645, 0x304, 0x634, 0x645, 0x645, - 0x306, 0x636, 0x62d, 0x649, 0x306, 0x636, 0x62e, 0x645, - 0x304, 0x636, 0x62e, 0x645, 0x306, 0x637, 0x645, 0x62d, - 0x304, 0x637, 0x645, 0x62d, 0x304, 0x637, 0x645, 0x645, - 0x306, 0x637, 0x645, 0x64a, 0x306, 0x639, 0x62c, 0x645, - 0x306, 0x639, 0x645, 0x645, 0x304, 0x639, 0x645, 0x645, - 0x306, 0x639, 0x645, 0x649, 0x306, 0x63a, 0x645, 0x645, - 0x306, 0x63a, 0x645, 0x64a, 0x306, 0x63a, 0x645, 0x649, - 0x306, 0x641, 0x62e, 0x645, 0x304, 0x641, 0x62e, 0x645, - 0x306, 0x642, 0x645, 0x62d, 0x306, 0x642, 0x645, 0x645, - 0x306, 0x644, 0x62d, 0x645, 0x306, 0x644, 0x62d, 0x64a, - 0x306, 0x644, 0x62d, 0x649, 0x304, 0x644, 0x62c, 0x62c, - 0x306, 0x644, 0x62c, 0x62c, 0x306, 0x644, 0x62e, 0x645, - 0x304, 0x644, 0x62e, 0x645, 0x306, 0x644, 0x645, 0x62d, - 0x304, 0x644, 0x645, 0x62d, 0x304, 0x645, 0x62d, 0x62c, - 0x304, 0x645, 0x62d, 0x645, 0x306, 0x645, 0x62d, 0x64a, - 0x304, 0x645, 0x62c, 0x62d, 0x304, 0x645, 0x62c, 0x645, - 0x304, 0x645, 0x62e, 0x62c, 0x304, 0x645, 0x62e, 0x645, - 0x304, 0x645, 0x62c, 0x62e, 0x304, 0x647, 0x645, 0x62c, - 0x304, 0x647, 0x645, 0x645, 0x304, 0x646, 0x62d, 0x645, - 0x306, 0x646, 0x62d, 0x649, 0x306, 0x646, 0x62c, 0x645, - 0x304, 0x646, 0x62c, 0x645, 0x306, 0x646, 0x62c, 0x649, - 0x306, 0x646, 0x645, 0x64a, 0x306, 0x646, 0x645, 0x649, - 0x306, 0x64a, 0x645, 0x645, 0x304, 0x64a, 0x645, 0x645, - 0x306, 0x628, 0x62e, 0x64a, 0x306, 0x62a, 0x62c, 0x64a, - 0x306, 0x62a, 0x62c, 0x649, 0x306, 0x62a, 0x62e, 0x64a, - 0x306, 0x62a, 0x62e, 0x649, 0x306, 0x62a, 0x645, 0x64a, - 0x306, 0x62a, 0x645, 0x649, 0x306, 0x62c, 0x645, 0x64a, - 0x306, 0x62c, 0x62d, 0x649, 0x306, 0x62c, 0x645, 0x649, - 0x306, 0x633, 0x62e, 0x649, 0x306, 0x635, 0x62d, 0x64a, - 0x306, 0x634, 0x62d, 0x64a, 0x306, 0x636, 0x62d, 0x64a, - 0x306, 0x644, 0x62c, 0x64a, 0x306, 0x644, 0x645, 0x64a, - 0x306, 0x64a, 0x62d, 0x64a, 0x306, 0x64a, 0x62c, 0x64a, - 0x306, 0x64a, 0x645, 0x64a, 0x306, 0x645, 0x645, 0x64a, - 0x306, 0x642, 0x645, 0x64a, 0x306, 0x646, 0x62d, 0x64a, - 0x304, 0x642, 0x645, 0x62d, 0x304, 0x644, 0x62d, 0x645, - 0x306, 0x639, 0x645, 0x64a, 0x306, 0x643, 0x645, 0x64a, - 0x304, 0x646, 0x62c, 0x62d, 0x306, 0x645, 0x62e, 0x64a, - 0x304, 0x644, 0x62c, 0x645, 0x306, 0x643, 0x645, 0x645, - 0x306, 0x644, 0x62c, 0x645, 0x306, 0x646, 0x62c, 0x62d, - 0x306, 0x62c, 0x62d, 0x64a, 0x306, 0x62d, 0x62c, 0x64a, - 0x306, 0x645, 0x62c, 0x64a, 0x306, 0x641, 0x645, 0x64a, - 0x306, 0x628, 0x62d, 0x64a, 0x304, 0x643, 0x645, 0x645, - 0x304, 0x639, 0x62c, 0x645, 0x304, 0x635, 0x645, 0x645, - 0x306, 0x633, 0x62e, 0x64a, 0x306, 0x646, 0x62c, 0x64a, - 0x307, 0x635, 0x644, 0x6d2, 0x307, 0x642, 0x644, 0x6d2, - 0x407, 0x627, 0x644, 0x644, 0x647, 0x407, 0x627, 0x643, - 0x628, 0x631, 0x407, 0x645, 0x62d, 0x645, 0x62f, 0x407, - 0x635, 0x644, 0x639, 0x645, 0x407, 0x631, 0x633, 0x648, - 0x644, 0x407, 0x639, 0x644, 0x64a, 0x647, 0x407, 0x648, - 0x633, 0x644, 0x645, 0x307, 0x635, 0x644, 0x649, 0x1207, - 0x635, 0x644, 0x649, 0x20, 0x627, 0x644, 0x644, 0x647, - 0x20, 0x639, 0x644, 0x64a, 0x647, 0x20, 0x648, 0x633, - 0x644, 0x645, 0x807, 0x62c, 0x644, 0x20, 0x62c, 0x644, - 0x627, 0x644, 0x647, 0x407, 0x631, 0x6cc, 0x627, 0x644, - 0x10b, 0x2c, 0x10b, 0x3001, 0x10b, 0x3002, 0x10b, 0x3a, - 0x10b, 0x3b, 0x10b, 0x21, 0x10b, 0x3f, 0x10b, 0x3016, - 0x10b, 0x3017, 0x10b, 0x2026, 0x10b, 0x2025, 0x10b, 0x2014, - 0x10b, 0x2013, 0x10b, 0x5f, 0x10b, 0x5f, 0x10b, 0x28, - 0x10b, 0x29, 0x10b, 0x7b, 0x10b, 0x7d, 0x10b, 0x3014, - 0x10b, 0x3015, 0x10b, 0x3010, 0x10b, 0x3011, 0x10b, 0x300a, - 0x10b, 0x300b, 0x10b, 0x3008, 0x10b, 0x3009, 0x10b, 0x300c, - 0x10b, 0x300d, 0x10b, 0x300e, 0x10b, 0x300f, 0x10b, 0x5b, - 0x10b, 0x5d, 0x110, 0x203e, 0x110, 0x203e, 0x110, 0x203e, - 0x110, 0x203e, 0x110, 0x5f, 0x110, 0x5f, 0x110, 0x5f, - 0x10e, 0x2c, 0x10e, 0x3001, 0x10e, 0x2e, 0x10e, 0x3b, - 0x10e, 0x3a, 0x10e, 0x3f, 0x10e, 0x21, 0x10e, 0x2014, - 0x10e, 0x28, 0x10e, 0x29, 0x10e, 0x7b, 0x10e, 0x7d, - 0x10e, 0x3014, 0x10e, 0x3015, 0x10e, 0x23, 0x10e, 0x26, - 0x10e, 0x2a, 0x10e, 0x2b, 0x10e, 0x2d, 0x10e, 0x3c, - 0x10e, 0x3e, 0x10e, 0x3d, 0x10e, 0x5c, 0x10e, 0x24, - 0x10e, 0x25, 0x10e, 0x40, 0x207, 0x20, 0x64b, 0x205, - 0x640, 0x64b, 0x207, 0x20, 0x64c, 0x207, 0x20, 0x64d, - 0x207, 0x20, 0x64e, 0x205, 0x640, 0x64e, 0x207, 0x20, - 0x64f, 0x205, 0x640, 0x64f, 0x207, 0x20, 0x650, 0x205, - 0x640, 0x650, 0x207, 0x20, 0x651, 0x205, 0x640, 0x651, - 0x207, 0x20, 0x652, 0x205, 0x640, 0x652, 0x107, 0x621, - 0x107, 0x622, 0x106, 0x622, 0x107, 0x623, 0x106, 0x623, - 0x107, 0x624, 0x106, 0x624, 0x107, 0x625, 0x106, 0x625, - 0x107, 0x626, 0x106, 0x626, 0x104, 0x626, 0x105, 0x626, - 0x107, 0x627, 0x106, 0x627, 0x107, 0x628, 0x106, 0x628, - 0x104, 0x628, 0x105, 0x628, 0x107, 0x629, 0x106, 0x629, - 0x107, 0x62a, 0x106, 0x62a, 0x104, 0x62a, 0x105, 0x62a, - 0x107, 0x62b, 0x106, 0x62b, 0x104, 0x62b, 0x105, 0x62b, - 0x107, 0x62c, 0x106, 0x62c, 0x104, 0x62c, 0x105, 0x62c, - 0x107, 0x62d, 0x106, 0x62d, 0x104, 0x62d, 0x105, 0x62d, - 0x107, 0x62e, 0x106, 0x62e, 0x104, 0x62e, 0x105, 0x62e, - 0x107, 0x62f, 0x106, 0x62f, 0x107, 0x630, 0x106, 0x630, - 0x107, 0x631, 0x106, 0x631, 0x107, 0x632, 0x106, 0x632, - 0x107, 0x633, 0x106, 0x633, 0x104, 0x633, 0x105, 0x633, - 0x107, 0x634, 0x106, 0x634, 0x104, 0x634, 0x105, 0x634, - 0x107, 0x635, 0x106, 0x635, 0x104, 0x635, 0x105, 0x635, - 0x107, 0x636, 0x106, 0x636, 0x104, 0x636, 0x105, 0x636, - 0x107, 0x637, 0x106, 0x637, 0x104, 0x637, 0x105, 0x637, - 0x107, 0x638, 0x106, 0x638, 0x104, 0x638, 0x105, 0x638, - 0x107, 0x639, 0x106, 0x639, 0x104, 0x639, 0x105, 0x639, - 0x107, 0x63a, 0x106, 0x63a, 0x104, 0x63a, 0x105, 0x63a, - 0x107, 0x641, 0x106, 0x641, 0x104, 0x641, 0x105, 0x641, - 0x107, 0x642, 0x106, 0x642, 0x104, 0x642, 0x105, 0x642, - 0x107, 0x643, 0x106, 0x643, 0x104, 0x643, 0x105, 0x643, - 0x107, 0x644, 0x106, 0x644, 0x104, 0x644, 0x105, 0x644, - 0x107, 0x645, 0x106, 0x645, 0x104, 0x645, 0x105, 0x645, - 0x107, 0x646, 0x106, 0x646, 0x104, 0x646, 0x105, 0x646, - 0x107, 0x647, 0x106, 0x647, 0x104, 0x647, 0x105, 0x647, - 0x107, 0x648, 0x106, 0x648, 0x107, 0x649, 0x106, 0x649, - 0x107, 0x64a, 0x106, 0x64a, 0x104, 0x64a, 0x105, 0x64a, - 0x207, 0x644, 0x622, 0x206, 0x644, 0x622, 0x207, 0x644, - 0x623, 0x206, 0x644, 0x623, 0x207, 0x644, 0x625, 0x206, - 0x644, 0x625, 0x207, 0x644, 0x627, 0x206, 0x644, 0x627, - 0x10c, 0x21, 0x10c, 0x22, 0x10c, 0x23, 0x10c, 0x24, - 0x10c, 0x25, 0x10c, 0x26, 0x10c, 0x27, 0x10c, 0x28, - 0x10c, 0x29, 0x10c, 0x2a, 0x10c, 0x2b, 0x10c, 0x2c, - 0x10c, 0x2d, 0x10c, 0x2e, 0x10c, 0x2f, 0x10c, 0x30, - 0x10c, 0x31, 0x10c, 0x32, 0x10c, 0x33, 0x10c, 0x34, - 0x10c, 0x35, 0x10c, 0x36, 0x10c, 0x37, 0x10c, 0x38, - 0x10c, 0x39, 0x10c, 0x3a, 0x10c, 0x3b, 0x10c, 0x3c, - 0x10c, 0x3d, 0x10c, 0x3e, 0x10c, 0x3f, 0x10c, 0x40, - 0x10c, 0x41, 0x10c, 0x42, 0x10c, 0x43, 0x10c, 0x44, - 0x10c, 0x45, 0x10c, 0x46, 0x10c, 0x47, 0x10c, 0x48, - 0x10c, 0x49, 0x10c, 0x4a, 0x10c, 0x4b, 0x10c, 0x4c, - 0x10c, 0x4d, 0x10c, 0x4e, 0x10c, 0x4f, 0x10c, 0x50, - 0x10c, 0x51, 0x10c, 0x52, 0x10c, 0x53, 0x10c, 0x54, - 0x10c, 0x55, 0x10c, 0x56, 0x10c, 0x57, 0x10c, 0x58, - 0x10c, 0x59, 0x10c, 0x5a, 0x10c, 0x5b, 0x10c, 0x5c, - 0x10c, 0x5d, 0x10c, 0x5e, 0x10c, 0x5f, 0x10c, 0x60, - 0x10c, 0x61, 0x10c, 0x62, 0x10c, 0x63, 0x10c, 0x64, - 0x10c, 0x65, 0x10c, 0x66, 0x10c, 0x67, 0x10c, 0x68, - 0x10c, 0x69, 0x10c, 0x6a, 0x10c, 0x6b, 0x10c, 0x6c, - 0x10c, 0x6d, 0x10c, 0x6e, 0x10c, 0x6f, 0x10c, 0x70, - 0x10c, 0x71, 0x10c, 0x72, 0x10c, 0x73, 0x10c, 0x74, - 0x10c, 0x75, 0x10c, 0x76, 0x10c, 0x77, 0x10c, 0x78, - 0x10c, 0x79, 0x10c, 0x7a, 0x10c, 0x7b, 0x10c, 0x7c, - 0x10c, 0x7d, 0x10c, 0x7e, 0x10c, 0x2985, 0x10c, 0x2986, - 0x10d, 0x3002, 0x10d, 0x300c, 0x10d, 0x300d, 0x10d, 0x3001, - 0x10d, 0x30fb, 0x10d, 0x30f2, 0x10d, 0x30a1, 0x10d, 0x30a3, - 0x10d, 0x30a5, 0x10d, 0x30a7, 0x10d, 0x30a9, 0x10d, 0x30e3, - 0x10d, 0x30e5, 0x10d, 0x30e7, 0x10d, 0x30c3, 0x10d, 0x30fc, - 0x10d, 0x30a2, 0x10d, 0x30a4, 0x10d, 0x30a6, 0x10d, 0x30a8, - 0x10d, 0x30aa, 0x10d, 0x30ab, 0x10d, 0x30ad, 0x10d, 0x30af, - 0x10d, 0x30b1, 0x10d, 0x30b3, 0x10d, 0x30b5, 0x10d, 0x30b7, - 0x10d, 0x30b9, 0x10d, 0x30bb, 0x10d, 0x30bd, 0x10d, 0x30bf, - 0x10d, 0x30c1, 0x10d, 0x30c4, 0x10d, 0x30c6, 0x10d, 0x30c8, - 0x10d, 0x30ca, 0x10d, 0x30cb, 0x10d, 0x30cc, 0x10d, 0x30cd, - 0x10d, 0x30ce, 0x10d, 0x30cf, 0x10d, 0x30d2, 0x10d, 0x30d5, - 0x10d, 0x30d8, 0x10d, 0x30db, 0x10d, 0x30de, 0x10d, 0x30df, - 0x10d, 0x30e0, 0x10d, 0x30e1, 0x10d, 0x30e2, 0x10d, 0x30e4, - 0x10d, 0x30e6, 0x10d, 0x30e8, 0x10d, 0x30e9, 0x10d, 0x30ea, - 0x10d, 0x30eb, 0x10d, 0x30ec, 0x10d, 0x30ed, 0x10d, 0x30ef, - 0x10d, 0x30f3, 0x10d, 0x3099, 0x10d, 0x309a, 0x10d, 0x3164, - 0x10d, 0x3131, 0x10d, 0x3132, 0x10d, 0x3133, 0x10d, 0x3134, - 0x10d, 0x3135, 0x10d, 0x3136, 0x10d, 0x3137, 0x10d, 0x3138, - 0x10d, 0x3139, 0x10d, 0x313a, 0x10d, 0x313b, 0x10d, 0x313c, - 0x10d, 0x313d, 0x10d, 0x313e, 0x10d, 0x313f, 0x10d, 0x3140, - 0x10d, 0x3141, 0x10d, 0x3142, 0x10d, 0x3143, 0x10d, 0x3144, - 0x10d, 0x3145, 0x10d, 0x3146, 0x10d, 0x3147, 0x10d, 0x3148, - 0x10d, 0x3149, 0x10d, 0x314a, 0x10d, 0x314b, 0x10d, 0x314c, - 0x10d, 0x314d, 0x10d, 0x314e, 0x10d, 0x314f, 0x10d, 0x3150, - 0x10d, 0x3151, 0x10d, 0x3152, 0x10d, 0x3153, 0x10d, 0x3154, - 0x10d, 0x3155, 0x10d, 0x3156, 0x10d, 0x3157, 0x10d, 0x3158, - 0x10d, 0x3159, 0x10d, 0x315a, 0x10d, 0x315b, 0x10d, 0x315c, - 0x10d, 0x315d, 0x10d, 0x315e, 0x10d, 0x315f, 0x10d, 0x3160, - 0x10d, 0x3161, 0x10d, 0x3162, 0x10d, 0x3163, 0x10c, 0xa2, - 0x10c, 0xa3, 0x10c, 0xac, 0x10c, 0xaf, 0x10c, 0xa6, - 0x10c, 0xa5, 0x10c, 0x20a9, 0x10d, 0x2502, 0x10d, 0x2190, - 0x10d, 0x2191, 0x10d, 0x2192, 0x10d, 0x2193, 0x10d, 0x25a0, - 0x10d, 0x25cb, 0x401, 0xd804, 0xdc99, 0xd804, 0xdcba, 0x401, - 0xd804, 0xdc9b, 0xd804, 0xdcba, 0x401, 0xd804, 0xdca5, 0xd804, - 0xdcba, 0x401, 0xd804, 0xdd31, 0xd804, 0xdd27, 0x401, 0xd804, - 0xdd32, 0xd804, 0xdd27, 0x401, 0xd834, 0xdd57, 0xd834, 0xdd65, - 0x401, 0xd834, 0xdd58, 0xd834, 0xdd65, 0x401, 0xd834, 0xdd5f, - 0xd834, 0xdd6e, 0x401, 0xd834, 0xdd5f, 0xd834, 0xdd6f, 0x401, - 0xd834, 0xdd5f, 0xd834, 0xdd70, 0x401, 0xd834, 0xdd5f, 0xd834, - 0xdd71, 0x401, 0xd834, 0xdd5f, 0xd834, 0xdd72, 0x401, 0xd834, - 0xddb9, 0xd834, 0xdd65, 0x401, 0xd834, 0xddba, 0xd834, 0xdd65, - 0x401, 0xd834, 0xddbb, 0xd834, 0xdd6e, 0x401, 0xd834, 0xddbc, - 0xd834, 0xdd6e, 0x401, 0xd834, 0xddbb, 0xd834, 0xdd6f, 0x401, - 0xd834, 0xddbc, 0xd834, 0xdd6f, 0x102, 0x41, 0x102, 0x42, - 0x102, 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, - 0x102, 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, - 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, - 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, - 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, - 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, - 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, - 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, - 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, - 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, - 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, - 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, - 0x102, 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, - 0x102, 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, - 0x102, 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, - 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, - 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, - 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, - 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, - 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, - 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x69, - 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, 0x6d, - 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, 0x71, - 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, 0x75, - 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, 0x79, - 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, 0x43, - 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, 0x47, - 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, 0x4b, - 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, 0x4f, - 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, 0x53, - 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, 0x57, - 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, 0x61, - 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, 0x65, - 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, 0x69, - 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, 0x6d, - 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, 0x71, - 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, 0x75, - 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, 0x79, - 0x102, 0x7a, 0x102, 0x41, 0x102, 0x43, 0x102, 0x44, - 0x102, 0x47, 0x102, 0x4a, 0x102, 0x4b, 0x102, 0x4e, - 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x53, - 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, 0x57, - 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, 0x61, - 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, 0x66, - 0x102, 0x68, 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, - 0x102, 0x6c, 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x70, - 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, - 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, - 0x102, 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, - 0x102, 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, - 0x102, 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, - 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, - 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, - 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, - 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, - 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, - 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, - 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, - 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, - 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, - 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, - 0x102, 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, - 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, 0x47, - 0x102, 0x4a, 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, - 0x102, 0x4e, 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, - 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, - 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x61, - 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, 0x65, - 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, 0x69, - 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, 0x6d, - 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, 0x71, - 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, 0x75, - 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, 0x79, - 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, 0x44, - 0x102, 0x45, 0x102, 0x46, 0x102, 0x47, 0x102, 0x49, - 0x102, 0x4a, 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, - 0x102, 0x4f, 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, - 0x102, 0x56, 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, - 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, - 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, - 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, - 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, - 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, - 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, - 0x102, 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, - 0x102, 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, - 0x102, 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, - 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, - 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, - 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, - 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, - 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, - 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, - 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, - 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, - 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, - 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, - 0x102, 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, - 0x102, 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, - 0x102, 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, - 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, - 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, - 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, - 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, - 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, - 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, - 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, - 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, - 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, - 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, - 0x102, 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, - 0x102, 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, - 0x102, 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, - 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, - 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, - 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, - 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, - 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, - 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, - 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, - 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, - 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, - 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, - 0x102, 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, - 0x102, 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, - 0x102, 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, - 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, - 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, - 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, - 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, - 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, - 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, - 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, - 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, - 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, - 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, - 0x102, 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, - 0x102, 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, - 0x102, 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, - 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, - 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, - 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, - 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, - 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, - 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, - 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, - 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, - 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, - 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, - 0x102, 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, - 0x102, 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, - 0x102, 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, - 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, - 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, - 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, - 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, - 0x102, 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, - 0x102, 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, - 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, - 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, - 0x102, 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, - 0x102, 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, - 0x102, 0x79, 0x102, 0x7a, 0x102, 0x131, 0x102, 0x237, - 0x102, 0x391, 0x102, 0x392, 0x102, 0x393, 0x102, 0x394, - 0x102, 0x395, 0x102, 0x396, 0x102, 0x397, 0x102, 0x398, - 0x102, 0x399, 0x102, 0x39a, 0x102, 0x39b, 0x102, 0x39c, - 0x102, 0x39d, 0x102, 0x39e, 0x102, 0x39f, 0x102, 0x3a0, - 0x102, 0x3a1, 0x102, 0x3f4, 0x102, 0x3a3, 0x102, 0x3a4, - 0x102, 0x3a5, 0x102, 0x3a6, 0x102, 0x3a7, 0x102, 0x3a8, - 0x102, 0x3a9, 0x102, 0x2207, 0x102, 0x3b1, 0x102, 0x3b2, - 0x102, 0x3b3, 0x102, 0x3b4, 0x102, 0x3b5, 0x102, 0x3b6, - 0x102, 0x3b7, 0x102, 0x3b8, 0x102, 0x3b9, 0x102, 0x3ba, - 0x102, 0x3bb, 0x102, 0x3bc, 0x102, 0x3bd, 0x102, 0x3be, - 0x102, 0x3bf, 0x102, 0x3c0, 0x102, 0x3c1, 0x102, 0x3c2, - 0x102, 0x3c3, 0x102, 0x3c4, 0x102, 0x3c5, 0x102, 0x3c6, - 0x102, 0x3c7, 0x102, 0x3c8, 0x102, 0x3c9, 0x102, 0x2202, - 0x102, 0x3f5, 0x102, 0x3d1, 0x102, 0x3f0, 0x102, 0x3d5, - 0x102, 0x3f1, 0x102, 0x3d6, 0x102, 0x391, 0x102, 0x392, - 0x102, 0x393, 0x102, 0x394, 0x102, 0x395, 0x102, 0x396, - 0x102, 0x397, 0x102, 0x398, 0x102, 0x399, 0x102, 0x39a, - 0x102, 0x39b, 0x102, 0x39c, 0x102, 0x39d, 0x102, 0x39e, - 0x102, 0x39f, 0x102, 0x3a0, 0x102, 0x3a1, 0x102, 0x3f4, - 0x102, 0x3a3, 0x102, 0x3a4, 0x102, 0x3a5, 0x102, 0x3a6, - 0x102, 0x3a7, 0x102, 0x3a8, 0x102, 0x3a9, 0x102, 0x2207, - 0x102, 0x3b1, 0x102, 0x3b2, 0x102, 0x3b3, 0x102, 0x3b4, - 0x102, 0x3b5, 0x102, 0x3b6, 0x102, 0x3b7, 0x102, 0x3b8, - 0x102, 0x3b9, 0x102, 0x3ba, 0x102, 0x3bb, 0x102, 0x3bc, - 0x102, 0x3bd, 0x102, 0x3be, 0x102, 0x3bf, 0x102, 0x3c0, - 0x102, 0x3c1, 0x102, 0x3c2, 0x102, 0x3c3, 0x102, 0x3c4, - 0x102, 0x3c5, 0x102, 0x3c6, 0x102, 0x3c7, 0x102, 0x3c8, - 0x102, 0x3c9, 0x102, 0x2202, 0x102, 0x3f5, 0x102, 0x3d1, - 0x102, 0x3f0, 0x102, 0x3d5, 0x102, 0x3f1, 0x102, 0x3d6, - 0x102, 0x391, 0x102, 0x392, 0x102, 0x393, 0x102, 0x394, - 0x102, 0x395, 0x102, 0x396, 0x102, 0x397, 0x102, 0x398, - 0x102, 0x399, 0x102, 0x39a, 0x102, 0x39b, 0x102, 0x39c, - 0x102, 0x39d, 0x102, 0x39e, 0x102, 0x39f, 0x102, 0x3a0, - 0x102, 0x3a1, 0x102, 0x3f4, 0x102, 0x3a3, 0x102, 0x3a4, - 0x102, 0x3a5, 0x102, 0x3a6, 0x102, 0x3a7, 0x102, 0x3a8, - 0x102, 0x3a9, 0x102, 0x2207, 0x102, 0x3b1, 0x102, 0x3b2, - 0x102, 0x3b3, 0x102, 0x3b4, 0x102, 0x3b5, 0x102, 0x3b6, - 0x102, 0x3b7, 0x102, 0x3b8, 0x102, 0x3b9, 0x102, 0x3ba, - 0x102, 0x3bb, 0x102, 0x3bc, 0x102, 0x3bd, 0x102, 0x3be, - 0x102, 0x3bf, 0x102, 0x3c0, 0x102, 0x3c1, 0x102, 0x3c2, - 0x102, 0x3c3, 0x102, 0x3c4, 0x102, 0x3c5, 0x102, 0x3c6, - 0x102, 0x3c7, 0x102, 0x3c8, 0x102, 0x3c9, 0x102, 0x2202, - 0x102, 0x3f5, 0x102, 0x3d1, 0x102, 0x3f0, 0x102, 0x3d5, - 0x102, 0x3f1, 0x102, 0x3d6, 0x102, 0x391, 0x102, 0x392, - 0x102, 0x393, 0x102, 0x394, 0x102, 0x395, 0x102, 0x396, - 0x102, 0x397, 0x102, 0x398, 0x102, 0x399, 0x102, 0x39a, - 0x102, 0x39b, 0x102, 0x39c, 0x102, 0x39d, 0x102, 0x39e, - 0x102, 0x39f, 0x102, 0x3a0, 0x102, 0x3a1, 0x102, 0x3f4, - 0x102, 0x3a3, 0x102, 0x3a4, 0x102, 0x3a5, 0x102, 0x3a6, - 0x102, 0x3a7, 0x102, 0x3a8, 0x102, 0x3a9, 0x102, 0x2207, - 0x102, 0x3b1, 0x102, 0x3b2, 0x102, 0x3b3, 0x102, 0x3b4, - 0x102, 0x3b5, 0x102, 0x3b6, 0x102, 0x3b7, 0x102, 0x3b8, - 0x102, 0x3b9, 0x102, 0x3ba, 0x102, 0x3bb, 0x102, 0x3bc, - 0x102, 0x3bd, 0x102, 0x3be, 0x102, 0x3bf, 0x102, 0x3c0, - 0x102, 0x3c1, 0x102, 0x3c2, 0x102, 0x3c3, 0x102, 0x3c4, - 0x102, 0x3c5, 0x102, 0x3c6, 0x102, 0x3c7, 0x102, 0x3c8, - 0x102, 0x3c9, 0x102, 0x2202, 0x102, 0x3f5, 0x102, 0x3d1, - 0x102, 0x3f0, 0x102, 0x3d5, 0x102, 0x3f1, 0x102, 0x3d6, - 0x102, 0x391, 0x102, 0x392, 0x102, 0x393, 0x102, 0x394, - 0x102, 0x395, 0x102, 0x396, 0x102, 0x397, 0x102, 0x398, - 0x102, 0x399, 0x102, 0x39a, 0x102, 0x39b, 0x102, 0x39c, - 0x102, 0x39d, 0x102, 0x39e, 0x102, 0x39f, 0x102, 0x3a0, - 0x102, 0x3a1, 0x102, 0x3f4, 0x102, 0x3a3, 0x102, 0x3a4, - 0x102, 0x3a5, 0x102, 0x3a6, 0x102, 0x3a7, 0x102, 0x3a8, - 0x102, 0x3a9, 0x102, 0x2207, 0x102, 0x3b1, 0x102, 0x3b2, - 0x102, 0x3b3, 0x102, 0x3b4, 0x102, 0x3b5, 0x102, 0x3b6, - 0x102, 0x3b7, 0x102, 0x3b8, 0x102, 0x3b9, 0x102, 0x3ba, - 0x102, 0x3bb, 0x102, 0x3bc, 0x102, 0x3bd, 0x102, 0x3be, - 0x102, 0x3bf, 0x102, 0x3c0, 0x102, 0x3c1, 0x102, 0x3c2, - 0x102, 0x3c3, 0x102, 0x3c4, 0x102, 0x3c5, 0x102, 0x3c6, - 0x102, 0x3c7, 0x102, 0x3c8, 0x102, 0x3c9, 0x102, 0x2202, - 0x102, 0x3f5, 0x102, 0x3d1, 0x102, 0x3f0, 0x102, 0x3d5, - 0x102, 0x3f1, 0x102, 0x3d6, 0x102, 0x3dc, 0x102, 0x3dd, - 0x102, 0x30, 0x102, 0x31, 0x102, 0x32, 0x102, 0x33, - 0x102, 0x34, 0x102, 0x35, 0x102, 0x36, 0x102, 0x37, - 0x102, 0x38, 0x102, 0x39, 0x102, 0x30, 0x102, 0x31, - 0x102, 0x32, 0x102, 0x33, 0x102, 0x34, 0x102, 0x35, - 0x102, 0x36, 0x102, 0x37, 0x102, 0x38, 0x102, 0x39, - 0x102, 0x30, 0x102, 0x31, 0x102, 0x32, 0x102, 0x33, - 0x102, 0x34, 0x102, 0x35, 0x102, 0x36, 0x102, 0x37, - 0x102, 0x38, 0x102, 0x39, 0x102, 0x30, 0x102, 0x31, - 0x102, 0x32, 0x102, 0x33, 0x102, 0x34, 0x102, 0x35, - 0x102, 0x36, 0x102, 0x37, 0x102, 0x38, 0x102, 0x39, - 0x102, 0x30, 0x102, 0x31, 0x102, 0x32, 0x102, 0x33, - 0x102, 0x34, 0x102, 0x35, 0x102, 0x36, 0x102, 0x37, - 0x102, 0x38, 0x102, 0x39, 0x102, 0x627, 0x102, 0x628, - 0x102, 0x62c, 0x102, 0x62f, 0x102, 0x648, 0x102, 0x632, - 0x102, 0x62d, 0x102, 0x637, 0x102, 0x64a, 0x102, 0x643, - 0x102, 0x644, 0x102, 0x645, 0x102, 0x646, 0x102, 0x633, - 0x102, 0x639, 0x102, 0x641, 0x102, 0x635, 0x102, 0x642, - 0x102, 0x631, 0x102, 0x634, 0x102, 0x62a, 0x102, 0x62b, - 0x102, 0x62e, 0x102, 0x630, 0x102, 0x636, 0x102, 0x638, - 0x102, 0x63a, 0x102, 0x66e, 0x102, 0x6ba, 0x102, 0x6a1, - 0x102, 0x66f, 0x102, 0x628, 0x102, 0x62c, 0x102, 0x647, - 0x102, 0x62d, 0x102, 0x64a, 0x102, 0x643, 0x102, 0x644, - 0x102, 0x645, 0x102, 0x646, 0x102, 0x633, 0x102, 0x639, - 0x102, 0x641, 0x102, 0x635, 0x102, 0x642, 0x102, 0x634, - 0x102, 0x62a, 0x102, 0x62b, 0x102, 0x62e, 0x102, 0x636, - 0x102, 0x63a, 0x102, 0x62c, 0x102, 0x62d, 0x102, 0x64a, - 0x102, 0x644, 0x102, 0x646, 0x102, 0x633, 0x102, 0x639, - 0x102, 0x635, 0x102, 0x642, 0x102, 0x634, 0x102, 0x62e, - 0x102, 0x636, 0x102, 0x63a, 0x102, 0x6ba, 0x102, 0x66f, - 0x102, 0x628, 0x102, 0x62c, 0x102, 0x647, 0x102, 0x62d, - 0x102, 0x637, 0x102, 0x64a, 0x102, 0x643, 0x102, 0x645, - 0x102, 0x646, 0x102, 0x633, 0x102, 0x639, 0x102, 0x641, - 0x102, 0x635, 0x102, 0x642, 0x102, 0x634, 0x102, 0x62a, - 0x102, 0x62b, 0x102, 0x62e, 0x102, 0x636, 0x102, 0x638, - 0x102, 0x63a, 0x102, 0x66e, 0x102, 0x6a1, 0x102, 0x627, - 0x102, 0x628, 0x102, 0x62c, 0x102, 0x62f, 0x102, 0x647, - 0x102, 0x648, 0x102, 0x632, 0x102, 0x62d, 0x102, 0x637, - 0x102, 0x64a, 0x102, 0x644, 0x102, 0x645, 0x102, 0x646, - 0x102, 0x633, 0x102, 0x639, 0x102, 0x641, 0x102, 0x635, - 0x102, 0x642, 0x102, 0x631, 0x102, 0x634, 0x102, 0x62a, - 0x102, 0x62b, 0x102, 0x62e, 0x102, 0x630, 0x102, 0x636, - 0x102, 0x638, 0x102, 0x63a, 0x102, 0x628, 0x102, 0x62c, - 0x102, 0x62f, 0x102, 0x648, 0x102, 0x632, 0x102, 0x62d, - 0x102, 0x637, 0x102, 0x64a, 0x102, 0x644, 0x102, 0x645, - 0x102, 0x646, 0x102, 0x633, 0x102, 0x639, 0x102, 0x641, - 0x102, 0x635, 0x102, 0x642, 0x102, 0x631, 0x102, 0x634, - 0x102, 0x62a, 0x102, 0x62b, 0x102, 0x62e, 0x102, 0x630, - 0x102, 0x636, 0x102, 0x638, 0x102, 0x63a, 0x210, 0x30, - 0x2e, 0x210, 0x30, 0x2c, 0x210, 0x31, 0x2c, 0x210, - 0x32, 0x2c, 0x210, 0x33, 0x2c, 0x210, 0x34, 0x2c, - 0x210, 0x35, 0x2c, 0x210, 0x36, 0x2c, 0x210, 0x37, - 0x2c, 0x210, 0x38, 0x2c, 0x210, 0x39, 0x2c, 0x310, - 0x28, 0x41, 0x29, 0x310, 0x28, 0x42, 0x29, 0x310, - 0x28, 0x43, 0x29, 0x310, 0x28, 0x44, 0x29, 0x310, - 0x28, 0x45, 0x29, 0x310, 0x28, 0x46, 0x29, 0x310, - 0x28, 0x47, 0x29, 0x310, 0x28, 0x48, 0x29, 0x310, - 0x28, 0x49, 0x29, 0x310, 0x28, 0x4a, 0x29, 0x310, - 0x28, 0x4b, 0x29, 0x310, 0x28, 0x4c, 0x29, 0x310, - 0x28, 0x4d, 0x29, 0x310, 0x28, 0x4e, 0x29, 0x310, - 0x28, 0x4f, 0x29, 0x310, 0x28, 0x50, 0x29, 0x310, - 0x28, 0x51, 0x29, 0x310, 0x28, 0x52, 0x29, 0x310, - 0x28, 0x53, 0x29, 0x310, 0x28, 0x54, 0x29, 0x310, - 0x28, 0x55, 0x29, 0x310, 0x28, 0x56, 0x29, 0x310, - 0x28, 0x57, 0x29, 0x310, 0x28, 0x58, 0x29, 0x310, - 0x28, 0x59, 0x29, 0x310, 0x28, 0x5a, 0x29, 0x310, - 0x3014, 0x53, 0x3015, 0x108, 0x43, 0x108, 0x52, 0x208, - 0x43, 0x44, 0x208, 0x57, 0x5a, 0x10f, 0x41, 0x10f, - 0x42, 0x10f, 0x43, 0x10f, 0x44, 0x10f, 0x45, 0x10f, - 0x46, 0x10f, 0x47, 0x10f, 0x48, 0x10f, 0x49, 0x10f, - 0x4a, 0x10f, 0x4b, 0x10f, 0x4c, 0x10f, 0x4d, 0x10f, - 0x4e, 0x10f, 0x4f, 0x10f, 0x50, 0x10f, 0x51, 0x10f, - 0x52, 0x10f, 0x53, 0x10f, 0x54, 0x10f, 0x55, 0x10f, - 0x56, 0x10f, 0x57, 0x10f, 0x58, 0x10f, 0x59, 0x10f, - 0x5a, 0x20f, 0x48, 0x56, 0x20f, 0x4d, 0x56, 0x20f, - 0x53, 0x44, 0x20f, 0x53, 0x53, 0x30f, 0x50, 0x50, - 0x56, 0x20f, 0x57, 0x43, 0x209, 0x4d, 0x43, 0x209, - 0x4d, 0x44, 0x20f, 0x44, 0x4a, 0x20f, 0x307b, 0x304b, - 0x20f, 0x30b3, 0x30b3, 0x10f, 0x30b5, 0x10f, 0x624b, 0x10f, - 0x5b57, 0x10f, 0x53cc, 0x10f, 0x30c7, 0x10f, 0x4e8c, 0x10f, - 0x591a, 0x10f, 0x89e3, 0x10f, 0x5929, 0x10f, 0x4ea4, 0x10f, - 0x6620, 0x10f, 0x7121, 0x10f, 0x6599, 0x10f, 0x524d, 0x10f, - 0x5f8c, 0x10f, 0x518d, 0x10f, 0x65b0, 0x10f, 0x521d, 0x10f, - 0x7d42, 0x10f, 0x751f, 0x10f, 0x8ca9, 0x10f, 0x58f0, 0x10f, - 0x5439, 0x10f, 0x6f14, 0x10f, 0x6295, 0x10f, 0x6355, 0x10f, - 0x4e00, 0x10f, 0x4e09, 0x10f, 0x904a, 0x10f, 0x5de6, 0x10f, - 0x4e2d, 0x10f, 0x53f3, 0x10f, 0x6307, 0x10f, 0x8d70, 0x10f, - 0x6253, 0x10f, 0x7981, 0x10f, 0x7a7a, 0x10f, 0x5408, 0x10f, - 0x6e80, 0x10f, 0x6709, 0x10f, 0x6708, 0x10f, 0x7533, 0x10f, - 0x5272, 0x10f, 0x55b6, 0x310, 0x3014, 0x672c, 0x3015, 0x310, - 0x3014, 0x4e09, 0x3015, 0x310, 0x3014, 0x4e8c, 0x3015, 0x310, - 0x3014, 0x5b89, 0x3015, 0x310, 0x3014, 0x70b9, 0x3015, 0x310, - 0x3014, 0x6253, 0x3015, 0x310, 0x3014, 0x76d7, 0x3015, 0x310, - 0x3014, 0x52dd, 0x3015, 0x310, 0x3014, 0x6557, 0x3015, 0x108, - 0x5f97, 0x108, 0x53ef, 0x101, 0x4e3d, 0x101, 0x4e38, 0x101, - 0x4e41, 0x201, 0xd840, 0xdd22, 0x101, 0x4f60, 0x101, 0x4fae, - 0x101, 0x4fbb, 0x101, 0x5002, 0x101, 0x507a, 0x101, 0x5099, - 0x101, 0x50e7, 0x101, 0x50cf, 0x101, 0x349e, 0x201, 0xd841, - 0xde3a, 0x101, 0x514d, 0x101, 0x5154, 0x101, 0x5164, 0x101, - 0x5177, 0x201, 0xd841, 0xdd1c, 0x101, 0x34b9, 0x101, 0x5167, - 0x101, 0x518d, 0x201, 0xd841, 0xdd4b, 0x101, 0x5197, 0x101, - 0x51a4, 0x101, 0x4ecc, 0x101, 0x51ac, 0x101, 0x51b5, 0x201, - 0xd864, 0xdddf, 0x101, 0x51f5, 0x101, 0x5203, 0x101, 0x34df, - 0x101, 0x523b, 0x101, 0x5246, 0x101, 0x5272, 0x101, 0x5277, - 0x101, 0x3515, 0x101, 0x52c7, 0x101, 0x52c9, 0x101, 0x52e4, - 0x101, 0x52fa, 0x101, 0x5305, 0x101, 0x5306, 0x101, 0x5317, - 0x101, 0x5349, 0x101, 0x5351, 0x101, 0x535a, 0x101, 0x5373, - 0x101, 0x537d, 0x101, 0x537f, 0x101, 0x537f, 0x101, 0x537f, - 0x201, 0xd842, 0xde2c, 0x101, 0x7070, 0x101, 0x53ca, 0x101, - 0x53df, 0x201, 0xd842, 0xdf63, 0x101, 0x53eb, 0x101, 0x53f1, - 0x101, 0x5406, 0x101, 0x549e, 0x101, 0x5438, 0x101, 0x5448, - 0x101, 0x5468, 0x101, 0x54a2, 0x101, 0x54f6, 0x101, 0x5510, - 0x101, 0x5553, 0x101, 0x5563, 0x101, 0x5584, 0x101, 0x5584, - 0x101, 0x5599, 0x101, 0x55ab, 0x101, 0x55b3, 0x101, 0x55c2, - 0x101, 0x5716, 0x101, 0x5606, 0x101, 0x5717, 0x101, 0x5651, - 0x101, 0x5674, 0x101, 0x5207, 0x101, 0x58ee, 0x101, 0x57ce, - 0x101, 0x57f4, 0x101, 0x580d, 0x101, 0x578b, 0x101, 0x5832, - 0x101, 0x5831, 0x101, 0x58ac, 0x201, 0xd845, 0xdce4, 0x101, - 0x58f2, 0x101, 0x58f7, 0x101, 0x5906, 0x101, 0x591a, 0x101, - 0x5922, 0x101, 0x5962, 0x201, 0xd845, 0xdea8, 0x201, 0xd845, - 0xdeea, 0x101, 0x59ec, 0x101, 0x5a1b, 0x101, 0x5a27, 0x101, - 0x59d8, 0x101, 0x5a66, 0x101, 0x36ee, 0x101, 0x36fc, 0x101, - 0x5b08, 0x101, 0x5b3e, 0x101, 0x5b3e, 0x201, 0xd846, 0xddc8, - 0x101, 0x5bc3, 0x101, 0x5bd8, 0x101, 0x5be7, 0x101, 0x5bf3, - 0x201, 0xd846, 0xdf18, 0x101, 0x5bff, 0x101, 0x5c06, 0x101, - 0x5f53, 0x101, 0x5c22, 0x101, 0x3781, 0x101, 0x5c60, 0x101, - 0x5c6e, 0x101, 0x5cc0, 0x101, 0x5c8d, 0x201, 0xd847, 0xdde4, - 0x101, 0x5d43, 0x201, 0xd847, 0xdde6, 0x101, 0x5d6e, 0x101, - 0x5d6b, 0x101, 0x5d7c, 0x101, 0x5de1, 0x101, 0x5de2, 0x101, - 0x382f, 0x101, 0x5dfd, 0x101, 0x5e28, 0x101, 0x5e3d, 0x101, - 0x5e69, 0x101, 0x3862, 0x201, 0xd848, 0xdd83, 0x101, 0x387c, - 0x101, 0x5eb0, 0x101, 0x5eb3, 0x101, 0x5eb6, 0x101, 0x5eca, - 0x201, 0xd868, 0xdf92, 0x101, 0x5efe, 0x201, 0xd848, 0xdf31, - 0x201, 0xd848, 0xdf31, 0x101, 0x8201, 0x101, 0x5f22, 0x101, - 0x5f22, 0x101, 0x38c7, 0x201, 0xd84c, 0xdeb8, 0x201, 0xd858, - 0xddda, 0x101, 0x5f62, 0x101, 0x5f6b, 0x101, 0x38e3, 0x101, - 0x5f9a, 0x101, 0x5fcd, 0x101, 0x5fd7, 0x101, 0x5ff9, 0x101, - 0x6081, 0x101, 0x393a, 0x101, 0x391c, 0x101, 0x6094, 0x201, - 0xd849, 0xded4, 0x101, 0x60c7, 0x101, 0x6148, 0x101, 0x614c, - 0x101, 0x614e, 0x101, 0x614c, 0x101, 0x617a, 0x101, 0x618e, - 0x101, 0x61b2, 0x101, 0x61a4, 0x101, 0x61af, 0x101, 0x61de, - 0x101, 0x61f2, 0x101, 0x61f6, 0x101, 0x6210, 0x101, 0x621b, - 0x101, 0x625d, 0x101, 0x62b1, 0x101, 0x62d4, 0x101, 0x6350, - 0x201, 0xd84a, 0xdf0c, 0x101, 0x633d, 0x101, 0x62fc, 0x101, - 0x6368, 0x101, 0x6383, 0x101, 0x63e4, 0x201, 0xd84a, 0xdff1, - 0x101, 0x6422, 0x101, 0x63c5, 0x101, 0x63a9, 0x101, 0x3a2e, - 0x101, 0x6469, 0x101, 0x647e, 0x101, 0x649d, 0x101, 0x6477, - 0x101, 0x3a6c, 0x101, 0x654f, 0x101, 0x656c, 0x201, 0xd84c, - 0xdc0a, 0x101, 0x65e3, 0x101, 0x66f8, 0x101, 0x6649, 0x101, - 0x3b19, 0x101, 0x6691, 0x101, 0x3b08, 0x101, 0x3ae4, 0x101, - 0x5192, 0x101, 0x5195, 0x101, 0x6700, 0x101, 0x669c, 0x101, - 0x80ad, 0x101, 0x43d9, 0x101, 0x6717, 0x101, 0x671b, 0x101, - 0x6721, 0x101, 0x675e, 0x101, 0x6753, 0x201, 0xd84c, 0xdfc3, - 0x101, 0x3b49, 0x101, 0x67fa, 0x101, 0x6785, 0x101, 0x6852, - 0x101, 0x6885, 0x201, 0xd84d, 0xdc6d, 0x101, 0x688e, 0x101, - 0x681f, 0x101, 0x6914, 0x101, 0x3b9d, 0x101, 0x6942, 0x101, - 0x69a3, 0x101, 0x69ea, 0x101, 0x6aa8, 0x201, 0xd84d, 0xdea3, - 0x101, 0x6adb, 0x101, 0x3c18, 0x101, 0x6b21, 0x201, 0xd84e, - 0xdca7, 0x101, 0x6b54, 0x101, 0x3c4e, 0x101, 0x6b72, 0x101, - 0x6b9f, 0x101, 0x6bba, 0x101, 0x6bbb, 0x201, 0xd84e, 0xde8d, - 0x201, 0xd847, 0xdd0b, 0x201, 0xd84e, 0xdefa, 0x101, 0x6c4e, - 0x201, 0xd84f, 0xdcbc, 0x101, 0x6cbf, 0x101, 0x6ccd, 0x101, - 0x6c67, 0x101, 0x6d16, 0x101, 0x6d3e, 0x101, 0x6d77, 0x101, - 0x6d41, 0x101, 0x6d69, 0x101, 0x6d78, 0x101, 0x6d85, 0x201, - 0xd84f, 0xdd1e, 0x101, 0x6d34, 0x101, 0x6e2f, 0x101, 0x6e6e, - 0x101, 0x3d33, 0x101, 0x6ecb, 0x101, 0x6ec7, 0x201, 0xd84f, - 0xded1, 0x101, 0x6df9, 0x101, 0x6f6e, 0x201, 0xd84f, 0xdf5e, - 0x201, 0xd84f, 0xdf8e, 0x101, 0x6fc6, 0x101, 0x7039, 0x101, - 0x701e, 0x101, 0x701b, 0x101, 0x3d96, 0x101, 0x704a, 0x101, - 0x707d, 0x101, 0x7077, 0x101, 0x70ad, 0x201, 0xd841, 0xdd25, - 0x101, 0x7145, 0x201, 0xd850, 0xde63, 0x101, 0x719c, 0x201, - 0xd850, 0xdfab, 0x101, 0x7228, 0x101, 0x7235, 0x101, 0x7250, - 0x201, 0xd851, 0xde08, 0x101, 0x7280, 0x101, 0x7295, 0x201, - 0xd851, 0xdf35, 0x201, 0xd852, 0xdc14, 0x101, 0x737a, 0x101, - 0x738b, 0x101, 0x3eac, 0x101, 0x73a5, 0x101, 0x3eb8, 0x101, - 0x3eb8, 0x101, 0x7447, 0x101, 0x745c, 0x101, 0x7471, 0x101, - 0x7485, 0x101, 0x74ca, 0x101, 0x3f1b, 0x101, 0x7524, 0x201, - 0xd853, 0xdc36, 0x101, 0x753e, 0x201, 0xd853, 0xdc92, 0x101, - 0x7570, 0x201, 0xd848, 0xdd9f, 0x101, 0x7610, 0x201, 0xd853, - 0xdfa1, 0x201, 0xd853, 0xdfb8, 0x201, 0xd854, 0xdc44, 0x101, - 0x3ffc, 0x101, 0x4008, 0x101, 0x76f4, 0x201, 0xd854, 0xdcf3, - 0x201, 0xd854, 0xdcf2, 0x201, 0xd854, 0xdd19, 0x201, 0xd854, - 0xdd33, 0x101, 0x771e, 0x101, 0x771f, 0x101, 0x771f, 0x101, - 0x774a, 0x101, 0x4039, 0x101, 0x778b, 0x101, 0x4046, 0x101, - 0x4096, 0x201, 0xd855, 0xdc1d, 0x101, 0x784e, 0x101, 0x788c, - 0x101, 0x78cc, 0x101, 0x40e3, 0x201, 0xd855, 0xde26, 0x101, - 0x7956, 0x201, 0xd855, 0xde9a, 0x201, 0xd855, 0xdec5, 0x101, - 0x798f, 0x101, 0x79eb, 0x101, 0x412f, 0x101, 0x7a40, 0x101, - 0x7a4a, 0x101, 0x7a4f, 0x201, 0xd856, 0xdd7c, 0x201, 0xd856, - 0xdea7, 0x201, 0xd856, 0xdea7, 0x101, 0x7aee, 0x101, 0x4202, - 0x201, 0xd856, 0xdfab, 0x101, 0x7bc6, 0x101, 0x7bc9, 0x101, - 0x4227, 0x201, 0xd857, 0xdc80, 0x101, 0x7cd2, 0x101, 0x42a0, - 0x101, 0x7ce8, 0x101, 0x7ce3, 0x101, 0x7d00, 0x201, 0xd857, - 0xdf86, 0x101, 0x7d63, 0x101, 0x4301, 0x101, 0x7dc7, 0x101, - 0x7e02, 0x101, 0x7e45, 0x101, 0x4334, 0x201, 0xd858, 0xde28, - 0x201, 0xd858, 0xde47, 0x101, 0x4359, 0x201, 0xd858, 0xded9, - 0x101, 0x7f7a, 0x201, 0xd858, 0xdf3e, 0x101, 0x7f95, 0x101, - 0x7ffa, 0x101, 0x8005, 0x201, 0xd859, 0xdcda, 0x201, 0xd859, - 0xdd23, 0x101, 0x8060, 0x201, 0xd859, 0xdda8, 0x101, 0x8070, - 0x201, 0xd84c, 0xdf5f, 0x101, 0x43d5, 0x101, 0x80b2, 0x101, - 0x8103, 0x101, 0x440b, 0x101, 0x813e, 0x101, 0x5ab5, 0x201, - 0xd859, 0xdfa7, 0x201, 0xd859, 0xdfb5, 0x201, 0xd84c, 0xdf93, - 0x201, 0xd84c, 0xdf9c, 0x101, 0x8201, 0x101, 0x8204, 0x101, - 0x8f9e, 0x101, 0x446b, 0x101, 0x8291, 0x101, 0x828b, 0x101, - 0x829d, 0x101, 0x52b3, 0x101, 0x82b1, 0x101, 0x82b3, 0x101, - 0x82bd, 0x101, 0x82e6, 0x201, 0xd85a, 0xdf3c, 0x101, 0x82e5, - 0x101, 0x831d, 0x101, 0x8363, 0x101, 0x83ad, 0x101, 0x8323, - 0x101, 0x83bd, 0x101, 0x83e7, 0x101, 0x8457, 0x101, 0x8353, - 0x101, 0x83ca, 0x101, 0x83cc, 0x101, 0x83dc, 0x201, 0xd85b, - 0xdc36, 0x201, 0xd85b, 0xdd6b, 0x201, 0xd85b, 0xdcd5, 0x101, - 0x452b, 0x101, 0x84f1, 0x101, 0x84f3, 0x101, 0x8516, 0x201, - 0xd85c, 0xdfca, 0x101, 0x8564, 0x201, 0xd85b, 0xdf2c, 0x101, - 0x455d, 0x101, 0x4561, 0x201, 0xd85b, 0xdfb1, 0x201, 0xd85c, - 0xdcd2, 0x101, 0x456b, 0x101, 0x8650, 0x101, 0x865c, 0x101, - 0x8667, 0x101, 0x8669, 0x101, 0x86a9, 0x101, 0x8688, 0x101, - 0x870e, 0x101, 0x86e2, 0x101, 0x8779, 0x101, 0x8728, 0x101, - 0x876b, 0x101, 0x8786, 0x101, 0x45d7, 0x101, 0x87e1, 0x101, - 0x8801, 0x101, 0x45f9, 0x101, 0x8860, 0x101, 0x8863, 0x201, - 0xd85d, 0xde67, 0x101, 0x88d7, 0x101, 0x88de, 0x101, 0x4635, - 0x101, 0x88fa, 0x101, 0x34bb, 0x201, 0xd85e, 0xdcae, 0x201, - 0xd85e, 0xdd66, 0x101, 0x46be, 0x101, 0x46c7, 0x101, 0x8aa0, - 0x101, 0x8aed, 0x101, 0x8b8a, 0x101, 0x8c55, 0x201, 0xd85f, - 0xdca8, 0x101, 0x8cab, 0x101, 0x8cc1, 0x101, 0x8d1b, 0x101, - 0x8d77, 0x201, 0xd85f, 0xdf2f, 0x201, 0xd842, 0xdc04, 0x101, - 0x8dcb, 0x101, 0x8dbc, 0x101, 0x8df0, 0x201, 0xd842, 0xdcde, - 0x101, 0x8ed4, 0x101, 0x8f38, 0x201, 0xd861, 0xddd2, 0x201, - 0xd861, 0xdded, 0x101, 0x9094, 0x101, 0x90f1, 0x101, 0x9111, - 0x201, 0xd861, 0xdf2e, 0x101, 0x911b, 0x101, 0x9238, 0x101, - 0x92d7, 0x101, 0x92d8, 0x101, 0x927c, 0x101, 0x93f9, 0x101, - 0x9415, 0x201, 0xd862, 0xdffa, 0x101, 0x958b, 0x101, 0x4995, - 0x101, 0x95b7, 0x201, 0xd863, 0xdd77, 0x101, 0x49e6, 0x101, - 0x96c3, 0x101, 0x5db2, 0x101, 0x9723, 0x201, 0xd864, 0xdd45, - 0x201, 0xd864, 0xde1a, 0x101, 0x4a6e, 0x101, 0x4a76, 0x101, - 0x97e0, 0x201, 0xd865, 0xdc0a, 0x101, 0x4ab2, 0x201, 0xd865, - 0xdc96, 0x101, 0x980b, 0x101, 0x980b, 0x101, 0x9829, 0x201, - 0xd865, 0xddb6, 0x101, 0x98e2, 0x101, 0x4b33, 0x101, 0x9929, - 0x101, 0x99a7, 0x101, 0x99c2, 0x101, 0x99fe, 0x101, 0x4bce, - 0x201, 0xd866, 0xdf30, 0x101, 0x9b12, 0x101, 0x9c40, 0x101, - 0x9cfd, 0x101, 0x4cce, 0x101, 0x4ced, 0x101, 0x9d67, 0x201, - 0xd868, 0xdcce, 0x101, 0x4cf8, 0x201, 0xd868, 0xdd05, 0x201, - 0xd868, 0xde0e, 0x201, 0xd868, 0xde91, 0x101, 0x9ebb, 0x101, - 0x4d56, 0x101, 0x9ef9, 0x101, 0x9efe, 0x101, 0x9f05, 0x101, - 0x9f0f, 0x101, 0x9f16, 0x101, 0x9f3b, 0x201, 0xd869, 0xde00 -}; - -static const unsigned short uc_ligature_trie[] = { - // 0 - 0x3100 - - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 663, 695, 727, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 759, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 791, 631, 631, 631, 823, 855, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 887, 919, 631, 631, 951, 983, 631, - 631, 631, 1015, 631, 631, 631, 1047, 631, - 631, 1079, 1111, 631, 631, 631, 1143, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - - 631, 1175, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 1207, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - - 631, 631, 631, 631, 1239, 631, 631, 631, - - // 0x3100 - 0x12000 - - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1527, - 1783, 1271, 1271, 1271, 1271, 1271, 1271, 1271, - 1271, 1271, 1271, 1271, 1271, 1271, 1271, - - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0x0, 0xa9, 0x194, 0x1d5, 0x20e, 0xffff, 0x267, 0x2a8, - 0x305, 0x372, 0x3a3, 0x3b0, 0x3bd, 0xffff, 0xffff, 0x408, - 0xffff, 0x425, 0xffff, 0x43e, 0x45b, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0x47c, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0x485, 0x4da, 0x4df, 0x4e4, 0x4ed, - 0x51a, 0xffff, 0xffff, 0xffff, 0xffff, 0x52f, 0x548, 0xffff, - 0x54d, 0x55a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x57d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0x5d6, 0xffff, 0xffff, 0x611, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0x690, 0x693, 0x6a0, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0x6a3, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6aa, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6ad, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6b0, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6b3, 0x6b6, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6b9, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6be, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6c3, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0x6c6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6c9, 0x6d0, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6d3, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6d8, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0x6db, 0xffff, 0xffff, 0xffff, 0xffff, 0x6e0, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6e3, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6e6, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6e9, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0x700, 0x761, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0x776, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x783, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff -}; - -#define GET_LIGATURE_INDEX(ucs4) \ - (ucs4 < 0x3100 \ - ? (uc_ligature_trie[uc_ligature_trie[ucs4>>5] + (ucs4 & 0x1f)]) \ - : (ucs4 < 0x12000\ - ? uc_ligature_trie[uc_ligature_trie[((ucs4 - 0x3100)>>8) + 0x188] + (ucs4 & 0xff)]\ - : 0xffff)) - -static const unsigned short uc_ligature_map[] = { - 0x54, 0x41, 0xc0, 0x45, 0xc8, 0x49, 0xcc, 0x4e, - 0x1f8, 0x4f, 0xd2, 0x55, 0xd9, 0x57, 0x1e80, 0x59, - 0x1ef2, 0x61, 0xe0, 0x65, 0xe8, 0x69, 0xec, 0x6e, - 0x1f9, 0x6f, 0xf2, 0x75, 0xf9, 0x77, 0x1e81, 0x79, - 0x1ef3, 0xa8, 0x1fed, 0xc2, 0x1ea6, 0xca, 0x1ec0, 0xd4, - 0x1ed2, 0xdc, 0x1db, 0xe2, 0x1ea7, 0xea, 0x1ec1, 0xf4, - 0x1ed3, 0xfc, 0x1dc, 0x102, 0x1eb0, 0x103, 0x1eb1, 0x112, - 0x1e14, 0x113, 0x1e15, 0x14c, 0x1e50, 0x14d, 0x1e51, 0x1a0, - 0x1edc, 0x1a1, 0x1edd, 0x1af, 0x1eea, 0x1b0, 0x1eeb, 0x391, - 0x1fba, 0x395, 0x1fc8, 0x397, 0x1fca, 0x399, 0x1fda, 0x39f, - 0x1ff8, 0x3a5, 0x1fea, 0x3a9, 0x1ffa, 0x3b1, 0x1f70, 0x3b5, - 0x1f72, 0x3b7, 0x1f74, 0x3b9, 0x1f76, 0x3bf, 0x1f78, 0x3c5, - 0x1f7a, 0x3c9, 0x1f7c, 0x3ca, 0x1fd2, 0x3cb, 0x1fe2, 0x415, - 0x400, 0x418, 0x40d, 0x435, 0x450, 0x438, 0x45d, 0x1f00, - 0x1f02, 0x1f01, 0x1f03, 0x1f08, 0x1f0a, 0x1f09, 0x1f0b, 0x1f10, - 0x1f12, 0x1f11, 0x1f13, 0x1f18, 0x1f1a, 0x1f19, 0x1f1b, 0x1f20, - 0x1f22, 0x1f21, 0x1f23, 0x1f28, 0x1f2a, 0x1f29, 0x1f2b, 0x1f30, - 0x1f32, 0x1f31, 0x1f33, 0x1f38, 0x1f3a, 0x1f39, 0x1f3b, 0x1f40, - 0x1f42, 0x1f41, 0x1f43, 0x1f48, 0x1f4a, 0x1f49, 0x1f4b, 0x1f50, - 0x1f52, 0x1f51, 0x1f53, 0x1f59, 0x1f5b, 0x1f60, 0x1f62, 0x1f61, - 0x1f63, 0x1f68, 0x1f6a, 0x1f69, 0x1f6b, 0x1fbf, 0x1fcd, 0x1ffe, - 0x1fdd, 0x75, 0x41, 0xc1, 0x43, 0x106, 0x45, 0xc9, - 0x47, 0x1f4, 0x49, 0xcd, 0x4b, 0x1e30, 0x4c, 0x139, - 0x4d, 0x1e3e, 0x4e, 0x143, 0x4f, 0xd3, 0x50, 0x1e54, - 0x52, 0x154, 0x53, 0x15a, 0x55, 0xda, 0x57, 0x1e82, - 0x59, 0xdd, 0x5a, 0x179, 0x61, 0xe1, 0x63, 0x107, - 0x65, 0xe9, 0x67, 0x1f5, 0x69, 0xed, 0x6b, 0x1e31, - 0x6c, 0x13a, 0x6d, 0x1e3f, 0x6e, 0x144, 0x6f, 0xf3, - 0x70, 0x1e55, 0x72, 0x155, 0x73, 0x15b, 0x75, 0xfa, - 0x77, 0x1e83, 0x79, 0xfd, 0x7a, 0x17a, 0xa8, 0x385, - 0xc2, 0x1ea4, 0xc5, 0x1fa, 0xc6, 0x1fc, 0xc7, 0x1e08, - 0xca, 0x1ebe, 0xcf, 0x1e2e, 0xd4, 0x1ed0, 0xd5, 0x1e4c, - 0xd8, 0x1fe, 0xdc, 0x1d7, 0xe2, 0x1ea5, 0xe5, 0x1fb, - 0xe6, 0x1fd, 0xe7, 0x1e09, 0xea, 0x1ebf, 0xef, 0x1e2f, - 0xf4, 0x1ed1, 0xf5, 0x1e4d, 0xf8, 0x1ff, 0xfc, 0x1d8, - 0x102, 0x1eae, 0x103, 0x1eaf, 0x112, 0x1e16, 0x113, 0x1e17, - 0x14c, 0x1e52, 0x14d, 0x1e53, 0x168, 0x1e78, 0x169, 0x1e79, - 0x1a0, 0x1eda, 0x1a1, 0x1edb, 0x1af, 0x1ee8, 0x1b0, 0x1ee9, - 0x391, 0x386, 0x395, 0x388, 0x397, 0x389, 0x399, 0x38a, - 0x39f, 0x38c, 0x3a5, 0x38e, 0x3a9, 0x38f, 0x3b1, 0x3ac, - 0x3b5, 0x3ad, 0x3b7, 0x3ae, 0x3b9, 0x3af, 0x3bf, 0x3cc, - 0x3c5, 0x3cd, 0x3c9, 0x3ce, 0x3ca, 0x390, 0x3cb, 0x3b0, - 0x3d2, 0x3d3, 0x413, 0x403, 0x41a, 0x40c, 0x433, 0x453, - 0x43a, 0x45c, 0x1f00, 0x1f04, 0x1f01, 0x1f05, 0x1f08, 0x1f0c, - 0x1f09, 0x1f0d, 0x1f10, 0x1f14, 0x1f11, 0x1f15, 0x1f18, 0x1f1c, - 0x1f19, 0x1f1d, 0x1f20, 0x1f24, 0x1f21, 0x1f25, 0x1f28, 0x1f2c, - 0x1f29, 0x1f2d, 0x1f30, 0x1f34, 0x1f31, 0x1f35, 0x1f38, 0x1f3c, - 0x1f39, 0x1f3d, 0x1f40, 0x1f44, 0x1f41, 0x1f45, 0x1f48, 0x1f4c, - 0x1f49, 0x1f4d, 0x1f50, 0x1f54, 0x1f51, 0x1f55, 0x1f59, 0x1f5d, - 0x1f60, 0x1f64, 0x1f61, 0x1f65, 0x1f68, 0x1f6c, 0x1f69, 0x1f6d, - 0x1fbf, 0x1fce, 0x1ffe, 0x1fde, 0x20, 0x41, 0xc2, 0x43, - 0x108, 0x45, 0xca, 0x47, 0x11c, 0x48, 0x124, 0x49, - 0xce, 0x4a, 0x134, 0x4f, 0xd4, 0x53, 0x15c, 0x55, - 0xdb, 0x57, 0x174, 0x59, 0x176, 0x5a, 0x1e90, 0x61, - 0xe2, 0x63, 0x109, 0x65, 0xea, 0x67, 0x11d, 0x68, - 0x125, 0x69, 0xee, 0x6a, 0x135, 0x6f, 0xf4, 0x73, - 0x15d, 0x75, 0xfb, 0x77, 0x175, 0x79, 0x177, 0x7a, - 0x1e91, 0x1ea0, 0x1eac, 0x1ea1, 0x1ead, 0x1eb8, 0x1ec6, 0x1eb9, - 0x1ec7, 0x1ecc, 0x1ed8, 0x1ecd, 0x1ed9, 0x1c, 0x41, 0xc3, - 0x45, 0x1ebc, 0x49, 0x128, 0x4e, 0xd1, 0x4f, 0xd5, - 0x55, 0x168, 0x56, 0x1e7c, 0x59, 0x1ef8, 0x61, 0xe3, - 0x65, 0x1ebd, 0x69, 0x129, 0x6e, 0xf1, 0x6f, 0xf5, - 0x75, 0x169, 0x76, 0x1e7d, 0x79, 0x1ef9, 0xc2, 0x1eaa, - 0xca, 0x1ec4, 0xd4, 0x1ed6, 0xe2, 0x1eab, 0xea, 0x1ec5, - 0xf4, 0x1ed7, 0x102, 0x1eb4, 0x103, 0x1eb5, 0x1a0, 0x1ee0, - 0x1a1, 0x1ee1, 0x1af, 0x1eee, 0x1b0, 0x1eef, 0x2c, 0x41, - 0x100, 0x45, 0x112, 0x47, 0x1e20, 0x49, 0x12a, 0x4f, - 0x14c, 0x55, 0x16a, 0x59, 0x232, 0x61, 0x101, 0x65, - 0x113, 0x67, 0x1e21, 0x69, 0x12b, 0x6f, 0x14d, 0x75, - 0x16b, 0x79, 0x233, 0xc4, 0x1de, 0xc6, 0x1e2, 0xd5, - 0x22c, 0xd6, 0x22a, 0xdc, 0x1d5, 0xe4, 0x1df, 0xe6, - 0x1e3, 0xf5, 0x22d, 0xf6, 0x22b, 0xfc, 0x1d6, 0x1ea, - 0x1ec, 0x1eb, 0x1ed, 0x226, 0x1e0, 0x227, 0x1e1, 0x22e, - 0x230, 0x22f, 0x231, 0x391, 0x1fb9, 0x399, 0x1fd9, 0x3a5, - 0x1fe9, 0x3b1, 0x1fb1, 0x3b9, 0x1fd1, 0x3c5, 0x1fe1, 0x418, - 0x4e2, 0x423, 0x4ee, 0x438, 0x4e3, 0x443, 0x4ef, 0x1e36, - 0x1e38, 0x1e37, 0x1e39, 0x1e5a, 0x1e5c, 0x1e5b, 0x1e5d, 0x20, - 0x41, 0x102, 0x45, 0x114, 0x47, 0x11e, 0x49, 0x12c, - 0x4f, 0x14e, 0x55, 0x16c, 0x61, 0x103, 0x65, 0x115, - 0x67, 0x11f, 0x69, 0x12d, 0x6f, 0x14f, 0x75, 0x16d, - 0x228, 0x1e1c, 0x229, 0x1e1d, 0x391, 0x1fb8, 0x399, 0x1fd8, - 0x3a5, 0x1fe8, 0x3b1, 0x1fb0, 0x3b9, 0x1fd0, 0x3c5, 0x1fe0, - 0x410, 0x4d0, 0x415, 0x4d6, 0x416, 0x4c1, 0x418, 0x419, - 0x423, 0x40e, 0x430, 0x4d1, 0x435, 0x4d7, 0x436, 0x4c2, - 0x438, 0x439, 0x443, 0x45e, 0x1ea0, 0x1eb6, 0x1ea1, 0x1eb7, - 0x2e, 0x41, 0x226, 0x42, 0x1e02, 0x43, 0x10a, 0x44, - 0x1e0a, 0x45, 0x116, 0x46, 0x1e1e, 0x47, 0x120, 0x48, - 0x1e22, 0x49, 0x130, 0x4d, 0x1e40, 0x4e, 0x1e44, 0x4f, - 0x22e, 0x50, 0x1e56, 0x52, 0x1e58, 0x53, 0x1e60, 0x54, - 0x1e6a, 0x57, 0x1e86, 0x58, 0x1e8a, 0x59, 0x1e8e, 0x5a, - 0x17b, 0x61, 0x227, 0x62, 0x1e03, 0x63, 0x10b, 0x64, - 0x1e0b, 0x65, 0x117, 0x66, 0x1e1f, 0x67, 0x121, 0x68, - 0x1e23, 0x6d, 0x1e41, 0x6e, 0x1e45, 0x6f, 0x22f, 0x70, - 0x1e57, 0x72, 0x1e59, 0x73, 0x1e61, 0x74, 0x1e6b, 0x77, - 0x1e87, 0x78, 0x1e8b, 0x79, 0x1e8f, 0x7a, 0x17c, 0x15a, - 0x1e64, 0x15b, 0x1e65, 0x160, 0x1e66, 0x161, 0x1e67, 0x17f, - 0x1e9b, 0x1e62, 0x1e68, 0x1e63, 0x1e69, 0x36, 0x41, 0xc4, - 0x45, 0xcb, 0x48, 0x1e26, 0x49, 0xcf, 0x4f, 0xd6, - 0x55, 0xdc, 0x57, 0x1e84, 0x58, 0x1e8c, 0x59, 0x178, - 0x61, 0xe4, 0x65, 0xeb, 0x68, 0x1e27, 0x69, 0xef, - 0x6f, 0xf6, 0x74, 0x1e97, 0x75, 0xfc, 0x77, 0x1e85, - 0x78, 0x1e8d, 0x79, 0xff, 0xd5, 0x1e4e, 0xf5, 0x1e4f, - 0x16a, 0x1e7a, 0x16b, 0x1e7b, 0x399, 0x3aa, 0x3a5, 0x3ab, - 0x3b9, 0x3ca, 0x3c5, 0x3cb, 0x3d2, 0x3d4, 0x406, 0x407, - 0x410, 0x4d2, 0x415, 0x401, 0x416, 0x4dc, 0x417, 0x4de, - 0x418, 0x4e4, 0x41e, 0x4e6, 0x423, 0x4f0, 0x427, 0x4f4, - 0x42b, 0x4f8, 0x42d, 0x4ec, 0x430, 0x4d3, 0x435, 0x451, - 0x436, 0x4dd, 0x437, 0x4df, 0x438, 0x4e5, 0x43e, 0x4e7, - 0x443, 0x4f1, 0x447, 0x4f5, 0x44b, 0x4f9, 0x44d, 0x4ed, - 0x456, 0x457, 0x4d8, 0x4da, 0x4d9, 0x4db, 0x4e8, 0x4ea, - 0x4e9, 0x4eb, 0x18, 0x41, 0x1ea2, 0x45, 0x1eba, 0x49, - 0x1ec8, 0x4f, 0x1ece, 0x55, 0x1ee6, 0x59, 0x1ef6, 0x61, - 0x1ea3, 0x65, 0x1ebb, 0x69, 0x1ec9, 0x6f, 0x1ecf, 0x75, - 0x1ee7, 0x79, 0x1ef7, 0xc2, 0x1ea8, 0xca, 0x1ec2, 0xd4, - 0x1ed4, 0xe2, 0x1ea9, 0xea, 0x1ec3, 0xf4, 0x1ed5, 0x102, - 0x1eb2, 0x103, 0x1eb3, 0x1a0, 0x1ede, 0x1a1, 0x1edf, 0x1af, - 0x1eec, 0x1b0, 0x1eed, 0x6, 0x41, 0xc5, 0x55, 0x16e, - 0x61, 0xe5, 0x75, 0x16f, 0x77, 0x1e98, 0x79, 0x1e99, - 0x6, 0x4f, 0x150, 0x55, 0x170, 0x6f, 0x151, 0x75, - 0x171, 0x423, 0x4f2, 0x443, 0x4f3, 0x25, 0x41, 0x1cd, - 0x43, 0x10c, 0x44, 0x10e, 0x45, 0x11a, 0x47, 0x1e6, - 0x48, 0x21e, 0x49, 0x1cf, 0x4b, 0x1e8, 0x4c, 0x13d, - 0x4e, 0x147, 0x4f, 0x1d1, 0x52, 0x158, 0x53, 0x160, - 0x54, 0x164, 0x55, 0x1d3, 0x5a, 0x17d, 0x61, 0x1ce, - 0x63, 0x10d, 0x64, 0x10f, 0x65, 0x11b, 0x67, 0x1e7, - 0x68, 0x21f, 0x69, 0x1d0, 0x6a, 0x1f0, 0x6b, 0x1e9, - 0x6c, 0x13e, 0x6e, 0x148, 0x6f, 0x1d2, 0x72, 0x159, - 0x73, 0x161, 0x74, 0x165, 0x75, 0x1d4, 0x7a, 0x17e, - 0xdc, 0x1d9, 0xfc, 0x1da, 0x1b7, 0x1ee, 0x292, 0x1ef, - 0xe, 0x41, 0x200, 0x45, 0x204, 0x49, 0x208, 0x4f, - 0x20c, 0x52, 0x210, 0x55, 0x214, 0x61, 0x201, 0x65, - 0x205, 0x69, 0x209, 0x6f, 0x20d, 0x72, 0x211, 0x75, - 0x215, 0x474, 0x476, 0x475, 0x477, 0xc, 0x41, 0x202, - 0x45, 0x206, 0x49, 0x20a, 0x4f, 0x20e, 0x52, 0x212, - 0x55, 0x216, 0x61, 0x203, 0x65, 0x207, 0x69, 0x20b, - 0x6f, 0x20f, 0x72, 0x213, 0x75, 0x217, 0xe, 0x391, - 0x1f08, 0x395, 0x1f18, 0x397, 0x1f28, 0x399, 0x1f38, 0x39f, - 0x1f48, 0x3a9, 0x1f68, 0x3b1, 0x1f00, 0x3b5, 0x1f10, 0x3b7, - 0x1f20, 0x3b9, 0x1f30, 0x3bf, 0x1f40, 0x3c1, 0x1fe4, 0x3c5, - 0x1f50, 0x3c9, 0x1f60, 0x10, 0x391, 0x1f09, 0x395, 0x1f19, - 0x397, 0x1f29, 0x399, 0x1f39, 0x39f, 0x1f49, 0x3a1, 0x1fec, - 0x3a5, 0x1f59, 0x3a9, 0x1f69, 0x3b1, 0x1f01, 0x3b5, 0x1f11, - 0x3b7, 0x1f21, 0x3b9, 0x1f31, 0x3bf, 0x1f41, 0x3c1, 0x1fe5, - 0x3c5, 0x1f51, 0x3c9, 0x1f61, 0x4, 0x4f, 0x1a0, 0x55, - 0x1af, 0x6f, 0x1a1, 0x75, 0x1b0, 0x2a, 0x41, 0x1ea0, - 0x42, 0x1e04, 0x44, 0x1e0c, 0x45, 0x1eb8, 0x48, 0x1e24, - 0x49, 0x1eca, 0x4b, 0x1e32, 0x4c, 0x1e36, 0x4d, 0x1e42, - 0x4e, 0x1e46, 0x4f, 0x1ecc, 0x52, 0x1e5a, 0x53, 0x1e62, - 0x54, 0x1e6c, 0x55, 0x1ee4, 0x56, 0x1e7e, 0x57, 0x1e88, - 0x59, 0x1ef4, 0x5a, 0x1e92, 0x61, 0x1ea1, 0x62, 0x1e05, - 0x64, 0x1e0d, 0x65, 0x1eb9, 0x68, 0x1e25, 0x69, 0x1ecb, - 0x6b, 0x1e33, 0x6c, 0x1e37, 0x6d, 0x1e43, 0x6e, 0x1e47, - 0x6f, 0x1ecd, 0x72, 0x1e5b, 0x73, 0x1e63, 0x74, 0x1e6d, - 0x75, 0x1ee5, 0x76, 0x1e7f, 0x77, 0x1e89, 0x79, 0x1ef5, - 0x7a, 0x1e93, 0x1a0, 0x1ee2, 0x1a1, 0x1ee3, 0x1af, 0x1ef0, - 0x1b0, 0x1ef1, 0x2, 0x55, 0x1e72, 0x75, 0x1e73, 0x2, - 0x41, 0x1e00, 0x61, 0x1e01, 0x4, 0x53, 0x218, 0x54, - 0x21a, 0x73, 0x219, 0x74, 0x21b, 0x16, 0x43, 0xc7, - 0x44, 0x1e10, 0x45, 0x228, 0x47, 0x122, 0x48, 0x1e28, - 0x4b, 0x136, 0x4c, 0x13b, 0x4e, 0x145, 0x52, 0x156, - 0x53, 0x15e, 0x54, 0x162, 0x63, 0xe7, 0x64, 0x1e11, - 0x65, 0x229, 0x67, 0x123, 0x68, 0x1e29, 0x6b, 0x137, - 0x6c, 0x13c, 0x6e, 0x146, 0x72, 0x157, 0x73, 0x15f, - 0x74, 0x163, 0xa, 0x41, 0x104, 0x45, 0x118, 0x49, - 0x12e, 0x4f, 0x1ea, 0x55, 0x172, 0x61, 0x105, 0x65, - 0x119, 0x69, 0x12f, 0x6f, 0x1eb, 0x75, 0x173, 0xc, - 0x44, 0x1e12, 0x45, 0x1e18, 0x4c, 0x1e3c, 0x4e, 0x1e4a, - 0x54, 0x1e70, 0x55, 0x1e76, 0x64, 0x1e13, 0x65, 0x1e19, - 0x6c, 0x1e3d, 0x6e, 0x1e4b, 0x74, 0x1e71, 0x75, 0x1e77, - 0x2, 0x48, 0x1e2a, 0x68, 0x1e2b, 0x6, 0x45, 0x1e1a, - 0x49, 0x1e2c, 0x55, 0x1e74, 0x65, 0x1e1b, 0x69, 0x1e2d, - 0x75, 0x1e75, 0x11, 0x42, 0x1e06, 0x44, 0x1e0e, 0x4b, - 0x1e34, 0x4c, 0x1e3a, 0x4e, 0x1e48, 0x52, 0x1e5e, 0x54, - 0x1e6e, 0x5a, 0x1e94, 0x62, 0x1e07, 0x64, 0x1e0f, 0x68, - 0x1e96, 0x6b, 0x1e35, 0x6c, 0x1e3b, 0x6e, 0x1e49, 0x72, - 0x1e5f, 0x74, 0x1e6f, 0x7a, 0x1e95, 0x2c, 0x3c, 0x226e, - 0x3d, 0x2260, 0x3e, 0x226f, 0x2190, 0x219a, 0x2192, 0x219b, - 0x2194, 0x21ae, 0x21d0, 0x21cd, 0x21d2, 0x21cf, 0x21d4, 0x21ce, - 0x2203, 0x2204, 0x2208, 0x2209, 0x220b, 0x220c, 0x2223, 0x2224, - 0x2225, 0x2226, 0x223c, 0x2241, 0x2243, 0x2244, 0x2245, 0x2247, - 0x2248, 0x2249, 0x224d, 0x226d, 0x2261, 0x2262, 0x2264, 0x2270, - 0x2265, 0x2271, 0x2272, 0x2274, 0x2273, 0x2275, 0x2276, 0x2278, - 0x2277, 0x2279, 0x227a, 0x2280, 0x227b, 0x2281, 0x227c, 0x22e0, - 0x227d, 0x22e1, 0x2282, 0x2284, 0x2283, 0x2285, 0x2286, 0x2288, - 0x2287, 0x2289, 0x2291, 0x22e2, 0x2292, 0x22e3, 0x22a2, 0x22ac, - 0x22a8, 0x22ad, 0x22a9, 0x22ae, 0x22ab, 0x22af, 0x22b2, 0x22ea, - 0x22b3, 0x22eb, 0x22b4, 0x22ec, 0x22b5, 0x22ed, 0x1d, 0xa8, - 0x1fc1, 0x3b1, 0x1fb6, 0x3b7, 0x1fc6, 0x3b9, 0x1fd6, 0x3c5, - 0x1fe6, 0x3c9, 0x1ff6, 0x3ca, 0x1fd7, 0x3cb, 0x1fe7, 0x1f00, - 0x1f06, 0x1f01, 0x1f07, 0x1f08, 0x1f0e, 0x1f09, 0x1f0f, 0x1f20, - 0x1f26, 0x1f21, 0x1f27, 0x1f28, 0x1f2e, 0x1f29, 0x1f2f, 0x1f30, - 0x1f36, 0x1f31, 0x1f37, 0x1f38, 0x1f3e, 0x1f39, 0x1f3f, 0x1f50, - 0x1f56, 0x1f51, 0x1f57, 0x1f59, 0x1f5f, 0x1f60, 0x1f66, 0x1f61, - 0x1f67, 0x1f68, 0x1f6e, 0x1f69, 0x1f6f, 0x1fbf, 0x1fcf, 0x1ffe, - 0x1fdf, 0x3f, 0x391, 0x1fbc, 0x397, 0x1fcc, 0x3a9, 0x1ffc, - 0x3ac, 0x1fb4, 0x3ae, 0x1fc4, 0x3b1, 0x1fb3, 0x3b7, 0x1fc3, - 0x3c9, 0x1ff3, 0x3ce, 0x1ff4, 0x1f00, 0x1f80, 0x1f01, 0x1f81, - 0x1f02, 0x1f82, 0x1f03, 0x1f83, 0x1f04, 0x1f84, 0x1f05, 0x1f85, - 0x1f06, 0x1f86, 0x1f07, 0x1f87, 0x1f08, 0x1f88, 0x1f09, 0x1f89, - 0x1f0a, 0x1f8a, 0x1f0b, 0x1f8b, 0x1f0c, 0x1f8c, 0x1f0d, 0x1f8d, - 0x1f0e, 0x1f8e, 0x1f0f, 0x1f8f, 0x1f20, 0x1f90, 0x1f21, 0x1f91, - 0x1f22, 0x1f92, 0x1f23, 0x1f93, 0x1f24, 0x1f94, 0x1f25, 0x1f95, - 0x1f26, 0x1f96, 0x1f27, 0x1f97, 0x1f28, 0x1f98, 0x1f29, 0x1f99, - 0x1f2a, 0x1f9a, 0x1f2b, 0x1f9b, 0x1f2c, 0x1f9c, 0x1f2d, 0x1f9d, - 0x1f2e, 0x1f9e, 0x1f2f, 0x1f9f, 0x1f60, 0x1fa0, 0x1f61, 0x1fa1, - 0x1f62, 0x1fa2, 0x1f63, 0x1fa3, 0x1f64, 0x1fa4, 0x1f65, 0x1fa5, - 0x1f66, 0x1fa6, 0x1f67, 0x1fa7, 0x1f68, 0x1fa8, 0x1f69, 0x1fa9, - 0x1f6a, 0x1faa, 0x1f6b, 0x1fab, 0x1f6c, 0x1fac, 0x1f6d, 0x1fad, - 0x1f6e, 0x1fae, 0x1f6f, 0x1faf, 0x1f70, 0x1fb2, 0x1f74, 0x1fc2, - 0x1f7c, 0x1ff2, 0x1fb6, 0x1fb7, 0x1fc6, 0x1fc7, 0x1ff6, 0x1ff7, - 0x1, 0x627, 0x622, 0x6, 0x627, 0x623, 0x648, 0x624, - 0x64a, 0x626, 0x6c1, 0x6c2, 0x6d2, 0x6d3, 0x6d5, 0x6c0, - 0x1, 0x627, 0x625, 0x3, 0x928, 0x929, 0x930, 0x931, - 0x933, 0x934, 0x1, 0x9c7, 0x9cb, 0x1, 0x9c7, 0x9cc, - 0x1, 0xb47, 0xb4b, 0x1, 0xb47, 0xb48, 0x1, 0xb47, - 0xb4c, 0x2, 0xbc6, 0xbca, 0xbc7, 0xbcb, 0x2, 0xb92, - 0xb94, 0xbc6, 0xbcc, 0x1, 0xc46, 0xc48, 0x1, 0xcc6, - 0xcca, 0x3, 0xcbf, 0xcc0, 0xcc6, 0xcc7, 0xcca, 0xccb, - 0x1, 0xcc6, 0xcc8, 0x2, 0xd46, 0xd4a, 0xd47, 0xd4b, - 0x1, 0xd46, 0xd4c, 0x2, 0xdd9, 0xdda, 0xddc, 0xddd, - 0x1, 0xdd9, 0xddc, 0x1, 0xdd9, 0xdde, 0x1, 0x1025, - 0x1026, 0xb, 0x1b05, 0x1b06, 0x1b07, 0x1b08, 0x1b09, 0x1b0a, - 0x1b0b, 0x1b0c, 0x1b0d, 0x1b0e, 0x1b11, 0x1b12, 0x1b3a, 0x1b3b, - 0x1b3c, 0x1b3d, 0x1b3e, 0x1b40, 0x1b3f, 0x1b41, 0x1b42, 0x1b43, - 0x30, 0x3046, 0x3094, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, - 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, - 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, - 0x3060, 0x3061, 0x3062, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, - 0x3069, 0x306f, 0x3070, 0x3072, 0x3073, 0x3075, 0x3076, 0x3078, - 0x3079, 0x307b, 0x307c, 0x309d, 0x309e, 0x30a6, 0x30f4, 0x30ab, - 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0, 0x30b1, 0x30b2, 0x30b3, - 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8, 0x30b9, 0x30ba, 0x30bb, - 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0, 0x30c1, 0x30c2, 0x30c4, - 0x30c5, 0x30c6, 0x30c7, 0x30c8, 0x30c9, 0x30cf, 0x30d0, 0x30d2, - 0x30d3, 0x30d5, 0x30d6, 0x30d8, 0x30d9, 0x30db, 0x30dc, 0x30ef, - 0x30f7, 0x30f0, 0x30f8, 0x30f1, 0x30f9, 0x30f2, 0x30fa, 0x30fd, - 0x30fe, 0xa, 0x306f, 0x3071, 0x3072, 0x3074, 0x3075, 0x3077, - 0x3078, 0x307a, 0x307b, 0x307d, 0x30cf, 0x30d1, 0x30d2, 0x30d4, - 0x30d5, 0x30d7, 0x30d8, 0x30da, 0x30db, 0x30dd, 0x3, 0xd804, - 0xdc99, 0xd804, 0xdc9a, 0xd804, 0xdc9b, 0xd804, 0xdc9c, 0xd804, - 0xdca5, 0xd804, 0xdcab, 0x2, 0xd804, 0xdd31, 0xd804, 0xdd2e, - 0xd804, 0xdd32, 0xd804, 0xdd2f -}; - - -struct NormalizationCorrection { - uint ucs4; - uint old_mapping; - int version; -}; - -static const NormalizationCorrection uc_normalization_corrections[] = { - { 0xf951, 0x96fb, 6 }, - { 0x2f868, 0x2136a, 7 }, - { 0x2f874, 0x5f33, 7 }, - { 0x2f91f, 0x43ab, 7 }, - { 0x2f95f, 0x7aae, 7 }, - { 0x2f9bf, 0x4d57, 7 }, -}; - -enum { NumNormalizationCorrections = 6 }; -enum { NormalizationCorrectionsVersionMax = 7 }; - -} // namespace QUnicodeTables - -using namespace QUnicodeTables; - -QT_END_NAMESPACE diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/windows/qwindowskeymapper.cpp b/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/windows/qwindowskeymapper.cpp deleted file mode 100644 index 3fd084829..000000000 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/windows/qwindowskeymapper.cpp +++ /dev/null @@ -1,1223 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL21$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 or version 3 as published by the Free -** Software Foundation and appearing in the file LICENSE.LGPLv21 and -** LICENSE.LGPLv3 included in the packaging of this file. Please review the -** following information to ensure the GNU Lesser General Public License -** requirements will be met: https://www.gnu.org/licenses/lgpl.html and -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwindowskeymapper.h" -#include "qwindowscontext.h" -#include "qwindowswindow.h" -#include "qwindowsguieventdispatcher.h" -#include "qwindowsscaling.h" - -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -/*! - \class QWindowsKeyMapper - \brief Translates Windows keys to QWindowSystemInterface events. - \internal - \ingroup qt-lighthouse-win - - In addition, handles some special keys to display system menus, etc. - The code originates from \c qkeymapper_win.cpp. -*/ - -QWindowsKeyMapper::QWindowsKeyMapper() - : m_useRTLExtensions(false), m_keyGrabber(0) -{ - memset(keyLayout, 0, sizeof(keyLayout)); -} - -QWindowsKeyMapper::~QWindowsKeyMapper() -{ -} - -#ifndef LANG_PASHTO -#define LANG_PASHTO 0x63 -#endif -#ifndef LANG_SYRIAC -#define LANG_SYRIAC 0x5a -#endif -#ifndef LANG_DIVEHI -#define LANG_DIVEHI 0x65 -#endif -#ifndef VK_OEM_PLUS -#define VK_OEM_PLUS 0xBB -#endif -#ifndef VK_OEM_3 -#define VK_OEM_3 0xC0 -#endif - -// We not only need the scancode itself but also the extended bit of key messages. Thus we need -// the additional bit when masking the scancode. -enum { scancodeBitmask = 0x1ff }; - -// Key recorder ------------------------------------------------------------------------[ start ] -- -struct KeyRecord { - KeyRecord(int c, int a, int s, const QString &t) : code(c), ascii(a), state(s), text(t) {} - KeyRecord() {} - - int code; - int ascii; - int state; - QString text; -}; - -// We need to record the pressed keys in order to decide, whether the key event is an autorepeat -// event. As soon as its state changes, the chain of autorepeat events will be broken. -static const int QT_MAX_KEY_RECORDINGS = 64; // User has LOTS of fingers... -struct KeyRecorder -{ - KeyRecorder() : nrecs(0) {} - - inline KeyRecord *findKey(int code, bool remove); - inline void storeKey(int code, int ascii, int state, const QString& text); - inline void clearKeys(); - - int nrecs; - KeyRecord deleted_record; // A copy of last entry removed from records[] - KeyRecord records[QT_MAX_KEY_RECORDINGS]; -}; -static KeyRecorder key_recorder; - -KeyRecord *KeyRecorder::findKey(int code, bool remove) -{ - KeyRecord *result = 0; - for (int i = 0; i < nrecs; ++i) { - if (records[i].code == code) { - if (remove) { - deleted_record = records[i]; - // Move rest down, and decrease count - while (i + 1 < nrecs) { - records[i] = records[i + 1]; - ++i; - } - --nrecs; - result = &deleted_record; - } else { - result = &records[i]; - } - break; - } - } - return result; -} - -void KeyRecorder::storeKey(int code, int ascii, int state, const QString& text) -{ - Q_ASSERT_X(nrecs != QT_MAX_KEY_RECORDINGS, - "Internal KeyRecorder", - "Keyboard recorder buffer overflow, consider increasing QT_MAX_KEY_RECORDINGS"); - - if (nrecs == QT_MAX_KEY_RECORDINGS) { - qWarning("Qt: Internal keyboard buffer overflow"); - return; - } - records[nrecs++] = KeyRecord(code,ascii,state,text); -} - -void KeyRecorder::clearKeys() -{ - nrecs = 0; -} -// Key recorder --------------------------------------------------------------------------[ end ] -- - - -// Key translation ---------------------------------------------------------------------[ start ] -- -// Meaning of values: -// 0 = Character output key, needs keyboard driver mapping -// Key_unknown = Unknown Virtual Key, no translation possible, ignore -static const uint KeyTbl[] = { // Keyboard mapping table - // Dec | Hex | Windows Virtual key - Qt::Key_unknown, // 0 0x00 - Qt::Key_unknown, // 1 0x01 VK_LBUTTON | Left mouse button - Qt::Key_unknown, // 2 0x02 VK_RBUTTON | Right mouse button - Qt::Key_Cancel, // 3 0x03 VK_CANCEL | Control-Break processing - Qt::Key_unknown, // 4 0x04 VK_MBUTTON | Middle mouse button - Qt::Key_unknown, // 5 0x05 VK_XBUTTON1 | X1 mouse button - Qt::Key_unknown, // 6 0x06 VK_XBUTTON2 | X2 mouse button - Qt::Key_unknown, // 7 0x07 -- unassigned -- - Qt::Key_Backspace, // 8 0x08 VK_BACK | BackSpace key - Qt::Key_Tab, // 9 0x09 VK_TAB | Tab key - Qt::Key_unknown, // 10 0x0A -- reserved -- - Qt::Key_unknown, // 11 0x0B -- reserved -- - Qt::Key_Clear, // 12 0x0C VK_CLEAR | Clear key - Qt::Key_Return, // 13 0x0D VK_RETURN | Enter key - Qt::Key_unknown, // 14 0x0E -- unassigned -- - Qt::Key_unknown, // 15 0x0F -- unassigned -- - Qt::Key_Shift, // 16 0x10 VK_SHIFT | Shift key - Qt::Key_Control, // 17 0x11 VK_CONTROL | Ctrl key - Qt::Key_Alt, // 18 0x12 VK_MENU | Alt key - Qt::Key_Pause, // 19 0x13 VK_PAUSE | Pause key - Qt::Key_CapsLock, // 20 0x14 VK_CAPITAL | Caps-Lock - Qt::Key_unknown, // 21 0x15 VK_KANA / VK_HANGUL | IME Kana or Hangul mode - Qt::Key_unknown, // 22 0x16 -- unassigned -- - Qt::Key_unknown, // 23 0x17 VK_JUNJA | IME Junja mode - Qt::Key_unknown, // 24 0x18 VK_FINAL | IME final mode - Qt::Key_unknown, // 25 0x19 VK_HANJA / VK_KANJI | IME Hanja or Kanji mode - Qt::Key_unknown, // 26 0x1A -- unassigned -- - Qt::Key_Escape, // 27 0x1B VK_ESCAPE | Esc key - Qt::Key_unknown, // 28 0x1C VK_CONVERT | IME convert - Qt::Key_unknown, // 29 0x1D VK_NONCONVERT | IME non-convert - Qt::Key_unknown, // 30 0x1E VK_ACCEPT | IME accept - Qt::Key_Mode_switch,// 31 0x1F VK_MODECHANGE | IME mode change request - Qt::Key_Space, // 32 0x20 VK_SPACE | Spacebar - Qt::Key_PageUp, // 33 0x21 VK_PRIOR | Page Up key - Qt::Key_PageDown, // 34 0x22 VK_NEXT | Page Down key - Qt::Key_End, // 35 0x23 VK_END | End key - Qt::Key_Home, // 36 0x24 VK_HOME | Home key - Qt::Key_Left, // 37 0x25 VK_LEFT | Left arrow key - Qt::Key_Up, // 38 0x26 VK_UP | Up arrow key - Qt::Key_Right, // 39 0x27 VK_RIGHT | Right arrow key - Qt::Key_Down, // 40 0x28 VK_DOWN | Down arrow key - Qt::Key_Select, // 41 0x29 VK_SELECT | Select key - Qt::Key_Printer, // 42 0x2A VK_PRINT | Print key - Qt::Key_Execute, // 43 0x2B VK_EXECUTE | Execute key - Qt::Key_Print, // 44 0x2C VK_SNAPSHOT | Print Screen key - Qt::Key_Insert, // 45 0x2D VK_INSERT | Ins key - Qt::Key_Delete, // 46 0x2E VK_DELETE | Del key - Qt::Key_Help, // 47 0x2F VK_HELP | Help key - 0, // 48 0x30 (VK_0) | 0 key - 0, // 49 0x31 (VK_1) | 1 key - 0, // 50 0x32 (VK_2) | 2 key - 0, // 51 0x33 (VK_3) | 3 key - 0, // 52 0x34 (VK_4) | 4 key - 0, // 53 0x35 (VK_5) | 5 key - 0, // 54 0x36 (VK_6) | 6 key - 0, // 55 0x37 (VK_7) | 7 key - 0, // 56 0x38 (VK_8) | 8 key - 0, // 57 0x39 (VK_9) | 9 key - Qt::Key_unknown, // 58 0x3A -- unassigned -- - Qt::Key_unknown, // 59 0x3B -- unassigned -- - Qt::Key_unknown, // 60 0x3C -- unassigned -- - Qt::Key_unknown, // 61 0x3D -- unassigned -- - Qt::Key_unknown, // 62 0x3E -- unassigned -- - Qt::Key_unknown, // 63 0x3F -- unassigned -- - Qt::Key_unknown, // 64 0x40 -- unassigned -- - 0, // 65 0x41 (VK_A) | A key - 0, // 66 0x42 (VK_B) | B key - 0, // 67 0x43 (VK_C) | C key - 0, // 68 0x44 (VK_D) | D key - 0, // 69 0x45 (VK_E) | E key - 0, // 70 0x46 (VK_F) | F key - 0, // 71 0x47 (VK_G) | G key - 0, // 72 0x48 (VK_H) | H key - 0, // 73 0x49 (VK_I) | I key - 0, // 74 0x4A (VK_J) | J key - 0, // 75 0x4B (VK_K) | K key - 0, // 76 0x4C (VK_L) | L key - 0, // 77 0x4D (VK_M) | M key - 0, // 78 0x4E (VK_N) | N key - 0, // 79 0x4F (VK_O) | O key - 0, // 80 0x50 (VK_P) | P key - 0, // 81 0x51 (VK_Q) | Q key - 0, // 82 0x52 (VK_R) | R key - 0, // 83 0x53 (VK_S) | S key - 0, // 84 0x54 (VK_T) | T key - 0, // 85 0x55 (VK_U) | U key - 0, // 86 0x56 (VK_V) | V key - 0, // 87 0x57 (VK_W) | W key - 0, // 88 0x58 (VK_X) | X key - 0, // 89 0x59 (VK_Y) | Y key - 0, // 90 0x5A (VK_Z) | Z key - Qt::Key_Meta, // 91 0x5B VK_LWIN | Left Windows - MS Natural kbd - Qt::Key_Meta, // 92 0x5C VK_RWIN | Right Windows - MS Natural kbd - Qt::Key_Menu, // 93 0x5D VK_APPS | Application key-MS Natural kbd - Qt::Key_unknown, // 94 0x5E -- reserved -- - Qt::Key_Sleep, // 95 0x5F VK_SLEEP - Qt::Key_0, // 96 0x60 VK_NUMPAD0 | Numeric keypad 0 key - Qt::Key_1, // 97 0x61 VK_NUMPAD1 | Numeric keypad 1 key - Qt::Key_2, // 98 0x62 VK_NUMPAD2 | Numeric keypad 2 key - Qt::Key_3, // 99 0x63 VK_NUMPAD3 | Numeric keypad 3 key - Qt::Key_4, // 100 0x64 VK_NUMPAD4 | Numeric keypad 4 key - Qt::Key_5, // 101 0x65 VK_NUMPAD5 | Numeric keypad 5 key - Qt::Key_6, // 102 0x66 VK_NUMPAD6 | Numeric keypad 6 key - Qt::Key_7, // 103 0x67 VK_NUMPAD7 | Numeric keypad 7 key - Qt::Key_8, // 104 0x68 VK_NUMPAD8 | Numeric keypad 8 key - Qt::Key_9, // 105 0x69 VK_NUMPAD9 | Numeric keypad 9 key - Qt::Key_Asterisk, // 106 0x6A VK_MULTIPLY | Multiply key - Qt::Key_Plus, // 107 0x6B VK_ADD | Add key - Qt::Key_Comma, // 108 0x6C VK_SEPARATOR | Separator key - Qt::Key_Minus, // 109 0x6D VK_SUBTRACT | Subtract key - Qt::Key_Period, // 110 0x6E VK_DECIMAL | Decimal key - Qt::Key_Slash, // 111 0x6F VK_DIVIDE | Divide key - Qt::Key_F1, // 112 0x70 VK_F1 | F1 key - Qt::Key_F2, // 113 0x71 VK_F2 | F2 key - Qt::Key_F3, // 114 0x72 VK_F3 | F3 key - Qt::Key_F4, // 115 0x73 VK_F4 | F4 key - Qt::Key_F5, // 116 0x74 VK_F5 | F5 key - Qt::Key_F6, // 117 0x75 VK_F6 | F6 key - Qt::Key_F7, // 118 0x76 VK_F7 | F7 key - Qt::Key_F8, // 119 0x77 VK_F8 | F8 key - Qt::Key_F9, // 120 0x78 VK_F9 | F9 key - Qt::Key_F10, // 121 0x79 VK_F10 | F10 key - Qt::Key_F11, // 122 0x7A VK_F11 | F11 key - Qt::Key_F12, // 123 0x7B VK_F12 | F12 key - Qt::Key_F13, // 124 0x7C VK_F13 | F13 key - Qt::Key_F14, // 125 0x7D VK_F14 | F14 key - Qt::Key_F15, // 126 0x7E VK_F15 | F15 key - Qt::Key_F16, // 127 0x7F VK_F16 | F16 key - Qt::Key_F17, // 128 0x80 VK_F17 | F17 key - Qt::Key_F18, // 129 0x81 VK_F18 | F18 key - Qt::Key_F19, // 130 0x82 VK_F19 | F19 key - Qt::Key_F20, // 131 0x83 VK_F20 | F20 key - Qt::Key_F21, // 132 0x84 VK_F21 | F21 key - Qt::Key_F22, // 133 0x85 VK_F22 | F22 key - Qt::Key_F23, // 134 0x86 VK_F23 | F23 key - Qt::Key_F24, // 135 0x87 VK_F24 | F24 key - Qt::Key_unknown, // 136 0x88 -- unassigned -- - Qt::Key_unknown, // 137 0x89 -- unassigned -- - Qt::Key_unknown, // 138 0x8A -- unassigned -- - Qt::Key_unknown, // 139 0x8B -- unassigned -- - Qt::Key_unknown, // 140 0x8C -- unassigned -- - Qt::Key_unknown, // 141 0x8D -- unassigned -- - Qt::Key_unknown, // 142 0x8E -- unassigned -- - Qt::Key_unknown, // 143 0x8F -- unassigned -- - Qt::Key_NumLock, // 144 0x90 VK_NUMLOCK | Num Lock key - Qt::Key_ScrollLock, // 145 0x91 VK_SCROLL | Scroll Lock key - // Fujitsu/OASYS kbd -------------------- - 0, //Qt::Key_Jisho, // 146 0x92 VK_OEM_FJ_JISHO | 'Dictionary' key / - // VK_OEM_NEC_EQUAL = key on numpad on NEC PC-9800 kbd - Qt::Key_Massyo, // 147 0x93 VK_OEM_FJ_MASSHOU | 'Unregister word' key - Qt::Key_Touroku, // 148 0x94 VK_OEM_FJ_TOUROKU | 'Register word' key - 0, //Qt::Key_Oyayubi_Left,//149 0x95 VK_OEM_FJ_LOYA | 'Left OYAYUBI' key - 0, //Qt::Key_Oyayubi_Right,//150 0x96 VK_OEM_FJ_ROYA | 'Right OYAYUBI' key - Qt::Key_unknown, // 151 0x97 -- unassigned -- - Qt::Key_unknown, // 152 0x98 -- unassigned -- - Qt::Key_unknown, // 153 0x99 -- unassigned -- - Qt::Key_unknown, // 154 0x9A -- unassigned -- - Qt::Key_unknown, // 155 0x9B -- unassigned -- - Qt::Key_unknown, // 156 0x9C -- unassigned -- - Qt::Key_unknown, // 157 0x9D -- unassigned -- - Qt::Key_unknown, // 158 0x9E -- unassigned -- - Qt::Key_unknown, // 159 0x9F -- unassigned -- - Qt::Key_Shift, // 160 0xA0 VK_LSHIFT | Left Shift key - Qt::Key_Shift, // 161 0xA1 VK_RSHIFT | Right Shift key - Qt::Key_Control, // 162 0xA2 VK_LCONTROL | Left Ctrl key - Qt::Key_Control, // 163 0xA3 VK_RCONTROL | Right Ctrl key - Qt::Key_Alt, // 164 0xA4 VK_LMENU | Left Menu key - Qt::Key_Alt, // 165 0xA5 VK_RMENU | Right Menu key - Qt::Key_Back, // 166 0xA6 VK_BROWSER_BACK | Browser Back key - Qt::Key_Forward, // 167 0xA7 VK_BROWSER_FORWARD | Browser Forward key - Qt::Key_Refresh, // 168 0xA8 VK_BROWSER_REFRESH | Browser Refresh key - Qt::Key_Stop, // 169 0xA9 VK_BROWSER_STOP | Browser Stop key - Qt::Key_Search, // 170 0xAA VK_BROWSER_SEARCH | Browser Search key - Qt::Key_Favorites, // 171 0xAB VK_BROWSER_FAVORITES| Browser Favorites key - Qt::Key_HomePage, // 172 0xAC VK_BROWSER_HOME | Browser Start and Home key - Qt::Key_VolumeMute, // 173 0xAD VK_VOLUME_MUTE | Volume Mute key - Qt::Key_VolumeDown, // 174 0xAE VK_VOLUME_DOWN | Volume Down key - Qt::Key_VolumeUp, // 175 0xAF VK_VOLUME_UP | Volume Up key - Qt::Key_MediaNext, // 176 0xB0 VK_MEDIA_NEXT_TRACK | Next Track key - Qt::Key_MediaPrevious, //177 0xB1 VK_MEDIA_PREV_TRACK | Previous Track key - Qt::Key_MediaStop, // 178 0xB2 VK_MEDIA_STOP | Stop Media key - Qt::Key_MediaPlay, // 179 0xB3 VK_MEDIA_PLAY_PAUSE | Play/Pause Media key - Qt::Key_LaunchMail, // 180 0xB4 VK_LAUNCH_MAIL | Start Mail key - Qt::Key_LaunchMedia,// 181 0xB5 VK_LAUNCH_MEDIA_SELECT Select Media key - Qt::Key_Launch0, // 182 0xB6 VK_LAUNCH_APP1 | Start Application 1 key - Qt::Key_Launch1, // 183 0xB7 VK_LAUNCH_APP2 | Start Application 2 key - Qt::Key_unknown, // 184 0xB8 -- reserved -- - Qt::Key_unknown, // 185 0xB9 -- reserved -- - 0, // 186 0xBA VK_OEM_1 | ';:' for US - 0, // 187 0xBB VK_OEM_PLUS | '+' any country - 0, // 188 0xBC VK_OEM_COMMA | ',' any country - 0, // 189 0xBD VK_OEM_MINUS | '-' any country - 0, // 190 0xBE VK_OEM_PERIOD | '.' any country - 0, // 191 0xBF VK_OEM_2 | '/?' for US - 0, // 192 0xC0 VK_OEM_3 | '`~' for US - Qt::Key_unknown, // 193 0xC1 -- reserved -- - Qt::Key_unknown, // 194 0xC2 -- reserved -- - Qt::Key_unknown, // 195 0xC3 -- reserved -- - Qt::Key_unknown, // 196 0xC4 -- reserved -- - Qt::Key_unknown, // 197 0xC5 -- reserved -- - Qt::Key_unknown, // 198 0xC6 -- reserved -- - Qt::Key_unknown, // 199 0xC7 -- reserved -- - Qt::Key_unknown, // 200 0xC8 -- reserved -- - Qt::Key_unknown, // 201 0xC9 -- reserved -- - Qt::Key_unknown, // 202 0xCA -- reserved -- - Qt::Key_unknown, // 203 0xCB -- reserved -- - Qt::Key_unknown, // 204 0xCC -- reserved -- - Qt::Key_unknown, // 205 0xCD -- reserved -- - Qt::Key_unknown, // 206 0xCE -- reserved -- - Qt::Key_unknown, // 207 0xCF -- reserved -- - Qt::Key_unknown, // 208 0xD0 -- reserved -- - Qt::Key_unknown, // 209 0xD1 -- reserved -- - Qt::Key_unknown, // 210 0xD2 -- reserved -- - Qt::Key_unknown, // 211 0xD3 -- reserved -- - Qt::Key_unknown, // 212 0xD4 -- reserved -- - Qt::Key_unknown, // 213 0xD5 -- reserved -- - Qt::Key_unknown, // 214 0xD6 -- reserved -- - Qt::Key_unknown, // 215 0xD7 -- reserved -- - Qt::Key_unknown, // 216 0xD8 -- unassigned -- - Qt::Key_unknown, // 217 0xD9 -- unassigned -- - Qt::Key_unknown, // 218 0xDA -- unassigned -- - 0, // 219 0xDB VK_OEM_4 | '[{' for US - 0, // 220 0xDC VK_OEM_5 | '\|' for US - 0, // 221 0xDD VK_OEM_6 | ']}' for US - 0, // 222 0xDE VK_OEM_7 | ''"' for US - 0, // 223 0xDF VK_OEM_8 - Qt::Key_unknown, // 224 0xE0 -- reserved -- - Qt::Key_unknown, // 225 0xE1 VK_OEM_AX | 'AX' key on Japanese AX kbd - Qt::Key_unknown, // 226 0xE2 VK_OEM_102 | "<>" or "\|" on RT 102-key kbd - Qt::Key_unknown, // 227 0xE3 VK_ICO_HELP | Help key on ICO - Qt::Key_unknown, // 228 0xE4 VK_ICO_00 | 00 key on ICO - Qt::Key_unknown, // 229 0xE5 VK_PROCESSKEY | IME Process key - Qt::Key_unknown, // 230 0xE6 VK_ICO_CLEAR | - Qt::Key_unknown, // 231 0xE7 VK_PACKET | Unicode char as keystrokes - Qt::Key_unknown, // 232 0xE8 -- unassigned -- - // Nokia/Ericsson definitions --------------- - Qt::Key_unknown, // 233 0xE9 VK_OEM_RESET - Qt::Key_unknown, // 234 0xEA VK_OEM_JUMP - Qt::Key_unknown, // 235 0xEB VK_OEM_PA1 - Qt::Key_unknown, // 236 0xEC VK_OEM_PA2 - Qt::Key_unknown, // 237 0xED VK_OEM_PA3 - Qt::Key_unknown, // 238 0xEE VK_OEM_WSCTRL - Qt::Key_unknown, // 239 0xEF VK_OEM_CUSEL - Qt::Key_unknown, // 240 0xF0 VK_OEM_ATTN - Qt::Key_unknown, // 241 0xF1 VK_OEM_FINISH - Qt::Key_unknown, // 242 0xF2 VK_OEM_COPY - Qt::Key_unknown, // 243 0xF3 VK_OEM_AUTO - Qt::Key_unknown, // 244 0xF4 VK_OEM_ENLW - Qt::Key_unknown, // 245 0xF5 VK_OEM_BACKTAB - Qt::Key_unknown, // 246 0xF6 VK_ATTN | Attn key - Qt::Key_unknown, // 247 0xF7 VK_CRSEL | CrSel key - Qt::Key_unknown, // 248 0xF8 VK_EXSEL | ExSel key - Qt::Key_unknown, // 249 0xF9 VK_EREOF | Erase EOF key - Qt::Key_Play, // 250 0xFA VK_PLAY | Play key - Qt::Key_Zoom, // 251 0xFB VK_ZOOM | Zoom key - Qt::Key_unknown, // 252 0xFC VK_NONAME | Reserved - Qt::Key_unknown, // 253 0xFD VK_PA1 | PA1 key - Qt::Key_Clear, // 254 0xFE VK_OEM_CLEAR | Clear key - 0 -}; - -static const uint CmdTbl[] = { // Multimedia keys mapping table - // Dec | Hex | AppCommand - Qt::Key_unknown, // 0 0x00 - Qt::Key_Back, // 1 0x01 APPCOMMAND_BROWSER_BACKWARD - Qt::Key_Forward, // 2 0x02 APPCOMMAND_BROWSER_FORWARD - Qt::Key_Refresh, // 3 0x03 APPCOMMAND_BROWSER_REFRESH - Qt::Key_Stop, // 4 0x04 APPCOMMAND_BROWSER_STOP - Qt::Key_Search, // 5 0x05 APPCOMMAND_BROWSER_SEARCH - Qt::Key_Favorites, // 6 0x06 APPCOMMAND_BROWSER_FAVORITES - Qt::Key_Home, // 7 0x07 APPCOMMAND_BROWSER_HOME - Qt::Key_VolumeMute, // 8 0x08 APPCOMMAND_VOLUME_MUTE - Qt::Key_VolumeDown, // 9 0x09 APPCOMMAND_VOLUME_DOWN - Qt::Key_VolumeUp, // 10 0x0a APPCOMMAND_VOLUME_UP - Qt::Key_MediaNext, // 11 0x0b APPCOMMAND_MEDIA_NEXTTRACK - Qt::Key_MediaPrevious, // 12 0x0c APPCOMMAND_MEDIA_PREVIOUSTRACK - Qt::Key_MediaStop, // 13 0x0d APPCOMMAND_MEDIA_STOP - Qt::Key_MediaTogglePlayPause, // 14 0x0e APPCOMMAND_MEDIA_PLAYPAUSE - Qt::Key_LaunchMail, // 15 0x0f APPCOMMAND_LAUNCH_MAIL - Qt::Key_LaunchMedia, // 16 0x10 APPCOMMAND_LAUNCH_MEDIA_SELECT - Qt::Key_Launch0, // 17 0x11 APPCOMMAND_LAUNCH_APP1 - Qt::Key_Launch1, // 18 0x12 APPCOMMAND_LAUNCH_APP2 - Qt::Key_BassDown, // 19 0x13 APPCOMMAND_BASS_DOWN - Qt::Key_BassBoost, // 20 0x14 APPCOMMAND_BASS_BOOST - Qt::Key_BassUp, // 21 0x15 APPCOMMAND_BASS_UP - Qt::Key_TrebleDown, // 22 0x16 APPCOMMAND_TREBLE_DOWN - Qt::Key_TrebleUp, // 23 0x17 APPCOMMAND_TREBLE_UP - Qt::Key_MicMute, // 24 0x18 APPCOMMAND_MICROPHONE_VOLUME_MUTE - Qt::Key_MicVolumeDown, // 25 0x19 APPCOMMAND_MICROPHONE_VOLUME_DOWN - Qt::Key_MicVolumeUp, // 26 0x1a APPCOMMAND_MICROPHONE_VOLUME_UP - Qt::Key_Help, // 27 0x1b APPCOMMAND_HELP - Qt::Key_Find, // 28 0x1c APPCOMMAND_FIND - Qt::Key_New, // 29 0x1d APPCOMMAND_NEW - Qt::Key_Open, // 30 0x1e APPCOMMAND_OPEN - Qt::Key_Close, // 31 0x1f APPCOMMAND_CLOSE - Qt::Key_Save, // 32 0x20 APPCOMMAND_SAVE - Qt::Key_Print, // 33 0x21 APPCOMMAND_PRINT - Qt::Key_Undo, // 34 0x22 APPCOMMAND_UNDO - Qt::Key_Redo, // 35 0x23 APPCOMMAND_REDO - Qt::Key_Copy, // 36 0x24 APPCOMMAND_COPY - Qt::Key_Cut, // 37 0x25 APPCOMMAND_CUT - Qt::Key_Paste, // 38 0x26 APPCOMMAND_PASTE - Qt::Key_Reply, // 39 0x27 APPCOMMAND_REPLY_TO_MAIL - Qt::Key_MailForward, // 40 0x28 APPCOMMAND_FORWARD_MAIL - Qt::Key_Send, // 41 0x29 APPCOMMAND_SEND_MAIL - Qt::Key_Spell, // 42 0x2a APPCOMMAND_SPELL_CHECK - Qt::Key_unknown, // 43 0x2b APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE - Qt::Key_unknown, // 44 0x2c APPCOMMAND_MIC_ON_OFF_TOGGLE - Qt::Key_unknown, // 45 0x2d APPCOMMAND_CORRECTION_LIST - Qt::Key_MediaPlay, // 46 0x2e APPCOMMAND_MEDIA_PLAY - Qt::Key_MediaPause, // 47 0x2f APPCOMMAND_MEDIA_PAUSE - Qt::Key_MediaRecord, // 48 0x30 APPCOMMAND_MEDIA_RECORD - Qt::Key_AudioForward, // 49 0x31 APPCOMMAND_MEDIA_FAST_FORWARD - Qt::Key_AudioRewind, // 50 0x32 APPCOMMAND_MEDIA_REWIND - Qt::Key_ChannelDown, // 51 0x33 APPCOMMAND_MEDIA_CHANNEL_DOWN - Qt::Key_ChannelUp // 52 0x34 APPCOMMAND_MEDIA_CHANNEL_UP -}; - -// Possible modifier states. -// NOTE: The order of these states match the order in QWindowsKeyMapper::updatePossibleKeyCodes()! -static const Qt::KeyboardModifiers ModsTbl[] = { - Qt::NoModifier, // 0 - Qt::ShiftModifier, // 1 - Qt::ControlModifier, // 2 - Qt::ControlModifier | Qt::ShiftModifier, // 3 - Qt::AltModifier, // 4 - Qt::AltModifier | Qt::ShiftModifier, // 5 - Qt::AltModifier | Qt::ControlModifier, // 6 - Qt::AltModifier | Qt::ShiftModifier | Qt::ControlModifier, // 7 - Qt::NoModifier, // Fall-back to raw Key_* -}; -static const size_t NumMods = sizeof ModsTbl / sizeof *ModsTbl; -Q_STATIC_ASSERT((NumMods == KeyboardLayoutItem::NumQtKeys)); - -/** - Remap return or action key to select key for windows mobile. -*/ -inline int winceKeyBend(int keyCode) -{ - return KeyTbl[keyCode]; -} - -#ifdef Q_OS_WINCE -QT_BEGIN_INCLUDE_NAMESPACE -int ToUnicode(UINT vk, int /*scancode*/, unsigned char* /*kbdBuffer*/, LPWSTR unicodeBuffer, int, int) -{ - QT_USE_NAMESPACE - QChar* buf = reinterpret_cast< QChar*>(unicodeBuffer); - if (KeyTbl[vk] == 0) { - buf[0] = vk; - return 1; - } - return 0; -} - -int ToAscii(UINT vk, int scancode, unsigned char *kbdBuffer, LPWORD unicodeBuffer, int flag) -{ - return ToUnicode(vk, scancode, kbdBuffer, (LPWSTR) unicodeBuffer, 0, flag); - -} - -bool GetKeyboardState(unsigned char* kbuffer) -{ - for (int i=0; i< 256; ++i) - kbuffer[i] = GetAsyncKeyState(i); - return true; -} -QT_END_INCLUDE_NAMESPACE -#endif // Q_OS_WINCE - -// Translate a VK into a Qt key code, or unicode character -static inline int toKeyOrUnicode(int vk, int scancode, unsigned char *kbdBuffer, bool *isDeadkey = 0) -{ - Q_ASSERT(vk > 0 && vk < 256); - int code = 0; - QChar unicodeBuffer[5]; - int res = ToUnicode(vk, scancode, kbdBuffer, reinterpret_cast(unicodeBuffer), 5, 0); - // When Ctrl modifier is used ToUnicode does not return correct values. In order to assign the - // right key the control modifier is removed for just that function if the previous call failed. - if (res == 0 && kbdBuffer[VK_CONTROL]) { - const unsigned char controlState = kbdBuffer[VK_CONTROL]; - kbdBuffer[VK_CONTROL] = 0; - res = ToUnicode(vk, scancode, kbdBuffer, reinterpret_cast(unicodeBuffer), 5, 0); - kbdBuffer[VK_CONTROL] = controlState; - } - if (res) - code = unicodeBuffer[0].toUpper().unicode(); - - // Qt::Key_*'s are not encoded below 0x20, so try again, and DEL keys (0x7f) is encoded with a - // proper Qt::Key_ code - if (code < 0x20 || code == 0x7f) // Handles res==0 too - code = winceKeyBend(vk); - - if (isDeadkey) - *isDeadkey = (res == -1); - - return code == Qt::Key_unknown ? 0 : code; -} - -static inline int asciiToKeycode(char a, int state) -{ - if (a >= 'a' && a <= 'z') - a = toupper(a); - if ((state & Qt::ControlModifier) != 0) { - if (a >= 0 && a <= 31) // Ctrl+@..Ctrl+A..CTRL+Z..Ctrl+_ - a += '@'; // to @..A..Z.._ - } - return a & 0xff; -} - -static inline bool isModifierKey(int code) -{ - return (code >= Qt::Key_Shift) && (code <= Qt::Key_ScrollLock); -} -// Key translation -----------------------------------------------------------------------[ end ]--- - - -// Keyboard map private ----------------------------------------------------------------[ start ]--- - -void QWindowsKeyMapper::deleteLayouts() -{ - for (size_t i = 0; i < NumKeyboardLayoutItems; ++i) - keyLayout[i].exists = false; -} - -void QWindowsKeyMapper::changeKeyboard() -{ - deleteLayouts(); - - /* MAKELCID()'s first argument is a WORD, and GetKeyboardLayout() - * returns a DWORD. */ - - LCID newLCID = MAKELCID((quintptr)GetKeyboardLayout(0), SORT_DEFAULT); -// keyboardInputLocale = qt_localeFromLCID(newLCID); - - bool bidi = false; - wchar_t LCIDFontSig[16]; - if (GetLocaleInfo(newLCID, LOCALE_FONTSIGNATURE, LCIDFontSig, sizeof(LCIDFontSig) / sizeof(wchar_t)) - && (LCIDFontSig[7] & (wchar_t)0x0800)) - bidi = true; - - keyboardInputDirection = bidi ? Qt::RightToLeft : Qt::LeftToRight; -} - -// Helper function that is used when obtaining the list of characters that can be produced by one key and -// every possible combination of modifiers -inline void setKbdState(unsigned char *kbd, bool shift, bool ctrl, bool alt) -{ - kbd[VK_LSHIFT ] = (shift ? 0x80 : 0); - kbd[VK_SHIFT ] = (shift ? 0x80 : 0); - kbd[VK_LCONTROL] = (ctrl ? 0x80 : 0); - kbd[VK_CONTROL ] = (ctrl ? 0x80 : 0); - kbd[VK_RMENU ] = (alt ? 0x80 : 0); - kbd[VK_MENU ] = (alt ? 0x80 : 0); -} - -// Adds the msg's key to keyLayout if it is not yet present there -void QWindowsKeyMapper::updateKeyMap(const MSG &msg) -{ - unsigned char kbdBuffer[256]; // Will hold the complete keyboard state - GetKeyboardState(kbdBuffer); - const quint32 scancode = (msg.lParam >> 16) & scancodeBitmask; - updatePossibleKeyCodes(kbdBuffer, scancode, msg.wParam); -} - -// Fills keyLayout for that vk_key. Values are all characters one can type using that key -// (in connection with every combination of modifiers) and whether these "characters" are -// dead keys. -void QWindowsKeyMapper::updatePossibleKeyCodes(unsigned char *kbdBuffer, quint32 scancode, - quint32 vk_key) -{ - if (!vk_key || (keyLayout[vk_key].exists && !keyLayout[vk_key].dirty)) - return; - - // Copy keyboard state, so we can modify and query output for each possible permutation - unsigned char buffer[256]; - memcpy(buffer, kbdBuffer, sizeof(buffer)); - // Always 0, as Windows doesn't treat these as modifiers; - buffer[VK_LWIN ] = 0; - buffer[VK_RWIN ] = 0; - buffer[VK_CAPITAL ] = 0; - buffer[VK_NUMLOCK ] = 0; - buffer[VK_SCROLL ] = 0; - // Always 0, since we'll only change the other versions - buffer[VK_RSHIFT ] = 0; - buffer[VK_RCONTROL] = 0; - buffer[VK_LMENU ] = 0; // Use right Alt, since left Ctrl + right Alt is considered AltGraph - - // keyLayout contains the actual characters which can be written using the vk_key together with the - // different modifiers. '2' together with shift will for example cause the character - // to be @ for a US key layout (thus keyLayout[vk_key].qtKey[1] will be @). In addition to that - // it stores whether the resulting key is a dead key as these keys have to be handled later. - bool isDeadKey = false; - keyLayout[vk_key].deadkeys = 0; - keyLayout[vk_key].dirty = false; - keyLayout[vk_key].exists = true; - setKbdState(buffer, false, false, false); - keyLayout[vk_key].qtKey[0] = toKeyOrUnicode(vk_key, scancode, buffer, &isDeadKey); - keyLayout[vk_key].deadkeys |= isDeadKey ? 0x01 : 0; - setKbdState(buffer, true, false, false); - keyLayout[vk_key].qtKey[1] = toKeyOrUnicode(vk_key, scancode, buffer, &isDeadKey); - keyLayout[vk_key].deadkeys |= isDeadKey ? 0x02 : 0; - setKbdState(buffer, false, true, false); - keyLayout[vk_key].qtKey[2] = toKeyOrUnicode(vk_key, scancode, buffer, &isDeadKey); - keyLayout[vk_key].deadkeys |= isDeadKey ? 0x04 : 0; - setKbdState(buffer, true, true, false); - keyLayout[vk_key].qtKey[3] = toKeyOrUnicode(vk_key, scancode, buffer, &isDeadKey); - keyLayout[vk_key].deadkeys |= isDeadKey ? 0x08 : 0; - setKbdState(buffer, false, false, true); - keyLayout[vk_key].qtKey[4] = toKeyOrUnicode(vk_key, scancode, buffer, &isDeadKey); - keyLayout[vk_key].deadkeys |= isDeadKey ? 0x10 : 0; - setKbdState(buffer, true, false, true); - keyLayout[vk_key].qtKey[5] = toKeyOrUnicode(vk_key, scancode, buffer, &isDeadKey); - keyLayout[vk_key].deadkeys |= isDeadKey ? 0x20 : 0; - setKbdState(buffer, false, true, true); - keyLayout[vk_key].qtKey[6] = toKeyOrUnicode(vk_key, scancode, buffer, &isDeadKey); - keyLayout[vk_key].deadkeys |= isDeadKey ? 0x40 : 0; - setKbdState(buffer, true, true, true); - keyLayout[vk_key].qtKey[7] = toKeyOrUnicode(vk_key, scancode, buffer, &isDeadKey); - keyLayout[vk_key].deadkeys |= isDeadKey ? 0x80 : 0; - // Add a fall back key for layouts which don't do composition and show non-latin1 characters - int fallbackKey = winceKeyBend(vk_key); - if (!fallbackKey || fallbackKey == Qt::Key_unknown) { - fallbackKey = 0; - if (vk_key != keyLayout[vk_key].qtKey[0] && vk_key < 0x5B && vk_key > 0x2F) - fallbackKey = vk_key; - } - keyLayout[vk_key].qtKey[8] = fallbackKey; - - // If one of the values inserted into the keyLayout above, can be considered a dead key, we have - // to run the workaround below. - if (keyLayout[vk_key].deadkeys) { - // Push a Space, then the original key through the low-level ToAscii functions. - // We do this because these functions (ToAscii / ToUnicode) will alter the internal state of - // the keyboard driver By doing the following, we set the keyboard driver state back to what - // it was before we wrecked it with the code above. - // We need to push the space with an empty keystate map, since the driver checks the map for - // transitions in modifiers, so this helps us capture all possible deadkeys. - unsigned char emptyBuffer[256]; - memset(emptyBuffer, 0, sizeof(emptyBuffer)); - ::ToAscii(VK_SPACE, 0, emptyBuffer, reinterpret_cast(&buffer), 0); - ::ToAscii(vk_key, scancode, kbdBuffer, reinterpret_cast(&buffer), 0); - } - if (QWindowsContext::verbose > 1 && lcQpaEvents().isDebugEnabled()) { - QString message; - QDebug debug(&message); - debug <<__FUNCTION__ << " for virtual key = 0x" << hex << vk_key << dec<< '\n'; - for (size_t i = 0; i < NumMods; ++i) { - const quint32 qtKey = keyLayout[vk_key].qtKey[i]; - debug << " [" << i << "] (" << qtKey << ',' - << hex << showbase << qtKey << noshowbase << dec - << ",'" << char(qtKey ? qtKey : 0x03) << "')"; - if (keyLayout[vk_key].deadkeys & (1<flags() & Qt::WindowMinimizeButtonHint)?enabled:disabled); - bool maximized = IsZoomed(topLevelHwnd); - - EnableMenuItem(menu, SC_MAXIMIZE, ! (topLevel->flags() & Qt::WindowMaximizeButtonHint) || maximized?disabled:enabled); - EnableMenuItem(menu, SC_RESTORE, maximized?enabled:disabled); - - // We should _not_ check with the setFixedSize(x,y) case here, since Windows is not able to check - // this and our menu here would be out-of-sync with the menu produced by mouse-click on the - // System Menu, or right-click on the title bar. - EnableMenuItem(menu, SC_SIZE, (topLevel->flags() & Qt::MSWindowsFixedSizeDialogHint) || maximized?disabled:enabled); - EnableMenuItem(menu, SC_MOVE, maximized?disabled:enabled); - EnableMenuItem(menu, SC_CLOSE, enabled); - // Set bold on close menu item - MENUITEMINFO closeItem; - closeItem.cbSize = sizeof(MENUITEMINFO); - closeItem.fMask = MIIM_STATE; - closeItem.fState = MFS_DEFAULT; - SetMenuItemInfo(menu, SC_CLOSE, FALSE, &closeItem); - -#undef enabled -#undef disabled -#endif // !Q_OS_WINCE - const QPoint topLeft = topLevel->geometry().topLeft() * QWindowsScaling::factor(); - const int ret = TrackPopupMenuEx(menu, - TPM_LEFTALIGN | TPM_TOPALIGN | TPM_NONOTIFY | TPM_RETURNCMD, - topLeft.x(), topLeft.y(), topLevelHwnd, 0); - if (ret) - qWindowsWndProc(topLevelHwnd, WM_SYSCOMMAND, ret, 0); -} - -static inline void sendExtendedPressRelease(QWindow *w, int k, - Qt::KeyboardModifiers mods, - quint32 nativeScanCode, - quint32 nativeVirtualKey, - quint32 nativeModifiers, - const QString & text = QString(), - bool autorep = false, - ushort count = 1) -{ - QWindowSystemInterface::handleExtendedKeyEvent(w, QEvent::KeyPress, k, mods, nativeScanCode, nativeVirtualKey, nativeModifiers, text, autorep, count); - QWindowSystemInterface::handleExtendedKeyEvent(w, QEvent::KeyRelease, k, mods, nativeScanCode, nativeVirtualKey, nativeModifiers, text, autorep, count); -} - -/*! - \brief To be called from the window procedure. -*/ - -bool QWindowsKeyMapper::translateKeyEvent(QWindow *widget, HWND hwnd, - const MSG &msg, LRESULT *result) -{ - *result = 0; - - // Reset layout map when system keyboard layout is changed - if (msg.message == WM_INPUTLANGCHANGE) { - deleteLayouts(); - return true; - } - -#if defined(WM_APPCOMMAND) - if (msg.message == WM_APPCOMMAND) - return translateMultimediaKeyEventInternal(widget, msg); -#endif - - // WM_(IME_)CHAR messages already contain the character in question so there is - // no need to fiddle with our key map. In any other case add this key to the - // keymap if it is not present yet. - if (msg.message != WM_CHAR && msg.message != WM_IME_CHAR) - updateKeyMap(msg); - - MSG peekedMsg; - // consume dead chars?(for example, typing '`','a' resulting in a-accent). - if (PeekMessage(&peekedMsg, hwnd, 0, 0, PM_NOREMOVE) && peekedMsg.message == WM_DEADCHAR) - return true; - - return translateKeyEventInternal(widget, msg, false); -} - -bool QWindowsKeyMapper::translateMultimediaKeyEventInternal(QWindow *window, const MSG &msg) -{ -#if defined(WM_APPCOMMAND) - const int cmd = GET_APPCOMMAND_LPARAM(msg.lParam); - const int dwKeys = GET_KEYSTATE_LPARAM(msg.lParam); - int state = 0; - state |= (dwKeys & MK_SHIFT ? int(Qt::ShiftModifier) : 0); - state |= (dwKeys & MK_CONTROL ? int(Qt::ControlModifier) : 0); - - QWindow *receiver = m_keyGrabber ? m_keyGrabber : window; - - if (cmd < 0 || cmd > 52) - return false; - - const int qtKey = CmdTbl[cmd]; - sendExtendedPressRelease(receiver, qtKey, Qt::KeyboardModifier(state), 0, 0, 0); - // QTBUG-43343: Make sure to return false if Qt does not handle the key, otherwise, - // the keys are not passed to the active media player. - const QKeySequence sequence(Qt::Modifier(state) + qtKey); - return QGuiApplicationPrivate::instance()->shortcutMap.hasShortcutForKeySequence(sequence); -#else - Q_UNREACHABLE(); - return false; -#endif -} - -bool QWindowsKeyMapper::translateKeyEventInternal(QWindow *window, const MSG &msg, bool /* grab */) -{ - const int msgType = msg.message; - - const quint32 scancode = (msg.lParam >> 16) & scancodeBitmask; - const quint32 vk_key = msg.wParam; - quint32 nModifiers = 0; - - QWindow *receiver = m_keyGrabber ? m_keyGrabber : window; - - // Map native modifiers to some bit representation - nModifiers |= (GetKeyState(VK_LSHIFT ) & 0x80 ? ShiftLeft : 0); - nModifiers |= (GetKeyState(VK_RSHIFT ) & 0x80 ? ShiftRight : 0); - nModifiers |= (GetKeyState(VK_LCONTROL) & 0x80 ? ControlLeft : 0); - nModifiers |= (GetKeyState(VK_RCONTROL) & 0x80 ? ControlRight : 0); - nModifiers |= (GetKeyState(VK_LMENU ) & 0x80 ? AltLeft : 0); - nModifiers |= (GetKeyState(VK_RMENU ) & 0x80 ? AltRight : 0); - nModifiers |= (GetKeyState(VK_LWIN ) & 0x80 ? MetaLeft : 0); - nModifiers |= (GetKeyState(VK_RWIN ) & 0x80 ? MetaRight : 0); - // Add Lock keys to the same bits - nModifiers |= (GetKeyState(VK_CAPITAL ) & 0x01 ? CapsLock : 0); - nModifiers |= (GetKeyState(VK_NUMLOCK ) & 0x01 ? NumLock : 0); - nModifiers |= (GetKeyState(VK_SCROLL ) & 0x01 ? ScrollLock : 0); - - if (msg.lParam & ExtendedKey) - nModifiers |= msg.lParam & ExtendedKey; - - // Get the modifier states (may be altered later, depending on key code) - int state = 0; - state |= (nModifiers & ShiftAny ? int(Qt::ShiftModifier) : 0); - state |= (nModifiers & ControlAny ? int(Qt::ControlModifier) : 0); - state |= (nModifiers & AltAny ? int(Qt::AltModifier) : 0); - state |= (nModifiers & MetaAny ? int(Qt::MetaModifier) : 0); - - // A multi-character key or a Input method character - // not found by our look-ahead - if (msgType == WM_CHAR || msgType == WM_IME_CHAR) { - sendExtendedPressRelease(receiver, 0, Qt::KeyboardModifier(state), scancode, vk_key, nModifiers, messageKeyText(msg), false); - return true; - } - - bool result = false; - // handle Directionality changes (BiDi) with RTL extensions - if (m_useRTLExtensions) { - static int dirStatus = 0; - if (!dirStatus && state == Qt::ControlModifier - && msg.wParam == VK_CONTROL - && msgType == WM_KEYDOWN) { - if (GetKeyState(VK_LCONTROL) < 0) - dirStatus = VK_LCONTROL; - else if (GetKeyState(VK_RCONTROL) < 0) - dirStatus = VK_RCONTROL; - } else if (dirStatus) { - if (msgType == WM_KEYDOWN) { - if (msg.wParam == VK_SHIFT) { - if (dirStatus == VK_LCONTROL && GetKeyState(VK_LSHIFT) < 0) - dirStatus = VK_LSHIFT; - else if (dirStatus == VK_RCONTROL && GetKeyState(VK_RSHIFT) < 0) - dirStatus = VK_RSHIFT; - } else { - dirStatus = 0; - } - } else if (msgType == WM_KEYUP) { - if (dirStatus == VK_LSHIFT - && ((msg.wParam == VK_SHIFT && GetKeyState(VK_LCONTROL)) - || (msg.wParam == VK_CONTROL && GetKeyState(VK_LSHIFT)))) { - sendExtendedPressRelease(receiver, Qt::Key_Direction_L, 0, scancode, msg.wParam, nModifiers, QString(), false); - result = true; - dirStatus = 0; - } else if (dirStatus == VK_RSHIFT - && ( (msg.wParam == VK_SHIFT && GetKeyState(VK_RCONTROL)) - || (msg.wParam == VK_CONTROL && GetKeyState(VK_RSHIFT)))) { - sendExtendedPressRelease(receiver, Qt::Key_Direction_R, 0, scancode, msg.wParam, nModifiers, QString(), false); - result = true; - dirStatus = 0; - } else { - dirStatus = 0; - } - } else { - dirStatus = 0; - } - } - } // RTL - - // IME will process these keys, so simply return - if (msg.wParam == VK_PROCESSKEY) - return true; - - // Ignore invalid virtual keycodes (see bugs 127424, QTBUG-3630) - if (msg.wParam == 0 || msg.wParam == 0xFF) - return true; - - // Translate VK_* (native) -> Key_* (Qt) keys - int modifiersIndex = 0; - modifiersIndex |= (nModifiers & ShiftAny ? 0x1 : 0); - modifiersIndex |= (nModifiers & ControlAny ? 0x2 : 0); - modifiersIndex |= (nModifiers & AltAny ? 0x4 : 0); - - int code = keyLayout[vk_key].qtKey[modifiersIndex]; - - // Invert state logic: - // If the key actually pressed is a modifier key, then we remove its modifier key from the - // state, since a modifier-key can't have itself as a modifier - if (code == Qt::Key_Control) - state = state ^ Qt::ControlModifier; - else if (code == Qt::Key_Shift) - state = state ^ Qt::ShiftModifier; - else if (code == Qt::Key_Alt) - state = state ^ Qt::AltModifier; - - // If the bit 24 of lParm is set you received a enter, - // otherwise a Return. (This is the extended key bit) - if ((code == Qt::Key_Return) && (msg.lParam & 0x1000000)) - code = Qt::Key_Enter; - - // All cursor keys without extended bit - if (!(msg.lParam & 0x1000000)) { - switch (code) { - case Qt::Key_Left: - case Qt::Key_Right: - case Qt::Key_Up: - case Qt::Key_Down: - case Qt::Key_PageUp: - case Qt::Key_PageDown: - case Qt::Key_Home: - case Qt::Key_End: - case Qt::Key_Insert: - case Qt::Key_Delete: - case Qt::Key_Asterisk: - case Qt::Key_Plus: - case Qt::Key_Minus: - case Qt::Key_Period: - case Qt::Key_Comma: - case Qt::Key_0: - case Qt::Key_1: - case Qt::Key_2: - case Qt::Key_3: - case Qt::Key_4: - case Qt::Key_5: - case Qt::Key_6: - case Qt::Key_7: - case Qt::Key_8: - case Qt::Key_9: - state |= ((msg.wParam >= '0' && msg.wParam <= '9') - || (msg.wParam >= VK_OEM_PLUS && msg.wParam <= VK_OEM_3)) - ? 0 : int(Qt::KeypadModifier); - default: - if ((uint)msg.lParam == 0x004c0001 || (uint)msg.lParam == 0xc04c0001) - state |= Qt::KeypadModifier; - break; - } - } - // Other keys with with extended bit - else { - switch (code) { - case Qt::Key_Enter: - case Qt::Key_Slash: - case Qt::Key_NumLock: - state |= Qt::KeypadModifier; - default: - break; - } - } - - // KEYDOWN --------------------------------------------------------------------------------- - if (msgType == WM_KEYDOWN || msgType == WM_IME_KEYDOWN || msgType == WM_SYSKEYDOWN) { - // Get the last record of this key press, so we can validate the current state - // The record is not removed from the list - KeyRecord *rec = key_recorder.findKey(msg.wParam, false); - - // If rec's state doesn't match the current state, something has changed behind our back - // (Consumed by modal widget is one possibility) So, remove the record from the list - // This will stop the auto-repeat of the key, should a modifier change, for example - if (rec && rec->state != state) { - key_recorder.findKey(msg.wParam, true); - rec = 0; - } - - // Find unicode character from Windows Message Queue - MSG wm_char; - UINT charType = (msgType == WM_KEYDOWN - ? WM_CHAR - : msgType == WM_IME_KEYDOWN ? WM_IME_CHAR : WM_SYSCHAR); - - QChar uch; - if (PeekMessage(&wm_char, 0, charType, charType, PM_REMOVE)) { - // Found a ?_CHAR - uch = QChar((ushort)wm_char.wParam); - if (msgType == WM_SYSKEYDOWN && uch.isLetter() && (msg.lParam & KF_ALTDOWN)) - uch = uch.toLower(); // (See doc of WM_SYSCHAR) Alt-letter - if (!code && !uch.row()) - code = asciiToKeycode(uch.cell(), state); - } - - // Special handling for the WM_IME_KEYDOWN message. Microsoft IME (Korean) will not - // generate a WM_IME_CHAR message corresponding to this message. We might get wrong - // results, if we map this virtual key-code directly (for eg '?' US layouts). So try - // to find the correct key using the current message parameters & keyboard state. - if (uch.isNull() && msgType == WM_IME_KEYDOWN) { - BYTE keyState[256]; - wchar_t newKey[3] = {0}; - GetKeyboardState(keyState); - int val = ToUnicode(vk_key, scancode, keyState, newKey, 2, 0); - if (val == 1) { - uch = QChar(newKey[0]); - } else { - // If we are still not able to find a unicode key, pass the WM_IME_KEYDOWN - // message to DefWindowProc() for generating a proper WM_KEYDOWN. - return false; - } - } - - // If no ?_CHAR was found in the queue; deduct character from the ?_KEYDOWN parameters - if (uch.isNull()) { - if (msg.wParam == VK_DELETE) { - uch = QChar(QLatin1Char(0x7f)); // Windows doesn't know this one. - } else { - if (msgType != WM_SYSKEYDOWN || !code) { - UINT map = MapVirtualKey(msg.wParam, 2); - // If the high bit of the return value is set, it's a deadkey - if (!(map & 0x80000000)) - uch = QChar((ushort)map); - } - } - if (!code && !uch.row()) - code = asciiToKeycode(uch.cell(), state); - } - - // Special handling of global Windows hotkeys - if (state == Qt::AltModifier) { - switch (code) { - case Qt::Key_Escape: - case Qt::Key_Tab: - case Qt::Key_Enter: - case Qt::Key_F4: - return false; // Send the event on to Windows - case Qt::Key_Space: - // do not pass this key to windows, we will process it ourselves - showSystemMenu(receiver); - return true; - default: - break; - } - } - - // Map SHIFT + Tab to SHIFT + BackTab, QShortcutMap knows about this translation - if (code == Qt::Key_Tab && (state & Qt::ShiftModifier) == Qt::ShiftModifier) - code = Qt::Key_Backtab; - - // If we have a record, it means that the key is already pressed, the state is the same - // so, we have an auto-repeating key - if (rec) { - if (code < Qt::Key_Shift || code > Qt::Key_ScrollLock) { - QWindowSystemInterface::handleExtendedKeyEvent(receiver, QEvent::KeyRelease, code, - Qt::KeyboardModifier(state), scancode, msg.wParam, nModifiers, rec->text, true); - QWindowSystemInterface::handleExtendedKeyEvent(receiver, QEvent::KeyPress, code, - Qt::KeyboardModifier(state), scancode, msg.wParam, nModifiers, rec->text, true); - result = true; - } - } - // No record of the key being previous pressed, so we now send a QEvent::KeyPress event, - // and store the key data into our records. - else { - const QString text = uch.isNull() ? QString() : QString(uch); - const char a = uch.row() ? 0 : uch.cell(); - const Qt::KeyboardModifiers modifiers(state); -#ifndef QT_NO_SHORTCUT - // Is Qt interested in the context menu key? - if (modifiers == Qt::SHIFT && code == Qt::Key_F10 - && !QGuiApplicationPrivate::instance()->shortcutMap.hasShortcutForKeySequence(QKeySequence(Qt::SHIFT + Qt::Key_F10))) { - return false; - } -#endif // !QT_NO_SHORTCUT - key_recorder.storeKey(msg.wParam, a, state, text); - QWindowSystemInterface::handleExtendedKeyEvent(receiver, QEvent::KeyPress, code, - modifiers, scancode, msg.wParam, nModifiers, text, false); - result =true; - bool store = true; -#ifndef Q_OS_WINCE - // Alt+ go to the Win32 menu system if unhandled by Qt - if (msgType == WM_SYSKEYDOWN && !result && a) { - HWND parent = GetParent(QWindowsWindow::handleOf(receiver)); - while (parent) { - if (GetMenu(parent)) { - SendMessage(parent, WM_SYSCOMMAND, SC_KEYMENU, a); - store = false; - result = true; - break; - } - parent = GetParent(parent); - } - } -#endif // !Q_OS_WINCE - if (!store) - key_recorder.findKey(msg.wParam, true); - } - } - - // KEYUP ----------------------------------------------------------------------------------- - else { - // Try to locate the key in our records, and remove it if it exists. - // The key may not be in our records if, for example, the down event was handled by - // win32 natively, or our window gets focus while a key is already press, but now gets - // the key release event. - KeyRecord* rec = key_recorder.findKey(msg.wParam, true); - if (!rec && !(code == Qt::Key_Shift - || code == Qt::Key_Control - || code == Qt::Key_Meta - || code == Qt::Key_Alt)) { - // Someone ate the key down event - } else { - if (!code) - code = asciiToKeycode(rec->ascii ? rec->ascii : msg.wParam, state); - - // Map SHIFT + Tab to SHIFT + BackTab, QShortcutMap knows about this translation - if (code == Qt::Key_Tab && (state & Qt::ShiftModifier) == Qt::ShiftModifier) - code = Qt::Key_Backtab; - QWindowSystemInterface::handleExtendedKeyEvent(receiver, QEvent::KeyRelease, code, - Qt::KeyboardModifier(state), scancode, msg.wParam, nModifiers, - (rec ? rec->text : QString()), false); - result = true; -#ifndef Q_OS_WINCE - // don't pass Alt to Windows unless we are embedded in a non-Qt window - if (code == Qt::Key_Alt) { - const QWindowsContext *context = QWindowsContext::instance(); - HWND parent = GetParent(QWindowsWindow::handleOf(receiver)); - while (parent) { - if (!context->findPlatformWindow(parent) && GetMenu(parent)) { - result = false; - break; - } - parent = GetParent(parent); - } - } -#endif - } - } - return result; -} - -Qt::KeyboardModifiers QWindowsKeyMapper::queryKeyboardModifiers() -{ - Qt::KeyboardModifiers modifiers = Qt::NoModifier; - if (GetKeyState(VK_SHIFT) < 0) - modifiers |= Qt::ShiftModifier; - if (GetKeyState(VK_CONTROL) < 0) - modifiers |= Qt::ControlModifier; - if (GetKeyState(VK_MENU) < 0) - modifiers |= Qt::AltModifier; - return modifiers; -} - -QList QWindowsKeyMapper::possibleKeys(const QKeyEvent *e) const -{ - QList result; - - const KeyboardLayoutItem &kbItem = keyLayout[e->nativeVirtualKey()]; - if (!kbItem.exists) - return result; - - quint32 baseKey = kbItem.qtKey[0]; - Qt::KeyboardModifiers keyMods = e->modifiers(); - if (baseKey == Qt::Key_Return && (e->nativeModifiers() & ExtendedKey)) { - result << int(Qt::Key_Enter + keyMods); - return result; - } - result << int(baseKey + keyMods); // The base key is _always_ valid, of course - - for (size_t i = 1; i < NumMods; ++i) { - Qt::KeyboardModifiers neededMods = ModsTbl[i]; - quint32 key = kbItem.qtKey[i]; - if (key && key != baseKey && ((keyMods & neededMods) == neededMods)) - result << int(key + (keyMods & ~neededMods)); - } - - return result; -} - -QT_END_NAMESPACE diff --git a/Telegram/_qt_5_4_0_patch/qtimageformats/src/3rdparty/libwebp/src/dec/vp8l.c b/Telegram/_qt_5_4_0_patch/qtimageformats/src/3rdparty/libwebp/src/dec/vp8l.c deleted file mode 100644 index 93d9dc477..000000000 --- a/Telegram/_qt_5_4_0_patch/qtimageformats/src/3rdparty/libwebp/src/dec/vp8l.c +++ /dev/null @@ -1,1385 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the COPYING file in the root of the source -// tree. An additional intellectual property rights grant can be found -// in the file PATENTS. All contributing project authors may -// be found in the AUTHORS file in the root of the source tree. -// ----------------------------------------------------------------------------- -// -// main entry for the decoder -// -// Authors: Vikas Arora (vikaas.arora@gmail.com) -// Jyrki Alakuijala (jyrki@google.com) - -#include -#include "./alphai.h" -#include "./vp8li.h" -#include "../dsp/lossless.h" -#include "../dsp/yuv.h" -#include "../utils/alpha_processing.h" -#include "../utils/huffman.h" -#include "../utils/utils.h" - -#define NUM_ARGB_CACHE_ROWS 16 - -static const int kCodeLengthLiterals = 16; -static const int kCodeLengthRepeatCode = 16; -static const int kCodeLengthExtraBits[3] = { 2, 3, 7 }; -static const int kCodeLengthRepeatOffsets[3] = { 3, 3, 11 }; - -// ----------------------------------------------------------------------------- -// Five Huffman codes are used at each meta code: -// 1. green + length prefix codes + color cache codes, -// 2. alpha, -// 3. red, -// 4. blue, and, -// 5. distance prefix codes. -typedef enum { - GREEN = 0, - RED = 1, - BLUE = 2, - ALPHA = 3, - DIST = 4 -} HuffIndex; - -static const uint16_t kAlphabetSize[HUFFMAN_CODES_PER_META_CODE] = { - NUM_LITERAL_CODES + NUM_LENGTH_CODES, - NUM_LITERAL_CODES, NUM_LITERAL_CODES, NUM_LITERAL_CODES, - NUM_DISTANCE_CODES -}; - - -#define NUM_CODE_LENGTH_CODES 19 -static const uint8_t kCodeLengthCodeOrder[NUM_CODE_LENGTH_CODES] = { - 17, 18, 0, 1, 2, 3, 4, 5, 16, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 -}; - -#define CODE_TO_PLANE_CODES 120 -static const uint8_t kCodeToPlane[CODE_TO_PLANE_CODES] = { - 0x18, 0x07, 0x17, 0x19, 0x28, 0x06, 0x27, 0x29, 0x16, 0x1a, - 0x26, 0x2a, 0x38, 0x05, 0x37, 0x39, 0x15, 0x1b, 0x36, 0x3a, - 0x25, 0x2b, 0x48, 0x04, 0x47, 0x49, 0x14, 0x1c, 0x35, 0x3b, - 0x46, 0x4a, 0x24, 0x2c, 0x58, 0x45, 0x4b, 0x34, 0x3c, 0x03, - 0x57, 0x59, 0x13, 0x1d, 0x56, 0x5a, 0x23, 0x2d, 0x44, 0x4c, - 0x55, 0x5b, 0x33, 0x3d, 0x68, 0x02, 0x67, 0x69, 0x12, 0x1e, - 0x66, 0x6a, 0x22, 0x2e, 0x54, 0x5c, 0x43, 0x4d, 0x65, 0x6b, - 0x32, 0x3e, 0x78, 0x01, 0x77, 0x79, 0x53, 0x5d, 0x11, 0x1f, - 0x64, 0x6c, 0x42, 0x4e, 0x76, 0x7a, 0x21, 0x2f, 0x75, 0x7b, - 0x31, 0x3f, 0x63, 0x6d, 0x52, 0x5e, 0x00, 0x74, 0x7c, 0x41, - 0x4f, 0x10, 0x20, 0x62, 0x6e, 0x30, 0x73, 0x7d, 0x51, 0x5f, - 0x40, 0x72, 0x7e, 0x61, 0x6f, 0x50, 0x71, 0x7f, 0x60, 0x70 -}; - -static int DecodeImageStream(int xsize, int ysize, - int is_level0, - VP8LDecoder* const dec, - uint32_t** const decoded_data); - -//------------------------------------------------------------------------------ - -int VP8LCheckSignature(const uint8_t* const data, size_t size) { - return (size >= VP8L_FRAME_HEADER_SIZE && - data[0] == VP8L_MAGIC_BYTE && - (data[4] >> 5) == 0); // version -} - -static int ReadImageInfo(VP8LBitReader* const br, - int* const width, int* const height, - int* const has_alpha) { - if (VP8LReadBits(br, 8) != VP8L_MAGIC_BYTE) return 0; - *width = VP8LReadBits(br, VP8L_IMAGE_SIZE_BITS) + 1; - *height = VP8LReadBits(br, VP8L_IMAGE_SIZE_BITS) + 1; - *has_alpha = VP8LReadBits(br, 1); - if (VP8LReadBits(br, VP8L_VERSION_BITS) != 0) return 0; - return 1; -} - -int VP8LGetInfo(const uint8_t* data, size_t data_size, - int* const width, int* const height, int* const has_alpha) { - if (data == NULL || data_size < VP8L_FRAME_HEADER_SIZE) { - return 0; // not enough data - } else if (!VP8LCheckSignature(data, data_size)) { - return 0; // bad signature - } else { - int w, h, a; - VP8LBitReader br; - VP8LInitBitReader(&br, data, data_size); - if (!ReadImageInfo(&br, &w, &h, &a)) { - return 0; - } - if (width != NULL) *width = w; - if (height != NULL) *height = h; - if (has_alpha != NULL) *has_alpha = a; - return 1; - } -} - -//------------------------------------------------------------------------------ - -static WEBP_INLINE int GetCopyDistance(int distance_symbol, - VP8LBitReader* const br) { - int extra_bits, offset; - if (distance_symbol < 4) { - return distance_symbol + 1; - } - extra_bits = (distance_symbol - 2) >> 1; - offset = (2 + (distance_symbol & 1)) << extra_bits; - return offset + VP8LReadBits(br, extra_bits) + 1; -} - -static WEBP_INLINE int GetCopyLength(int length_symbol, - VP8LBitReader* const br) { - // Length and distance prefixes are encoded the same way. - return GetCopyDistance(length_symbol, br); -} - -static WEBP_INLINE int PlaneCodeToDistance(int xsize, int plane_code) { - if (plane_code > CODE_TO_PLANE_CODES) { - return plane_code - CODE_TO_PLANE_CODES; - } else { - const int dist_code = kCodeToPlane[plane_code - 1]; - const int yoffset = dist_code >> 4; - const int xoffset = 8 - (dist_code & 0xf); - const int dist = yoffset * xsize + xoffset; - return (dist >= 1) ? dist : 1; // dist<1 can happen if xsize is very small - } -} - -//------------------------------------------------------------------------------ -// Decodes the next Huffman code from bit-stream. -// FillBitWindow(br) needs to be called at minimum every second call -// to ReadSymbol, in order to pre-fetch enough bits. -static WEBP_INLINE int ReadSymbol(const HuffmanTree* tree, - VP8LBitReader* const br) { - const HuffmanTreeNode* node = tree->root_; - uint32_t bits = VP8LPrefetchBits(br); - int bitpos = br->bit_pos_; - // Check if we find the bit combination from the Huffman lookup table. - const int lut_ix = bits & (HUFF_LUT - 1); - const int lut_bits = tree->lut_bits_[lut_ix]; - if (lut_bits <= HUFF_LUT_BITS) { - VP8LSetBitPos(br, bitpos + lut_bits); - return tree->lut_symbol_[lut_ix]; - } - node += tree->lut_jump_[lut_ix]; - bitpos += HUFF_LUT_BITS; - bits >>= HUFF_LUT_BITS; - - // Decode the value from a binary tree. - assert(node != NULL); - do { - node = HuffmanTreeNextNode(node, bits & 1); - bits >>= 1; - ++bitpos; - } while (HuffmanTreeNodeIsNotLeaf(node)); - VP8LSetBitPos(br, bitpos); - return node->symbol_; -} - -static int ReadHuffmanCodeLengths( - VP8LDecoder* const dec, const int* const code_length_code_lengths, - int num_symbols, int* const code_lengths) { - int ok = 0; - VP8LBitReader* const br = &dec->br_; - int symbol; - int max_symbol; - int prev_code_len = DEFAULT_CODE_LENGTH; - HuffmanTree tree; - - if (!HuffmanTreeBuildImplicit(&tree, code_length_code_lengths, - NUM_CODE_LENGTH_CODES)) { - dec->status_ = VP8_STATUS_BITSTREAM_ERROR; - return 0; - } - - if (VP8LReadBits(br, 1)) { // use length - const int length_nbits = 2 + 2 * VP8LReadBits(br, 3); - max_symbol = 2 + VP8LReadBits(br, length_nbits); - if (max_symbol > num_symbols) { - dec->status_ = VP8_STATUS_BITSTREAM_ERROR; - goto End; - } - } else { - max_symbol = num_symbols; - } - - symbol = 0; - while (symbol < num_symbols) { - int code_len; - if (max_symbol-- == 0) break; - VP8LFillBitWindow(br); - code_len = ReadSymbol(&tree, br); - if (code_len < kCodeLengthLiterals) { - code_lengths[symbol++] = code_len; - if (code_len != 0) prev_code_len = code_len; - } else { - const int use_prev = (code_len == kCodeLengthRepeatCode); - const int slot = code_len - kCodeLengthLiterals; - const int extra_bits = kCodeLengthExtraBits[slot]; - const int repeat_offset = kCodeLengthRepeatOffsets[slot]; - int repeat = VP8LReadBits(br, extra_bits) + repeat_offset; - if (symbol + repeat > num_symbols) { - dec->status_ = VP8_STATUS_BITSTREAM_ERROR; - goto End; - } else { - const int length = use_prev ? prev_code_len : 0; - while (repeat-- > 0) code_lengths[symbol++] = length; - } - } - } - ok = 1; - - End: - HuffmanTreeRelease(&tree); - return ok; -} - -static int ReadHuffmanCode(int alphabet_size, VP8LDecoder* const dec, - HuffmanTree* const tree) { - int ok = 0; - VP8LBitReader* const br = &dec->br_; - const int simple_code = VP8LReadBits(br, 1); - - if (simple_code) { // Read symbols, codes & code lengths directly. - int symbols[2]; - int codes[2]; - int code_lengths[2]; - const int num_symbols = VP8LReadBits(br, 1) + 1; - const int first_symbol_len_code = VP8LReadBits(br, 1); - // The first code is either 1 bit or 8 bit code. - symbols[0] = VP8LReadBits(br, (first_symbol_len_code == 0) ? 1 : 8); - codes[0] = 0; - code_lengths[0] = num_symbols - 1; - // The second code (if present), is always 8 bit long. - if (num_symbols == 2) { - symbols[1] = VP8LReadBits(br, 8); - codes[1] = 1; - code_lengths[1] = num_symbols - 1; - } - ok = HuffmanTreeBuildExplicit(tree, code_lengths, codes, symbols, - alphabet_size, num_symbols); - } else { // Decode Huffman-coded code lengths. - int* code_lengths = NULL; - int i; - int code_length_code_lengths[NUM_CODE_LENGTH_CODES] = { 0 }; - const int num_codes = VP8LReadBits(br, 4) + 4; - if (num_codes > NUM_CODE_LENGTH_CODES) { - dec->status_ = VP8_STATUS_BITSTREAM_ERROR; - return 0; - } - - code_lengths = - (int*)WebPSafeCalloc((uint64_t)alphabet_size, sizeof(*code_lengths)); - if (code_lengths == NULL) { - dec->status_ = VP8_STATUS_OUT_OF_MEMORY; - return 0; - } - - for (i = 0; i < num_codes; ++i) { - code_length_code_lengths[kCodeLengthCodeOrder[i]] = VP8LReadBits(br, 3); - } - ok = ReadHuffmanCodeLengths(dec, code_length_code_lengths, alphabet_size, - code_lengths); - if (ok) { - ok = HuffmanTreeBuildImplicit(tree, code_lengths, alphabet_size); - } - free(code_lengths); - } - ok = ok && !br->error_; - if (!ok) { - dec->status_ = VP8_STATUS_BITSTREAM_ERROR; - return 0; - } - return 1; -} - -static void DeleteHtreeGroups(HTreeGroup* htree_groups, int num_htree_groups) { - if (htree_groups != NULL) { - int i, j; - for (i = 0; i < num_htree_groups; ++i) { - HuffmanTree* const htrees = htree_groups[i].htrees_; - for (j = 0; j < HUFFMAN_CODES_PER_META_CODE; ++j) { - HuffmanTreeRelease(&htrees[j]); - } - } - free(htree_groups); - } -} - -static int ReadHuffmanCodes(VP8LDecoder* const dec, int xsize, int ysize, - int color_cache_bits, int allow_recursion) { - int i, j; - VP8LBitReader* const br = &dec->br_; - VP8LMetadata* const hdr = &dec->hdr_; - uint32_t* huffman_image = NULL; - HTreeGroup* htree_groups = NULL; - int num_htree_groups = 1; - - if (allow_recursion && VP8LReadBits(br, 1)) { - // use meta Huffman codes. - const int huffman_precision = VP8LReadBits(br, 3) + 2; - const int huffman_xsize = VP8LSubSampleSize(xsize, huffman_precision); - const int huffman_ysize = VP8LSubSampleSize(ysize, huffman_precision); - const int huffman_pixs = huffman_xsize * huffman_ysize; - if (!DecodeImageStream(huffman_xsize, huffman_ysize, 0, dec, - &huffman_image)) { - dec->status_ = VP8_STATUS_BITSTREAM_ERROR; - goto Error; - } - hdr->huffman_subsample_bits_ = huffman_precision; - for (i = 0; i < huffman_pixs; ++i) { - // The huffman data is stored in red and green bytes. - const int group = (huffman_image[i] >> 8) & 0xffff; - huffman_image[i] = group; - if (group >= num_htree_groups) { - num_htree_groups = group + 1; - } - } - } - - if (br->error_) goto Error; - - assert(num_htree_groups <= 0x10000); - htree_groups = - (HTreeGroup*)WebPSafeCalloc((uint64_t)num_htree_groups, - sizeof(*htree_groups)); - if (htree_groups == NULL) { - dec->status_ = VP8_STATUS_OUT_OF_MEMORY; - goto Error; - } - - for (i = 0; i < num_htree_groups; ++i) { - HuffmanTree* const htrees = htree_groups[i].htrees_; - for (j = 0; j < HUFFMAN_CODES_PER_META_CODE; ++j) { - int alphabet_size = kAlphabetSize[j]; - if (j == 0 && color_cache_bits > 0) { - alphabet_size += 1 << color_cache_bits; - } - if (!ReadHuffmanCode(alphabet_size, dec, htrees + j)) goto Error; - } - } - - // All OK. Finalize pointers and return. - hdr->huffman_image_ = huffman_image; - hdr->num_htree_groups_ = num_htree_groups; - hdr->htree_groups_ = htree_groups; - return 1; - - Error: - free(huffman_image); - DeleteHtreeGroups(htree_groups, num_htree_groups); - return 0; -} - -//------------------------------------------------------------------------------ -// Scaling. - -static int AllocateAndInitRescaler(VP8LDecoder* const dec, VP8Io* const io) { - const int num_channels = 4; - const int in_width = io->mb_w; - const int out_width = io->scaled_width; - const int in_height = io->mb_h; - const int out_height = io->scaled_height; - const uint64_t work_size = 2 * num_channels * (uint64_t)out_width; - int32_t* work; // Rescaler work area. - const uint64_t scaled_data_size = num_channels * (uint64_t)out_width; - uint32_t* scaled_data; // Temporary storage for scaled BGRA data. - const uint64_t memory_size = sizeof(*dec->rescaler) + - work_size * sizeof(*work) + - scaled_data_size * sizeof(*scaled_data); - uint8_t* memory = (uint8_t*)WebPSafeCalloc(memory_size, sizeof(*memory)); - if (memory == NULL) { - dec->status_ = VP8_STATUS_OUT_OF_MEMORY; - return 0; - } - assert(dec->rescaler_memory == NULL); - dec->rescaler_memory = memory; - - dec->rescaler = (WebPRescaler*)memory; - memory += sizeof(*dec->rescaler); - work = (int32_t*)memory; - memory += work_size * sizeof(*work); - scaled_data = (uint32_t*)memory; - - WebPRescalerInit(dec->rescaler, in_width, in_height, (uint8_t*)scaled_data, - out_width, out_height, 0, num_channels, - in_width, out_width, in_height, out_height, work); - return 1; -} - -//------------------------------------------------------------------------------ -// Export to ARGB - -// We have special "export" function since we need to convert from BGRA -static int Export(WebPRescaler* const rescaler, WEBP_CSP_MODE colorspace, - int rgba_stride, uint8_t* const rgba) { - uint32_t* const src = (uint32_t*)rescaler->dst; - const int dst_width = rescaler->dst_width; - int num_lines_out = 0; - while (WebPRescalerHasPendingOutput(rescaler)) { - uint8_t* const dst = rgba + num_lines_out * rgba_stride; - WebPRescalerExportRow(rescaler); - WebPMultARGBRow(src, dst_width, 1); - VP8LConvertFromBGRA(src, dst_width, colorspace, dst); - ++num_lines_out; - } - return num_lines_out; -} - -// Emit scaled rows. -static int EmitRescaledRowsRGBA(const VP8LDecoder* const dec, - uint8_t* in, int in_stride, int mb_h, - uint8_t* const out, int out_stride) { - const WEBP_CSP_MODE colorspace = dec->output_->colorspace; - int num_lines_in = 0; - int num_lines_out = 0; - while (num_lines_in < mb_h) { - uint8_t* const row_in = in + num_lines_in * in_stride; - uint8_t* const row_out = out + num_lines_out * out_stride; - const int lines_left = mb_h - num_lines_in; - const int needed_lines = WebPRescaleNeededLines(dec->rescaler, lines_left); - assert(needed_lines > 0 && needed_lines <= lines_left); - WebPMultARGBRows(row_in, in_stride, - dec->rescaler->src_width, needed_lines, 0); - WebPRescalerImport(dec->rescaler, lines_left, row_in, in_stride); - num_lines_in += needed_lines; - num_lines_out += Export(dec->rescaler, colorspace, out_stride, row_out); - } - return num_lines_out; -} - -// Emit rows without any scaling. -static int EmitRows(WEBP_CSP_MODE colorspace, - const uint8_t* row_in, int in_stride, - int mb_w, int mb_h, - uint8_t* const out, int out_stride) { - int lines = mb_h; - uint8_t* row_out = out; - while (lines-- > 0) { - VP8LConvertFromBGRA((const uint32_t*)row_in, mb_w, colorspace, row_out); - row_in += in_stride; - row_out += out_stride; - } - return mb_h; // Num rows out == num rows in. -} - -//------------------------------------------------------------------------------ -// Export to YUVA - -static void ConvertToYUVA(const uint32_t* const src, int width, int y_pos, - const WebPDecBuffer* const output) { - const WebPYUVABuffer* const buf = &output->u.YUVA; - // first, the luma plane - { - int i; - uint8_t* const y = buf->y + y_pos * buf->y_stride; - for (i = 0; i < width; ++i) { - const uint32_t p = src[i]; - y[i] = VP8RGBToY((p >> 16) & 0xff, (p >> 8) & 0xff, (p >> 0) & 0xff, - YUV_HALF); - } - } - - // then U/V planes - { - uint8_t* const u = buf->u + (y_pos >> 1) * buf->u_stride; - uint8_t* const v = buf->v + (y_pos >> 1) * buf->v_stride; - const int uv_width = width >> 1; - int i; - for (i = 0; i < uv_width; ++i) { - const uint32_t v0 = src[2 * i + 0]; - const uint32_t v1 = src[2 * i + 1]; - // VP8RGBToU/V expects four accumulated pixels. Hence we need to - // scale r/g/b value by a factor 2. We just shift v0/v1 one bit less. - const int r = ((v0 >> 15) & 0x1fe) + ((v1 >> 15) & 0x1fe); - const int g = ((v0 >> 7) & 0x1fe) + ((v1 >> 7) & 0x1fe); - const int b = ((v0 << 1) & 0x1fe) + ((v1 << 1) & 0x1fe); - if (!(y_pos & 1)) { // even lines: store values - u[i] = VP8RGBToU(r, g, b, YUV_HALF << 2); - v[i] = VP8RGBToV(r, g, b, YUV_HALF << 2); - } else { // odd lines: average with previous values - const int tmp_u = VP8RGBToU(r, g, b, YUV_HALF << 2); - const int tmp_v = VP8RGBToV(r, g, b, YUV_HALF << 2); - // Approximated average-of-four. But it's an acceptable diff. - u[i] = (u[i] + tmp_u + 1) >> 1; - v[i] = (v[i] + tmp_v + 1) >> 1; - } - } - if (width & 1) { // last pixel - const uint32_t v0 = src[2 * i + 0]; - const int r = (v0 >> 14) & 0x3fc; - const int g = (v0 >> 6) & 0x3fc; - const int b = (v0 << 2) & 0x3fc; - if (!(y_pos & 1)) { // even lines - u[i] = VP8RGBToU(r, g, b, YUV_HALF << 2); - v[i] = VP8RGBToV(r, g, b, YUV_HALF << 2); - } else { // odd lines (note: we could just skip this) - const int tmp_u = VP8RGBToU(r, g, b, YUV_HALF << 2); - const int tmp_v = VP8RGBToV(r, g, b, YUV_HALF << 2); - u[i] = (u[i] + tmp_u + 1) >> 1; - v[i] = (v[i] + tmp_v + 1) >> 1; - } - } - } - // Lastly, store alpha if needed. - if (buf->a != NULL) { - int i; - uint8_t* const a = buf->a + y_pos * buf->a_stride; - for (i = 0; i < width; ++i) a[i] = (src[i] >> 24); - } -} - -static int ExportYUVA(const VP8LDecoder* const dec, int y_pos) { - WebPRescaler* const rescaler = dec->rescaler; - uint32_t* const src = (uint32_t*)rescaler->dst; - const int dst_width = rescaler->dst_width; - int num_lines_out = 0; - while (WebPRescalerHasPendingOutput(rescaler)) { - WebPRescalerExportRow(rescaler); - WebPMultARGBRow(src, dst_width, 1); - ConvertToYUVA(src, dst_width, y_pos, dec->output_); - ++y_pos; - ++num_lines_out; - } - return num_lines_out; -} - -static int EmitRescaledRowsYUVA(const VP8LDecoder* const dec, - uint8_t* in, int in_stride, int mb_h) { - int num_lines_in = 0; - int y_pos = dec->last_out_row_; - while (num_lines_in < mb_h) { - const int lines_left = mb_h - num_lines_in; - const int needed_lines = WebPRescaleNeededLines(dec->rescaler, lines_left); - WebPMultARGBRows(in, in_stride, dec->rescaler->src_width, needed_lines, 0); - WebPRescalerImport(dec->rescaler, lines_left, in, in_stride); - num_lines_in += needed_lines; - in += needed_lines * in_stride; - y_pos += ExportYUVA(dec, y_pos); - } - return y_pos; -} - -static int EmitRowsYUVA(const VP8LDecoder* const dec, - const uint8_t* in, int in_stride, - int mb_w, int num_rows) { - int y_pos = dec->last_out_row_; - while (num_rows-- > 0) { - ConvertToYUVA((const uint32_t*)in, mb_w, y_pos, dec->output_); - in += in_stride; - ++y_pos; - } - return y_pos; -} - -//------------------------------------------------------------------------------ -// Cropping. - -// Sets io->mb_y, io->mb_h & io->mb_w according to start row, end row and -// crop options. Also updates the input data pointer, so that it points to the -// start of the cropped window. Note that pixels are in ARGB format even if -// 'in_data' is uint8_t*. -// Returns true if the crop window is not empty. -static int SetCropWindow(VP8Io* const io, int y_start, int y_end, - uint8_t** const in_data, int pixel_stride) { - assert(y_start < y_end); - assert(io->crop_left < io->crop_right); - if (y_end > io->crop_bottom) { - y_end = io->crop_bottom; // make sure we don't overflow on last row. - } - if (y_start < io->crop_top) { - const int delta = io->crop_top - y_start; - y_start = io->crop_top; - *in_data += delta * pixel_stride; - } - if (y_start >= y_end) return 0; // Crop window is empty. - - *in_data += io->crop_left * sizeof(uint32_t); - - io->mb_y = y_start - io->crop_top; - io->mb_w = io->crop_right - io->crop_left; - io->mb_h = y_end - y_start; - return 1; // Non-empty crop window. -} - -//------------------------------------------------------------------------------ - -static WEBP_INLINE int GetMetaIndex( - const uint32_t* const image, int xsize, int bits, int x, int y) { - if (bits == 0) return 0; - return image[xsize * (y >> bits) + (x >> bits)]; -} - -static WEBP_INLINE HTreeGroup* GetHtreeGroupForPos(VP8LMetadata* const hdr, - int x, int y) { - const int meta_index = GetMetaIndex(hdr->huffman_image_, hdr->huffman_xsize_, - hdr->huffman_subsample_bits_, x, y); - assert(meta_index < hdr->num_htree_groups_); - return hdr->htree_groups_ + meta_index; -} - -//------------------------------------------------------------------------------ -// Main loop, with custom row-processing function - -typedef void (*ProcessRowsFunc)(VP8LDecoder* const dec, int row); - -static void ApplyInverseTransforms(VP8LDecoder* const dec, int num_rows, - const uint32_t* const rows) { - int n = dec->next_transform_; - const int cache_pixs = dec->width_ * num_rows; - const int start_row = dec->last_row_; - const int end_row = start_row + num_rows; - const uint32_t* rows_in = rows; - uint32_t* const rows_out = dec->argb_cache_; - - // Inverse transforms. - // TODO: most transforms only need to operate on the cropped region only. - memcpy(rows_out, rows_in, cache_pixs * sizeof(*rows_out)); - while (n-- > 0) { - VP8LTransform* const transform = &dec->transforms_[n]; - VP8LInverseTransform(transform, start_row, end_row, rows_in, rows_out); - rows_in = rows_out; - } -} - -// Special method for paletted alpha data. -static void ApplyInverseTransformsAlpha(VP8LDecoder* const dec, int num_rows, - const uint8_t* const rows) { - const int start_row = dec->last_row_; - const int end_row = start_row + num_rows; - const uint8_t* rows_in = rows; - uint8_t* rows_out = (uint8_t*)dec->io_->opaque + dec->io_->width * start_row; - VP8LTransform* const transform = &dec->transforms_[0]; - assert(dec->next_transform_ == 1); - assert(transform->type_ == COLOR_INDEXING_TRANSFORM); - VP8LColorIndexInverseTransformAlpha(transform, start_row, end_row, rows_in, - rows_out); -} - -// Processes (transforms, scales & color-converts) the rows decoded after the -// last call. -static void ProcessRows(VP8LDecoder* const dec, int row) { - const uint32_t* const rows = dec->pixels_ + dec->width_ * dec->last_row_; - const int num_rows = row - dec->last_row_; - - if (num_rows <= 0) return; // Nothing to be done. - ApplyInverseTransforms(dec, num_rows, rows); - - // Emit output. - { - VP8Io* const io = dec->io_; - uint8_t* rows_data = (uint8_t*)dec->argb_cache_; - const int in_stride = io->width * sizeof(uint32_t); // in unit of RGBA - if (!SetCropWindow(io, dec->last_row_, row, &rows_data, in_stride)) { - // Nothing to output (this time). - } else { - const WebPDecBuffer* const output = dec->output_; - if (output->colorspace < MODE_YUV) { // convert to RGBA - const WebPRGBABuffer* const buf = &output->u.RGBA; - uint8_t* const rgba = buf->rgba + dec->last_out_row_ * buf->stride; - const int num_rows_out = io->use_scaling ? - EmitRescaledRowsRGBA(dec, rows_data, in_stride, io->mb_h, - rgba, buf->stride) : - EmitRows(output->colorspace, rows_data, in_stride, - io->mb_w, io->mb_h, rgba, buf->stride); - // Update 'last_out_row_'. - dec->last_out_row_ += num_rows_out; - } else { // convert to YUVA - dec->last_out_row_ = io->use_scaling ? - EmitRescaledRowsYUVA(dec, rows_data, in_stride, io->mb_h) : - EmitRowsYUVA(dec, rows_data, in_stride, io->mb_w, io->mb_h); - } - assert(dec->last_out_row_ <= output->height); - } - } - - // Update 'last_row_'. - dec->last_row_ = row; - assert(dec->last_row_ <= dec->height_); -} - -// Row-processing for the special case when alpha data contains only one -// transform (color indexing), and trivial non-green literals. -static int Is8bOptimizable(const VP8LMetadata* const hdr) { - int i; - if (hdr->color_cache_size_ > 0) return 0; - // When the Huffman tree contains only one symbol, we can skip the - // call to ReadSymbol() for red/blue/alpha channels. - for (i = 0; i < hdr->num_htree_groups_; ++i) { - const HuffmanTree* const htrees = hdr->htree_groups_[i].htrees_; - if (htrees[RED].num_nodes_ > 1) return 0; - if (htrees[BLUE].num_nodes_ > 1) return 0; - if (htrees[ALPHA].num_nodes_ > 1) return 0; - } - return 1; -} - -static void ExtractPalettedAlphaRows(VP8LDecoder* const dec, int row) { - const int num_rows = row - dec->last_row_; - const uint8_t* const in = - (uint8_t*)dec->pixels_ + dec->width_ * dec->last_row_; - if (num_rows > 0) { - ApplyInverseTransformsAlpha(dec, num_rows, in); - } - dec->last_row_ = dec->last_out_row_ = row; -} - -static int DecodeAlphaData(VP8LDecoder* const dec, uint8_t* const data, - int width, int height, int last_row) { - int ok = 1; - int row = dec->last_pixel_ / width; - int col = dec->last_pixel_ % width; - VP8LBitReader* const br = &dec->br_; - VP8LMetadata* const hdr = &dec->hdr_; - const HTreeGroup* htree_group = GetHtreeGroupForPos(hdr, col, row); - int pos = dec->last_pixel_; // current position - const int end = width * height; // End of data - const int last = width * last_row; // Last pixel to decode - const int len_code_limit = NUM_LITERAL_CODES + NUM_LENGTH_CODES; - const int mask = hdr->huffman_mask_; - assert(htree_group != NULL); - assert(pos < end); - assert(last_row <= height); - assert(Is8bOptimizable(hdr)); - - while (!br->eos_ && pos < last) { - int code; - // Only update when changing tile. - if ((col & mask) == 0) { - htree_group = GetHtreeGroupForPos(hdr, col, row); - } - VP8LFillBitWindow(br); - code = ReadSymbol(&htree_group->htrees_[GREEN], br); - if (code < NUM_LITERAL_CODES) { // Literal - data[pos] = code; - ++pos; - ++col; - if (col >= width) { - col = 0; - ++row; - if (row % NUM_ARGB_CACHE_ROWS == 0) { - ExtractPalettedAlphaRows(dec, row); - } - } - } else if (code < len_code_limit) { // Backward reference - int dist_code, dist; - const int length_sym = code - NUM_LITERAL_CODES; - const int length = GetCopyLength(length_sym, br); - const int dist_symbol = ReadSymbol(&htree_group->htrees_[DIST], br); - VP8LFillBitWindow(br); - dist_code = GetCopyDistance(dist_symbol, br); - dist = PlaneCodeToDistance(width, dist_code); - if (pos >= dist && end - pos >= length) { - int i; - for (i = 0; i < length; ++i) data[pos + i] = data[pos + i - dist]; - } else { - ok = 0; - goto End; - } - pos += length; - col += length; - while (col >= width) { - col -= width; - ++row; - if (row % NUM_ARGB_CACHE_ROWS == 0) { - ExtractPalettedAlphaRows(dec, row); - } - } - if (pos < last && (col & mask)) { - htree_group = GetHtreeGroupForPos(hdr, col, row); - } - } else { // Not reached - ok = 0; - goto End; - } - ok = !br->error_; - if (!ok) goto End; - } - // Process the remaining rows corresponding to last row-block. - ExtractPalettedAlphaRows(dec, row); - - End: - if (br->error_ || !ok || (br->eos_ && pos < end)) { - ok = 0; - dec->status_ = br->eos_ ? VP8_STATUS_SUSPENDED - : VP8_STATUS_BITSTREAM_ERROR; - } else { - dec->last_pixel_ = (int)pos; - if (pos == end) dec->state_ = READ_DATA; - } - return ok; -} - -static int DecodeImageData(VP8LDecoder* const dec, uint32_t* const data, - int width, int height, int last_row, - ProcessRowsFunc process_func) { - int ok = 1; - int row = dec->last_pixel_ / width; - int col = dec->last_pixel_ % width; - VP8LBitReader* const br = &dec->br_; - VP8LMetadata* const hdr = &dec->hdr_; - HTreeGroup* htree_group = GetHtreeGroupForPos(hdr, col, row); - uint32_t* src = data + dec->last_pixel_; - uint32_t* last_cached = src; - uint32_t* const src_end = data + width * height; // End of data - uint32_t* const src_last = data + width * last_row; // Last pixel to decode - const int len_code_limit = NUM_LITERAL_CODES + NUM_LENGTH_CODES; - const int color_cache_limit = len_code_limit + hdr->color_cache_size_; - VP8LColorCache* const color_cache = - (hdr->color_cache_size_ > 0) ? &hdr->color_cache_ : NULL; - const int mask = hdr->huffman_mask_; - assert(htree_group != NULL); - assert(src < src_end); - assert(src_last <= src_end); - - while (!br->eos_ && src < src_last) { - int code; - // Only update when changing tile. Note we could use this test: - // if "((((prev_col ^ col) | prev_row ^ row)) > mask)" -> tile changed - // but that's actually slower and needs storing the previous col/row. - if ((col & mask) == 0) { - htree_group = GetHtreeGroupForPos(hdr, col, row); - } - VP8LFillBitWindow(br); - code = ReadSymbol(&htree_group->htrees_[GREEN], br); - if (code < NUM_LITERAL_CODES) { // Literal - int red, green, blue, alpha; - red = ReadSymbol(&htree_group->htrees_[RED], br); - green = code; - VP8LFillBitWindow(br); - blue = ReadSymbol(&htree_group->htrees_[BLUE], br); - alpha = ReadSymbol(&htree_group->htrees_[ALPHA], br); - *src = (alpha << 24) | (red << 16) | (green << 8) | blue; - AdvanceByOne: - ++src; - ++col; - if (col >= width) { - col = 0; - ++row; - if ((row % NUM_ARGB_CACHE_ROWS == 0) && (process_func != NULL)) { - process_func(dec, row); - } - if (color_cache != NULL) { - while (last_cached < src) { - VP8LColorCacheInsert(color_cache, *last_cached++); - } - } - } - } else if (code < len_code_limit) { // Backward reference - int dist_code, dist; - const int length_sym = code - NUM_LITERAL_CODES; - const int length = GetCopyLength(length_sym, br); - const int dist_symbol = ReadSymbol(&htree_group->htrees_[DIST], br); - VP8LFillBitWindow(br); - dist_code = GetCopyDistance(dist_symbol, br); - dist = PlaneCodeToDistance(width, dist_code); - if (src - data < (ptrdiff_t)dist || src_end - src < (ptrdiff_t)length) { - ok = 0; - goto End; - } else { - int i; - for (i = 0; i < length; ++i) src[i] = src[i - dist]; - src += length; - } - col += length; - while (col >= width) { - col -= width; - ++row; - if ((row % NUM_ARGB_CACHE_ROWS == 0) && (process_func != NULL)) { - process_func(dec, row); - } - } - if (src < src_last) { - if (col & mask) htree_group = GetHtreeGroupForPos(hdr, col, row); - if (color_cache != NULL) { - while (last_cached < src) { - VP8LColorCacheInsert(color_cache, *last_cached++); - } - } - } - } else if (code < color_cache_limit) { // Color cache - const int key = code - len_code_limit; - assert(color_cache != NULL); - while (last_cached < src) { - VP8LColorCacheInsert(color_cache, *last_cached++); - } - *src = VP8LColorCacheLookup(color_cache, key); - goto AdvanceByOne; - } else { // Not reached - ok = 0; - goto End; - } - ok = !br->error_; - if (!ok) goto End; - } - // Process the remaining rows corresponding to last row-block. - if (process_func != NULL) process_func(dec, row); - - End: - if (br->error_ || !ok || (br->eos_ && src < src_end)) { - ok = 0; - dec->status_ = br->eos_ ? VP8_STATUS_SUSPENDED - : VP8_STATUS_BITSTREAM_ERROR; - } else { - dec->last_pixel_ = (int)(src - data); - if (src == src_end) dec->state_ = READ_DATA; - } - return ok; -} - -// ----------------------------------------------------------------------------- -// VP8LTransform - -static void ClearTransform(VP8LTransform* const transform) { - free(transform->data_); - transform->data_ = NULL; -} - -// For security reason, we need to remap the color map to span -// the total possible bundled values, and not just the num_colors. -static int ExpandColorMap(int num_colors, VP8LTransform* const transform) { - int i; - const int final_num_colors = 1 << (8 >> transform->bits_); - uint32_t* const new_color_map = - (uint32_t*)WebPSafeMalloc((uint64_t)final_num_colors, - sizeof(*new_color_map)); - if (new_color_map == NULL) { - return 0; - } else { - uint8_t* const data = (uint8_t*)transform->data_; - uint8_t* const new_data = (uint8_t*)new_color_map; - new_color_map[0] = transform->data_[0]; - for (i = 4; i < 4 * num_colors; ++i) { - // Equivalent to AddPixelEq(), on a byte-basis. - new_data[i] = (data[i] + new_data[i - 4]) & 0xff; - } - for (; i < 4 * final_num_colors; ++i) - new_data[i] = 0; // black tail. - free(transform->data_); - transform->data_ = new_color_map; - } - return 1; -} - -static int ReadTransform(int* const xsize, int const* ysize, - VP8LDecoder* const dec) { - int ok = 1; - VP8LBitReader* const br = &dec->br_; - VP8LTransform* transform = &dec->transforms_[dec->next_transform_]; - const VP8LImageTransformType type = - (VP8LImageTransformType)VP8LReadBits(br, 2); - - // Each transform type can only be present once in the stream. - if (dec->transforms_seen_ & (1U << type)) { - return 0; // Already there, let's not accept the second same transform. - } - dec->transforms_seen_ |= (1U << type); - - transform->type_ = type; - transform->xsize_ = *xsize; - transform->ysize_ = *ysize; - transform->data_ = NULL; - ++dec->next_transform_; - assert(dec->next_transform_ <= NUM_TRANSFORMS); - - switch (type) { - case PREDICTOR_TRANSFORM: - case CROSS_COLOR_TRANSFORM: - transform->bits_ = VP8LReadBits(br, 3) + 2; - ok = DecodeImageStream(VP8LSubSampleSize(transform->xsize_, - transform->bits_), - VP8LSubSampleSize(transform->ysize_, - transform->bits_), - 0, dec, &transform->data_); - break; - case COLOR_INDEXING_TRANSFORM: { - const int num_colors = VP8LReadBits(br, 8) + 1; - const int bits = (num_colors > 16) ? 0 - : (num_colors > 4) ? 1 - : (num_colors > 2) ? 2 - : 3; - *xsize = VP8LSubSampleSize(transform->xsize_, bits); - transform->bits_ = bits; - ok = DecodeImageStream(num_colors, 1, 0, dec, &transform->data_); - ok = ok && ExpandColorMap(num_colors, transform); - break; - } - case SUBTRACT_GREEN: - break; - default: - assert(0); // can't happen - break; - } - - return ok; -} - -// ----------------------------------------------------------------------------- -// VP8LMetadata - -static void InitMetadata(VP8LMetadata* const hdr) { - assert(hdr); - memset(hdr, 0, sizeof(*hdr)); -} - -static void ClearMetadata(VP8LMetadata* const hdr) { - assert(hdr); - - free(hdr->huffman_image_); - DeleteHtreeGroups(hdr->htree_groups_, hdr->num_htree_groups_); - VP8LColorCacheClear(&hdr->color_cache_); - InitMetadata(hdr); -} - -// ----------------------------------------------------------------------------- -// VP8LDecoder - -VP8LDecoder* VP8LNew(void) { - VP8LDecoder* const dec = (VP8LDecoder*)calloc(1, sizeof(*dec)); - if (dec == NULL) return NULL; - dec->status_ = VP8_STATUS_OK; - dec->action_ = READ_DIM; - dec->state_ = READ_DIM; - - VP8LDspInit(); // Init critical function pointers. - - return dec; -} - -void VP8LClear(VP8LDecoder* const dec) { - int i; - if (dec == NULL) return; - ClearMetadata(&dec->hdr_); - - free(dec->pixels_); - dec->pixels_ = NULL; - for (i = 0; i < dec->next_transform_; ++i) { - ClearTransform(&dec->transforms_[i]); - } - dec->next_transform_ = 0; - dec->transforms_seen_ = 0; - - free(dec->rescaler_memory); - dec->rescaler_memory = NULL; - - dec->output_ = NULL; // leave no trace behind -} - -void VP8LDelete(VP8LDecoder* const dec) { - if (dec != NULL) { - VP8LClear(dec); - free(dec); - } -} - -static void UpdateDecoder(VP8LDecoder* const dec, int width, int height) { - VP8LMetadata* const hdr = &dec->hdr_; - const int num_bits = hdr->huffman_subsample_bits_; - dec->width_ = width; - dec->height_ = height; - - hdr->huffman_xsize_ = VP8LSubSampleSize(width, num_bits); - hdr->huffman_mask_ = (num_bits == 0) ? ~0 : (1 << num_bits) - 1; -} - -static int DecodeImageStream(int xsize, int ysize, - int is_level0, - VP8LDecoder* const dec, - uint32_t** const decoded_data) { - int ok = 1; - int transform_xsize = xsize; - int transform_ysize = ysize; - VP8LBitReader* const br = &dec->br_; - VP8LMetadata* const hdr = &dec->hdr_; - uint32_t* data = NULL; - int color_cache_bits = 0; - - // Read the transforms (may recurse). - if (is_level0) { - while (ok && VP8LReadBits(br, 1)) { - ok = ReadTransform(&transform_xsize, &transform_ysize, dec); - } - } - - // Color cache - if (ok && VP8LReadBits(br, 1)) { - color_cache_bits = VP8LReadBits(br, 4); - ok = (color_cache_bits >= 1 && color_cache_bits <= MAX_CACHE_BITS); - if (!ok) { - dec->status_ = VP8_STATUS_BITSTREAM_ERROR; - goto End; - } - } - - // Read the Huffman codes (may recurse). - ok = ok && ReadHuffmanCodes(dec, transform_xsize, transform_ysize, - color_cache_bits, is_level0); - if (!ok) { - dec->status_ = VP8_STATUS_BITSTREAM_ERROR; - goto End; - } - - // Finish setting up the color-cache - if (color_cache_bits > 0) { - hdr->color_cache_size_ = 1 << color_cache_bits; - if (!VP8LColorCacheInit(&hdr->color_cache_, color_cache_bits)) { - dec->status_ = VP8_STATUS_OUT_OF_MEMORY; - ok = 0; - goto End; - } - } else { - hdr->color_cache_size_ = 0; - } - UpdateDecoder(dec, transform_xsize, transform_ysize); - - if (is_level0) { // level 0 complete - dec->state_ = READ_HDR; - goto End; - } - - { - const uint64_t total_size = (uint64_t)transform_xsize * transform_ysize; - data = (uint32_t*)WebPSafeMalloc(total_size, sizeof(*data)); - if (data == NULL) { - dec->status_ = VP8_STATUS_OUT_OF_MEMORY; - ok = 0; - goto End; - } - } - - // Use the Huffman trees to decode the LZ77 encoded data. - ok = DecodeImageData(dec, data, transform_xsize, transform_ysize, - transform_ysize, NULL); - ok = ok && !br->error_; - - End: - - if (!ok) { - free(data); - ClearMetadata(hdr); - // If not enough data (br.eos_) resulted in BIT_STREAM_ERROR, update the - // status appropriately. - if (dec->status_ == VP8_STATUS_BITSTREAM_ERROR && dec->br_.eos_) { - dec->status_ = VP8_STATUS_SUSPENDED; - } - } else { - if (decoded_data != NULL) { - *decoded_data = data; - } else { - // We allocate image data in this function only for transforms. At level 0 - // (that is: not the transforms), we shouldn't have allocated anything. - assert(data == NULL); - assert(is_level0); - } - dec->last_pixel_ = 0; // Reset for future DECODE_DATA_FUNC() calls. - if (!is_level0) ClearMetadata(hdr); // Clean up temporary data behind. - } - return ok; -} - -//------------------------------------------------------------------------------ -// Allocate internal buffers dec->pixels_ and dec->argb_cache_. -static int AllocateInternalBuffers32b(VP8LDecoder* const dec, int final_width) { - const uint64_t num_pixels = (uint64_t)dec->width_ * dec->height_; - // Scratch buffer corresponding to top-prediction row for transforming the - // first row in the row-blocks. Not needed for paletted alpha. - const uint64_t cache_top_pixels = (uint16_t)final_width; - // Scratch buffer for temporary BGRA storage. Not needed for paletted alpha. - const uint64_t cache_pixels = (uint64_t)final_width * NUM_ARGB_CACHE_ROWS; - const uint64_t total_num_pixels = - num_pixels + cache_top_pixels + cache_pixels; - - assert(dec->width_ <= final_width); - dec->pixels_ = (uint32_t*)WebPSafeMalloc(total_num_pixels, sizeof(uint32_t)); - if (dec->pixels_ == NULL) { - dec->argb_cache_ = NULL; // for sanity check - dec->status_ = VP8_STATUS_OUT_OF_MEMORY; - return 0; - } - dec->argb_cache_ = dec->pixels_ + num_pixels + cache_top_pixels; - return 1; -} - -static int AllocateInternalBuffers8b(VP8LDecoder* const dec) { - const uint64_t total_num_pixels = (uint64_t)dec->width_ * dec->height_; - dec->argb_cache_ = NULL; // for sanity check - dec->pixels_ = (uint32_t*)WebPSafeMalloc(total_num_pixels, sizeof(uint8_t)); - if (dec->pixels_ == NULL) { - dec->status_ = VP8_STATUS_OUT_OF_MEMORY; - return 0; - } - return 1; -} - -//------------------------------------------------------------------------------ - -// Special row-processing that only stores the alpha data. -static void ExtractAlphaRows(VP8LDecoder* const dec, int row) { - const int num_rows = row - dec->last_row_; - const uint32_t* const in = dec->pixels_ + dec->width_ * dec->last_row_; - - if (num_rows <= 0) return; // Nothing to be done. - ApplyInverseTransforms(dec, num_rows, in); - - // Extract alpha (which is stored in the green plane). - { - const int width = dec->io_->width; // the final width (!= dec->width_) - const int cache_pixs = width * num_rows; - uint8_t* const dst = (uint8_t*)dec->io_->opaque + width * dec->last_row_; - const uint32_t* const src = dec->argb_cache_; - int i; - for (i = 0; i < cache_pixs; ++i) dst[i] = (src[i] >> 8) & 0xff; - } - dec->last_row_ = dec->last_out_row_ = row; -} - -int VP8LDecodeAlphaHeader(ALPHDecoder* const alph_dec, - const uint8_t* const data, size_t data_size, - uint8_t* const output) { - int ok = 0; - VP8LDecoder* dec; - VP8Io* io; - assert(alph_dec != NULL); - alph_dec->vp8l_dec_ = VP8LNew(); - if (alph_dec->vp8l_dec_ == NULL) return 0; - dec = alph_dec->vp8l_dec_; - - dec->width_ = alph_dec->width_; - dec->height_ = alph_dec->height_; - dec->io_ = &alph_dec->io_; - io = dec->io_; - - VP8InitIo(io); - WebPInitCustomIo(NULL, io); // Just a sanity Init. io won't be used. - io->opaque = output; - io->width = alph_dec->width_; - io->height = alph_dec->height_; - - dec->status_ = VP8_STATUS_OK; - VP8LInitBitReader(&dec->br_, data, data_size); - - dec->action_ = READ_HDR; - if (!DecodeImageStream(alph_dec->width_, alph_dec->height_, 1, dec, NULL)) { - goto Err; - } - - // Special case: if alpha data uses only the color indexing transform and - // doesn't use color cache (a frequent case), we will use DecodeAlphaData() - // method that only needs allocation of 1 byte per pixel (alpha channel). - if (dec->next_transform_ == 1 && - dec->transforms_[0].type_ == COLOR_INDEXING_TRANSFORM && - Is8bOptimizable(&dec->hdr_)) { - alph_dec->use_8b_decode = 1; - ok = AllocateInternalBuffers8b(dec); - } else { - // Allocate internal buffers (note that dec->width_ may have changed here). - alph_dec->use_8b_decode = 0; - ok = AllocateInternalBuffers32b(dec, alph_dec->width_); - } - - if (!ok) goto Err; - - dec->action_ = READ_DATA; - return 1; - - Err: - VP8LDelete(alph_dec->vp8l_dec_); - alph_dec->vp8l_dec_ = NULL; - return 0; -} - -int VP8LDecodeAlphaImageStream(ALPHDecoder* const alph_dec, int last_row) { - VP8LDecoder* const dec = alph_dec->vp8l_dec_; - assert(dec != NULL); - assert(dec->action_ == READ_DATA); - assert(last_row <= dec->height_); - - if (dec->last_pixel_ == dec->width_ * dec->height_) { - return 1; // Done - } - - // Decode (with special row processing). - return alph_dec->use_8b_decode ? - DecodeAlphaData(dec, (uint8_t*)dec->pixels_, dec->width_, dec->height_, - last_row) : - DecodeImageData(dec, dec->pixels_, dec->width_, dec->height_, - last_row, ExtractAlphaRows); -} - -//------------------------------------------------------------------------------ - -int VP8LDecodeHeader(VP8LDecoder* const dec, VP8Io* const io) { - int width, height, has_alpha; - - if (dec == NULL) return 0; - if (io == NULL) { - dec->status_ = VP8_STATUS_INVALID_PARAM; - return 0; - } - - dec->io_ = io; - dec->status_ = VP8_STATUS_OK; - VP8LInitBitReader(&dec->br_, io->data, io->data_size); - if (!ReadImageInfo(&dec->br_, &width, &height, &has_alpha)) { - dec->status_ = VP8_STATUS_BITSTREAM_ERROR; - goto Error; - } - dec->state_ = READ_DIM; - io->width = width; - io->height = height; - - dec->action_ = READ_HDR; - if (!DecodeImageStream(width, height, 1, dec, NULL)) goto Error; - return 1; - - Error: - VP8LClear(dec); - assert(dec->status_ != VP8_STATUS_OK); - return 0; -} - -int VP8LDecodeImage(VP8LDecoder* const dec) { - VP8Io* io = NULL; - WebPDecParams* params = NULL; - - // Sanity checks. - if (dec == NULL) return 0; - - io = dec->io_; - assert(io != NULL); - params = (WebPDecParams*)io->opaque; - assert(params != NULL); - dec->output_ = params->output; - assert(dec->output_ != NULL); - - // Initialization. - if (!WebPIoInitFromOptions(params->options, io, MODE_BGRA)) { - dec->status_ = VP8_STATUS_INVALID_PARAM; - goto Err; - } - - if (!AllocateInternalBuffers32b(dec, io->width)) goto Err; - - if (io->use_scaling && !AllocateAndInitRescaler(dec, io)) goto Err; - - // Decode. - dec->action_ = READ_DATA; - if (!DecodeImageData(dec, dec->pixels_, dec->width_, dec->height_, - dec->height_, ProcessRows)) { - goto Err; - } - - // Cleanup. - params->last_y = dec->last_out_row_; - VP8LClear(dec); - return 1; - - Err: - VP8LClear(dec); - assert(dec->status_ != VP8_STATUS_OK); - return 0; -} - -//------------------------------------------------------------------------------ - diff --git a/Telegram/_qt_5_4_0_patch.diff b/Telegram/_qt_5_5_0_patch.diff similarity index 73% rename from Telegram/_qt_5_4_0_patch.diff rename to Telegram/_qt_5_5_0_patch.diff index 3d7210e5f..9911188f6 100644 --- a/Telegram/_qt_5_4_0_patch.diff +++ b/Telegram/_qt_5_5_0_patch.diff @@ -1,35 +1,36 @@ -diff --git a/qtbase/mkspecs/win32-msvc2013/qmake.conf b/qtbase/mkspecs/win32-msvc2013/qmake.conf -index 535904a..6d0e9b9 100644 ---- a/qtbase/mkspecs/win32-msvc2013/qmake.conf -+++ b/qtbase/mkspecs/win32-msvc2013/qmake.conf -@@ -25,9 +25,9 @@ QMAKE_YACCFLAGS = -d - QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t -FS +diff --git a/qtbase/mkspecs/common/msvc-desktop.conf b/qtbase/mkspecs/common/msvc-desktop.conf +index e638af6..e44ee5e 100644 +--- a/qtbase/mkspecs/common/msvc-desktop.conf ++++ b/qtbase/mkspecs/common/msvc-desktop.conf +@@ -28,9 +28,9 @@ QMAKE_YACCFLAGS = -d + QMAKE_CFLAGS = -nologo -Zc:wchar_t QMAKE_CFLAGS_WARN_ON = -W3 QMAKE_CFLAGS_WARN_OFF = -W0 --QMAKE_CFLAGS_RELEASE = -O2 -MD -Zc:strictStrings --QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi -Zc:strictStrings +-QMAKE_CFLAGS_RELEASE = -O2 -MD +-QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi -QMAKE_CFLAGS_DEBUG = -Zi -MDd -+QMAKE_CFLAGS_RELEASE = -O2 -MT -Zc:strictStrings -+QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi -Zc:strictStrings ++QMAKE_CFLAGS_RELEASE = -O2 -MT ++QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi +QMAKE_CFLAGS_DEBUG = -Zi -MTd QMAKE_CFLAGS_YACC = QMAKE_CFLAGS_LTCG = -GL - QMAKE_CFLAGS_MP = -MP + QMAKE_CFLAGS_SSE2 = -arch:SSE2 diff --git a/qtbase/qmake/generators/mac/pbuilder_pbx.cpp b/qtbase/qmake/generators/mac/pbuilder_pbx.cpp -index 0ff4250..9ed555c 100644 +index 81bb068..a0fe016 100644 --- a/qtbase/qmake/generators/mac/pbuilder_pbx.cpp +++ b/qtbase/qmake/generators/mac/pbuilder_pbx.cpp -@@ -1445,11 +1445,15 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) - plist_in_text = plist_in_text.replace("@TYPEINFO@", +@@ -1500,11 +1500,15 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) + plist_in_text.replace("@TYPEINFO@", (project->isEmpty("QMAKE_PKGINFO_TYPEINFO") ? QString::fromLatin1("????") : project->first("QMAKE_PKGINFO_TYPEINFO").left(4).toQString())); -- QFile plist_out_file("Info.plist"); +- QFile plist_out_file(Option::output_dir + "/Info.plist"); +- if (plist_out_file.open(QIODevice::WriteOnly | QIODevice::Text)) { + QString plist_dir; + if (!project->isEmpty("PLIST_DIR")) + plist_dir = project->first("PLIST_DIR").toQString(); + QString plist_in_filename = QFileInfo(plist_in_file).fileName(); -+ QFile plist_out_file(plist_dir + plist_in_filename); - if (plist_out_file.open(QIODevice::WriteOnly | QIODevice::Text)) { ++ QFile plist_out_file(Option::output_dir + "/" + plist_dir + plist_in_filename); ++ if (plist_out_file.open(QIODevice::WriteOnly | QIODevice::Text)) { QTextStream plist_out(&plist_out_file); plist_out << plist_in_text; - t << "\t\t\t\t" << writeSettings("INFOPLIST_FILE", "Info.plist") << ";\n"; @@ -38,10 +39,10 @@ index 0ff4250..9ed555c 100644 } } diff --git a/qtbase/qmake/generators/makefile.cpp b/qtbase/qmake/generators/makefile.cpp -index bf9a9d8..0216f5c 100644 +index 4a03faf..2c18c48 100644 --- a/qtbase/qmake/generators/makefile.cpp +++ b/qtbase/qmake/generators/makefile.cpp -@@ -206,7 +206,7 @@ MakefileGenerator::initOutPaths() +@@ -167,7 +167,7 @@ MakefileGenerator::initOutPaths() v["PRECOMPILED_DIR"] = v["OBJECTS_DIR"]; static const char * const dirs[] = { "OBJECTS_DIR", "DESTDIR", "SUBLIBS_DIR", "DLLDESTDIR", @@ -51,7 +52,7 @@ index bf9a9d8..0216f5c 100644 const ProKey dkey(dirs[x]); if (v[dkey].isEmpty()) diff --git a/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c b/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c -index 1987f27..6b36e4f 100644 +index 0907653..96f6e19 100644 --- a/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c +++ b/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c @@ -101,7 +101,7 @@ for (p = string; length-- > 0; p++) @@ -64,10 +65,10 @@ index 1987f27..6b36e4f 100644 /* High surrogate. Must be a followed by a low surrogate. */ if (length == 0) diff --git a/qtbase/src/corelib/tools/qunicodetables.cpp b/qtbase/src/corelib/tools/qunicodetables.cpp -index 072e8ad..2bf3bfd 100644 +index 73dce81..76c6933 100644 --- a/qtbase/src/corelib/tools/qunicodetables.cpp +++ b/qtbase/src/corelib/tools/qunicodetables.cpp -@@ -5360,7 +5360,7 @@ static const Properties uc_properties[] = { +@@ -5839,7 +5839,7 @@ static const Properties uc_properties[] = { { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 11 }, { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 11 }, { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 11 }, @@ -77,7 +78,7 @@ index 072e8ad..2bf3bfd 100644 { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, diff --git a/qtbase/src/gui/image/qbmphandler.cpp b/qtbase/src/gui/image/qbmphandler.cpp -index 21c1a2f..f293ef9 100644 +index f124ced..eb78a13 100644 --- a/qtbase/src/gui/image/qbmphandler.cpp +++ b/qtbase/src/gui/image/qbmphandler.cpp @@ -212,6 +212,9 @@ static bool read_dib_body(QDataStream &s, const BMP_INFOHDR &bi, int offset, int @@ -101,7 +102,7 @@ index 21c1a2f..f293ef9 100644 uchar rgb[4]; int rgb_len = t == BMP_OLD ? 3 : 4; diff --git a/qtbase/src/gui/kernel/qplatformdialoghelper.h b/qtbase/src/gui/kernel/qplatformdialoghelper.h -index e0730cd..00fccad 100644 +index 8b2b988..2d1cdd9 100644 --- a/qtbase/src/gui/kernel/qplatformdialoghelper.h +++ b/qtbase/src/gui/kernel/qplatformdialoghelper.h @@ -363,6 +363,7 @@ public: @@ -113,7 +114,7 @@ index e0730cd..00fccad 100644 virtual void selectNameFilter(const QString &filter) = 0; virtual QString selectedNameFilter() const = 0; diff --git a/qtbase/src/gui/painting/qpaintengine_p.h b/qtbase/src/gui/painting/qpaintengine_p.h -index 312320c..5e82318 100644 +index c58662e..468d671 100644 --- a/qtbase/src/gui/painting/qpaintengine_p.h +++ b/qtbase/src/gui/painting/qpaintengine_p.h @@ -79,8 +79,18 @@ public: @@ -123,8 +124,8 @@ index 312320c..5e82318 100644 - else - systemClip = systemTransform.map(systemClip); + else { -+ // Transform the system clip region back from device pixels to device-independent pixels before -+ // applying systemTransform, which already has transform from device-independent pixels to device pixels ++// Transform the system clip region back from device pixels to device-independent pixels before ++// applying systemTransform, which already has transform from device-independent pixels to device pixels +#ifdef Q_OS_MAC + QTransform scaleTransform; + const qreal invDevicePixelRatio = 1. / pdev->devicePixelRatio(); @@ -138,32 +139,30 @@ index 312320c..5e82318 100644 // Make sure we're inside the viewport. diff --git a/qtbase/src/gui/text/qtextlayout.cpp b/qtbase/src/gui/text/qtextlayout.cpp -index 1ac50d3..3c88caa 100644 +index 7da3e84..0829250 100644 --- a/qtbase/src/gui/text/qtextlayout.cpp +++ b/qtbase/src/gui/text/qtextlayout.cpp -@@ -643,7 +643,10 @@ int QTextLayout::nextCursorPosition(int oldPos, CursorMode mode) const +@@ -643,6 +643,9 @@ int QTextLayout::nextCursorPosition(int oldPos, CursorMode mode) const while (oldPos < len && !attributes[oldPos].graphemeBoundary) oldPos++; } else { -- if (oldPos < len && d->atWordSeparator(oldPos)) { -+ while (oldPos < len && d->atSpace(oldPos)) ++ while (oldPos < len && attributes[oldPos].whiteSpace) + oldPos++; + -+ if (oldPos < len && d->atWordSeparator(oldPos)) { + if (oldPos < len && d->atWordSeparator(oldPos)) { oldPos++; while (oldPos < len && d->atWordSeparator(oldPos)) - oldPos++; @@ -651,8 +654,6 @@ int QTextLayout::nextCursorPosition(int oldPos, CursorMode mode) const - while (oldPos < len && !d->atSpace(oldPos) && !d->atWordSeparator(oldPos)) + while (oldPos < len && !attributes[oldPos].whiteSpace && !d->atWordSeparator(oldPos)) oldPos++; } -- while (oldPos < len && d->atSpace(oldPos)) +- while (oldPos < len && attributes[oldPos].whiteSpace) - oldPos++; } return oldPos; diff --git a/qtbase/src/gui/text/qtextlayout.h b/qtbase/src/gui/text/qtextlayout.h -index 1e0ab9b..47972d3 100644 +index 47dcd38..64c3810 100644 --- a/qtbase/src/gui/text/qtextlayout.h +++ b/qtbase/src/gui/text/qtextlayout.h @@ -186,6 +186,8 @@ private: @@ -176,27 +175,29 @@ index 1e0ab9b..47972d3 100644 diff --git a/qtbase/src/network/socket/qnativesocketengine_win.cpp b/qtbase/src/network/socket/qnativesocketengine_win.cpp -index f5943d6..f7787c3 100644 +index 72f85c8..a1c2e08 100644 --- a/qtbase/src/network/socket/qnativesocketengine_win.cpp +++ b/qtbase/src/network/socket/qnativesocketengine_win.cpp -@@ -703,6 +703,12 @@ bool QNativeSocketEnginePrivate::nativeConnect(const QHostAddress &address, quin +@@ -685,7 +685,13 @@ bool QNativeSocketEnginePrivate::nativeConnect(const QHostAddress &address, quin errorDetected = true; break; } +- if (value == WSAEADDRNOTAVAIL) { + if (value == WSAENETUNREACH) { + setError(QAbstractSocket::NetworkError, NetworkUnreachableErrorString); + socketState = QAbstractSocket::UnconnectedState; + errorDetected = true; + break; + } - if (value == WSAEADDRNOTAVAIL) { ++ if (value == WSAEADDRNOTAVAIL) { setError(QAbstractSocket::NetworkError, AddressNotAvailableErrorString); socketState = QAbstractSocket::UnconnectedState; + errorDetected = true; diff --git a/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp b/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp -index 43903ac..efa7014 100644 +index 65cdabd..190683e 100644 --- a/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp +++ b/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp -@@ -213,6 +213,78 @@ void QBasicFontDatabase::releaseHandle(void *handle) +@@ -198,6 +198,78 @@ void QBasicFontDatabase::releaseHandle(void *handle) extern FT_Library qt_getFreetype(); @@ -275,12 +276,12 @@ index 43903ac..efa7014 100644 QStringList QBasicFontDatabase::addTTFile(const QByteArray &fontData, const QByteArray &file, QSupportedWritingSystems *supportedWritingSystems) { FT_Library library = qt_getFreetype(); -@@ -224,9 +296,9 @@ QStringList QBasicFontDatabase::addTTFile(const QByteArray &fontData, const QByt +@@ -209,9 +281,9 @@ QStringList QBasicFontDatabase::addTTFile(const QByteArray &fontData, const QByt FT_Face face; FT_Error error; if (!fontData.isEmpty()) { - error = FT_New_Memory_Face(library, (const FT_Byte *)fontData.constData(), fontData.size(), index, &face); -+ error = __ft_New_Memory_Face(library, (const FT_Byte *)fontData.constData(), fontData.size(), index, &face); ++ error = __ft_New_Memory_Face(library, (const FT_Byte *)fontData.constData(), fontData.size(), index, &face); } else { - error = FT_New_Face(library, file.constData(), index, &face); + error = __ft_New_Face(library, file.constData(), index, &face); @@ -288,10 +289,10 @@ index 43903ac..efa7014 100644 if (error != FT_Err_Ok) { qDebug() << "FT_New_Face failed with index" << index << ":" << hex << error; diff --git a/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp -index 5dec1d0..f4d6fcd 100644 +index 112bb8e..9f1df70 100644 --- a/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp +++ b/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp -@@ -341,6 +341,15 @@ static void populateFromPattern(FcPattern *pattern) +@@ -373,6 +373,15 @@ static void populateFromPattern(FcPattern *pattern) return; familyName = QString::fromUtf8((const char *)value); @@ -307,7 +308,7 @@ index 5dec1d0..f4d6fcd 100644 slant_value = FC_SLANT_ROMAN; weight_value = FC_WEIGHT_REGULAR; -@@ -742,6 +751,15 @@ QStringList QFontconfigDatabase::addApplicationFont(const QByteArray &fontData, +@@ -781,6 +790,15 @@ QStringList QFontconfigDatabase::addApplicationFont(const QByteArray &fontData, FcChar8 *fam = 0; if (FcPatternGetString(pattern, FC_FAMILY, 0, &fam) == FcResultMatch) { QString family = QString::fromUtf8(reinterpret_cast(fam)); @@ -324,10 +325,10 @@ index 5dec1d0..f4d6fcd 100644 } populateFromPattern(pattern); diff --git a/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm b/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm -index 9f2ff10..fe87ca1 100644 +index be70092..1594dac 100644 --- a/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm +++ b/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm -@@ -257,6 +257,10 @@ static void getFontDescription(CTFontDescriptorRef font, FontDescription *fd) +@@ -263,6 +263,10 @@ static void getFontDescription(CTFontDescriptorRef font, FontDescription *fd) fd->foundryName = QStringLiteral("CoreText"); fd->familyName = (CFStringRef) CTFontDescriptorCopyAttribute(font, kCTFontFamilyNameAttribute); @@ -339,10 +340,10 @@ index 9f2ff10..fe87ca1 100644 fd->weight = QFont::Normal; fd->style = QFont::StyleNormal; diff --git a/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm b/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm -index 9f7609f..5df1514 100644 +index f3a0216..643ebdd 100644 --- a/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm +++ b/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm -@@ -216,7 +216,7 @@ static void cleanupCocoaApplicationDelegate() +@@ -210,7 +210,7 @@ QT_END_NAMESPACE if (reflectionDelegate) { if ([reflectionDelegate respondsToSelector:@selector(applicationShouldTerminate:)]) return [reflectionDelegate applicationShouldTerminate:sender]; @@ -352,25 +353,18 @@ index 9f7609f..5df1514 100644 if ([self canQuit]) { diff --git a/qtbase/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm b/qtbase/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm -index e449fd3..7f7bd24 100644 +index 713758c..9c695aa 100644 --- a/qtbase/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm +++ b/qtbase/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm -@@ -102,7 +102,7 @@ QT_USE_NAMESPACE +@@ -94,6 +94,7 @@ QT_USE_NAMESPACE QCocoaSystemTrayIcon *systray; NSStatusItem *item; QCocoaMenu *menu; -- bool menuVisible; -+ bool menuVisible, iconSelected; ++ bool menuVisible, iconSelected; QIcon icon; QT_MANGLE_NAMESPACE(QNSImageView) *imageCell; } -@@ -202,13 +202,11 @@ void QCocoaSystemTrayIcon::updateIcon(const QIcon &icon) - - m_sys->item->icon = icon; - -- const bool menuVisible = m_sys->item->menu && m_sys->item->menuVisible; -- - // The reccomended maximum title bar icon height is 18 points +@@ -197,7 +198,7 @@ void QCocoaSystemTrayIcon::updateIcon(const QIcon &icon) // (device independent pixels). The menu height on past and // current OS X versions is 22 points. Provide some future-proofing // by deriving the icon height from the menu height. @@ -379,32 +373,51 @@ index e449fd3..7f7bd24 100644 const int menuHeight = [[[NSApplication sharedApplication] mainMenu] menuBarHeight]; const int maxImageHeight = menuHeight - padding; -@@ -218,7 +216,7 @@ void QCocoaSystemTrayIcon::updateIcon(const QIcon &icon) +@@ -207,8 +208,9 @@ void QCocoaSystemTrayIcon::updateIcon(const QIcon &icon) // devicePixelRatio for the "best" screen on the system. qreal devicePixelRatio = qApp->devicePixelRatio(); const int maxPixmapHeight = maxImageHeight * devicePixelRatio; -- const QIcon::Mode mode = menuVisible ? QIcon::Selected : QIcon::Normal; -+ const QIcon::Mode mode = m_sys->item->iconSelected ? QIcon::Selected : QIcon::Normal; ++ const QIcon::Mode mode = m_sys->item->iconSelected ? QIcon::Selected : QIcon::Normal; QSize selectedSize; - Q_FOREACH (const QSize& size, sortByHeight(icon.availableSizes(mode))) { +- Q_FOREACH (const QSize& size, sortByHeight(icon.availableSizes())) { ++ Q_FOREACH (const QSize& size, sortByHeight(icon.availableSizes(mode))) { // Select a pixmap based on the height. We want the largest pixmap -@@ -381,6 +379,7 @@ QT_END_NAMESPACE + // with a height smaller or equal to maxPixmapHeight. The pixmap + // may rectangular; assume it has a reasonable size. If there is +@@ -224,9 +226,9 @@ void QCocoaSystemTrayIcon::updateIcon(const QIcon &icon) + + // Handle SVG icons, which do not return anything for availableSizes(). + if (!selectedSize.isValid()) +- selectedSize = icon.actualSize(QSize(maxPixmapHeight, maxPixmapHeight)); ++ selectedSize = icon.actualSize(QSize(maxPixmapHeight, maxPixmapHeight), mode); + +- QPixmap pixmap = icon.pixmap(selectedSize); ++ QPixmap pixmap = icon.pixmap(selectedSize, mode); + + // Draw a low-resolution icon if there is not enough pixels for a retina + // icon. This prevents showing a small icon on retina displays. +@@ -373,6 +375,10 @@ QT_END_NAMESPACE Q_UNUSED(notification); down = NO; + parent->iconSelected = false; - parent->systray->updateIcon(parent->icon); - parent->menuVisible = false; ++ parent->systray->updateIcon(parent->icon); ++ parent->menuVisible = false; ++ + [self setNeedsDisplay:YES]; + } -@@ -393,6 +392,7 @@ QT_END_NAMESPACE +@@ -381,6 +387,9 @@ QT_END_NAMESPACE + down = YES; int clickCount = [mouseEvent clickCount]; [self setNeedsDisplay:YES]; - -+ parent->iconSelected = (clickCount != 2) && parent->menu; - parent->systray->updateIcon(parent->icon); ++ ++ parent->iconSelected = (clickCount != 2) && parent->menu; ++ parent->systray->updateIcon(parent->icon); if (clickCount == 2) { -@@ -411,6 +411,10 @@ QT_END_NAMESPACE + [self menuTrackingDone:nil]; +@@ -398,6 +407,10 @@ QT_END_NAMESPACE -(void)mouseUp:(NSEvent *)mouseEvent { Q_UNUSED(mouseEvent); @@ -415,7 +428,7 @@ index e449fd3..7f7bd24 100644 [self menuTrackingDone:nil]; } -@@ -422,6 +426,10 @@ QT_END_NAMESPACE +@@ -409,6 +422,10 @@ QT_END_NAMESPACE -(void)rightMouseUp:(NSEvent *)mouseEvent { Q_UNUSED(mouseEvent); @@ -426,20 +439,36 @@ index e449fd3..7f7bd24 100644 [self menuTrackingDone:nil]; } -@@ -437,7 +445,7 @@ QT_END_NAMESPACE +@@ -424,7 +441,7 @@ QT_END_NAMESPACE } -(void)drawRect:(NSRect)rect { - [[parent item] drawStatusBarBackgroundInRect:rect withHighlight:down]; -+ [[parent item] drawStatusBarBackgroundInRect:rect withHighlight:parent->menu ? down : NO]; ++ [[parent item] drawStatusBarBackgroundInRect:rect withHighlight:parent->menu ? down : NO]; [super drawRect:rect]; } @end +@@ -437,6 +454,7 @@ QT_END_NAMESPACE + if (self) { + item = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength] retain]; + menu = 0; ++ menuVisible = false; + systray = sys; + imageCell = [[QNSImageView alloc] initWithParent:self]; + [item setView: imageCell]; +@@ -481,6 +499,7 @@ QT_END_NAMESPACE + selector:@selector(menuTrackingDone:) + name:NSMenuDidEndTrackingNotification + object:m]; ++ menuVisible = true; + [item popUpStatusItemMenu: m]; + } + } diff --git a/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm b/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm -index 6656212..486fda0 100644 +index 92fc66a..d18884a 100644 --- a/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm +++ b/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm -@@ -175,7 +175,7 @@ static void selectNextKeyWindow(NSWindow *currentKeyWindow) +@@ -142,7 +142,7 @@ static bool isMouseEvent(NSEvent *ev) if (!self.window.delegate) return; // Already detached, pending NSAppKitDefined event @@ -448,7 +477,7 @@ index 6656212..486fda0 100644 NSPoint loc = [theEvent locationInWindow]; NSRect windowFrame = [self.window convertRectFromScreen:[self.window frame]]; NSRect contentFrame = [[self.window contentView] frame]; -@@ -918,6 +918,14 @@ void QCocoaWindow::setWindowFilePath(const QString &filePath) +@@ -924,6 +924,14 @@ void QCocoaWindow::setWindowFilePath(const QString &filePath) [m_nsWindow setRepresentedFilename: fi.exists() ? QCFString::toNSString(filePath) : @""]; } @@ -463,7 +492,7 @@ index 6656212..486fda0 100644 void QCocoaWindow::setWindowIcon(const QIcon &icon) { QCocoaAutoReleasePool pool; -@@ -933,7 +941,8 @@ void QCocoaWindow::setWindowIcon(const QIcon &icon) +@@ -939,7 +947,8 @@ void QCocoaWindow::setWindowIcon(const QIcon &icon) if (icon.isNull()) { [iconButton setImage:nil]; } else { @@ -474,33 +503,34 @@ index 6656212..486fda0 100644 [iconButton setImage:image]; [image release]; diff --git a/qtbase/src/plugins/platforms/cocoa/qnsview.mm b/qtbase/src/plugins/platforms/cocoa/qnsview.mm -index 6993407..0357bf4 100644 +index d44cdb3..cfc8705 100644 --- a/qtbase/src/plugins/platforms/cocoa/qnsview.mm +++ b/qtbase/src/plugins/platforms/cocoa/qnsview.mm -@@ -1321,7 +1321,7 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent) +@@ -1348,7 +1348,7 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent) #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8 if (QSysInfo::QSysInfo::MacintoshVersion >= QSysInfo::MV_10_8) { // On 10.8 and above, MayBegin is likely to happen. We treat it the same as an actual begin. -- if (phase == NSEventPhaseMayBegin) -+ if (phase == NSEventPhaseMayBegin || phase == NSEventPhaseBegan) +- if (phase == NSEventPhaseMayBegin) { ++ if (phase == NSEventPhaseMayBegin || phase == NSEventPhaseBegan) { + m_scrolling = true; ph = Qt::ScrollBegin; - } else - #endif -@@ -1451,6 +1451,9 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent) + } +@@ -1489,6 +1489,10 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent) && qtKey == Qt::Key_Period) { [self handleKeyEvent:nsevent eventType:int(QEvent::KeyPress)]; return YES; -+ } else if ([nsevent modifierFlags] & NSControlKeyMask && (qtKey == Qt::Key_Tab || qtKey == Qt::Key_Backtab)) { ++ } else if ([nsevent modifierFlags] & NSControlKeyMask ++ && (qtKey == Qt::Key_Tab || qtKey == Qt::Key_Backtab)) { + [self handleKeyEvent:nsevent eventType:int(QEvent::KeyPress)]; + return YES; } } return [super performKeyEquivalent:nsevent]; diff --git a/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp b/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp -index f1f472b..97819dd 100644 +index da0ba27..1d42b79 100644 --- a/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp +++ b/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp -@@ -710,6 +710,8 @@ public: +@@ -713,6 +713,8 @@ public: QList selectedFiles() const; void setSelectedFiles(const QList &); QString selectedFile() const; @@ -509,7 +539,7 @@ index f1f472b..97819dd 100644 private: class Data : public QSharedData { -@@ -717,6 +719,7 @@ private: +@@ -720,6 +722,7 @@ private: QUrl directory; QString selectedNameFilter; QList selectedFiles; @@ -517,7 +547,7 @@ index f1f472b..97819dd 100644 QMutex mutex; }; QExplicitlySharedDataPointer m_data; -@@ -770,6 +773,20 @@ inline void QWindowsFileDialogSharedData::setSelectedFiles(const QList &ur +@@ -773,6 +776,20 @@ inline void QWindowsFileDialogSharedData::setSelectedFiles(const QList &ur m_data->selectedFiles = urls; } @@ -538,7 +568,7 @@ index f1f472b..97819dd 100644 inline void QWindowsFileDialogSharedData::fromOptions(const QSharedPointer &o) { QMutexLocker (&m_data->mutex); -@@ -893,6 +910,7 @@ public: +@@ -896,6 +913,7 @@ public: // Return the result for tracking in OnFileOk(). Differs from selection for // example by appended default suffixes, etc. virtual QList dialogResult() const = 0; @@ -546,21 +576,25 @@ index f1f472b..97819dd 100644 inline void onFolderChange(IShellItem *); inline void onSelectionChange(); -@@ -1286,7 +1304,12 @@ void QWindowsNativeFileDialogBase::setLabelText(QFileDialogOptions::DialogLabel - - void QWindowsNativeFileDialogBase::selectFile(const QString &fileName) const +@@ -1332,8 +1350,15 @@ void QWindowsNativeFileDialogBase::selectFile(const QString &fileName) const { -- m_fileDialog->SetFileName((wchar_t*)fileName.utf16()); -+ QString file = QDir::toNativeSeparators(fileName); -+ int lastBackSlash = file.lastIndexOf(QChar::fromLatin1('\\')); -+ if (lastBackSlash >= 0) { -+ file = file.mid(lastBackSlash + 1); + // Hack to prevent CLSIDs from being set as file name due to + // QFileDialogPrivate::initialSelection() being QString-based. +- if (!isClsid(fileName)) +- m_fileDialog->SetFileName((wchar_t*)fileName.utf16()); ++ if (!isClsid(fileName)) ++ { ++ QString file = QDir::toNativeSeparators(fileName); ++ int lastBackSlash = file.lastIndexOf(QChar::fromLatin1('\\')); ++ if (lastBackSlash >= 0) { ++ file = file.mid(lastBackSlash + 1); ++ } ++ m_fileDialog->SetFileName((wchar_t*)file.utf16());; + } -+ m_fileDialog->SetFileName((wchar_t*)file.utf16());; } // Return the index of the selected filter, accounting for QFileDialog -@@ -1356,6 +1379,7 @@ bool QWindowsNativeFileDialogBase::onFileOk() +@@ -1403,6 +1428,7 @@ bool QWindowsNativeFileDialogBase::onFileOk() { // Store selected files as GetResults() returns invalid data after the dialog closes. m_data.setSelectedFiles(dialogResult()); @@ -568,7 +602,7 @@ index f1f472b..97819dd 100644 return true; } -@@ -1484,6 +1508,7 @@ public: +@@ -1531,6 +1557,7 @@ public: QWindowsNativeFileDialogBase(data) {} virtual QList selectedFiles() const; virtual QList dialogResult() const; @@ -576,7 +610,7 @@ index f1f472b..97819dd 100644 private: inline IFileOpenDialog *openFileDialog() const -@@ -1499,6 +1524,54 @@ QList QWindowsNativeOpenFileDialog::dialogResult() const +@@ -1546,6 +1573,54 @@ QList QWindowsNativeOpenFileDialog::dialogResult() const return result; } @@ -631,7 +665,7 @@ index f1f472b..97819dd 100644 QList QWindowsNativeOpenFileDialog::selectedFiles() const { QList result; -@@ -1562,6 +1635,7 @@ public: +@@ -1609,6 +1684,7 @@ public: virtual QUrl directory() const Q_DECL_OVERRIDE; virtual void selectFile(const QUrl &filename) Q_DECL_OVERRIDE; virtual QList selectedFiles() const Q_DECL_OVERRIDE; @@ -639,7 +673,7 @@ index f1f472b..97819dd 100644 virtual void setFilter() Q_DECL_OVERRIDE; virtual void selectNameFilter(const QString &filter) Q_DECL_OVERRIDE; virtual QString selectedNameFilter() const Q_DECL_OVERRIDE; -@@ -1655,6 +1729,11 @@ QList QWindowsFileDialogHelper::selectedFiles() const +@@ -1702,6 +1778,11 @@ QList QWindowsFileDialogHelper::selectedFiles() const return m_data.selectedFiles(); } @@ -651,7 +685,7 @@ index f1f472b..97819dd 100644 void QWindowsFileDialogHelper::setFilter() { qCDebug(lcQpaDialogs) << __FUNCTION__; -@@ -1945,6 +2024,7 @@ public: +@@ -1992,6 +2073,7 @@ public: virtual QUrl directory() const Q_DECL_OVERRIDE; virtual void selectFile(const QUrl &url) Q_DECL_OVERRIDE; virtual QList selectedFiles() const Q_DECL_OVERRIDE; @@ -659,7 +693,7 @@ index f1f472b..97819dd 100644 virtual void setFilter() Q_DECL_OVERRIDE {} virtual void selectNameFilter(const QString &) Q_DECL_OVERRIDE; virtual QString selectedNameFilter() const Q_DECL_OVERRIDE; -@@ -1988,6 +2068,11 @@ QList QWindowsXpFileDialogHelper::selectedFiles() const +@@ -2035,6 +2117,11 @@ QList QWindowsXpFileDialogHelper::selectedFiles() const return m_data.selectedFiles(); } @@ -671,55 +705,11 @@ index f1f472b..97819dd 100644 void QWindowsXpFileDialogHelper::selectNameFilter(const QString &f) { m_data.setSelectedNameFilter(f); // Dialog cannot be updated at run-time. -diff --git a/qtbase/src/plugins/platforms/windows/qwindowskeymapper.cpp b/qtbase/src/plugins/platforms/windows/qwindowskeymapper.cpp -index ff9ad18..3fd0848 100644 ---- a/qtbase/src/plugins/platforms/windows/qwindowskeymapper.cpp -+++ b/qtbase/src/plugins/platforms/windows/qwindowskeymapper.cpp -@@ -537,17 +537,16 @@ static inline int toKeyOrUnicode(int vk, int scancode, unsigned char *kbdBuffer, - Q_ASSERT(vk > 0 && vk < 256); - int code = 0; - QChar unicodeBuffer[5]; -- // While key combinations containing alt and ctrl might trigger the third assignment of a key -- // (for example "alt+ctrl+q" causes '@' on a German layout), ToUnicode often does not return the -- // wanted character if only the ctrl modifier is used. Thus we unset this modifier temporarily -- // if it is not used together with alt. -- const unsigned char controlState = kbdBuffer[VK_MENU] ? 0 : kbdBuffer[VK_CONTROL]; -- if (controlState) -- kbdBuffer[VK_CONTROL] = 0; -- int res = ToUnicode(vk, scancode, kbdBuffer, reinterpret_cast(unicodeBuffer), 5, 0); -- if (controlState) -- kbdBuffer[VK_CONTROL] = controlState; -- if (res) -+ int res = ToUnicode(vk, scancode, kbdBuffer, reinterpret_cast(unicodeBuffer), 5, 0); -+ // When Ctrl modifier is used ToUnicode does not return correct values. In order to assign the -+ // right key the control modifier is removed for just that function if the previous call failed. -+ if (res == 0 && kbdBuffer[VK_CONTROL]) { -+ const unsigned char controlState = kbdBuffer[VK_CONTROL]; -+ kbdBuffer[VK_CONTROL] = 0; -+ res = ToUnicode(vk, scancode, kbdBuffer, reinterpret_cast(unicodeBuffer), 5, 0); -+ kbdBuffer[VK_CONTROL] = controlState; -+ } -+ if (res) - code = unicodeBuffer[0].toUpper().unicode(); - - // Qt::Key_*'s are not encoded below 0x20, so try again, and DEL keys (0x7f) is encoded with a -@@ -833,7 +832,10 @@ bool QWindowsKeyMapper::translateMultimediaKeyEventInternal(QWindow *window, con - - const int qtKey = CmdTbl[cmd]; - sendExtendedPressRelease(receiver, qtKey, Qt::KeyboardModifier(state), 0, 0, 0); -- return true; -+ // QTBUG-43343: Make sure to return false if Qt does not handle the key, otherwise, -+ // the keys are not passed to the active media player. -+ const QKeySequence sequence(Qt::Modifier(state) + qtKey); -+ return QGuiApplicationPrivate::instance()->shortcutMap.hasShortcutForKeySequence(sequence); - #else - Q_UNREACHABLE(); - return false; diff --git a/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp b/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp -index 8a80729..16fda26 100644 +index 543c081..d80429b 100644 --- a/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp +++ b/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp -@@ -943,7 +943,7 @@ void QWindowsWindow::destroyWindow() +@@ -973,7 +973,7 @@ void QWindowsWindow::destroyWindow() // Clear any transient child relationships as Windows will otherwise destroy them (QTBUG-35499, QTBUG-36666) if (QWindow *transientChild = findTransientChild(window())) if (QWindowsWindow *tw = QWindowsWindow::baseWindowOf(transientChild)) @@ -728,7 +718,7 @@ index 8a80729..16fda26 100644 QWindowsContext *context = QWindowsContext::instance(); if (context->windowUnderMouse() == window()) context->clearWindowUnderMouse(); -@@ -1144,11 +1144,24 @@ void QWindowsWindow::updateTransientParent() const +@@ -1178,11 +1178,24 @@ void QWindowsWindow::updateTransientParent() const if (const QWindowsWindow *tw = QWindowsWindow::baseWindowOf(tp)) if (!tw->testFlag(WithinDestroy)) // Prevent destruction by parent window (QTBUG-35499, QTBUG-36666) newTransientParent = tw->handle(); @@ -755,10 +745,10 @@ index 8a80729..16fda26 100644 { // QWidget-attribute Qt::WA_ShowWithoutActivating . diff --git a/qtbase/src/plugins/platforms/windows/qwindowswindow.h b/qtbase/src/plugins/platforms/windows/qwindowswindow.h -index 71debf2..4fa2e5d 100644 +index fff90b4..71d060b 100644 --- a/qtbase/src/plugins/platforms/windows/qwindowswindow.h +++ b/qtbase/src/plugins/platforms/windows/qwindowswindow.h -@@ -268,6 +268,7 @@ private: +@@ -273,6 +273,7 @@ private: inline void setWindowState_sys(Qt::WindowState newState); inline void setParent_sys(const QPlatformWindow *parent); inline void updateTransientParent() const; @@ -767,10 +757,10 @@ index 71debf2..4fa2e5d 100644 inline bool isDropSiteEnabled() const { return m_dropTarget != 0; } void setDropSiteEnabled(bool enabled); diff --git a/qtbase/src/widgets/dialogs/qfiledialog.cpp b/qtbase/src/widgets/dialogs/qfiledialog.cpp -index 6065ad0..03fad7a 100644 +index a9d5574..ea8aa43 100644 --- a/qtbase/src/widgets/dialogs/qfiledialog.cpp +++ b/qtbase/src/widgets/dialogs/qfiledialog.cpp -@@ -1219,6 +1219,14 @@ QList QFileDialogPrivate::userSelectedFiles() const +@@ -1199,6 +1199,14 @@ QList QFileDialogPrivate::userSelectedFiles() const return files; } @@ -782,10 +772,10 @@ index 6065ad0..03fad7a 100644 + return QByteArray(); +} + - QStringList QFileDialogPrivate::addDefaultSuffixToFiles(const QStringList filesToFix) const + QStringList QFileDialogPrivate::addDefaultSuffixToFiles(const QStringList &filesToFix) const { QStringList files; -@@ -1282,6 +1290,13 @@ QStringList QFileDialog::selectedFiles() const +@@ -1262,6 +1270,13 @@ QStringList QFileDialog::selectedFiles() const return files; } @@ -800,10 +790,10 @@ index 6065ad0..03fad7a 100644 Returns a list of urls containing the selected files in the dialog. If no files are selected, or the mode is not ExistingFiles or diff --git a/qtbase/src/widgets/dialogs/qfiledialog.h b/qtbase/src/widgets/dialogs/qfiledialog.h -index 70e498a..b13e8b2 100644 +index 95209bc..0dca0ef 100644 --- a/qtbase/src/widgets/dialogs/qfiledialog.h +++ b/qtbase/src/widgets/dialogs/qfiledialog.h -@@ -103,6 +103,7 @@ public: +@@ -106,6 +106,7 @@ public: void selectFile(const QString &filename); QStringList selectedFiles() const; @@ -812,7 +802,7 @@ index 70e498a..b13e8b2 100644 void selectUrl(const QUrl &url); QList selectedUrls() const; diff --git a/qtbase/src/widgets/dialogs/qfiledialog_p.h b/qtbase/src/widgets/dialogs/qfiledialog_p.h -index cc2f481..cf70355 100644 +index f610e46..16fa44e 100644 --- a/qtbase/src/widgets/dialogs/qfiledialog_p.h +++ b/qtbase/src/widgets/dialogs/qfiledialog_p.h @@ -123,6 +123,7 @@ public: @@ -820,10 +810,10 @@ index cc2f481..cf70355 100644 QStringList typedFiles() const; QList userSelectedFiles() const; + QByteArray userSelectedRemoteContent() const; - QStringList addDefaultSuffixToFiles(const QStringList filesToFix) const; + QStringList addDefaultSuffixToFiles(const QStringList &filesToFix) const; QList addDefaultSuffixToUrls(const QList &urlsToFix) const; bool removeDirectory(const QString &path); -@@ -250,6 +251,7 @@ public: +@@ -256,6 +257,7 @@ public: QUrl directory_sys() const; void selectFile_sys(const QUrl &filename); QList selectedFiles_sys() const; @@ -831,7 +821,7 @@ index cc2f481..cf70355 100644 void setFilter_sys(); void selectNameFilter_sys(const QString &filter); QString selectedNameFilter_sys() const; -@@ -387,6 +389,13 @@ inline QList QFileDialogPrivate::selectedFiles_sys() const +@@ -393,6 +395,13 @@ inline QList QFileDialogPrivate::selectedFiles_sys() const return QList(); } @@ -846,95 +836,54 @@ index cc2f481..cf70355 100644 { if (QPlatformFileDialogHelper *helper = platformFileDialogHelper()) diff --git a/qtbase/src/widgets/kernel/qwidget.cpp b/qtbase/src/widgets/kernel/qwidget.cpp -index 315d615..e99b1c3 100644 +index e701eb0..1bdaff5 100644 --- a/qtbase/src/widgets/kernel/qwidget.cpp +++ b/qtbase/src/widgets/kernel/qwidget.cpp -@@ -8674,7 +8674,7 @@ bool QWidget::event(QEvent *event) +@@ -8683,7 +8683,7 @@ bool QWidget::event(QEvent *event) case QEvent::KeyPress: { QKeyEvent *k = (QKeyEvent *)event; bool res = false; - if (!(k->modifiers() & (Qt::ControlModifier | Qt::AltModifier))) { //### Add MetaModifier? -+ if (!(k->modifiers() & (Qt::ControlModifier | Qt::AltModifier | Qt::MetaModifier))) { //### Add MetaModifier? ++ if (!(k->modifiers() & (Qt::ControlModifier | Qt::AltModifier | Qt::MetaModifier))) { //### Add MetaModifier? if (k->key() == Qt::Key_Backtab || (k->key() == Qt::Key_Tab && (k->modifiers() & Qt::ShiftModifier))) res = focusNextPrevChild(false); diff --git a/qtbase/src/widgets/util/qsystemtrayicon.cpp b/qtbase/src/widgets/util/qsystemtrayicon.cpp -index 7d04cab..53c2856 100644 +index dc2737c..aa9bc91 100644 --- a/qtbase/src/widgets/util/qsystemtrayicon.cpp +++ b/qtbase/src/widgets/util/qsystemtrayicon.cpp -@@ -710,7 +710,9 @@ void QSystemTrayIconPrivate::updateMenu_sys_qpa() - menu->setPlatformMenu(platformMenu); - } +@@ -711,6 +711,8 @@ void QSystemTrayIconPrivate::updateMenu_sys_qpa() + if (menu) { + addPlatformMenu(menu); qpa_sys->updateMenu(menu->platformMenu()); -- } + } else { + qpa_sys->updateMenu(0); -+ } + } } - void QSystemTrayIconPrivate::updateToolTip_sys_qpa() diff --git a/qtbase/src/widgets/widgets/qwidgetlinecontrol.cpp b/qtbase/src/widgets/widgets/qwidgetlinecontrol.cpp -index e6385ba..8e1543e 100644 +index 759e41a..fbd3064 100644 --- a/qtbase/src/widgets/widgets/qwidgetlinecontrol.cpp +++ b/qtbase/src/widgets/widgets/qwidgetlinecontrol.cpp -@@ -1870,7 +1870,7 @@ void QWidgetLineControl::processKeyEvent(QKeyEvent* event) - - if (unknown && !isReadOnly()) { +@@ -1884,7 +1884,7 @@ void QWidgetLineControl::processKeyEvent(QKeyEvent* event) + && event->modifiers() != Qt::ControlModifier + && event->modifiers() != (Qt::ControlModifier | Qt::ShiftModifier)) { QString t = event->text(); - if (!t.isEmpty() && t.at(0).isPrint()) { -+ if (!t.isEmpty() && (t.at(0).isPrint() || t.at(0).unicode() == 0x200C || t.at(0).unicode() == 0x200D)) { ++ if (!t.isEmpty() && (t.at(0).isPrint() || t.at(0).unicode() == 0x200C || t.at(0).unicode() == 0x200D)) { insert(t); #ifndef QT_NO_COMPLETER complete(event->key()); diff --git a/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp b/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp -index dfec6a1..a1be4a1 100644 +index faa63cb..f3de539 100644 --- a/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp +++ b/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp -@@ -1340,7 +1340,7 @@ void QWidgetTextControlPrivate::keyPressEvent(QKeyEvent *e) - process: - { +@@ -1348,7 +1348,7 @@ process: + return; + } QString text = e->text(); - if (!text.isEmpty() && (text.at(0).isPrint() || text.at(0) == QLatin1Char('\t'))) { -+ if (!text.isEmpty() && (text.at(0).isPrint() || text.at(0) == QLatin1Char('\t') || text.at(0).unicode() == 0x200C || text.at(0).unicode() == 0x200D)) { ++ if (!text.isEmpty() && (text.at(0).isPrint() || text.at(0) == QLatin1Char('\t') || text.at(0).unicode() == 0x200C || text.at(0).unicode() == 0x200D)) { if (overwriteMode // no need to call deleteChar() if we have a selection, insertText // does it already -diff --git a/qtimageformats/src/3rdparty/libwebp/src/dec/vp8l.c b/qtimageformats/src/3rdparty/libwebp/src/dec/vp8l.c -index ea0254d..93d9dc4 100644 ---- a/qtimageformats/src/3rdparty/libwebp/src/dec/vp8l.c -+++ b/qtimageformats/src/3rdparty/libwebp/src/dec/vp8l.c -@@ -12,7 +12,6 @@ - // Authors: Vikas Arora (vikaas.arora@gmail.com) - // Jyrki Alakuijala (jyrki@google.com) - --#include - #include - #include "./alphai.h" - #include "./vp8li.h" -@@ -740,6 +739,7 @@ static int DecodeAlphaData(VP8LDecoder* const dec, uint8_t* const data, - const int len_code_limit = NUM_LITERAL_CODES + NUM_LENGTH_CODES; - const int mask = hdr->huffman_mask_; - assert(htree_group != NULL); -+ assert(pos < end); - assert(last_row <= height); - assert(Is8bOptimizable(hdr)); - -@@ -830,6 +830,7 @@ static int DecodeImageData(VP8LDecoder* const dec, uint32_t* const data, - (hdr->color_cache_size_ > 0) ? &hdr->color_cache_ : NULL; - const int mask = hdr->huffman_mask_; - assert(htree_group != NULL); -+ assert(src < src_end); - assert(src_last <= src_end); - - while (!br->eos_ && src < src_last) { -@@ -1294,6 +1295,10 @@ int VP8LDecodeAlphaImageStream(ALPHDecoder* const alph_dec, int last_row) { - assert(dec->action_ == READ_DATA); - assert(last_row <= dec->height_); - -+ if (dec->last_pixel_ == dec->width_ * dec->height_) { -+ return 1; // Done -+ } -+ - // Decode (with special row processing). - return alph_dec->use_8b_decode ? - DecodeAlphaData(dec, (uint8_t*)dec->pixels_, dec->width_, dec->height_, diff --git a/Telegram/_qt_5_4_0_patch/qtbase/mkspecs/win32-msvc2013/qmake.conf b/Telegram/_qt_5_5_0_patch/qtbase/mkspecs/common/msvc-desktop.conf similarity index 59% rename from Telegram/_qt_5_4_0_patch/qtbase/mkspecs/win32-msvc2013/qmake.conf rename to Telegram/_qt_5_5_0_patch/qtbase/mkspecs/common/msvc-desktop.conf index 6d0e9b9a5..e44ee5e8d 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/mkspecs/win32-msvc2013/qmake.conf +++ b/Telegram/_qt_5_5_0_patch/qtbase/mkspecs/common/msvc-desktop.conf @@ -1,60 +1,59 @@ # -# qmake configuration for win32-msvc2013 -# -# Written for Microsoft Visual C++ 2013 +# qmake configuration for Microsoft Visual Studio C/C++ Compiler +# This mkspec is used for all win32-msvcXXXX specs # -MAKEFILE_GENERATOR = MSBUILD +isEmpty(MSC_VER)|isEmpty(MSVC_VER): error("Source mkspec must set both MSC_VER and MSVC_VER.") + +# +# Baseline: Visual Studio 2005 (8.0), VC++ 14.0 +# + +MAKEFILE_GENERATOR = MSVC.NET QMAKE_PLATFORM = win32 +QMAKE_COMPILER = msvc CONFIG += incremental flat precompile_header autogen_precompile_source debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe DEFINES += UNICODE WIN32 -MSVC_VER = 12.0 -QMAKE_COMPILER_DEFINES += _MSC_VER=1800 _WIN32 +QMAKE_COMPILER_DEFINES += _MSC_VER=$$MSC_VER _WIN32 contains(QMAKE_TARGET.arch, x86_64) { DEFINES += WIN64 QMAKE_COMPILER_DEFINES += _WIN64 } -QMAKE_COMPILER = msvc - QMAKE_CC = cl QMAKE_LEX = flex QMAKE_LEXFLAGS = QMAKE_YACC = byacc QMAKE_YACCFLAGS = -d -QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t -FS +QMAKE_CFLAGS = -nologo -Zc:wchar_t QMAKE_CFLAGS_WARN_ON = -W3 QMAKE_CFLAGS_WARN_OFF = -W0 -QMAKE_CFLAGS_RELEASE = -O2 -MT -Zc:strictStrings -QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi -Zc:strictStrings +QMAKE_CFLAGS_RELEASE = -O2 -MT +QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi QMAKE_CFLAGS_DEBUG = -Zi -MTd QMAKE_CFLAGS_YACC = QMAKE_CFLAGS_LTCG = -GL -QMAKE_CFLAGS_MP = -MP QMAKE_CFLAGS_SSE2 = -arch:SSE2 QMAKE_CFLAGS_SSE3 = -arch:SSE2 QMAKE_CFLAGS_SSSE3 = -arch:SSE2 QMAKE_CFLAGS_SSE4_1 = -arch:SSE2 QMAKE_CFLAGS_SSE4_2 = -arch:SSE2 -QMAKE_CFLAGS_AVX = -arch:AVX -QMAKE_CFLAGS_AVX2 = -arch:AVX QMAKE_CXX = $$QMAKE_CC QMAKE_CXXFLAGS = $$QMAKE_CFLAGS -QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON -w34100 -w34189 +QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON -w34100 -w34189 -w44996 QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC QMAKE_CXXFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG -QMAKE_CXXFLAGS_MP = $$QMAKE_CFLAGS_MP QMAKE_CXXFLAGS_STL_ON = -EHsc QMAKE_CXXFLAGS_STL_OFF = QMAKE_CXXFLAGS_RTTI_ON = -GR QMAKE_CXXFLAGS_RTTI_OFF = QMAKE_CXXFLAGS_EXCEPTIONS_ON = -EHsc -QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -D_HAS_EXCEPTIONS=0 +QMAKE_CXXFLAGS_EXCEPTIONS_OFF = QMAKE_INCDIR = @@ -70,8 +69,8 @@ QMAKE_LFLAGS = /NOLOGO /DYNAMICBASE /NXCOMPAT QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /DEBUG /OPT:REF /INCREMENTAL:NO QMAKE_LFLAGS_DEBUG = /DEBUG -QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:CONSOLE@QMAKE_SUBSYSTEM_SUFFIX@ -QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS@QMAKE_SUBSYSTEM_SUFFIX@ +QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:CONSOLE +QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS QMAKE_LFLAGS_EXE = \"/MANIFESTDEPENDENCY:type=\'win32\' name=\'Microsoft.Windows.Common-Controls\' version=\'6.0.0.0\' publicKeyToken=\'6595b64144ccf1df\' language=\'*\' processorArchitecture=\'*\'\" QMAKE_LFLAGS_DLL = /DLL QMAKE_LFLAGS_LTCG = /LTCG @@ -91,9 +90,58 @@ QMAKE_IDL = midl QMAKE_LIB = lib /NOLOGO QMAKE_RC = rc -include(../common/shell-win32.conf) - -VCPROJ_EXTENSION = .vcxproj +VCPROJ_EXTENSION = .vcproj VCSOLUTION_EXTENSION = .sln VCPROJ_KEYWORD = Qt4VSv1.0 -load(qt_config) + +# +# Version-specific changes +# +greaterThan(MSC_VER, 1499) { + # Visual Studio 2008 (9.0) / Visual C++ 15.0 and up + QMAKE_CFLAGS_MP = -MP + QMAKE_CXXFLAGS_MP = $$QMAKE_CFLAGS_MP +} + +greaterThan(MSC_VER, 1599) { + # Visual Studio 2010 (10.0) / Visual C++ 16.0 and up + MAKEFILE_GENERATOR = MSBUILD + + QMAKE_CFLAGS_AVX = -arch:AVX + QMAKE_CFLAGS_AVX2 = -arch:AVX + + VCPROJ_EXTENSION = .vcxproj +} + +greaterThan(MSC_VER, 1699) { + # Visual Studio 2012 (11.0) / Visual C++ 17.0 and up + QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -D_HAS_EXCEPTIONS=0 + QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:CONSOLE@QMAKE_SUBSYSTEM_SUFFIX@ + QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS@QMAKE_SUBSYSTEM_SUFFIX@ + QT_CONFIG += c++11 + CONFIG += c++11 +} + +greaterThan(MSC_VER, 1799) { + # Visual Studio 2013 (12.0) / Visual C++ 18.0 and up + QMAKE_CFLAGS += -FS + QMAKE_CXXFLAGS += -FS + + equals(MSC_VER, 1800) { + QMAKE_CFLAGS_RELEASE += -Zc:strictStrings + QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -Zc:strictStrings + QMAKE_CXXFLAGS_RELEASE += -Zc:strictStrings + QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += -Zc:strictStrings + } +} + +greaterThan(MSC_VER, 1899) { + # Visual Studio 2015 (14.0) / Visual C++ 19.0 and up + QMAKE_CFLAGS += -Zc:strictStrings + QMAKE_CFLAGS_WARN_ON += -w44456 -w44457 -w44458 + QMAKE_CFLAGS_AVX2 = -arch:AVX2 + QMAKE_CXXFLAGS += -Zc:strictStrings + QMAKE_CXXFLAGS_WARN_ON += -w44456 -w44457 -w44458 +} + +unset(MSC_VER) diff --git a/Telegram/_qt_5_4_0_patch/qtbase/qmake/generators/mac/pbuilder_pbx.cpp b/Telegram/_qt_5_5_0_patch/qtbase/qmake/generators/mac/pbuilder_pbx.cpp similarity index 84% rename from Telegram/_qt_5_4_0_patch/qtbase/qmake/generators/mac/pbuilder_pbx.cpp rename to Telegram/_qt_5_5_0_patch/qtbase/qmake/generators/mac/pbuilder_pbx.cpp index 9ed555ca6..a0fe0163b 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/qmake/generators/mac/pbuilder_pbx.cpp +++ b/Telegram/_qt_5_5_0_patch/qtbase/qmake/generators/mac/pbuilder_pbx.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the qmake application of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -105,7 +105,7 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t) { if(project->isActiveConfig("generate_pbxbuild_makefile")) { QString mkwrap = fileFixify(pbx_dir + Option::dir_sep + ".." + Option::dir_sep + project->first("MAKEFILE"), - qmake_getpwd()); + FileFixifyToIndir); QFile mkwrapf(mkwrap); if(mkwrapf.open(QIODevice::WriteOnly | QIODevice::Text)) { debug_msg(1, "pbuilder: Creating file: %s", mkwrap.toLatin1().constData()); @@ -151,7 +151,7 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t) subdir += Option::dir_sep; tmp = subdir + tmp; } - QFileInfo fi(fileInfo(Option::fixPathToLocalOS(tmp, true))); + QFileInfo fi(fileInfo(Option::normalizePath(tmp))); if(fi.exists()) { if(fi.isDir()) { QString profile = tmp; @@ -184,13 +184,13 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t) bool in_root = true; QString name = qmake_getpwd(); if(project->isActiveConfig("flat")) { - QString flat_file = fileFixify(name, oldpwd, oldoutpwd, FileFixifyRelative); + QString flat_file = fileFixify(name, FileFixifyBackwards | FileFixifyRelative); if(flat_file.indexOf(Option::dir_sep) != -1) { QStringList dirs = flat_file.split(Option::dir_sep); name = dirs.back(); } } else { - QString flat_file = fileFixify(name, oldpwd, oldoutpwd, FileFixifyRelative); + QString flat_file = fileFixify(name, FileFixifyBackwards | FileFixifyRelative); if(QDir::isRelativePath(flat_file) && flat_file.indexOf(Option::dir_sep) != -1) { QString last_grp("QMAKE_SUBDIR_PBX_HEIR_GROUP"); QStringList dirs = flat_file.split(Option::dir_sep); @@ -215,7 +215,7 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t) t << "\t\t" << project_key << " = {\n" << "\t\t\t" << writeSettings("isa", "PBXFileReference", SettingsNoQuote) << ";\n" << "\t\t\t" << writeSettings("lastKnownFileType", "wrapper.pb-project") << ";\n" - << "\t\t\t" << writeSettings("name", escapeFilePath(tmp_proj.first("TARGET") + projectSuffix())) << ";\n" + << "\t\t\t" << writeSettings("name", tmp_proj.first("TARGET") + projectSuffix()) << ";\n" << "\t\t\t" << writeSettings("path", pbxproj) << ";\n" << "\t\t\t" << writeSettings("sourceTree", "") << ";\n" << "\t\t};\n"; @@ -283,7 +283,7 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t) t << "\t\t" << keyFor(grp_it.key()) << " = {\n" << "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";\n" << "\t\t\t" << writeSettings("children", grp_it.value(), SettingsAsList, 4) << ";\n" - << "\t\t\t" << writeSettings("name", escapeFilePath(grp_it.key().section(Option::dir_sep, -1))) << ";\n" + << "\t\t\t" << writeSettings("name", grp_it.key().section(Option::dir_sep, -1)) << ";\n" << "\t\t\t" << writeSettings("sourceTree", "") << ";\n" << "\t\t};\n"; } @@ -307,7 +307,7 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t) ProString name = l.at(i); const ProKey buildKey(name + ".build"); if (!project->isEmpty(buildKey)) { - const QString build = project->values(buildKey).first().toQString(); + const QString build = project->first(buildKey).toQString(); if (build.toLower() != configName.toLower()) continue; } @@ -344,7 +344,7 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t) t << "\t\t" << keyFor("QMAKE_SUBDIR_PBX_AGGREGATE_TARGET") << " = {\n" << "\t\t\t" << writeSettings("buildPhases", ProStringList(), SettingsAsList, 4) << ";\n" << "\t\t\tbuildSettings = {\n" - << "\t\t\t\t" << writeSettings("PRODUCT_NAME", project->values("TARGET").first()) << ";\n" + << "\t\t\t\t" << writeSettings("PRODUCT_NAME", project->first("TARGET")) << ";\n" << "\t\t\t};\n"; { ProStringList dependencies; @@ -354,8 +354,8 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t) t << "\t\t\t" << writeSettings("dependencies", dependencies, SettingsAsList, 4) << ";\n" } t << "\t\t\t" << writeSettings("isa", "PBXAggregateTarget", SettingsNoQuote) << ";\n" - << "\t\t\t" << writeSettings("name", project->values("TARGET").first()) << ";\n" - << "\t\t\t" << writeSettings("productName", project->values("TARGET").first()) << ";\n" + << "\t\t\t" << writeSettings("name", project->first("TARGET")) << ";\n" + << "\t\t\t" << writeSettings("productName", project->first("TARGET")) << ";\n" << "\t\t};\n"; #endif @@ -455,8 +455,8 @@ ProjectBuilderSources::files(QMakeProject *project) const { QStringList ret = project->values(ProKey(key)).toQStringList(); if(key == "QMAKE_INTERNAL_INCLUDED_FILES") { - QString qtPrefix(QLibraryInfo::rawLocation(QLibraryInfo::PrefixPath, QLibraryInfo::EffectivePaths) + '/'); - QString qtSrcPrefix(QLibraryInfo::rawLocation(QLibraryInfo::PrefixPath, QLibraryInfo::EffectiveSourcePaths) + '/'); + QString qtPrefix(project->propertyValue(ProKey("QT_INSTALL_PREFIX/get")).toQString() + '/'); + QString qtSrcPrefix(project->propertyValue(ProKey("QT_INSTALL_PREFIX/src")).toQString() + '/'); QStringList newret; for(int i = 0; i < ret.size(); ++i) { @@ -507,14 +507,6 @@ static QString xcodeFiletypeForFilename(const QString &filename) bool ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) { - // The code in this function assumes that the current directory matches - // the output directory, which is not actually the case when we are called - // from the generic generator code. Instead of changing every single - // assumption and fileFixify we cheat by moving into the output directory - // for the duration of this function. - QString input_dir = qmake_getpwd(); - qmake_setpwd(Option::output_dir); - ProStringList tmp; bool did_preprocess = false; @@ -536,7 +528,6 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) QFile mkf(mkfile); if(mkf.open(QIODevice::WriteOnly | QIODevice::Text)) { writingUnixMakefileGenerator = true; - qmake_setpwd(input_dir); // Makefile generation assumes input_dir as pwd debug_msg(1, "pbuilder: Creating file: %s", mkfile.toLatin1().constData()); QTextStream mkt(&mkf); writeHeader(mkt); @@ -545,10 +536,9 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) mkt.flush(); mkf.close(); writingUnixMakefileGenerator = false; - qmake_setpwd(Option::output_dir); } QString phase_key = keyFor("QMAKE_PBX_MAKEQMAKE_BUILDPHASE"); - mkfile = fileFixify(mkfile, qmake_getpwd()); + mkfile = fileFixify(mkfile); project->values("QMAKE_PBX_PRESCRIPT_BUILDPHASES").append(phase_key); t << "\t\t" << phase_key << " = {\n" << "\t\t\t" << writeSettings("buildActionMask", "2147483647", SettingsNoQuote) << ";\n" @@ -557,16 +547,20 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) << "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";\n" << "\t\t\t" << writeSettings("name", "Qt Qmake") << ";\n" << "\t\t\t" << writeSettings("shellPath", "/bin/sh") << ";\n" - << "\t\t\t" << writeSettings("shellScript", "make -C " + IoUtils::shellQuoteUnix(qmake_getpwd()) + " -f " + IoUtils::shellQuoteUnix(mkfile)) << ";\n" + << "\t\t\t" << writeSettings("shellScript", "make -C " + IoUtils::shellQuoteUnix(Option::output_dir) + + " -f " + IoUtils::shellQuoteUnix(mkfile)) << ";\n" + << "\t\t\t" << writeSettings("showEnvVarsInLog", "0") << ";\n" << "\t\t};\n"; } // FIXME: Move all file resolving logic out of ProjectBuilderSources::files(), as it // doesn't have access to any of the information it needs to resolve relative paths. - project->values("QMAKE_INTERNAL_INCLUDED_FILES").prepend(fileFixify(project->projectFile(), qmake_getpwd(), input_dir)); + project->values("QMAKE_INTERNAL_INCLUDED_FILES").prepend(project->projectFile()); // Since we can't fileFixify inside ProjectBuilderSources::files(), we resolve the absolute paths here - project->values("QMAKE_INTERNAL_INCLUDED_FILES") = ProStringList(fileFixify(project->values("QMAKE_INTERNAL_INCLUDED_FILES").toQStringList(), FileFixifyAbsolute)); + project->values("QMAKE_INTERNAL_INCLUDED_FILES") = ProStringList( + fileFixify(project->values("QMAKE_INTERNAL_INCLUDED_FILES").toQStringList(), + FileFixifyFromOutdir | FileFixifyAbsolute)); //DUMP SOURCES QMap groups; @@ -623,11 +617,10 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) ProStringList &src_list = project->values(ProKey("QMAKE_PBX_" + sources.at(source).keyName())); ProStringList &root_group_list = project->values("QMAKE_PBX_GROUPS"); - const QStringList &files = fileFixify(sources.at(source).files(project)); + const QStringList &files = fileFixify(sources.at(source).files(project), + FileFixifyFromOutdir | FileFixifyAbsolute); for(int f = 0; f < files.count(); ++f) { QString file = files[f]; - if(file.length() >= 2 && (file[0] == '"' || file[0] == '\'') && file[(int) file.length()-1] == file[0]) - file = file.mid(1, file.length()-2); if(!sources.at(source).compilerName().isNull() && !verifyExtraCompiler(sources.at(source).compilerName(), file)) continue; @@ -637,12 +630,11 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) bool in_root = true; QString src_key = keyFor(file); - file = fileFixify(file, qmake_getpwd(), Option::output_dir, FileFixifyAbsolute); QString name = file.split(Option::dir_sep).back(); if (!project->isActiveConfig("flat")) { // Build group hierarchy for file references that match the source our build dir - QString relativePath = fileFixify(file, input_dir, qmake_getpwd(), FileFixifyRelative); + QString relativePath = fileFixify(file, FileFixifyToIndir | FileFixifyRelative); if (QDir::isRelativePath(relativePath) && relativePath.startsWith(QLatin1String("../"))) relativePath = fileFixify(file, FileFixifyRelative); // Try build dir @@ -678,9 +670,9 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) //source reference t << "\t\t" << src_key << " = {\n" << "\t\t\t" << writeSettings("isa", "PBXFileReference", SettingsNoQuote) << ";\n" - << "\t\t\t" << writeSettings("path", escapeFilePath(file)) << ";\n"; + << "\t\t\t" << writeSettings("path", file) << ";\n"; if (name != file) - t << "\t\t\t" << writeSettings("name", escapeFilePath(name)) << ";\n"; + t << "\t\t\t" << writeSettings("name", name) << ";\n"; t << "\t\t\t" << writeSettings("sourceTree", "") << ";\n"; QString filetype = xcodeFiletypeForFilename(file); if (!filetype.isNull()) @@ -715,7 +707,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) t << "\t\t" << keyFor(grp_it.key()) << " = {\n" << "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";\n" << "\t\t\t" << writeSettings("children", grp_it.value(), SettingsAsList, 4) << ";\n" - << "\t\t\t" << writeSettings("name", escapeFilePath(grp_it.key().section(Option::dir_sep, -1))) << ";\n" + << "\t\t\t" << writeSettings("name", grp_it.key().section(Option::dir_sep, -1)) << ";\n" << "\t\t\t" << writeSettings("sourceTree", "") << ";\n" << "\t\t};\n"; } @@ -730,8 +722,8 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) debug_msg(1, "pbuilder: Creating file: %s", mkfile.toLatin1().constData()); QTextStream mkt(&mkf); writeHeader(mkt); - mkt << "MOC = " << Option::fixPathToTargetOS(var("QMAKE_MOC")) << endl; - mkt << "UIC = " << Option::fixPathToTargetOS(var("QMAKE_UIC")) << endl; + mkt << "MOC = " << var("QMAKE_MOC") << endl; + mkt << "UIC = " << var("QMAKE_UIC") << endl; mkt << "LEX = " << var("QMAKE_LEX") << endl; mkt << "LEXFLAGS = " << var("QMAKE_LEXFLAGS") << endl; mkt << "YACC = " << var("QMAKE_YACC") << endl; @@ -739,13 +731,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) mkt << "DEFINES = " << varGlue("PRL_EXPORT_DEFINES","-D"," -D"," ") << varGlue("DEFINES","-D"," -D","") << endl; - mkt << "INCPATH = -I" << specdir(); - if(!project->isActiveConfig("no_include_pwd")) { - QString pwd = escapeFilePath(fileFixify(qmake_getpwd())); - if(pwd.isEmpty()) - pwd = "."; - mkt << " -I" << pwd; - } + mkt << "INCPATH ="; { const ProStringList &incs = project->values("INCLUDEPATH"); for (ProStringList::ConstIterator incit = incs.begin(); incit != incs.end(); ++incit) @@ -756,30 +742,8 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) mkt << endl; mkt << "DEL_FILE = " << var("QMAKE_DEL_FILE") << endl; mkt << "MOVE = " << var("QMAKE_MOVE") << endl << endl; - mkt << "IMAGES = " << varList("QMAKE_IMAGE_COLLECTION") << endl; - mkt << "PARSERS ="; - if(!project->isEmpty("YACCSOURCES")) { - const ProStringList &yaccs = project->values("YACCSOURCES"); - for (ProStringList::ConstIterator yit = yaccs.begin(); yit != yaccs.end(); ++yit) { - QFileInfo fi(fileInfo((*yit).toQString())); - mkt << " " << fi.path() << Option::dir_sep << fi.baseName() - << Option::yacc_mod << Option::cpp_ext.first(); - } - } - if(!project->isEmpty("LEXSOURCES")) { - const ProStringList &lexs = project->values("LEXSOURCES"); - for (ProStringList::ConstIterator lit = lexs.begin(); lit != lexs.end(); ++lit) { - QFileInfo fi(fileInfo((*lit).toQString())); - mkt << " " << fi.path() << Option::dir_sep << fi.baseName() - << Option::lex_mod << Option::cpp_ext.first(); - } - } - mkt << "\n"; - mkt << "preprocess: $(PARSERS) compilers\n"; - mkt << "clean preprocess_clean: parser_clean compiler_clean\n\n"; - mkt << "parser_clean:\n"; - if(!project->isEmpty("YACCSOURCES") || !project->isEmpty("LEXSOURCES")) - mkt << "\t-rm -f $(PARSERS)\n"; + mkt << "preprocess: compilers\n"; + mkt << "clean preprocess_clean: compiler_clean\n\n"; writeExtraTargets(mkt); if(!project->isEmpty("QMAKE_EXTRA_COMPILERS")) { mkt << "compilers:"; @@ -800,8 +764,9 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) if(added && !(added % 3)) mkt << "\\\n\t"; ++added; - const QString file_name = fileFixify(fn, Option::output_dir, Option::output_dir); - mkt << " " << replaceExtraCompilerVariables(Option::fixPathToTargetOS(tmp_out.first().toQString(), false), file_name, QString()); + const QString file_name = fileFixify(fn, FileFixifyFromOutdir); + mkt << ' ' << escapeDependencyPath(Option::fixPathToTargetOS( + replaceExtraCompilerVariables(tmp_out.first().toQString(), file_name, QString(), NoShell))); } } } @@ -812,7 +777,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) mkt.flush(); mkf.close(); } - mkfile = fileFixify(mkfile, qmake_getpwd()); + mkfile = fileFixify(mkfile); QString phase_key = keyFor("QMAKE_PBX_PREPROCESS_TARGET"); // project->values("QMAKE_PBX_BUILDPHASES").append(phase_key); project->values("QMAKE_PBX_PRESCRIPT_BUILDPHASES").append(phase_key); @@ -823,7 +788,9 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) << "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";\n" << "\t\t\t" << writeSettings("name", "Qt Preprocessors") << ";\n" << "\t\t\t" << writeSettings("shellPath", "/bin/sh") << ";\n" - << "\t\t\t" << writeSettings("shellScript", "make -C " + IoUtils::shellQuoteUnix(qmake_getpwd()) + " -f " + IoUtils::shellQuoteUnix(mkfile)) << ";\n" + << "\t\t\t" << writeSettings("shellScript", "make -C " + IoUtils::shellQuoteUnix(Option::output_dir) + + " -f " + IoUtils::shellQuoteUnix(mkfile)) << ";\n" + << "\t\t\t" << writeSettings("showEnvVarsInLog", "0") << ";\n" << "\t\t};\n"; } @@ -843,22 +810,17 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) if(!project->isActiveConfig("staticlib")) { //DUMP LIBRARIES ProStringList &libdirs = project->values("QMAKE_PBX_LIBPATHS"), &frameworkdirs = project->values("QMAKE_FRAMEWORKPATH"); - static const char * const libs[] = { "QMAKE_LFLAGS", "QMAKE_LIBS", "QMAKE_LIBS_PRIVATE", 0 }; + static const char * const libs[] = { "QMAKE_LIBS", "QMAKE_LIBS_PRIVATE", 0 }; for (int i = 0; libs[i]; i++) { tmp = project->values(libs[i]); for(int x = 0; x < tmp.count();) { bool remove = false; QString library, name; ProString opt = tmp[x].trimmed(); - if (opt.length() >= 2 && (opt.at(0) == '"' || opt.at(0) == '\'') && opt.endsWith(opt.at(0))) - opt = opt.mid(1, opt.length()-2); if(opt.startsWith("-L")) { QString r = opt.mid(2).toQString(); fixForOutput(r); libdirs.append(r); - } else if(opt == "-prebind") { - project->values("QMAKE_DO_PREBINDING").append("TRUE"); - remove = true; } else if(opt.startsWith("-l")) { name = opt.mid(2).toQString(); QString lib("lib" + name); @@ -887,10 +849,10 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) QString librarySuffix = project->first("QMAKE_XCODE_LIBRARY_SUFFIX").toQString(); suffixSetting = "$(" + suffixSetting + ")"; if (!librarySuffix.isEmpty()) { - library = library.replace(librarySuffix, suffixSetting); - name = name.remove(librarySuffix); + library.replace(librarySuffix, suffixSetting); + name.remove(librarySuffix); } else { - library = library.replace(name, name + suffixSetting); + library.replace(name, name + suffixSetting); } } } @@ -956,15 +918,14 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) if(!path.isEmpty() && !libdirs.contains(path)) libdirs += path; } - library = fileFixify(library); - QString filetype = xcodeFiletypeForFilename(library); + library = fileFixify(library, FileFixifyFromOutdir | FileFixifyAbsolute); QString key = keyFor(library); if (!project->values("QMAKE_PBX_LIBRARIES").contains(key)) { bool is_frmwrk = (library.endsWith(".framework")); t << "\t\t" << key << " = {\n" << "\t\t\t" << writeSettings("isa", "PBXFileReference", SettingsNoQuote) << ";\n" - << "\t\t\t" << writeSettings("name", escapeFilePath(name)) << ";\n" - << "\t\t\t" << writeSettings("path", escapeFilePath(library)) << ";\n" + << "\t\t\t" << writeSettings("name", name) << ";\n" + << "\t\t\t" << writeSettings("path", library) << ";\n" << "\t\t\t" << writeSettings("refType", QString::number(reftypeForFile(library)), SettingsNoQuote) << ";\n" << "\t\t\t" << writeSettings("sourceTree", "") << ";\n"; if (is_frmwrk) @@ -999,21 +960,22 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) QTextStream mkt(&mkf); writeHeader(mkt); mkt << "SUBLIBS= "; + // ### This is missing the parametrization found in unixmake2.cpp tmp = project->values("SUBLIBS"); for(int i = 0; i < tmp.count(); i++) - t << "tmp/lib" << tmp[i] << ".a "; + t << escapeFilePath("tmp/lib" + tmp[i] + ".a") << ' '; t << endl << endl; mkt << "sublibs: $(SUBLIBS)\n\n"; tmp = project->values("SUBLIBS"); for(int i = 0; i < tmp.count(); i++) - t << "tmp/lib" << tmp[i] << ".a:\n\t" + t << escapeFilePath("tmp/lib" + tmp[i] + ".a") + ":\n\t" << var(ProKey("MAKELIB" + tmp[i])) << endl << endl; mkt.flush(); mkf.close(); writingUnixMakefileGenerator = false; } QString phase_key = keyFor("QMAKE_PBX_SUBLIBS_BUILDPHASE"); - mkfile = fileFixify(mkfile, qmake_getpwd()); + mkfile = fileFixify(mkfile); project->values("QMAKE_PBX_PRESCRIPT_BUILDPHASES").append(phase_key); t << "\t\t" << phase_key << " = {\n" << "\t\t\t" << writeSettings("buildActionMask", "2147483647", SettingsNoQuote) << ";\n" @@ -1022,7 +984,9 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) << "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";\n" << "\t\t\t" << writeSettings("name", "Qt Sublibs") << ";\n" << "\t\t\t" << writeSettings("shellPath", "/bin/sh") << "\n" - << "\t\t\t" << writeSettings("shellScript", "make -C " + IoUtils::shellQuoteUnix(qmake_getpwd()) + " -f " + IoUtils::shellQuoteUnix(mkfile)) << ";\n" + << "\t\t\t" << writeSettings("shellScript", "make -C " + IoUtils::shellQuoteUnix(Option::output_dir) + + " -f " + IoUtils::shellQuoteUnix(mkfile)) << ";\n" + << "\t\t\t" << writeSettings("showEnvVarsInLog", "0") << ";\n" << "\t\t};\n"; } @@ -1058,6 +1022,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) << "\t\t\t" << writeSettings("name", "Qt Prelink") << ";\n" << "\t\t\t" << writeSettings("shellPath", "/bin/sh") << ";\n" << "\t\t\t" << writeSettings("shellScript", project->values("QMAKE_PRE_LINK")) << ";\n" + << "\t\t\t" << writeSettings("showEnvVarsInLog", "0") << ";\n" << "\t\t};\n"; } @@ -1070,7 +1035,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) t << "\t\t" << key << " = {\n" << "\t\t\t" << writeSettings("children", project->values("QMAKE_PBX_LIBRARIES"), SettingsAsList, 4) << ";\n" << "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";\n" - << "\t\t\t" << writeSettings("name", escapeFilePath(grp)) << ";\n" + << "\t\t\t" << writeSettings("name", grp) << ";\n" << "\t\t\t" << writeSettings("sourceTree", "") << ";\n" << "\t\t};\n"; } @@ -1083,7 +1048,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) << "\t\t\t" << writeSettings("files", project->values("QMAKE_PBX_BUILD_LIBRARIES"), SettingsAsList, 4) << ";\n" << "\t\t\t" << writeSettings("isa", "PBXFrameworksBuildPhase", SettingsNoQuote) << ";\n" << "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";\n" - << "\t\t\t" << writeSettings("name", escapeFilePath(grp)) << ";\n" + << "\t\t\t" << writeSettings("name", grp) << ";\n" << "\t\t};\n"; } @@ -1101,14 +1066,14 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) << "\t\t\t" << writeSettings("name", "Qt Postlink") << ";\n" << "\t\t\t" << writeSettings("shellPath", "/bin/sh") << ";\n" << "\t\t\t" << writeSettings("shellScript", project->values("QMAKE_POST_LINK")) << ";\n" + << "\t\t\t" << writeSettings("showEnvVarsInLog", "0") << ";\n" << "\t\t};\n"; } if (!project->isEmpty("DESTDIR")) { QString phase_key = keyFor("QMAKE_PBX_TARGET_COPY_PHASE"); - QString destDir = project->first("DESTDIR").toQString(); - destDir = fixForOutput(destDir); - destDir = fileInfo(Option::fixPathToLocalOS(destDir)).absoluteFilePath(); + QString destDir = fileFixify(project->first("DESTDIR").toQString(), + FileFixifyFromOutdir | FileFixifyAbsolute); project->values("QMAKE_PBX_BUILDPHASES").append(phase_key); t << "\t\t" << phase_key << " = {\n" << "\t\t\t" << writeSettings("isa", "PBXShellScriptBuildPhase", SettingsNoQuote) << ";\n" @@ -1119,7 +1084,8 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) << "\t\t\t" << writeSettings("outputPaths", ProStringList(), SettingsAsList, 4) << ";\n" << "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";\n" << "\t\t\t" << writeSettings("shellPath", "/bin/sh") << ";\n" - << "\t\t\t" << writeSettings("shellScript", fixForOutput("cp -r $BUILT_PRODUCTS_DIR/$FULL_PRODUCT_NAME " + escapeFilePath(destDir))) << ";\n" + << "\t\t\t" << writeSettings("shellScript", fixForOutput("cp -r $BUILT_PRODUCTS_DIR/$FULL_PRODUCT_NAME " + IoUtils::shellQuoteUnix(destDir))) << ";\n" + << "\t\t\t" << writeSettings("showEnvVarsInLog", "0") << ";\n" << "\t\t};\n"; } bool copyBundleResources = project->isActiveConfig("app_bundle") && project->first("TEMPLATE") == "app"; @@ -1137,13 +1103,13 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) //all files const ProStringList &files = project->values(ProKey(bundle_data[i] + ".files")); for(int file = 0; file < files.count(); file++) { - QString fn = fileFixify(files[file].toQString(), Option::output_dir, input_dir, FileFixifyAbsolute); + QString fn = fileFixify(files[file].toQString(), FileFixifyAbsolute); QString name = fn.split(Option::dir_sep).back(); QString file_ref_key = keyFor("QMAKE_PBX_BUNDLE_DATA_FILE_REF." + bundle_data[i] + "-" + fn); bundle_file_refs += file_ref_key; t << "\t\t" << file_ref_key << " = {\n" << "\t\t\t" << writeSettings("isa", "PBXFileReference", SettingsNoQuote) << ";\n" - << "\t\t\t" << writeSettings("path", escapeFilePath(fn)) << ";\n" + << "\t\t\t" << writeSettings("path", fn) << ";\n" << "\t\t\t" << writeSettings("name", name) << ";\n" << "\t\t\t" << writeSettings("sourceTree", "") << ";\n" << "\t\t};\n"; @@ -1169,7 +1135,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) t << "\t\t" << phase_key << " = {\n" << "\t\t\t" << writeSettings("name", "Copy '" + bundle_data[i] + "' Files to Bundle") << ";\n" << "\t\t\t" << writeSettings("buildActionMask", "2147483647", SettingsNoQuote) << ";\n" - << "\t\t\t" << writeSettings("dstPath", escapeFilePath(path)) << ";\n" + << "\t\t\t" << writeSettings("dstPath", path) << ";\n" << "\t\t\t" << writeSettings("dstSubfolderSpec", "1", SettingsNoQuote) << ";\n" << "\t\t\t" << writeSettings("isa", "PBXCopyFilesBuildPhase", SettingsNoQuote) << ";\n" << "\t\t\t" << writeSettings("files", bundle_files, SettingsAsList, 4) << ";\n" @@ -1193,8 +1159,6 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) if (copyBundleResources) { if (!project->isEmpty("ICON")) { ProString icon = project->first("ICON"); - if (icon.length() >= 2 && (icon.at(0) == '"' || icon.at(0) == '\'') && icon.endsWith(icon.at(0))) - icon = icon.mid(1, icon.length() - 2); bundle_resources_files += keyFor(icon + ".BUILDABLE"); } @@ -1207,7 +1171,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) << "\t\t\t" << writeSettings("files", bundle_resources_files, SettingsAsList, 4) << ";\n" << "\t\t\t" << writeSettings("isa", "PBXResourcesBuildPhase", SettingsNoQuote) << ";\n" << "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";\n" - << "\t\t\t" << writeSettings("name", escapeFilePath(grp)) << ";\n" + << "\t\t\t" << writeSettings("name", grp) << ";\n" << "\t\t};\n"; } @@ -1232,9 +1196,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) } else { t << "\t\t\t" << writeSettings("explicitFileType", "compiled.mach-o.executable") << ";\n"; } - QString app = (!project->isEmpty("DESTDIR") ? project->first("DESTDIR") + project->first("QMAKE_ORIG_TARGET") : - qmake_getpwd()) + Option::dir_sep + targ; - t << "\t\t\t" << writeSettings("path", escapeFilePath(targ)) << ";\n"; + t << "\t\t\t" << writeSettings("path", targ) << ";\n"; } else { ProString lib = project->first("QMAKE_ORIG_TARGET"); if(project->isActiveConfig("staticlib")) { @@ -1262,7 +1224,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) } else { t << "\t\t\t" << writeSettings("explicitFileType", "compiled.mach-o.dylib") << ";\n"; } - t << "\t\t\t" << writeSettings("path", escapeFilePath(lib)) << ";\n"; + t << "\t\t\t" << writeSettings("path", lib) << ";\n"; } t << "\t\t\t" << writeSettings("sourceTree", "BUILT_PRODUCTS_DIR", SettingsNoQuote) << ";\n" << "\t\t};\n"; @@ -1282,7 +1244,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) t << "\t\t" << keyFor("QMAKE_PBX_ROOT_GROUP") << " = {\n" << "\t\t\t" << writeSettings("children", project->values("QMAKE_PBX_GROUPS"), SettingsAsList, 4) << ";\n" << "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";\n" - << "\t\t\t" << writeSettings("name", escapeFilePath(project->first("QMAKE_ORIG_TARGET"))) << ";\n" + << "\t\t\t" << writeSettings("name", project->first("QMAKE_ORIG_TARGET")) << ";\n" << "\t\t\t" << writeSettings("sourceTree", "") << ";\n" << "\t\t};\n"; @@ -1328,14 +1290,14 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) else t << "\t\t\t" << writeSettings("productType", "com.apple.product-type.tool") << ";\n"; } - t << "\t\t\t" << writeSettings("name", escapeFilePath(project->first("QMAKE_ORIG_TARGET"))) << ";\n" - << "\t\t\t" << writeSettings("productName", escapeFilePath(project->first("QMAKE_ORIG_TARGET"))) << ";\n"; + t << "\t\t\t" << writeSettings("name", project->first("QMAKE_ORIG_TARGET")) << ";\n" + << "\t\t\t" << writeSettings("productName", project->first("QMAKE_ORIG_TARGET")) << ";\n"; } else { ProString lib = project->first("QMAKE_ORIG_TARGET"); if(!project->isActiveConfig("lib_bundle") && !project->isActiveConfig("staticlib")) lib.prepend("lib"); - t << "\t\t\t" << writeSettings("name", escapeFilePath(lib)) << ";\n" - << "\t\t\t" << writeSettings("productName", escapeFilePath(lib)) << ";\n"; + t << "\t\t\t" << writeSettings("name", lib) << ";\n" + << "\t\t\t" << writeSettings("productName", lib) << ";\n"; if (!project->isEmpty("QMAKE_PBX_PRODUCT_TYPE")) t << "\t\t\t" << writeSettings("productType", project->first("QMAKE_PBX_PRODUCT_TYPE")) << ";\n"; else if (project->isActiveConfig("staticlib")) @@ -1346,8 +1308,98 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) t << "\t\t\t" << writeSettings("productType", "com.apple.product-type.library.dynamic") << ";\n"; } if(!project->isEmpty("DESTDIR")) - t << "\t\t\t" << writeSettings("productInstallPath", escapeFilePath(project->first("DESTDIR"))) << ";\n"; + t << "\t\t\t" << writeSettings("productInstallPath", project->first("DESTDIR")) << ";\n"; t << "\t\t};\n"; + + // Test target for running Qt unit tests under XCTest + if (project->isActiveConfig("testcase") && project->isActiveConfig("app_bundle")) { + QString devNullFileReferenceKey = keyFor(pbx_dir + "QMAKE_PBX_DEV_NULL_FILE_REFERENCE"); + t << "\t\t" << devNullFileReferenceKey << " = {\n" + << "\t\t\t" << writeSettings("isa", "PBXFileReference", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("name", "/dev/null") << ";\n" + << "\t\t\t" << writeSettings("path", "/dev/null") << ";\n" + << "\t\t\t" << writeSettings("lastKnownFileType", "sourcecode.c.c") << ";\n" + << "\t\t\t" << writeSettings("sourceTree", "") << ";\n" + << "\t\t};\n"; + + QString devNullBuildFileKey = keyFor(pbx_dir + "QMAKE_PBX_DEV_NULL_BUILD_FILE"); + t << "\t\t" << devNullBuildFileKey << " = {\n" + << "\t\t\t" << writeSettings("fileRef", devNullFileReferenceKey) << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXBuildFile", SettingsNoQuote) << ";\n" + << "\t\t};\n"; + + QString dummySourceBuildPhaseKey = keyFor(pbx_dir + "QMAKE_PBX_DUMMY_SOURCE_BUILD_PHASE"); + t << "\t\t" << dummySourceBuildPhaseKey << " = {\n" + << "\t\t\t" << writeSettings("buildActionMask", "2147483647", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("files", devNullBuildFileKey, SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXSourcesBuildPhase", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";\n" + << "\t\t};\n"; + + ProStringList testBundleBuildConfigs; + + ProString targetName = project->first("QMAKE_ORIG_TARGET"); + ProString testHost = "$(BUILT_PRODUCTS_DIR)/" + targetName + ".app/"; + if (!project->isActiveConfig("ios")) + testHost.append("Contents/MacOS/"); + testHost.append(targetName); + + static const char * const configs[] = { "Debug", "Release", 0 }; + for (int i = 0; configs[i]; i++) { + QString testBundleBuildConfig = keyFor(pbx_dir + "QMAKE_PBX_TEST_BUNDLE_BUILDCONFIG_" + configs[i]); + t << "\t\t" << testBundleBuildConfig << " = {\n" + << "\t\t\t" << writeSettings("isa", "XCBuildConfiguration", SettingsNoQuote) << ";\n" + << "\t\t\tbuildSettings = {\n" + << "\t\t\t\t" << writeSettings("INFOPLIST_FILE", project->first("QMAKE_XCODE_SPECDIR") + "/QtTest.plist") << ";\n" + << "\t\t\t\t" << writeSettings("OTHER_LDFLAGS", "") << ";\n" + << "\t\t\t\t" << writeSettings("TEST_HOST", testHost) << ";\n" + << "\t\t\t\t" << writeSettings("DEBUG_INFORMATION_FORMAT", "dwarf-with-dsym") << ";\n" + << "\t\t\t};\n" + << "\t\t\t" << writeSettings("name", configs[i], SettingsNoQuote) << ";\n" + << "\t\t};\n"; + + testBundleBuildConfigs.append(testBundleBuildConfig); + } + + QString testBundleBuildConfigurationListKey = keyFor(pbx_dir + "QMAKE_PBX_TEST_BUNDLE_BUILDCONFIG_LIST"); + t << "\t\t" << testBundleBuildConfigurationListKey << " = {\n" + << "\t\t\t" << writeSettings("isa", "XCConfigurationList", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("buildConfigurations", testBundleBuildConfigs, SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("defaultConfigurationIsVisible", "0", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("defaultConfigurationName", "Debug", SettingsNoQuote) << ";\n" + << "\t\t};\n"; + + QString primaryTargetDependencyKey = keyFor(pbx_dir + "QMAKE_PBX_PRIMARY_TARGET_DEP"); + t << "\t\t" << primaryTargetDependencyKey << " = {\n" + << "\t\t\t" << writeSettings("isa", "PBXTargetDependency", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("target", keyFor(pbx_dir + "QMAKE_PBX_TARGET")) << ";\n" + << "\t\t};\n"; + + QString testBundleReferenceKey = keyFor("QMAKE_TEST_BUNDLE_REFERENCE"); + t << "\t\t" << testBundleReferenceKey << " = {\n" + << "\t\t\t" << writeSettings("isa", "PBXFileReference", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("explicitFileType", "wrapper.cfbundle") << ";\n" + << "\t\t\t" << writeSettings("includeInIndex", "0", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("sourceTree", "BUILT_PRODUCTS_DIR", SettingsNoQuote) << ";\n" + << "\t\t};\n"; + + QString testTargetKey = keyFor(pbx_dir + "QMAKE_PBX_TEST_TARGET"); + project->values("QMAKE_PBX_TARGETS").append(testTargetKey); + t << "\t\t" << testTargetKey << " = {\n" + << "\t\t\t" << writeSettings("buildPhases", dummySourceBuildPhaseKey, SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("dependencies", primaryTargetDependencyKey, SettingsAsList, 4) << ";\n" + << "\t\t\t" << writeSettings("buildConfigurationList", testBundleBuildConfigurationListKey) << ";\n" + << "\t\t\t" << writeSettings("productType", "com.apple.product-type.bundle.unit-test") << ";\n" + << "\t\t\t" << writeSettings("isa", "PBXNativeTarget", SettingsNoQuote) << ";\n" + << "\t\t\t" << writeSettings("productReference", testBundleReferenceKey) << ";\n" + << "\t\t\t" << writeSettings("name", "Qt Test") << ";\n" + << "\t\t};\n"; + + QLatin1Literal testTargetID("TestTargetID"); + project->values(ProKey("QMAKE_PBX_TARGET_ATTRIBUTES_" + testTargetKey + "_" + testTargetID)).append(keyFor(pbx_dir + "QMAKE_PBX_TARGET")); + project->values(ProKey("QMAKE_PBX_TARGET_ATTRIBUTES_" + testTargetKey)).append(ProKey(testTargetID)); + } + //DEBUG/RELEASE QString defaultConfig; for(int as_release = 0; as_release < 2; as_release++) @@ -1356,6 +1408,10 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) QMap settings; settings.insert("COPY_PHASE_STRIP", (as_release ? "YES" : "NO")); + // Bitcode is only supported with a deployment target >= iOS 6.0. + // Disable it for now, and consider switching it on when later + // bumping the deployment target. + settings.insert("ENABLE_BITCODE", "NO"); settings.insert("GCC_GENERATE_DEBUGGING_SYMBOLS", as_release ? "NO" : "YES"); if(!as_release) settings.insert("GCC_OPTIMIZATION_LEVEL", "0"); @@ -1367,14 +1423,14 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) ProString name = l.at(i); const ProKey buildKey(name + ".build"); if (!project->isEmpty(buildKey)) { - const QString build = project->values(buildKey).first().toQString(); + const QString build = project->first(buildKey).toQString(); if (build.toLower() != configName.toLower()) continue; } const QString value = project->values(ProKey(name + ".value")).join(QString(Option::field_sep)); const ProKey nkey(name + ".name"); if (!project->isEmpty(nkey)) - name = project->values(nkey).first(); + name = project->first(nkey); settings.insert(name.toQString(), value); } } @@ -1384,7 +1440,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) ProString lib = project->first("QMAKE_ORIG_TARGET"); if (!project->isActiveConfig("lib_bundle") && !project->isActiveConfig("staticlib")) lib.prepend("lib"); - settings.insert("PRODUCT_NAME", escapeFilePath(lib.toQString())); + settings.insert("PRODUCT_NAME", lib.toQString()); } if (project->isActiveConfig("debug") != (bool)as_release) @@ -1415,10 +1471,10 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) if ((project->first("TEMPLATE") == "app" && project->isActiveConfig("app_bundle")) || (project->first("TEMPLATE") == "lib" && !project->isActiveConfig("staticlib") && project->isActiveConfig("lib_bundle"))) { - QString plist = fileFixify(project->first("QMAKE_INFO_PLIST").toQString(), Option::output_dir, input_dir); + QString plist = fileFixify(project->first("QMAKE_INFO_PLIST").toQString(), FileFixifyToIndir); if (!plist.isEmpty()) { if (exists(plist)) - t << "\t\t\t\t" << writeSettings("INFOPLIST_FILE", plist) << ";\n"; + t << "\t\t\t\t" << writeSettings("INFOPLIST_FILE", fileFixify(plist)) << ";\n"; else warn_msg(WarnLogic, "Could not resolve Info.plist: '%s'. Check if QMAKE_INFO_PLIST points to a valid file.", plist.toLatin1().constData()); } else { @@ -1427,30 +1483,29 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) if (plist_in_file.open(QIODevice::ReadOnly)) { QTextStream plist_in(&plist_in_file); QString plist_in_text = plist_in.readAll(); - plist_in_text = plist_in_text.replace("@ICON@", + plist_in_text.replace("@ICON@", (project->isEmpty("ICON") ? QString("") : project->first("ICON").toQString().section(Option::dir_sep, -1))); if (project->first("TEMPLATE") == "app") { - plist_in_text = plist_in_text.replace("@EXECUTABLE@", project->first("QMAKE_ORIG_TARGET").toQString()); + plist_in_text.replace("@EXECUTABLE@", project->first("QMAKE_ORIG_TARGET").toQString()); } else { - plist_in_text = plist_in_text.replace("@LIBRARY@", project->first("QMAKE_ORIG_TARGET").toQString()); + plist_in_text.replace("@LIBRARY@", project->first("QMAKE_ORIG_TARGET").toQString()); } QString bundlePrefix = project->first("QMAKE_TARGET_BUNDLE_PREFIX").toQString(); if (bundlePrefix.isEmpty()) bundlePrefix = "com.yourcompany"; - plist_in_text = plist_in_text.replace("@BUNDLEIDENTIFIER@", bundlePrefix + "." + QLatin1String("${PRODUCT_NAME:rfc1034identifier}")); + plist_in_text.replace("@BUNDLEIDENTIFIER@", bundlePrefix + '.' + QLatin1String("${PRODUCT_NAME:rfc1034identifier}")); if (!project->values("VERSION").isEmpty()) { - plist_in_text = plist_in_text.replace("@SHORT_VERSION@", project->first("VER_MAJ") + "." + - project->first("VER_MIN")); + plist_in_text.replace("@SHORT_VERSION@", project->first("VER_MAJ") + "." + project->first("VER_MIN")); } - plist_in_text = plist_in_text.replace("@TYPEINFO@", + plist_in_text.replace("@TYPEINFO@", (project->isEmpty("QMAKE_PKGINFO_TYPEINFO") ? QString::fromLatin1("????") : project->first("QMAKE_PKGINFO_TYPEINFO").left(4).toQString())); QString plist_dir; if (!project->isEmpty("PLIST_DIR")) plist_dir = project->first("PLIST_DIR").toQString(); QString plist_in_filename = QFileInfo(plist_in_file).fileName(); - QFile plist_out_file(plist_dir + plist_in_filename); - if (plist_out_file.open(QIODevice::WriteOnly | QIODevice::Text)) { + QFile plist_out_file(Option::output_dir + "/" + plist_dir + plist_in_filename); + if (plist_out_file.open(QIODevice::WriteOnly | QIODevice::Text)) { QTextStream plist_out(&plist_out_file); plist_out << plist_in_text; t << "\t\t\t\t" << writeSettings("INFOPLIST_FILE", fixForOutput(plist_dir + plist_in_filename)) << ";\n"; @@ -1459,12 +1514,12 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) } } - t << "\t\t\t\t" << writeSettings("SYMROOT", escapeFilePath(qmake_getpwd())) << ";\n"; + t << "\t\t\t\t" << writeSettings("SYMROOT", Option::output_dir) << ";\n"; if (!project->isEmpty("DESTDIR")) { ProString dir = project->first("DESTDIR"); if (QDir::isRelativePath(dir.toQString())) - dir.prepend(qmake_getpwd() + Option::dir_sep); + dir.prepend(Option::output_dir + Option::dir_sep); t << "\t\t\t\t" << writeSettings("INSTALL_DIR", dir) << ";\n"; } @@ -1495,13 +1550,13 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) QString var = tmp[i].toQString(), val = QString::fromLocal8Bit(qgetenv(var.toLatin1().constData())); if (val.isEmpty() && var == "TB") val = "/usr/bin/"; - t << "\t\t\t\t" << writeSettings(var, escapeFilePath(val)) << ";\n"; + t << "\t\t\t\t" << writeSettings(var, val) << ";\n"; } if (!project->isEmpty("PRECOMPILED_HEADER")) { t << "\t\t\t\t" << writeSettings("GCC_PRECOMPILE_PREFIX_HEADER", "YES") << ";\n" - << "\t\t\t\t" << writeSettings("GCC_PREFIX_HEADER", escapeFilePath(project->first("PRECOMPILED_HEADER"))) << ";\n"; + << "\t\t\t\t" << writeSettings("GCC_PREFIX_HEADER", project->first("PRECOMPILED_HEADER")) << ";\n"; } - t << "\t\t\t\t" << writeSettings("HEADER_SEARCH_PATHS", fixListForOutput("INCLUDEPATH") + ProStringList(fixForOutput(specdir())), SettingsAsList, 5) << ";\n" + t << "\t\t\t\t" << writeSettings("HEADER_SEARCH_PATHS", fixListForOutput("INCLUDEPATH"), SettingsAsList, 5) << ";\n" << "\t\t\t\t" << writeSettings("LIBRARY_SEARCH_PATHS", fixListForOutput("QMAKE_PBX_LIBPATHS"), SettingsAsList, 5) << ";\n" << "\t\t\t\t" << writeSettings("FRAMEWORK_SEARCH_PATHS", fixListForOutput("QMAKE_FRAMEWORKPATH"), !project->values("QMAKE_FRAMEWORKPATH").isEmpty() ? SettingsAsList : 0, 5) << ";\n"; @@ -1530,8 +1585,8 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) t << "\t\t\t\t" << writeSettings("OTHER_LDFLAGS", fixListForOutput("SUBLIBS") + fixListForOutput("QMAKE_LFLAGS") - + fixListForOutput("QMAKE_LIBS") - + fixListForOutput("QMAKE_LIBS_PRIVATE"), + + fixListForOutput(fixLibFlags("QMAKE_LIBS")) + + fixListForOutput(fixLibFlags("QMAKE_LIBS_PRIVATE")), SettingsAsList, 6) << ";\n"; } const ProStringList &archs = !project->values("QMAKE_XCODE_ARCHS").isEmpty() ? @@ -1539,7 +1594,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) if (!archs.isEmpty()) t << "\t\t\t\t" << writeSettings("ARCHS", archs) << ";\n"; if (!project->isEmpty("OBJECTS_DIR")) - t << "\t\t\t\t" << writeSettings("OBJROOT", escapeFilePath(project->first("OBJECTS_DIR").toQString())) << ";\n"; + t << "\t\t\t\t" << writeSettings("OBJROOT", project->first("OBJECTS_DIR")) << ";\n"; } else { if (project->first("TEMPLATE") == "app") { t << "\t\t\t\t" << writeSettings("PRODUCT_NAME", fixForOutput(project->first("QMAKE_ORIG_TARGET").toQString())) << ";\n"; @@ -1551,7 +1606,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) ProString lib = project->first("QMAKE_ORIG_TARGET"); if (!project->isActiveConfig("lib_bundle") && !project->isActiveConfig("staticlib")) lib.prepend("lib"); - t << "\t\t\t\t" << writeSettings("PRODUCT_NAME", escapeFilePath(lib)) << ";\n"; + t << "\t\t\t\t" << writeSettings("PRODUCT_NAME", lib) << ";\n"; } } t << "\t\t\t};\n" @@ -1578,6 +1633,19 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) t << "\t\t\t" << writeSettings("projectDirPath", ProStringList()) << ";\n" << "\t\t\t" << writeSettings("projectRoot", "") << ";\n" << "\t\t\t" << writeSettings("targets", project->values("QMAKE_PBX_TARGETS"), SettingsAsList, 4) << ";\n" + << "\t\t\t" << "attributes = {\n" + << "\t\t\t\tTargetAttributes = {\n"; + foreach (const ProString &target, project->values("QMAKE_PBX_TARGETS")) { + const ProStringList &attributes = project->values(ProKey("QMAKE_PBX_TARGET_ATTRIBUTES_" + target)); + if (attributes.isEmpty()) + continue; + t << "\t\t\t\t\t" << target << " = {\n"; + foreach (const ProString &attribute, attributes) + t << "\t\t\t\t\t\t" << writeSettings(attribute.toQString(), project->first(ProKey("QMAKE_PBX_TARGET_ATTRIBUTES_" + target + "_" + attribute))) << ";\n"; + t << "\t\t\t\t\t};\n"; + } + t << "\t\t\t\t};\n" + << "\t\t\t};\n" << "\t\t};\n"; // FIXME: Deal with developmentRegion and knownRegions for QMAKE_PBX_ROOT @@ -1588,8 +1656,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) << "}\n"; if(project->isActiveConfig("generate_pbxbuild_makefile")) { - QString mkwrap = fileFixify(pbx_dir + Option::dir_sep + ".." + Option::dir_sep + project->first("MAKEFILE"), - qmake_getpwd()); + QString mkwrap = Option::output_dir + project->first("/MAKEFILE"); QFile mkwrapf(mkwrap); if(mkwrapf.open(QIODevice::WriteOnly | QIODevice::Text)) { writingUnixMakefileGenerator = true; @@ -1597,13 +1664,14 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) QTextStream mkwrapt(&mkwrapf); writeHeader(mkwrapt); const char cleans[] = "preprocess_clean "; + const QString cmd = escapeFilePath(project->first("QMAKE_ORIG_TARGET") + projectSuffix() + "/") + " && " + pbxbuild(); mkwrapt << "#This is a makefile wrapper for PROJECT BUILDER\n" << "all:\n\t" - << "cd " << project->first("QMAKE_ORIG_TARGET") << projectSuffix() << "/ && " << pbxbuild() << "\n" + << "cd " << cmd << "\n" << "install: all\n\t" - << "cd " << project->first("QMAKE_ORIG_TARGET") << projectSuffix() << "/ && " << pbxbuild() << " install\n" + << "cd " << cmd << " install\n" << "distclean clean: preprocess_clean\n\t" - << "cd " << project->first("QMAKE_ORIG_TARGET") << projectSuffix() << "/ && " << pbxbuild() << " clean\n" + << "cd " << cmd << " clean\n" << (!did_preprocess ? cleans : "") << ":\n"; if(did_preprocess) mkwrapt << cleans << ":\n\t" @@ -1613,7 +1681,52 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) } } - qmake_setpwd(input_dir); + // Scheme + { + QString xcodeSpecDir = project->first("QMAKE_XCODE_SPECDIR").toQString(); + + bool wroteCustomScheme = false; + + QString projectSharedSchemesPath = pbx_dir + "/xcshareddata/xcschemes"; + if (mkdir(projectSharedSchemesPath)) { + QString target = project->first("QMAKE_ORIG_TARGET").toQString(); + + QFile defaultSchemeFile(xcodeSpecDir + "/default.xcscheme"); + QFile outputSchemeFile(projectSharedSchemesPath + Option::dir_sep + target + ".xcscheme"); + + if (defaultSchemeFile.open(QIODevice::ReadOnly) + && outputSchemeFile.open(QIODevice::WriteOnly | QIODevice::Text)) { + + QTextStream defaultSchemeStream(&defaultSchemeFile); + QString schemeData = defaultSchemeStream.readAll(); + + schemeData.replace("@QMAKE_ORIG_TARGET@", target); + schemeData.replace("@TARGET_PBX_KEY@", keyFor(pbx_dir + "QMAKE_PBX_TARGET")); + schemeData.replace("@TEST_BUNDLE_PBX_KEY@", keyFor("QMAKE_TEST_BUNDLE_REFERENCE")); + + QTextStream outputSchemeStream(&outputSchemeFile); + outputSchemeStream << schemeData; + + wroteCustomScheme = true; + } + } + + if (wroteCustomScheme) { + // Prevent Xcode from auto-generating schemes + QString workspaceSettingsFilename("WorkspaceSettings.xcsettings"); + QString workspaceSharedDataPath = pbx_dir + "/project.xcworkspace/xcshareddata"; + if (mkdir(workspaceSharedDataPath)) { + QFile::copy(xcodeSpecDir + Option::dir_sep + workspaceSettingsFilename, + workspaceSharedDataPath + Option::dir_sep + workspaceSettingsFilename); + } else { + wroteCustomScheme = false; + } + } + + if (!wroteCustomScheme) + warn_msg(WarnLogic, "Failed to generate schemes in '%s', " \ + "falling back to Xcode auto-generated schemes", qPrintable(projectSharedSchemesPath)); + } return true; } @@ -1703,13 +1816,15 @@ ProjectBuilderMakefileGenerator::openOutput(QFile &file, const QString &build) c output += QDir::separator(); } output += QString("project.pbxproj"); - output = unescapeFilePath(output); file.setFileName(output); + bool ret = UnixMakefileGenerator::openOutput(file, build); + ((ProjectBuilderMakefileGenerator*)this)->pbx_dir = Option::output_dir.section(Option::dir_sep, 0, -1); + Option::output_dir = pbx_dir.section(Option::dir_sep, 0, -2); + return ret; } - bool ret = UnixMakefileGenerator::openOutput(file, build); - ((ProjectBuilderMakefileGenerator*)this)->pbx_dir = Option::output_dir.section(Option::dir_sep, 0, -1); - Option::output_dir = pbx_dir.section(Option::dir_sep, 0, -2); - return ret; + + ((ProjectBuilderMakefileGenerator*)this)->pbx_dir = Option::output_dir; + return UnixMakefileGenerator::openOutput(file, build); } /* This function is such a hack it is almost pointless, but it @@ -1760,8 +1875,6 @@ ProjectBuilderMakefileGenerator::pbuilderVersion() const else version_plist = "/Developer/Applications/Project Builder.app/Contents/version.plist"; #endif - } else { - version_plist = version_plist.replace(QRegExp("\""), ""); } if (ret.isEmpty()) { QFile version_file(version_plist); @@ -1822,7 +1935,7 @@ int ProjectBuilderMakefileGenerator::reftypeForFile(const QString &where) { int ret = 0; //absolute is the default.. - if(QDir::isRelativePath(unescapeFilePath(where))) + if (QDir::isRelativePath(where)) ret = 4; //relative return ret; } @@ -1848,26 +1961,6 @@ ProjectBuilderMakefileGenerator::pbxbuild() return (pbuilderVersion() >= 38 ? "xcodebuild" : "pbxbuild"); } -QString -ProjectBuilderMakefileGenerator::escapeFilePath(const QString &path) const -{ -#if 1 - //in the middle of generating a Makefile! - if(writingUnixMakefileGenerator) - return UnixMakefileGenerator::escapeFilePath(path); - - //generating stuff for the xml file! - QString ret = path; - if(!ret.isEmpty()) { - ret = unescapeFilePath(ret); - debug_msg(2, "EscapeFilePath: %s -> %s", path.toLatin1().constData(), ret.toLatin1().constData()); - } - return ret; -#else - return UnixMakefileGenerator::escapeFilePath(path); -#endif -} - static QString quotedStringLiteral(const QString &value) { QString result; diff --git a/Telegram/_qt_5_4_0_patch/qtbase/qmake/generators/makefile.cpp b/Telegram/_qt_5_5_0_patch/qtbase/qmake/generators/makefile.cpp similarity index 88% rename from Telegram/_qt_5_4_0_patch/qtbase/qmake/generators/makefile.cpp rename to Telegram/_qt_5_5_0_patch/qtbase/qmake/generators/makefile.cpp index 0216f5cfa..2c18c48b9 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/qmake/generators/makefile.cpp +++ b/Telegram/_qt_5_5_0_patch/qtbase/qmake/generators/makefile.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the qmake application of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -45,7 +45,6 @@ #include #include #include -#include #include #if defined(Q_OS_UNIX) @@ -62,6 +61,8 @@ QT_BEGIN_NAMESPACE +using namespace QMakeInternal; + bool MakefileGenerator::canExecute(const QStringList &cmdline, int *a) const { int argv0 = -1; @@ -74,7 +75,7 @@ bool MakefileGenerator::canExecute(const QStringList &cmdline, int *a) const if(a) *a = argv0; if(argv0 != -1) { - const QString c = Option::fixPathToLocalOS(cmdline.at(argv0), true); + const QString c = Option::normalizePath(cmdline.at(argv0)); if(exists(c)) return true; } @@ -89,50 +90,16 @@ QString MakefileGenerator::mkdir_p_asstring(const QString &dir, bool escape) con bool MakefileGenerator::mkdir(const QString &in_path) const { - QString path = Option::fixPathToLocalOS(in_path); + QString path = Option::normalizePath(in_path); if(QFile::exists(path)) return true; - QDir d; - if(path.startsWith(QDir::separator())) { - d.cd(QString(QDir::separator())); - path.remove(0, 1); - } - bool ret = true; -#ifdef Q_OS_WIN - bool driveExists = true; - if(!QDir::isRelativePath(path)) { - if(QFile::exists(path.left(3))) { - d.cd(path.left(3)); - path.remove(0, 3); - } else { - warn_msg(WarnLogic, "Cannot access drive '%s' (%s)", - path.left(3).toLatin1().data(), path.toLatin1().data()); - driveExists = false; - } - } - if(driveExists) -#endif - { - QStringList subs = path.split(QDir::separator()); - for(QStringList::Iterator subit = subs.begin(); subit != subs.end(); ++subit) { - if(!d.cd(*subit)) { - d.mkdir((*subit)); - if(d.exists((*subit))) { - d.cd((*subit)); - } else { - ret = false; - break; - } - } - } - } - return ret; + return QDir().mkpath(path); } // ** base makefile generator MakefileGenerator::MakefileGenerator() : - init_opath_already(false), init_already(false), no_io(false), project(0) + no_io(false), project(0) { } @@ -168,10 +135,6 @@ MakefileGenerator::verifyCompilers() void MakefileGenerator::initOutPaths() { - if(init_opath_already) - return; - verifyCompilers(); - init_opath_already = true; ProValueMap &v = project->variables(); //for shadow builds if(!v.contains("QMAKE_ABSOLUTE_SOURCE_PATH")) { @@ -199,8 +162,6 @@ MakefileGenerator::initOutPaths() v["QMAKE_ABSOLUTE_SOURCE_PATH"].clear(); } - QString currentDir = qmake_getpwd(); //just to go back to - //some builtin directories if(project->isEmpty("PRECOMPILED_DIR") && !project->isEmpty("OBJECTS_DIR")) v["PRECOMPILED_DIR"] = v["OBJECTS_DIR"]; @@ -214,7 +175,7 @@ MakefileGenerator::initOutPaths() const ProString orig_path = v[dkey].first(); ProString &pathRef = v[dkey].first(); - pathRef = fileFixify(pathRef.toQString(), Option::output_dir, Option::output_dir); + pathRef = fileFixify(pathRef.toQString(), FileFixifyFromOutdir); #ifdef Q_OS_WIN // We don't want to add a separator for DLLDESTDIR on Windows (###why?) @@ -229,7 +190,7 @@ MakefileGenerator::initOutPaths() continue; QString path = project->first(dkey).toQString(); //not to be changed any further - path = fileFixify(path, currentDir, Option::output_dir); + path = fileFixify(path, FileFixifyBackwards); debug_msg(3, "Fixed output_dir %s (%s) into %s", dirs[x], orig_path.toLatin1().constData(), path.toLatin1().constData()); if(!mkdir(path)) @@ -247,17 +208,17 @@ MakefileGenerator::initOutPaths() for (ProStringList::ConstIterator it2 = tmp.begin(); it2 != tmp.end(); ++it2) { ProStringList &inputs = project->values((*it2).toKey()); for (ProStringList::Iterator input = inputs.begin(); input != inputs.end(); ++input) { - QString finp = fileFixify((*input).toQString(), Option::output_dir, Option::output_dir); + QString finp = fileFixify((*input).toQString(), FileFixifyFromOutdir); *input = ProString(finp); - QString path = unescapeFilePath(replaceExtraCompilerVariables(tmp_out, finp, QString())); - path = Option::fixPathToTargetOS(path); - int slash = path.lastIndexOf(Option::dir_sep); + QString path = replaceExtraCompilerVariables(tmp_out, finp, QString(), NoShell); + path = Option::normalizePath(path); + int slash = path.lastIndexOf('/'); if(slash != -1) { path = path.left(slash); // Make out path only if it does not contain makefile variables if(!path.contains("${")) if(path != "." && - !mkdir(fileFixify(path, qmake_getpwd(), Option::output_dir))) + !mkdir(fileFixify(path, FileFixifyBackwards))) warn_msg(WarnLogic, "%s: Cannot access directory '%s'", (*it).toLatin1().constData(), path.toLatin1().constData()); } @@ -267,7 +228,7 @@ MakefileGenerator::initOutPaths() if(!v["DESTDIR"].isEmpty()) { QDir d(v["DESTDIR"].first().toQString()); - if(Option::fixPathToLocalOS(d.absolutePath()) == Option::fixPathToLocalOS(Option::output_dir)) + if (Option::normalizePath(d.absolutePath()) == Option::normalizePath(Option::output_dir)) v.remove("DESTDIR"); } } @@ -313,9 +274,7 @@ MakefileGenerator::findFilesInVPATH(ProStringList l, uchar flags, const QString continue; } if(!(flags & VPATH_NoFixify)) - file = fileFixify(file, qmake_getpwd(), Option::output_dir); - if (file.at(0) == '\"' && file.at(file.length() - 1) == '\"') - file = file.mid(1, file.length() - 2); + file = fileFixify(file, FileFixifyBackwards); if(exists(file)) { ++val_it; @@ -332,8 +291,8 @@ MakefileGenerator::findFilesInVPATH(ProStringList l, uchar flags, const QString } for (ProStringList::Iterator vpath_it = vpath.begin(); vpath_it != vpath.end(); ++vpath_it) { - QString real_dir = Option::fixPathToLocalOS((*vpath_it).toQString()); - if(exists(real_dir + QDir::separator() + val)) { + QString real_dir = Option::normalizePath((*vpath_it).toQString()); + if (exists(real_dir + '/' + val)) { ProString dir = (*vpath_it); if(!dir.endsWith(Option::dir_sep)) dir += Option::dir_sep; @@ -353,7 +312,7 @@ MakefileGenerator::findFilesInVPATH(ProStringList l, uchar flags, const QString dir = regex.left(regex.lastIndexOf(Option::dir_sep) + 1); real_dir = dir; if(!(flags & VPATH_NoFixify)) - real_dir = fileFixify(real_dir, qmake_getpwd(), Option::output_dir) + '/'; + real_dir = fileFixify(real_dir, FileFixifyBackwards) + '/'; regex.remove(0, dir.length()); } if(real_dir.isEmpty() || exists(real_dir)) { @@ -413,11 +372,8 @@ MakefileGenerator::initCompiler(const MakefileGenerator::Compiler &comp) void MakefileGenerator::init() { - initOutPaths(); - if(init_already) - return; verifyCompilers(); - init_already = true; + initOutPaths(); ProValueMap &v = project->variables(); @@ -444,6 +400,41 @@ MakefileGenerator::init() setSystemIncludes(v["QMAKE_DEFAULT_INCDIRS"]); + ProStringList &incs = project->values("INCLUDEPATH"); + if (!project->isActiveConfig("no_include_pwd")) { + if (Option::output_dir != qmake_getpwd()) { + // Pretend that the build dir is the source dir for #include purposes, + // consistently with the "transparent shadow builds" strategy. This is + // also consistent with #include "foo.h" falling back to #include + // behavior if it doesn't find the file in the source dir. + incs.prepend(Option::output_dir); + } + // This makes #include work if the header lives in the source dir. + // The benefit of that is questionable, as generally the user should use the + // correct include style, and extra compilers that put stuff in the source dir + // should add the dir themselves. + // More importantly, it makes #include "foo.h" work with MSVC when shadow-building, + // as this compiler looks files up relative to %CD%, not the source file's parent. + incs.prepend(qmake_getpwd()); + } + incs.append(project->specDir()); + + const char * const cacheKeys[] = { "_QMAKE_STASH_", "_QMAKE_SUPER_CACHE_", 0 }; + for (int i = 0; cacheKeys[i]; ++i) { + if (v[cacheKeys[i]].isEmpty()) + continue; + const ProString &file = v[cacheKeys[i]].first(); + if (file.isEmpty()) + continue; + + QFileInfo fi(fileInfo(file.toQString())); + + // If the file lives in the output dir we treat it as 'owned' by + // the current project, so it should be distcleaned by it as well. + if (fi.path() == Option::output_dir) + v["QMAKE_DISTCLEAN"].append(fi.fileName()); + } + ProStringList &quc = v["QMAKE_EXTRA_COMPILERS"]; //make sure the COMPILERS are in the correct input/output chain order @@ -502,10 +493,10 @@ MakefileGenerator::init() sub.toLatin1().constData()); continue; } - inn = fileFixify(tinn.first().toQString(), qmake_getpwd()); - outn = fileFixify(toutn.first().toQString(), qmake_getpwd(), Option::output_dir); + inn = fileFixify(tinn.first().toQString(), FileFixifyToIndir); + outn = fileFixify(toutn.first().toQString(), FileFixifyBackwards); } else { - inn = fileFixify(sub, qmake_getpwd()); + inn = fileFixify(sub, FileFixifyToIndir); if (!QFile::exists(inn)) { // random insanity for backwards compat: .in file specified with absolute out dir inn = fileFixify(sub); @@ -515,7 +506,7 @@ MakefileGenerator::init() inn.toLatin1().constData()); continue; } - outn = fileFixify(inn.left(inn.length()-3), qmake_getpwd(), Option::output_dir); + outn = fileFixify(inn.left(inn.length() - 3), FileFixifyBackwards); } const ProKey confign(sub + ".CONFIG"); @@ -582,10 +573,12 @@ MakefileGenerator::init() contentBytes = contents.toUtf8(); } QFile out(outn); + QFileInfo outfi(out); if (out.exists() && out.open(QFile::ReadOnly)) { QByteArray old = out.readAll(); if (contentBytes == old) { v["QMAKE_INTERNAL_INCLUDED_FILES"].append(in.fileName()); + v["QMAKE_DISTCLEAN"].append(outfi.absoluteFilePath()); continue; } out.close(); @@ -595,9 +588,10 @@ MakefileGenerator::init() continue; } } - mkdir(QFileInfo(out).absolutePath()); + mkdir(outfi.absolutePath()); if(out.open(QFile::WriteOnly)) { v["QMAKE_INTERNAL_INCLUDED_FILES"].append(in.fileName()); + v["QMAKE_DISTCLEAN"].append(outfi.absoluteFilePath()); out.write(contentBytes); } else { warn_msg(WarnLogic, "Cannot open substitute for output '%s'", @@ -683,7 +677,7 @@ MakefileGenerator::init() const ProKey ikey(*it + ".input"); const ProKey vokey(*it + ".variable_out"); const ProStringList &config = project->values(ProKey(*it + ".CONFIG")); - const ProString &tmp_out = project->values(ProKey(*it + ".output")).first(); + const ProString &tmp_out = project->first(ProKey(*it + ".output")); if(tmp_out.isEmpty()) continue; if (config.indexOf("combine") != -1) { @@ -694,7 +688,7 @@ MakefileGenerator::init() if(tmp_out.indexOf("$") == -1) { if(!verifyExtraCompiler((*it), QString())) //verify continue; - QString out = fileFixify(tmp_out.toQString(), Option::output_dir, Option::output_dir); + QString out = fileFixify(tmp_out.toQString(), FileFixifyFromOutdir); bool pre_dep = (config.indexOf("target_predeps") != -1); if (v.contains(vokey)) { const ProStringList &var_out = v.value(vokey); @@ -732,11 +726,10 @@ MakefileGenerator::init() if((*input).isEmpty()) continue; QString inpf = (*input).toQString(); - QString in = Option::fixPathToTargetOS(inpf, false); - if (!verifyExtraCompiler((*it).toQString(), in)) //verify + if (!verifyExtraCompiler((*it).toQString(), inpf)) //verify continue; - QString out = replaceExtraCompilerVariables(tmp_out.toQString(), inpf, QString()); - out = fileFixify(out, Option::output_dir, Option::output_dir); + QString out = replaceExtraCompilerVariables(tmp_out.toQString(), inpf, QString(), NoShell); + out = fileFixify(out, FileFixifyFromOutdir); bool pre_dep = (config.indexOf("target_predeps") != -1); if (v.contains(vokey)) { const ProStringList &var_out = project->values(vokey); @@ -777,15 +770,9 @@ MakefileGenerator::init() ProStringList incDirs = v["DEPENDPATH"] + v["QMAKE_ABSOLUTE_SOURCE_PATH"]; if(project->isActiveConfig("depend_includepath")) incDirs += v["INCLUDEPATH"]; - if(!project->isActiveConfig("no_include_pwd")) { - QString pwd = qmake_getpwd(); - if(pwd.isEmpty()) - pwd = "."; - incDirs += pwd; - } QList deplist; for (ProStringList::Iterator it = incDirs.begin(); it != incDirs.end(); ++it) - deplist.append(QMakeLocalFileName(unescapeFilePath((*it).toQString()))); + deplist.append(QMakeLocalFileName((*it).toQString())); QMakeSourceFileInfo::setDependencyPaths(deplist); debug_msg(1, "Dependency Directories: %s", incDirs.join(" :: ").toLatin1().constData()); //cache info @@ -831,12 +818,7 @@ MakefileGenerator::init() if(!project->isEmpty("TRANSLATIONS")) { ProStringList &trf = project->values("TRANSLATIONS"); for (ProStringList::Iterator it = trf.begin(); it != trf.end(); ++it) - (*it) = Option::fixPathToLocalOS((*it).toQString()); - } - - if(!project->isActiveConfig("no_include_pwd")) { //get the output_dir into the pwd - if(Option::output_dir != qmake_getpwd()) - project->values("INCLUDEPATH").append("."); + (*it) = Option::fixPathToTargetOS((*it).toQString()); } //fix up the target deps @@ -845,7 +827,7 @@ MakefileGenerator::init() ProStringList &l = v[fixpaths[path]]; for (ProStringList::Iterator val_it = l.begin(); val_it != l.end(); ++val_it) { if(!(*val_it).isEmpty()) - (*val_it) = escapeDependencyPath(Option::fixPathToTargetOS((*val_it).toQString(), false, false)); + (*val_it) = Option::fixPathToTargetOS((*val_it).toQString(), false, false); } } @@ -862,9 +844,9 @@ MakefileGenerator::init() if (exists(dep)) { out_deps.append(dep); } else { - QString dir, regex = Option::fixPathToLocalOS(dep); - if(regex.lastIndexOf(Option::dir_sep) != -1) { - dir = regex.left(regex.lastIndexOf(Option::dir_sep) + 1); + QString dir, regex = Option::normalizePath(dep); + if (regex.lastIndexOf('/') != -1) { + dir = regex.left(regex.lastIndexOf('/') + 1); regex.remove(0, dir.length()); } QStringList files = QDir(dir).entryList(QStringList(regex)); @@ -903,9 +885,9 @@ MakefileGenerator::processPrlFile(QString &file) meta_file = tmp; } // meta_file = fileFixify(meta_file); - QString real_meta_file = Option::fixPathToLocalOS(meta_file); + QString real_meta_file = Option::normalizePath(meta_file); if(!meta_file.isEmpty()) { - QString f = fileFixify(real_meta_file, qmake_getpwd(), Option::output_dir); + QString f = fileFixify(real_meta_file, FileFixifyBackwards); if(QMakeMetaInfo::libExists(f)) { QMakeMetaInfo libinfo(project); debug_msg(1, "Processing PRL file: %s", real_meta_file.toLatin1().constData()); @@ -923,7 +905,7 @@ MakefileGenerator::processPrlFile(QString &file) defs.append(def); if(try_replace_file && !libinfo.isEmpty("QMAKE_PRL_TARGET")) { QString dir; - int slsh = real_meta_file.lastIndexOf(Option::dir_sep); + int slsh = real_meta_file.lastIndexOf('/'); if(slsh != -1) dir = real_meta_file.left(slsh+1); file = libinfo.first("QMAKE_PRL_TARGET").toQString(); @@ -968,6 +950,21 @@ MakefileGenerator::processPrlFiles() qFatal("MakefileGenerator::processPrlFiles() called!"); } +static QString +qv(const ProString &val) +{ + return ' ' + QMakeEvaluator::quoteValue(val); +} + +static QString +qv(const ProStringList &val) +{ + QString ret; + foreach (const ProString &v, val) + ret += qv(v); + return ret; +} + void MakefileGenerator::writePrlFile(QTextStream &t) { @@ -978,21 +975,21 @@ MakefileGenerator::writePrlFile(QTextStream &t) QString bdir = Option::output_dir; if(bdir.isEmpty()) bdir = qmake_getpwd(); - t << "QMAKE_PRL_BUILD_DIR = " << bdir << endl; + t << "QMAKE_PRL_BUILD_DIR =" << qv(bdir) << endl; - t << "QMAKE_PRO_INPUT = " << project->projectFile().section('/', -1) << endl; + t << "QMAKE_PRO_INPUT =" << qv(project->projectFile().section('/', -1)) << endl; if(!project->isEmpty("QMAKE_ABSOLUTE_SOURCE_PATH")) - t << "QMAKE_PRL_SOURCE_DIR = " << project->first("QMAKE_ABSOLUTE_SOURCE_PATH") << endl; - t << "QMAKE_PRL_TARGET = " << target << endl; + t << "QMAKE_PRL_SOURCE_DIR =" << qv(project->first("QMAKE_ABSOLUTE_SOURCE_PATH")) << endl; + t << "QMAKE_PRL_TARGET =" << qv(target) << endl; if(!project->isEmpty("PRL_EXPORT_DEFINES")) - t << "QMAKE_PRL_DEFINES = " << project->values("PRL_EXPORT_DEFINES").join(' ') << endl; + t << "QMAKE_PRL_DEFINES =" << qv(project->values("PRL_EXPORT_DEFINES")) << endl; if(!project->isEmpty("PRL_EXPORT_CFLAGS")) - t << "QMAKE_PRL_CFLAGS = " << project->values("PRL_EXPORT_CFLAGS").join(' ') << endl; + t << "QMAKE_PRL_CFLAGS =" << qv(project->values("PRL_EXPORT_CFLAGS")) << endl; if(!project->isEmpty("PRL_EXPORT_CXXFLAGS")) - t << "QMAKE_PRL_CXXFLAGS = " << project->values("PRL_EXPORT_CXXFLAGS").join(' ') << endl; + t << "QMAKE_PRL_CXXFLAGS =" << qv(project->values("PRL_EXPORT_CXXFLAGS")) << endl; if(!project->isEmpty("CONFIG")) - t << "QMAKE_PRL_CONFIG = " << project->values("CONFIG").join(' ') << endl; + t << "QMAKE_PRL_CONFIG =" << qv(project->values("CONFIG")) << endl; if(!project->isEmpty("TARGET_VERSION_EXT")) t << "QMAKE_PRL_VERSION = " << project->first("TARGET_VERSION_EXT") << endl; else if(!project->isEmpty("VERSION")) @@ -1005,9 +1002,9 @@ MakefileGenerator::writePrlFile(QTextStream &t) libs << "QMAKE_LIBS"; //obvious one if(project->isActiveConfig("staticlib")) libs << "QMAKE_LIBS_PRIVATE"; - t << "QMAKE_PRL_LIBS = "; + t << "QMAKE_PRL_LIBS ="; for (ProStringList::Iterator it = libs.begin(); it != libs.end(); ++it) - t << project->values((*it).toKey()).join(' ').replace('\\', "\\\\") << " "; + t << qv(project->values((*it).toKey())); t << endl; } } @@ -1055,9 +1052,9 @@ MakefileGenerator::writeProjectMakefile() writeSubTargets(t, targets, SubTargetsNoFlags); if(!project->isActiveConfig("no_autoqmake")) { + QString mkf = escapeDependencyPath(fileFixify(Option::output.fileName())); for(QList::Iterator it = targets.begin(); it != targets.end(); ++it) - t << (*it)->makefile << ": " << - Option::fixPathToTargetOS(fileFixify(Option::output.fileName())) << endl; + t << escapeDependencyPath((*it)->makefile) << ": " << mkf << endl; } qDeleteAll(targets); return true; @@ -1105,7 +1102,7 @@ MakefileGenerator::prlFileName(bool fixify) if(fixify) { if(!project->isEmpty("DESTDIR")) ret.prepend(project->first("DESTDIR").toQString()); - ret = Option::fixPathToLocalOS(fileFixify(ret, qmake_getpwd(), Option::output_dir)); + ret = fileFixify(ret, FileFixifyBackwards); } return ret; } @@ -1127,6 +1124,7 @@ MakefileGenerator::writePrlFile() if(ft.open(QIODevice::WriteOnly)) { project->values("ALL_DEPS").append(prl); project->values("QMAKE_INTERNAL_PRL_FILE").append(prl); + project->values("QMAKE_DISTCLEAN").append(prl); QTextStream t(&ft); writePrlFile(t); } @@ -1152,30 +1150,16 @@ MakefileGenerator::writeObj(QTextStream &t, const char *src) t << escapeDependencyPath(dstf) << ": " << escapeDependencyPath(srcf) << " " << escapeDependencyPaths(findDependencies(srcf)).join(" \\\n\t\t"); - ProKey comp, cimp; + ProKey comp; for(QStringList::Iterator cppit = Option::cpp_ext.begin(); cppit != Option::cpp_ext.end(); ++cppit) { if((*sit).endsWith((*cppit))) { comp = "QMAKE_RUN_CXX"; - cimp = "QMAKE_RUN_CXX_IMP"; break; } } - if(comp.isEmpty()) { + if (comp.isEmpty()) comp = "QMAKE_RUN_CC"; - cimp = "QMAKE_RUN_CC_IMP"; - } - bool use_implicit_rule = !project->isEmpty(cimp); - use_implicit_rule = false; - if(use_implicit_rule) { - if(!project->isEmpty("OBJECTS_DIR")) { - use_implicit_rule = false; - } else { - int dot = (*sit).lastIndexOf('.'); - if(dot == -1 || ((*sit).left(dot) + Option::obj_ext != (*oit))) - use_implicit_rule = false; - } - } - if (!use_implicit_rule && !project->isEmpty(comp)) { + if (!project->isEmpty(comp)) { QString p = var(comp); p.replace(stringSrc, escapeFilePath(srcf)); p.replace(stringObj, escapeFilePath(dstf)); @@ -1188,11 +1172,13 @@ MakefileGenerator::writeObj(QTextStream &t, const char *src) QString MakefileGenerator::filePrefixRoot(const QString &root, const QString &path) { - QString ret(root + path); + QString ret(path); if(path.length() > 2 && path[1] == ':') //c:\foo - ret = QString(path.mid(0, 2) + root + path.mid(2)); - while(ret.endsWith("\\")) - ret = ret.left(ret.length()-1); + ret.insert(2, root); + else + ret.prepend(root); + while (ret.endsWith('\\')) + ret.chop(1); return ret; } @@ -1221,7 +1207,7 @@ MakefileGenerator::writeInstalls(QTextStream &t, bool noBuild) QString dst; if (installConfigValues.indexOf("no_path") == -1 && installConfigValues.indexOf("dummy_install") == -1) { - dst = fileFixify(unescapeFilePath(project->first(pvar).toQString()), FileFixifyAbsolute, false); + dst = fileFixify(project->first(pvar).toQString(), FileFixifyAbsolute, false); if(!dst.endsWith(Option::dir_sep)) dst += Option::dir_sep; } @@ -1309,7 +1295,7 @@ MakefileGenerator::writeInstalls(QTextStream &t, bool noBuild) uninst.append(rm_dir_contents + " " + escapeFilePath(filePrefixRoot(root, fileFixify(dst_dir + filestr, FileFixifyAbsolute, false)))); continue; } - QString local_dirstr = Option::fixPathToLocalOS(dirstr, true); + QString local_dirstr = Option::normalizePath(dirstr); QStringList files = QDir(local_dirstr).entryList(QStringList(filestr), QDir::NoDotAndDotDot | QDir::AllEntries); if (installConfigValues.contains("no_check_exist") && files.isEmpty()) { @@ -1388,7 +1374,7 @@ MakefileGenerator::writeInstalls(QTextStream &t, bool noBuild) t << "uninstall_" << (*it) << ": FORCE"; for (int i = uninst.size(); --i >= 0; ) t << "\n\t" << uninst.at(i); - t << "\n\t-$(DEL_DIR) " << filePrefixRoot(root, dst) << " \n\n"; + t << "\n\t-$(DEL_DIR) " << escapeFilePath(filePrefixRoot(root, dst)) << " \n\n"; } t << endl; @@ -1401,8 +1387,8 @@ MakefileGenerator::writeInstalls(QTextStream &t, bool noBuild) debug_msg(1, "no definition for install %s: install target not created",(*it).toLatin1().constData()); } } - t << "install: " << var("INSTALLDEPS") << " " << all_installs - << " FORCE\n\nuninstall: " << all_uninstalls << " " << var("UNINSTALLDEPS") + t << "install:" << depVar("INSTALLDEPS") << ' ' << all_installs + << " FORCE\n\nuninstall: " << all_uninstalls << depVar("UNINSTALLDEPS") << " FORCE\n\n"; } @@ -1412,6 +1398,24 @@ MakefileGenerator::var(const ProKey &var) const return val(project->values(var)); } +QString +MakefileGenerator::fileVar(const ProKey &var) const +{ + return val(escapeFilePaths(project->values(var))); +} + +QString +MakefileGenerator::fileVarList(const ProKey &var) const +{ + return valList(escapeFilePaths(project->values(var))); +} + +QString +MakefileGenerator::depVar(const ProKey &var) const +{ + return val(escapeDependencyPaths(project->values(var))); +} + QString MakefileGenerator::val(const ProStringList &varList) const { @@ -1432,6 +1436,12 @@ MakefileGenerator::varGlue(const ProKey &var, const QString &before, const QStri QString MakefileGenerator::fileVarGlue(const ProKey &var, const QString &before, const QString &glue, const QString &after) const +{ + return valGlue(escapeFilePaths(project->values(var)), before, glue, after); +} + +QString +MakefileGenerator::fixFileVarGlue(const ProKey &var, const QString &before, const QString &glue, const QString &after) const { ProStringList varList; foreach (const ProString &val, project->values(var)) @@ -1495,12 +1505,11 @@ MakefileGenerator::createObjectList(const ProStringList &sources) objdir = project->first("OBJECTS_DIR").toQString(); for (ProStringList::ConstIterator it = sources.begin(); it != sources.end(); ++it) { QString sfn = (*it).toQString(); - QFileInfo fi(fileInfo(Option::fixPathToLocalOS(sfn))); + QFileInfo fi(fileInfo(Option::normalizePath(sfn))); QString dir; if (project->isActiveConfig("object_parallel_to_source")) { // The source paths are relative to the output dir, but we need source-relative paths - QString sourceRelativePath = fileFixify(sfn, qmake_getpwd(), Option::output_dir); - sourceRelativePath = Option::fixPathToTargetOS(sourceRelativePath, false); + QString sourceRelativePath = fileFixify(sfn, FileFixifyBackwards); if (sourceRelativePath.startsWith(".." + Option::dir_sep)) sourceRelativePath = fileFixify(sourceRelativePath, FileFixifyAbsolute); @@ -1516,7 +1525,7 @@ MakefileGenerator::createObjectList(const ProStringList &sources) if (!noIO()) { // Ensure that the final output directory of each object exists - QString outRelativePath = fileFixify(dir, qmake_getpwd(), Option::output_dir); + QString outRelativePath = fileFixify(dir, FileFixifyBackwards); if (!mkdir(outRelativePath)) warn_msg(WarnLogic, "Cannot create directory '%s'", outRelativePath.toLatin1().constData()); } @@ -1528,7 +1537,8 @@ MakefileGenerator::createObjectList(const ProStringList &sources) return ret; } -ReplaceExtraCompilerCacheKey::ReplaceExtraCompilerCacheKey(const QString &v, const QStringList &i, const QStringList &o) +ReplaceExtraCompilerCacheKey::ReplaceExtraCompilerCacheKey( + const QString &v, const QStringList &i, const QStringList &o, MakefileGenerator::ReplaceFor s) { static QString doubleColon = QLatin1String("::"); @@ -1545,11 +1555,13 @@ ReplaceExtraCompilerCacheKey::ReplaceExtraCompilerCacheKey(const QString &v, con ol.sort(); out = ol.join(doubleColon); } + forShell = s; } bool ReplaceExtraCompilerCacheKey::operator==(const ReplaceExtraCompilerCacheKey &f) const { return (hashCode() == f.hashCode() && + f.forShell == forShell && f.in == in && f.out == out && f.var == var && @@ -1558,10 +1570,11 @@ bool ReplaceExtraCompilerCacheKey::operator==(const ReplaceExtraCompilerCacheKey QString -MakefileGenerator::replaceExtraCompilerVariables(const QString &orig_var, const QStringList &in, const QStringList &out) +MakefileGenerator::replaceExtraCompilerVariables( + const QString &orig_var, const QStringList &in, const QStringList &out, ReplaceFor forShell) { //lazy cache - ReplaceExtraCompilerCacheKey cacheKey(orig_var, in, out); + ReplaceExtraCompilerCacheKey cacheKey(orig_var, in, out, forShell); QString cacheVal = extraCompilerVariablesCache.value(cacheKey); if(!cacheVal.isNull()) return cacheVal; @@ -1591,7 +1604,7 @@ MakefileGenerator::replaceExtraCompilerVariables(const QString &orig_var, const } else if(var == QLatin1String("QMAKE_FILE_BASE") || var == QLatin1String("QMAKE_FILE_IN_BASE")) { //filePath = true; for(int i = 0; i < in.size(); ++i) { - QFileInfo fi(fileInfo(Option::fixPathToLocalOS(in.at(i)))); + QFileInfo fi(fileInfo(Option::normalizePath(in.at(i)))); QString base = fi.completeBaseName(); if(base.isNull()) base = fi.fileName(); @@ -1600,7 +1613,7 @@ MakefileGenerator::replaceExtraCompilerVariables(const QString &orig_var, const } else if(var == QLatin1String("QMAKE_FILE_EXT")) { filePath = true; for(int i = 0; i < in.size(); ++i) { - QFileInfo fi(fileInfo(Option::fixPathToLocalOS(in.at(i)))); + QFileInfo fi(fileInfo(Option::normalizePath(in.at(i)))); QString ext; // Ensure complementarity with QMAKE_FILE_BASE int baseLen = fi.completeBaseName().length(); @@ -1613,11 +1626,11 @@ MakefileGenerator::replaceExtraCompilerVariables(const QString &orig_var, const } else if(var == QLatin1String("QMAKE_FILE_PATH") || var == QLatin1String("QMAKE_FILE_IN_PATH")) { filePath = true; for(int i = 0; i < in.size(); ++i) - val += fileInfo(Option::fixPathToLocalOS(in.at(i))).path(); + val += fileInfo(Option::normalizePath(in.at(i))).path(); } else if(var == QLatin1String("QMAKE_FILE_NAME") || var == QLatin1String("QMAKE_FILE_IN")) { filePath = true; for(int i = 0; i < in.size(); ++i) - val += fileInfo(Option::fixPathToLocalOS(in.at(i))).filePath(); + val += fileInfo(Option::normalizePath(in.at(i))).filePath(); } } @@ -1629,11 +1642,11 @@ MakefileGenerator::replaceExtraCompilerVariables(const QString &orig_var, const } else if(var == QLatin1String("QMAKE_FILE_OUT")) { filePath = true; for(int i = 0; i < out.size(); ++i) - val += fileInfo(Option::fixPathToLocalOS(out.at(i))).filePath(); + val += fileInfo(Option::normalizePath(out.at(i))).filePath(); } else if(var == QLatin1String("QMAKE_FILE_OUT_BASE")) { //filePath = true; for(int i = 0; i < out.size(); ++i) { - QFileInfo fi(fileInfo(Option::fixPathToLocalOS(out.at(i)))); + QFileInfo fi(fileInfo(Option::normalizePath(out.at(i)))); QString base = fi.completeBaseName(); if(base.isNull()) base = fi.fileName(); @@ -1648,12 +1661,14 @@ MakefileGenerator::replaceExtraCompilerVariables(const QString &orig_var, const if(!val.isEmpty()) { QString fullVal; - if(filePath) { + if (filePath && forShell != NoShell) { for(int i = 0; i < val.size(); ++i) { - const QString file = Option::fixPathToTargetOS(unescapeFilePath(val.at(i)), false); if(!fullVal.isEmpty()) fullVal += " "; - fullVal += escapeFilePath(file); + if (forShell == LocalShell) + fullVal += IoUtils::shellQuote(Option::fixPathToLocalOS(val.at(i), false)); + else + fullVal += escapeFilePath(Option::fixPathToTargetOS(val.at(i), false)); } } else { fullVal = val.join(' '); @@ -1675,7 +1690,7 @@ MakefileGenerator::verifyExtraCompiler(const ProString &comp, const QString &fil { if(noIO()) return false; - const QString file = Option::fixPathToLocalOS(file_unfixed); + const QString file = Option::normalizePath(file_unfixed); const ProStringList &config = project->values(ProKey(comp + ".CONFIG")); if (config.indexOf("moc_verify") != -1) { @@ -1688,7 +1703,7 @@ MakefileGenerator::verifyExtraCompiler(const ProString &comp, const QString &fil } } } else if (config.indexOf("function_verify") != -1) { - ProString tmp_out = project->values(ProKey(comp + ".output")).first(); + ProString tmp_out = project->first(ProKey(comp + ".output")); if(tmp_out.isEmpty()) return false; ProStringList verify_function = project->values(ProKey(comp + ".verify_function")); @@ -1717,10 +1732,10 @@ MakefileGenerator::verifyExtraCompiler(const ProString &comp, const QString &fil if((*input).isEmpty()) continue; QString inpf = (*input).toQString(); - QString in = fileFixify(Option::fixPathToTargetOS(inpf, false)); + QString in = fileFixify(inpf); if(in == file) { bool pass = project->test(verify.toKey(), - QList() << ProStringList(replaceExtraCompilerVariables(tmp_out.toQString(), inpf, QString())) << + QList() << ProStringList(replaceExtraCompilerVariables(tmp_out.toQString(), inpf, QString(), NoShell)) << ProStringList(file)); if(invert) pass = !pass; @@ -1733,12 +1748,12 @@ MakefileGenerator::verifyExtraCompiler(const ProString &comp, const QString &fil } } } else if (config.indexOf("verify") != -1) { - QString tmp_out = project->values(ProKey(comp + ".output")).first().toQString(); + QString tmp_out = project->first(ProKey(comp + ".output")).toQString(); if(tmp_out.isEmpty()) return false; const QString tmp_cmd = project->values(ProKey(comp + ".commands")).join(' '); if (config.indexOf("combine") != -1) { - QString cmd = replaceExtraCompilerVariables(tmp_cmd, QString(), tmp_out); + QString cmd = replaceExtraCompilerVariables(tmp_cmd, QString(), tmp_out, LocalShell); if(system(cmd.toLatin1().constData())) return false; } else { @@ -1749,10 +1764,10 @@ MakefileGenerator::verifyExtraCompiler(const ProString &comp, const QString &fil if((*input).isEmpty()) continue; QString inpf = (*input).toQString(); - QString in = fileFixify(Option::fixPathToTargetOS(inpf, false)); + QString in = fileFixify(inpf); if(in == file) { - QString out = replaceExtraCompilerVariables(tmp_out, inpf, QString()); - QString cmd = replaceExtraCompilerVariables(tmp_cmd, in, out); + QString out = replaceExtraCompilerVariables(tmp_out, inpf, QString(), NoShell); + QString cmd = replaceExtraCompilerVariables(tmp_cmd, in, out, LocalShell); if(system(cmd.toLatin1().constData())) return false; break; @@ -1782,7 +1797,7 @@ MakefileGenerator::writeExtraTargets(QTextStream &t) } const ProStringList &config = project->values(ProKey(*it + ".CONFIG")); if (config.indexOf("fix_target") != -1) - targ = fileFixify(targ, Option::output_dir, Option::output_dir); + targ = fileFixify(targ, FileFixifyFromOutdir); if (config.indexOf("phony") != -1) deps += QLatin1String(" FORCE"); t << escapeDependencyPath(targ) << ":" << deps; @@ -1799,7 +1814,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) const ProStringList &quc = project->values("QMAKE_EXTRA_COMPILERS"); for (ProStringList::ConstIterator it = quc.begin(); it != quc.end(); ++it) { QString tmp_out = fileFixify(project->first(ProKey(*it + ".output")).toQString(), - Option::output_dir, Option::output_dir); + FileFixifyFromOutdir); const QString tmp_cmd = project->values(ProKey(*it + ".commands")).join(' '); const QString tmp_dep_cmd = project->values(ProKey(*it + ".depend_command")).join(' '); QString dep_cd_cmd; @@ -1817,8 +1832,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) for (ProStringList::ConstIterator it2 = comp_inputs.begin(); it2 != comp_inputs.end(); ++it2) { const ProStringList &tmp = project->values((*it2).toKey()); for (ProStringList::ConstIterator input = tmp.begin(); input != tmp.end(); ++input) { - QString in = Option::fixPathToTargetOS((*input).toQString(), false); - if(verifyExtraCompiler((*it), in)) + if (verifyExtraCompiler((*it), (*input).toQString())) tmp_inputs.append((*input)); } } @@ -1829,16 +1843,23 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) if (config.indexOf("combine") != -1) { // compilers with a combined input only have one output QString input = project->first(ProKey(*it + ".output")).toQString(); - t << " " << escapeDependencyPath(Option::fixPathToTargetOS(replaceExtraCompilerVariables(tmp_out, input, QString()))); + t << ' ' << escapeDependencyPath(Option::fixPathToTargetOS( + replaceExtraCompilerVariables(tmp_out, input, QString(), NoShell))); } else { for (ProStringList::ConstIterator input = tmp_inputs.begin(); input != tmp_inputs.end(); ++input) { - t << " " << escapeDependencyPath(Option::fixPathToTargetOS(replaceExtraCompilerVariables(tmp_out, (*input).toQString(), QString()))); + t << ' ' << escapeDependencyPath(Option::fixPathToTargetOS( + replaceExtraCompilerVariables(tmp_out, (*input).toQString(), QString(), NoShell))); } } t << endl; if (config.indexOf("no_clean") == -1) { - QString tmp_clean = project->values(ProKey(*it + ".clean")).join(' '); + QStringList raw_clean = project->values(ProKey(*it + ".clean")).toQStringList(); + if (raw_clean.isEmpty()) + raw_clean << tmp_out; + QString tmp_clean; + foreach (const QString &rc, raw_clean) + tmp_clean += ' ' + escapeFilePath(Option::fixPathToTargetOS(rc)); QString tmp_clean_cmds = project->values(ProKey(*it + ".clean_commands")).join(' '); if(!tmp_inputs.isEmpty()) clean_targets += QString("compiler_" + (*it) + "_clean "); @@ -1850,35 +1871,35 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) t << "\n\t" << tmp_clean_cmds; wrote_clean_cmds = true; } - if(tmp_clean.isEmpty()) - tmp_clean = tmp_out; if(tmp_clean.indexOf("${QMAKE_") == -1) { - t << "\n\t-$(DEL_FILE) " << tmp_clean; + t << "\n\t-$(DEL_FILE)" << tmp_clean; wrote_clean = true; } if(!wrote_clean_cmds || !wrote_clean) { - ProStringList cleans; + QStringList cleans; const QString del_statement("-$(DEL_FILE)"); if(!wrote_clean) { - if(project->isActiveConfig("no_delete_multiple_files")) { - for (ProStringList::ConstIterator input = tmp_inputs.begin(); input != tmp_inputs.end(); ++input) { - QString tinp = (*input).toQString(); - cleans.append(" " + Option::fixPathToTargetOS(replaceExtraCompilerVariables(tmp_clean, tinp, - replaceExtraCompilerVariables(tmp_out, tinp, QString())))); + QStringList dels; + for (ProStringList::ConstIterator input = tmp_inputs.begin(); input != tmp_inputs.end(); ++input) { + QString tinp = (*input).toQString(); + QString out = replaceExtraCompilerVariables(tmp_out, tinp, QString(), NoShell); + foreach (const QString &rc, raw_clean) { + dels << ' ' + escapeFilePath(Option::fixPathToTargetOS( + replaceExtraCompilerVariables(rc, tinp, out, NoShell), false)); } + } + if(project->isActiveConfig("no_delete_multiple_files")) { + cleans = dels; } else { - QString files, file; + QString files; const int commandlineLimit = 2047; // NT limit, expanded - for(int input = 0; input < tmp_inputs.size(); ++input) { - QString tinp = tmp_inputs.at(input).toQString(); - file = " " + replaceExtraCompilerVariables(tmp_clean, tinp, - replaceExtraCompilerVariables(tmp_out, tinp, QString())); + foreach (const QString &file, dels) { if(del_statement.length() + files.length() + qMax(fixEnvVariables(file).length(), file.length()) > commandlineLimit) { cleans.append(files); files.clear(); } - files += Option::fixPathToTargetOS(file); + files += file; } if(!files.isEmpty()) cleans.append(files); @@ -1890,7 +1911,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) for (ProStringList::ConstIterator input = tmp_inputs.begin(); input != tmp_inputs.end(); ++input) { QString tinp = (*input).toQString(); t << "\n\t" << replaceExtraCompilerVariables(tmp_clean_cmds, tinp, - replaceExtraCompilerVariables(tmp_out, tinp, QString())); + replaceExtraCompilerVariables(tmp_out, tinp, QString(), NoShell), TargetShell); } } } @@ -1905,14 +1926,14 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) } QStringList deps, inputs; if(!tmp_dep.isEmpty()) - deps += fileFixify(tmp_dep, Option::output_dir, Option::output_dir); + deps += fileFixify(tmp_dep, FileFixifyFromOutdir); for (ProStringList::ConstIterator input = tmp_inputs.begin(); input != tmp_inputs.end(); ++input) { QString inpf = (*input).toQString(); deps += findDependencies(inpf); inputs += Option::fixPathToTargetOS(inpf, false); if(!tmp_dep_cmd.isEmpty() && doDepends()) { char buff[256]; - QString dep_cmd = replaceExtraCompilerVariables(tmp_dep_cmd, inpf, tmp_out); + QString dep_cmd = replaceExtraCompilerVariables(tmp_dep_cmd, inpf, tmp_out, LocalShell); dep_cmd = dep_cd_cmd + fixEnvVariables(dep_cmd); if(FILE *proc = QT_POPEN(dep_cmd.toLatin1().constData(), "r")) { QString indeps; @@ -1924,6 +1945,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) } QT_PCLOSE(proc); if(!indeps.isEmpty()) { + // ### This is basically fubar. Add 'lines' flag to CONFIG? QStringList dep_cmd_deps = indeps.replace('\n', ' ').simplified().split(' '); for(int i = 0; i < dep_cmd_deps.count(); ++i) { QString &file = dep_cmd_deps[i]; @@ -1935,8 +1957,8 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) QList depdirs = QMakeSourceFileInfo::dependencyPaths(); for (QList::Iterator dit = depdirs.begin(); dit != depdirs.end(); ++dit) { - if (exists((*dit).real() + Option::dir_sep + file)) { - localFile = (*dit).local() + Option::dir_sep + file; + if (exists((*dit).local() + '/' + file)) { + localFile = (*dit).local() + '/' + file; break; } } @@ -1974,12 +1996,12 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) if (inputs.isEmpty()) continue; - QString out = replaceExtraCompilerVariables(tmp_out, QString(), QString()); - QString cmd = replaceExtraCompilerVariables(tmp_cmd, escapeFilePaths(inputs), QStringList() << out); + QString out = replaceExtraCompilerVariables(tmp_out, QString(), QString(), NoShell); + QString cmd = replaceExtraCompilerVariables(tmp_cmd, inputs, QStringList() << out, TargetShell); t << escapeDependencyPath(Option::fixPathToTargetOS(out)) << ":"; // compiler.CONFIG+=explicit_dependencies means that ONLY compiler.depends gets to cause Makefile dependencies if (config.indexOf("explicit_dependencies") != -1) { - t << " " << valList(escapeDependencyPaths(fileFixify(tmp_dep, Option::output_dir, Option::output_dir))); + t << " " << valList(escapeDependencyPaths(fileFixify(tmp_dep, FileFixifyFromOutdir))); } else { t << " " << valList(escapeDependencyPaths(inputs)) << " " << valList(escapeDependencyPaths(deps)); } @@ -1990,20 +2012,20 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) QString inpf = (*input).toQString(); QString in = Option::fixPathToTargetOS(inpf, false); QStringList deps = findDependencies(inpf); - deps += escapeDependencyPath(in); - QString out = unescapeFilePath(Option::fixPathToTargetOS(replaceExtraCompilerVariables(tmp_out, inpf, QString()))); + deps << in; + QString out = Option::fixPathToTargetOS(replaceExtraCompilerVariables(tmp_out, inpf, QString(), NoShell)); if(!tmp_dep.isEmpty()) { - QStringList pre_deps = fileFixify(tmp_dep, Option::output_dir, Option::output_dir); + QStringList pre_deps = fileFixify(tmp_dep, FileFixifyFromOutdir); for(int i = 0; i < pre_deps.size(); ++i) - deps += replaceExtraCompilerVariables(pre_deps.at(i), inpf, out); + deps << replaceExtraCompilerVariables(pre_deps.at(i), inpf, out, NoShell); } - QString cmd = replaceExtraCompilerVariables(tmp_cmd, inpf, out); + QString cmd = replaceExtraCompilerVariables(tmp_cmd, inpf, out, TargetShell); // NOTE: The var -> QMAKE_COMP_var replace feature is unsupported, do not use! for (ProStringList::ConstIterator it3 = vars.constBegin(); it3 != vars.constEnd(); ++it3) cmd.replace("$(" + (*it3) + ")", "$(QMAKE_COMP_" + (*it3)+")"); if(!tmp_dep_cmd.isEmpty() && doDepends()) { char buff[256]; - QString dep_cmd = replaceExtraCompilerVariables(tmp_dep_cmd, inpf, out); + QString dep_cmd = replaceExtraCompilerVariables(tmp_dep_cmd, inpf, out, LocalShell); dep_cmd = dep_cd_cmd + fixEnvVariables(dep_cmd); if(FILE *proc = QT_POPEN(dep_cmd.toLatin1().constData(), "r")) { QString indeps; @@ -2015,6 +2037,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) } QT_PCLOSE(proc); if(!indeps.isEmpty()) { + // ### This is basically fubar. Add 'lines' flag to CONFIG? QStringList dep_cmd_deps = indeps.replace('\n', ' ').simplified().split(' '); for(int i = 0; i < dep_cmd_deps.count(); ++i) { QString &file = dep_cmd_deps[i]; @@ -2026,8 +2049,8 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) QList depdirs = QMakeSourceFileInfo::dependencyPaths(); for (QList::Iterator dit = depdirs.begin(); dit != depdirs.end(); ++dit) { - if (exists((*dit).real() + Option::dir_sep + file)) { - localFile = (*dit).local() + Option::dir_sep + file; + if (exists((*dit).local() + '/' + file)) { + localFile = (*dit).local() + '/' + file; break; } } @@ -2092,7 +2115,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) } for(int i = 0; i < deps.size(); ) { QString &dep = deps[i]; - dep = Option::fixPathToTargetOS(unescapeFilePath(dep), false); + dep = Option::fixPathToTargetOS(dep, false); if(out == dep) deps.removeAt(i); else @@ -2212,25 +2235,18 @@ MakefileGenerator::writeDefaultVariables(QTextStream &t) t << "MOVE = " << var("QMAKE_MOVE") << endl; } -QString MakefileGenerator::fixifySpecdir(const QString &spec, const QString &outdir) -{ - if (QFileInfo(spec).isAbsolute()) - return fileFixify(spec, outdir); - return spec; -} - QString MakefileGenerator::buildArgs() { QString ret; foreach (const QString &arg, Option::globals->qmake_args) - ret += " " + escapeFilePath(arg); + ret += " " + shellQuote(arg); return ret; } //could get stored argv, but then it would have more options than are //probably necesary this will try to guess the bare minimum.. -QString MakefileGenerator::build_args(const QString &outdir) +QString MakefileGenerator::build_args() { QString ret = "$(QMAKE)"; @@ -2238,12 +2254,12 @@ QString MakefileGenerator::build_args(const QString &outdir) ret += buildArgs(); //output - QString ofile = Option::fixPathToTargetOS(fileFixify(Option::output.fileName())); + QString ofile = fileFixify(Option::output.fileName()); if(!ofile.isEmpty() && ofile != project->first("QMAKE_MAKEFILE")) ret += " -o " + escapeFilePath(ofile); //inputs - ret += " " + escapeFilePath(fileFixify(project->projectFile(), outdir)); + ret += " " + escapeFilePath(fileFixify(project->projectFile())); return ret; } @@ -2263,7 +2279,7 @@ MakefileGenerator::writeHeader(QTextStream &t) QString ofile = Option::fixPathToTargetOS(Option::output.fileName()); if (ofile.lastIndexOf(Option::dir_sep) != -1) ofile.remove(0, ofile.lastIndexOf(Option::dir_sep) +1); - t << "MAKEFILE = " << ofile << endl << endl; + t << "MAKEFILE = " << escapeFilePath(ofile) << endl << endl; } QList @@ -2276,7 +2292,7 @@ MakefileGenerator::findSubDirsSubTargets() const ProString ofile = subdirs[subdir]; QString oname = ofile.toQString(); QString fixedSubdir = oname; - fixedSubdir = fixedSubdir.replace(QRegExp("[^a-zA-Z0-9_]"),"-"); + fixedSubdir.replace(QRegExp("[^a-zA-Z0-9_]"),"-"); SubTarget *st = new SubTarget; st->name = oname; @@ -2317,7 +2333,7 @@ MakefileGenerator::findSubDirsSubTargets() const if(fileInfo(st->in_directory).isRelative()) st->out_directory = st->in_directory; else - st->out_directory = fileFixify(st->in_directory, qmake_getpwd(), Option::output_dir); + st->out_directory = fileFixify(st->in_directory, FileFixifyBackwards); const ProKey mkey(fixedSubdir + ".makefile"); if (!project->isEmpty(mkey)) { st->makefile = project->first(mkey).toQString(); @@ -2341,12 +2357,12 @@ MakefileGenerator::findSubDirsSubTargets() const if(subdirs[subDep] == depends.at(depend)) { QString subName = subdirs[subDep].toQString(); QString fixedSubDep = subName; - fixedSubDep = fixedSubDep.replace(QRegExp("[^a-zA-Z0-9_]"),"-"); + fixedSubDep.replace(QRegExp("[^a-zA-Z0-9_]"),"-"); const ProKey dtkey(fixedSubDep + ".target"); if (!project->isEmpty(dtkey)) { st->depends += project->first(dtkey); } else { - QString d = Option::fixPathToLocalOS(subName); + QString d = Option::fixPathToTargetOS(subName); const ProKey dfkey(fixedSubDep + ".file"); if (!project->isEmpty(dfkey)) { d = project->first(dfkey).toQString(); @@ -2372,7 +2388,7 @@ MakefileGenerator::findSubDirsSubTargets() const st->target = project->first(tkey).toQString(); } else { st->target = "sub-" + file; - st->target = st->target.replace(QRegExp("[^a-zA-Z0-9_]"),"-"); + st->target.replace(QRegExp("[^a-zA-Z0-9_]"), "-"); } } } @@ -2453,8 +2469,8 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QListmakefile; + : "\n\tcd " + escapeFilePath(out_directory) + " && "; + QString makefilein = " -f " + escapeFilePath(subtarget->makefile); //qmake it QString out; @@ -2464,6 +2480,7 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QListprofile, FileFixifyAbsolute)); if(out.startsWith(in_directory)) out = out.mid(in_directory.length()); + out = escapeFilePath(out); t << subtarget->target << "-qmake_all: "; if (flags & SubTargetOrdered) { if (target) @@ -2557,19 +2574,19 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QList recurse; @@ -2614,8 +2631,8 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QListmakefile; + : "\n\tcd " + escapeFilePath(out_directory) + " && "; + QString makefilein = " -f " + escapeFilePath(subtarget->makefile); QString out; QString in; @@ -2624,6 +2641,7 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QListprofile, FileFixifyAbsolute)); if (out.startsWith(in_directory)) out = out.mid(in_directory.length()); + out = escapeFilePath(out); } //write the rule/depends @@ -2669,16 +2687,16 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QListisEmpty("QMAKE_FAILED_REQUIREMENTS") && !project->isEmpty("QMAKE_INTERNAL_PRL_FILE")) { - QStringList files = fileFixify(Option::mkfile::project_files); + QStringList files = escapeFilePaths(fileFixify(Option::mkfile::project_files)); t << escapeDependencyPath(project->first("QMAKE_INTERNAL_PRL_FILE").toQString()) << ": \n\t" << "@$(QMAKE) -prl " << buildArgs() << " " << files.join(' ') << endl; } QString qmake = build_args(); if(!ofile.isEmpty() && !project->isActiveConfig("no_autoqmake")) { - t << escapeFilePath(ofile) << ": " + t << escapeDependencyPath(ofile) << ": " << escapeDependencyPath(fileFixify(project->projectFile())) << " "; if (Option::globals->do_cache) { if (!project->confFile().isEmpty()) @@ -2687,11 +2705,11 @@ MakefileGenerator::writeMakeQmake(QTextStream &t, bool noDummyQmakeAll) t << escapeDependencyPath(fileFixify(project->cacheFile())) << " "; } if(!specdir().isEmpty()) { - if(exists(Option::fixPathToLocalOS(specdir()+QDir::separator()+"qmake.conf"))) + if (exists(Option::normalizePath(specdir() + "/qmake.conf"))) t << escapeDependencyPath(specdir() + Option::dir_sep + "qmake.conf") << " "; } - const ProStringList &included = project->values("QMAKE_INTERNAL_INCLUDED_FILES"); - t << escapeDependencyPaths(included).join(" \\\n\t\t") << "\n\t" + const ProStringList &included = escapeDependencyPaths(project->values("QMAKE_INTERNAL_INCLUDED_FILES")); + t << included.join(" \\\n\t\t") << "\n\t" << qmake << endl; for(int include = 0; include < included.size(); ++include) { const ProString &i = included.at(include); @@ -2726,19 +2744,22 @@ MakefileGenerator::fileInfo(QString file) const return fi; } -QString -MakefileGenerator::unescapeFilePath(const QString &path) const +ProStringList +MakefileGenerator::fixLibFlags(const ProKey &var) { - QString ret = path; - ret.replace(QLatin1String("\\ "), QLatin1String(" ")); - ret.remove(QLatin1Char('\"')); + ProStringList in = project->values(var); + ProStringList ret; + + ret.reserve(in.length()); + foreach (const ProString &v, in) + ret << fixLibFlag(v); return ret; } -ProString -MakefileGenerator::unescapeFilePath(const ProString &path) const +ProString MakefileGenerator::fixLibFlag(const ProString &) { - return ProString(unescapeFilePath(path.toQString())); + qFatal("MakefileGenerator::fixLibFlag() called"); + return ProString(); } ProString @@ -2765,6 +2786,12 @@ MakefileGenerator::escapeFilePaths(const ProStringList &paths) const return ret; } +ProString +MakefileGenerator::escapeDependencyPath(const ProString &path) const +{ + return ProString(escapeDependencyPath(path.toQString())); +} + QStringList MakefileGenerator::escapeDependencyPaths(const QStringList &paths) const { @@ -2784,44 +2811,24 @@ MakefileGenerator::escapeDependencyPaths(const ProStringList &paths) const } QStringList -MakefileGenerator::unescapeFilePaths(const QStringList &paths) const -{ - QStringList ret; - for(int i = 0; i < paths.size(); ++i) - ret.append(unescapeFilePath(paths.at(i))); - return ret; -} - -ProStringList -MakefileGenerator::unescapeFilePaths(const ProStringList &paths) const -{ - ProStringList ret; - for (int i = 0; i < paths.size(); ++i) - ret.append(unescapeFilePath(paths.at(i))); - return ret; -} - -QStringList -MakefileGenerator::fileFixify(const QStringList& files, const QString &out_dir, const QString &in_dir, - FileFixifyType fix, bool canon) const +MakefileGenerator::fileFixify(const QStringList &files, FileFixifyTypes fix, bool canon) const { if(files.isEmpty()) return files; QStringList ret; for(QStringList::ConstIterator it = files.begin(); it != files.end(); ++it) { if(!(*it).isEmpty()) - ret << fileFixify((*it), out_dir, in_dir, fix, canon); + ret << fileFixify((*it), fix, canon); } return ret; } QString -MakefileGenerator::fileFixify(const QString& file, const QString &out_d, const QString &in_d, - FileFixifyType fix, bool canon) const +MakefileGenerator::fileFixify(const QString &file, FileFixifyTypes fix, bool canon) const { if(file.isEmpty()) return file; - QString ret = unescapeFilePath(file); + QString ret = file; //do the fixin' QString orig_file = ret; @@ -2831,17 +2838,23 @@ MakefileGenerator::fileFixify(const QString& file, const QString &out_d, const Q else warn_msg(WarnLogic, "Unable to expand ~ in %s", ret.toLatin1().constData()); } - if(fix == FileFixifyAbsolute || (fix == FileFixifyDefault && project->isActiveConfig("no_fixpath"))) { - if(fix == FileFixifyAbsolute && QDir::isRelativePath(ret)) { //already absolute - QString pwd = qmake_getpwd(); + if ((fix & FileFixifyAbsolute) + || (!(fix & FileFixifyRelative) && project->isActiveConfig("no_fixpath"))) { + if ((fix & FileFixifyAbsolute) && QDir::isRelativePath(ret)) { + QString pwd = !(fix & FileFixifyFromOutdir) ? project->projectDir() : Option::output_dir; + { + QFileInfo in_fi(fileInfo(pwd)); + if (in_fi.exists()) + pwd = in_fi.canonicalFilePath(); + } if (!pwd.endsWith(QLatin1Char('/'))) pwd += QLatin1Char('/'); ret.prepend(pwd); } ret = Option::fixPathToTargetOS(ret, false, canon); } else { //fix it.. - QString out_dir = QDir(Option::output_dir).absoluteFilePath(out_d); - QString in_dir = QDir(qmake_getpwd()).absoluteFilePath(in_d); + QString out_dir = (fix & FileFixifyToIndir) ? project->projectDir() : Option::output_dir; + QString in_dir = !(fix & FileFixifyFromOutdir) ? project->projectDir() : Option::output_dir; { QFileInfo in_fi(fileInfo(in_dir)); if(in_fi.exists()) @@ -2851,7 +2864,7 @@ MakefileGenerator::fileFixify(const QString& file, const QString &out_d, const Q out_dir = out_fi.canonicalFilePath(); } - QString qfile(Option::fixPathToLocalOS(ret, true, canon)); + QString qfile(Option::normalizePath(ret)); QFileInfo qfileinfo(fileInfo(qfile)); if(out_dir != in_dir || !qfileinfo.isRelative()) { if(qfileinfo.isRelative()) { @@ -2859,9 +2872,6 @@ MakefileGenerator::fileFixify(const QString& file, const QString &out_d, const Q qfileinfo.setFile(ret); } ret = Option::fixPathToTargetOS(ret, false, canon); - if(canon && qfileinfo.exists() && - file == Option::fixPathToTargetOS(ret, true, canon)) - ret = Option::fixPathToTargetOS(qfileinfo.canonicalFilePath()); QString match_dir = Option::fixPathToTargetOS(out_dir, false, canon); if(ret == match_dir) { ret = ""; @@ -2906,8 +2916,8 @@ MakefileGenerator::fileFixify(const QString& file, const QString &out_d, const Q } if(ret.isEmpty()) ret = "."; - debug_msg(3, "Fixed[%d,%d] %s :: to :: %s [%s::%s] [%s::%s]", fix, canon, orig_file.toLatin1().constData(), - ret.toLatin1().constData(), in_d.toLatin1().constData(), out_d.toLatin1().constData(), + debug_msg(3, "Fixed[%d,%d] %s :: to :: %s [%s::%s]", + int(fix), canon, orig_file.toLatin1().constData(), ret.toLatin1().constData(), qmake_getpwd().toLatin1().constData(), Option::output_dir.toLatin1().constData()); return ret; } @@ -2916,7 +2926,7 @@ QMakeLocalFileName MakefileGenerator::fixPathForFile(const QMakeLocalFileName &file, bool forOpen) { if(forOpen) - return QMakeLocalFileName(fileFixify(file.real(), qmake_getpwd(), Option::output_dir)); + return QMakeLocalFileName(fileFixify(file.real(), FileFixifyBackwards)); return QMakeLocalFileName(fileFixify(file.real())); } @@ -2971,7 +2981,7 @@ MakefileGenerator::findFileForDep(const QMakeLocalFileName &dep, const QMakeLoca if(QDir::isRelativePath(dir)) { if(!dir.endsWith(Option::dir_sep)) dir += Option::dir_sep; - QString shadow = fileFixify(dir + dep.local(), pwd, Option::output_dir); + QString shadow = fileFixify(dir + dep.local(), FileFixifyBackwards); if(exists(shadow)) { ret = QMakeLocalFileName(shadow); goto found_dep_from_heuristic; @@ -2980,7 +2990,7 @@ MakefileGenerator::findFileForDep(const QMakeLocalFileName &dep, const QMakeLoca } } { //is it from an EXTRA_TARGET - const QString dep_basename = dep.local().section(Option::dir_sep, -1); + const QString dep_basename = dep.local().section('/', -1); const ProStringList &qut = project->values("QMAKE_EXTRA_TARGETS"); for (ProStringList::ConstIterator it = qut.begin(); it != qut.end(); ++it) { QString targ = var(ProKey(*it + ".target")); @@ -2994,7 +3004,7 @@ MakefileGenerator::findFileForDep(const QMakeLocalFileName &dep, const QMakeLoca } } { //is it from an EXTRA_COMPILER - const QString dep_basename = dep.local().section(Option::dir_sep, -1); + const QString dep_basename = dep.local().section('/', -1); const ProStringList &quc = project->values("QMAKE_EXTRA_COMPILERS"); for (ProStringList::ConstIterator it = quc.begin(); it != quc.end(); ++it) { const ProString &tmp_out = project->first(ProKey(*it + ".output")); @@ -3004,10 +3014,10 @@ MakefileGenerator::findFileForDep(const QMakeLocalFileName &dep, const QMakeLoca for (ProStringList::ConstIterator it2 = tmp.begin(); it2 != tmp.end(); ++it2) { const ProStringList &inputs = project->values((*it2).toKey()); for (ProStringList::ConstIterator input = inputs.begin(); input != inputs.end(); ++input) { - QString out = Option::fixPathToTargetOS(unescapeFilePath( - replaceExtraCompilerVariables(tmp_out.toQString(), (*input).toQString(), QString()))); + QString out = Option::fixPathToTargetOS( + replaceExtraCompilerVariables(tmp_out.toQString(), (*input).toQString(), QString(), NoShell)); if (out == dep.real() || out.section(Option::dir_sep, -1) == dep_basename) { - ret = QMakeLocalFileName(fileFixify(out, qmake_getpwd(), Option::output_dir)); + ret = QMakeLocalFileName(fileFixify(out, FileFixifyBackwards)); goto found_dep_from_heuristic; } } @@ -3124,7 +3134,7 @@ MakefileGenerator::pkgConfigFileName(bool fixify) if(fixify) { if(QDir::isRelativePath(ret) && !project->isEmpty("DESTDIR")) ret.prepend(project->first("DESTDIR").toQString()); - ret = Option::fixPathToLocalOS(fileFixify(ret, qmake_getpwd(), Option::output_dir)); + ret = fileFixify(ret, FileFixifyBackwards); } return ret; } @@ -3134,7 +3144,7 @@ MakefileGenerator::pkgConfigPrefix() const { if(!project->isEmpty("QMAKE_PKGCONFIG_PREFIX")) return project->first("QMAKE_PKGCONFIG_PREFIX").toQString(); - return QLibraryInfo::rawLocation(QLibraryInfo::PrefixPath, QLibraryInfo::FinalPaths); + return project->propertyValue(ProKey("QT_INSTALL_PREFIX")).toQString(); } QString @@ -3142,7 +3152,7 @@ MakefileGenerator::pkgConfigFixPath(QString path) const { QString prefix = pkgConfigPrefix(); if(path.startsWith(prefix)) - path = path.replace(prefix, "${prefix}"); + path.replace(prefix, "${prefix}"); return path; } @@ -3154,7 +3164,9 @@ MakefileGenerator::writePkgConfigFile() QFile ft(fname); if(!ft.open(QIODevice::WriteOnly)) return; - project->values("ALL_DEPS").append(fileFixify(fname)); + QString ffname(fileFixify(fname)); + project->values("ALL_DEPS").append(ffname); + project->values("QMAKE_DISTCLEAN").append(ffname); QTextStream t(&ft); QString prefix = pkgConfigPrefix(); @@ -3235,9 +3247,9 @@ MakefileGenerator::writePkgConfigFile() } ProString bundle; if (!project->isEmpty("QMAKE_FRAMEWORK_BUNDLE_NAME")) - bundle = unescapeFilePath(project->first("QMAKE_FRAMEWORK_BUNDLE_NAME")); + bundle = project->first("QMAKE_FRAMEWORK_BUNDLE_NAME"); else - bundle = unescapeFilePath(project->first("TARGET")); + bundle = project->first("TARGET"); int suffix = bundle.lastIndexOf(".framework"); if (suffix != -1) bundle = bundle.left(suffix); @@ -3245,11 +3257,11 @@ MakefileGenerator::writePkgConfigFile() } else { if (!project->values("QMAKE_DEFAULT_LIBDIRS").contains(libDir)) t << "-L${libdir} "; - pkgConfiglibName = "-l" + unescapeFilePath(project->first("QMAKE_ORIG_TARGET")); + pkgConfiglibName = "-l" + project->first("QMAKE_ORIG_TARGET"); if (project->isActiveConfig("shared")) pkgConfiglibName += project->first("TARGET_VERSION_EXT").toQString(); } - t << pkgConfiglibName << " \n"; + t << shellQuote(pkgConfiglibName) << " \n"; ProStringList libs; if(!project->isEmpty("QMAKE_INTERNAL_PRL_LIBS")) { @@ -3261,7 +3273,7 @@ MakefileGenerator::writePkgConfigFile() libs << "QMAKE_LFLAGS_THREAD"; //not sure about this one, but what about things like -pthread? t << "Libs.private: "; for (ProStringList::ConstIterator it = libs.begin(); it != libs.end(); ++it) { - t << project->values((*it).toKey()).join(' ') << " "; + t << fixLibFlags((*it).toKey()).join(' ') << ' '; } t << endl; @@ -3299,7 +3311,7 @@ QString MakefileGenerator::installMetaFile(const ProKey &replace_rule, const QSt QString ret; if (project->isEmpty(replace_rule) || project->isActiveConfig("no_sed_meta_install")) { - ret += "-$(INSTALL_FILE) \"" + src + "\" \"" + dst + "\""; + ret += "-$(INSTALL_FILE) " + escapeFilePath(src) + ' ' + escapeFilePath(dst); } else { ret += "-$(SED)"; const ProStringList &replace_rules = project->values(replace_rule); @@ -3313,7 +3325,7 @@ QString MakefileGenerator::installMetaFile(const ProKey &replace_rule, const QSt + "," + windowsifyPath(replace.toQString()) + ",gi"); } } - ret += " \"" + src + "\" >\"" + dst + "\""; + ret += ' ' + escapeFilePath(src) + " > " + escapeFilePath(dst); } return ret; } diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c b/Telegram/_qt_5_5_0_patch/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c similarity index 99% rename from Telegram/_qt_5_4_0_patch/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c rename to Telegram/_qt_5_5_0_patch/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c index 6b36e4fab..96f6e19f6 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c @@ -42,7 +42,7 @@ POSSIBILITY OF SUCH DAMAGE. strings. */ -#ifdef PCRE_HAVE_CONFIG_H +#ifdef HAVE_CONFIG_H #include "config.h" #endif diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/corelib/tools/qunicodetables.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/corelib/tools/qunicodetables.cpp new file mode 100644 index 000000000..76c693360 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/corelib/tools/qunicodetables.cpp @@ -0,0 +1,12111 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* This file is autogenerated from the Unicode 7.0 database. Do not edit */ + +#include "qunicodetables_p.h" + +QT_BEGIN_NAMESPACE + +namespace QUnicodeTables { + +static const unsigned short uc_property_trie[] = { + // 0 - 0x11000 + + 6256, 6288, 6320, 6352, 6384, 6416, 6448, 6480, + 6512, 6544, 6576, 6608, 6640, 6672, 6704, 6736, + 6768, 6800, 6832, 6864, 6896, 6928, 6960, 6992, + 7024, 7056, 7088, 7120, 7152, 7184, 7216, 7248, + 7280, 7312, 7344, 7376, 7408, 7440, 7472, 7504, + 7536, 7568, 7600, 7632, 7664, 7696, 7728, 7760, + 7792, 7824, 7856, 7888, 7920, 7952, 7984, 8016, + 8048, 8080, 8112, 8144, 8176, 8208, 8240, 8272, + 8304, 8336, 8368, 8400, 8400, 8432, 8464, 8496, + 8528, 8560, 8592, 8624, 8656, 8688, 8720, 8752, + 8784, 8816, 8848, 8880, 8912, 8944, 8976, 9008, + 9040, 9072, 9104, 9136, 9168, 9200, 9232, 9264, + 9296, 9328, 9360, 9392, 9424, 9456, 9488, 9520, + 9552, 9584, 9616, 9648, 9680, 9712, 9744, 9776, + 9808, 9840, 9872, 9904, 9936, 9968, 10000, 9904, + 10032, 10064, 10096, 10128, 10160, 10192, 10224, 9904, + + 10256, 10288, 10320, 10352, 10384, 10416, 10448, 10480, + 10512, 10512, 10544, 10576, 10608, 10640, 10672, 10704, + 10736, 10768, 10800, 10768, 10832, 10864, 10896, 10928, + 10960, 10768, 10992, 11024, 11056, 11088, 11088, 11120, + 11152, 11184, 11184, 11184, 11184, 11184, 11184, 11184, + 11184, 11184, 11184, 11184, 11184, 11184, 11184, 11184, + 11184, 11184, 11184, 11216, 11248, 11280, 11280, 11312, + 11344, 11376, 11408, 11440, 11472, 11504, 11536, 11568, + 11600, 11632, 11664, 11696, 11728, 11760, 11792, 11824, + 11856, 11888, 11920, 11952, 11984, 12016, 12048, 12080, + 12112, 12144, 12176, 12208, 12240, 12272, 9904, 9904, + 12304, 12336, 12368, 12400, 12432, 12464, 12496, 12528, + 12560, 12592, 12624, 12656, 9904, 9904, 12688, 12720, + 12752, 12784, 12816, 12848, 12880, 12912, 12944, 12976, + 13008, 13008, 13008, 13008, 13040, 13008, 13008, 13072, + 13104, 13136, 13168, 13200, 13232, 13264, 13296, 13328, + + 13360, 13392, 13424, 13456, 13488, 13520, 13552, 13584, + 13616, 13648, 13680, 13712, 13744, 13776, 13808, 13840, + 13872, 13904, 13936, 13968, 14000, 14032, 14064, 14096, + 14128, 14160, 14192, 14224, 14256, 14288, 14320, 14352, + 14384, 14416, 14448, 14480, 14512, 14544, 14576, 14608, + 14384, 14384, 14384, 14384, 14640, 14672, 14704, 14736, + 14768, 14800, 14384, 14832, 14864, 14896, 14928, 14960, + 14992, 15024, 15056, 15088, 15120, 15152, 15184, 15216, + 15248, 15248, 15248, 15248, 15248, 15248, 15248, 15248, + 15280, 15280, 15280, 15280, 15312, 15344, 15376, 15408, + 15440, 15472, 15280, 15504, 15536, 15568, 15600, 15632, + 15664, 15696, 15728, 15760, 15792, 15824, 15856, 9904, + 15888, 15920, 15952, 15984, 16016, 16016, 16016, 16048, + 16080, 16112, 16144, 16176, 16208, 16240, 16240, 16272, + 16304, 16336, 16368, 9904, 16400, 16432, 16432, 16464, + 16496, 16496, 16496, 16496, 16496, 16496, 16528, 16560, + + 16592, 16624, 16656, 16688, 16720, 16752, 16784, 16816, + 16848, 16880, 16912, 16912, 16944, 16976, 17008, 17040, + 17072, 17104, 17136, 17168, 17104, 17200, 17232, 17264, + 17296, 17296, 17328, 17360, 17392, 17392, 17424, 17456, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17488, 17488, 17488, + 17488, 17488, 17488, 17488, 17488, 17520, 17552, 17552, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17584, 17584, 17584, + 17584, 17584, 17584, 17584, 17584, 17616, 17648, 17680, + + 17712, 17744, 17744, 17744, 17744, 17744, 17744, 17744, + 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744, + 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744, + 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744, + 17744, 17744, 17744, 17744, 17776, 17808, 17840, 17872, + 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904, + 17936, 17968, 18000, 18032, 18064, 18096, 18096, 18128, + 18160, 18192, 18224, 18256, 18288, 18320, 9904, 18352, + 18384, 18416, 18448, 18480, 18512, 18544, 18576, 18608, + 18640, 18672, 18704, 18736, 18768, 18800, 18832, 18864, + 18896, 18928, 18960, 18992, 19024, 19056, 19088, 19120, + 19152, 19184, 19216, 19248, 9904, 9904, 19280, 19312, + 19344, 19376, 19408, 19440, 19472, 19504, 19536, 19344, + 19376, 19408, 19440, 19472, 19504, 19536, 19344, 19376, + 19408, 19440, 19472, 19504, 19536, 19344, 19376, 19408, + 19440, 19472, 19504, 19536, 19344, 19376, 19408, 19440, + + 19472, 19504, 19536, 19344, 19376, 19408, 19440, 19472, + 19504, 19536, 19344, 19376, 19408, 19440, 19472, 19504, + 19536, 19344, 19376, 19408, 19440, 19472, 19504, 19536, + 19344, 19376, 19408, 19440, 19472, 19504, 19536, 19344, + 19376, 19408, 19440, 19472, 19504, 19536, 19344, 19376, + 19408, 19440, 19472, 19504, 19536, 19344, 19376, 19408, + 19440, 19472, 19504, 19536, 19344, 19376, 19408, 19440, + 19472, 19504, 19536, 19344, 19376, 19408, 19440, 19472, + 19504, 19536, 19344, 19376, 19408, 19440, 19472, 19504, + 19536, 19344, 19376, 19408, 19440, 19472, 19504, 19536, + 19344, 19376, 19408, 19440, 19472, 19504, 19536, 19344, + 19376, 19408, 19440, 19472, 19504, 19536, 19344, 19376, + 19408, 19440, 19472, 19504, 19536, 19344, 19376, 19408, + 19440, 19472, 19504, 19536, 19344, 19376, 19408, 19440, + 19472, 19504, 19536, 19344, 19376, 19408, 19440, 19472, + 19504, 19536, 19344, 19376, 19408, 19440, 19472, 19504, + + 19536, 19344, 19376, 19408, 19440, 19472, 19504, 19536, + 19344, 19376, 19408, 19440, 19472, 19504, 19536, 19344, + 19376, 19408, 19440, 19472, 19504, 19536, 19344, 19376, + 19408, 19440, 19472, 19504, 19536, 19344, 19376, 19408, + 19440, 19472, 19504, 19536, 19344, 19376, 19408, 19440, + 19472, 19504, 19536, 19344, 19376, 19408, 19440, 19472, + 19504, 19536, 19344, 19376, 19408, 19440, 19472, 19504, + 19536, 19344, 19376, 19408, 19440, 19472, 19504, 19536, + 19344, 19376, 19408, 19440, 19472, 19504, 19536, 19344, + 19376, 19408, 19440, 19472, 19504, 19536, 19344, 19376, + 19408, 19440, 19472, 19504, 19536, 19344, 19376, 19408, + 19440, 19472, 19504, 19536, 19344, 19376, 19408, 19440, + 19472, 19504, 19536, 19344, 19376, 19408, 19440, 19472, + 19504, 19536, 19344, 19376, 19408, 19440, 19472, 19504, + 19536, 19344, 19376, 19408, 19440, 19472, 19504, 19536, + 19344, 19376, 19408, 19440, 19472, 19504, 19536, 19344, + + 19376, 19408, 19440, 19472, 19504, 19536, 19344, 19376, + 19408, 19440, 19472, 19504, 19536, 19344, 19376, 19408, + 19440, 19472, 19504, 19536, 19344, 19376, 19408, 19440, + 19472, 19504, 19536, 19344, 19376, 19408, 19440, 19472, + 19504, 19536, 19344, 19376, 19408, 19440, 19472, 19504, + 19536, 19344, 19376, 19408, 19440, 19472, 19504, 19536, + 19344, 19376, 19408, 19440, 19472, 19504, 19536, 19344, + 19376, 19408, 19440, 19472, 19504, 19568, 19600, 19632, + 19664, 19664, 19664, 19664, 19664, 19664, 19664, 19664, + 19664, 19664, 19664, 19664, 19664, 19664, 19664, 19664, + 19664, 19664, 19664, 19664, 19664, 19664, 19664, 19664, + 19664, 19664, 19664, 19664, 19664, 19664, 19664, 19664, + 19664, 19664, 19664, 19664, 19664, 19664, 19664, 19664, + 19664, 19664, 19664, 19664, 19664, 19664, 19664, 19664, + 19664, 19664, 19664, 19664, 19664, 19664, 19664, 19664, + 19664, 19664, 19664, 19664, 19664, 19664, 19664, 19664, + + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19696, 19696, 19696, 19696, 19696, 19696, 19696, 19696, + 19728, 19728, 19728, 19728, 19728, 19728, 19728, 19728, + 19760, 19792, 19824, 19856, 19888, 19888, 19920, 17680, + 19952, 19984, 20016, 20048, 20048, 20080, 20112, 20048, + 20048, 20048, 20048, 20048, 20048, 20048, 20048, 20048, + 20048, 20144, 20176, 20048, 20208, 20048, 20240, 20272, + 20304, 20336, 20368, 20400, 20048, 20048, 20048, 20432, + 20464, 20496, 20528, 20560, 20592, 20624, 20656, 20688, + + 20720, 20752, 20784, 9904, 20816, 20816, 20816, 20848, + 20880, 20912, 20944, 20976, 21008, 21040, 21072, 21104, + 9904, 9904, 9904, 9904, 21136, 21168, 21200, 21232, + 21264, 21296, 21328, 21360, 21392, 21424, 21456, 9904, + 21488, 21520, 21552, 21584, 21616, 21648, 9904, 9904, + 21680, 21712, 21744, 21776, 9904, 9904, 9904, 9904, + 21808, 21808, 21808, 21808, 21808, 21808, 21808, 21808, + 21808, 21840, 21872, 21904, 9904, 9904, 9904, 9904, + 21936, 21968, 22000, 22032, 22064, 22096, 8400, 8400, + 22128, 22160, 8400, 8400, 22192, 22224, 8400, 8400, + 22256, 22288, 22320, 22352, 22384, 8400, 22416, 22448, + 22480, 22512, 22544, 22576, 22608, 22640, 8400, 8400, + 22672, 22672, 22704, 8400, 8400, 8400, 8400, 8400, + 8400, 8400, 8400, 8400, 8400, 8400, 8400, 8400, + 8400, 8400, 8400, 22736, 8400, 8400, 8400, 8400, + 8400, 8400, 8400, 8400, 8400, 8400, 8400, 8400, + + // 0x11000 - 0x110000 + + 22768, 23024, 23280, 23536, 23792, 24048, 24304, 24560, + 24816, 24560, 25072, 24560, 24560, 24560, 24560, 24560, + 25328, 25328, 25328, 25584, 25840, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 26096, 26096, 26352, 26608, 26864, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 27120, 27120, 27376, 27632, 24560, 24560, 24560, 27888, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 28144, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 28400, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 28656, 28912, 29168, 29424, 29680, 29936, 30192, 30448, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 30704, 30960, 30960, 30960, 30960, 30960, 31216, 30960, + 31472, 31728, 31984, 32240, 32496, 32752, 33008, 33264, + 33520, 24560, 24560, 24560, 24560, 24560, 24560, 33776, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34032, 34032, + 34032, 34032, 34032, 34032, 34032, 34032, 34288, 34544, + 34544, 34544, 34544, 34544, 34544, 34544, 34544, 34544, + 34544, 34544, 34544, 34544, 34544, 34544, 34544, 34800, + 35056, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35568, 35568, 35824, 35312, 35312, 35312, 35312, 36080, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 35312, + 35312, 35312, 35312, 35312, 35312, 35312, 35312, 36080, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776, + 36336, 36592, 36848, 36848, 36848, 36848, 36848, 36848, + 36848, 36848, 36848, 36848, 36848, 36848, 36848, 36848, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 24560, + 24560, 24560, 24560, 24560, 24560, 24560, 24560, 33776, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37360, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37104, + 37104, 37104, 37104, 37104, 37104, 37104, 37104, 37360, + + + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 4, 5, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6, 6, 6, 7, + + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 14, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 9, + + 14, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 39, 40, 41, 42, 43, + + 42, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 39, 45, 46, 36, 0, + + 0, 0, 0, 0, 0, 47, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + + 48, 49, 50, 12, 12, 12, 51, 14, + 52, 51, 53, 54, 36, 55, 51, 52, + 56, 57, 58, 59, 60, 61, 14, 62, + 52, 63, 53, 64, 65, 65, 65, 49, + + 66, 66, 66, 66, 66, 66, 38, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 38, 66, 66, 66, 66, 66, 66, 36, + 38, 66, 66, 66, 66, 66, 38, 67, + + 68, 68, 68, 68, 68, 68, 44, 68, + 68, 68, 68, 68, 68, 68, 68, 68, + 44, 68, 68, 68, 68, 68, 68, 36, + 44, 68, 68, 68, 68, 68, 44, 69, + + 70, 71, 70, 71, 70, 71, 70, 71, + 70, 71, 70, 71, 70, 71, 70, 71, + 72, 73, 70, 71, 70, 71, 70, 71, + 70, 71, 70, 71, 70, 71, 70, 71, + + 70, 71, 70, 71, 70, 71, 72, 73, + 70, 71, 70, 71, 70, 71, 70, 71, + 74, 75, 76, 77, 70, 71, 70, 71, + 78, 70, 71, 70, 71, 70, 71, 76, + + 77, 72, 73, 70, 71, 70, 71, 70, + 71, 79, 72, 73, 70, 71, 70, 71, + 70, 71, 72, 73, 70, 71, 70, 71, + 70, 71, 70, 71, 70, 71, 70, 71, + + 70, 71, 70, 71, 70, 71, 72, 73, + 70, 71, 70, 71, 70, 71, 70, 71, + 70, 71, 70, 71, 70, 71, 70, 71, + 80, 70, 71, 70, 71, 70, 71, 81, + + 82, 83, 72, 73, 72, 73, 84, 72, + 73, 85, 85, 72, 73, 78, 86, 87, + 88, 72, 73, 85, 89, 90, 91, 92, + 72, 73, 93, 78, 91, 94, 95, 96, + + 70, 71, 72, 73, 72, 73, 97, 72, + 73, 97, 78, 78, 72, 73, 97, 70, + 71, 98, 98, 72, 73, 72, 73, 99, + 72, 73, 78, 100, 72, 73, 78, 101, + + 100, 100, 100, 100, 102, 103, 104, 102, + 103, 104, 102, 103, 104, 70, 71, 70, + 71, 70, 71, 70, 71, 70, 71, 70, + 71, 70, 71, 70, 71, 105, 70, 71, + + 70, 71, 70, 71, 72, 73, 70, 71, + 70, 71, 70, 71, 70, 71, 70, 71, + 106, 102, 103, 104, 70, 71, 107, 108, + 109, 110, 70, 71, 70, 71, 70, 71, + + 70, 71, 70, 71, 70, 71, 70, 71, + 70, 71, 70, 71, 70, 71, 70, 71, + 70, 71, 70, 71, 70, 71, 70, 71, + 109, 110, 109, 110, 111, 112, 109, 110, + + 113, 114, 111, 112, 111, 112, 109, 110, + 109, 110, 109, 110, 109, 110, 109, 110, + 109, 110, 109, 110, 114, 114, 114, 115, + 115, 115, 116, 117, 118, 119, 120, 121, + + 122, 117, 123, 124, 125, 126, 127, 123, + 127, 123, 127, 123, 127, 123, 127, 123, + 128, 129, 130, 131, 132, 78, 133, 133, + 78, 134, 78, 135, 136, 78, 78, 78, + + 133, 137, 78, 138, 78, 139, 140, 78, + 141, 142, 78, 143, 144, 78, 78, 142, + 78, 145, 146, 78, 78, 147, 78, 78, + 78, 78, 78, 78, 78, 148, 78, 78, + + 149, 78, 78, 149, 78, 78, 78, 150, + 149, 151, 152, 152, 153, 78, 78, 78, + 78, 78, 154, 78, 100, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 155, 78, + + 78, 78, 78, 78, 78, 78, 78, 78, + 78, 156, 156, 156, 156, 156, 114, 114, + 157, 157, 157, 157, 157, 157, 157, 157, + 157, 158, 158, 159, 159, 159, 159, 159, + + 160, 160, 42, 42, 42, 42, 158, 158, + 161, 158, 158, 158, 161, 158, 158, 158, + 159, 159, 42, 42, 42, 42, 42, 162, + 52, 52, 52, 52, 52, 52, 42, 163, + + 157, 157, 157, 157, 157, 42, 42, 42, + 42, 42, 164, 164, 165, 166, 167, 168, + 168, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, + + 169, 169, 169, 169, 169, 170, 169, 169, + 169, 169, 169, 169, 169, 170, 170, 169, + 170, 169, 170, 169, 169, 171, 172, 172, + 172, 172, 171, 173, 172, 172, 172, 172, + + 172, 174, 174, 175, 175, 175, 175, 176, + 176, 172, 172, 172, 172, 175, 175, 172, + 175, 175, 172, 172, 177, 177, 177, 177, + 178, 172, 172, 172, 172, 170, 170, 170, + + 179, 179, 169, 179, 179, 180, 181, 182, + 182, 182, 181, 181, 181, 182, 182, 183, + 184, 184, 184, 185, 185, 185, 185, 184, + 186, 187, 187, 188, 189, 190, 190, 191, + + 192, 192, 193, 194, 194, 194, 194, 194, + 194, 194, 194, 194, 194, 194, 194, 194, + 195, 196, 195, 196, 197, 198, 195, 196, + 199, 199, 200, 201, 201, 201, 202, 203, + + 199, 199, 199, 199, 204, 205, 206, 207, + 208, 208, 208, 199, 209, 199, 210, 210, + 211, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, + + 212, 212, 199, 212, 212, 212, 212, 212, + 212, 212, 213, 213, 214, 215, 215, 215, + 216, 217, 217, 217, 217, 217, 217, 217, + 217, 217, 217, 217, 217, 217, 217, 217, + + 217, 217, 218, 217, 217, 217, 217, 217, + 217, 217, 219, 219, 220, 221, 221, 222, + 223, 224, 225, 226, 226, 227, 228, 229, + 230, 231, 232, 233, 232, 233, 232, 233, + + 232, 233, 234, 235, 234, 235, 234, 235, + 234, 235, 234, 235, 234, 235, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 243, 244, 246, 247, 247, 247, + + 248, 249, 250, 249, 250, 250, 250, 249, + 250, 250, 250, 250, 249, 248, 249, 250, + 251, 251, 251, 251, 251, 251, 251, 251, + 251, 252, 251, 251, 251, 251, 251, 251, + + 251, 251, 251, 251, 251, 251, 251, 251, + 251, 251, 251, 251, 251, 251, 251, 251, + 253, 253, 253, 253, 253, 253, 253, 253, + 253, 254, 253, 253, 253, 253, 253, 253, + + 253, 253, 253, 253, 253, 253, 253, 253, + 253, 253, 253, 253, 253, 253, 253, 253, + 255, 256, 257, 256, 257, 257, 257, 256, + 257, 257, 257, 257, 256, 255, 256, 257, + + 258, 259, 258, 259, 258, 259, 258, 259, + 258, 259, 258, 259, 258, 259, 258, 259, + 258, 259, 258, 259, 258, 259, 260, 261, + 258, 259, 258, 259, 258, 259, 258, 259, + + 258, 259, 262, 263, 263, 170, 170, 264, + 265, 265, 266, 267, 268, 269, 268, 269, + 258, 259, 258, 259, 258, 259, 258, 259, + 258, 259, 258, 259, 258, 259, 258, 259, + + 258, 259, 258, 259, 258, 259, 258, 259, + 258, 259, 258, 259, 258, 259, 258, 259, + 258, 259, 258, 259, 258, 259, 258, 259, + 258, 259, 258, 259, 258, 259, 258, 259, + + 270, 260, 261, 258, 259, 266, 267, 258, + 259, 266, 267, 258, 259, 266, 267, 271, + 260, 261, 260, 261, 258, 259, 260, 261, + 258, 259, 260, 261, 260, 261, 260, 261, + + 258, 259, 260, 261, 260, 261, 260, 261, + 258, 259, 260, 261, 272, 273, 260, 261, + 260, 261, 260, 261, 260, 261, 274, 275, + 260, 261, 276, 277, 276, 277, 276, 277, + + 266, 267, 266, 267, 266, 267, 266, 267, + 266, 267, 266, 267, 266, 267, 266, 267, + 276, 277, 276, 277, 278, 279, 278, 279, + 278, 279, 278, 279, 278, 279, 278, 279, + + 278, 279, 278, 279, 280, 281, 282, 283, + 284, 285, 284, 285, 284, 285, 284, 285, + 199, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, + + 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 199, + 199, 287, 288, 288, 288, 289, 288, 288, + + 199, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, + + 290, 290, 290, 290, 290, 290, 290, 291, + 199, 292, 293, 199, 199, 294, 294, 295, + 296, 297, 298, 298, 298, 298, 297, 298, + 298, 298, 299, 297, 298, 298, 298, 298, + + 298, 298, 300, 297, 297, 297, 297, 297, + 298, 298, 297, 298, 298, 299, 301, 298, + 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, + + 318, 319, 320, 318, 298, 300, 321, 322, + 296, 296, 296, 296, 296, 296, 296, 296, + 323, 323, 323, 323, 323, 323, 323, 323, + 323, 323, 323, 323, 323, 323, 323, 323, + + 323, 323, 323, 323, 323, 323, 323, 323, + 323, 323, 323, 296, 296, 296, 296, 296, + 323, 323, 323, 324, 325, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + + 326, 326, 326, 326, 327, 328, 329, 329, + 330, 331, 331, 332, 19, 333, 334, 334, + 335, 335, 335, 335, 335, 335, 336, 336, + 337, 338, 339, 340, 341, 342, 343, 344, + + 345, 346, 347, 347, 347, 347, 348, 349, + 350, 349, 350, 350, 350, 350, 350, 349, + 349, 349, 349, 350, 350, 350, 350, 350, + 350, 350, 350, 351, 351, 351, 351, 351, + + 352, 350, 350, 350, 350, 350, 350, 350, + 349, 350, 350, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 361, 362, 363, 335, + 335, 364, 364, 364, 365, 364, 364, 366, + + 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, 381, + 382, 349, 349, 349, 346, 383, 383, 383, + 384, 350, 350, 350, 350, 350, 350, 350, + + 350, 350, 350, 350, 350, 350, 350, 350, + 349, 349, 349, 349, 349, 349, 349, 349, + 349, 349, 349, 349, 349, 349, 349, 349, + 349, 349, 350, 350, 350, 350, 350, 350, + + 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, + 385, 385, 350, 350, 350, 350, 350, 385, + + 347, 350, 348, 349, 349, 349, 349, 349, + 349, 349, 349, 349, 350, 349, 350, 386, + 350, 350, 349, 347, 387, 349, 388, 388, + 388, 388, 388, 388, 388, 389, 390, 388, + + 388, 388, 388, 391, 388, 392, 392, 388, + 388, 390, 391, 388, 388, 391, 393, 393, + 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 385, 385, 385, 404, 404, 405, + + 406, 406, 406, 407, 407, 407, 407, 407, + 407, 407, 407, 407, 407, 407, 342, 408, + 409, 410, 411, 411, 411, 409, 409, 409, + 409, 409, 411, 411, 411, 411, 409, 411, + + 411, 411, 411, 411, 411, 411, 411, 411, + 409, 411, 409, 411, 409, 412, 412, 413, + 414, 415, 414, 414, 415, 414, 414, 415, + 415, 415, 414, 415, 415, 414, 415, 414, + + 414, 414, 415, 414, 415, 414, 415, 414, + 415, 414, 414, 342, 342, 413, 412, 412, + 416, 416, 416, 416, 416, 416, 416, 416, + 416, 417, 417, 417, 416, 416, 416, 416, + + 416, 416, 416, 416, 416, 416, 416, 416, + 416, 416, 416, 417, 417, 416, 351, 351, + 351, 418, 351, 418, 418, 351, 351, 351, + 418, 418, 351, 351, 351, 351, 351, 351, + + 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, + + 419, 419, 419, 419, 419, 419, 420, 420, + 420, 420, 420, 420, 420, 420, 420, 420, + 420, 421, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + + 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 432, 432, 432, 432, 432, + 432, 432, 432, 432, 432, 432, 432, 432, + 432, 432, 432, 432, 432, 432, 432, 432, + + 432, 432, 432, 432, 432, 432, 432, 432, + 432, 432, 432, 433, 433, 433, 433, 433, + 433, 433, 434, 433, 435, 435, 436, 437, + 438, 439, 440, 296, 296, 296, 296, 296, + + 441, 441, 441, 441, 441, 441, 441, 441, + 441, 441, 441, 441, 441, 441, 441, 441, + 441, 441, 441, 441, 441, 441, 442, 442, + 442, 442, 443, 442, 442, 442, 442, 442, + + 442, 442, 442, 442, 443, 442, 442, 442, + 443, 442, 442, 442, 442, 442, 296, 296, + 444, 444, 444, 444, 444, 444, 444, 444, + 444, 444, 444, 444, 444, 444, 444, 296, + + 445, 446, 446, 446, 446, 446, 445, 446, + 446, 445, 446, 446, 446, 446, 446, 445, + 446, 446, 446, 446, 445, 446, 447, 447, + 447, 448, 448, 448, 296, 296, 449, 296, + + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + + 450, 451, 450, 450, 450, 450, 450, 450, + 450, 450, 452, 452, 452, 453, 454, 451, + 451, 454, 454, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + + 342, 342, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + + 342, 342, 342, 342, 455, 455, 456, 455, + 455, 456, 455, 455, 455, 456, 456, 456, + 457, 458, 459, 455, 455, 455, 456, 455, + 455, 456, 456, 455, 455, 455, 455, 460, + + 461, 462, 462, 463, 464, 465, 465, 465, + 465, 465, 465, 465, 465, 465, 465, 465, + 465, 465, 465, 465, 465, 465, 465, 465, + 465, 465, 465, 465, 465, 465, 465, 465, + + 465, 465, 465, 465, 465, 465, 465, 465, + 465, 466, 465, 465, 465, 465, 465, 465, + 465, 466, 465, 465, 466, 465, 465, 465, + 465, 465, 467, 468, 469, 465, 463, 463, + + 463, 462, 462, 462, 462, 462, 462, 462, + 462, 463, 463, 463, 463, 470, 471, 468, + 465, 170, 172, 472, 472, 461, 467, 467, + 473, 473, 473, 473, 473, 473, 473, 473, + + 465, 465, 462, 462, 474, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 488, 488, 488, 488, + 489, 490, 490, 491, 491, 492, 491, 491, + + 493, 494, 495, 495, 199, 496, 496, 496, + 496, 496, 496, 496, 496, 199, 199, 496, + 496, 199, 199, 496, 496, 496, 496, 496, + 496, 496, 496, 496, 496, 496, 496, 496, + + 496, 496, 496, 496, 496, 496, 496, 496, + 496, 199, 496, 496, 496, 496, 496, 496, + 496, 199, 496, 199, 199, 199, 496, 496, + 496, 496, 199, 199, 497, 498, 499, 495, + + 495, 494, 494, 494, 494, 199, 199, 495, + 495, 199, 199, 500, 500, 501, 502, 199, + 199, 199, 199, 199, 199, 199, 199, 499, + 199, 199, 199, 199, 503, 503, 199, 503, + + 496, 496, 494, 494, 199, 199, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, + 496, 496, 514, 514, 515, 515, 515, 515, + 515, 516, 517, 518, 199, 199, 199, 199, + + 199, 519, 520, 521, 199, 522, 522, 522, + 522, 522, 522, 199, 199, 199, 199, 522, + 522, 199, 199, 522, 522, 522, 522, 522, + 522, 522, 522, 522, 522, 522, 522, 522, + + 522, 522, 522, 522, 522, 522, 522, 522, + 522, 199, 522, 522, 522, 522, 522, 522, + 522, 199, 522, 523, 199, 522, 523, 199, + 522, 522, 199, 199, 524, 199, 525, 525, + + 525, 520, 520, 199, 199, 199, 199, 520, + 520, 199, 199, 520, 520, 526, 199, 199, + 199, 527, 199, 199, 199, 199, 199, 199, + 199, 523, 523, 523, 522, 199, 523, 199, + + 199, 199, 199, 199, 199, 199, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, + 520, 520, 522, 522, 522, 527, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 538, 538, 539, 199, 540, 540, 540, + 540, 540, 540, 540, 541, 540, 199, 540, + 540, 540, 199, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, + + 540, 540, 540, 540, 540, 540, 540, 540, + 540, 199, 540, 540, 540, 540, 540, 540, + 540, 199, 540, 540, 199, 540, 540, 540, + 540, 540, 199, 199, 542, 540, 539, 539, + + 539, 538, 538, 538, 538, 538, 199, 538, + 538, 539, 199, 539, 539, 543, 199, 199, + 540, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 540, 541, 544, 544, 199, 199, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, + 555, 556, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 557, 558, 558, 199, 559, 559, 559, + 559, 559, 559, 559, 559, 199, 199, 559, + 559, 199, 199, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, + + 559, 559, 559, 559, 559, 559, 559, 559, + 559, 199, 559, 559, 559, 559, 559, 559, + 559, 199, 559, 559, 199, 560, 559, 559, + 559, 559, 199, 199, 561, 559, 562, 557, + + 558, 557, 557, 557, 563, 199, 199, 558, + 564, 199, 199, 564, 564, 565, 199, 199, + 199, 199, 199, 199, 199, 199, 566, 562, + 199, 199, 199, 199, 567, 567, 199, 559, + + 559, 559, 563, 563, 199, 199, 568, 569, + 570, 571, 572, 573, 574, 575, 576, 577, + 578, 560, 579, 579, 579, 579, 579, 579, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 199, 580, 581, 199, 581, 581, 581, + 581, 581, 581, 199, 199, 199, 581, 581, + 581, 199, 581, 581, 582, 581, 199, 199, + 199, 581, 581, 199, 581, 199, 581, 581, + + 199, 199, 199, 581, 581, 199, 199, 199, + 581, 581, 581, 199, 199, 199, 581, 581, + 581, 581, 581, 581, 581, 581, 583, 581, + 581, 581, 199, 199, 199, 199, 584, 585, + + 580, 585, 585, 199, 199, 199, 585, 585, + 585, 199, 586, 586, 586, 587, 199, 199, + 588, 199, 199, 199, 199, 199, 199, 584, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 199, 199, 199, 199, 199, 589, 590, + 591, 592, 593, 594, 595, 596, 597, 598, + 599, 599, 599, 600, 600, 600, 600, 600, + 600, 601, 600, 199, 199, 199, 199, 199, + + 602, 603, 603, 603, 199, 604, 604, 604, + 604, 604, 604, 604, 604, 199, 604, 604, + 604, 199, 604, 604, 604, 604, 604, 604, + 604, 604, 604, 604, 604, 604, 604, 604, + + 604, 604, 604, 604, 604, 604, 604, 604, + 604, 199, 604, 604, 604, 604, 604, 604, + 604, 604, 604, 604, 605, 604, 604, 604, + 604, 604, 199, 199, 199, 606, 607, 607, + + 607, 603, 603, 603, 603, 199, 607, 607, + 608, 199, 607, 607, 607, 609, 199, 199, + 199, 199, 199, 199, 199, 610, 611, 199, + 606, 606, 199, 199, 199, 199, 199, 199, + + 604, 604, 612, 612, 199, 199, 613, 614, + 615, 616, 617, 618, 619, 620, 621, 622, + 199, 199, 199, 199, 199, 199, 199, 199, + 623, 623, 623, 623, 623, 623, 623, 624, + + 199, 625, 626, 626, 199, 627, 627, 627, + 627, 627, 627, 627, 627, 199, 627, 627, + 627, 199, 627, 627, 627, 627, 627, 627, + 627, 627, 627, 627, 627, 627, 627, 627, + + 627, 627, 627, 627, 627, 627, 627, 627, + 627, 199, 627, 627, 627, 627, 627, 627, + 627, 627, 627, 627, 199, 627, 627, 627, + 627, 627, 199, 199, 628, 629, 626, 630, + + 631, 626, 632, 626, 626, 199, 630, 631, + 631, 199, 631, 631, 633, 634, 199, 199, + 199, 199, 199, 199, 199, 632, 632, 199, + 199, 199, 199, 199, 199, 199, 627, 199, + + 627, 627, 635, 635, 199, 199, 636, 637, + 638, 639, 640, 641, 642, 643, 644, 645, + 199, 646, 646, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 647, 648, 648, 199, 649, 649, 649, + 649, 649, 649, 649, 649, 199, 649, 649, + 649, 199, 649, 649, 649, 649, 649, 649, + 649, 649, 649, 649, 649, 649, 649, 649, + + 649, 649, 649, 649, 649, 649, 649, 649, + 649, 650, 649, 649, 649, 649, 649, 649, + 649, 649, 649, 649, 649, 649, 649, 649, + 649, 649, 650, 199, 199, 651, 652, 648, + + 648, 653, 653, 653, 654, 199, 648, 648, + 648, 199, 655, 655, 655, 656, 650, 199, + 199, 199, 199, 199, 199, 199, 199, 652, + 199, 199, 199, 199, 199, 199, 199, 199, + + 649, 649, 654, 654, 199, 199, 657, 658, + 659, 660, 661, 662, 663, 664, 665, 666, + 667, 667, 667, 667, 667, 667, 199, 199, + 199, 668, 651, 651, 651, 651, 651, 651, + + 199, 199, 669, 669, 199, 670, 670, 670, + 670, 670, 670, 670, 670, 670, 670, 670, + 670, 670, 670, 670, 670, 670, 670, 199, + 199, 199, 670, 670, 670, 670, 670, 670, + + 670, 670, 670, 670, 670, 670, 670, 670, + 670, 670, 670, 670, 670, 670, 670, 670, + 670, 670, 199, 670, 670, 670, 670, 670, + 670, 670, 670, 670, 199, 670, 199, 199, + + 670, 670, 670, 670, 670, 670, 670, 199, + 199, 199, 671, 199, 199, 199, 199, 672, + 669, 669, 673, 673, 673, 199, 673, 199, + 669, 669, 674, 669, 674, 674, 674, 672, + + 199, 199, 199, 199, 199, 199, 675, 676, + 677, 678, 679, 680, 681, 682, 683, 684, + 199, 199, 669, 669, 685, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 686, 686, 686, 686, 686, 686, 686, + 686, 686, 686, 686, 686, 686, 686, 686, + 686, 686, 686, 686, 686, 686, 686, 686, + 686, 686, 686, 686, 686, 686, 686, 686, + + 686, 686, 686, 686, 686, 686, 686, 686, + 686, 686, 686, 686, 686, 686, 686, 686, + 686, 687, 686, 688, 687, 687, 687, 687, + 689, 689, 690, 199, 199, 199, 199, 12, + + 686, 686, 686, 686, 686, 686, 691, 687, + 692, 692, 692, 692, 687, 687, 687, 693, + 694, 695, 696, 697, 698, 699, 700, 701, + 702, 703, 704, 704, 199, 199, 199, 199, + + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 705, 705, 199, 705, 199, 199, 705, + 705, 199, 705, 199, 199, 705, 199, 199, + 199, 199, 199, 199, 705, 705, 705, 705, + 199, 705, 705, 705, 705, 705, 705, 705, + + 199, 705, 705, 705, 199, 705, 199, 705, + 199, 199, 705, 705, 199, 705, 705, 705, + 705, 706, 705, 707, 706, 706, 706, 706, + 708, 708, 199, 706, 706, 705, 199, 199, + + 705, 705, 705, 705, 705, 199, 709, 199, + 710, 710, 710, 710, 706, 706, 199, 199, + 711, 712, 713, 714, 715, 716, 717, 718, + 719, 720, 199, 199, 721, 721, 722, 722, + + 723, 724, 724, 724, 725, 726, 725, 725, + 727, 725, 725, 728, 729, 730, 730, 730, + 730, 730, 727, 731, 730, 731, 731, 731, + 732, 732, 731, 731, 731, 731, 731, 731, + + 733, 734, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 743, 743, 743, 743, 743, + 743, 743, 743, 743, 744, 732, 731, 732, + 731, 745, 746, 747, 746, 747, 748, 748, + + 723, 723, 723, 749, 723, 723, 723, 723, + 199, 723, 723, 723, 723, 749, 723, 723, + 723, 723, 749, 723, 723, 723, 723, 749, + 723, 723, 723, 723, 749, 723, 723, 723, + + 723, 723, 723, 723, 723, 723, 723, 723, + 723, 749, 750, 751, 751, 199, 199, 199, + 199, 752, 753, 754, 755, 754, 754, 756, + 754, 756, 753, 753, 753, 753, 757, 758, + + 753, 754, 759, 759, 760, 728, 759, 759, + 723, 723, 723, 723, 761, 762, 762, 762, + 757, 757, 757, 754, 757, 757, 763, 757, + 199, 757, 757, 757, 757, 754, 757, 757, + + 757, 757, 754, 757, 757, 757, 757, 754, + 757, 757, 757, 757, 754, 757, 763, 763, + 763, 757, 757, 757, 757, 757, 757, 757, + 763, 754, 763, 763, 763, 199, 764, 764, + + 765, 765, 765, 765, 765, 765, 766, 765, + 765, 765, 765, 765, 765, 199, 767, 765, + 768, 768, 769, 770, 771, 772, 772, 772, + 772, 773, 773, 199, 199, 199, 199, 199, + + 774, 774, 774, 774, 774, 774, 774, 774, + 774, 774, 774, 774, 774, 774, 774, 774, + 774, 774, 774, 774, 774, 774, 774, 774, + 774, 774, 774, 774, 774, 774, 774, 774, + + 774, 774, 775, 774, 774, 774, 776, 774, + 775, 774, 774, 777, 778, 779, 780, 779, + 779, 781, 779, 782, 782, 782, 779, 783, + 778, 784, 785, 786, 786, 782, 782, 775, + + 787, 788, 789, 790, 791, 792, 793, 794, + 795, 796, 797, 797, 798, 798, 798, 798, + 774, 774, 774, 774, 774, 774, 781, 781, + 779, 779, 775, 775, 775, 775, 782, 782, + + 782, 775, 777, 777, 777, 775, 775, 777, + 777, 777, 777, 777, 777, 777, 775, 775, + 775, 782, 782, 782, 782, 775, 775, 775, + 775, 775, 775, 775, 775, 775, 775, 775, + + 775, 775, 782, 777, 786, 782, 782, 777, + 777, 777, 777, 777, 777, 799, 775, 777, + 800, 801, 802, 803, 804, 805, 806, 807, + 808, 809, 810, 810, 810, 811, 812, 812, + + 813, 813, 813, 813, 813, 813, 813, 813, + 813, 813, 813, 813, 813, 813, 813, 813, + 813, 813, 813, 813, 813, 813, 813, 813, + 813, 813, 813, 813, 813, 813, 813, 813, + + 813, 813, 813, 813, 813, 813, 199, 814, + 199, 199, 199, 199, 199, 814, 199, 199, + 815, 815, 815, 815, 815, 815, 815, 815, + 815, 815, 815, 815, 815, 815, 815, 815, + + 815, 815, 815, 815, 815, 815, 815, 815, + 815, 815, 815, 815, 815, 815, 815, 815, + 815, 815, 815, 815, 815, 815, 815, 816, + 816, 817, 817, 818, 819, 820, 820, 820, + + 821, 821, 821, 821, 821, 821, 821, 821, + 821, 821, 821, 821, 821, 821, 821, 821, + 821, 821, 821, 821, 821, 821, 821, 821, + 821, 821, 821, 821, 821, 821, 821, 821, + + 821, 821, 821, 821, 821, 821, 821, 821, + 821, 821, 821, 821, 821, 821, 821, 821, + 821, 821, 821, 821, 821, 821, 821, 821, + 821, 821, 822, 822, 822, 822, 822, 821, + + 823, 824, 824, 824, 824, 824, 824, 824, + 824, 824, 824, 824, 824, 824, 824, 824, + 824, 824, 824, 824, 824, 824, 823, 823, + 823, 823, 823, 823, 823, 823, 823, 823, + + 823, 823, 823, 823, 823, 823, 823, 823, + 823, 823, 823, 823, 823, 823, 823, 823, + 823, 823, 823, 823, 823, 823, 823, 823, + 823, 823, 823, 823, 823, 823, 823, 823, + + 823, 823, 823, 825, 825, 825, 825, 825, + 826, 826, 826, 826, 826, 826, 826, 826, + 826, 826, 826, 826, 826, 826, 826, 826, + 826, 826, 826, 826, 826, 826, 826, 826, + + 826, 826, 826, 827, 827, 827, 827, 827, + 827, 827, 827, 827, 827, 827, 827, 827, + 827, 827, 827, 827, 827, 827, 827, 827, + 827, 827, 827, 827, 827, 827, 827, 827, + + 827, 827, 827, 827, 827, 827, 827, 827, + 827, 827, 827, 827, 827, 827, 827, 827, + 827, 827, 827, 827, 827, 827, 827, 827, + 827, 827, 828, 828, 828, 828, 828, 828, + + 829, 829, 829, 829, 829, 829, 829, 830, + 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 829, + + 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 829, + + 829, 829, 829, 829, 829, 829, 829, 830, + 829, 199, 829, 829, 829, 829, 199, 199, + 829, 829, 829, 829, 829, 829, 829, 199, + 829, 199, 829, 829, 829, 829, 199, 199, + + 829, 829, 829, 829, 829, 829, 829, 830, + 829, 199, 829, 829, 829, 829, 199, 199, + 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 829, + + 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 830, + 829, 199, 829, 829, 829, 829, 199, 199, + 829, 829, 829, 829, 829, 829, 829, 199, + + 829, 199, 829, 829, 829, 829, 199, 199, + 829, 829, 829, 829, 829, 829, 829, 830, + 829, 829, 829, 829, 829, 829, 829, 199, + 829, 829, 829, 829, 829, 829, 829, 829, + + 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 830, + 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 829, + + 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 830, + 829, 199, 829, 829, 829, 829, 199, 199, + 829, 829, 829, 829, 829, 829, 829, 830, + + 829, 829, 829, 829, 829, 829, 829, 830, + 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 199, 199, 831, 831, 832, + + 833, 834, 835, 836, 836, 836, 836, 835, + 835, 837, 838, 839, 840, 841, 842, 843, + 844, 845, 846, 846, 846, 846, 846, 846, + 846, 846, 846, 846, 846, 199, 199, 199, + + 830, 830, 830, 830, 830, 830, 830, 830, + 830, 830, 830, 830, 830, 830, 830, 830, + 847, 847, 847, 847, 847, 847, 847, 847, + 847, 847, 199, 199, 199, 199, 199, 199, + + 848, 848, 848, 848, 848, 848, 848, 848, + 848, 848, 848, 848, 848, 848, 848, 848, + 848, 848, 848, 848, 848, 848, 848, 848, + 848, 848, 848, 848, 848, 848, 848, 848, + + 848, 848, 848, 848, 848, 848, 848, 848, + 848, 848, 848, 848, 848, 848, 848, 848, + 848, 848, 848, 848, 848, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 849, 850, 850, 850, 850, 850, 850, 850, + 850, 850, 850, 850, 850, 850, 850, 850, + 850, 850, 850, 850, 850, 850, 850, 850, + 850, 850, 850, 850, 850, 850, 850, 850, + + 850, 850, 850, 850, 850, 850, 850, 850, + 850, 850, 850, 850, 850, 850, 850, 850, + 850, 850, 850, 850, 850, 850, 850, 850, + 850, 850, 850, 850, 850, 850, 850, 850, + + 850, 850, 850, 850, 850, 850, 850, 850, + 850, 850, 850, 850, 850, 851, 852, 850, + 850, 850, 850, 850, 850, 850, 850, 853, + 853, 853, 853, 853, 853, 853, 853, 853, + + 854, 855, 855, 855, 855, 855, 855, 855, + 855, 855, 855, 855, 855, 855, 855, 855, + 855, 855, 855, 855, 855, 855, 855, 855, + 855, 855, 855, 856, 857, 199, 199, 199, + + 858, 858, 858, 858, 858, 858, 858, 858, + 858, 858, 858, 858, 858, 858, 858, 858, + 858, 858, 858, 858, 858, 858, 858, 858, + 858, 858, 858, 858, 858, 858, 858, 858, + + 858, 858, 858, 858, 858, 858, 858, 858, + 858, 858, 858, 859, 859, 859, 860, 860, + 860, 861, 861, 861, 861, 861, 861, 861, + 861, 199, 199, 199, 199, 199, 199, 199, + + 862, 862, 862, 862, 862, 862, 862, 862, + 862, 862, 862, 862, 862, 199, 862, 862, + 862, 862, 863, 863, 864, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 865, 865, 865, 865, 865, 865, 865, 865, + 865, 865, 865, 865, 865, 865, 865, 865, + 865, 865, 866, 866, 867, 868, 868, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 869, 869, 869, 869, 869, 869, 869, 869, + 869, 869, 869, 869, 869, 869, 869, 869, + 869, 869, 870, 870, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 871, 871, 871, 871, 871, 871, 871, 871, + 871, 871, 871, 871, 871, 199, 871, 871, + 871, 199, 872, 872, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 873, 873, 873, 873, 873, 873, 873, 873, + 873, 873, 873, 873, 873, 873, 873, 873, + 873, 873, 873, 873, 873, 873, 873, 873, + 873, 873, 873, 873, 873, 873, 873, 873, + + 873, 873, 873, 873, 873, 873, 873, 873, + 873, 873, 873, 873, 873, 873, 873, 873, + 873, 873, 873, 873, 874, 874, 875, 874, + 874, 874, 874, 874, 874, 874, 875, 875, + + 875, 875, 875, 875, 875, 875, 874, 875, + 875, 874, 874, 874, 874, 874, 874, 874, + 874, 874, 876, 874, 877, 877, 878, 879, + 877, 880, 877, 881, 873, 882, 199, 199, + + 883, 884, 885, 886, 887, 888, 889, 890, + 891, 892, 199, 199, 199, 199, 199, 199, + 893, 893, 893, 893, 893, 893, 893, 893, + 893, 893, 199, 199, 199, 199, 199, 199, + + 894, 894, 895, 896, 897, 898, 899, 900, + 901, 902, 903, 904, 904, 904, 905, 199, + 906, 907, 908, 909, 910, 911, 912, 913, + 914, 915, 199, 199, 199, 199, 199, 199, + + 916, 916, 916, 916, 916, 916, 916, 916, + 916, 916, 916, 916, 916, 916, 916, 916, + 916, 916, 916, 916, 916, 916, 916, 916, + 916, 916, 916, 916, 916, 916, 916, 916, + + 916, 916, 916, 917, 916, 916, 916, 916, + 916, 916, 916, 916, 916, 916, 916, 916, + 916, 916, 916, 916, 916, 916, 916, 916, + 916, 916, 916, 916, 916, 916, 916, 916, + + 916, 916, 916, 916, 916, 916, 916, 916, + 916, 916, 916, 916, 916, 916, 916, 916, + 916, 916, 916, 916, 916, 916, 916, 916, + 199, 199, 199, 199, 199, 199, 199, 199, + + 918, 918, 918, 918, 918, 918, 918, 916, + 916, 916, 916, 916, 916, 916, 916, 916, + 916, 916, 916, 916, 916, 916, 916, 916, + 916, 916, 916, 916, 916, 916, 916, 916, + + 916, 916, 916, 916, 916, 916, 916, 916, + 916, 919, 920, 199, 199, 199, 199, 199, + 853, 853, 853, 853, 853, 853, 853, 853, + 853, 853, 853, 853, 853, 853, 853, 853, + + 853, 853, 853, 853, 853, 853, 853, 853, + 853, 853, 853, 853, 853, 853, 853, 853, + 853, 853, 853, 853, 853, 853, 853, 853, + 853, 853, 853, 853, 853, 853, 853, 853, + + 853, 853, 853, 853, 853, 853, 853, 853, + 853, 853, 853, 853, 853, 853, 853, 853, + 853, 853, 853, 853, 853, 853, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 921, 921, 921, 921, 921, 921, 921, 921, + 921, 921, 921, 921, 921, 921, 921, 921, + 921, 921, 921, 921, 921, 921, 921, 921, + 921, 921, 921, 921, 921, 922, 922, 199, + + 923, 923, 923, 924, 924, 924, 924, 923, + 923, 924, 924, 924, 199, 199, 199, 199, + 924, 924, 923, 924, 924, 924, 924, 924, + 924, 925, 926, 927, 199, 199, 199, 199, + + 928, 199, 199, 199, 929, 929, 930, 931, + 932, 933, 934, 935, 936, 937, 938, 939, + 940, 940, 940, 940, 940, 940, 940, 940, + 940, 940, 940, 940, 940, 940, 940, 940, + + 940, 940, 940, 940, 940, 940, 940, 940, + 940, 940, 940, 940, 940, 940, 199, 199, + 940, 940, 940, 940, 940, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 941, 941, 941, 941, 941, 941, 941, 941, + 941, 941, 941, 941, 941, 941, 941, 941, + 941, 941, 941, 941, 941, 941, 941, 941, + 941, 941, 941, 941, 941, 941, 941, 941, + + 941, 941, 941, 941, 941, 941, 941, 941, + 941, 941, 942, 942, 199, 199, 199, 199, + 943, 943, 943, 943, 943, 944, 944, 944, + 943, 943, 944, 943, 943, 943, 943, 943, + + 943, 941, 941, 941, 941, 941, 941, 941, + 943, 943, 199, 199, 199, 199, 199, 199, + 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 199, 199, 199, 956, 956, + + 957, 957, 957, 957, 957, 957, 957, 957, + 957, 957, 957, 957, 957, 957, 957, 957, + 957, 957, 957, 957, 957, 957, 957, 957, + 957, 957, 957, 957, 957, 957, 957, 957, + + 958, 958, 958, 958, 958, 958, 958, 958, + 958, 958, 958, 958, 958, 958, 958, 958, + 958, 958, 958, 958, 958, 958, 958, 959, + 960, 961, 961, 962, 199, 199, 963, 963, + + 964, 964, 964, 964, 964, 964, 964, 964, + 964, 964, 964, 964, 964, 964, 964, 964, + 964, 964, 964, 964, 964, 964, 964, 964, + 964, 964, 964, 964, 964, 964, 964, 964, + + 964, 964, 964, 964, 964, 964, 964, 964, + 964, 964, 964, 964, 964, 964, 964, 964, + 964, 964, 964, 964, 964, 965, 966, 965, + 966, 966, 966, 966, 966, 966, 966, 199, + + 967, 968, 966, 968, 968, 966, 966, 966, + 966, 966, 966, 966, 966, 965, 965, 965, + 965, 965, 965, 966, 966, 969, 969, 969, + 969, 969, 969, 969, 969, 199, 199, 970, + + 971, 972, 973, 974, 975, 976, 977, 978, + 979, 980, 199, 199, 199, 199, 199, 199, + 971, 972, 973, 974, 975, 976, 977, 978, + 979, 980, 199, 199, 199, 199, 199, 199, + + 981, 981, 981, 981, 981, 981, 981, 982, + 983, 983, 983, 983, 981, 981, 199, 199, + 984, 984, 984, 984, 984, 985, 985, 985, + 985, 985, 985, 984, 984, 985, 986, 199, + + 987, 987, 987, 987, 988, 989, 990, 989, + 990, 989, 990, 989, 990, 989, 990, 989, + 989, 989, 990, 989, 989, 989, 989, 989, + 989, 989, 989, 989, 989, 989, 989, 989, + + 989, 989, 989, 989, 989, 989, 989, 989, + 989, 989, 989, 989, 989, 989, 989, 989, + 989, 989, 989, 989, 991, 992, 987, 987, + 987, 987, 987, 993, 987, 993, 988, 988, + + 993, 993, 987, 993, 994, 989, 989, 989, + 989, 989, 989, 989, 199, 199, 199, 199, + 995, 996, 997, 998, 999, 1000, 1001, 1002, + 1003, 1004, 1005, 1005, 1006, 1007, 1005, 1005, + + 1007, 1008, 1008, 1008, 1008, 1008, 1008, 1008, + 1008, 1008, 1008, 1009, 1010, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1008, 1008, 1008, 1008, + 1008, 1008, 1008, 1008, 1008, 199, 199, 199, + + 1011, 1011, 1012, 1013, 1013, 1013, 1013, 1013, + 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, + 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, + 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, + + 1013, 1012, 1011, 1011, 1011, 1011, 1012, 1012, + 1011, 1011, 1014, 1015, 1016, 1016, 1013, 1013, + 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, + 1025, 1026, 1027, 1027, 1027, 1027, 1027, 1027, + + 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, + 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, + 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, + 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, + + 1028, 1028, 1028, 1028, 1028, 1028, 1029, 1030, + 1031, 1031, 1030, 1030, 1030, 1031, 1030, 1031, + 1031, 1031, 1032, 1032, 199, 199, 199, 199, + 199, 199, 199, 199, 1033, 1033, 1033, 1033, + + 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, + 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, + 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, + 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, + + 1034, 1034, 1034, 1034, 1035, 1035, 1035, 1035, + 1035, 1035, 1035, 1035, 1036, 1036, 1036, 1036, + 1036, 1036, 1036, 1036, 1035, 1035, 1036, 1037, + 199, 199, 199, 1038, 1038, 1039, 1039, 1039, + + 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, + 1048, 1049, 199, 199, 199, 1034, 1034, 1034, + 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, + 1058, 1059, 1060, 1060, 1060, 1060, 1060, 1060, + + 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, + 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, + 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, + 1061, 1061, 1061, 1061, 1061, 1061, 1062, 1062, + + 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, + 199, 199, 199, 199, 199, 199, 199, 199, + 1064, 1064, 1064, 1065, 1066, 1067, 1067, 1067, + 1067, 1067, 1064, 1064, 1067, 1067, 1067, 1067, + + 1064, 1068, 1066, 1066, 1066, 1066, 1066, 1066, + 1066, 1069, 1069, 1069, 1069, 1067, 1069, 1069, + 1069, 1069, 1068, 1070, 1071, 1072, 1072, 199, + 984, 984, 199, 199, 199, 199, 199, 199, + + 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, + + 114, 114, 114, 114, 114, 114, 1073, 1073, + 1073, 1073, 1073, 1074, 1075, 1075, 1075, 1076, + 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, + 1075, 1075, 1075, 1076, 1075, 1075, 1075, 1075, + + 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, + 1075, 1075, 1075, 1075, 1075, 1075, 1076, 1075, + 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, + 1075, 1075, 1075, 1075, 1075, 1077, 1077, 1077, + + 1077, 1077, 1075, 1075, 1075, 1075, 1077, 1077, + 1077, 1077, 1077, 114, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, + 1078, 1079, 115, 115, 115, 1080, 115, 115, + + 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 1081, 1081, 1081, 1081, 1081, + + 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, + 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, + 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, + 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1082, + + 188, 188, 187, 188, 1083, 1083, 1083, 1083, + 1083, 1083, 1084, 1085, 1085, 1086, 1087, 1088, + 1089, 1085, 1085, 1085, 1085, 1085, 1085, 1085, + 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, + + 1085, 1085, 1085, 1085, 1085, 1085, 1085, 984, + 984, 984, 984, 984, 984, 984, 984, 984, + 984, 984, 984, 984, 984, 984, 199, 199, + 199, 199, 199, 199, 1090, 1067, 1083, 1084, + + 70, 71, 70, 71, 70, 71, 70, 71, + 70, 71, 70, 71, 70, 71, 70, 71, + 70, 71, 70, 71, 70, 71, 70, 71, + 70, 71, 70, 71, 70, 71, 70, 71, + + 70, 71, 70, 71, 70, 71, 70, 71, + 70, 71, 70, 71, 70, 71, 70, 71, + 70, 71, 70, 71, 70, 71, 1091, 1092, + 1093, 1094, 1095, 1096, 1097, 1097, 1098, 1097, + + 70, 71, 70, 71, 70, 71, 70, 71, + 70, 71, 70, 71, 70, 71, 70, 71, + 70, 71, 70, 71, 70, 71, 70, 71, + 70, 71, 1099, 1100, 1099, 1100, 1099, 1100, + + 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, + 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, + 1101, 1101, 1101, 1101, 1101, 1101, 199, 199, + 1102, 1102, 1102, 1102, 1102, 1102, 199, 199, + + 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, + 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, + 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, + 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, + + 1101, 1101, 1101, 1101, 1101, 1101, 199, 199, + 1102, 1102, 1102, 1102, 1102, 1102, 199, 199, + 1103, 1101, 1104, 1101, 1105, 1101, 1106, 1101, + 199, 1102, 199, 1102, 199, 1102, 199, 1102, + + 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, + 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, + 1107, 1108, 1109, 1110, 1109, 1110, 1111, 1112, + 1113, 1114, 1115, 1116, 1117, 1118, 199, 199, + + 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, + 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, + 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, + 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, + + 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, + 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, + 1101, 1101, 1167, 1168, 1169, 199, 1170, 1171, + 1102, 1102, 1172, 1173, 1174, 204, 1175, 204, + + 204, 1176, 1177, 1178, 1179, 199, 1180, 1181, + 1182, 1183, 1182, 1183, 1184, 1176, 1176, 1176, + 1101, 1101, 1185, 1186, 199, 199, 1187, 1188, + 1102, 1102, 1189, 1190, 199, 1176, 1176, 1176, + + 1101, 1101, 1191, 1192, 1193, 1194, 1195, 1196, + 1102, 1102, 1197, 1198, 1199, 1176, 1200, 1200, + 199, 199, 1201, 1202, 1203, 199, 1204, 1205, + 1206, 1207, 1208, 1209, 1210, 1211, 204, 199, + + 1212, 1212, 1213, 1213, 1213, 1213, 1213, 1214, + 1213, 1213, 1213, 1215, 1216, 1217, 1218, 1219, + 1220, 1221, 1220, 1222, 1223, 1224, 14, 1225, + 1226, 1227, 1228, 1229, 1229, 1230, 1228, 1229, + + 14, 14, 14, 14, 1231, 1232, 1232, 1233, + 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, + 13, 13, 13, 1242, 1242, 1243, 1244, 1244, + 14, 1245, 1246, 14, 1247, 1248, 1225, 43, + + 43, 14, 14, 14, 1249, 16, 1250, 1251, + 1252, 1252, 1253, 1253, 1253, 1253, 1254, 1254, + 1254, 1254, 1255, 1256, 1257, 1258, 1259, 1260, + 1259, 1259, 1259, 1259, 1258, 1259, 1259, 1261, + + 1262, 1263, 1263, 1263, 1264, 1265, 1266, 1267, + 1268, 1269, 1270, 1270, 1270, 1270, 1270, 1270, + 1271, 1272, 199, 199, 1273, 1274, 1275, 1276, + 1277, 1278, 1279, 1279, 1280, 1281, 1282, 157, + + 1271, 63, 58, 59, 1273, 1274, 1275, 1276, + 1277, 1278, 1279, 1279, 1280, 1281, 1282, 199, + 1081, 1081, 1081, 1081, 1081, 1283, 1283, 1283, + 1283, 1283, 1283, 1283, 1283, 199, 199, 199, + + 12, 12, 12, 12, 12, 12, 12, 50, + 1284, 12, 12, 1285, 1286, 1287, 1287, 1287, + 1288, 1288, 1289, 1289, 1289, 1289, 1290, 1291, + 1291, 1292, 1293, 1294, 1295, 1295, 1296, 1296, + + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, + 170, 170, 177, 177, 170, 170, 170, 170, + 177, 177, 177, 170, 170, 1297, 1297, 1297, + + 1297, 170, 1298, 1298, 1299, 1300, 1300, 194, + 1301, 194, 1300, 1302, 1084, 1084, 1084, 1084, + 1085, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1303, 1303, 1304, 1305, 51, 1303, 1303, 1304, + 51, 1305, 1306, 1304, 1304, 1304, 1306, 1306, + 1304, 1304, 1304, 1306, 51, 1304, 1307, 51, + 36, 1304, 1304, 1304, 1304, 1304, 51, 51, + + 1303, 1303, 1303, 51, 1304, 51, 1308, 51, + 1304, 51, 1309, 1310, 1304, 1304, 1311, 1306, + 1304, 1304, 1312, 1304, 1306, 1313, 1313, 1313, + 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1319, + + 1320, 1255, 1255, 1255, 1255, 1319, 1318, 1318, + 1318, 1318, 1321, 1255, 1322, 1323, 1324, 1325, + 1326, 1326, 1326, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + + 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, + 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, + + 1329, 1329, 1329, 111, 123, 1330, 1330, 1330, + 1330, 1326, 199, 199, 199, 199, 199, 199, + 36, 36, 36, 36, 36, 51, 51, 51, + 51, 51, 1331, 1331, 51, 51, 51, 51, + + 36, 51, 51, 36, 51, 51, 36, 51, + 51, 51, 51, 51, 51, 51, 1331, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 1332, 1331, 1331, + 51, 51, 36, 51, 36, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 1315, 1315, 1315, 1315, 1315, + 1315, 1315, 1315, 1315, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + + 36, 36, 36, 36, 1331, 36, 36, 36, + 1333, 1334, 1333, 1335, 1336, 1335, 36, 36, + 36, 36, 18, 57, 36, 1337, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + + 36, 36, 36, 36, 1331, 36, 1331, 36, + 36, 36, 36, 36, 1280, 1280, 36, 1280, + 1280, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 1338, 1339, 36, 36, + + 36, 1331, 36, 1340, 1331, 36, 36, 1331, + 36, 1331, 36, 36, 36, 36, 36, 36, + 36, 36, 1338, 1339, 1338, 1339, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + + 1331, 36, 1331, 36, 1338, 1339, 1338, 1339, + 1338, 1339, 1338, 1339, 36, 1331, 1341, 1342, + 1341, 1342, 1338, 1339, 1341, 1342, 1338, 1339, + 1341, 1342, 1338, 1339, 1338, 1339, 1338, 1339, + + 1341, 1342, 1338, 1339, 1341, 1342, 1338, 1339, + 1341, 1342, 1338, 1339, 36, 36, 36, 1338, + 1339, 1338, 1339, 36, 36, 36, 36, 36, + 1343, 36, 36, 36, 36, 36, 36, 36, + + 36, 36, 1338, 1339, 36, 36, 1344, 36, + 1345, 1346, 36, 1346, 1331, 1331, 1331, 1331, + 1338, 1339, 1338, 1339, 1338, 1339, 1338, 1339, + 36, 36, 36, 36, 36, 36, 36, 36, + + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 1338, 1339, 1338, 1339, 1347, 36, 36, + 1338, 1339, 36, 36, 36, 36, 1338, 1339, + 1338, 1339, 1338, 1339, 1338, 1339, 1338, 1339, + + 1341, 1342, 1341, 1342, 1338, 1339, 1338, 1339, + 1338, 1339, 1341, 1342, 1341, 1342, 36, 36, + 1338, 1339, 1348, 1348, 1348, 1255, 1349, 1349, + 1255, 1255, 1350, 1350, 1350, 1351, 1351, 1255, + + 51, 1315, 51, 51, 51, 51, 51, 51, + 16, 1250, 16, 1250, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 1352, 1352, 51, 51, 51, 51, + + 36, 36, 51, 51, 51, 51, 51, 51, + 51, 1353, 1354, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 1355, 1355, + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, + + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, + + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, + 1355, 1355, 1355, 1315, 1255, 1315, 1315, 1315, + + 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, + 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, + 1315, 1315, 1315, 1315, 1315, 1356, 1315, 1315, + 1315, 1315, 1315, 1255, 1255, 1255, 1255, 1255, + + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1321, 1321, 1321, 1321, + 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, + + 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, + 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1357, + 1357, 1322, 1322, 1322, 1322, 1322, 1322, 1322, + 1322, 1322, 1322, 1322, 1358, 1358, 1358, 1358, + + 1358, 1358, 1323, 1323, 1323, 1323, 1323, 1323, + 1359, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1361, 1361, 1361, 1361, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 199, 199, 199, 199, 199, + + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + + 51, 51, 51, 51, 51, 1315, 1315, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, + 1371, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 1363, 1364, 1365, 1366, + 1367, 1368, 1369, 1370, 1371, 65, 65, 65, + + 65, 65, 65, 65, 65, 65, 65, 65, + 63, 58, 59, 1273, 1274, 1275, 1276, 1277, + 1278, 1372, 1372, 1372, 1372, 1372, 1372, 1372, + 1372, 1372, 1372, 1372, 1373, 1373, 1373, 1373, + + 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, + 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, + 1373, 1373, 1373, 1373, 1373, 1373, 1374, 1374, + 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, + + 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, + 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, + 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, + 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, + + 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, + 1375, 1375, 1376, 1377, 1377, 1377, 1377, 1377, + 1377, 1377, 1377, 1377, 1377, 1378, 1379, 1380, + 1381, 1382, 1383, 1384, 1385, 1386, 1377, 1387, + + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 1321, 1321, + 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, + + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 36, + 51, 51, 51, 51, 51, 51, 51, 51, + + 51, 36, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + + 1352, 1352, 1352, 1352, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 1388, 1388, 1321, 1321, + 1389, 1315, 1352, 1352, 1352, 1352, 1352, 1352, + + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 1352, 1352, 1352, 51, 51, 51, 51, + + 51, 51, 51, 51, 51, 51, 51, 51, + 1352, 51, 51, 51, 51, 51, 51, 36, + 1315, 1315, 1321, 1321, 1321, 1321, 1321, 1321, + 1321, 1321, 1321, 1321, 1321, 1321, 1322, 1389, + + 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, + 1321, 1321, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1322, 1322, 1322, 1322, 1322, 1322, + 1322, 1322, 1322, 1322, 1322, 1390, 1359, 1359, + + 1357, 1357, 1322, 1322, 1322, 1322, 1322, 1322, + 1322, 1322, 1322, 1322, 1391, 1322, 1322, 1322, + 1322, 1322, 1323, 1390, 1390, 1390, 1390, 1390, + 1390, 1390, 1390, 1390, 1390, 1392, 1392, 1392, + + 1393, 1393, 1393, 1393, 1392, 1392, 1392, 1392, + 1392, 1359, 1359, 1359, 1359, 1392, 1360, 1392, + 1392, 1392, 1359, 1392, 1392, 1359, 1359, 1359, + 1392, 1392, 1359, 1359, 1392, 1359, 1359, 1392, + + 1392, 1392, 1360, 1359, 1360, 1360, 1360, 1360, + 1359, 1359, 1392, 1359, 1359, 1359, 1359, 1359, + 1359, 1392, 1392, 1392, 1392, 1392, 1359, 1392, + 1392, 1392, 1392, 1359, 1359, 1392, 1392, 1392, + + 1394, 1352, 1352, 1352, 1352, 1360, 51, 51, + 1352, 1352, 1361, 1361, 1352, 1352, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + + 51, 51, 51, 51, 51, 51, 51, 51, + 1360, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 1360, 51, 1360, 51, + 51, 51, 51, 1360, 1360, 1360, 51, 1359, + 51, 51, 51, 1395, 1395, 1395, 1395, 1396, + + 1396, 51, 1397, 1397, 51, 51, 51, 51, + 1398, 1399, 1398, 1399, 1398, 1399, 1398, 1399, + 1398, 1399, 1398, 1399, 1398, 1399, 1400, 1401, + 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, + + 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, + 1408, 1409, 1400, 1401, 1402, 1403, 1404, 1405, + 1406, 1407, 1408, 1409, 51, 1360, 1360, 1360, + 51, 51, 51, 51, 51, 51, 51, 51, + + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 1360, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 1360, + + 1410, 1410, 1410, 1411, 1412, 1413, 1414, 1358, + 1415, 1416, 1358, 1417, 1418, 1419, 1420, 1420, + 1255, 1255, 1255, 1255, 1255, 1421, 1422, 1255, + 1255, 1255, 1255, 1255, 1255, 1421, 1422, 1255, + + 1255, 1255, 1421, 1422, 1421, 1422, 1398, 1399, + 1398, 1399, 1398, 1399, 1423, 1424, 1423, 1424, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + + 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, + 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, + 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, + 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, + + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + + 1255, 1255, 1255, 1398, 1399, 1398, 1399, 1398, + 1399, 1398, 1399, 1398, 1399, 1426, 1427, 1428, + 1429, 1398, 1399, 1398, 1399, 1398, 1399, 1398, + 1399, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1430, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + + 1421, 1422, 1255, 1255, 1421, 1422, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1421, + 1422, 1421, 1422, 1255, 1421, 1422, 1255, 1255, + 1398, 1399, 1398, 1399, 1255, 1255, 1255, 1255, + + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1431, 1255, 1255, + 1421, 1422, 1255, 1255, 1398, 1399, 1255, 1255, + + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1320, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1421, 1422, 1421, 1422, 1255, + 1255, 1255, 1255, 1255, 1421, 1422, 1255, 1255, + 1255, 1255, 1255, 1255, 1421, 1422, 1255, 1255, + + 1255, 1255, 1255, 1255, 1421, 1422, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, + 1255, 1255, 1255, 1255, 1320, 1320, 1320, 1255, + 1255, 1421, 1422, 1255, 1255, 1421, 1422, 1421, + + 1422, 1421, 1422, 1421, 1422, 1255, 1255, 1255, + 1255, 1255, 1255, 1421, 1422, 1255, 1255, 1255, + 1255, 1421, 1422, 1421, 1422, 1421, 1422, 1421, + 1422, 1421, 1422, 1421, 1422, 1255, 1255, 1255, + + 1255, 1421, 1422, 1255, 1255, 1255, 1421, 1422, + 1421, 1422, 1421, 1422, 1421, 1422, 1255, 1421, + 1422, 1255, 1255, 1421, 1422, 1255, 1255, 1255, + 1255, 1255, 1255, 1421, 1422, 1421, 1422, 1421, + + 1422, 1421, 1422, 1421, 1422, 1421, 1422, 1255, + 1255, 1255, 1255, 1255, 1255, 1421, 1422, 1421, + 1422, 1421, 1422, 1421, 1422, 1421, 1422, 1255, + 1255, 1255, 1255, 1255, 1432, 1255, 1433, 1255, + + 1255, 1255, 1255, 1434, 1435, 1434, 1255, 1255, + 1255, 1255, 1255, 1255, 1421, 1422, 1255, 1255, + 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1421, + 1422, 1421, 1422, 1255, 1255, 1255, 1255, 1255, + + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1322, 1322, + 1322, 1322, 1322, 1322, 1323, 1323, 1323, 1323, + 1323, 1323, 1323, 1390, 1390, 1390, 1390, 1390, + + 1323, 1323, 1323, 1323, 1390, 1390, 1390, 1390, + 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, + 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, + 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, + + 1418, 1418, 1418, 1418, 1418, 1390, 1390, 1418, + 1418, 1418, 1418, 1418, 1418, 1362, 1362, 1362, + 1390, 1390, 1390, 1390, 1390, 1359, 1359, 1359, + 1359, 1359, 1362, 1362, 1362, 1362, 1362, 1362, + + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 199, 199, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 199, 199, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 199, 199, 199, 1362, 1362, 1362, + + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 199, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, + 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, + 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, + 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, + + 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, + 1436, 1436, 1436, 1436, 1436, 1436, 1436, 199, + 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, + 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, + + 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, + 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, + 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, + 1437, 1437, 1437, 1437, 1437, 1437, 1437, 199, + + 127, 123, 1438, 1439, 1440, 1441, 1442, 127, + 123, 127, 123, 127, 123, 1443, 1444, 1445, + 1446, 1097, 1099, 1100, 1447, 127, 123, 1447, + 1097, 1097, 1097, 1097, 1448, 1448, 1449, 1450, + + 1451, 1452, 1451, 1452, 1451, 1452, 1451, 1452, + 1451, 1452, 1451, 1452, 1451, 1452, 1451, 1452, + 1451, 1452, 1451, 1452, 1451, 1452, 1451, 1452, + 1451, 1452, 1451, 1452, 1451, 1452, 1451, 1452, + + 1451, 1452, 1451, 1452, 1453, 1454, 1454, 1454, + 1454, 1454, 1454, 1455, 1456, 1455, 1456, 1457, + 1457, 1457, 1458, 1459, 199, 199, 199, 199, + 199, 1460, 1461, 1461, 1461, 1462, 1460, 1461, + + 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, + 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, + 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, + 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, + + 1463, 1463, 1463, 1463, 1463, 1463, 199, 1464, + 199, 199, 199, 199, 199, 1464, 199, 199, + 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, + 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, + + 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, + 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, + 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, + 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, + + 1465, 1465, 1465, 1465, 1465, 1465, 1466, 1466, + 199, 199, 199, 199, 199, 199, 199, 1467, + 1468, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 1469, + + 830, 830, 830, 830, 830, 830, 830, 830, + 830, 830, 830, 830, 830, 830, 830, 830, + 830, 830, 830, 830, 830, 830, 830, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 830, 830, 830, 830, 830, 830, 830, 199, + 830, 830, 830, 830, 830, 830, 830, 199, + 830, 830, 830, 830, 830, 830, 830, 199, + 830, 830, 830, 830, 830, 830, 830, 199, + + 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, + + 1470, 1470, 1471, 1472, 1471, 1472, 1470, 1470, + 1470, 1471, 1472, 1470, 1471, 1472, 1259, 1259, + 1259, 1259, 1259, 1259, 1259, 1259, 1258, 1473, + 1474, 1475, 1476, 1477, 1471, 1472, 1477, 1477, + + 1478, 1479, 1423, 1424, 1423, 1424, 1423, 1424, + 1423, 1424, 1475, 1475, 1475, 1475, 1480, 1481, + 1475, 1482, 1483, 1484, 1484, 1483, 1483, 1483, + 1483, 1483, 1485, 1485, 1486, 1487, 1487, 1488, + + 1489, 1487, 1490, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, + 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, + 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, + 1491, 1491, 199, 1491, 1491, 1491, 1491, 1492, + + 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, + 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, + 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, + 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, + + 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, + 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, + 1491, 1491, 1491, 1492, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, + 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, + 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, + 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, + + 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, + 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, + 1492, 1492, 1492, 1492, 1492, 1492, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, + 1493, 1493, 1493, 1493, 199, 199, 199, 199, + + 1213, 1494, 1495, 1496, 1352, 1497, 1498, 1499, + 16, 1250, 16, 1250, 16, 1250, 16, 1250, + 16, 1250, 1352, 1352, 16, 1250, 16, 1250, + 16, 1250, 16, 1250, 1500, 1228, 1501, 1501, + + 1352, 1499, 1499, 1499, 1499, 1499, 1499, 1499, + 1499, 1499, 1502, 1503, 171, 1504, 1505, 1505, + 1506, 1507, 1507, 1507, 1507, 1508, 1509, 1352, + 1510, 1510, 1510, 1511, 1512, 1513, 1493, 1352, + + 199, 1514, 1515, 1514, 1515, 1514, 1515, 1514, + 1515, 1514, 1515, 1515, 1516, 1515, 1516, 1515, + 1516, 1515, 1516, 1515, 1516, 1515, 1516, 1515, + 1516, 1515, 1516, 1515, 1516, 1515, 1516, 1515, + + 1516, 1515, 1516, 1514, 1515, 1516, 1515, 1516, + 1515, 1516, 1515, 1515, 1515, 1515, 1515, 1515, + 1516, 1516, 1515, 1516, 1516, 1515, 1516, 1516, + 1515, 1516, 1516, 1515, 1516, 1516, 1515, 1515, + + 1515, 1515, 1515, 1514, 1515, 1514, 1515, 1514, + 1515, 1515, 1515, 1515, 1515, 1515, 1514, 1515, + 1515, 1515, 1515, 1515, 1516, 1517, 1517, 199, + 199, 1518, 1518, 1519, 1519, 1520, 1521, 1522, + + 1523, 1524, 1525, 1524, 1525, 1524, 1525, 1524, + 1525, 1524, 1525, 1525, 1526, 1525, 1526, 1525, + 1526, 1525, 1526, 1525, 1526, 1525, 1526, 1525, + 1526, 1525, 1526, 1525, 1526, 1525, 1526, 1525, + + 1526, 1525, 1526, 1524, 1525, 1526, 1525, 1526, + 1525, 1526, 1525, 1525, 1525, 1525, 1525, 1525, + 1526, 1526, 1525, 1526, 1526, 1525, 1526, 1526, + 1525, 1526, 1526, 1525, 1526, 1526, 1525, 1525, + + 1525, 1525, 1525, 1524, 1525, 1524, 1525, 1524, + 1525, 1525, 1525, 1525, 1525, 1525, 1524, 1525, + 1525, 1525, 1525, 1525, 1526, 1524, 1524, 1526, + 1526, 1526, 1526, 1527, 1528, 1529, 1530, 1531, + + 199, 199, 199, 199, 199, 1532, 1532, 1532, + 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, + 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, + 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, + + 1532, 1532, 1532, 1532, 1532, 1532, 1532, 1532, + 1532, 1532, 1532, 1532, 1532, 1533, 199, 199, + 199, 1534, 1534, 1534, 1534, 1534, 1534, 1534, + 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, + + 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, + 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, + 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, + 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, + + 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, + 1534, 1534, 1534, 1534, 1534, 1534, 1534, 199, + 1535, 1535, 1536, 1536, 1536, 1536, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + + 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, + 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, + 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, + 1539, 1539, 1539, 199, 199, 199, 199, 199, + + 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, + 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + + 1393, 1393, 1393, 1393, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, + 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, + + 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, + 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, + 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, + 1541, 1541, 1541, 1541, 1541, 1542, 1542, 199, + + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + 1536, 1536, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + + 1537, 1537, 1537, 1537, 1543, 1543, 1543, 1543, + 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, + 1545, 1546, 1546, 1546, 1546, 1546, 1546, 1546, + 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, + + 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, + 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, + 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, + 1541, 1541, 1541, 1541, 1542, 1542, 1547, 1535, + + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1546, 1546, 1546, 1546, 1546, 1546, 1546, + 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, + + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1545, 1545, 1545, 1545, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 199, + + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1545, + 1545, 1545, 1545, 1537, 1537, 1537, 1537, 1537, + + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1545, 1545, + + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1545, + + 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, + 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, + 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, + 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, + + 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, + 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, + 1549, 1549, 1549, 1549, 1549, 1549, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + + 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, + 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, + 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, + 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, + + 1551, 1551, 1551, 1551, 1551, 1551, 1552, 1552, + 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, + 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, + 1552, 1552, 1552, 1552, 1553, 1553, 1553, 1553, + + 1553, 1553, 1553, 1553, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1555, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + + 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, + 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, + 1556, 1556, 1556, 1556, 1556, 1557, 1556, 1556, + 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, + + 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, + 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, + 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, + 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, + + 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, + 1556, 1556, 1556, 1556, 1556, 199, 199, 199, + 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, + 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, + + 1558, 1558, 1559, 1559, 1558, 1558, 1558, 1558, + 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, + 1558, 1558, 1558, 1558, 1559, 1558, 1558, 1558, + 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, + + 1558, 1559, 1558, 1558, 1558, 1559, 1558, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, + 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, + + 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, + 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, + 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, + 1561, 1561, 1561, 1561, 1561, 1561, 1562, 1563, + + 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + + 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + 1564, 1564, 1564, 1564, 1565, 1566, 1567, 1568, + 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + + 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, + 1577, 1578, 1564, 1564, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 278, 279, 278, 279, 278, 279, 278, 279, + 278, 279, 278, 279, 278, 279, 278, 279, + 278, 279, 278, 279, 278, 279, 278, 279, + 278, 279, 278, 279, 278, 279, 278, 279, + + 282, 283, 278, 279, 278, 279, 278, 279, + 278, 279, 278, 279, 278, 279, 1579, 264, + 1580, 1580, 1580, 1581, 1582, 1582, 1582, 1582, + 1582, 1582, 1582, 1582, 264, 264, 1581, 1583, + + 278, 279, 278, 279, 278, 279, 278, 279, + 278, 279, 278, 279, 278, 279, 278, 279, + 278, 279, 278, 279, 278, 279, 278, 279, + 284, 285, 284, 285, 1584, 1584, 199, 1582, + + 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, + 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, + 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, + 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, + + 1585, 1585, 1585, 1585, 1585, 1585, 1586, 1586, + 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, + 1587, 1587, 1588, 1589, 1590, 1590, 1590, 1589, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, + 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, + 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1592, + 1592, 1592, 1592, 1481, 1481, 1481, 1481, 1481, + + 1593, 1593, 1099, 1100, 1099, 1100, 1099, 1100, + 1099, 1100, 1099, 1100, 1099, 1100, 1099, 1100, + 1097, 1097, 1099, 1100, 1099, 1100, 1099, 1100, + 1099, 1100, 1099, 1100, 1099, 1100, 1099, 1100, + + 1099, 1100, 1099, 1100, 1099, 1100, 1099, 1100, + 1099, 1100, 1099, 1100, 1099, 1100, 1099, 1100, + 1099, 1100, 1099, 1100, 1099, 1100, 1099, 1100, + 1099, 1100, 1099, 1100, 1099, 1100, 1099, 1100, + + 1099, 1100, 1099, 1100, 1099, 1100, 1099, 1100, + 1099, 1100, 1099, 1100, 1099, 1100, 1099, 1100, + 1448, 1097, 1097, 1097, 1097, 1097, 1097, 1097, + 1097, 1099, 1100, 1099, 1100, 1594, 1099, 1100, + + 1099, 1100, 1099, 1100, 1099, 1100, 1099, 1100, + 1481, 1595, 1595, 1099, 1100, 1596, 1597, 199, + 1598, 1599, 1600, 1601, 1602, 1602, 1603, 1604, + 1603, 1604, 1603, 1604, 1603, 1604, 1603, 1604, + + 1598, 1599, 1598, 1599, 1598, 1599, 1598, 1599, + 1598, 1599, 1605, 1606, 1607, 1608, 199, 199, + 1609, 1610, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 1611, + 1612, 1612, 1597, 1613, 1613, 1613, 1613, 1613, + + 1614, 1614, 1615, 1614, 1614, 1614, 1616, 1614, + 1614, 1614, 1614, 1615, 1614, 1614, 1614, 1614, + 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, + 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, + + 1614, 1614, 1614, 1617, 1617, 1615, 1615, 1617, + 1618, 1618, 1618, 1618, 199, 199, 199, 199, + 1544, 1544, 1544, 1544, 1544, 1544, 772, 772, + 1290, 1619, 199, 199, 199, 199, 199, 199, + + 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, + 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, + 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, + 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, + + 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, + 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, + 1620, 1620, 1621, 1622, 1623, 1623, 1624, 1624, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1625, 1625, 1626, 1626, 1626, 1626, 1626, 1626, + 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, + 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, + 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, + + 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, + 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, + 1626, 1626, 1626, 1626, 1625, 1625, 1625, 1625, + 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, + + 1625, 1625, 1625, 1625, 1627, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 1628, 1628, + 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, + 1637, 1638, 199, 199, 199, 199, 199, 199, + + 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, + 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, + 1639, 1639, 490, 490, 490, 490, 490, 490, + 1640, 1640, 1640, 490, 199, 199, 199, 199, + + 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, + 1649, 1650, 1651, 1651, 1651, 1651, 1651, 1651, + 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, + 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, + + 1651, 1651, 1651, 1651, 1651, 1651, 1652, 1652, + 1652, 1652, 1652, 1653, 1653, 1653, 1654, 1655, + 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, + 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, + + 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1657, + 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, + 1657, 1657, 1658, 1659, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 1660, + + 822, 822, 822, 822, 822, 822, 822, 822, + 822, 822, 822, 822, 822, 822, 822, 822, + 822, 822, 822, 822, 822, 822, 822, 822, + 822, 822, 822, 822, 822, 199, 199, 199, + + 1661, 1661, 1661, 1662, 1663, 1663, 1663, 1663, + 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, + 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, + 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, + + 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, + 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, + 1663, 1663, 1663, 1664, 1662, 1662, 1661, 1661, + 1661, 1661, 1662, 1662, 1661, 1662, 1662, 1662, + + 1665, 1666, 1666, 1666, 1666, 1666, 1666, 1667, + 1668, 1668, 1666, 1666, 1666, 1666, 199, 1669, + 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, + 1678, 1679, 199, 199, 199, 199, 1666, 1666, + + 1680, 1680, 1680, 1680, 1680, 1681, 1682, 1680, + 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, + 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, + 1691, 1692, 1680, 1680, 1680, 1680, 1680, 199, + + 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, + 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, + 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, + 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, + + 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, + 1693, 1694, 1694, 1694, 1694, 1694, 1694, 1695, + 1695, 1694, 1694, 1695, 1695, 1694, 1694, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1693, 1693, 1693, 1694, 1693, 1693, 1693, 1693, + 1693, 1693, 1693, 1693, 1694, 1695, 199, 199, + 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, + 1704, 1705, 199, 199, 1706, 1707, 1707, 1707, + + 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, + 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, + 1709, 1708, 1708, 1708, 1708, 1708, 1708, 1710, + 1710, 1710, 1708, 810, 1681, 1711, 1680, 1680, + + 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, + 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, + 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, + 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, + + 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, + 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, + 1713, 1712, 1713, 1713, 1714, 1712, 1712, 1713, + 1713, 1712, 1712, 1712, 1712, 1712, 1713, 1713, + + 1712, 1713, 1712, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 1712, 1712, 1715, 1716, 1716, + + 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, + 1717, 1717, 1717, 1718, 1719, 1719, 1718, 1718, + 1720, 1720, 1717, 1721, 1721, 1718, 1722, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 1723, 1723, 1723, 1723, 1723, 1723, 199, + 199, 1723, 1723, 1723, 1723, 1723, 1723, 199, + 199, 1723, 1723, 1723, 1723, 1723, 1723, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1723, 1723, 1723, 1723, 1723, 1723, 1723, 199, + 1723, 1723, 1723, 1723, 1723, 1723, 1723, 199, + 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, + 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, + + 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, + 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, + 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, + 1602, 1602, 1602, 1724, 1725, 1725, 1725, 1725, + + 199, 199, 199, 199, 1602, 1726, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, + 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, + 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, + 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, + + 1727, 1727, 1727, 1728, 1728, 1729, 1728, 1728, + 1729, 1728, 1728, 1730, 1728, 1731, 199, 199, + 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, + 1740, 1741, 199, 199, 199, 199, 199, 199, + + 1742, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1742, 1743, 1743, 1743, + + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1742, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1742, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1742, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1742, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1742, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + + 1743, 1743, 1743, 1743, 1742, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, + + 1743, 1743, 1743, 1743, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 825, 825, 825, 825, 825, 825, 825, 825, + 825, 825, 825, 825, 825, 825, 825, 825, + + 825, 825, 825, 825, 825, 825, 825, 199, + 199, 199, 199, 828, 828, 828, 828, 828, + 828, 828, 828, 828, 828, 828, 828, 828, + 828, 828, 828, 828, 828, 828, 828, 828, + + 828, 828, 828, 828, 828, 828, 828, 828, + 828, 828, 828, 828, 828, 828, 828, 828, + 828, 828, 828, 828, 828, 828, 828, 828, + 828, 828, 828, 828, 199, 199, 199, 199, + + 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, + 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, + 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, + 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, + + 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, + 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, + 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, + 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, + + 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, + 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, + 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, + 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, + + 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, + 1746, 1746, 1746, 1746, 1746, 1746, 1551, 1551, + 1746, 1551, 1746, 1551, 1551, 1746, 1746, 1746, + 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1551, + + 1746, 1551, 1746, 1551, 1551, 1746, 1746, 1551, + 1551, 1551, 1746, 1746, 1746, 1746, 1747, 1747, + 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, + 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, + + 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, + 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, + 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, + 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, + + 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, + 1748, 1748, 1748, 1749, 1749, 1749, 1550, 1550, + 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, + 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, + + 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, + 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, + 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, + 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, + + 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, + 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, + 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, + 1750, 1750, 1550, 1550, 1550, 1550, 1550, 1550, + + 1751, 1752, 1753, 1754, 1755, 1756, 1756, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 1757, 1758, 1759, 1760, 1761, + 199, 199, 199, 199, 199, 1762, 1763, 1764, + + 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, + 1765, 1766, 1764, 1764, 1764, 1764, 1764, 1764, + 1764, 1764, 1764, 1764, 1764, 1764, 1764, 296, + 1764, 1764, 1764, 1764, 1764, 296, 1764, 296, + + 1764, 1764, 296, 1764, 1764, 296, 1764, 1764, + 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1765, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1768, 1768, 1768, 1768, 1768, 1768, + 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, + + 1768, 1768, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1501, 1228, + + 342, 342, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 342, 342, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 342, 342, 342, 342, 342, 342, 342, 342, + 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, + 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, + + 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, + 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1770, 334, 342, 342, + + 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, + 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, + 1772, 1773, 1774, 1775, 1776, 1777, 1777, 1778, + 1779, 1780, 199, 199, 199, 199, 199, 199, + + 170, 170, 170, 170, 1085, 1085, 1085, 985, + 985, 985, 985, 985, 985, 985, 199, 199, + 1781, 1782, 1782, 1783, 1783, 1784, 1785, 1784, + 1785, 1784, 1785, 1784, 1785, 1784, 1785, 1784, + + 1785, 1784, 1785, 1784, 1785, 1513, 1513, 1786, + 1787, 1781, 1781, 1781, 1781, 1783, 1783, 1783, + 1788, 1789, 1790, 199, 1791, 1792, 1793, 1793, + 1782, 1281, 1282, 1281, 1282, 1281, 1282, 1794, + + 1781, 1781, 1795, 1796, 1797, 1798, 1799, 199, + 1781, 1284, 1242, 1781, 199, 199, 199, 199, + 1767, 1767, 1767, 1800, 1767, 342, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, + 1767, 1767, 1767, 1767, 1767, 342, 342, 1801, + + 199, 1793, 1781, 1794, 1284, 1242, 1781, 1802, + 1281, 1282, 1781, 1795, 1788, 1796, 1790, 1803, + 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, + 1812, 1813, 1792, 1791, 1814, 1799, 1815, 1793, + + 1781, 1816, 1816, 1816, 1816, 1816, 1816, 1816, + 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, + 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, + 1816, 1816, 1816, 1817, 1781, 1818, 1819, 1783, + + 1819, 1820, 1820, 1820, 1820, 1820, 1820, 1820, + 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, + 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, + 1820, 1820, 1820, 1817, 1799, 1818, 1799, 1821, + + 1822, 1823, 1281, 1282, 1824, 1825, 1826, 1827, + 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, + 1828, 1826, 1826, 1826, 1826, 1826, 1826, 1826, + 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, + + 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, + 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, + 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, + 1826, 1826, 1826, 1826, 1826, 1826, 1829, 1829, + + 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, + 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, + 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, + 1830, 1830, 1830, 1830, 1830, 1830, 1830, 199, + + 199, 199, 1830, 1830, 1830, 1830, 1830, 1830, + 199, 199, 1830, 1830, 1830, 1830, 1830, 1830, + 199, 199, 1830, 1830, 1830, 1830, 1830, 1830, + 199, 199, 1830, 1830, 1830, 199, 199, 199, + + 1831, 1284, 1799, 1819, 1509, 1284, 1284, 199, + 1303, 1280, 1280, 1280, 1280, 1303, 1303, 199, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1832, 1832, 1832, 1833, 51, 1834, 1834, + + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + 1835, 1835, 1835, 1835, 199, 1835, 1835, 1835, + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 199, + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + 1835, 1835, 1835, 199, 1835, 1835, 199, 1835, + + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + 1835, 1835, 1835, 1835, 1835, 1835, 199, 199, + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + 1835, 1835, 1835, 1835, 1835, 1835, 199, 199, + + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, + 1835, 1835, 1835, 199, 199, 199, 199, 199, + + 1836, 1837, 1836, 199, 199, 199, 199, 1838, + 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, + 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, + 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, + + 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, + 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, + 1838, 1838, 1838, 1838, 199, 199, 199, 1839, + 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, + + 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, + 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, + 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, + 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, + + 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, + 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, + 1840, 1840, 1840, 1840, 1840, 1841, 1841, 1841, + 1841, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1841, 1843, 1844, 199, 199, 199, + 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, + 1390, 1390, 1390, 1390, 199, 199, 199, 199, + + 1844, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + + 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + 1325, 1325, 1325, 1325, 1325, 1088, 199, 199, + + 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, + 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, + 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, + 1845, 1845, 1845, 1845, 1845, 199, 199, 199, + + 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, + 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, + 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, + 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, + + 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, + 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, + 1846, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 985, 1847, 1847, 1847, 1847, 1847, 1847, 1847, + 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, + 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, + 1847, 1847, 1847, 1847, 199, 199, 199, 199, + + 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, + 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, + 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, + 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1849, + + 1850, 1850, 1850, 1850, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, + 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, + + 1851, 1852, 1851, 1851, 1851, 1851, 1851, 1851, + 1851, 1851, 1852, 199, 199, 199, 199, 199, + 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, + 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, + + 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, + 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, + 1853, 1853, 1853, 1853, 1853, 1853, 1854, 1854, + 1854, 1854, 1854, 199, 199, 199, 199, 199, + + 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, + 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, + 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, + 1855, 1855, 1855, 1855, 1855, 1855, 199, 1856, + + 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, + 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, + 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, + 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, + + 1857, 1857, 1857, 1857, 199, 199, 199, 199, + 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, + 1858, 1859, 1859, 1859, 1859, 1859, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, + 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, + 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, + 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, + + 1860, 1860, 1860, 1860, 1860, 1860, 1861, 1861, + 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, + 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, + 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, + + 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, + 1862, 1862, 1862, 1862, 1862, 1862, 1863, 1863, + 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, + 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, + + 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, + 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, + 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, + 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, + + 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, + 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, + 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, + 1865, 1865, 1865, 1865, 1865, 1865, 199, 199, + + 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, + 1874, 1875, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, + 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, + 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, + 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, + + 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, + 199, 199, 199, 199, 199, 199, 199, 199, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + + 1877, 1877, 1877, 1877, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 1878, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, + 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, + 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, + 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, + + 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, + 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, + 1879, 1879, 1879, 1879, 1879, 1879, 1879, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, + 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, + 1879, 1879, 1879, 1879, 1879, 1879, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1880, 1880, 1880, 1880, 1880, 1880, 296, 296, + 1880, 296, 1880, 1880, 1880, 1880, 1880, 1880, + 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, + 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, + + 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, + 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, + 1880, 1880, 1880, 1880, 1880, 1880, 296, 1880, + 1880, 296, 296, 296, 1880, 296, 296, 1880, + + 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, + 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, + 1881, 1881, 1881, 1881, 1881, 1881, 296, 1882, + 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, + + 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, + 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, + 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1885, + 1885, 1886, 1886, 1886, 1886, 1886, 1886, 1886, + + 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, + 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, + 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, + 1887, 1887, 1887, 1887, 1887, 1887, 1887, 296, + + 296, 296, 296, 296, 296, 296, 296, 1888, + 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + + 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, + 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, + 1889, 1889, 1889, 1889, 1889, 1889, 1890, 1890, + 1890, 1890, 1891, 1891, 296, 296, 296, 1892, + + 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, + 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, + 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, + 1893, 1893, 296, 296, 296, 296, 296, 1894, + + 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, + 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, + 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, + 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, + + 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, + 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, + 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, + 296, 296, 296, 296, 296, 296, 1896, 1896, + + 1897, 1898, 1898, 1898, 296, 1898, 1898, 296, + 296, 296, 296, 296, 1898, 1899, 1898, 1900, + 1897, 1897, 1897, 1897, 296, 1897, 1897, 1897, + 296, 1897, 1897, 1897, 1897, 1897, 1897, 1897, + + 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, + 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, + 1897, 1897, 1897, 1897, 296, 296, 296, 296, + 1900, 1901, 1899, 296, 296, 296, 296, 1902, + + 1903, 1904, 1905, 1906, 1907, 1907, 1907, 1907, + 296, 296, 296, 296, 296, 296, 296, 296, + 1908, 1908, 1908, 1908, 1908, 1908, 1909, 1909, + 1910, 296, 296, 296, 296, 296, 296, 296, + + 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, + 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, + 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, + 1911, 1911, 1911, 1911, 1911, 1912, 1912, 1913, + + 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, + 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, + 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, + 1914, 1914, 1914, 1914, 1914, 1915, 1915, 1915, + + 1916, 1916, 1916, 1916, 1916, 1917, 1918, 1917, + 1919, 1917, 1917, 1918, 1918, 1920, 1917, 1917, + 1917, 1917, 1917, 1916, 1916, 1916, 1916, 1920, + 1916, 1916, 1916, 1916, 1916, 1917, 1916, 1916, + + 1916, 1917, 1918, 1918, 1917, 1921, 1922, 296, + 296, 296, 296, 1923, 1923, 1923, 1923, 1924, + 1925, 1925, 1925, 1925, 1925, 1925, 1926, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + + 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, + 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, + 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, + 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, + + 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, + 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, + 1927, 1927, 1927, 1927, 1927, 1927, 296, 296, + 296, 1928, 1928, 1928, 1928, 1928, 1928, 1928, + + 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, + 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, + 1929, 1929, 1929, 1929, 1929, 1929, 296, 296, + 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, + + 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, + 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, + 1931, 1931, 1931, 296, 296, 296, 296, 296, + 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, + + 1933, 1934, 1933, 1934, 1934, 1934, 1933, 1933, + 1933, 1934, 1933, 1933, 1934, 1933, 1934, 1934, + 1933, 1934, 296, 296, 296, 296, 296, 296, + 296, 1935, 1935, 1935, 1935, 296, 296, 296, + + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 1936, 1936, 1936, 1936, 1937, 1937, 1938, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + + 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, + 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, + 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, + 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, + + 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, + 1939, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + + 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, + 1948, 1949, 1949, 1949, 1949, 1949, 1949, 1949, + 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, + 1949, 1949, 1949, 1949, 1949, 1949, 1949, 296, + + 1950, 1951, 1950, 1952, 1952, 1952, 1952, 1952, + 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, + 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, + 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, + 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, + 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, + 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, + 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, + 1951, 1951, 1951, 1951, 1951, 1951, 1953, 1954, + 1954, 1955, 1955, 1955, 1955, 1955, 199, 199, + 199, 199, 1956, 1957, 1958, 1959, 1960, 1961, + 1962, 1963, 1964, 1965, 1965, 1965, 1965, 1965, + 1965, 1965, 1965, 1965, 1965, 1965, 1966, 1967, + 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 1976, + 1977, 1977, 1978, 1979, 1979, 1979, 1979, 1979, + 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, + 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, + 1979, 1979, 1980, 1979, 1980, 1979, 1979, 1979, + 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, + 1979, 1979, 1979, 1980, 1979, 1979, 1979, 1979, + 1978, 1978, 1978, 1977, 1977, 1977, 1977, 1978, + 1978, 1981, 1982, 1983, 1983, 1984, 1985, 1985, + 1985, 1985, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, + 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, + 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, + 1986, 199, 199, 199, 199, 199, 199, 199, + 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, + 1995, 1996, 199, 199, 199, 199, 199, 199, + + 1997, 1997, 1997, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, + 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1999, + 2000, 2000, 2000, 2000, 2001, 2000, 2002, 2002, + 2000, 2000, 2000, 2003, 2003, 199, 2004, 2005, + 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, + 2014, 2015, 2015, 2015, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, + 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, + 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, + 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, + 2016, 2016, 2016, 2017, 2018, 2019, 2016, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 2020, 2020, 2021, 2022, 2022, 2022, 2022, 2022, + 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, + 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, + 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, + 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, + 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, + 2022, 2022, 2022, 2021, 2021, 2021, 2020, 2020, + 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2021, + 2023, 2022, 2022, 2022, 2022, 2024, 2024, 2025, + 2026, 199, 199, 199, 199, 2027, 199, 199, + 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, + 2036, 2037, 2038, 199, 199, 199, 199, 199, + 199, 2039, 2039, 2039, 2039, 2039, 2039, 2039, + 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, + 2039, 2039, 2039, 2039, 2039, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, + 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, + 2040, 2040, 199, 2040, 2040, 2040, 2040, 2040, + 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, + 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, + 2040, 2040, 2040, 2040, 2041, 2041, 2041, 2042, + 2042, 2042, 2041, 2041, 2042, 2043, 2044, 2042, + 2045, 2045, 2046, 2045, 2045, 2046, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, + 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2048, + 2049, 2049, 2049, 2048, 2048, 2048, 2048, 2048, + 2048, 2050, 2051, 199, 199, 199, 199, 199, + 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, + 2060, 2061, 199, 199, 199, 199, 199, 199, + + 199, 2062, 2063, 2063, 199, 2064, 2064, 2064, + 2064, 2064, 2064, 2064, 2064, 199, 199, 2064, + 2064, 199, 199, 2064, 2064, 2064, 2064, 2064, + 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, + 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, + 2064, 199, 2064, 2064, 2064, 2064, 2064, 2064, + 2064, 199, 2064, 2064, 199, 2064, 2064, 2064, + 2064, 2064, 199, 199, 2065, 2064, 2066, 2063, + 2062, 2063, 2063, 2063, 2063, 199, 199, 2063, + 2063, 199, 199, 2067, 2067, 2068, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 2066, + 199, 199, 199, 199, 199, 2064, 2064, 2064, + 2064, 2064, 2063, 2063, 199, 199, 2069, 2069, + 2069, 2069, 2069, 2069, 2069, 199, 199, 199, + 2069, 2069, 2069, 2069, 2069, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, + 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, + 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, + 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, + 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, + 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, + 2071, 2072, 2072, 2073, 2073, 2073, 2073, 2073, + 2073, 2072, 2074, 2075, 2075, 2071, 2075, 2073, + 2073, 2072, 2076, 2077, 2070, 2070, 2078, 2070, + 199, 199, 199, 199, 199, 199, 199, 199, + 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, + 2087, 2088, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, + 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, + 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, + 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, + 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, + 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2090, + 2091, 2091, 2092, 2092, 2092, 2092, 199, 199, + 2091, 2091, 2093, 2093, 2092, 2092, 2091, 2094, + 2095, 2096, 2097, 2097, 2098, 2098, 2099, 2099, + 2099, 2097, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, + 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, + 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, + 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, + 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, + 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, + 2101, 2101, 2101, 2102, 2102, 2102, 2102, 2102, + 2102, 2102, 2102, 2101, 2101, 2102, 2101, 2103, + 2102, 2104, 2104, 2105, 2100, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, + 2114, 2115, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, + 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, + 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, + 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, + 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, + 2116, 2116, 2116, 2117, 2118, 2117, 2118, 2118, + 2117, 2117, 2117, 2117, 2117, 2117, 2119, 2120, + 199, 199, 199, 199, 199, 199, 199, 199, + 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, + 2129, 2130, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, + 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, + 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, + 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, + 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, + 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, + 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, + 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, + 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, + 2141, 2142, 2143, 2143, 2143, 2143, 2143, 2143, + 2143, 2143, 2143, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 2144, + + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, + 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, + 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, + 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, + 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, + 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, + 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, + 2145, 199, 199, 199, 199, 199, 199, 199, + + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, + 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2147, + 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, + 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, + 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, + 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, + 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, + 2147, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, + 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, + 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, + 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, + 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, + 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, + 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, + 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, + 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, + 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, + 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, + 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, + 2148, 2148, 2148, 2149, 2149, 2149, 2149, 2149, + 2149, 2149, 2149, 2149, 2149, 2149, 2149, 199, + 2150, 2150, 2150, 2150, 2151, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2153, 2153, 2153, 2154, 2154, 2154, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2154, 2152, 2152, 2152, 2153, 2154, + 2153, 2154, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2153, 2154, 2154, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 199, 199, 199, 199, 199, 199, 199, + 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, + 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, + 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, + 2156, 2156, 2156, 2156, 2156, 2156, 2156, 199, + 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2164, + 2165, 2166, 199, 199, 199, 199, 2167, 2167, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, 2168, 2168, 199, 199, + 2169, 2169, 2169, 2169, 2169, 2170, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, + 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, + 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, + 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, + 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, + 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, + 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2173, + 2173, 2174, 2175, 2175, 2176, 2176, 2176, 2176, + 2177, 2177, 2177, 2177, 2173, 2176, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, + 2186, 2187, 199, 2188, 2188, 2188, 2188, 2188, + 2188, 2188, 199, 2171, 2171, 2171, 2171, 2171, + 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, + 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, + 199, 199, 199, 199, 199, 2171, 2171, 2171, + 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, + 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, + 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, + 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, + 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, + 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, + 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, + 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, + 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, + 2189, 2189, 2189, 2189, 2189, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 2189, 2190, 2190, 2190, 2190, 2190, 2190, 2190, + 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, + 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, + 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, + 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, + 2190, 2190, 2190, 2190, 2190, 2190, 2190, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 2191, + 2191, 2191, 2191, 2192, 2192, 2192, 2192, 2192, + 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 2193, 2194, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 199, 199, 199, 199, 199, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 2195, 2195, 2195, 199, 199, 199, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 199, 199, 199, 199, 199, 199, 199, + 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, + 2195, 2195, 199, 199, 2196, 2197, 2198, 2199, + 2200, 2200, 2200, 2200, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 199, + 199, 1325, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2202, 2202, + 2202, 2202, 2202, 2202, 2202, 2203, 2204, 2205, + 2205, 2205, 2201, 2201, 2201, 2206, 2203, 2203, + 2203, 2203, 2203, 2207, 2207, 2207, 2207, 2207, + 2207, 2207, 2207, 2208, 2208, 2208, 2208, 2208, + 2208, 2208, 2208, 2201, 2201, 2209, 2209, 2209, + 2209, 2209, 2208, 2208, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2209, 2209, 2209, 2209, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2202, 2202, 2202, 2202, 2202, + 2202, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, + 2201, 2201, 2201, 2201, 2201, 2201, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, + 1842, 1842, 2210, 2210, 2210, 1842, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1357, 1357, 1357, 1357, 1357, 1357, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, + 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, + 2211, 2211, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 199, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2212, 199, 2212, 2212, + 199, 199, 2212, 199, 199, 2212, 2212, 199, + 199, 2212, 2212, 2212, 2212, 199, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2213, 2213, + 2213, 2213, 199, 2213, 199, 2213, 2213, 2213, + 2213, 2214, 2213, 2213, 199, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + + 2213, 2213, 2213, 2213, 2212, 2212, 199, 2212, + 2212, 2212, 2212, 199, 199, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 199, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 199, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2212, 2212, 199, 2212, 2212, 2212, 2212, 199, + 2212, 2212, 2212, 2212, 2212, 199, 2212, 199, + 199, 199, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 199, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 1317, 1317, 199, 199, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2215, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2216, 2213, 2213, 2213, 2213, + 2213, 2213, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2215, 2213, 2213, 2213, 2213, + + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2216, 2213, 2213, + 2213, 2213, 2213, 2213, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2215, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2216, + 2213, 2213, 2213, 2213, 2213, 2213, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2215, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2216, 2213, 2213, 2213, 2213, 2213, 2213, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, + 2212, 2215, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, + 2213, 2213, 2213, 2216, 2213, 2213, 2213, 2213, + 2213, 2213, 2217, 2218, 199, 199, 2219, 2220, + 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, + 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, + 2227, 2228, 2219, 2220, 2221, 2222, 2223, 2224, + 2225, 2226, 2227, 2228, 2219, 2220, 2221, 2222, + 2223, 2224, 2225, 2226, 2227, 2228, 2219, 2220, + 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, + + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, + 2229, 2229, 2229, 2229, 2229, 296, 296, 2230, + 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, + 2231, 2231, 2231, 2231, 2231, 2231, 2231, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, + + 2232, 2232, 2232, 2232, 342, 2232, 2232, 2232, + 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, + 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, + 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, + 342, 2232, 2232, 342, 2232, 342, 342, 2232, + 342, 2232, 2232, 2232, 2232, 2232, 2232, 2232, + 2232, 2232, 2232, 342, 2232, 2232, 2232, 2232, + 342, 2232, 342, 2232, 342, 342, 342, 342, + 342, 342, 2232, 342, 342, 342, 342, 2232, + 342, 2232, 342, 2232, 342, 2232, 2232, 2232, + 342, 2232, 2232, 342, 2232, 342, 342, 2232, + 342, 2232, 342, 2232, 342, 2232, 342, 2232, + 342, 2232, 2232, 342, 2232, 342, 342, 2232, + 2232, 2232, 2232, 342, 2232, 2232, 2232, 2232, + 2232, 2232, 2232, 342, 2232, 2232, 2232, 2232, + 342, 2232, 2232, 2232, 2232, 342, 2232, 342, + 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, + 2232, 2232, 342, 2232, 2232, 2232, 2232, 2232, + 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, + 2232, 2232, 2232, 2232, 342, 342, 342, 342, + 342, 2232, 2232, 2232, 342, 2232, 2232, 2232, + 2232, 2232, 342, 2232, 2232, 2232, 2232, 2232, + 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, + 2232, 2232, 2232, 2232, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + 2233, 2233, 342, 342, 342, 342, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, + + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 199, 199, 199, 199, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 199, + 199, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1394, + 199, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 199, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 2234, 2234, 2235, 2236, 2237, 2238, 2239, 2240, + 2241, 2242, 2243, 2244, 2244, 199, 199, 199, + 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, + 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, + 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, + 2245, 2245, 2245, 2245, 2245, 2245, 2245, 199, + 2246, 2247, 2246, 2246, 2246, 2246, 2246, 2246, + 2246, 2246, 2246, 2246, 2246, 2247, 2246, 2247, + 2246, 2246, 2247, 2246, 2246, 2246, 2247, 2246, + 2246, 2246, 2245, 2245, 2245, 2245, 2245, 2248, + 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2250, + 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2250, + 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, + 2249, 2249, 2251, 2251, 199, 199, 199, 199, + 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, + 2249, 2250, 2249, 2250, 2250, 2249, 2249, 2250, + 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, + 2249, 2249, 772, 772, 772, 772, 2252, 2252, + 2245, 2252, 2252, 2252, 2252, 2252, 2252, 2252, + 2252, 2252, 2252, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 2253, 2253, + 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, + 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, + 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, + + 2254, 2255, 2255, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, + 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, + 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, + 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, + 1543, 1543, 2255, 2255, 2255, 2255, 2255, 2255, + 2255, 2255, 2255, 199, 199, 199, 199, 199, + 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, + 1543, 199, 199, 199, 199, 199, 199, 199, + 2255, 2255, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 199, 199, 199, + 1361, 1361, 1361, 1361, 1361, 1361, 1394, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1394, 199, 199, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1362, 1362, 1394, 1394, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1360, 1360, 1361, + 1361, 1361, 1361, 1361, 1360, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1394, 1361, 1361, + 1361, 1361, 1361, 1394, 1394, 1394, 1394, 199, + 199, 199, 199, 199, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1394, + 1361, 1394, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1360, 1361, 1360, 1361, 1360, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1360, + 1361, 1360, 1360, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1394, 1361, 1361, 1361, 1361, 1394, 1394, 199, + + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1362, 1362, + 2256, 2256, 2256, 2256, 1362, 1362, 1362, 1362, + 1362, 1362, 1394, 199, 199, 199, 199, 199, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 199, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 199, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1362, 1362, 1362, 1362, + 1362, 1362, 1394, 1361, 1361, 1361, 1361, 1361, + + 2257, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 2257, 1361, 1361, 1361, 2257, 1361, 2257, + 1361, 2257, 1361, 2257, 1361, 1361, 1361, 2257, + 1361, 1361, 1361, 1361, 1361, 1361, 2257, 2257, + 1361, 1361, 1361, 1361, 2257, 1361, 2257, 2257, + 1361, 1361, 1361, 1361, 2257, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1394, 1394, 199, 199, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 2258, 2258, + 2258, 2259, 2259, 2259, 1362, 1362, 1362, 1362, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + 1394, 1394, 1394, 1394, 1394, 199, 199, 199, + 1394, 1394, 1394, 1394, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + 1360, 1360, 1360, 1360, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 199, 199, 199, 199, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 199, 199, 199, 199, 199, 199, 199, 199, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 199, 199, 199, 199, 199, 199, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 199, 199, 199, 199, 199, 199, 199, 199, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, + 1362, 1362, 1362, 1362, 1362, 1362, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 2260, 2260, + + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, + 2261, 2261, 2261, 2261, 2261, 2261, 2261, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554, + 1554, 1554, 1554, 1554, 1554, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, + 2262, 2262, 2262, 2262, 2262, 2262, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, + 2263, 2263, 2263, 2263, 2263, 2263, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, + 1550, 1550, 1550, 1550, 1550, 1550, 2260, 2260, + + 1265, 2207, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, + 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, + 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, + 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, + 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, + 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, + 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, + 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, + 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, + 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, + 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, + 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, + + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, + 2265, 2265, 2265, 2265, 2265, 2265, 2260, 2260, +}; + +#define GET_PROP_INDEX(ucs4) \ + (ucs4 < 0x11000 \ + ? (uc_property_trie[uc_property_trie[ucs4>>5] + (ucs4 & 0x1f)]) \ + : (uc_property_trie[uc_property_trie[((ucs4 - 0x11000)>>8) + 0x880] + (ucs4 & 0xff)])) + +#define GET_PROP_INDEX_UCS2(ucs2) \ + (uc_property_trie[uc_property_trie[ucs2>>5] + (ucs2 & 0x1f)]) + +static const Properties uc_properties[] = { + { 9, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 21, 2 }, + { 9, 8, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 5, 17, 2 }, + { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 2, 2, 34, 2 }, + { 9, 8, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 5, 35, 2 }, + { 9, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 5, 35, 2 }, + { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 33, 2 }, + { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 21, 2 }, + { 9, 8, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 21, 2 }, + { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 5, 32, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 6, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 13, 3, 2 }, + { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 9, 2 }, + { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 9, 13, 3, 2 }, + { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 2, 2 }, + { 26, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 9, 2 }, + { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 11, 8, 2 }, + { 20, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 16, 2 }, + { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 10, 8, 2 }, + { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 7, 2 }, + { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 8, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 0, 8, 2 }, + { 26, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 0, 0, 8, 7, 12, 3 }, + { 21, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 0, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 9, 2 }, + { 22, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 2, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 19, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 15, 0, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 17, 2 }, + { 22, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 1, 2 }, + { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 3, 35, 2 }, + { 6, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 5, 4, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, + { 23, 10, 0, 0, -1, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, + { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 17, 2 }, + { 29, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 2 }, + { 26, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 9, 2 }, + { 5, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 18, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 743, 0, 743, 0, 775, 1, 80, 0, 8, 6, 12, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 0, 12, 2 }, + { 5, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 24, 10, 0, 0, -1, -16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 17, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 80, 1, 77, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 17, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 121, 0, 121, 0, 0, 1, 17, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 17, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 17, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 83, 0, 0, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -232, 0, -232, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 80, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 162, 1, 162, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, -121, 0, 0, 0, 0, 0, -121, 1, 17, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -300, 0, -300, 0, -268, 1, 80, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 195, 0, 195, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 210, 0, 0, 0, 0, 0, 210, 1, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 206, 0, 0, 0, 0, 0, 206, 1, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 205, 0, 0, 0, 0, 0, 205, 1, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 79, 0, 0, 0, 0, 0, 79, 1, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 202, 0, 0, 0, 0, 0, 202, 1, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 203, 0, 0, 0, 0, 0, 203, 1, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 207, 0, 0, 0, 0, 0, 207, 1, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 97, 0, 97, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 211, 0, 0, 0, 0, 0, 211, 1, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 209, 0, 0, 0, 0, 0, 209, 1, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 163, 0, 163, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 213, 0, 0, 0, 0, 0, 213, 1, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 130, 0, 130, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 214, 0, 0, 0, 0, 0, 214, 1, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 218, 0, 0, 0, 0, 0, 218, 1, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 217, 0, 0, 0, 0, 0, 217, 1, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 219, 0, 0, 0, 0, 0, 219, 1, 0, 0, 8, 7, 12, 3 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 56, 0, 56, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 2, 0, 0, 0, 1, 0, 2, 1, 80, 0, 8, 7, 12, 3 }, + { 16, 0, 0, 0, -1, 0, 0, 1, 0, -1, 0, 0, 0, 1, 1, 80, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -2, 0, -1, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -79, 0, -79, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 173, 1, 173, 0, 0, 1, 17, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, -97, 0, 0, 0, 0, 0, -97, 4, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, -56, 0, 0, 0, 0, 0, -56, 4, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 4, 17, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 4, 17, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 4, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 4, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, -130, 0, 0, 0, 0, 0, -130, 6, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 8, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 8, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 8, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, -163, 0, 0, 0, 0, 0, -163, 8, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 3, 0, 0, 0, 0, 1, 3, 8, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 5, 1, 5, 0, 0, 8, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 7, 1, 7, 0, 0, 8, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 9, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, -195, 0, 0, 0, 0, 0, -195, 9, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 69, 0, 0, 0, 0, 0, 69, 9, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 71, 0, 0, 0, 0, 0, 71, 9, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 9, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 9, 1, 9, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 11, 1, 11, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 13, 1, 13, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -210, 0, -210, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -206, 0, -206, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -205, 0, -205, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -202, 0, -202, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -203, 0, -203, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 15, 1, 15, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 17, 1, 17, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -207, 0, -207, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 19, 1, 19, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 21, 1, 21, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -209, 0, -209, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -211, 0, -211, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 23, 1, 23, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 25, 1, 25, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 27, 1, 27, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -213, 0, -213, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -214, 0, -214, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 29, 1, 29, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -218, 0, -218, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 31, 1, 31, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -69, 0, -69, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -217, 0, -217, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -71, 0, -71, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -219, 0, -219, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 33, 1, 33, 0, 0, 1, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 6, 12, 3 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, + { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 2 }, + { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 18, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 0, 12, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 18, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 36 }, + { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 232, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 216, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 }, + { 0, 17, 202, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 }, + { 0, 17, 202, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 }, + { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 4, 4, 4, 21, 1 }, + { 0, 17, 240, 5, -1, 0, 0, 0, 0, 84, 0, 84, 0, 116, 1, 204, 4, 4, 4, 21, 1 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 4, 1 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 232, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 233, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 4, 1 }, + { 0, 17, 234, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 4, 1 }, + { 0, 17, 233, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 4, 1 }, + { 0, 17, 234, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 4, 1 }, + { 0, 17, 233, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 4, 1 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 1 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 10, 0, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 10, 0, 0, 8, 6, 12, 4 }, + { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 4 }, + { 13, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 130, 0, 130, 0, 0, 9, 0, 0, 8, 6, 12, 4 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 13, 0, 8, 2 }, + { 14, 0, 0, 0, -1, 0, 0, 116, 0, 0, 0, 0, 0, 116, 16, 0, 0, 8, 7, 12, 4 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 4 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 81, 0, 0, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 0, 38, 0, 0, 0, 0, 0, 38, 1, 17, 0, 8, 7, 12, 4 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 12, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 0, 37, 0, 0, 0, 0, 0, 37, 1, 17, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, 64, 0, 0, 0, 0, 0, 64, 1, 17, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, 63, 0, 0, 0, 0, 0, 63, 1, 17, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 165, 1, 165, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 0, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 17, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -38, 0, -38, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -37, 0, -37, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 169, 1, 169, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 0, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -31, 0, -31, 0, 1, 1, 0, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -64, 0, -64, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -63, 0, -63, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, 8, 0, 0, 0, 0, 0, 8, 10, 0, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -62, 0, -62, 0, -30, 1, 80, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -57, 0, -57, 0, -25, 1, 80, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 81, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -47, 0, -47, 0, -15, 1, 80, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -54, 0, -54, 0, -22, 1, 80, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -8, 0, -8, 0, 0, 4, 0, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 6, 0, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 6, 0, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 4, 0, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 8, 7, 12, 46 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 0, 0, 8, 6, 12, 46 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -86, 0, -86, 0, -54, 1, 80, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -80, 0, -80, 0, -48, 1, 80, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 7, 0, 7, 0, 0, 1, 80, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -116, 0, -116, 0, 0, 1, 0, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -60, 0, 0, 0, 0, 0, -60, 5, 80, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -96, 0, -96, 0, -64, 5, 80, 0, 8, 6, 12, 4 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 7, 0, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 7, 0, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -7, 0, 0, 0, 0, 0, -7, 7, 80, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -130, 0, 0, 0, 0, 0, -130, 8, 0, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, 80, 0, 0, 0, 0, 0, 80, 4, 17, 0, 8, 7, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 80, 0, 0, 0, 0, 0, 80, 1, 17, 0, 8, 7, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 80, 0, 0, 0, 0, 0, 80, 1, 0, 0, 8, 7, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 0, 0, 8, 7, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 17, 0, 8, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 0, 0, 8, 6, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 17, 0, 8, 6, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -80, 0, -80, 0, 0, 4, 17, 0, 8, 6, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -80, 0, -80, 0, 0, 1, 17, 0, 8, 6, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -80, 0, -80, 0, 0, 1, 0, 0, 8, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 8, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 0, 0, 8, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 17, 0, 8, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 17, 0, 8, 6, 12, 5 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 5 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 5 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 5 }, + { 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 6, 0, 0, 8, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 6, 0, 0, 8, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 4, 0, 0, 8, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 4, 0, 0, 8, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 15, 0, 0, 0, 0, 0, 15, 1, 0, 0, 8, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -15, 0, -15, 0, 0, 9, 0, 0, 8, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 4, 17, 0, 8, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 4, 17, 0, 8, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 8, 0, 0, 8, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 8, 0, 0, 8, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 9, 0, 0, 8, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 9, 0, 0, 8, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 10, 0, 0, 8, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 10, 0, 0, 8, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 11, 0, 0, 8, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 11, 0, 0, 8, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 12, 0, 0, 8, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 12, 0, 0, 8, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 16, 0, 0, 8, 7, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 16, 0, 0, 8, 6, 12, 5 }, + { 14, 0, 0, 0, -1, 0, 0, 48, 0, 0, 0, 0, 0, 48, 1, 0, 0, 8, 7, 12, 6 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 6 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 6 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 12, 6 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -48, 0, -48, 0, 0, 1, 0, 0, 8, 6, 12, 6 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 129, 1, 126, 0, 0, 1, 80, 0, 8, 6, 12, 6 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 12, 8, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 6 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 6 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 9, 6 }, + { 13, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 222, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 228, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 10, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 11, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 12, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 13, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 14, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 15, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 16, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 17, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 18, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 19, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 19, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 20, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 21, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 22, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 20, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 17, 7 }, + { 0, 17, 23, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 7 }, + { 0, 17, 24, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 0, 17, 25, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 6, 7 }, + { 0, 17, 18, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 7 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 7, 8, 13, 7 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 7 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 0, 12, 7 }, + { 10, 5, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 3, 4, 4, 12, 8 }, + { 10, 5, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 3, 4, 4, 12, 8 }, + { 10, 5, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 3, 4, 4, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 8 }, + { 26, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 8 }, + { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 10, 8 }, + { 27, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 10, 8 }, + { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 13, 11, 8, 8 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 8 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 8 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 8 }, + { 0, 17, 30, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 8 }, + { 0, 17, 31, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 8 }, + { 0, 17, 32, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 8 }, + { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 6, 2 }, + { 10, 13, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 4, 4, 21, 2 }, + { 13, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0 }, + { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 6, 8 }, + { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 6, 2 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 8 }, + { 17, 13, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 2 }, + { 0, 17, 27, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 28, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 29, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 30, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 31, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 32, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 33, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 34, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 204, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 204, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 8 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 8 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 8 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 8 }, + { 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 5, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 5, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 5, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 5, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 5, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 5, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 3, 5, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 }, + { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 8 }, + { 25, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, + { 25, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 9, 11, 8 }, + { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 8 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 8 }, + { 0, 17, 35, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 8 }, + { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 6, 8 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 8 }, + { 10, 5, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 8 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 8 }, + { 17, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 8 }, + { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, + { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, + { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, + { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, + { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, + { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, + { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, + { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, + { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, + { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 }, + { 29, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 8 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 8 }, + { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 12, 9 }, + { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 9 }, + { 10, 13, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 3, 4, 4, 12, 9 }, + { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 9 }, + { 0, 17, 36, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 9 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 9 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 9 }, + { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 9 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 9 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 9 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 10 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 10 }, + { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 10 }, + { 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, + { 3, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, + { 3, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, + { 3, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, + { 3, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, + { 3, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, + { 3, 1, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, + { 3, 1, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, + { 3, 1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, + { 3, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 }, + { 18, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 66 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 66 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 66 }, + { 17, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 66 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 66 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 66 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 13, 11, 8, 66 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 6, 66 }, + { 17, 1, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 66 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 82 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 82 }, + { 17, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 82 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 82 }, + { 18, 1, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 95 }, + { 18, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 95 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 95 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 95 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 95 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 8 }, + { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 8 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 8 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 8 }, + { 0, 17, 27, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 8 }, + { 0, 17, 28, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 8 }, + { 0, 17, 29, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 8 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 8 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 11 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 11 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 8, 8, 12, 11 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 11 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 4, 4, 21, 11 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 11 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 11 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 11 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 11 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 17, 11 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 11 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 11 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 12 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 12 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 12 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 12 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 12 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 12 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 12 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 7, 4, 4, 21, 12 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 12 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 12 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 12 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 12 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 12 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 12 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 12 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 9, 12 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 13 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 13 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 4, 4, 21, 13 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 13 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 13 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 13 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 13 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 13 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 13 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 14 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 14 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 14 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 14 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 14 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 14 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 14 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 14 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 9, 14 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 15 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 15 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 15 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 15 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 15 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 15 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 15 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 7, 4, 4, 21, 15 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 15 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 15 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 15 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 15 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 15 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 16 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 16 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 8, 8, 12, 16 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 16 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 16 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 16 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 7, 4, 4, 21, 16 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 16 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 16 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 16 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 16 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 16 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 9, 16 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 17 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 17 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 17 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 17 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 17 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 17 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 4, 4, 21, 17 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 17 }, + { 0, 17, 84, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 17 }, + { 0, 17, 91, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 17 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 17 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 17 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 17 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 18 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 18 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 18 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 18 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 18 }, + { 0, 0, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 18 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 7, 4, 4, 21, 18 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 18 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 18 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 18 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 18 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 18 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 19 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 19 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 19 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 19 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 19 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 19 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 19 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 19 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 7, 4, 4, 21, 19 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 19 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 19 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 10, 19 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 4, 4, 21, 20 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 20 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 204, 4, 4, 4, 21, 20 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 204, 4, 4, 4, 21, 20 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 20 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 17, 7, 4, 4, 21, 20 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 20 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 30, 21 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 21 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 7, 0, 8, 30, 21 }, + { 0, 17, 103, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 21 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 21 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 30, 21 }, + { 0, 17, 107, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 21 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 21 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 17, 21 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 30, 22 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 22 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 7, 0, 8, 30, 22 }, + { 0, 17, 118, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 22 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 30, 22 }, + { 0, 17, 122, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 22 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 8, 30, 22 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 8, 30, 22 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 8, 8, 12, 23 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 18, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 18, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 12, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 4, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 17, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 80, 0, 0, 0, 4, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 6, 23 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 12, 23 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 12, 23 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 17, 23 }, + { 0, 17, 216, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, + { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 13, 0, 23 }, + { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 13, 1, 23 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 7, 4, 4, 21, 23 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 85, 0, 8, 8, 12, 23 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 23 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 23 }, + { 0, 17, 129, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, + { 0, 17, 130, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 85, 4, 4, 4, 21, 23 }, + { 0, 17, 132, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 80, 4, 4, 4, 21, 23 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 7, 4, 4, 17, 23 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 23 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 23 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 23 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 23 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 23 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 23 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 18, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 17, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 18, 23 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 23 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 2 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 4, 23 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 8, 30, 24 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 8, 30, 24 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 17, 0, 0, 8, 30, 24 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 4, 4, 30, 24 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 4, 4, 30, 24 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 30, 24 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 204, 4, 4, 4, 30, 24 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 4, 4, 30, 24 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 30, 24 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 30, 24 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 30, 24 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 30, 24 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 30, 24 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 17, 24 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 24 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 30, 24 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 4, 4, 30, 24 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 24 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 30, 24 }, + { 14, 0, 0, 0, -1, 0, 0, 7264, 0, 0, 0, 0, 0, 7264, 1, 0, 0, 8, 7, 12, 25 }, + { 14, 0, 0, 0, -1, 0, 0, 7264, 0, 0, 0, 0, 0, 7264, 13, 0, 0, 8, 7, 12, 25 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 25 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 25 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 25 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 8, 12, 25 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 25 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8, 8, 8, 25, 26 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 8, 8, 8, 25, 26 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9, 8, 8, 26, 26 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 9, 8, 8, 26, 26 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 9, 8, 8, 26, 26 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 10, 8, 8, 27, 26 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 8, 8, 27, 26 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 10, 8, 8, 27, 26 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 27 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 27 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 27 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 27 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 27 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 27 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 12, 27 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 27 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 28 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 29 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 29 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 29 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 12, 29 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 29 }, + { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5, 17, 30 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 30 }, + { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 13, 0, 30 }, + { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 13, 1, 30 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 31 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 2 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 31 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 31 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 42 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 42 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 42 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 43 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 43 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 43 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 17, 2 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 44 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 44 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 45 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 45 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 8, 30, 32 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 30, 32 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 4, 4, 30, 32 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 30, 32 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 32 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 5, 32 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 8, 30, 32 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 32 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 9, 32 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 30, 32 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 32 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 33 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 11, 6, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 6, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 33 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 18, 33 }, + { 25, 10, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 33 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 11, 6, 33 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 6, 33 }, + { 25, 10, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 33 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 33 }, + { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 3, 4, 4, 4, 33 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 }, + { 18, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 33 }, + { 17, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 33 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 33 }, + { 0, 17, 228, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 33 }, + { 18, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 33 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 47 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 47 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 47 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 4, 4, 21, 47 }, + { 0, 17, 222, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 47 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 47 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 47 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 47 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12, 6, 47 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 8, 30, 48 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 8, 30, 56 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 56 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 4, 4, 30, 56 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 4, 4, 30, 56 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 }, + { 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 30, 56 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 30, 56 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 32 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 55 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 55 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 55 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 4, 4, 21, 55 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 55 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 55 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 78 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 30, 78 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 78 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 78 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 4, 4, 30, 78 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 78 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 78 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 30, 78 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 78 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 30, 78 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 1 }, + { 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 62 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 4, 4, 21, 62 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 62 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 17, 0, 8, 8, 12, 62 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 62 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 204, 7, 4, 4, 21, 62 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 17, 7, 4, 4, 21, 62 }, + { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 4, 4, 21, 62 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 17, 62 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 62 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 17, 62 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 62 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 62 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 62 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 67 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 67 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 67 }, + { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 67 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 67 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 67 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 67 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 93 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 93 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 4, 4, 21, 93 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 93 }, + { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 4, 4, 21, 93 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 93 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 68 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 68 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 68 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 68 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 68 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 17, 68 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 69 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 69 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 69 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 67 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 1 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 2 }, + { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 1 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 2 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 2 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 2 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 1 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 6, 12, 5 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 8, 6, 12, 3 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 6, 12, 3 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 8, 6, 12, 4 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 6, 12, 5 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 35, 1, 35, 0, 0, 8, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 3814, 0, 3814, 0, 0, 8, 0, 0, 8, 6, 12, 3 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 6, 12, 3 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 6, 12, 4 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 234, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 214, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 202, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 233, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 1 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 176, 1, 176, 0, 0, 1, 17, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 179, 1, 179, 0, 0, 1, 17, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 182, 1, 182, 0, 0, 1, 17, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 185, 1, 185, 0, 0, 1, 17, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 188, 1, 188, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -59, 0, -59, 0, -58, 2, 81, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, -7615, 0, 0, 0, 0, 0, -7615, 10, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 10, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 10, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 8, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -8, 0, 0, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 191, 1, 191, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 194, 1, 194, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 198, 1, 198, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 202, 1, 202, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 74, 0, 74, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 74, 0, 74, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 86, 0, 86, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 86, 0, 86, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 100, 0, 100, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 100, 0, 100, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 128, 0, 128, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 128, 0, 128, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 112, 0, 112, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 112, 0, 112, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 126, 0, 126, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 126, 0, 126, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 240, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 243, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 246, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 249, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 252, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 255, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 258, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 261, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 240, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 243, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 246, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 249, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 252, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 255, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 258, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 261, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 264, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 267, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 270, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 273, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 276, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 279, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 282, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 285, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 264, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 267, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 270, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 273, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 276, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 279, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 282, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 285, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 288, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 291, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 294, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 297, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 300, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 303, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 306, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 309, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 288, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 291, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 294, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 297, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 300, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 303, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 306, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -8, 1, 309, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 324, 1, 321, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 312, 0, 9, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 330, 1, 327, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 206, 1, 206, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 361, 1, 357, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -74, 0, 0, 0, 0, 0, -74, 1, 17, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -74, 0, 0, 0, 0, 0, -74, 1, 85, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -9, 1, 312, 0, 0, 0, -9, 1, 17, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -7205, 0, -7205, 0, -7173, 1, 85, 0, 8, 6, 12, 4 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 81, 0, 0, 0, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 336, 1, 333, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 315, 0, 9, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 342, 1, 339, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 209, 1, 209, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 369, 1, 365, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -86, 0, 0, 0, 0, 0, -86, 1, 17, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -86, 0, 0, 0, 0, 0, -86, 1, 85, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -9, 1, 315, 0, 0, 0, -9, 1, 17, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 212, 1, 212, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 165, 1, 165, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 216, 1, 216, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 219, 1, 219, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -100, 0, 0, 0, 0, 0, -100, 1, 17, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -100, 0, 0, 0, 0, 0, -100, 1, 85, 0, 8, 7, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 223, 1, 223, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 169, 1, 169, 0, 0, 1, 85, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 227, 1, 227, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 7, 0, 7, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 230, 1, 230, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 233, 1, 233, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -112, 0, 0, 0, 0, 0, -112, 1, 17, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -112, 0, 0, 0, 0, 0, -112, 1, 85, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -7, 0, 0, 0, 0, 0, -7, 1, 17, 0, 8, 7, 12, 4 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 0, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 348, 1, 345, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 318, 0, 9, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 354, 1, 351, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 237, 1, 237, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 377, 1, 373, 0, 0, 1, 17, 0, 8, 6, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -128, 0, 0, 0, 0, 0, -128, 1, 17, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -128, 0, 0, 0, 0, 0, -128, 1, 85, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -126, 0, 0, 0, 0, 0, -126, 1, 17, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 0, -126, 0, 0, 0, 0, 0, -126, 1, 85, 0, 8, 7, 12, 4 }, + { 16, 0, 0, 0, -1, 0, 0, -9, 1, 318, 0, 0, 0, -9, 1, 17, 0, 8, 7, 12, 4 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 0, 18, 4 }, + { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 5, 17, 2 }, + { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 5, 17, 2 }, + { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 5, 4, 2 }, + { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 4, 20, 2 }, + { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 10, 18, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 10, 0, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, + { 10, 1, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 17, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 4, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 17, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 19, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 23, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 13, 3, 2 }, + { 24, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 13, 3, 2 }, + { 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 0, 2 }, + { 23, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, + { 24, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 11, 10, 15, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 15, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 0, 17, 2 }, + { 7, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 3, 35, 2 }, + { 8, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 3, 35, 2 }, + { 10, 11, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, + { 10, 14, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, + { 10, 16, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, + { 10, 12, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, + { 10, 15, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, + { 6, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 80, 0, 0, 5, 4, 2 }, + { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 10, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 10, 2 }, + { 23, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, + { 24, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 12, 5, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 5, 2 }, + { 26, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 0, 8, 2 }, + { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 12, 5, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 80, 0, 0, 12, 5, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 }, + { 19, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 15, 0, 12, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 17, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 0, 12, 2 }, + { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 5, 17, 2 }, + { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 3, 4, 4, 22, 2 }, + { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 3, 4, 4, 12, 2 }, + { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 3, 4, 4, 12, 2 }, + { 13, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 12, 0 }, + { 10, 19, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 4, 4, 21, 2 }, + { 10, 20, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 4, 4, 21, 2 }, + { 10, 21, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 4, 4, 21, 2 }, + { 10, 22, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 4, 4, 21, 2 }, + { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 }, + { 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 8, 6, 12, 3 }, + { 5, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 26, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 1, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 80, 0, 8, 6, 12, 3 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 9, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 9, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 9, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 9, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 9, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 9, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 10, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 9, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 9, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 9, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 10, 2 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 9, 2 }, + { 13, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0 }, + { 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 1 }, + { 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 1 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 7, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 10, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 9, 2 }, + { 14, 0, 0, 0, -1, 0, 0, -7517, 0, 0, 0, 0, 0, -7517, 1, 85, 0, 8, 7, 12, 4 }, + { 14, 0, 0, 0, -1, 0, 1, 37, 0, 0, 0, 0, 1, 37, 1, 85, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 39, 0, 0, 0, 0, 1, 39, 1, 85, 0, 8, 7, 12, 3 }, + { 29, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 0, 28, 0, 0, 0, 0, 0, 28, 1, 0, 0, 8, 7, 12, 3 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 80, 0, 8, 6, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 0, 0, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 6, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 8, 6, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 8, 7, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -28, 0, -28, 0, 0, 9, 0, 0, 8, 6, 12, 3 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, + { 4, 0, 0, 0, -1, 0, 0, 16, 0, 0, 0, 0, 0, 16, 1, 80, 0, 8, 7, 12, 3 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, -16, 0, -16, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 3 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 3 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 2016, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 138, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 1824, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 2104, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 2108, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 2106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -138, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -8, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -7, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 14, 2 }, + { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 13, 1, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 14, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 26, 0, 0, 0, 0, 0, 26, 1, 80, 0, 8, 7, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, -26, 0, -26, 0, 0, 1, 80, 0, 8, 6, 12, 2 }, + { 5, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 14, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 14, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 14, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 14, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 14, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 13, 3, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 6, 2 }, + { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 13, 1, 2 }, + { 5, 10, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, + { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 13, 1, 2 }, + { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 13, 1, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 54 }, + { 21, 10, 0, 0, -1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 13, 1, 2 }, + { 21, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, -3, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 13, 1, 2 }, + { 26, 10, 0, 0, -1, -1824, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -2016, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 85, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -2104, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -2106, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, -2108, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 0, 48, 0, 0, 0, 0, 0, 48, 8, 0, 0, 8, 7, 12, 57 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -48, 0, -48, 0, 0, 8, 0, 0, 8, 6, 12, 57 }, + { 14, 0, 0, 0, -1, 0, 1, 41, 0, 0, 0, 0, 1, 41, 9, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, -3814, 0, 0, 0, 0, 0, -3814, 9, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 43, 0, 0, 0, 0, 1, 43, 9, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 45, 1, 45, 0, 0, 9, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 47, 1, 47, 0, 0, 9, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 49, 0, 0, 0, 0, 1, 49, 10, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 51, 0, 0, 0, 0, 1, 51, 10, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 53, 0, 0, 0, 0, 1, 53, 10, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 55, 0, 0, 0, 0, 1, 55, 11, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 6, 12, 3 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 80, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 57, 0, 0, 0, 0, 1, 57, 11, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 59, 0, 0, 0, 0, 1, 59, 11, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 8, 0, 0, 8, 7, 12, 46 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 8, 0, 0, 8, 6, 12, 46 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 46 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 46 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 11, 0, 0, 8, 7, 12, 46 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 11, 0, 0, 8, 6, 12, 46 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 46 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 13, 0, 0, 8, 7, 12, 46 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 13, 0, 0, 8, 6, 12, 46 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 6, 46 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 17, 46 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 46 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -7264, 0, -7264, 0, 0, 8, 0, 0, 8, 6, 12, 25 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -7264, 0, -7264, 0, 0, 13, 0, 0, 8, 6, 12, 25 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 58 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 58 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 8, 12, 58 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 17, 58 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 58 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 13, 3, 2 }, + { 23, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 13, 3, 2 }, + { 24, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 13, 3, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 17, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 17, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 }, + { 23, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 13, 3, 2 }, + { 24, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 13, 3, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 6, 2 }, + { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 17, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 19, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 17, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 17, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 17, 2 }, + { 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 13, 0, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 14, 37 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 80, 0, 0, 0, 14, 37 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 14, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 14, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 5, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 14, 2 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 14, 37 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 5, 2 }, + { 22, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 1, 2 }, + { 0, 17, 218, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 228, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 222, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 }, + { 1, 0, 224, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 26 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 14, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 14, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 21, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 80, 0, 0, 8, 14, 37 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 5, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 5, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 14, 2 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 5, 34 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 14, 34 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 8, 14, 34 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 8, 5, 34 }, + { 0, 17, 8, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 6, 0, 5, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 5, 34 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 8, 5, 34 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 8, 14, 34 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 6, 0, 5, 2 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 5, 35 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 14, 35 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 6, 8, 14, 35 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 5, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 5, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 5, 35 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 6, 8, 5, 35 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 6, 8, 14, 35 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 14, 36 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 14, 36 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 14, 26 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 14, 2 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 14, 36 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 14, 36 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 6, 8, 5, 35 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 26 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 0, 0, 14, 26 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 14, 2 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 0, 0, 14, 2 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 0, 14, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 0, 14, 26 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 6, 0, 14, 35 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 8, 14, 37 }, + { 13, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 14, 38 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 5, 38 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 14, 38 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 14, 38 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 83 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 83 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 83 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 17, 83 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 70 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 70 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 17, 70 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 6, 70 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 70 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 5 }, + { 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 5 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 5 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 5 }, + { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 5 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 80, 0, 8, 6, 12, 5 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 84 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 84 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 84 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 84 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 17, 84 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 84 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 }, + { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 1, 61, 0, 0, 0, 0, 1, 61, 10, 0, 0, 8, 7, 12, 3 }, + { 28, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 1, 63, 0, 0, 0, 0, 1, 63, 12, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 12, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 12, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 13, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 13, 0, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 16, 0, 0, 8, 7, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 16, 0, 0, 8, 6, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 65, 0, 0, 0, 0, 1, 65, 13, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 67, 0, 0, 0, 0, 1, 67, 16, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 69, 0, 0, 0, 0, 1, 69, 16, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 71, 0, 0, 0, 0, 1, 71, 16, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 73, 0, 0, 0, 0, 1, 73, 16, 0, 0, 8, 7, 12, 3 }, + { 14, 0, 0, 0, -1, 0, 1, 75, 0, 0, 0, 0, 1, 75, 16, 0, 0, 8, 7, 12, 3 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 3 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 80, 0, 8, 6, 12, 3 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 3 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 59 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 59 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 59 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 4, 4, 21, 59 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 59 }, + { 29, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 2 }, + { 18, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 65 }, + { 18, 0, 0, 4, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 65 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 65 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 18, 65 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 6, 65 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 71 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 71 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 71 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 71 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 11 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 11 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 72 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 72 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 72 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 17, 2 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 72 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 73 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 73 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 73 }, + { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 73 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 73 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 85 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 85 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 85 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 85 }, + { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 85 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 85 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 85 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 17, 85 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 2 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 8, 30, 24 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 30, 24 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 8, 30, 24 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 77 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 77 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 77 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 77 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 77 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 24 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 24 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 30, 24 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 4, 30, 24 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 79 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 79 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 79 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 79 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 30, 79 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 86 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 86 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 86 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 17, 86 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 86 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 86 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 27 }, + { 28, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 80, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 6, 12, 4 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 86 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 86 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 86 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 17, 86 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 86 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 17, 11, 8, 8, 23, 26 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 17, 12, 8, 8, 24, 26 }, + { 11, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 31, 0 }, + { 12, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 0 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 85, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 85, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 85, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 85, 0, 0, 8, 14, 37 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 89, 1, 86, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 95, 1, 92, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 101, 1, 98, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 108, 1, 104, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 116, 1, 112, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 123, 1, 120, 0, 0, 1, 80, 0, 8, 6, 12, 3 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 135, 1, 132, 0, 0, 1, 80, 0, 8, 6, 12, 6 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 141, 1, 138, 0, 0, 1, 80, 0, 8, 6, 12, 6 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 147, 1, 144, 0, 0, 1, 80, 0, 8, 6, 12, 6 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 153, 1, 150, 0, 0, 1, 80, 0, 8, 6, 12, 6 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 1, 159, 1, 156, 0, 0, 1, 80, 0, 8, 6, 12, 6 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 85, 0, 7, 8, 13, 7 }, + { 0, 17, 26, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 7, 8, 13, 7 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 7, 8, 13, 7 }, + { 26, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 7 }, + { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 12, 8 }, + { 28, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 8 }, + { 13, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 12, 0 }, + { 27, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 0, 10, 8 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 1 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 13, 11, 8, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 11, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 0, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 12, 11, 8, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 13, 0, 8, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 0, 6, 2 }, + { 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 13, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 0, 15, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 11, 14, 2 }, + { 19, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 15, 0, 14, 2 }, + { 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 1, 2 }, + { 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 0, 13, 1, 2 }, + { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 13, 11, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 11, 14, 2 }, + { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 11, 10, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 13, 0, 5, 2 }, + { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 12, 11, 5, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 12, 6, 2 }, + { 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 26, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 20, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 11, 14, 2 }, + { 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 8 }, + { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 22, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 11, 0, 14, 2 }, + { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 26, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 26, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 80, 0, 8, 7, 14, 3 }, + { 21, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 1, 2 }, + { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 80, 0, 8, 6, 14, 3 }, + { 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 13, 0, 2 }, + { 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 13, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 12, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 11, 1, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 5, 2 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 6, 8, 12, 35 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 6, 8, 5, 35 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 6, 8, 5, 2 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 4, 4, 4, 5, 2 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 12, 26 }, + { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 10, 2 }, + { 10, 10, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 3, 4, 4, 21, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 29, 2 }, + { 13, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 0 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 49 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 17, 2 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 17, 2 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 }, + { 4, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 4 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 4 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 4 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 4 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 4 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 74 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 75 }, + { 5, 2, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 2 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 8, 8, 12, 39 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 39 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 12, 39 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 8, 8, 12, 40 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 8, 8, 12, 40 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 120 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 120 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 50 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 17, 50 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 60 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 17, 60 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 60 }, + { 14, 0, 0, 0, -1, 0, 0, 40, 0, 0, 0, 0, 0, 40, 5, 0, 0, 8, 7, 12, 41 }, + { 14, 0, 0, 0, -1, 0, 0, 40, 0, 0, 0, 0, 0, 40, 7, 0, 0, 8, 7, 12, 41 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -40, 0, -40, 0, 0, 5, 0, 0, 8, 6, 12, 41 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -40, 0, -40, 0, 0, 7, 0, 0, 8, 6, 12, 41 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 51 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 52 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 106 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 103 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 103 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 110 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 53 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 87 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 87 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 87 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 118 }, + { 29, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 118 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 118 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 117 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 117 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 64 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 64 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 64 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 17, 64 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 76 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 76 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 98 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 97 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 61 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 61 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 61 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 61 }, + { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 61 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 61 }, + { 5, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 61 }, + { 5, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 61 }, + { 5, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 61 }, + { 5, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 61 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 61 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 17, 61 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 17, 61 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 61 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 88 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 88 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 88 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 116 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 116 }, + { 18, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 112 }, + { 18, 1, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 112 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 112 }, + { 29, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 112 }, + { 18, 1, 0, 4, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 112 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 112 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 112 }, + { 5, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 112 }, + { 5, 1, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 112 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 17, 112 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 15, 112 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 80 }, + { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 80 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 89 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 89 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 90 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 90 }, + { 18, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 121 }, + { 18, 1, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 121 }, + { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 121 }, + { 5, 1, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 121 }, + { 5, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 121 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 121 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 91 }, + { 5, 5, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, + { 5, 5, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, + { 5, 5, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, + { 5, 5, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, + { 5, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, + { 5, 5, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, + { 5, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, + { 5, 5, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, + { 5, 5, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, + { 5, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 4, 4, 21, 94 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 94 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 94 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 94 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 17, 94 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 94 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 92 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 92 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 92 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 17, 0, 8, 8, 12, 92 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 92 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 204, 4, 4, 4, 21, 92 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 92 }, + { 10, 0, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 3, 4, 4, 12, 92 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 17, 92 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 101 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 96 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 96 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 204, 4, 4, 4, 21, 96 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 96 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 96 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 17, 4, 4, 4, 21, 96 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 96 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 17, 96 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 17, 96 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 111 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 111 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 111 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 18, 111 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 100 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 100 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 100 }, + { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 100 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 17, 100 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 100 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 17, 100 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 12, 100 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 100 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 20 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 109 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 109 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 109 }, + { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 109 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 109 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 17, 109 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 109 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 123 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 123 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 123 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 123 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 123 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 107 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 107 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 107 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 107 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 204, 4, 4, 4, 21, 107 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17, 7, 4, 4, 21, 107 }, + { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 107 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 107 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 124 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 204, 4, 4, 4, 21, 124 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 124 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 124 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 204, 4, 4, 4, 21, 124 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17, 7, 4, 4, 21, 124 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 124 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 124 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 124 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 122 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 204, 4, 4, 4, 21, 122 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 122 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 122 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17, 7, 4, 4, 21, 122 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 122 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 122 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 18, 122 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 17, 122 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 6, 122 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 122 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 114 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 114 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 114 }, + { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 114 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 17, 114 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 114 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 102 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 102 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 102 }, + { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 102 }, + { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 102 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 }, + { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 16, 0, 0, 8, 7, 12, 125 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 16, 0, 0, 8, 6, 12, 125 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 125 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 125 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 119 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 63 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 63 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 63 }, + { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 63 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 17, 63 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 17, 63 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 81 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 0, 81 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 1, 81 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 84 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 115 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 17, 115 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 104 }, + { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 104 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 17, 104 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 108 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 108 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 17, 108 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 17, 108 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 108 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 108 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 108 }, + { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 }, + { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 }, + { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 }, + { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 }, + { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 }, + { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 }, + { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 }, + { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 }, + { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 }, + { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 108 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 99 }, + { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 99 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 99 }, + { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 99 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 6, 8, 14, 35 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 8, 14, 34 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 105 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 105 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 105 }, + { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 105 }, + { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 17, 105 }, + { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 3, 4, 4, 21, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 85, 0, 0, 0, 12, 2 }, + { 1, 0, 216, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 4, 4, 4, 21, 2 }, + { 1, 0, 216, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 7, 4, 4, 21, 2 }, + { 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 4, 4, 4, 21, 1 }, + { 1, 0, 226, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 7, 4, 4, 21, 2 }, + { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 3, 4, 4, 21, 2 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 4, 4, 4, 21, 1 }, + { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 4 }, + { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 8, 7, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 8, 6, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 8, 6, 12, 2 }, + { 26, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 0, 0, 12, 2 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 0, 0, 12, 2 }, + { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 80, 0, 8, 7, 12, 2 }, + { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 80, 0, 8, 6, 12, 2 }, + { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, + { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 }, + { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 113 }, + { 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 113 }, + { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 113 }, + { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 80, 0, 8, 8, 12, 8 }, + { 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 8 }, + { 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, + { 5, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, + { 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 80, 0, 8, 7, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 8, 7, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 80, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 7, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 7, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 80, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 5, 5, 0, 28, 2 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 14, 34 }, + { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 80, 0, 0, 0, 14, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 14, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 13, 3, 2 }, + { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 5, 2 }, + { 13, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 12, 0 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 8, 14, 37 }, + { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 85, 0, 0, 8, 14, 37 }, + { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 1 }, + { 12, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 12, 0 } +}; + +Q_DECL_CONST_FUNCTION static inline const Properties *qGetProp(uint ucs4) Q_DECL_NOTHROW +{ + const int index = GET_PROP_INDEX(ucs4); + return uc_properties + index; +} + +Q_DECL_CONST_FUNCTION static inline const Properties *qGetProp(ushort ucs2) Q_DECL_NOTHROW +{ + const int index = GET_PROP_INDEX_UCS2(ucs2); + return uc_properties + index; +} + +Q_DECL_CONST_FUNCTION Q_CORE_EXPORT const Properties * QT_FASTCALL properties(uint ucs4) Q_DECL_NOTHROW +{ + return qGetProp(ucs4); +} + +Q_DECL_CONST_FUNCTION Q_CORE_EXPORT const Properties * QT_FASTCALL properties(ushort ucs2) Q_DECL_NOTHROW +{ + return qGetProp(ucs2); +} + +Q_CORE_EXPORT GraphemeBreakClass QT_FASTCALL graphemeBreakClass(uint ucs4) Q_DECL_NOTHROW +{ + return (GraphemeBreakClass)qGetProp(ucs4)->graphemeBreakClass; +} + +Q_CORE_EXPORT WordBreakClass QT_FASTCALL wordBreakClass(uint ucs4) Q_DECL_NOTHROW +{ + return (WordBreakClass)qGetProp(ucs4)->wordBreakClass; +} + +Q_CORE_EXPORT SentenceBreakClass QT_FASTCALL sentenceBreakClass(uint ucs4) Q_DECL_NOTHROW +{ + return (SentenceBreakClass)qGetProp(ucs4)->sentenceBreakClass; +} + +Q_CORE_EXPORT LineBreakClass QT_FASTCALL lineBreakClass(uint ucs4) Q_DECL_NOTHROW +{ + return (LineBreakClass)qGetProp(ucs4)->lineBreakClass; +} + + +static const ushort specialCaseMap[] = { + 0x0, // placeholder + 0x1, 0x2c65, + 0x1, 0x2c66, + 0x1, 0x2c7e, + 0x1, 0x2c7f, + 0x1, 0x2c6f, + 0x1, 0x2c6d, + 0x1, 0x2c70, + 0x1, 0xa7ab, + 0x1, 0xa7ac, + 0x1, 0xa78d, + 0x1, 0xa7aa, + 0x1, 0x2c62, + 0x1, 0xa7ad, + 0x1, 0x2c6e, + 0x1, 0x2c64, + 0x1, 0xa7b1, + 0x1, 0xa7b0, + 0x1, 0xa77d, + 0x1, 0x6b, + 0x1, 0xe5, + 0x1, 0x26b, + 0x1, 0x27d, + 0x1, 0x23a, + 0x1, 0x23e, + 0x1, 0x251, + 0x1, 0x271, + 0x1, 0x250, + 0x1, 0x252, + 0x1, 0x23f, + 0x1, 0x240, + 0x1, 0x1d79, + 0x1, 0x265, + 0x1, 0x266, + 0x1, 0x25c, + 0x1, 0x261, + 0x1, 0x26c, + 0x1, 0x29e, + 0x1, 0x287, + 0x2, 0x53, 0x73, + 0x2, 0x53, 0x53, + 0x2, 0x69, 0x307, + 0x2, 0x46, 0x66, + 0x2, 0x46, 0x46, + 0x2, 0x46, 0x69, + 0x2, 0x46, 0x49, + 0x2, 0x46, 0x6c, + 0x2, 0x46, 0x4c, + 0x3, 0x46, 0x66, 0x69, + 0x3, 0x46, 0x46, 0x49, + 0x3, 0x46, 0x66, 0x6c, + 0x3, 0x46, 0x46, 0x4c, + 0x2, 0x53, 0x74, + 0x2, 0x53, 0x54, + 0x2, 0x535, 0x582, + 0x2, 0x535, 0x552, + 0x2, 0x544, 0x576, + 0x2, 0x544, 0x546, + 0x2, 0x544, 0x565, + 0x2, 0x544, 0x535, + 0x2, 0x544, 0x56b, + 0x2, 0x544, 0x53b, + 0x2, 0x54e, 0x576, + 0x2, 0x54e, 0x546, + 0x2, 0x544, 0x56d, + 0x2, 0x544, 0x53d, + 0x2, 0x2bc, 0x4e, + 0x3, 0x399, 0x308, 0x301, + 0x3, 0x3a5, 0x308, 0x301, + 0x2, 0x4a, 0x30c, + 0x2, 0x48, 0x331, + 0x2, 0x54, 0x308, + 0x2, 0x57, 0x30a, + 0x2, 0x59, 0x30a, + 0x2, 0x41, 0x2be, + 0x2, 0x3a5, 0x313, + 0x3, 0x3a5, 0x313, 0x300, + 0x3, 0x3a5, 0x313, 0x301, + 0x3, 0x3a5, 0x313, 0x342, + 0x2, 0x391, 0x342, + 0x2, 0x397, 0x342, + 0x3, 0x399, 0x308, 0x300, + 0x2, 0x399, 0x342, + 0x3, 0x399, 0x308, 0x342, + 0x3, 0x3a5, 0x308, 0x300, + 0x2, 0x3a1, 0x313, + 0x2, 0x3a5, 0x342, + 0x3, 0x3a5, 0x308, 0x342, + 0x2, 0x3a9, 0x342, + 0x2, 0x1f08, 0x399, + 0x2, 0x1f09, 0x399, + 0x2, 0x1f0a, 0x399, + 0x2, 0x1f0b, 0x399, + 0x2, 0x1f0c, 0x399, + 0x2, 0x1f0d, 0x399, + 0x2, 0x1f0e, 0x399, + 0x2, 0x1f0f, 0x399, + 0x2, 0x1f28, 0x399, + 0x2, 0x1f29, 0x399, + 0x2, 0x1f2a, 0x399, + 0x2, 0x1f2b, 0x399, + 0x2, 0x1f2c, 0x399, + 0x2, 0x1f2d, 0x399, + 0x2, 0x1f2e, 0x399, + 0x2, 0x1f2f, 0x399, + 0x2, 0x1f68, 0x399, + 0x2, 0x1f69, 0x399, + 0x2, 0x1f6a, 0x399, + 0x2, 0x1f6b, 0x399, + 0x2, 0x1f6c, 0x399, + 0x2, 0x1f6d, 0x399, + 0x2, 0x1f6e, 0x399, + 0x2, 0x1f6f, 0x399, + 0x2, 0x391, 0x399, + 0x2, 0x397, 0x399, + 0x2, 0x3a9, 0x399, + 0x2, 0x1fba, 0x345, + 0x2, 0x1fba, 0x399, + 0x2, 0x386, 0x345, + 0x2, 0x386, 0x399, + 0x2, 0x1fca, 0x345, + 0x2, 0x1fca, 0x399, + 0x2, 0x389, 0x345, + 0x2, 0x389, 0x399, + 0x2, 0x1ffa, 0x345, + 0x2, 0x1ffa, 0x399, + 0x2, 0x38f, 0x345, + 0x2, 0x38f, 0x399, + 0x3, 0x391, 0x342, 0x345, + 0x3, 0x391, 0x342, 0x399, + 0x3, 0x397, 0x342, 0x345, + 0x3, 0x397, 0x342, 0x399, + 0x3, 0x3a9, 0x342, 0x345, + 0x3, 0x3a9, 0x342, 0x399 +}; + + +static const unsigned short uc_decomposition_trie[] = { + // 0 - 0x3400 + + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1564, 1580, 1596, 1612, 1628, 1644, + 1660, 1676, 1692, 1708, 1724, 1740, 1756, 1772, + 1548, 1548, 1788, 1804, 1820, 1836, 1852, 1868, + 1884, 1900, 1916, 1932, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1948, 1548, 1964, 1980, 1548, + 1548, 1548, 1548, 1548, 1996, 1548, 1548, 2012, + 2028, 2044, 2060, 2076, 2092, 2108, 1548, 2124, + 2140, 2156, 1548, 2172, 1548, 2188, 1548, 2204, + 1548, 1548, 1548, 1548, 2220, 2236, 2252, 2268, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 2284, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 2300, 1548, 1548, 1548, 1548, 2316, + 1548, 1548, 1548, 1548, 2332, 2348, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 2364, 2380, 1548, 2396, 1548, 1548, + 1548, 1548, 1548, 1548, 2412, 2428, 1548, 1548, + 1548, 1548, 1548, 2444, 1548, 2460, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 2476, 2492, 1548, 1548, + 1548, 2508, 1548, 1548, 2524, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 2540, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 2556, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 2572, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 2588, 1548, 1548, + 1548, 1548, 1548, 2604, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 2620, 1548, 2636, 1548, 1548, + 2652, 1548, 1548, 1548, 2668, 2684, 2700, 2716, + 2732, 2748, 2764, 2780, 1548, 1548, 1548, 1548, + + 1548, 1548, 2796, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 2812, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 2828, 2844, 1548, 2860, 2876, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 2892, 2908, 2924, 2940, 2956, 2972, + 1548, 2988, 3004, 3020, 1548, 1548, 1548, 1548, + 3036, 3052, 3068, 3084, 3100, 3116, 3132, 3148, + 3164, 3180, 3196, 3212, 3228, 3244, 3260, 3276, + 3292, 3308, 3324, 3340, 3356, 3372, 3388, 3404, + 3420, 3436, 3452, 3468, 3484, 3500, 3516, 3532, + + 3548, 3564, 3580, 3596, 3612, 3628, 1548, 3644, + 3660, 3676, 3692, 1548, 1548, 1548, 1548, 1548, + 3708, 3724, 3740, 3756, 3772, 3788, 3804, 3820, + 3836, 3852, 3868, 1548, 3884, 1548, 1548, 1548, + 3900, 1548, 3916, 3932, 3948, 1548, 3964, 3980, + 3996, 1548, 4012, 1548, 1548, 1548, 4028, 1548, + 1548, 1548, 4044, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 4060, 4076, + 4092, 4108, 4124, 4140, 4156, 4172, 4188, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 4204, 1548, 1548, 1548, 1548, 1548, 1548, 4220, + 1548, 1548, 1548, 1548, 1548, 4236, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 4252, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 4268, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, + 1548, 4284, 1548, 1548, 1548, 1548, 1548, 4300, + 4316, 4332, 4348, 4364, 4380, 4396, 4412, 4428, + 4444, 4460, 4476, 4492, 4508, 4524, 1548, 1548, + + 4540, 1548, 1548, 4556, 4572, 4588, 4604, 4620, + 1548, 4636, 4652, 4668, 4684, 4700, 1548, 4716, + 1548, 1548, 1548, 4732, 4748, 4764, 4780, 4796, + 4812, 4828, 1548, 1548, 1548, 1548, 1548, 1548, + 4844, 4860, 4876, 4892, 4908, 4924, 4940, 4956, + 4972, 4988, 5004, 5020, 5036, 5052, 5068, 5084, + 5100, 5116, 5132, 5148, 5164, 5180, 5196, 5212, + 5228, 5244, 5260, 5276, 5292, 5308, 5324, 5340, + + // 0x3400 - 0x30000 + + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5612, 5868, 5356, 5356, 5356, 6124, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + + 5356, 5356, 5356, 5356, 5356, 6380, 6636, 6892, + 7148, 7404, 7660, 7916, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 8172, 8428, 5356, 8684, + 8940, 9196, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 9452, 5356, 5356, + 9708, 9964, 10220, 10476, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 10732, 5356, 5356, 10988, 11244, 5356, + + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + 5356, 5356, 5356, 5356, 5356, 5356, 5356, 5356, + + 5356, 5356, 5356, 5356, 11500, 11756, 12012, 5356, + 5356, 5356, 5356, 5356, + + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2, 0xffff, 0x5, 0xffff, 0xffff, 0xffff, 0xffff, 0x7, + + 0xffff, 0xffff, 0xa, 0xc, 0xe, 0x11, 0xffff, 0xffff, + 0x13, 0x16, 0x18, 0xffff, 0x1a, 0x1e, 0x22, 0xffff, + + 0x26, 0x29, 0x2c, 0x2f, 0x32, 0x35, 0xffff, 0x38, + 0x3b, 0x3e, 0x41, 0x44, 0x47, 0x4a, 0x4d, 0x50, + + 0xffff, 0x53, 0x56, 0x59, 0x5c, 0x5f, 0x62, 0xffff, + 0xffff, 0x65, 0x68, 0x6b, 0x6e, 0x71, 0xffff, 0xffff, + + 0x74, 0x77, 0x7a, 0x7d, 0x80, 0x83, 0xffff, 0x86, + 0x89, 0x8c, 0x8f, 0x92, 0x95, 0x98, 0x9b, 0x9e, + + 0xffff, 0xa1, 0xa4, 0xa7, 0xaa, 0xad, 0xb0, 0xffff, + 0xffff, 0xb3, 0xb6, 0xb9, 0xbc, 0xbf, 0xffff, 0xc2, + + 0xc5, 0xc8, 0xcb, 0xce, 0xd1, 0xd4, 0xd7, 0xda, + 0xdd, 0xe0, 0xe3, 0xe6, 0xe9, 0xec, 0xef, 0xf2, + + 0xffff, 0xffff, 0xf5, 0xf8, 0xfb, 0xfe, 0x101, 0x104, + 0x107, 0x10a, 0x10d, 0x110, 0x113, 0x116, 0x119, 0x11c, + + 0x11f, 0x122, 0x125, 0x128, 0x12b, 0x12e, 0xffff, 0xffff, + 0x131, 0x134, 0x137, 0x13a, 0x13d, 0x140, 0x143, 0x146, + + 0x149, 0xffff, 0x14c, 0x14f, 0x152, 0x155, 0x158, 0x15b, + 0xffff, 0x15e, 0x161, 0x164, 0x167, 0x16a, 0x16d, 0x170, + + 0x173, 0xffff, 0xffff, 0x176, 0x179, 0x17c, 0x17f, 0x182, + 0x185, 0x188, 0xffff, 0xffff, 0x18b, 0x18e, 0x191, 0x194, + + 0x197, 0x19a, 0xffff, 0xffff, 0x19d, 0x1a0, 0x1a3, 0x1a6, + 0x1a9, 0x1ac, 0x1af, 0x1b2, 0x1b5, 0x1b8, 0x1bb, 0x1be, + + 0x1c1, 0x1c4, 0x1c7, 0x1ca, 0x1cd, 0x1d0, 0xffff, 0xffff, + 0x1d3, 0x1d6, 0x1d9, 0x1dc, 0x1df, 0x1e2, 0x1e5, 0x1e8, + + 0x1eb, 0x1ee, 0x1f1, 0x1f4, 0x1f7, 0x1fa, 0x1fd, 0x200, + 0x203, 0x206, 0x209, 0x20c, 0x20f, 0x212, 0x215, 0x218, + + 0x21a, 0x21d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x220, + + 0x223, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0x226, 0x229, 0x22c, 0x22f, + 0x232, 0x235, 0x238, 0x23b, 0x23e, 0x241, 0x244, 0x247, + + 0x24a, 0x24d, 0x250, 0x253, 0x256, 0x259, 0x25c, 0x25f, + 0x262, 0x265, 0x268, 0x26b, 0x26e, 0xffff, 0x271, 0x274, + + 0x277, 0x27a, 0x27d, 0x280, 0xffff, 0xffff, 0x283, 0x286, + 0x289, 0x28c, 0x28f, 0x292, 0x295, 0x298, 0x29b, 0x29e, + + 0x2a1, 0x2a4, 0x2a7, 0x2aa, 0x2ad, 0x2b0, 0xffff, 0xffff, + 0x2b3, 0x2b6, 0x2b9, 0x2bc, 0x2bf, 0x2c2, 0x2c5, 0x2c8, + + 0x2cb, 0x2ce, 0x2d1, 0x2d4, 0x2d7, 0x2da, 0x2dd, 0x2e0, + 0x2e3, 0x2e6, 0x2e9, 0x2ec, 0x2ef, 0x2f2, 0x2f5, 0x2f8, + + 0x2fb, 0x2fe, 0x301, 0x304, 0x307, 0x30a, 0x30d, 0x310, + 0x313, 0x316, 0x319, 0x31c, 0xffff, 0xffff, 0x31f, 0x322, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x325, 0x328, + 0x32b, 0x32e, 0x331, 0x334, 0x337, 0x33a, 0x33d, 0x340, + + 0x343, 0x346, 0x349, 0x34c, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x34f, 0x351, 0x353, 0x355, 0x357, 0x359, 0x35b, 0x35d, + 0x35f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x361, 0x364, 0x367, 0x36a, 0x36d, 0x370, 0xffff, 0xffff, + + 0x373, 0x375, 0x377, 0x379, 0x37b, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x37d, 0x37f, 0xffff, 0x381, 0x383, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0x386, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x388, 0xffff, 0xffff, 0xffff, 0x38b, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0x38d, 0x390, 0x393, 0x396, + 0x398, 0x39b, 0x39e, 0xffff, 0x3a1, 0xffff, 0x3a4, 0x3a7, + + 0x3aa, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x3ad, 0x3b0, 0x3b3, 0x3b6, 0x3b9, 0x3bc, + + 0x3bf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x3c2, 0x3c5, 0x3c8, 0x3cb, 0x3ce, 0xffff, + + 0x3d1, 0x3d3, 0x3d5, 0x3d7, 0x3da, 0x3dd, 0x3df, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x3e1, 0x3e3, 0x3e5, 0xffff, 0x3e7, 0x3e9, 0xffff, 0xffff, + 0xffff, 0x3eb, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x3ed, 0x3f0, 0xffff, 0x3f3, 0xffff, 0xffff, 0xffff, 0x3f6, + 0xffff, 0xffff, 0xffff, 0xffff, 0x3f9, 0x3fc, 0x3ff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x402, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x405, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x408, 0x40b, 0xffff, 0x40e, 0xffff, 0xffff, 0xffff, 0x411, + 0xffff, 0xffff, 0xffff, 0xffff, 0x414, 0x417, 0x41a, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x41d, 0x420, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0x423, 0x426, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x429, 0x42c, 0x42f, 0x432, 0xffff, 0xffff, 0x435, 0x438, + 0xffff, 0xffff, 0x43b, 0x43e, 0x441, 0x444, 0x447, 0x44a, + + 0xffff, 0xffff, 0x44d, 0x450, 0x453, 0x456, 0x459, 0x45c, + 0xffff, 0xffff, 0x45f, 0x462, 0x465, 0x468, 0x46b, 0x46e, + + 0x471, 0x474, 0x477, 0x47a, 0x47d, 0x480, 0xffff, 0xffff, + 0x483, 0x486, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x489, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0x48c, 0x48f, 0x492, 0x495, 0x498, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x49b, 0x49e, 0x4a1, + 0x4a4, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x4a7, 0xffff, 0x4aa, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0x4ad, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x4b0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0x4b3, 0xffff, 0xffff, 0x4b6, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x4b9, 0x4bc, 0x4bf, 0x4c2, 0x4c5, 0x4c8, 0x4cb, 0x4ce, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x4d1, 0x4d4, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x4d7, 0x4da, 0xffff, 0x4dd, + + 0xffff, 0xffff, 0xffff, 0x4e0, 0xffff, 0xffff, 0x4e3, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x4e6, 0x4e9, 0x4ec, 0xffff, 0xffff, 0x4ef, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x4f2, 0xffff, 0xffff, 0x4f5, 0x4f8, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x4fb, 0x4fe, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0x501, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x504, 0x507, 0x50a, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x50d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x510, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x513, + 0x516, 0xffff, 0x519, 0x51c, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x51f, 0x522, 0x525, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x528, 0xffff, 0x52b, 0x52e, 0x531, 0xffff, + + 0xffff, 0xffff, 0xffff, 0x534, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0x537, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x53a, 0x53d, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x540, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0x542, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x545, 0xffff, 0xffff, + + 0xffff, 0xffff, 0x548, 0xffff, 0xffff, 0xffff, 0xffff, 0x54b, + 0xffff, 0xffff, 0xffff, 0xffff, 0x54e, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x551, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0x554, 0xffff, 0x557, 0x55a, 0x55d, + 0x560, 0x563, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0x566, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0x569, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x56c, 0xffff, 0xffff, + + 0xffff, 0xffff, 0x56f, 0xffff, 0xffff, 0xffff, 0xffff, 0x572, + 0xffff, 0xffff, 0xffff, 0xffff, 0x575, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x578, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x57b, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x57e, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x580, 0xffff, + 0x583, 0xffff, 0x586, 0xffff, 0x589, 0xffff, 0x58c, 0xffff, + + 0xffff, 0xffff, 0x58f, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x592, 0xffff, 0x595, 0xffff, 0xffff, + + 0x598, 0x59b, 0xffff, 0x59e, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x5a1, 0x5a3, 0x5a5, 0xffff, + + 0x5a7, 0x5a9, 0x5ab, 0x5ad, 0x5af, 0x5b1, 0x5b3, 0x5b5, + 0x5b7, 0x5b9, 0x5bb, 0xffff, 0x5bd, 0x5bf, 0x5c1, 0x5c3, + + 0x5c5, 0x5c7, 0x5c9, 0x5cb, 0x5cd, 0x5cf, 0x5d1, 0x5d3, + 0x5d5, 0x5d7, 0x5d9, 0x5db, 0x5dd, 0x5df, 0xffff, 0x5e1, + + 0x5e3, 0x5e5, 0x5e7, 0x5e9, 0x5eb, 0x5ed, 0x5ef, 0x5f1, + 0x5f3, 0x5f5, 0x5f7, 0x5f9, 0x5fb, 0x5fd, 0x5ff, 0x601, + + 0x603, 0x605, 0x607, 0x609, 0x60b, 0x60d, 0x60f, 0x611, + 0x613, 0x615, 0x617, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x619, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x61b, 0x61d, 0x61f, 0x621, 0x623, + + 0x625, 0x627, 0x629, 0x62b, 0x62d, 0x62f, 0x631, 0x633, + 0x635, 0x637, 0x639, 0x63b, 0x63d, 0x63f, 0x641, 0x643, + + 0x645, 0x647, 0x649, 0x64b, 0x64d, 0x64f, 0x651, 0x653, + 0x655, 0x657, 0x659, 0x65b, 0x65d, 0x65f, 0x661, 0x663, + + 0x665, 0x668, 0x66b, 0x66e, 0x671, 0x674, 0x677, 0x67a, + 0x67d, 0x680, 0x683, 0x686, 0x689, 0x68c, 0x68f, 0x692, + + 0x695, 0x698, 0x69b, 0x69e, 0x6a1, 0x6a4, 0x6a7, 0x6aa, + 0x6ad, 0x6b0, 0x6b3, 0x6b6, 0x6b9, 0x6bc, 0x6bf, 0x6c2, + + 0x6c5, 0x6c8, 0x6cb, 0x6ce, 0x6d1, 0x6d4, 0x6d7, 0x6da, + 0x6dd, 0x6e0, 0x6e3, 0x6e6, 0x6e9, 0x6ec, 0x6ef, 0x6f2, + + 0x6f5, 0x6f8, 0x6fb, 0x6fe, 0x701, 0x704, 0x707, 0x70a, + 0x70d, 0x710, 0x713, 0x716, 0x719, 0x71c, 0x71f, 0x722, + + 0x725, 0x728, 0x72b, 0x72e, 0x731, 0x734, 0x737, 0x73a, + 0x73d, 0x740, 0x743, 0x746, 0x749, 0x74c, 0x74f, 0x752, + + 0x755, 0x758, 0x75b, 0x75e, 0x761, 0x764, 0x767, 0x76a, + 0x76d, 0x770, 0x773, 0x776, 0x779, 0x77c, 0x77f, 0x782, + + 0x785, 0x788, 0x78b, 0x78e, 0x791, 0x794, 0x797, 0x79a, + 0x79d, 0x7a0, 0x7a3, 0x7a6, 0x7a9, 0x7ac, 0x7af, 0x7b2, + + 0x7b5, 0x7b8, 0x7bb, 0x7be, 0x7c1, 0x7c4, 0x7c7, 0x7ca, + 0x7cd, 0x7d0, 0x7d3, 0x7d6, 0x7d9, 0x7dc, 0x7df, 0x7e2, + + 0x7e5, 0x7e8, 0x7eb, 0x7ee, 0x7f1, 0x7f4, 0x7f7, 0x7fa, + 0x7fd, 0x800, 0x803, 0x806, 0x809, 0x80c, 0x80f, 0x812, + + 0x815, 0x818, 0x81b, 0x81e, 0x821, 0x824, 0x827, 0x82a, + 0x82d, 0x830, 0x833, 0x836, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x839, 0x83c, 0x83f, 0x842, 0x845, 0x848, 0x84b, 0x84e, + 0x851, 0x854, 0x857, 0x85a, 0x85d, 0x860, 0x863, 0x866, + + 0x869, 0x86c, 0x86f, 0x872, 0x875, 0x878, 0x87b, 0x87e, + 0x881, 0x884, 0x887, 0x88a, 0x88d, 0x890, 0x893, 0x896, + + 0x899, 0x89c, 0x89f, 0x8a2, 0x8a5, 0x8a8, 0x8ab, 0x8ae, + 0x8b1, 0x8b4, 0x8b7, 0x8ba, 0x8bd, 0x8c0, 0x8c3, 0x8c6, + + 0x8c9, 0x8cc, 0x8cf, 0x8d2, 0x8d5, 0x8d8, 0x8db, 0x8de, + 0x8e1, 0x8e4, 0x8e7, 0x8ea, 0x8ed, 0x8f0, 0x8f3, 0x8f6, + + 0x8f9, 0x8fc, 0x8ff, 0x902, 0x905, 0x908, 0x90b, 0x90e, + 0x911, 0x914, 0x917, 0x91a, 0x91d, 0x920, 0x923, 0x926, + + 0x929, 0x92c, 0x92f, 0x932, 0x935, 0x938, 0x93b, 0x93e, + 0x941, 0x944, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x947, 0x94a, 0x94d, 0x950, 0x953, 0x956, 0x959, 0x95c, + 0x95f, 0x962, 0x965, 0x968, 0x96b, 0x96e, 0x971, 0x974, + + 0x977, 0x97a, 0x97d, 0x980, 0x983, 0x986, 0xffff, 0xffff, + 0x989, 0x98c, 0x98f, 0x992, 0x995, 0x998, 0xffff, 0xffff, + + 0x99b, 0x99e, 0x9a1, 0x9a4, 0x9a7, 0x9aa, 0x9ad, 0x9b0, + 0x9b3, 0x9b6, 0x9b9, 0x9bc, 0x9bf, 0x9c2, 0x9c5, 0x9c8, + + 0x9cb, 0x9ce, 0x9d1, 0x9d4, 0x9d7, 0x9da, 0x9dd, 0x9e0, + 0x9e3, 0x9e6, 0x9e9, 0x9ec, 0x9ef, 0x9f2, 0x9f5, 0x9f8, + + 0x9fb, 0x9fe, 0xa01, 0xa04, 0xa07, 0xa0a, 0xffff, 0xffff, + 0xa0d, 0xa10, 0xa13, 0xa16, 0xa19, 0xa1c, 0xffff, 0xffff, + + 0xa1f, 0xa22, 0xa25, 0xa28, 0xa2b, 0xa2e, 0xa31, 0xa34, + 0xffff, 0xa37, 0xffff, 0xa3a, 0xffff, 0xa3d, 0xffff, 0xa40, + + 0xa43, 0xa46, 0xa49, 0xa4c, 0xa4f, 0xa52, 0xa55, 0xa58, + 0xa5b, 0xa5e, 0xa61, 0xa64, 0xa67, 0xa6a, 0xa6d, 0xa70, + + 0xa73, 0xa76, 0xa78, 0xa7b, 0xa7d, 0xa80, 0xa82, 0xa85, + 0xa87, 0xa8a, 0xa8c, 0xa8f, 0xa91, 0xa94, 0xffff, 0xffff, + + 0xa96, 0xa99, 0xa9c, 0xa9f, 0xaa2, 0xaa5, 0xaa8, 0xaab, + 0xaae, 0xab1, 0xab4, 0xab7, 0xaba, 0xabd, 0xac0, 0xac3, + + 0xac6, 0xac9, 0xacc, 0xacf, 0xad2, 0xad5, 0xad8, 0xadb, + 0xade, 0xae1, 0xae4, 0xae7, 0xaea, 0xaed, 0xaf0, 0xaf3, + + 0xaf6, 0xaf9, 0xafc, 0xaff, 0xb02, 0xb05, 0xb08, 0xb0b, + 0xb0e, 0xb11, 0xb14, 0xb17, 0xb1a, 0xb1d, 0xb20, 0xb23, + + 0xb26, 0xb29, 0xb2c, 0xb2f, 0xb32, 0xffff, 0xb35, 0xb38, + 0xb3b, 0xb3e, 0xb41, 0xb44, 0xb46, 0xb49, 0xb4c, 0xb4e, + + 0xb51, 0xb54, 0xb57, 0xb5a, 0xb5d, 0xffff, 0xb60, 0xb63, + 0xb66, 0xb69, 0xb6b, 0xb6e, 0xb70, 0xb73, 0xb76, 0xb79, + + 0xb7c, 0xb7f, 0xb82, 0xb85, 0xffff, 0xffff, 0xb87, 0xb8a, + 0xb8d, 0xb90, 0xb93, 0xb96, 0xffff, 0xb98, 0xb9b, 0xb9e, + + 0xba1, 0xba4, 0xba7, 0xbaa, 0xbac, 0xbaf, 0xbb2, 0xbb5, + 0xbb8, 0xbbb, 0xbbe, 0xbc1, 0xbc3, 0xbc6, 0xbc9, 0xbcb, + + 0xffff, 0xffff, 0xbcd, 0xbd0, 0xbd3, 0xffff, 0xbd6, 0xbd9, + 0xbdc, 0xbdf, 0xbe1, 0xbe4, 0xbe6, 0xbe9, 0xbeb, 0xffff, + + 0xbee, 0xbf0, 0xbf2, 0xbf4, 0xbf6, 0xbf8, 0xbfa, 0xbfc, + 0xbfe, 0xc00, 0xc02, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xc04, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xc06, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xc09, 0xc0b, 0xc0e, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xc12, + + 0xffff, 0xffff, 0xffff, 0xc14, 0xc17, 0xffff, 0xc1b, 0xc1e, + 0xffff, 0xffff, 0xffff, 0xffff, 0xc22, 0xffff, 0xc25, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xc28, + 0xc2b, 0xc2e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xc31, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xc36, + + 0xc38, 0xc3a, 0xffff, 0xffff, 0xc3c, 0xc3e, 0xc40, 0xc42, + 0xc44, 0xc46, 0xc48, 0xc4a, 0xc4c, 0xc4e, 0xc50, 0xc52, + + 0xc54, 0xc56, 0xc58, 0xc5a, 0xc5c, 0xc5e, 0xc60, 0xc62, + 0xc64, 0xc66, 0xc68, 0xc6a, 0xc6c, 0xc6e, 0xc70, 0xffff, + + 0xc72, 0xc74, 0xc76, 0xc78, 0xc7a, 0xc7c, 0xc7e, 0xc80, + 0xc82, 0xc84, 0xc86, 0xc88, 0xc8a, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xc8c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xc8f, 0xc93, 0xc97, 0xc99, 0xffff, 0xc9c, 0xca0, 0xca4, + 0xffff, 0xca6, 0xca9, 0xcab, 0xcad, 0xcaf, 0xcb1, 0xcb3, + + 0xcb5, 0xcb7, 0xcb9, 0xcbb, 0xffff, 0xcbd, 0xcbf, 0xffff, + 0xffff, 0xcc2, 0xcc4, 0xcc6, 0xcc8, 0xcca, 0xffff, 0xffff, + + 0xccc, 0xccf, 0xcd3, 0xffff, 0xcd6, 0xffff, 0xcd8, 0xffff, + 0xcda, 0xffff, 0xcdc, 0xcde, 0xce0, 0xce2, 0xffff, 0xce4, + + 0xce6, 0xce8, 0xffff, 0xcea, 0xcec, 0xcee, 0xcf0, 0xcf2, + 0xcf4, 0xcf6, 0xffff, 0xcf8, 0xcfc, 0xcfe, 0xd00, 0xd02, + + 0xd04, 0xffff, 0xffff, 0xffff, 0xffff, 0xd06, 0xd08, 0xd0a, + 0xd0c, 0xd0e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xd10, 0xd14, 0xd18, 0xd1d, 0xd21, 0xd25, 0xd29, 0xd2d, + 0xd31, 0xd35, 0xd39, 0xd3d, 0xd41, 0xd45, 0xd49, 0xd4d, + + 0xd50, 0xd52, 0xd55, 0xd59, 0xd5c, 0xd5e, 0xd61, 0xd65, + 0xd6a, 0xd6d, 0xd6f, 0xd72, 0xd76, 0xd78, 0xd7a, 0xd7c, + + 0xd7e, 0xd80, 0xd83, 0xd87, 0xd8a, 0xd8c, 0xd8f, 0xd93, + 0xd98, 0xd9b, 0xd9d, 0xda0, 0xda4, 0xda6, 0xda8, 0xdaa, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xdac, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xdb0, 0xdb3, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdb6, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdb9, 0xdbc, 0xdbf, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xdc2, 0xffff, 0xffff, 0xffff, + 0xffff, 0xdc5, 0xffff, 0xffff, 0xdc8, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xdcb, 0xffff, 0xdce, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xdd1, 0xdd4, 0xffff, 0xdd8, + + 0xddb, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xddf, 0xffff, 0xffff, 0xde2, 0xffff, 0xffff, 0xde5, + 0xffff, 0xde8, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xdeb, 0xffff, 0xdee, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdf1, 0xdf4, 0xdf7, + + 0xdfa, 0xdfd, 0xffff, 0xffff, 0xe00, 0xe03, 0xffff, 0xffff, + 0xe06, 0xe09, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xe0c, 0xe0f, 0xffff, 0xffff, 0xe12, 0xe15, 0xffff, 0xffff, + 0xe18, 0xe1b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xe1e, 0xe21, 0xe24, 0xe27, + + 0xe2a, 0xe2d, 0xe30, 0xe33, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xe36, 0xe39, 0xe3c, 0xe3f, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xe42, 0xe44, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xe46, 0xe48, 0xe4a, 0xe4c, 0xe4e, 0xe50, 0xe52, 0xe54, + 0xe56, 0xe58, 0xe5b, 0xe5e, 0xe61, 0xe64, 0xe67, 0xe6a, + + 0xe6d, 0xe70, 0xe73, 0xe76, 0xe79, 0xe7d, 0xe81, 0xe85, + 0xe89, 0xe8d, 0xe91, 0xe95, 0xe99, 0xe9d, 0xea2, 0xea7, + + 0xeac, 0xeb1, 0xeb6, 0xebb, 0xec0, 0xec5, 0xeca, 0xecf, + 0xed4, 0xed7, 0xeda, 0xedd, 0xee0, 0xee3, 0xee6, 0xee9, + + 0xeec, 0xeef, 0xef3, 0xef7, 0xefb, 0xeff, 0xf03, 0xf07, + 0xf0b, 0xf0f, 0xf13, 0xf17, 0xf1b, 0xf1f, 0xf23, 0xf27, + + 0xf2b, 0xf2f, 0xf33, 0xf37, 0xf3b, 0xf3f, 0xf43, 0xf47, + 0xf4b, 0xf4f, 0xf53, 0xf57, 0xf5b, 0xf5f, 0xf63, 0xf67, + + 0xf6b, 0xf6f, 0xf73, 0xf77, 0xf7b, 0xf7f, 0xf83, 0xf85, + 0xf87, 0xf89, 0xf8b, 0xf8d, 0xf8f, 0xf91, 0xf93, 0xf95, + + 0xf97, 0xf99, 0xf9b, 0xf9d, 0xf9f, 0xfa1, 0xfa3, 0xfa5, + 0xfa7, 0xfa9, 0xfab, 0xfad, 0xfaf, 0xfb1, 0xfb3, 0xfb5, + + 0xfb7, 0xfb9, 0xfbb, 0xfbd, 0xfbf, 0xfc1, 0xfc3, 0xfc5, + 0xfc7, 0xfc9, 0xfcb, 0xfcd, 0xfcf, 0xfd1, 0xfd3, 0xfd5, + + 0xfd7, 0xfd9, 0xfdb, 0xfdd, 0xfdf, 0xfe1, 0xfe3, 0xfe5, + 0xfe7, 0xfe9, 0xfeb, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xfed, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xff2, 0xff6, 0xff9, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffd, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x1000, 0x1002, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1004, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1006, + + 0xffff, 0xffff, 0xffff, 0x1008, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x100a, 0x100c, 0x100e, 0x1010, 0x1012, 0x1014, 0x1016, 0x1018, + 0x101a, 0x101c, 0x101e, 0x1020, 0x1022, 0x1024, 0x1026, 0x1028, + + 0x102a, 0x102c, 0x102e, 0x1030, 0x1032, 0x1034, 0x1036, 0x1038, + 0x103a, 0x103c, 0x103e, 0x1040, 0x1042, 0x1044, 0x1046, 0x1048, + + 0x104a, 0x104c, 0x104e, 0x1050, 0x1052, 0x1054, 0x1056, 0x1058, + 0x105a, 0x105c, 0x105e, 0x1060, 0x1062, 0x1064, 0x1066, 0x1068, + + 0x106a, 0x106c, 0x106e, 0x1070, 0x1072, 0x1074, 0x1076, 0x1078, + 0x107a, 0x107c, 0x107e, 0x1080, 0x1082, 0x1084, 0x1086, 0x1088, + + 0x108a, 0x108c, 0x108e, 0x1090, 0x1092, 0x1094, 0x1096, 0x1098, + 0x109a, 0x109c, 0x109e, 0x10a0, 0x10a2, 0x10a4, 0x10a6, 0x10a8, + + 0x10aa, 0x10ac, 0x10ae, 0x10b0, 0x10b2, 0x10b4, 0x10b6, 0x10b8, + 0x10ba, 0x10bc, 0x10be, 0x10c0, 0x10c2, 0x10c4, 0x10c6, 0x10c8, + + 0x10ca, 0x10cc, 0x10ce, 0x10d0, 0x10d2, 0x10d4, 0x10d6, 0x10d8, + 0x10da, 0x10dc, 0x10de, 0x10e0, 0x10e2, 0x10e4, 0x10e6, 0x10e8, + + 0x10ea, 0x10ec, 0x10ee, 0x10f0, 0x10f2, 0x10f4, 0x10f6, 0x10f8, + 0x10fa, 0x10fc, 0x10fe, 0x1100, 0x1102, 0x1104, 0x1106, 0x1108, + + 0x110a, 0x110c, 0x110e, 0x1110, 0x1112, 0x1114, 0x1116, 0x1118, + 0x111a, 0x111c, 0x111e, 0x1120, 0x1122, 0x1124, 0x1126, 0x1128, + + 0x112a, 0x112c, 0x112e, 0x1130, 0x1132, 0x1134, 0x1136, 0x1138, + 0x113a, 0x113c, 0x113e, 0x1140, 0x1142, 0x1144, 0x1146, 0x1148, + + 0x114a, 0x114c, 0x114e, 0x1150, 0x1152, 0x1154, 0x1156, 0x1158, + 0x115a, 0x115c, 0x115e, 0x1160, 0x1162, 0x1164, 0x1166, 0x1168, + + 0x116a, 0x116c, 0x116e, 0x1170, 0x1172, 0x1174, 0x1176, 0x1178, + 0x117a, 0x117c, 0x117e, 0x1180, 0x1182, 0x1184, 0x1186, 0x1188, + + 0x118a, 0x118c, 0x118e, 0x1190, 0x1192, 0x1194, 0x1196, 0x1198, + 0x119a, 0x119c, 0x119e, 0x11a0, 0x11a2, 0x11a4, 0x11a6, 0x11a8, + + 0x11aa, 0x11ac, 0x11ae, 0x11b0, 0x11b2, 0x11b4, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x11b6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x11b8, 0xffff, + 0x11ba, 0x11bc, 0x11be, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x11c0, 0xffff, 0x11c3, 0xffff, + + 0x11c6, 0xffff, 0x11c9, 0xffff, 0x11cc, 0xffff, 0x11cf, 0xffff, + 0x11d2, 0xffff, 0x11d5, 0xffff, 0x11d8, 0xffff, 0x11db, 0xffff, + + 0x11de, 0xffff, 0x11e1, 0xffff, 0xffff, 0x11e4, 0xffff, 0x11e7, + 0xffff, 0x11ea, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x11ed, 0x11f0, 0xffff, 0x11f3, 0x11f6, 0xffff, 0x11f9, 0x11fc, + 0xffff, 0x11ff, 0x1202, 0xffff, 0x1205, 0x1208, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0x120b, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x120e, 0x1211, 0xffff, 0x1214, 0x1217, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x121a, 0xffff, 0x121d, 0xffff, + + 0x1220, 0xffff, 0x1223, 0xffff, 0x1226, 0xffff, 0x1229, 0xffff, + 0x122c, 0xffff, 0x122f, 0xffff, 0x1232, 0xffff, 0x1235, 0xffff, + + 0x1238, 0xffff, 0x123b, 0xffff, 0xffff, 0x123e, 0xffff, 0x1241, + 0xffff, 0x1244, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x1247, 0x124a, 0xffff, 0x124d, 0x1250, 0xffff, 0x1253, 0x1256, + 0xffff, 0x1259, 0x125c, 0xffff, 0x125f, 0x1262, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0x1265, 0xffff, 0xffff, 0x1268, + 0x126b, 0x126e, 0x1271, 0xffff, 0xffff, 0xffff, 0x1274, 0x1277, + + 0xffff, 0x127a, 0x127c, 0x127e, 0x1280, 0x1282, 0x1284, 0x1286, + 0x1288, 0x128a, 0x128c, 0x128e, 0x1290, 0x1292, 0x1294, 0x1296, + + 0x1298, 0x129a, 0x129c, 0x129e, 0x12a0, 0x12a2, 0x12a4, 0x12a6, + 0x12a8, 0x12aa, 0x12ac, 0x12ae, 0x12b0, 0x12b2, 0x12b4, 0x12b6, + + 0x12b8, 0x12ba, 0x12bc, 0x12be, 0x12c0, 0x12c2, 0x12c4, 0x12c6, + 0x12c8, 0x12ca, 0x12cc, 0x12ce, 0x12d0, 0x12d2, 0x12d4, 0x12d6, + + 0x12d8, 0x12da, 0x12dc, 0x12de, 0x12e0, 0x12e2, 0x12e4, 0x12e6, + 0x12e8, 0x12ea, 0x12ec, 0x12ee, 0x12f0, 0x12f2, 0x12f4, 0x12f6, + + 0x12f8, 0x12fa, 0x12fc, 0x12fe, 0x1300, 0x1302, 0x1304, 0x1306, + 0x1308, 0x130a, 0x130c, 0x130e, 0x1310, 0x1312, 0x1314, 0x1316, + + 0x1318, 0x131a, 0x131c, 0x131e, 0x1320, 0x1322, 0x1324, 0x1326, + 0x1328, 0x132a, 0x132c, 0x132e, 0x1330, 0x1332, 0x1334, 0xffff, + + 0xffff, 0xffff, 0x1336, 0x1338, 0x133a, 0x133c, 0x133e, 0x1340, + 0x1342, 0x1344, 0x1346, 0x1348, 0x134a, 0x134c, 0x134e, 0x1350, + + 0x1352, 0x1356, 0x135a, 0x135e, 0x1362, 0x1366, 0x136a, 0x136e, + 0x1372, 0x1376, 0x137a, 0x137e, 0x1382, 0x1386, 0x138a, 0x138f, + + 0x1394, 0x1399, 0x139e, 0x13a3, 0x13a8, 0x13ad, 0x13b2, 0x13b7, + 0x13bc, 0x13c1, 0x13c6, 0x13cb, 0x13d0, 0x13d5, 0x13dd, 0xffff, + + 0x13e4, 0x13e8, 0x13ec, 0x13f0, 0x13f4, 0x13f8, 0x13fc, 0x1400, + 0x1404, 0x1408, 0x140c, 0x1410, 0x1414, 0x1418, 0x141c, 0x1420, + + 0x1424, 0x1428, 0x142c, 0x1430, 0x1434, 0x1438, 0x143c, 0x1440, + 0x1444, 0x1448, 0x144c, 0x1450, 0x1454, 0x1458, 0x145c, 0x1460, + + 0x1464, 0x1468, 0x146c, 0x1470, 0x1474, 0x1476, 0x1478, 0x147a, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x147c, 0x1480, 0x1483, 0x1486, 0x1489, 0x148c, 0x148f, 0x1492, + 0x1495, 0x1498, 0x149b, 0x149e, 0x14a1, 0x14a4, 0x14a7, 0x14aa, + + 0x14ad, 0x14af, 0x14b1, 0x14b3, 0x14b5, 0x14b7, 0x14b9, 0x14bb, + 0x14bd, 0x14bf, 0x14c1, 0x14c3, 0x14c5, 0x14c7, 0x14c9, 0x14cc, + + 0x14cf, 0x14d2, 0x14d5, 0x14d8, 0x14db, 0x14de, 0x14e1, 0x14e4, + 0x14e7, 0x14ea, 0x14ed, 0x14f0, 0x14f3, 0x14f9, 0x14fe, 0xffff, + + 0x1501, 0x1503, 0x1505, 0x1507, 0x1509, 0x150b, 0x150d, 0x150f, + 0x1511, 0x1513, 0x1515, 0x1517, 0x1519, 0x151b, 0x151d, 0x151f, + + 0x1521, 0x1523, 0x1525, 0x1527, 0x1529, 0x152b, 0x152d, 0x152f, + 0x1531, 0x1533, 0x1535, 0x1537, 0x1539, 0x153b, 0x153d, 0x153f, + + 0x1541, 0x1543, 0x1545, 0x1547, 0x1549, 0x154b, 0x154d, 0x154f, + 0x1551, 0x1553, 0x1555, 0x1557, 0x1559, 0x155b, 0x155d, 0x155f, + + 0x1561, 0x1563, 0x1566, 0x1569, 0x156c, 0x156f, 0x1572, 0x1575, + 0x1578, 0x157b, 0x157e, 0x1581, 0x1584, 0x1587, 0x158a, 0x158d, + + 0x1590, 0x1593, 0x1596, 0x1599, 0x159c, 0x159f, 0x15a2, 0x15a5, + 0x15a8, 0x15ab, 0x15af, 0x15b3, 0x15b7, 0x15ba, 0x15be, 0x15c1, + + 0x15c5, 0x15c7, 0x15c9, 0x15cb, 0x15cd, 0x15cf, 0x15d1, 0x15d3, + 0x15d5, 0x15d7, 0x15d9, 0x15db, 0x15dd, 0x15df, 0x15e1, 0x15e3, + + 0x15e5, 0x15e7, 0x15e9, 0x15eb, 0x15ed, 0x15ef, 0x15f1, 0x15f3, + 0x15f5, 0x15f7, 0x15f9, 0x15fb, 0x15fd, 0x15ff, 0x1601, 0x1603, + + 0x1605, 0x1607, 0x1609, 0x160b, 0x160d, 0x160f, 0x1611, 0x1613, + 0x1615, 0x1617, 0x1619, 0x161b, 0x161d, 0x161f, 0x1621, 0xffff, + + 0x1623, 0x1628, 0x162d, 0x1632, 0x1636, 0x163b, 0x163f, 0x1643, + 0x1649, 0x164e, 0x1652, 0x1656, 0x165a, 0x165f, 0x1664, 0x1668, + + 0x166c, 0x166f, 0x1673, 0x1678, 0x167d, 0x1680, 0x1686, 0x168d, + 0x1693, 0x1697, 0x169d, 0x16a3, 0x16a8, 0x16ac, 0x16b0, 0x16b4, + + 0x16b9, 0x16bf, 0x16c4, 0x16c8, 0x16cc, 0x16d0, 0x16d3, 0x16d6, + 0x16d9, 0x16dc, 0x16e0, 0x16e4, 0x16ea, 0x16ee, 0x16f3, 0x16f9, + + 0x16fd, 0x1700, 0x1703, 0x1709, 0x170e, 0x1714, 0x1718, 0x171e, + 0x1721, 0x1725, 0x1729, 0x172d, 0x1731, 0x1735, 0x173a, 0x173e, + + 0x1741, 0x1745, 0x1749, 0x174d, 0x1752, 0x1756, 0x175a, 0x175e, + 0x1764, 0x1769, 0x176c, 0x1772, 0x1775, 0x177a, 0x177f, 0x1783, + + 0x1787, 0x178b, 0x1790, 0x1793, 0x1797, 0x179c, 0x179f, 0x17a5, + 0x17a9, 0x17ac, 0x17af, 0x17b2, 0x17b5, 0x17b8, 0x17bb, 0x17be, + + 0x17c1, 0x17c4, 0x17c7, 0x17cb, 0x17cf, 0x17d3, 0x17d7, 0x17db, + 0x17df, 0x17e3, 0x17e7, 0x17eb, 0x17ef, 0x17f3, 0x17f7, 0x17fb, + + 0x17ff, 0x1803, 0x1807, 0x180a, 0x180d, 0x1811, 0x1814, 0x1817, + 0x181a, 0x181e, 0x1822, 0x1825, 0x1828, 0x182b, 0x182e, 0x1831, + + 0x1836, 0x1839, 0x183c, 0x183f, 0x1842, 0x1845, 0x1848, 0x184b, + 0x184e, 0x1852, 0x1857, 0x185a, 0x185d, 0x1860, 0x1863, 0x1866, + + 0x1869, 0x186c, 0x1870, 0x1874, 0x1878, 0x187c, 0x187f, 0x1882, + 0x1885, 0x1888, 0x188b, 0x188e, 0x1891, 0x1894, 0x1897, 0x189a, + + 0x189e, 0x18a2, 0x18a5, 0x18a9, 0x18ad, 0x18b1, 0x18b4, 0x18b8, + 0x18bc, 0x18c1, 0x18c4, 0x18c8, 0x18cc, 0x18d0, 0x18d4, 0x18da, + + 0x18e1, 0x18e4, 0x18e7, 0x18ea, 0x18ed, 0x18f0, 0x18f3, 0x18f6, + 0x18f9, 0x18fc, 0x18ff, 0x1902, 0x1905, 0x1908, 0x190b, 0x190e, + + 0x1911, 0x1914, 0x1917, 0x191c, 0x191f, 0x1922, 0x1925, 0x192a, + 0x192e, 0x1931, 0x1934, 0x1937, 0x193a, 0x193d, 0x1940, 0x1943, + + 0x1946, 0x1949, 0x194c, 0x1950, 0x1953, 0x1956, 0x195a, 0x195e, + 0x1961, 0x1966, 0x196a, 0x196d, 0x1970, 0x1973, 0x1976, 0x197a, + + 0x197e, 0x1981, 0x1984, 0x1987, 0x198a, 0x198d, 0x1990, 0x1993, + 0x1996, 0x1999, 0x199d, 0x19a1, 0x19a5, 0x19a9, 0x19ad, 0x19b1, + + 0x19b5, 0x19b9, 0x19bd, 0x19c1, 0x19c5, 0x19c9, 0x19cd, 0x19d1, + 0x19d5, 0x19d9, 0x19dd, 0x19e1, 0x19e5, 0x19e9, 0x19ed, 0x19f1, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x19f5, 0x19f7, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x19f9, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x19fb, 0x19fd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x19ff, 0x1a01, 0x1a03, 0x1a05, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x1a07, 0x1a09, 0x1a0b, 0x1a0d, 0x1a0f, 0x1a11, 0x1a13, 0x1a15, + 0x1a17, 0x1a19, 0x1a1b, 0x1a1d, 0x1a1f, 0x1a21, 0x1a23, 0x1a25, + 0x1a27, 0x1a29, 0x1a2b, 0x1a2d, 0x1a2f, 0x1a31, 0x1a33, 0x1a35, + 0x1a37, 0x1a39, 0x1a3b, 0x1a3d, 0x1a3f, 0x1a41, 0x1a43, 0x1a45, + 0x1a47, 0x1a49, 0x1a4b, 0x1a4d, 0x1a4f, 0x1a51, 0x1a53, 0x1a55, + 0x1a57, 0x1a59, 0x1a5b, 0x1a5d, 0x1a5f, 0x1a61, 0x1a63, 0x1a65, + 0x1a67, 0x1a69, 0x1a6b, 0x1a6d, 0x1a6f, 0x1a71, 0x1a73, 0x1a75, + 0x1a77, 0x1a79, 0x1a7b, 0x1a7d, 0x1a7f, 0x1a81, 0x1a83, 0x1a85, + 0x1a87, 0x1a89, 0x1a8b, 0x1a8d, 0x1a8f, 0x1a91, 0x1a93, 0x1a95, + 0x1a97, 0x1a99, 0x1a9b, 0x1a9d, 0x1a9f, 0x1aa1, 0x1aa3, 0x1aa5, + 0x1aa7, 0x1aa9, 0x1aab, 0x1aad, 0x1aaf, 0x1ab1, 0x1ab3, 0x1ab5, + 0x1ab7, 0x1ab9, 0x1abb, 0x1abd, 0x1abf, 0x1ac1, 0x1ac3, 0x1ac5, + 0x1ac7, 0x1ac9, 0x1acb, 0x1acd, 0x1acf, 0x1ad1, 0x1ad3, 0x1ad5, + 0x1ad7, 0x1ad9, 0x1adb, 0x1add, 0x1adf, 0x1ae1, 0x1ae3, 0x1ae5, + 0x1ae7, 0x1ae9, 0x1aeb, 0x1aed, 0x1aef, 0x1af1, 0x1af3, 0x1af5, + 0x1af7, 0x1af9, 0x1afb, 0x1afd, 0x1aff, 0x1b01, 0x1b03, 0x1b05, + 0x1b07, 0x1b09, 0x1b0b, 0x1b0d, 0x1b0f, 0x1b11, 0x1b13, 0x1b15, + 0x1b17, 0x1b19, 0x1b1b, 0x1b1d, 0x1b1f, 0x1b21, 0x1b23, 0x1b25, + 0x1b27, 0x1b29, 0x1b2b, 0x1b2d, 0x1b2f, 0x1b31, 0x1b33, 0x1b35, + 0x1b37, 0x1b39, 0x1b3b, 0x1b3d, 0x1b3f, 0x1b41, 0x1b43, 0x1b45, + 0x1b47, 0x1b49, 0x1b4b, 0x1b4d, 0x1b4f, 0x1b51, 0x1b53, 0x1b55, + 0x1b57, 0x1b59, 0x1b5b, 0x1b5d, 0x1b5f, 0x1b61, 0x1b63, 0x1b65, + 0x1b67, 0x1b69, 0x1b6b, 0x1b6d, 0x1b6f, 0x1b71, 0x1b73, 0x1b75, + 0x1b77, 0x1b79, 0x1b7b, 0x1b7d, 0x1b7f, 0x1b81, 0x1b83, 0x1b85, + 0x1b87, 0x1b89, 0x1b8b, 0x1b8d, 0x1b8f, 0x1b91, 0x1b93, 0x1b95, + 0x1b97, 0x1b99, 0x1b9b, 0x1b9d, 0x1b9f, 0x1ba1, 0x1ba3, 0x1ba5, + 0x1ba7, 0x1ba9, 0x1bab, 0x1bad, 0x1baf, 0x1bb1, 0x1bb3, 0x1bb5, + 0x1bb7, 0x1bb9, 0x1bbb, 0x1bbd, 0x1bbf, 0x1bc1, 0x1bc3, 0x1bc5, + 0x1bc7, 0x1bc9, 0x1bcb, 0x1bcd, 0x1bcf, 0x1bd1, 0x1bd3, 0x1bd5, + 0x1bd7, 0x1bd9, 0x1bdb, 0x1bdd, 0x1bdf, 0x1be1, 0x1be3, 0x1be5, + 0x1be7, 0x1be9, 0x1beb, 0x1bed, 0x1bef, 0x1bf1, 0x1bf3, 0x1bf5, + 0x1bf7, 0x1bf9, 0x1bfb, 0x1bfd, 0x1bff, 0x1c01, 0x1c03, 0x1c05, + + 0x1c07, 0x1c09, 0x1c0b, 0x1c0d, 0x1c0f, 0x1c11, 0x1c13, 0x1c15, + 0x1c17, 0x1c19, 0x1c1b, 0x1c1d, 0x1c1f, 0x1c21, 0xffff, 0xffff, + 0x1c23, 0xffff, 0x1c25, 0xffff, 0xffff, 0x1c27, 0x1c29, 0x1c2b, + 0x1c2d, 0x1c2f, 0x1c31, 0x1c33, 0x1c35, 0x1c37, 0x1c39, 0xffff, + 0x1c3b, 0xffff, 0x1c3d, 0xffff, 0xffff, 0x1c3f, 0x1c41, 0xffff, + 0xffff, 0xffff, 0x1c43, 0x1c45, 0x1c47, 0x1c49, 0x1c4b, 0x1c4d, + 0x1c4f, 0x1c51, 0x1c53, 0x1c55, 0x1c57, 0x1c59, 0x1c5b, 0x1c5d, + 0x1c5f, 0x1c61, 0x1c63, 0x1c65, 0x1c67, 0x1c69, 0x1c6b, 0x1c6d, + 0x1c6f, 0x1c71, 0x1c73, 0x1c75, 0x1c77, 0x1c79, 0x1c7b, 0x1c7d, + 0x1c7f, 0x1c81, 0x1c83, 0x1c85, 0x1c87, 0x1c89, 0x1c8b, 0x1c8d, + 0x1c8f, 0x1c91, 0x1c93, 0x1c95, 0x1c97, 0x1c99, 0x1c9b, 0x1c9d, + 0x1c9f, 0x1ca1, 0x1ca3, 0x1ca5, 0x1ca7, 0x1ca9, 0x1cab, 0x1cad, + 0x1caf, 0x1cb1, 0x1cb3, 0x1cb5, 0x1cb7, 0x1cb9, 0x1cbb, 0x1cbd, + 0x1cbf, 0x1cc1, 0x1cc3, 0x1cc5, 0x1cc7, 0x1cca, 0xffff, 0xffff, + 0x1ccc, 0x1cce, 0x1cd0, 0x1cd2, 0x1cd4, 0x1cd6, 0x1cd8, 0x1cda, + 0x1cdc, 0x1cde, 0x1ce0, 0x1ce2, 0x1ce4, 0x1ce6, 0x1ce8, 0x1cea, + 0x1cec, 0x1cee, 0x1cf0, 0x1cf2, 0x1cf4, 0x1cf6, 0x1cf8, 0x1cfa, + 0x1cfc, 0x1cfe, 0x1d00, 0x1d02, 0x1d04, 0x1d06, 0x1d08, 0x1d0a, + 0x1d0c, 0x1d0e, 0x1d10, 0x1d12, 0x1d14, 0x1d16, 0x1d18, 0x1d1a, + 0x1d1c, 0x1d1e, 0x1d20, 0x1d22, 0x1d24, 0x1d26, 0x1d28, 0x1d2a, + 0x1d2c, 0x1d2e, 0x1d30, 0x1d32, 0x1d34, 0x1d36, 0x1d38, 0x1d3a, + 0x1d3c, 0x1d3e, 0x1d40, 0x1d42, 0x1d44, 0x1d46, 0x1d48, 0x1d4a, + 0x1d4c, 0x1d4e, 0x1d50, 0x1d52, 0x1d54, 0x1d56, 0x1d58, 0x1d5a, + 0x1d5c, 0x1d5e, 0x1d60, 0x1d62, 0x1d64, 0x1d66, 0x1d68, 0x1d6a, + 0x1d6c, 0x1d6e, 0x1d70, 0x1d72, 0x1d74, 0x1d76, 0x1d78, 0x1d7a, + 0x1d7c, 0x1d7e, 0x1d80, 0x1d82, 0x1d84, 0x1d86, 0x1d88, 0x1d8a, + 0x1d8d, 0x1d90, 0x1d93, 0x1d95, 0x1d97, 0x1d99, 0x1d9c, 0x1d9f, + 0x1da2, 0x1da4, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x1da6, 0x1da9, 0x1dac, 0x1daf, 0x1db3, 0x1db7, 0x1dba, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1dbd, 0x1dc0, 0x1dc3, 0x1dc6, 0x1dc9, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1dcc, 0xffff, 0x1dcf, + 0x1dd2, 0x1dd4, 0x1dd6, 0x1dd8, 0x1dda, 0x1ddc, 0x1dde, 0x1de0, + 0x1de2, 0x1de4, 0x1de6, 0x1de9, 0x1dec, 0x1def, 0x1df2, 0x1df5, + 0x1df8, 0x1dfb, 0x1dfe, 0x1e01, 0x1e04, 0x1e07, 0x1e0a, 0xffff, + 0x1e0d, 0x1e10, 0x1e13, 0x1e16, 0x1e19, 0xffff, 0x1e1c, 0xffff, + 0x1e1f, 0x1e22, 0xffff, 0x1e25, 0x1e28, 0xffff, 0x1e2b, 0x1e2e, + 0x1e31, 0x1e34, 0x1e37, 0x1e3a, 0x1e3d, 0x1e40, 0x1e43, 0x1e46, + 0x1e49, 0x1e4b, 0x1e4d, 0x1e4f, 0x1e51, 0x1e53, 0x1e55, 0x1e57, + 0x1e59, 0x1e5b, 0x1e5d, 0x1e5f, 0x1e61, 0x1e63, 0x1e65, 0x1e67, + 0x1e69, 0x1e6b, 0x1e6d, 0x1e6f, 0x1e71, 0x1e73, 0x1e75, 0x1e77, + 0x1e79, 0x1e7b, 0x1e7d, 0x1e7f, 0x1e81, 0x1e83, 0x1e85, 0x1e87, + 0x1e89, 0x1e8b, 0x1e8d, 0x1e8f, 0x1e91, 0x1e93, 0x1e95, 0x1e97, + 0x1e99, 0x1e9b, 0x1e9d, 0x1e9f, 0x1ea1, 0x1ea3, 0x1ea5, 0x1ea7, + 0x1ea9, 0x1eab, 0x1ead, 0x1eaf, 0x1eb1, 0x1eb3, 0x1eb5, 0x1eb7, + 0x1eb9, 0x1ebb, 0x1ebd, 0x1ebf, 0x1ec1, 0x1ec3, 0x1ec5, 0x1ec7, + 0x1ec9, 0x1ecb, 0x1ecd, 0x1ecf, 0x1ed1, 0x1ed3, 0x1ed5, 0x1ed7, + 0x1ed9, 0x1edb, 0x1edd, 0x1edf, 0x1ee1, 0x1ee3, 0x1ee5, 0x1ee7, + 0x1ee9, 0x1eeb, 0x1eed, 0x1eef, 0x1ef1, 0x1ef3, 0x1ef5, 0x1ef7, + 0x1ef9, 0x1efb, 0x1efd, 0x1eff, 0x1f01, 0x1f03, 0x1f05, 0x1f07, + 0x1f09, 0x1f0b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x1f0d, 0x1f0f, 0x1f11, 0x1f13, 0x1f15, + 0x1f17, 0x1f19, 0x1f1b, 0x1f1d, 0x1f1f, 0x1f21, 0x1f23, 0x1f25, + 0x1f27, 0x1f29, 0x1f2b, 0x1f2d, 0x1f2f, 0x1f31, 0x1f33, 0x1f35, + 0x1f37, 0x1f39, 0x1f3b, 0x1f3e, 0x1f41, 0x1f44, 0x1f47, 0x1f4a, + 0x1f4d, 0x1f50, 0x1f53, 0x1f56, 0x1f59, 0x1f5c, 0x1f5f, 0x1f62, + 0x1f65, 0x1f68, 0x1f6b, 0x1f6e, 0x1f71, 0x1f73, 0x1f75, 0x1f77, + + 0x1f79, 0x1f7c, 0x1f7f, 0x1f82, 0x1f85, 0x1f88, 0x1f8b, 0x1f8e, + 0x1f91, 0x1f94, 0x1f97, 0x1f9a, 0x1f9d, 0x1fa0, 0x1fa3, 0x1fa6, + 0x1fa9, 0x1fac, 0x1faf, 0x1fb2, 0x1fb5, 0x1fb8, 0x1fbb, 0x1fbe, + 0x1fc1, 0x1fc4, 0x1fc7, 0x1fca, 0x1fcd, 0x1fd0, 0x1fd3, 0x1fd6, + 0x1fd9, 0x1fdc, 0x1fdf, 0x1fe2, 0x1fe5, 0x1fe8, 0x1feb, 0x1fee, + 0x1ff1, 0x1ff4, 0x1ff7, 0x1ffa, 0x1ffd, 0x2000, 0x2003, 0x2006, + 0x2009, 0x200c, 0x200f, 0x2012, 0x2015, 0x2018, 0x201b, 0x201e, + 0x2021, 0x2024, 0x2027, 0x202a, 0x202d, 0x2030, 0x2033, 0x2036, + 0x2039, 0x203c, 0x203f, 0x2042, 0x2045, 0x2048, 0x204b, 0x204e, + 0x2051, 0x2054, 0x2057, 0x205a, 0x205d, 0x2060, 0x2063, 0x2066, + 0x2069, 0x206c, 0x206f, 0x2072, 0x2075, 0x2078, 0x207b, 0x207e, + 0x2081, 0x2084, 0x2087, 0x208a, 0x208d, 0x2090, 0x2093, 0x2097, + 0x209b, 0x209f, 0x20a3, 0x20a7, 0x20ab, 0x20ae, 0x20b1, 0x20b4, + 0x20b7, 0x20ba, 0x20bd, 0x20c0, 0x20c3, 0x20c6, 0x20c9, 0x20cc, + 0x20cf, 0x20d2, 0x20d5, 0x20d8, 0x20db, 0x20de, 0x20e1, 0x20e4, + 0x20e7, 0x20ea, 0x20ed, 0x20f0, 0x20f3, 0x20f6, 0x20f9, 0x20fc, + 0x20ff, 0x2102, 0x2105, 0x2108, 0x210b, 0x210e, 0x2111, 0x2114, + 0x2117, 0x211a, 0x211d, 0x2120, 0x2123, 0x2126, 0x2129, 0x212c, + 0x212f, 0x2132, 0x2135, 0x2138, 0x213b, 0x213e, 0x2141, 0x2144, + 0x2147, 0x214a, 0x214d, 0x2150, 0x2153, 0x2156, 0x2159, 0x215c, + 0x215f, 0x2162, 0x2165, 0x2168, 0x216b, 0x216e, 0x2171, 0x2174, + 0x2177, 0x217a, 0x217d, 0x2180, 0x2183, 0x2186, 0x2189, 0x218c, + 0x218f, 0x2192, 0x2195, 0x2198, 0x219b, 0x219e, 0x21a1, 0x21a4, + 0x21a7, 0x21aa, 0x21ad, 0x21b0, 0x21b3, 0x21b6, 0x21b9, 0x21bc, + 0x21bf, 0x21c2, 0x21c5, 0x21c8, 0x21cb, 0x21ce, 0x21d1, 0x21d4, + 0x21d7, 0x21da, 0x21dd, 0x21e0, 0x21e3, 0x21e6, 0x21e9, 0x21ec, + 0x21ef, 0x21f2, 0x21f5, 0x21f8, 0x21fb, 0x21fe, 0x2201, 0x2204, + 0x2207, 0x220a, 0x220d, 0x2210, 0x2213, 0x2216, 0x2219, 0x221c, + 0x221f, 0x2222, 0x2225, 0x2228, 0x222b, 0x222e, 0x2231, 0x2234, + 0x2237, 0x223a, 0x223d, 0x2240, 0x2243, 0x2246, 0x2249, 0x224c, + 0x224f, 0x2252, 0x2255, 0x2259, 0x225d, 0x2261, 0x2264, 0x2267, + 0x226a, 0x226d, 0x2270, 0x2273, 0x2276, 0x2279, 0x227c, 0x227f, + + 0x2282, 0x2285, 0x2288, 0x228b, 0x228e, 0x2291, 0x2294, 0x2297, + 0x229a, 0x229d, 0x22a0, 0x22a3, 0x22a6, 0x22a9, 0x22ac, 0x22af, + 0x22b2, 0x22b5, 0x22b8, 0x22bb, 0x22be, 0x22c1, 0x22c4, 0x22c7, + 0x22ca, 0x22cd, 0x22d0, 0x22d3, 0x22d6, 0x22d9, 0x22dc, 0x22df, + 0x22e2, 0x22e5, 0x22e8, 0x22eb, 0x22ee, 0x22f1, 0x22f4, 0x22f7, + 0x22fa, 0x22fd, 0x2300, 0x2303, 0x2306, 0x2309, 0x230c, 0x230f, + 0x2312, 0x2315, 0x2318, 0x231b, 0x231e, 0x2321, 0x2324, 0x2327, + 0x232a, 0x232d, 0x2330, 0x2333, 0x2336, 0x2339, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x233c, 0x2340, 0x2344, 0x2348, 0x234c, 0x2350, 0x2354, 0x2358, + 0x235c, 0x2360, 0x2364, 0x2368, 0x236c, 0x2370, 0x2374, 0x2378, + 0x237c, 0x2380, 0x2384, 0x2388, 0x238c, 0x2390, 0x2394, 0x2398, + 0x239c, 0x23a0, 0x23a4, 0x23a8, 0x23ac, 0x23b0, 0x23b4, 0x23b8, + 0x23bc, 0x23c0, 0x23c4, 0x23c8, 0x23cc, 0x23d0, 0x23d4, 0x23d8, + 0x23dc, 0x23e0, 0x23e4, 0x23e8, 0x23ec, 0x23f0, 0x23f4, 0x23f8, + 0x23fc, 0x2400, 0x2404, 0x2408, 0x240c, 0x2410, 0x2414, 0x2418, + 0x241c, 0x2420, 0x2424, 0x2428, 0x242c, 0x2430, 0x2434, 0x2438, + 0xffff, 0xffff, 0x243c, 0x2440, 0x2444, 0x2448, 0x244c, 0x2450, + 0x2454, 0x2458, 0x245c, 0x2460, 0x2464, 0x2468, 0x246c, 0x2470, + 0x2474, 0x2478, 0x247c, 0x2480, 0x2484, 0x2488, 0x248c, 0x2490, + 0x2494, 0x2498, 0x249c, 0x24a0, 0x24a4, 0x24a8, 0x24ac, 0x24b0, + 0x24b4, 0x24b8, 0x24bc, 0x24c0, 0x24c4, 0x24c8, 0x24cc, 0x24d0, + 0x24d4, 0x24d8, 0x24dc, 0x24e0, 0x24e4, 0x24e8, 0x24ec, 0x24f0, + 0x24f4, 0x24f8, 0x24fc, 0x2500, 0x2504, 0x2508, 0x250c, 0x2510, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2514, 0x2518, 0x251c, 0x2521, 0x2526, 0x252b, 0x2530, 0x2535, + 0x253a, 0x253f, 0x2543, 0x2556, 0x255f, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2564, 0x2566, 0x2568, 0x256a, 0x256c, 0x256e, 0x2570, 0x2572, + 0x2574, 0x2576, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x2578, 0x257a, 0x257c, 0x257e, 0x2580, 0x2582, 0x2584, 0x2586, + 0x2588, 0x258a, 0x258c, 0x258e, 0x2590, 0x2592, 0x2594, 0x2596, + 0x2598, 0x259a, 0x259c, 0x259e, 0x25a0, 0xffff, 0xffff, 0x25a2, + 0x25a4, 0x25a6, 0x25a8, 0x25aa, 0x25ac, 0x25ae, 0x25b0, 0x25b2, + 0x25b4, 0x25b6, 0x25b8, 0xffff, 0x25ba, 0x25bc, 0x25be, 0x25c0, + 0x25c2, 0x25c4, 0x25c6, 0x25c8, 0x25ca, 0x25cc, 0x25ce, 0x25d0, + 0x25d2, 0x25d4, 0x25d6, 0x25d8, 0x25da, 0x25dc, 0x25de, 0xffff, + 0x25e0, 0x25e2, 0x25e4, 0x25e6, 0xffff, 0xffff, 0xffff, 0xffff, + 0x25e8, 0x25eb, 0x25ee, 0xffff, 0x25f1, 0xffff, 0x25f4, 0x25f7, + 0x25fa, 0x25fd, 0x2600, 0x2603, 0x2606, 0x2609, 0x260c, 0x260f, + 0x2612, 0x2614, 0x2616, 0x2618, 0x261a, 0x261c, 0x261e, 0x2620, + 0x2622, 0x2624, 0x2626, 0x2628, 0x262a, 0x262c, 0x262e, 0x2630, + 0x2632, 0x2634, 0x2636, 0x2638, 0x263a, 0x263c, 0x263e, 0x2640, + 0x2642, 0x2644, 0x2646, 0x2648, 0x264a, 0x264c, 0x264e, 0x2650, + 0x2652, 0x2654, 0x2656, 0x2658, 0x265a, 0x265c, 0x265e, 0x2660, + 0x2662, 0x2664, 0x2666, 0x2668, 0x266a, 0x266c, 0x266e, 0x2670, + 0x2672, 0x2674, 0x2676, 0x2678, 0x267a, 0x267c, 0x267e, 0x2680, + 0x2682, 0x2684, 0x2686, 0x2688, 0x268a, 0x268c, 0x268e, 0x2690, + 0x2692, 0x2694, 0x2696, 0x2698, 0x269a, 0x269c, 0x269e, 0x26a0, + 0x26a2, 0x26a4, 0x26a6, 0x26a8, 0x26aa, 0x26ac, 0x26ae, 0x26b0, + 0x26b2, 0x26b4, 0x26b6, 0x26b8, 0x26ba, 0x26bc, 0x26be, 0x26c0, + 0x26c2, 0x26c4, 0x26c6, 0x26c8, 0x26ca, 0x26cc, 0x26ce, 0x26d0, + 0x26d2, 0x26d4, 0x26d6, 0x26d8, 0x26da, 0x26dc, 0x26de, 0x26e0, + 0x26e2, 0x26e4, 0x26e6, 0x26e8, 0x26ea, 0x26ec, 0x26ee, 0x26f0, + 0x26f2, 0x26f4, 0x26f6, 0x26f8, 0x26fa, 0x26fc, 0x26ff, 0x2702, + 0x2705, 0x2708, 0x270b, 0x270e, 0x2711, 0xffff, 0xffff, 0xffff, + + 0xffff, 0x2714, 0x2716, 0x2718, 0x271a, 0x271c, 0x271e, 0x2720, + 0x2722, 0x2724, 0x2726, 0x2728, 0x272a, 0x272c, 0x272e, 0x2730, + 0x2732, 0x2734, 0x2736, 0x2738, 0x273a, 0x273c, 0x273e, 0x2740, + 0x2742, 0x2744, 0x2746, 0x2748, 0x274a, 0x274c, 0x274e, 0x2750, + 0x2752, 0x2754, 0x2756, 0x2758, 0x275a, 0x275c, 0x275e, 0x2760, + 0x2762, 0x2764, 0x2766, 0x2768, 0x276a, 0x276c, 0x276e, 0x2770, + 0x2772, 0x2774, 0x2776, 0x2778, 0x277a, 0x277c, 0x277e, 0x2780, + 0x2782, 0x2784, 0x2786, 0x2788, 0x278a, 0x278c, 0x278e, 0x2790, + 0x2792, 0x2794, 0x2796, 0x2798, 0x279a, 0x279c, 0x279e, 0x27a0, + 0x27a2, 0x27a4, 0x27a6, 0x27a8, 0x27aa, 0x27ac, 0x27ae, 0x27b0, + 0x27b2, 0x27b4, 0x27b6, 0x27b8, 0x27ba, 0x27bc, 0x27be, 0x27c0, + 0x27c2, 0x27c4, 0x27c6, 0x27c8, 0x27ca, 0x27cc, 0x27ce, 0x27d0, + 0x27d2, 0x27d4, 0x27d6, 0x27d8, 0x27da, 0x27dc, 0x27de, 0x27e0, + 0x27e2, 0x27e4, 0x27e6, 0x27e8, 0x27ea, 0x27ec, 0x27ee, 0x27f0, + 0x27f2, 0x27f4, 0x27f6, 0x27f8, 0x27fa, 0x27fc, 0x27fe, 0x2800, + 0x2802, 0x2804, 0x2806, 0x2808, 0x280a, 0x280c, 0x280e, 0x2810, + 0x2812, 0x2814, 0x2816, 0x2818, 0x281a, 0x281c, 0x281e, 0x2820, + 0x2822, 0x2824, 0x2826, 0x2828, 0x282a, 0x282c, 0x282e, 0x2830, + 0x2832, 0x2834, 0x2836, 0x2838, 0x283a, 0x283c, 0x283e, 0x2840, + 0x2842, 0x2844, 0x2846, 0x2848, 0x284a, 0x284c, 0x284e, 0x2850, + 0x2852, 0x2854, 0x2856, 0x2858, 0x285a, 0x285c, 0x285e, 0x2860, + 0x2862, 0x2864, 0x2866, 0x2868, 0x286a, 0x286c, 0x286e, 0x2870, + 0x2872, 0x2874, 0x2876, 0x2878, 0x287a, 0x287c, 0x287e, 0x2880, + 0x2882, 0x2884, 0x2886, 0x2888, 0x288a, 0x288c, 0x288e, 0xffff, + 0xffff, 0xffff, 0x2890, 0x2892, 0x2894, 0x2896, 0x2898, 0x289a, + 0xffff, 0xffff, 0x289c, 0x289e, 0x28a0, 0x28a2, 0x28a4, 0x28a6, + 0xffff, 0xffff, 0x28a8, 0x28aa, 0x28ac, 0x28ae, 0x28b0, 0x28b2, + 0xffff, 0xffff, 0x28b4, 0x28b6, 0x28b8, 0xffff, 0xffff, 0xffff, + 0x28ba, 0x28bc, 0x28be, 0x28c0, 0x28c2, 0x28c4, 0x28c6, 0xffff, + 0x28c8, 0x28ca, 0x28cc, 0x28ce, 0x28d0, 0x28d2, 0x28d4, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x28d6, 0xffff, 0x28db, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x28e0, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x28e5, 0x28ea, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x28ef, 0x28f4, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x28f9, 0x28fe, 0xffff, 0x2903, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x2908, 0x290d, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x2912, 0x2917, + 0x291c, 0x2921, 0x2926, 0x292b, 0x2930, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x2935, 0x293a, 0x293f, 0x2944, 0x2949, + 0x294e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x2953, 0x2955, 0x2957, 0x2959, 0x295b, 0x295d, 0x295f, 0x2961, + 0x2963, 0x2965, 0x2967, 0x2969, 0x296b, 0x296d, 0x296f, 0x2971, + 0x2973, 0x2975, 0x2977, 0x2979, 0x297b, 0x297d, 0x297f, 0x2981, + 0x2983, 0x2985, 0x2987, 0x2989, 0x298b, 0x298d, 0x298f, 0x2991, + 0x2993, 0x2995, 0x2997, 0x2999, 0x299b, 0x299d, 0x299f, 0x29a1, + 0x29a3, 0x29a5, 0x29a7, 0x29a9, 0x29ab, 0x29ad, 0x29af, 0x29b1, + 0x29b3, 0x29b5, 0x29b7, 0x29b9, 0x29bb, 0x29bd, 0x29bf, 0x29c1, + 0x29c3, 0x29c5, 0x29c7, 0x29c9, 0x29cb, 0x29cd, 0x29cf, 0x29d1, + 0x29d3, 0x29d5, 0x29d7, 0x29d9, 0x29db, 0x29dd, 0x29df, 0x29e1, + 0x29e3, 0x29e5, 0x29e7, 0x29e9, 0x29eb, 0x29ed, 0x29ef, 0x29f1, + 0x29f3, 0x29f5, 0x29f7, 0x29f9, 0x29fb, 0xffff, 0x29fd, 0x29ff, + 0x2a01, 0x2a03, 0x2a05, 0x2a07, 0x2a09, 0x2a0b, 0x2a0d, 0x2a0f, + 0x2a11, 0x2a13, 0x2a15, 0x2a17, 0x2a19, 0x2a1b, 0x2a1d, 0x2a1f, + 0x2a21, 0x2a23, 0x2a25, 0x2a27, 0x2a29, 0x2a2b, 0x2a2d, 0x2a2f, + 0x2a31, 0x2a33, 0x2a35, 0x2a37, 0x2a39, 0x2a3b, 0x2a3d, 0x2a3f, + 0x2a41, 0x2a43, 0x2a45, 0x2a47, 0x2a49, 0x2a4b, 0x2a4d, 0x2a4f, + 0x2a51, 0x2a53, 0x2a55, 0x2a57, 0x2a59, 0x2a5b, 0x2a5d, 0x2a5f, + 0x2a61, 0x2a63, 0x2a65, 0x2a67, 0x2a69, 0x2a6b, 0x2a6d, 0x2a6f, + 0x2a71, 0x2a73, 0x2a75, 0x2a77, 0x2a79, 0x2a7b, 0x2a7d, 0x2a7f, + 0x2a81, 0x2a83, 0x2a85, 0x2a87, 0x2a89, 0xffff, 0x2a8b, 0x2a8d, + 0xffff, 0xffff, 0x2a8f, 0xffff, 0xffff, 0x2a91, 0x2a93, 0xffff, + 0xffff, 0x2a95, 0x2a97, 0x2a99, 0x2a9b, 0xffff, 0x2a9d, 0x2a9f, + 0x2aa1, 0x2aa3, 0x2aa5, 0x2aa7, 0x2aa9, 0x2aab, 0x2aad, 0x2aaf, + 0x2ab1, 0x2ab3, 0xffff, 0x2ab5, 0xffff, 0x2ab7, 0x2ab9, 0x2abb, + 0x2abd, 0x2abf, 0x2ac1, 0x2ac3, 0xffff, 0x2ac5, 0x2ac7, 0x2ac9, + 0x2acb, 0x2acd, 0x2acf, 0x2ad1, 0x2ad3, 0x2ad5, 0x2ad7, 0x2ad9, + 0x2adb, 0x2add, 0x2adf, 0x2ae1, 0x2ae3, 0x2ae5, 0x2ae7, 0x2ae9, + 0x2aeb, 0x2aed, 0x2aef, 0x2af1, 0x2af3, 0x2af5, 0x2af7, 0x2af9, + 0x2afb, 0x2afd, 0x2aff, 0x2b01, 0x2b03, 0x2b05, 0x2b07, 0x2b09, + 0x2b0b, 0x2b0d, 0x2b0f, 0x2b11, 0x2b13, 0x2b15, 0x2b17, 0x2b19, + 0x2b1b, 0x2b1d, 0x2b1f, 0x2b21, 0x2b23, 0x2b25, 0x2b27, 0x2b29, + 0x2b2b, 0x2b2d, 0x2b2f, 0x2b31, 0x2b33, 0x2b35, 0x2b37, 0x2b39, + + 0x2b3b, 0x2b3d, 0x2b3f, 0x2b41, 0x2b43, 0x2b45, 0xffff, 0x2b47, + 0x2b49, 0x2b4b, 0x2b4d, 0xffff, 0xffff, 0x2b4f, 0x2b51, 0x2b53, + 0x2b55, 0x2b57, 0x2b59, 0x2b5b, 0x2b5d, 0xffff, 0x2b5f, 0x2b61, + 0x2b63, 0x2b65, 0x2b67, 0x2b69, 0x2b6b, 0xffff, 0x2b6d, 0x2b6f, + 0x2b71, 0x2b73, 0x2b75, 0x2b77, 0x2b79, 0x2b7b, 0x2b7d, 0x2b7f, + 0x2b81, 0x2b83, 0x2b85, 0x2b87, 0x2b89, 0x2b8b, 0x2b8d, 0x2b8f, + 0x2b91, 0x2b93, 0x2b95, 0x2b97, 0x2b99, 0x2b9b, 0x2b9d, 0x2b9f, + 0x2ba1, 0x2ba3, 0xffff, 0x2ba5, 0x2ba7, 0x2ba9, 0x2bab, 0xffff, + 0x2bad, 0x2baf, 0x2bb1, 0x2bb3, 0x2bb5, 0xffff, 0x2bb7, 0xffff, + 0xffff, 0xffff, 0x2bb9, 0x2bbb, 0x2bbd, 0x2bbf, 0x2bc1, 0x2bc3, + 0x2bc5, 0xffff, 0x2bc7, 0x2bc9, 0x2bcb, 0x2bcd, 0x2bcf, 0x2bd1, + 0x2bd3, 0x2bd5, 0x2bd7, 0x2bd9, 0x2bdb, 0x2bdd, 0x2bdf, 0x2be1, + 0x2be3, 0x2be5, 0x2be7, 0x2be9, 0x2beb, 0x2bed, 0x2bef, 0x2bf1, + 0x2bf3, 0x2bf5, 0x2bf7, 0x2bf9, 0x2bfb, 0x2bfd, 0x2bff, 0x2c01, + 0x2c03, 0x2c05, 0x2c07, 0x2c09, 0x2c0b, 0x2c0d, 0x2c0f, 0x2c11, + 0x2c13, 0x2c15, 0x2c17, 0x2c19, 0x2c1b, 0x2c1d, 0x2c1f, 0x2c21, + 0x2c23, 0x2c25, 0x2c27, 0x2c29, 0x2c2b, 0x2c2d, 0x2c2f, 0x2c31, + 0x2c33, 0x2c35, 0x2c37, 0x2c39, 0x2c3b, 0x2c3d, 0x2c3f, 0x2c41, + 0x2c43, 0x2c45, 0x2c47, 0x2c49, 0x2c4b, 0x2c4d, 0x2c4f, 0x2c51, + 0x2c53, 0x2c55, 0x2c57, 0x2c59, 0x2c5b, 0x2c5d, 0x2c5f, 0x2c61, + 0x2c63, 0x2c65, 0x2c67, 0x2c69, 0x2c6b, 0x2c6d, 0x2c6f, 0x2c71, + 0x2c73, 0x2c75, 0x2c77, 0x2c79, 0x2c7b, 0x2c7d, 0x2c7f, 0x2c81, + 0x2c83, 0x2c85, 0x2c87, 0x2c89, 0x2c8b, 0x2c8d, 0x2c8f, 0x2c91, + 0x2c93, 0x2c95, 0x2c97, 0x2c99, 0x2c9b, 0x2c9d, 0x2c9f, 0x2ca1, + 0x2ca3, 0x2ca5, 0x2ca7, 0x2ca9, 0x2cab, 0x2cad, 0x2caf, 0x2cb1, + 0x2cb3, 0x2cb5, 0x2cb7, 0x2cb9, 0x2cbb, 0x2cbd, 0x2cbf, 0x2cc1, + 0x2cc3, 0x2cc5, 0x2cc7, 0x2cc9, 0x2ccb, 0x2ccd, 0x2ccf, 0x2cd1, + 0x2cd3, 0x2cd5, 0x2cd7, 0x2cd9, 0x2cdb, 0x2cdd, 0x2cdf, 0x2ce1, + 0x2ce3, 0x2ce5, 0x2ce7, 0x2ce9, 0x2ceb, 0x2ced, 0x2cef, 0x2cf1, + 0x2cf3, 0x2cf5, 0x2cf7, 0x2cf9, 0x2cfb, 0x2cfd, 0x2cff, 0x2d01, + 0x2d03, 0x2d05, 0x2d07, 0x2d09, 0x2d0b, 0x2d0d, 0x2d0f, 0x2d11, + 0x2d13, 0x2d15, 0x2d17, 0x2d19, 0x2d1b, 0x2d1d, 0x2d1f, 0x2d21, + + 0x2d23, 0x2d25, 0x2d27, 0x2d29, 0x2d2b, 0x2d2d, 0x2d2f, 0x2d31, + 0x2d33, 0x2d35, 0x2d37, 0x2d39, 0x2d3b, 0x2d3d, 0x2d3f, 0x2d41, + 0x2d43, 0x2d45, 0x2d47, 0x2d49, 0x2d4b, 0x2d4d, 0x2d4f, 0x2d51, + 0x2d53, 0x2d55, 0x2d57, 0x2d59, 0x2d5b, 0x2d5d, 0x2d5f, 0x2d61, + 0x2d63, 0x2d65, 0x2d67, 0x2d69, 0x2d6b, 0x2d6d, 0x2d6f, 0x2d71, + 0x2d73, 0x2d75, 0x2d77, 0x2d79, 0x2d7b, 0x2d7d, 0x2d7f, 0x2d81, + 0x2d83, 0x2d85, 0x2d87, 0x2d89, 0x2d8b, 0x2d8d, 0x2d8f, 0x2d91, + 0x2d93, 0x2d95, 0x2d97, 0x2d99, 0x2d9b, 0x2d9d, 0x2d9f, 0x2da1, + 0x2da3, 0x2da5, 0x2da7, 0x2da9, 0x2dab, 0x2dad, 0x2daf, 0x2db1, + 0x2db3, 0x2db5, 0x2db7, 0x2db9, 0x2dbb, 0x2dbd, 0x2dbf, 0x2dc1, + 0x2dc3, 0x2dc5, 0x2dc7, 0x2dc9, 0x2dcb, 0x2dcd, 0x2dcf, 0x2dd1, + 0x2dd3, 0x2dd5, 0x2dd7, 0x2dd9, 0x2ddb, 0x2ddd, 0x2ddf, 0x2de1, + 0x2de3, 0x2de5, 0x2de7, 0x2de9, 0x2deb, 0x2ded, 0x2def, 0x2df1, + 0x2df3, 0x2df5, 0x2df7, 0x2df9, 0x2dfb, 0x2dfd, 0x2dff, 0x2e01, + 0x2e03, 0x2e05, 0x2e07, 0x2e09, 0x2e0b, 0x2e0d, 0x2e0f, 0x2e11, + 0x2e13, 0x2e15, 0x2e17, 0x2e19, 0x2e1b, 0x2e1d, 0x2e1f, 0x2e21, + 0x2e23, 0x2e25, 0x2e27, 0x2e29, 0x2e2b, 0x2e2d, 0x2e2f, 0x2e31, + 0x2e33, 0x2e35, 0x2e37, 0x2e39, 0x2e3b, 0x2e3d, 0x2e3f, 0x2e41, + 0x2e43, 0x2e45, 0x2e47, 0x2e49, 0x2e4b, 0x2e4d, 0x2e4f, 0x2e51, + 0x2e53, 0x2e55, 0x2e57, 0x2e59, 0x2e5b, 0x2e5d, 0x2e5f, 0x2e61, + 0x2e63, 0x2e65, 0x2e67, 0x2e69, 0x2e6b, 0x2e6d, 0xffff, 0xffff, + 0x2e6f, 0x2e71, 0x2e73, 0x2e75, 0x2e77, 0x2e79, 0x2e7b, 0x2e7d, + 0x2e7f, 0x2e81, 0x2e83, 0x2e85, 0x2e87, 0x2e89, 0x2e8b, 0x2e8d, + 0x2e8f, 0x2e91, 0x2e93, 0x2e95, 0x2e97, 0x2e99, 0x2e9b, 0x2e9d, + 0x2e9f, 0x2ea1, 0x2ea3, 0x2ea5, 0x2ea7, 0x2ea9, 0x2eab, 0x2ead, + 0x2eaf, 0x2eb1, 0x2eb3, 0x2eb5, 0x2eb7, 0x2eb9, 0x2ebb, 0x2ebd, + 0x2ebf, 0x2ec1, 0x2ec3, 0x2ec5, 0x2ec7, 0x2ec9, 0x2ecb, 0x2ecd, + 0x2ecf, 0x2ed1, 0x2ed3, 0x2ed5, 0x2ed7, 0x2ed9, 0x2edb, 0x2edd, + 0x2edf, 0x2ee1, 0x2ee3, 0x2ee5, 0x2ee7, 0x2ee9, 0x2eeb, 0x2eed, + 0x2eef, 0x2ef1, 0x2ef3, 0x2ef5, 0x2ef7, 0x2ef9, 0x2efb, 0x2efd, + 0x2eff, 0x2f01, 0x2f03, 0x2f05, 0x2f07, 0x2f09, 0x2f0b, 0x2f0d, + 0x2f0f, 0x2f11, 0x2f13, 0x2f15, 0x2f17, 0x2f19, 0x2f1b, 0x2f1d, + + 0x2f1f, 0x2f21, 0x2f23, 0x2f25, 0x2f27, 0x2f29, 0x2f2b, 0x2f2d, + 0x2f2f, 0x2f31, 0x2f33, 0x2f35, 0x2f37, 0x2f39, 0x2f3b, 0x2f3d, + 0x2f3f, 0x2f41, 0x2f43, 0x2f45, 0x2f47, 0x2f49, 0x2f4b, 0x2f4d, + 0x2f4f, 0x2f51, 0x2f53, 0x2f55, 0x2f57, 0x2f59, 0x2f5b, 0x2f5d, + 0x2f5f, 0x2f61, 0x2f63, 0x2f65, 0x2f67, 0x2f69, 0x2f6b, 0x2f6d, + 0x2f6f, 0x2f71, 0x2f73, 0x2f75, 0x2f77, 0x2f79, 0x2f7b, 0x2f7d, + 0x2f7f, 0x2f81, 0x2f83, 0x2f85, 0x2f87, 0x2f89, 0x2f8b, 0x2f8d, + 0x2f8f, 0x2f91, 0x2f93, 0x2f95, 0x2f97, 0x2f99, 0x2f9b, 0x2f9d, + 0x2f9f, 0x2fa1, 0x2fa3, 0x2fa5, 0x2fa7, 0x2fa9, 0x2fab, 0x2fad, + 0x2faf, 0x2fb1, 0x2fb3, 0x2fb5, 0x2fb7, 0x2fb9, 0x2fbb, 0x2fbd, + 0x2fbf, 0x2fc1, 0x2fc3, 0x2fc5, 0x2fc7, 0x2fc9, 0x2fcb, 0x2fcd, + 0x2fcf, 0x2fd1, 0x2fd3, 0x2fd5, 0x2fd7, 0x2fd9, 0x2fdb, 0x2fdd, + 0x2fdf, 0x2fe1, 0x2fe3, 0x2fe5, 0x2fe7, 0x2fe9, 0x2feb, 0x2fed, + 0x2fef, 0x2ff1, 0x2ff3, 0x2ff5, 0x2ff7, 0x2ff9, 0x2ffb, 0x2ffd, + 0x2fff, 0x3001, 0x3003, 0x3005, 0x3007, 0x3009, 0x300b, 0x300d, + 0x300f, 0x3011, 0x3013, 0x3015, 0x3017, 0x3019, 0x301b, 0x301d, + 0x301f, 0x3021, 0x3023, 0x3025, 0x3027, 0x3029, 0x302b, 0x302d, + 0x302f, 0x3031, 0x3033, 0x3035, 0x3037, 0x3039, 0x303b, 0x303d, + 0x303f, 0x3041, 0x3043, 0x3045, 0x3047, 0x3049, 0x304b, 0x304d, + 0x304f, 0x3051, 0x3053, 0x3055, 0x3057, 0x3059, 0x305b, 0x305d, + 0x305f, 0x3061, 0x3063, 0x3065, 0x3067, 0x3069, 0x306b, 0x306d, + 0x306f, 0x3071, 0x3073, 0x3075, 0x3077, 0x3079, 0x307b, 0x307d, + 0x307f, 0x3081, 0x3083, 0x3085, 0x3087, 0x3089, 0x308b, 0x308d, + 0x308f, 0x3091, 0x3093, 0x3095, 0x3097, 0x3099, 0x309b, 0x309d, + 0x309f, 0x30a1, 0x30a3, 0x30a5, 0x30a7, 0x30a9, 0x30ab, 0x30ad, + 0x30af, 0x30b1, 0x30b3, 0x30b5, 0xffff, 0xffff, 0x30b7, 0x30b9, + 0x30bb, 0x30bd, 0x30bf, 0x30c1, 0x30c3, 0x30c5, 0x30c7, 0x30c9, + 0x30cb, 0x30cd, 0x30cf, 0x30d1, 0x30d3, 0x30d5, 0x30d7, 0x30d9, + 0x30db, 0x30dd, 0x30df, 0x30e1, 0x30e3, 0x30e5, 0x30e7, 0x30e9, + 0x30eb, 0x30ed, 0x30ef, 0x30f1, 0x30f3, 0x30f5, 0x30f7, 0x30f9, + 0x30fb, 0x30fd, 0x30ff, 0x3101, 0x3103, 0x3105, 0x3107, 0x3109, + 0x310b, 0x310d, 0x310f, 0x3111, 0x3113, 0x3115, 0x3117, 0x3119, + + 0x311b, 0x311d, 0x311f, 0x3121, 0xffff, 0x3123, 0x3125, 0x3127, + 0x3129, 0x312b, 0x312d, 0x312f, 0x3131, 0x3133, 0x3135, 0x3137, + 0x3139, 0x313b, 0x313d, 0x313f, 0x3141, 0x3143, 0x3145, 0x3147, + 0x3149, 0x314b, 0x314d, 0x314f, 0x3151, 0x3153, 0x3155, 0x3157, + 0xffff, 0x3159, 0x315b, 0xffff, 0x315d, 0xffff, 0xffff, 0x315f, + 0xffff, 0x3161, 0x3163, 0x3165, 0x3167, 0x3169, 0x316b, 0x316d, + 0x316f, 0x3171, 0x3173, 0xffff, 0x3175, 0x3177, 0x3179, 0x317b, + 0xffff, 0x317d, 0xffff, 0x317f, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x3181, 0xffff, 0xffff, 0xffff, 0xffff, 0x3183, + 0xffff, 0x3185, 0xffff, 0x3187, 0xffff, 0x3189, 0x318b, 0x318d, + 0xffff, 0x318f, 0x3191, 0xffff, 0x3193, 0xffff, 0xffff, 0x3195, + 0xffff, 0x3197, 0xffff, 0x3199, 0xffff, 0x319b, 0xffff, 0x319d, + 0xffff, 0x319f, 0x31a1, 0xffff, 0x31a3, 0xffff, 0xffff, 0x31a5, + 0x31a7, 0x31a9, 0x31ab, 0xffff, 0x31ad, 0x31af, 0x31b1, 0x31b3, + 0x31b5, 0x31b7, 0x31b9, 0xffff, 0x31bb, 0x31bd, 0x31bf, 0x31c1, + 0xffff, 0x31c3, 0x31c5, 0x31c7, 0x31c9, 0xffff, 0x31cb, 0xffff, + 0x31cd, 0x31cf, 0x31d1, 0x31d3, 0x31d5, 0x31d7, 0x31d9, 0x31db, + 0x31dd, 0x31df, 0xffff, 0x31e1, 0x31e3, 0x31e5, 0x31e7, 0x31e9, + 0x31eb, 0x31ed, 0x31ef, 0x31f1, 0x31f3, 0x31f5, 0x31f7, 0x31f9, + 0x31fb, 0x31fd, 0x31ff, 0x3201, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x3203, 0x3205, 0x3207, 0xffff, 0x3209, 0x320b, 0x320d, + 0x320f, 0x3211, 0xffff, 0x3213, 0x3215, 0x3217, 0x3219, 0x321b, + 0x321d, 0x321f, 0x3221, 0x3223, 0x3225, 0x3227, 0x3229, 0x322b, + 0x322d, 0x322f, 0x3231, 0x3233, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x3235, 0x3238, 0x323b, 0x323e, 0x3241, 0x3244, 0x3247, 0x324a, + 0x324d, 0x3250, 0x3253, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x3256, 0x325a, 0x325e, 0x3262, 0x3266, 0x326a, 0x326e, 0x3272, + 0x3276, 0x327a, 0x327e, 0x3282, 0x3286, 0x328a, 0x328e, 0x3292, + 0x3296, 0x329a, 0x329e, 0x32a2, 0x32a6, 0x32aa, 0x32ae, 0x32b2, + 0x32b6, 0x32ba, 0x32be, 0x32c2, 0x32c4, 0x32c6, 0x32c9, 0xffff, + 0x32cc, 0x32ce, 0x32d0, 0x32d2, 0x32d4, 0x32d6, 0x32d8, 0x32da, + 0x32dc, 0x32de, 0x32e0, 0x32e2, 0x32e4, 0x32e6, 0x32e8, 0x32ea, + 0x32ec, 0x32ee, 0x32f0, 0x32f2, 0x32f4, 0x32f6, 0x32f8, 0x32fa, + 0x32fc, 0x32fe, 0x3300, 0x3303, 0x3306, 0x3309, 0x330c, 0x3310, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x3313, 0x3316, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x3319, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x331c, 0x331f, 0x3322, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x3324, 0x3326, 0x3328, 0x332a, 0x332c, 0x332e, 0x3330, 0x3332, + 0x3334, 0x3336, 0x3338, 0x333a, 0x333c, 0x333e, 0x3340, 0x3342, + 0x3344, 0x3346, 0x3348, 0x334a, 0x334c, 0x334e, 0x3350, 0x3352, + 0x3354, 0x3356, 0x3358, 0x335a, 0x335c, 0x335e, 0x3360, 0x3362, + 0x3364, 0x3366, 0x3368, 0x336a, 0x336c, 0x336e, 0x3370, 0x3372, + 0x3374, 0x3376, 0x3378, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x337a, 0x337e, 0x3382, 0x3386, 0x338a, 0x338e, 0x3392, 0x3396, + 0x339a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x339e, 0x33a0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x33a2, 0x33a4, 0x33a6, 0x33a8, 0x33ab, 0x33ad, 0x33af, 0x33b1, + 0x33b3, 0x33b5, 0x33b7, 0x33b9, 0x33bb, 0x33bd, 0x33c0, 0x33c2, + 0x33c4, 0x33c6, 0x33c8, 0x33cb, 0x33cd, 0x33cf, 0x33d1, 0x33d4, + 0x33d6, 0x33d8, 0x33da, 0x33dc, 0x33de, 0x33e1, 0x33e3, 0x33e5, + 0x33e7, 0x33e9, 0x33eb, 0x33ed, 0x33ef, 0x33f1, 0x33f3, 0x33f5, + 0x33f7, 0x33f9, 0x33fb, 0x33fd, 0x33ff, 0x3401, 0x3403, 0x3405, + 0x3407, 0x3409, 0x340b, 0x340d, 0x340f, 0x3412, 0x3414, 0x3416, + 0x3418, 0x341b, 0x341d, 0x341f, 0x3421, 0x3423, 0x3425, 0x3427, + 0x3429, 0x342b, 0x342d, 0x342f, 0x3431, 0x3433, 0x3435, 0x3437, + 0x3439, 0x343b, 0x343d, 0x343f, 0x3441, 0x3443, 0x3445, 0x3447, + 0x3449, 0x344b, 0x344d, 0x344f, 0x3451, 0x3453, 0x3455, 0x3457, + 0x3459, 0x345b, 0x345e, 0x3460, 0x3462, 0x3464, 0x3466, 0x3468, + 0x346a, 0x346d, 0x3470, 0x3472, 0x3474, 0x3476, 0x3478, 0x347a, + 0x347c, 0x347e, 0x3480, 0x3482, 0x3484, 0x3487, 0x3489, 0x348b, + 0x348d, 0x348f, 0x3492, 0x3494, 0x3496, 0x3498, 0x349a, 0x349c, + 0x349e, 0x34a0, 0x34a2, 0x34a4, 0x34a7, 0x34a9, 0x34ac, 0x34ae, + 0x34b0, 0x34b2, 0x34b4, 0x34b6, 0x34b8, 0x34ba, 0x34bc, 0x34be, + 0x34c0, 0x34c2, 0x34c5, 0x34c7, 0x34c9, 0x34cb, 0x34cd, 0x34cf, + 0x34d2, 0x34d4, 0x34d7, 0x34da, 0x34dc, 0x34de, 0x34e0, 0x34e2, + 0x34e5, 0x34e8, 0x34ea, 0x34ec, 0x34ee, 0x34f0, 0x34f2, 0x34f4, + 0x34f6, 0x34f8, 0x34fa, 0x34fc, 0x34fe, 0x3501, 0x3503, 0x3505, + 0x3507, 0x3509, 0x350b, 0x350d, 0x350f, 0x3511, 0x3513, 0x3515, + 0x3517, 0x3519, 0x351b, 0x351d, 0x351f, 0x3521, 0x3523, 0x3525, + 0x3527, 0x352a, 0x352c, 0x352e, 0x3530, 0x3532, 0x3534, 0x3537, + 0x3539, 0x353b, 0x353d, 0x353f, 0x3541, 0x3543, 0x3545, 0x3547, + 0x3549, 0x354b, 0x354d, 0x3550, 0x3552, 0x3554, 0x3556, 0x3558, + 0x355a, 0x355c, 0x355e, 0x3560, 0x3562, 0x3564, 0x3566, 0x3568, + 0x356a, 0x356c, 0x356e, 0x3570, 0x3572, 0x3574, 0x3577, 0x3579, + 0x357b, 0x357d, 0x357f, 0x3581, 0x3584, 0x3586, 0x3588, 0x358a, + 0x358c, 0x358e, 0x3590, 0x3592, 0x3594, 0x3597, 0x3599, 0x359b, + 0x359d, 0x35a0, 0x35a2, 0x35a4, 0x35a6, 0x35a8, 0x35aa, 0x35ac, + 0x35af, 0x35b2, 0x35b5, 0x35b7, 0x35ba, 0x35bc, 0x35be, 0x35c0, + + 0x35c2, 0x35c4, 0x35c6, 0x35c8, 0x35ca, 0x35cc, 0x35ce, 0x35d1, + 0x35d3, 0x35d5, 0x35d7, 0x35d9, 0x35db, 0x35dd, 0x35e0, 0x35e2, + 0x35e4, 0x35e7, 0x35ea, 0x35ec, 0x35ee, 0x35f0, 0x35f2, 0x35f4, + 0x35f6, 0x35f8, 0x35fa, 0x35fc, 0x35ff, 0x3601, 0x3604, 0x3606, + 0x3609, 0x360b, 0x360d, 0x360f, 0x3612, 0x3614, 0x3616, 0x3619, + 0x361c, 0x361e, 0x3620, 0x3622, 0x3624, 0x3626, 0x3628, 0x362a, + 0x362c, 0x362e, 0x3630, 0x3632, 0x3634, 0x3636, 0x3639, 0x363b, + 0x363e, 0x3640, 0x3643, 0x3645, 0x3648, 0x364b, 0x364e, 0x3650, + 0x3652, 0x3654, 0x3657, 0x365a, 0x365d, 0x3660, 0x3662, 0x3664, + 0x3666, 0x3668, 0x366a, 0x366c, 0x366e, 0x3670, 0x3673, 0x3675, + 0x3677, 0x3679, 0x367b, 0x367e, 0x3680, 0x3683, 0x3686, 0x3688, + 0x368a, 0x368c, 0x368e, 0x3690, 0x3692, 0x3695, 0x3698, 0x369b, + 0x369d, 0x369f, 0x36a2, 0x36a4, 0x36a6, 0x36a8, 0x36ab, 0x36ad, + 0x36af, 0x36b1, 0x36b3, 0x36b5, 0x36b8, 0x36ba, 0x36bc, 0x36be, + 0x36c0, 0x36c2, 0x36c4, 0x36c7, 0x36ca, 0x36cc, 0x36cf, 0x36d1, + 0x36d4, 0x36d6, 0x36d8, 0x36da, 0x36dd, 0x36e0, 0x36e2, 0x36e5, + 0x36e7, 0x36ea, 0x36ec, 0x36ee, 0x36f0, 0x36f2, 0x36f4, 0x36f6, + 0x36f9, 0x36fc, 0x36ff, 0x3702, 0x3704, 0x3706, 0x3708, 0x370a, + 0x370c, 0x370e, 0x3710, 0x3712, 0x3714, 0x3716, 0x3718, 0x371a, + 0x371d, 0x371f, 0x3721, 0x3723, 0x3725, 0x3727, 0x3729, 0x372b, + 0x372d, 0x372f, 0x3731, 0x3733, 0x3735, 0x3738, 0x373b, 0x373e, + 0x3740, 0x3742, 0x3744, 0x3746, 0x3749, 0x374b, 0x374e, 0x3750, + 0x3752, 0x3755, 0x3758, 0x375a, 0x375c, 0x375e, 0x3760, 0x3762, + 0x3764, 0x3766, 0x3768, 0x376a, 0x376c, 0x376e, 0x3770, 0x3772, + 0x3774, 0x3776, 0x3778, 0x377a, 0x377c, 0x377e, 0x3781, 0x3783, + 0x3785, 0x3787, 0x3789, 0x378b, 0x378e, 0x3791, 0x3793, 0x3795, + 0x3797, 0x3799, 0x379b, 0x379d, 0x37a0, 0x37a2, 0x37a4, 0x37a6, + 0x37a8, 0x37ab, 0x37ae, 0x37b0, 0x37b2, 0x37b4, 0x37b7, 0x37b9, + 0x37bb, 0x37be, 0x37c1, 0x37c3, 0x37c5, 0x37c7, 0x37ca, 0x37cc, + 0x37ce, 0x37d0, 0x37d2, 0x37d4, 0x37d6, 0x37d8, 0x37db, 0x37dd, + 0x37df, 0x37e1, 0x37e4, 0x37e6, 0x37e8, 0x37ea, 0x37ec, 0x37ef, + 0x37f2, 0x37f4, 0x37f6, 0x37f8, 0x37fb, 0x37fd, 0x3800, 0x3802, + + 0x3804, 0x3806, 0x3809, 0x380b, 0x380d, 0x380f, 0x3811, 0x3813, + 0x3815, 0x3817, 0x381a, 0x381c, 0x381e, 0x3820, 0x3822, 0x3824, + 0x3826, 0x3829, 0x382b, 0x382e, 0x3831, 0x3834, 0x3836, 0x3838, + 0x383a, 0x383c, 0x383e, 0x3840, 0x3842, 0x3844, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff +}; + +#define GET_DECOMPOSITION_INDEX(ucs4) \ + (ucs4 < 0x3400 \ + ? (uc_decomposition_trie[uc_decomposition_trie[ucs4>>4] + (ucs4 & 0xf)]) \ + : (ucs4 < 0x30000\ + ? uc_decomposition_trie[uc_decomposition_trie[((ucs4 - 0x3400)>>8) + 0x340] + (ucs4 & 0xff)]\ + : 0xffff)) + +static const unsigned short uc_decomposition_map[] = { + 0x103, 0x20, 0x210, 0x20, 0x308, 0x109, 0x61, 0x210, + 0x20, 0x304, 0x109, 0x32, 0x109, 0x33, 0x210, 0x20, + 0x301, 0x110, 0x3bc, 0x210, 0x20, 0x327, 0x109, 0x31, + 0x109, 0x6f, 0x311, 0x31, 0x2044, 0x34, 0x311, 0x31, + 0x2044, 0x32, 0x311, 0x33, 0x2044, 0x34, 0x201, 0x41, + 0x300, 0x201, 0x41, 0x301, 0x201, 0x41, 0x302, 0x201, + 0x41, 0x303, 0x201, 0x41, 0x308, 0x201, 0x41, 0x30a, + 0x201, 0x43, 0x327, 0x201, 0x45, 0x300, 0x201, 0x45, + 0x301, 0x201, 0x45, 0x302, 0x201, 0x45, 0x308, 0x201, + 0x49, 0x300, 0x201, 0x49, 0x301, 0x201, 0x49, 0x302, + 0x201, 0x49, 0x308, 0x201, 0x4e, 0x303, 0x201, 0x4f, + 0x300, 0x201, 0x4f, 0x301, 0x201, 0x4f, 0x302, 0x201, + 0x4f, 0x303, 0x201, 0x4f, 0x308, 0x201, 0x55, 0x300, + 0x201, 0x55, 0x301, 0x201, 0x55, 0x302, 0x201, 0x55, + 0x308, 0x201, 0x59, 0x301, 0x201, 0x61, 0x300, 0x201, + 0x61, 0x301, 0x201, 0x61, 0x302, 0x201, 0x61, 0x303, + 0x201, 0x61, 0x308, 0x201, 0x61, 0x30a, 0x201, 0x63, + 0x327, 0x201, 0x65, 0x300, 0x201, 0x65, 0x301, 0x201, + 0x65, 0x302, 0x201, 0x65, 0x308, 0x201, 0x69, 0x300, + 0x201, 0x69, 0x301, 0x201, 0x69, 0x302, 0x201, 0x69, + 0x308, 0x201, 0x6e, 0x303, 0x201, 0x6f, 0x300, 0x201, + 0x6f, 0x301, 0x201, 0x6f, 0x302, 0x201, 0x6f, 0x303, + 0x201, 0x6f, 0x308, 0x201, 0x75, 0x300, 0x201, 0x75, + 0x301, 0x201, 0x75, 0x302, 0x201, 0x75, 0x308, 0x201, + 0x79, 0x301, 0x201, 0x79, 0x308, 0x201, 0x41, 0x304, + 0x201, 0x61, 0x304, 0x201, 0x41, 0x306, 0x201, 0x61, + 0x306, 0x201, 0x41, 0x328, 0x201, 0x61, 0x328, 0x201, + 0x43, 0x301, 0x201, 0x63, 0x301, 0x201, 0x43, 0x302, + 0x201, 0x63, 0x302, 0x201, 0x43, 0x307, 0x201, 0x63, + 0x307, 0x201, 0x43, 0x30c, 0x201, 0x63, 0x30c, 0x201, + 0x44, 0x30c, 0x201, 0x64, 0x30c, 0x201, 0x45, 0x304, + 0x201, 0x65, 0x304, 0x201, 0x45, 0x306, 0x201, 0x65, + 0x306, 0x201, 0x45, 0x307, 0x201, 0x65, 0x307, 0x201, + 0x45, 0x328, 0x201, 0x65, 0x328, 0x201, 0x45, 0x30c, + 0x201, 0x65, 0x30c, 0x201, 0x47, 0x302, 0x201, 0x67, + 0x302, 0x201, 0x47, 0x306, 0x201, 0x67, 0x306, 0x201, + 0x47, 0x307, 0x201, 0x67, 0x307, 0x201, 0x47, 0x327, + 0x201, 0x67, 0x327, 0x201, 0x48, 0x302, 0x201, 0x68, + 0x302, 0x201, 0x49, 0x303, 0x201, 0x69, 0x303, 0x201, + 0x49, 0x304, 0x201, 0x69, 0x304, 0x201, 0x49, 0x306, + 0x201, 0x69, 0x306, 0x201, 0x49, 0x328, 0x201, 0x69, + 0x328, 0x201, 0x49, 0x307, 0x210, 0x49, 0x4a, 0x210, + 0x69, 0x6a, 0x201, 0x4a, 0x302, 0x201, 0x6a, 0x302, + 0x201, 0x4b, 0x327, 0x201, 0x6b, 0x327, 0x201, 0x4c, + 0x301, 0x201, 0x6c, 0x301, 0x201, 0x4c, 0x327, 0x201, + 0x6c, 0x327, 0x201, 0x4c, 0x30c, 0x201, 0x6c, 0x30c, + 0x210, 0x4c, 0xb7, 0x210, 0x6c, 0xb7, 0x201, 0x4e, + 0x301, 0x201, 0x6e, 0x301, 0x201, 0x4e, 0x327, 0x201, + 0x6e, 0x327, 0x201, 0x4e, 0x30c, 0x201, 0x6e, 0x30c, + 0x210, 0x2bc, 0x6e, 0x201, 0x4f, 0x304, 0x201, 0x6f, + 0x304, 0x201, 0x4f, 0x306, 0x201, 0x6f, 0x306, 0x201, + 0x4f, 0x30b, 0x201, 0x6f, 0x30b, 0x201, 0x52, 0x301, + 0x201, 0x72, 0x301, 0x201, 0x52, 0x327, 0x201, 0x72, + 0x327, 0x201, 0x52, 0x30c, 0x201, 0x72, 0x30c, 0x201, + 0x53, 0x301, 0x201, 0x73, 0x301, 0x201, 0x53, 0x302, + 0x201, 0x73, 0x302, 0x201, 0x53, 0x327, 0x201, 0x73, + 0x327, 0x201, 0x53, 0x30c, 0x201, 0x73, 0x30c, 0x201, + 0x54, 0x327, 0x201, 0x74, 0x327, 0x201, 0x54, 0x30c, + 0x201, 0x74, 0x30c, 0x201, 0x55, 0x303, 0x201, 0x75, + 0x303, 0x201, 0x55, 0x304, 0x201, 0x75, 0x304, 0x201, + 0x55, 0x306, 0x201, 0x75, 0x306, 0x201, 0x55, 0x30a, + 0x201, 0x75, 0x30a, 0x201, 0x55, 0x30b, 0x201, 0x75, + 0x30b, 0x201, 0x55, 0x328, 0x201, 0x75, 0x328, 0x201, + 0x57, 0x302, 0x201, 0x77, 0x302, 0x201, 0x59, 0x302, + 0x201, 0x79, 0x302, 0x201, 0x59, 0x308, 0x201, 0x5a, + 0x301, 0x201, 0x7a, 0x301, 0x201, 0x5a, 0x307, 0x201, + 0x7a, 0x307, 0x201, 0x5a, 0x30c, 0x201, 0x7a, 0x30c, + 0x110, 0x73, 0x201, 0x4f, 0x31b, 0x201, 0x6f, 0x31b, + 0x201, 0x55, 0x31b, 0x201, 0x75, 0x31b, 0x210, 0x44, + 0x17d, 0x210, 0x44, 0x17e, 0x210, 0x64, 0x17e, 0x210, + 0x4c, 0x4a, 0x210, 0x4c, 0x6a, 0x210, 0x6c, 0x6a, + 0x210, 0x4e, 0x4a, 0x210, 0x4e, 0x6a, 0x210, 0x6e, + 0x6a, 0x201, 0x41, 0x30c, 0x201, 0x61, 0x30c, 0x201, + 0x49, 0x30c, 0x201, 0x69, 0x30c, 0x201, 0x4f, 0x30c, + 0x201, 0x6f, 0x30c, 0x201, 0x55, 0x30c, 0x201, 0x75, + 0x30c, 0x201, 0xdc, 0x304, 0x201, 0xfc, 0x304, 0x201, + 0xdc, 0x301, 0x201, 0xfc, 0x301, 0x201, 0xdc, 0x30c, + 0x201, 0xfc, 0x30c, 0x201, 0xdc, 0x300, 0x201, 0xfc, + 0x300, 0x201, 0xc4, 0x304, 0x201, 0xe4, 0x304, 0x201, + 0x226, 0x304, 0x201, 0x227, 0x304, 0x201, 0xc6, 0x304, + 0x201, 0xe6, 0x304, 0x201, 0x47, 0x30c, 0x201, 0x67, + 0x30c, 0x201, 0x4b, 0x30c, 0x201, 0x6b, 0x30c, 0x201, + 0x4f, 0x328, 0x201, 0x6f, 0x328, 0x201, 0x1ea, 0x304, + 0x201, 0x1eb, 0x304, 0x201, 0x1b7, 0x30c, 0x201, 0x292, + 0x30c, 0x201, 0x6a, 0x30c, 0x210, 0x44, 0x5a, 0x210, + 0x44, 0x7a, 0x210, 0x64, 0x7a, 0x201, 0x47, 0x301, + 0x201, 0x67, 0x301, 0x201, 0x4e, 0x300, 0x201, 0x6e, + 0x300, 0x201, 0xc5, 0x301, 0x201, 0xe5, 0x301, 0x201, + 0xc6, 0x301, 0x201, 0xe6, 0x301, 0x201, 0xd8, 0x301, + 0x201, 0xf8, 0x301, 0x201, 0x41, 0x30f, 0x201, 0x61, + 0x30f, 0x201, 0x41, 0x311, 0x201, 0x61, 0x311, 0x201, + 0x45, 0x30f, 0x201, 0x65, 0x30f, 0x201, 0x45, 0x311, + 0x201, 0x65, 0x311, 0x201, 0x49, 0x30f, 0x201, 0x69, + 0x30f, 0x201, 0x49, 0x311, 0x201, 0x69, 0x311, 0x201, + 0x4f, 0x30f, 0x201, 0x6f, 0x30f, 0x201, 0x4f, 0x311, + 0x201, 0x6f, 0x311, 0x201, 0x52, 0x30f, 0x201, 0x72, + 0x30f, 0x201, 0x52, 0x311, 0x201, 0x72, 0x311, 0x201, + 0x55, 0x30f, 0x201, 0x75, 0x30f, 0x201, 0x55, 0x311, + 0x201, 0x75, 0x311, 0x201, 0x53, 0x326, 0x201, 0x73, + 0x326, 0x201, 0x54, 0x326, 0x201, 0x74, 0x326, 0x201, + 0x48, 0x30c, 0x201, 0x68, 0x30c, 0x201, 0x41, 0x307, + 0x201, 0x61, 0x307, 0x201, 0x45, 0x327, 0x201, 0x65, + 0x327, 0x201, 0xd6, 0x304, 0x201, 0xf6, 0x304, 0x201, + 0xd5, 0x304, 0x201, 0xf5, 0x304, 0x201, 0x4f, 0x307, + 0x201, 0x6f, 0x307, 0x201, 0x22e, 0x304, 0x201, 0x22f, + 0x304, 0x201, 0x59, 0x304, 0x201, 0x79, 0x304, 0x109, + 0x68, 0x109, 0x266, 0x109, 0x6a, 0x109, 0x72, 0x109, + 0x279, 0x109, 0x27b, 0x109, 0x281, 0x109, 0x77, 0x109, + 0x79, 0x210, 0x20, 0x306, 0x210, 0x20, 0x307, 0x210, + 0x20, 0x30a, 0x210, 0x20, 0x328, 0x210, 0x20, 0x303, + 0x210, 0x20, 0x30b, 0x109, 0x263, 0x109, 0x6c, 0x109, + 0x73, 0x109, 0x78, 0x109, 0x295, 0x101, 0x300, 0x101, + 0x301, 0x101, 0x313, 0x201, 0x308, 0x301, 0x101, 0x2b9, + 0x210, 0x20, 0x345, 0x101, 0x3b, 0x210, 0x20, 0x301, + 0x201, 0xa8, 0x301, 0x201, 0x391, 0x301, 0x101, 0xb7, + 0x201, 0x395, 0x301, 0x201, 0x397, 0x301, 0x201, 0x399, + 0x301, 0x201, 0x39f, 0x301, 0x201, 0x3a5, 0x301, 0x201, + 0x3a9, 0x301, 0x201, 0x3ca, 0x301, 0x201, 0x399, 0x308, + 0x201, 0x3a5, 0x308, 0x201, 0x3b1, 0x301, 0x201, 0x3b5, + 0x301, 0x201, 0x3b7, 0x301, 0x201, 0x3b9, 0x301, 0x201, + 0x3cb, 0x301, 0x201, 0x3b9, 0x308, 0x201, 0x3c5, 0x308, + 0x201, 0x3bf, 0x301, 0x201, 0x3c5, 0x301, 0x201, 0x3c9, + 0x301, 0x110, 0x3b2, 0x110, 0x3b8, 0x110, 0x3a5, 0x201, + 0x3d2, 0x301, 0x201, 0x3d2, 0x308, 0x110, 0x3c6, 0x110, + 0x3c0, 0x110, 0x3ba, 0x110, 0x3c1, 0x110, 0x3c2, 0x110, + 0x398, 0x110, 0x3b5, 0x110, 0x3a3, 0x201, 0x415, 0x300, + 0x201, 0x415, 0x308, 0x201, 0x413, 0x301, 0x201, 0x406, + 0x308, 0x201, 0x41a, 0x301, 0x201, 0x418, 0x300, 0x201, + 0x423, 0x306, 0x201, 0x418, 0x306, 0x201, 0x438, 0x306, + 0x201, 0x435, 0x300, 0x201, 0x435, 0x308, 0x201, 0x433, + 0x301, 0x201, 0x456, 0x308, 0x201, 0x43a, 0x301, 0x201, + 0x438, 0x300, 0x201, 0x443, 0x306, 0x201, 0x474, 0x30f, + 0x201, 0x475, 0x30f, 0x201, 0x416, 0x306, 0x201, 0x436, + 0x306, 0x201, 0x410, 0x306, 0x201, 0x430, 0x306, 0x201, + 0x410, 0x308, 0x201, 0x430, 0x308, 0x201, 0x415, 0x306, + 0x201, 0x435, 0x306, 0x201, 0x4d8, 0x308, 0x201, 0x4d9, + 0x308, 0x201, 0x416, 0x308, 0x201, 0x436, 0x308, 0x201, + 0x417, 0x308, 0x201, 0x437, 0x308, 0x201, 0x418, 0x304, + 0x201, 0x438, 0x304, 0x201, 0x418, 0x308, 0x201, 0x438, + 0x308, 0x201, 0x41e, 0x308, 0x201, 0x43e, 0x308, 0x201, + 0x4e8, 0x308, 0x201, 0x4e9, 0x308, 0x201, 0x42d, 0x308, + 0x201, 0x44d, 0x308, 0x201, 0x423, 0x304, 0x201, 0x443, + 0x304, 0x201, 0x423, 0x308, 0x201, 0x443, 0x308, 0x201, + 0x423, 0x30b, 0x201, 0x443, 0x30b, 0x201, 0x427, 0x308, + 0x201, 0x447, 0x308, 0x201, 0x42b, 0x308, 0x201, 0x44b, + 0x308, 0x210, 0x565, 0x582, 0x201, 0x627, 0x653, 0x201, + 0x627, 0x654, 0x201, 0x648, 0x654, 0x201, 0x627, 0x655, + 0x201, 0x64a, 0x654, 0x210, 0x627, 0x674, 0x210, 0x648, + 0x674, 0x210, 0x6c7, 0x674, 0x210, 0x64a, 0x674, 0x201, + 0x6d5, 0x654, 0x201, 0x6c1, 0x654, 0x201, 0x6d2, 0x654, + 0x201, 0x928, 0x93c, 0x201, 0x930, 0x93c, 0x201, 0x933, + 0x93c, 0x201, 0x915, 0x93c, 0x201, 0x916, 0x93c, 0x201, + 0x917, 0x93c, 0x201, 0x91c, 0x93c, 0x201, 0x921, 0x93c, + 0x201, 0x922, 0x93c, 0x201, 0x92b, 0x93c, 0x201, 0x92f, + 0x93c, 0x201, 0x9c7, 0x9be, 0x201, 0x9c7, 0x9d7, 0x201, + 0x9a1, 0x9bc, 0x201, 0x9a2, 0x9bc, 0x201, 0x9af, 0x9bc, + 0x201, 0xa32, 0xa3c, 0x201, 0xa38, 0xa3c, 0x201, 0xa16, + 0xa3c, 0x201, 0xa17, 0xa3c, 0x201, 0xa1c, 0xa3c, 0x201, + 0xa2b, 0xa3c, 0x201, 0xb47, 0xb56, 0x201, 0xb47, 0xb3e, + 0x201, 0xb47, 0xb57, 0x201, 0xb21, 0xb3c, 0x201, 0xb22, + 0xb3c, 0x201, 0xb92, 0xbd7, 0x201, 0xbc6, 0xbbe, 0x201, + 0xbc7, 0xbbe, 0x201, 0xbc6, 0xbd7, 0x201, 0xc46, 0xc56, + 0x201, 0xcbf, 0xcd5, 0x201, 0xcc6, 0xcd5, 0x201, 0xcc6, + 0xcd6, 0x201, 0xcc6, 0xcc2, 0x201, 0xcca, 0xcd5, 0x201, + 0xd46, 0xd3e, 0x201, 0xd47, 0xd3e, 0x201, 0xd46, 0xd57, + 0x201, 0xdd9, 0xdca, 0x201, 0xdd9, 0xdcf, 0x201, 0xddc, + 0xdca, 0x201, 0xdd9, 0xddf, 0x210, 0xe4d, 0xe32, 0x210, + 0xecd, 0xeb2, 0x210, 0xeab, 0xe99, 0x210, 0xeab, 0xea1, + 0x103, 0xf0b, 0x201, 0xf42, 0xfb7, 0x201, 0xf4c, 0xfb7, + 0x201, 0xf51, 0xfb7, 0x201, 0xf56, 0xfb7, 0x201, 0xf5b, + 0xfb7, 0x201, 0xf40, 0xfb5, 0x201, 0xf71, 0xf72, 0x201, + 0xf71, 0xf74, 0x201, 0xfb2, 0xf80, 0x210, 0xfb2, 0xf81, + 0x201, 0xfb3, 0xf80, 0x210, 0xfb3, 0xf81, 0x201, 0xf71, + 0xf80, 0x201, 0xf92, 0xfb7, 0x201, 0xf9c, 0xfb7, 0x201, + 0xfa1, 0xfb7, 0x201, 0xfa6, 0xfb7, 0x201, 0xfab, 0xfb7, + 0x201, 0xf90, 0xfb5, 0x201, 0x1025, 0x102e, 0x109, 0x10dc, + 0x201, 0x1b05, 0x1b35, 0x201, 0x1b07, 0x1b35, 0x201, 0x1b09, + 0x1b35, 0x201, 0x1b0b, 0x1b35, 0x201, 0x1b0d, 0x1b35, 0x201, + 0x1b11, 0x1b35, 0x201, 0x1b3a, 0x1b35, 0x201, 0x1b3c, 0x1b35, + 0x201, 0x1b3e, 0x1b35, 0x201, 0x1b3f, 0x1b35, 0x201, 0x1b42, + 0x1b35, 0x109, 0x41, 0x109, 0xc6, 0x109, 0x42, 0x109, + 0x44, 0x109, 0x45, 0x109, 0x18e, 0x109, 0x47, 0x109, + 0x48, 0x109, 0x49, 0x109, 0x4a, 0x109, 0x4b, 0x109, + 0x4c, 0x109, 0x4d, 0x109, 0x4e, 0x109, 0x4f, 0x109, + 0x222, 0x109, 0x50, 0x109, 0x52, 0x109, 0x54, 0x109, + 0x55, 0x109, 0x57, 0x109, 0x61, 0x109, 0x250, 0x109, + 0x251, 0x109, 0x1d02, 0x109, 0x62, 0x109, 0x64, 0x109, + 0x65, 0x109, 0x259, 0x109, 0x25b, 0x109, 0x25c, 0x109, + 0x67, 0x109, 0x6b, 0x109, 0x6d, 0x109, 0x14b, 0x109, + 0x6f, 0x109, 0x254, 0x109, 0x1d16, 0x109, 0x1d17, 0x109, + 0x70, 0x109, 0x74, 0x109, 0x75, 0x109, 0x1d1d, 0x109, + 0x26f, 0x109, 0x76, 0x109, 0x1d25, 0x109, 0x3b2, 0x109, + 0x3b3, 0x109, 0x3b4, 0x109, 0x3c6, 0x109, 0x3c7, 0x10a, + 0x69, 0x10a, 0x72, 0x10a, 0x75, 0x10a, 0x76, 0x10a, + 0x3b2, 0x10a, 0x3b3, 0x10a, 0x3c1, 0x10a, 0x3c6, 0x10a, + 0x3c7, 0x109, 0x43d, 0x109, 0x252, 0x109, 0x63, 0x109, + 0x255, 0x109, 0xf0, 0x109, 0x25c, 0x109, 0x66, 0x109, + 0x25f, 0x109, 0x261, 0x109, 0x265, 0x109, 0x268, 0x109, + 0x269, 0x109, 0x26a, 0x109, 0x1d7b, 0x109, 0x29d, 0x109, + 0x26d, 0x109, 0x1d85, 0x109, 0x29f, 0x109, 0x271, 0x109, + 0x270, 0x109, 0x272, 0x109, 0x273, 0x109, 0x274, 0x109, + 0x275, 0x109, 0x278, 0x109, 0x282, 0x109, 0x283, 0x109, + 0x1ab, 0x109, 0x289, 0x109, 0x28a, 0x109, 0x1d1c, 0x109, + 0x28b, 0x109, 0x28c, 0x109, 0x7a, 0x109, 0x290, 0x109, + 0x291, 0x109, 0x292, 0x109, 0x3b8, 0x201, 0x41, 0x325, + 0x201, 0x61, 0x325, 0x201, 0x42, 0x307, 0x201, 0x62, + 0x307, 0x201, 0x42, 0x323, 0x201, 0x62, 0x323, 0x201, + 0x42, 0x331, 0x201, 0x62, 0x331, 0x201, 0xc7, 0x301, + 0x201, 0xe7, 0x301, 0x201, 0x44, 0x307, 0x201, 0x64, + 0x307, 0x201, 0x44, 0x323, 0x201, 0x64, 0x323, 0x201, + 0x44, 0x331, 0x201, 0x64, 0x331, 0x201, 0x44, 0x327, + 0x201, 0x64, 0x327, 0x201, 0x44, 0x32d, 0x201, 0x64, + 0x32d, 0x201, 0x112, 0x300, 0x201, 0x113, 0x300, 0x201, + 0x112, 0x301, 0x201, 0x113, 0x301, 0x201, 0x45, 0x32d, + 0x201, 0x65, 0x32d, 0x201, 0x45, 0x330, 0x201, 0x65, + 0x330, 0x201, 0x228, 0x306, 0x201, 0x229, 0x306, 0x201, + 0x46, 0x307, 0x201, 0x66, 0x307, 0x201, 0x47, 0x304, + 0x201, 0x67, 0x304, 0x201, 0x48, 0x307, 0x201, 0x68, + 0x307, 0x201, 0x48, 0x323, 0x201, 0x68, 0x323, 0x201, + 0x48, 0x308, 0x201, 0x68, 0x308, 0x201, 0x48, 0x327, + 0x201, 0x68, 0x327, 0x201, 0x48, 0x32e, 0x201, 0x68, + 0x32e, 0x201, 0x49, 0x330, 0x201, 0x69, 0x330, 0x201, + 0xcf, 0x301, 0x201, 0xef, 0x301, 0x201, 0x4b, 0x301, + 0x201, 0x6b, 0x301, 0x201, 0x4b, 0x323, 0x201, 0x6b, + 0x323, 0x201, 0x4b, 0x331, 0x201, 0x6b, 0x331, 0x201, + 0x4c, 0x323, 0x201, 0x6c, 0x323, 0x201, 0x1e36, 0x304, + 0x201, 0x1e37, 0x304, 0x201, 0x4c, 0x331, 0x201, 0x6c, + 0x331, 0x201, 0x4c, 0x32d, 0x201, 0x6c, 0x32d, 0x201, + 0x4d, 0x301, 0x201, 0x6d, 0x301, 0x201, 0x4d, 0x307, + 0x201, 0x6d, 0x307, 0x201, 0x4d, 0x323, 0x201, 0x6d, + 0x323, 0x201, 0x4e, 0x307, 0x201, 0x6e, 0x307, 0x201, + 0x4e, 0x323, 0x201, 0x6e, 0x323, 0x201, 0x4e, 0x331, + 0x201, 0x6e, 0x331, 0x201, 0x4e, 0x32d, 0x201, 0x6e, + 0x32d, 0x201, 0xd5, 0x301, 0x201, 0xf5, 0x301, 0x201, + 0xd5, 0x308, 0x201, 0xf5, 0x308, 0x201, 0x14c, 0x300, + 0x201, 0x14d, 0x300, 0x201, 0x14c, 0x301, 0x201, 0x14d, + 0x301, 0x201, 0x50, 0x301, 0x201, 0x70, 0x301, 0x201, + 0x50, 0x307, 0x201, 0x70, 0x307, 0x201, 0x52, 0x307, + 0x201, 0x72, 0x307, 0x201, 0x52, 0x323, 0x201, 0x72, + 0x323, 0x201, 0x1e5a, 0x304, 0x201, 0x1e5b, 0x304, 0x201, + 0x52, 0x331, 0x201, 0x72, 0x331, 0x201, 0x53, 0x307, + 0x201, 0x73, 0x307, 0x201, 0x53, 0x323, 0x201, 0x73, + 0x323, 0x201, 0x15a, 0x307, 0x201, 0x15b, 0x307, 0x201, + 0x160, 0x307, 0x201, 0x161, 0x307, 0x201, 0x1e62, 0x307, + 0x201, 0x1e63, 0x307, 0x201, 0x54, 0x307, 0x201, 0x74, + 0x307, 0x201, 0x54, 0x323, 0x201, 0x74, 0x323, 0x201, + 0x54, 0x331, 0x201, 0x74, 0x331, 0x201, 0x54, 0x32d, + 0x201, 0x74, 0x32d, 0x201, 0x55, 0x324, 0x201, 0x75, + 0x324, 0x201, 0x55, 0x330, 0x201, 0x75, 0x330, 0x201, + 0x55, 0x32d, 0x201, 0x75, 0x32d, 0x201, 0x168, 0x301, + 0x201, 0x169, 0x301, 0x201, 0x16a, 0x308, 0x201, 0x16b, + 0x308, 0x201, 0x56, 0x303, 0x201, 0x76, 0x303, 0x201, + 0x56, 0x323, 0x201, 0x76, 0x323, 0x201, 0x57, 0x300, + 0x201, 0x77, 0x300, 0x201, 0x57, 0x301, 0x201, 0x77, + 0x301, 0x201, 0x57, 0x308, 0x201, 0x77, 0x308, 0x201, + 0x57, 0x307, 0x201, 0x77, 0x307, 0x201, 0x57, 0x323, + 0x201, 0x77, 0x323, 0x201, 0x58, 0x307, 0x201, 0x78, + 0x307, 0x201, 0x58, 0x308, 0x201, 0x78, 0x308, 0x201, + 0x59, 0x307, 0x201, 0x79, 0x307, 0x201, 0x5a, 0x302, + 0x201, 0x7a, 0x302, 0x201, 0x5a, 0x323, 0x201, 0x7a, + 0x323, 0x201, 0x5a, 0x331, 0x201, 0x7a, 0x331, 0x201, + 0x68, 0x331, 0x201, 0x74, 0x308, 0x201, 0x77, 0x30a, + 0x201, 0x79, 0x30a, 0x210, 0x61, 0x2be, 0x201, 0x17f, + 0x307, 0x201, 0x41, 0x323, 0x201, 0x61, 0x323, 0x201, + 0x41, 0x309, 0x201, 0x61, 0x309, 0x201, 0xc2, 0x301, + 0x201, 0xe2, 0x301, 0x201, 0xc2, 0x300, 0x201, 0xe2, + 0x300, 0x201, 0xc2, 0x309, 0x201, 0xe2, 0x309, 0x201, + 0xc2, 0x303, 0x201, 0xe2, 0x303, 0x201, 0x1ea0, 0x302, + 0x201, 0x1ea1, 0x302, 0x201, 0x102, 0x301, 0x201, 0x103, + 0x301, 0x201, 0x102, 0x300, 0x201, 0x103, 0x300, 0x201, + 0x102, 0x309, 0x201, 0x103, 0x309, 0x201, 0x102, 0x303, + 0x201, 0x103, 0x303, 0x201, 0x1ea0, 0x306, 0x201, 0x1ea1, + 0x306, 0x201, 0x45, 0x323, 0x201, 0x65, 0x323, 0x201, + 0x45, 0x309, 0x201, 0x65, 0x309, 0x201, 0x45, 0x303, + 0x201, 0x65, 0x303, 0x201, 0xca, 0x301, 0x201, 0xea, + 0x301, 0x201, 0xca, 0x300, 0x201, 0xea, 0x300, 0x201, + 0xca, 0x309, 0x201, 0xea, 0x309, 0x201, 0xca, 0x303, + 0x201, 0xea, 0x303, 0x201, 0x1eb8, 0x302, 0x201, 0x1eb9, + 0x302, 0x201, 0x49, 0x309, 0x201, 0x69, 0x309, 0x201, + 0x49, 0x323, 0x201, 0x69, 0x323, 0x201, 0x4f, 0x323, + 0x201, 0x6f, 0x323, 0x201, 0x4f, 0x309, 0x201, 0x6f, + 0x309, 0x201, 0xd4, 0x301, 0x201, 0xf4, 0x301, 0x201, + 0xd4, 0x300, 0x201, 0xf4, 0x300, 0x201, 0xd4, 0x309, + 0x201, 0xf4, 0x309, 0x201, 0xd4, 0x303, 0x201, 0xf4, + 0x303, 0x201, 0x1ecc, 0x302, 0x201, 0x1ecd, 0x302, 0x201, + 0x1a0, 0x301, 0x201, 0x1a1, 0x301, 0x201, 0x1a0, 0x300, + 0x201, 0x1a1, 0x300, 0x201, 0x1a0, 0x309, 0x201, 0x1a1, + 0x309, 0x201, 0x1a0, 0x303, 0x201, 0x1a1, 0x303, 0x201, + 0x1a0, 0x323, 0x201, 0x1a1, 0x323, 0x201, 0x55, 0x323, + 0x201, 0x75, 0x323, 0x201, 0x55, 0x309, 0x201, 0x75, + 0x309, 0x201, 0x1af, 0x301, 0x201, 0x1b0, 0x301, 0x201, + 0x1af, 0x300, 0x201, 0x1b0, 0x300, 0x201, 0x1af, 0x309, + 0x201, 0x1b0, 0x309, 0x201, 0x1af, 0x303, 0x201, 0x1b0, + 0x303, 0x201, 0x1af, 0x323, 0x201, 0x1b0, 0x323, 0x201, + 0x59, 0x300, 0x201, 0x79, 0x300, 0x201, 0x59, 0x323, + 0x201, 0x79, 0x323, 0x201, 0x59, 0x309, 0x201, 0x79, + 0x309, 0x201, 0x59, 0x303, 0x201, 0x79, 0x303, 0x201, + 0x3b1, 0x313, 0x201, 0x3b1, 0x314, 0x201, 0x1f00, 0x300, + 0x201, 0x1f01, 0x300, 0x201, 0x1f00, 0x301, 0x201, 0x1f01, + 0x301, 0x201, 0x1f00, 0x342, 0x201, 0x1f01, 0x342, 0x201, + 0x391, 0x313, 0x201, 0x391, 0x314, 0x201, 0x1f08, 0x300, + 0x201, 0x1f09, 0x300, 0x201, 0x1f08, 0x301, 0x201, 0x1f09, + 0x301, 0x201, 0x1f08, 0x342, 0x201, 0x1f09, 0x342, 0x201, + 0x3b5, 0x313, 0x201, 0x3b5, 0x314, 0x201, 0x1f10, 0x300, + 0x201, 0x1f11, 0x300, 0x201, 0x1f10, 0x301, 0x201, 0x1f11, + 0x301, 0x201, 0x395, 0x313, 0x201, 0x395, 0x314, 0x201, + 0x1f18, 0x300, 0x201, 0x1f19, 0x300, 0x201, 0x1f18, 0x301, + 0x201, 0x1f19, 0x301, 0x201, 0x3b7, 0x313, 0x201, 0x3b7, + 0x314, 0x201, 0x1f20, 0x300, 0x201, 0x1f21, 0x300, 0x201, + 0x1f20, 0x301, 0x201, 0x1f21, 0x301, 0x201, 0x1f20, 0x342, + 0x201, 0x1f21, 0x342, 0x201, 0x397, 0x313, 0x201, 0x397, + 0x314, 0x201, 0x1f28, 0x300, 0x201, 0x1f29, 0x300, 0x201, + 0x1f28, 0x301, 0x201, 0x1f29, 0x301, 0x201, 0x1f28, 0x342, + 0x201, 0x1f29, 0x342, 0x201, 0x3b9, 0x313, 0x201, 0x3b9, + 0x314, 0x201, 0x1f30, 0x300, 0x201, 0x1f31, 0x300, 0x201, + 0x1f30, 0x301, 0x201, 0x1f31, 0x301, 0x201, 0x1f30, 0x342, + 0x201, 0x1f31, 0x342, 0x201, 0x399, 0x313, 0x201, 0x399, + 0x314, 0x201, 0x1f38, 0x300, 0x201, 0x1f39, 0x300, 0x201, + 0x1f38, 0x301, 0x201, 0x1f39, 0x301, 0x201, 0x1f38, 0x342, + 0x201, 0x1f39, 0x342, 0x201, 0x3bf, 0x313, 0x201, 0x3bf, + 0x314, 0x201, 0x1f40, 0x300, 0x201, 0x1f41, 0x300, 0x201, + 0x1f40, 0x301, 0x201, 0x1f41, 0x301, 0x201, 0x39f, 0x313, + 0x201, 0x39f, 0x314, 0x201, 0x1f48, 0x300, 0x201, 0x1f49, + 0x300, 0x201, 0x1f48, 0x301, 0x201, 0x1f49, 0x301, 0x201, + 0x3c5, 0x313, 0x201, 0x3c5, 0x314, 0x201, 0x1f50, 0x300, + 0x201, 0x1f51, 0x300, 0x201, 0x1f50, 0x301, 0x201, 0x1f51, + 0x301, 0x201, 0x1f50, 0x342, 0x201, 0x1f51, 0x342, 0x201, + 0x3a5, 0x314, 0x201, 0x1f59, 0x300, 0x201, 0x1f59, 0x301, + 0x201, 0x1f59, 0x342, 0x201, 0x3c9, 0x313, 0x201, 0x3c9, + 0x314, 0x201, 0x1f60, 0x300, 0x201, 0x1f61, 0x300, 0x201, + 0x1f60, 0x301, 0x201, 0x1f61, 0x301, 0x201, 0x1f60, 0x342, + 0x201, 0x1f61, 0x342, 0x201, 0x3a9, 0x313, 0x201, 0x3a9, + 0x314, 0x201, 0x1f68, 0x300, 0x201, 0x1f69, 0x300, 0x201, + 0x1f68, 0x301, 0x201, 0x1f69, 0x301, 0x201, 0x1f68, 0x342, + 0x201, 0x1f69, 0x342, 0x201, 0x3b1, 0x300, 0x101, 0x3ac, + 0x201, 0x3b5, 0x300, 0x101, 0x3ad, 0x201, 0x3b7, 0x300, + 0x101, 0x3ae, 0x201, 0x3b9, 0x300, 0x101, 0x3af, 0x201, + 0x3bf, 0x300, 0x101, 0x3cc, 0x201, 0x3c5, 0x300, 0x101, + 0x3cd, 0x201, 0x3c9, 0x300, 0x101, 0x3ce, 0x201, 0x1f00, + 0x345, 0x201, 0x1f01, 0x345, 0x201, 0x1f02, 0x345, 0x201, + 0x1f03, 0x345, 0x201, 0x1f04, 0x345, 0x201, 0x1f05, 0x345, + 0x201, 0x1f06, 0x345, 0x201, 0x1f07, 0x345, 0x201, 0x1f08, + 0x345, 0x201, 0x1f09, 0x345, 0x201, 0x1f0a, 0x345, 0x201, + 0x1f0b, 0x345, 0x201, 0x1f0c, 0x345, 0x201, 0x1f0d, 0x345, + 0x201, 0x1f0e, 0x345, 0x201, 0x1f0f, 0x345, 0x201, 0x1f20, + 0x345, 0x201, 0x1f21, 0x345, 0x201, 0x1f22, 0x345, 0x201, + 0x1f23, 0x345, 0x201, 0x1f24, 0x345, 0x201, 0x1f25, 0x345, + 0x201, 0x1f26, 0x345, 0x201, 0x1f27, 0x345, 0x201, 0x1f28, + 0x345, 0x201, 0x1f29, 0x345, 0x201, 0x1f2a, 0x345, 0x201, + 0x1f2b, 0x345, 0x201, 0x1f2c, 0x345, 0x201, 0x1f2d, 0x345, + 0x201, 0x1f2e, 0x345, 0x201, 0x1f2f, 0x345, 0x201, 0x1f60, + 0x345, 0x201, 0x1f61, 0x345, 0x201, 0x1f62, 0x345, 0x201, + 0x1f63, 0x345, 0x201, 0x1f64, 0x345, 0x201, 0x1f65, 0x345, + 0x201, 0x1f66, 0x345, 0x201, 0x1f67, 0x345, 0x201, 0x1f68, + 0x345, 0x201, 0x1f69, 0x345, 0x201, 0x1f6a, 0x345, 0x201, + 0x1f6b, 0x345, 0x201, 0x1f6c, 0x345, 0x201, 0x1f6d, 0x345, + 0x201, 0x1f6e, 0x345, 0x201, 0x1f6f, 0x345, 0x201, 0x3b1, + 0x306, 0x201, 0x3b1, 0x304, 0x201, 0x1f70, 0x345, 0x201, + 0x3b1, 0x345, 0x201, 0x3ac, 0x345, 0x201, 0x3b1, 0x342, + 0x201, 0x1fb6, 0x345, 0x201, 0x391, 0x306, 0x201, 0x391, + 0x304, 0x201, 0x391, 0x300, 0x101, 0x386, 0x201, 0x391, + 0x345, 0x210, 0x20, 0x313, 0x101, 0x3b9, 0x210, 0x20, + 0x313, 0x210, 0x20, 0x342, 0x201, 0xa8, 0x342, 0x201, + 0x1f74, 0x345, 0x201, 0x3b7, 0x345, 0x201, 0x3ae, 0x345, + 0x201, 0x3b7, 0x342, 0x201, 0x1fc6, 0x345, 0x201, 0x395, + 0x300, 0x101, 0x388, 0x201, 0x397, 0x300, 0x101, 0x389, + 0x201, 0x397, 0x345, 0x201, 0x1fbf, 0x300, 0x201, 0x1fbf, + 0x301, 0x201, 0x1fbf, 0x342, 0x201, 0x3b9, 0x306, 0x201, + 0x3b9, 0x304, 0x201, 0x3ca, 0x300, 0x101, 0x390, 0x201, + 0x3b9, 0x342, 0x201, 0x3ca, 0x342, 0x201, 0x399, 0x306, + 0x201, 0x399, 0x304, 0x201, 0x399, 0x300, 0x101, 0x38a, + 0x201, 0x1ffe, 0x300, 0x201, 0x1ffe, 0x301, 0x201, 0x1ffe, + 0x342, 0x201, 0x3c5, 0x306, 0x201, 0x3c5, 0x304, 0x201, + 0x3cb, 0x300, 0x101, 0x3b0, 0x201, 0x3c1, 0x313, 0x201, + 0x3c1, 0x314, 0x201, 0x3c5, 0x342, 0x201, 0x3cb, 0x342, + 0x201, 0x3a5, 0x306, 0x201, 0x3a5, 0x304, 0x201, 0x3a5, + 0x300, 0x101, 0x38e, 0x201, 0x3a1, 0x314, 0x201, 0xa8, + 0x300, 0x101, 0x385, 0x101, 0x60, 0x201, 0x1f7c, 0x345, + 0x201, 0x3c9, 0x345, 0x201, 0x3ce, 0x345, 0x201, 0x3c9, + 0x342, 0x201, 0x1ff6, 0x345, 0x201, 0x39f, 0x300, 0x101, + 0x38c, 0x201, 0x3a9, 0x300, 0x101, 0x38f, 0x201, 0x3a9, + 0x345, 0x101, 0xb4, 0x210, 0x20, 0x314, 0x101, 0x2002, + 0x101, 0x2003, 0x110, 0x20, 0x110, 0x20, 0x110, 0x20, + 0x110, 0x20, 0x110, 0x20, 0x103, 0x20, 0x110, 0x20, + 0x110, 0x20, 0x110, 0x20, 0x103, 0x2010, 0x210, 0x20, + 0x333, 0x110, 0x2e, 0x210, 0x2e, 0x2e, 0x310, 0x2e, + 0x2e, 0x2e, 0x103, 0x20, 0x210, 0x2032, 0x2032, 0x310, + 0x2032, 0x2032, 0x2032, 0x210, 0x2035, 0x2035, 0x310, 0x2035, + 0x2035, 0x2035, 0x210, 0x21, 0x21, 0x210, 0x20, 0x305, + 0x210, 0x3f, 0x3f, 0x210, 0x3f, 0x21, 0x210, 0x21, + 0x3f, 0x410, 0x2032, 0x2032, 0x2032, 0x2032, 0x110, 0x20, + 0x109, 0x30, 0x109, 0x69, 0x109, 0x34, 0x109, 0x35, + 0x109, 0x36, 0x109, 0x37, 0x109, 0x38, 0x109, 0x39, + 0x109, 0x2b, 0x109, 0x2212, 0x109, 0x3d, 0x109, 0x28, + 0x109, 0x29, 0x109, 0x6e, 0x10a, 0x30, 0x10a, 0x31, + 0x10a, 0x32, 0x10a, 0x33, 0x10a, 0x34, 0x10a, 0x35, + 0x10a, 0x36, 0x10a, 0x37, 0x10a, 0x38, 0x10a, 0x39, + 0x10a, 0x2b, 0x10a, 0x2212, 0x10a, 0x3d, 0x10a, 0x28, + 0x10a, 0x29, 0x10a, 0x61, 0x10a, 0x65, 0x10a, 0x6f, + 0x10a, 0x78, 0x10a, 0x259, 0x10a, 0x68, 0x10a, 0x6b, + 0x10a, 0x6c, 0x10a, 0x6d, 0x10a, 0x6e, 0x10a, 0x70, + 0x10a, 0x73, 0x10a, 0x74, 0x210, 0x52, 0x73, 0x310, + 0x61, 0x2f, 0x63, 0x310, 0x61, 0x2f, 0x73, 0x102, + 0x43, 0x210, 0xb0, 0x43, 0x310, 0x63, 0x2f, 0x6f, + 0x310, 0x63, 0x2f, 0x75, 0x110, 0x190, 0x210, 0xb0, + 0x46, 0x102, 0x67, 0x102, 0x48, 0x102, 0x48, 0x102, + 0x48, 0x102, 0x68, 0x102, 0x127, 0x102, 0x49, 0x102, + 0x49, 0x102, 0x4c, 0x102, 0x6c, 0x102, 0x4e, 0x210, + 0x4e, 0x6f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, + 0x102, 0x52, 0x102, 0x52, 0x209, 0x53, 0x4d, 0x310, + 0x54, 0x45, 0x4c, 0x209, 0x54, 0x4d, 0x102, 0x5a, + 0x101, 0x3a9, 0x102, 0x5a, 0x101, 0x4b, 0x101, 0xc5, + 0x102, 0x42, 0x102, 0x43, 0x102, 0x65, 0x102, 0x45, + 0x102, 0x46, 0x102, 0x4d, 0x102, 0x6f, 0x110, 0x5d0, + 0x110, 0x5d1, 0x110, 0x5d2, 0x110, 0x5d3, 0x102, 0x69, + 0x310, 0x46, 0x41, 0x58, 0x102, 0x3c0, 0x102, 0x3b3, + 0x102, 0x393, 0x102, 0x3a0, 0x102, 0x2211, 0x102, 0x44, + 0x102, 0x64, 0x102, 0x65, 0x102, 0x69, 0x102, 0x6a, + 0x311, 0x31, 0x2044, 0x37, 0x311, 0x31, 0x2044, 0x39, + 0x411, 0x31, 0x2044, 0x31, 0x30, 0x311, 0x31, 0x2044, + 0x33, 0x311, 0x32, 0x2044, 0x33, 0x311, 0x31, 0x2044, + 0x35, 0x311, 0x32, 0x2044, 0x35, 0x311, 0x33, 0x2044, + 0x35, 0x311, 0x34, 0x2044, 0x35, 0x311, 0x31, 0x2044, + 0x36, 0x311, 0x35, 0x2044, 0x36, 0x311, 0x31, 0x2044, + 0x38, 0x311, 0x33, 0x2044, 0x38, 0x311, 0x35, 0x2044, + 0x38, 0x311, 0x37, 0x2044, 0x38, 0x211, 0x31, 0x2044, + 0x110, 0x49, 0x210, 0x49, 0x49, 0x310, 0x49, 0x49, + 0x49, 0x210, 0x49, 0x56, 0x110, 0x56, 0x210, 0x56, + 0x49, 0x310, 0x56, 0x49, 0x49, 0x410, 0x56, 0x49, + 0x49, 0x49, 0x210, 0x49, 0x58, 0x110, 0x58, 0x210, + 0x58, 0x49, 0x310, 0x58, 0x49, 0x49, 0x110, 0x4c, + 0x110, 0x43, 0x110, 0x44, 0x110, 0x4d, 0x110, 0x69, + 0x210, 0x69, 0x69, 0x310, 0x69, 0x69, 0x69, 0x210, + 0x69, 0x76, 0x110, 0x76, 0x210, 0x76, 0x69, 0x310, + 0x76, 0x69, 0x69, 0x410, 0x76, 0x69, 0x69, 0x69, + 0x210, 0x69, 0x78, 0x110, 0x78, 0x210, 0x78, 0x69, + 0x310, 0x78, 0x69, 0x69, 0x110, 0x6c, 0x110, 0x63, + 0x110, 0x64, 0x110, 0x6d, 0x311, 0x30, 0x2044, 0x33, + 0x201, 0x2190, 0x338, 0x201, 0x2192, 0x338, 0x201, 0x2194, + 0x338, 0x201, 0x21d0, 0x338, 0x201, 0x21d4, 0x338, 0x201, + 0x21d2, 0x338, 0x201, 0x2203, 0x338, 0x201, 0x2208, 0x338, + 0x201, 0x220b, 0x338, 0x201, 0x2223, 0x338, 0x201, 0x2225, + 0x338, 0x210, 0x222b, 0x222b, 0x310, 0x222b, 0x222b, 0x222b, + 0x210, 0x222e, 0x222e, 0x310, 0x222e, 0x222e, 0x222e, 0x201, + 0x223c, 0x338, 0x201, 0x2243, 0x338, 0x201, 0x2245, 0x338, + 0x201, 0x2248, 0x338, 0x201, 0x3d, 0x338, 0x201, 0x2261, + 0x338, 0x201, 0x224d, 0x338, 0x201, 0x3c, 0x338, 0x201, + 0x3e, 0x338, 0x201, 0x2264, 0x338, 0x201, 0x2265, 0x338, + 0x201, 0x2272, 0x338, 0x201, 0x2273, 0x338, 0x201, 0x2276, + 0x338, 0x201, 0x2277, 0x338, 0x201, 0x227a, 0x338, 0x201, + 0x227b, 0x338, 0x201, 0x2282, 0x338, 0x201, 0x2283, 0x338, + 0x201, 0x2286, 0x338, 0x201, 0x2287, 0x338, 0x201, 0x22a2, + 0x338, 0x201, 0x22a8, 0x338, 0x201, 0x22a9, 0x338, 0x201, + 0x22ab, 0x338, 0x201, 0x227c, 0x338, 0x201, 0x227d, 0x338, + 0x201, 0x2291, 0x338, 0x201, 0x2292, 0x338, 0x201, 0x22b2, + 0x338, 0x201, 0x22b3, 0x338, 0x201, 0x22b4, 0x338, 0x201, + 0x22b5, 0x338, 0x101, 0x3008, 0x101, 0x3009, 0x108, 0x31, + 0x108, 0x32, 0x108, 0x33, 0x108, 0x34, 0x108, 0x35, + 0x108, 0x36, 0x108, 0x37, 0x108, 0x38, 0x108, 0x39, + 0x208, 0x31, 0x30, 0x208, 0x31, 0x31, 0x208, 0x31, + 0x32, 0x208, 0x31, 0x33, 0x208, 0x31, 0x34, 0x208, + 0x31, 0x35, 0x208, 0x31, 0x36, 0x208, 0x31, 0x37, + 0x208, 0x31, 0x38, 0x208, 0x31, 0x39, 0x208, 0x32, + 0x30, 0x310, 0x28, 0x31, 0x29, 0x310, 0x28, 0x32, + 0x29, 0x310, 0x28, 0x33, 0x29, 0x310, 0x28, 0x34, + 0x29, 0x310, 0x28, 0x35, 0x29, 0x310, 0x28, 0x36, + 0x29, 0x310, 0x28, 0x37, 0x29, 0x310, 0x28, 0x38, + 0x29, 0x310, 0x28, 0x39, 0x29, 0x410, 0x28, 0x31, + 0x30, 0x29, 0x410, 0x28, 0x31, 0x31, 0x29, 0x410, + 0x28, 0x31, 0x32, 0x29, 0x410, 0x28, 0x31, 0x33, + 0x29, 0x410, 0x28, 0x31, 0x34, 0x29, 0x410, 0x28, + 0x31, 0x35, 0x29, 0x410, 0x28, 0x31, 0x36, 0x29, + 0x410, 0x28, 0x31, 0x37, 0x29, 0x410, 0x28, 0x31, + 0x38, 0x29, 0x410, 0x28, 0x31, 0x39, 0x29, 0x410, + 0x28, 0x32, 0x30, 0x29, 0x210, 0x31, 0x2e, 0x210, + 0x32, 0x2e, 0x210, 0x33, 0x2e, 0x210, 0x34, 0x2e, + 0x210, 0x35, 0x2e, 0x210, 0x36, 0x2e, 0x210, 0x37, + 0x2e, 0x210, 0x38, 0x2e, 0x210, 0x39, 0x2e, 0x310, + 0x31, 0x30, 0x2e, 0x310, 0x31, 0x31, 0x2e, 0x310, + 0x31, 0x32, 0x2e, 0x310, 0x31, 0x33, 0x2e, 0x310, + 0x31, 0x34, 0x2e, 0x310, 0x31, 0x35, 0x2e, 0x310, + 0x31, 0x36, 0x2e, 0x310, 0x31, 0x37, 0x2e, 0x310, + 0x31, 0x38, 0x2e, 0x310, 0x31, 0x39, 0x2e, 0x310, + 0x32, 0x30, 0x2e, 0x310, 0x28, 0x61, 0x29, 0x310, + 0x28, 0x62, 0x29, 0x310, 0x28, 0x63, 0x29, 0x310, + 0x28, 0x64, 0x29, 0x310, 0x28, 0x65, 0x29, 0x310, + 0x28, 0x66, 0x29, 0x310, 0x28, 0x67, 0x29, 0x310, + 0x28, 0x68, 0x29, 0x310, 0x28, 0x69, 0x29, 0x310, + 0x28, 0x6a, 0x29, 0x310, 0x28, 0x6b, 0x29, 0x310, + 0x28, 0x6c, 0x29, 0x310, 0x28, 0x6d, 0x29, 0x310, + 0x28, 0x6e, 0x29, 0x310, 0x28, 0x6f, 0x29, 0x310, + 0x28, 0x70, 0x29, 0x310, 0x28, 0x71, 0x29, 0x310, + 0x28, 0x72, 0x29, 0x310, 0x28, 0x73, 0x29, 0x310, + 0x28, 0x74, 0x29, 0x310, 0x28, 0x75, 0x29, 0x310, + 0x28, 0x76, 0x29, 0x310, 0x28, 0x77, 0x29, 0x310, + 0x28, 0x78, 0x29, 0x310, 0x28, 0x79, 0x29, 0x310, + 0x28, 0x7a, 0x29, 0x108, 0x41, 0x108, 0x42, 0x108, + 0x43, 0x108, 0x44, 0x108, 0x45, 0x108, 0x46, 0x108, + 0x47, 0x108, 0x48, 0x108, 0x49, 0x108, 0x4a, 0x108, + 0x4b, 0x108, 0x4c, 0x108, 0x4d, 0x108, 0x4e, 0x108, + 0x4f, 0x108, 0x50, 0x108, 0x51, 0x108, 0x52, 0x108, + 0x53, 0x108, 0x54, 0x108, 0x55, 0x108, 0x56, 0x108, + 0x57, 0x108, 0x58, 0x108, 0x59, 0x108, 0x5a, 0x108, + 0x61, 0x108, 0x62, 0x108, 0x63, 0x108, 0x64, 0x108, + 0x65, 0x108, 0x66, 0x108, 0x67, 0x108, 0x68, 0x108, + 0x69, 0x108, 0x6a, 0x108, 0x6b, 0x108, 0x6c, 0x108, + 0x6d, 0x108, 0x6e, 0x108, 0x6f, 0x108, 0x70, 0x108, + 0x71, 0x108, 0x72, 0x108, 0x73, 0x108, 0x74, 0x108, + 0x75, 0x108, 0x76, 0x108, 0x77, 0x108, 0x78, 0x108, + 0x79, 0x108, 0x7a, 0x108, 0x30, 0x410, 0x222b, 0x222b, + 0x222b, 0x222b, 0x310, 0x3a, 0x3a, 0x3d, 0x210, 0x3d, + 0x3d, 0x310, 0x3d, 0x3d, 0x3d, 0x201, 0x2add, 0x338, + 0x10a, 0x6a, 0x109, 0x56, 0x109, 0x2d61, 0x110, 0x6bcd, + 0x110, 0x9f9f, 0x110, 0x4e00, 0x110, 0x4e28, 0x110, 0x4e36, + 0x110, 0x4e3f, 0x110, 0x4e59, 0x110, 0x4e85, 0x110, 0x4e8c, + 0x110, 0x4ea0, 0x110, 0x4eba, 0x110, 0x513f, 0x110, 0x5165, + 0x110, 0x516b, 0x110, 0x5182, 0x110, 0x5196, 0x110, 0x51ab, + 0x110, 0x51e0, 0x110, 0x51f5, 0x110, 0x5200, 0x110, 0x529b, + 0x110, 0x52f9, 0x110, 0x5315, 0x110, 0x531a, 0x110, 0x5338, + 0x110, 0x5341, 0x110, 0x535c, 0x110, 0x5369, 0x110, 0x5382, + 0x110, 0x53b6, 0x110, 0x53c8, 0x110, 0x53e3, 0x110, 0x56d7, + 0x110, 0x571f, 0x110, 0x58eb, 0x110, 0x5902, 0x110, 0x590a, + 0x110, 0x5915, 0x110, 0x5927, 0x110, 0x5973, 0x110, 0x5b50, + 0x110, 0x5b80, 0x110, 0x5bf8, 0x110, 0x5c0f, 0x110, 0x5c22, + 0x110, 0x5c38, 0x110, 0x5c6e, 0x110, 0x5c71, 0x110, 0x5ddb, + 0x110, 0x5de5, 0x110, 0x5df1, 0x110, 0x5dfe, 0x110, 0x5e72, + 0x110, 0x5e7a, 0x110, 0x5e7f, 0x110, 0x5ef4, 0x110, 0x5efe, + 0x110, 0x5f0b, 0x110, 0x5f13, 0x110, 0x5f50, 0x110, 0x5f61, + 0x110, 0x5f73, 0x110, 0x5fc3, 0x110, 0x6208, 0x110, 0x6236, + 0x110, 0x624b, 0x110, 0x652f, 0x110, 0x6534, 0x110, 0x6587, + 0x110, 0x6597, 0x110, 0x65a4, 0x110, 0x65b9, 0x110, 0x65e0, + 0x110, 0x65e5, 0x110, 0x66f0, 0x110, 0x6708, 0x110, 0x6728, + 0x110, 0x6b20, 0x110, 0x6b62, 0x110, 0x6b79, 0x110, 0x6bb3, + 0x110, 0x6bcb, 0x110, 0x6bd4, 0x110, 0x6bdb, 0x110, 0x6c0f, + 0x110, 0x6c14, 0x110, 0x6c34, 0x110, 0x706b, 0x110, 0x722a, + 0x110, 0x7236, 0x110, 0x723b, 0x110, 0x723f, 0x110, 0x7247, + 0x110, 0x7259, 0x110, 0x725b, 0x110, 0x72ac, 0x110, 0x7384, + 0x110, 0x7389, 0x110, 0x74dc, 0x110, 0x74e6, 0x110, 0x7518, + 0x110, 0x751f, 0x110, 0x7528, 0x110, 0x7530, 0x110, 0x758b, + 0x110, 0x7592, 0x110, 0x7676, 0x110, 0x767d, 0x110, 0x76ae, + 0x110, 0x76bf, 0x110, 0x76ee, 0x110, 0x77db, 0x110, 0x77e2, + 0x110, 0x77f3, 0x110, 0x793a, 0x110, 0x79b8, 0x110, 0x79be, + 0x110, 0x7a74, 0x110, 0x7acb, 0x110, 0x7af9, 0x110, 0x7c73, + 0x110, 0x7cf8, 0x110, 0x7f36, 0x110, 0x7f51, 0x110, 0x7f8a, + 0x110, 0x7fbd, 0x110, 0x8001, 0x110, 0x800c, 0x110, 0x8012, + 0x110, 0x8033, 0x110, 0x807f, 0x110, 0x8089, 0x110, 0x81e3, + 0x110, 0x81ea, 0x110, 0x81f3, 0x110, 0x81fc, 0x110, 0x820c, + 0x110, 0x821b, 0x110, 0x821f, 0x110, 0x826e, 0x110, 0x8272, + 0x110, 0x8278, 0x110, 0x864d, 0x110, 0x866b, 0x110, 0x8840, + 0x110, 0x884c, 0x110, 0x8863, 0x110, 0x897e, 0x110, 0x898b, + 0x110, 0x89d2, 0x110, 0x8a00, 0x110, 0x8c37, 0x110, 0x8c46, + 0x110, 0x8c55, 0x110, 0x8c78, 0x110, 0x8c9d, 0x110, 0x8d64, + 0x110, 0x8d70, 0x110, 0x8db3, 0x110, 0x8eab, 0x110, 0x8eca, + 0x110, 0x8f9b, 0x110, 0x8fb0, 0x110, 0x8fb5, 0x110, 0x9091, + 0x110, 0x9149, 0x110, 0x91c6, 0x110, 0x91cc, 0x110, 0x91d1, + 0x110, 0x9577, 0x110, 0x9580, 0x110, 0x961c, 0x110, 0x96b6, + 0x110, 0x96b9, 0x110, 0x96e8, 0x110, 0x9751, 0x110, 0x975e, + 0x110, 0x9762, 0x110, 0x9769, 0x110, 0x97cb, 0x110, 0x97ed, + 0x110, 0x97f3, 0x110, 0x9801, 0x110, 0x98a8, 0x110, 0x98db, + 0x110, 0x98df, 0x110, 0x9996, 0x110, 0x9999, 0x110, 0x99ac, + 0x110, 0x9aa8, 0x110, 0x9ad8, 0x110, 0x9adf, 0x110, 0x9b25, + 0x110, 0x9b2f, 0x110, 0x9b32, 0x110, 0x9b3c, 0x110, 0x9b5a, + 0x110, 0x9ce5, 0x110, 0x9e75, 0x110, 0x9e7f, 0x110, 0x9ea5, + 0x110, 0x9ebb, 0x110, 0x9ec3, 0x110, 0x9ecd, 0x110, 0x9ed1, + 0x110, 0x9ef9, 0x110, 0x9efd, 0x110, 0x9f0e, 0x110, 0x9f13, + 0x110, 0x9f20, 0x110, 0x9f3b, 0x110, 0x9f4a, 0x110, 0x9f52, + 0x110, 0x9f8d, 0x110, 0x9f9c, 0x110, 0x9fa0, 0x10c, 0x20, + 0x110, 0x3012, 0x110, 0x5341, 0x110, 0x5344, 0x110, 0x5345, + 0x201, 0x304b, 0x3099, 0x201, 0x304d, 0x3099, 0x201, 0x304f, + 0x3099, 0x201, 0x3051, 0x3099, 0x201, 0x3053, 0x3099, 0x201, + 0x3055, 0x3099, 0x201, 0x3057, 0x3099, 0x201, 0x3059, 0x3099, + 0x201, 0x305b, 0x3099, 0x201, 0x305d, 0x3099, 0x201, 0x305f, + 0x3099, 0x201, 0x3061, 0x3099, 0x201, 0x3064, 0x3099, 0x201, + 0x3066, 0x3099, 0x201, 0x3068, 0x3099, 0x201, 0x306f, 0x3099, + 0x201, 0x306f, 0x309a, 0x201, 0x3072, 0x3099, 0x201, 0x3072, + 0x309a, 0x201, 0x3075, 0x3099, 0x201, 0x3075, 0x309a, 0x201, + 0x3078, 0x3099, 0x201, 0x3078, 0x309a, 0x201, 0x307b, 0x3099, + 0x201, 0x307b, 0x309a, 0x201, 0x3046, 0x3099, 0x210, 0x20, + 0x3099, 0x210, 0x20, 0x309a, 0x201, 0x309d, 0x3099, 0x20b, + 0x3088, 0x308a, 0x201, 0x30ab, 0x3099, 0x201, 0x30ad, 0x3099, + 0x201, 0x30af, 0x3099, 0x201, 0x30b1, 0x3099, 0x201, 0x30b3, + 0x3099, 0x201, 0x30b5, 0x3099, 0x201, 0x30b7, 0x3099, 0x201, + 0x30b9, 0x3099, 0x201, 0x30bb, 0x3099, 0x201, 0x30bd, 0x3099, + 0x201, 0x30bf, 0x3099, 0x201, 0x30c1, 0x3099, 0x201, 0x30c4, + 0x3099, 0x201, 0x30c6, 0x3099, 0x201, 0x30c8, 0x3099, 0x201, + 0x30cf, 0x3099, 0x201, 0x30cf, 0x309a, 0x201, 0x30d2, 0x3099, + 0x201, 0x30d2, 0x309a, 0x201, 0x30d5, 0x3099, 0x201, 0x30d5, + 0x309a, 0x201, 0x30d8, 0x3099, 0x201, 0x30d8, 0x309a, 0x201, + 0x30db, 0x3099, 0x201, 0x30db, 0x309a, 0x201, 0x30a6, 0x3099, + 0x201, 0x30ef, 0x3099, 0x201, 0x30f0, 0x3099, 0x201, 0x30f1, + 0x3099, 0x201, 0x30f2, 0x3099, 0x201, 0x30fd, 0x3099, 0x20b, + 0x30b3, 0x30c8, 0x110, 0x1100, 0x110, 0x1101, 0x110, 0x11aa, + 0x110, 0x1102, 0x110, 0x11ac, 0x110, 0x11ad, 0x110, 0x1103, + 0x110, 0x1104, 0x110, 0x1105, 0x110, 0x11b0, 0x110, 0x11b1, + 0x110, 0x11b2, 0x110, 0x11b3, 0x110, 0x11b4, 0x110, 0x11b5, + 0x110, 0x111a, 0x110, 0x1106, 0x110, 0x1107, 0x110, 0x1108, + 0x110, 0x1121, 0x110, 0x1109, 0x110, 0x110a, 0x110, 0x110b, + 0x110, 0x110c, 0x110, 0x110d, 0x110, 0x110e, 0x110, 0x110f, + 0x110, 0x1110, 0x110, 0x1111, 0x110, 0x1112, 0x110, 0x1161, + 0x110, 0x1162, 0x110, 0x1163, 0x110, 0x1164, 0x110, 0x1165, + 0x110, 0x1166, 0x110, 0x1167, 0x110, 0x1168, 0x110, 0x1169, + 0x110, 0x116a, 0x110, 0x116b, 0x110, 0x116c, 0x110, 0x116d, + 0x110, 0x116e, 0x110, 0x116f, 0x110, 0x1170, 0x110, 0x1171, + 0x110, 0x1172, 0x110, 0x1173, 0x110, 0x1174, 0x110, 0x1175, + 0x110, 0x1160, 0x110, 0x1114, 0x110, 0x1115, 0x110, 0x11c7, + 0x110, 0x11c8, 0x110, 0x11cc, 0x110, 0x11ce, 0x110, 0x11d3, + 0x110, 0x11d7, 0x110, 0x11d9, 0x110, 0x111c, 0x110, 0x11dd, + 0x110, 0x11df, 0x110, 0x111d, 0x110, 0x111e, 0x110, 0x1120, + 0x110, 0x1122, 0x110, 0x1123, 0x110, 0x1127, 0x110, 0x1129, + 0x110, 0x112b, 0x110, 0x112c, 0x110, 0x112d, 0x110, 0x112e, + 0x110, 0x112f, 0x110, 0x1132, 0x110, 0x1136, 0x110, 0x1140, + 0x110, 0x1147, 0x110, 0x114c, 0x110, 0x11f1, 0x110, 0x11f2, + 0x110, 0x1157, 0x110, 0x1158, 0x110, 0x1159, 0x110, 0x1184, + 0x110, 0x1185, 0x110, 0x1188, 0x110, 0x1191, 0x110, 0x1192, + 0x110, 0x1194, 0x110, 0x119e, 0x110, 0x11a1, 0x109, 0x4e00, + 0x109, 0x4e8c, 0x109, 0x4e09, 0x109, 0x56db, 0x109, 0x4e0a, + 0x109, 0x4e2d, 0x109, 0x4e0b, 0x109, 0x7532, 0x109, 0x4e59, + 0x109, 0x4e19, 0x109, 0x4e01, 0x109, 0x5929, 0x109, 0x5730, + 0x109, 0x4eba, 0x310, 0x28, 0x1100, 0x29, 0x310, 0x28, + 0x1102, 0x29, 0x310, 0x28, 0x1103, 0x29, 0x310, 0x28, + 0x1105, 0x29, 0x310, 0x28, 0x1106, 0x29, 0x310, 0x28, + 0x1107, 0x29, 0x310, 0x28, 0x1109, 0x29, 0x310, 0x28, + 0x110b, 0x29, 0x310, 0x28, 0x110c, 0x29, 0x310, 0x28, + 0x110e, 0x29, 0x310, 0x28, 0x110f, 0x29, 0x310, 0x28, + 0x1110, 0x29, 0x310, 0x28, 0x1111, 0x29, 0x310, 0x28, + 0x1112, 0x29, 0x410, 0x28, 0x1100, 0x1161, 0x29, 0x410, + 0x28, 0x1102, 0x1161, 0x29, 0x410, 0x28, 0x1103, 0x1161, + 0x29, 0x410, 0x28, 0x1105, 0x1161, 0x29, 0x410, 0x28, + 0x1106, 0x1161, 0x29, 0x410, 0x28, 0x1107, 0x1161, 0x29, + 0x410, 0x28, 0x1109, 0x1161, 0x29, 0x410, 0x28, 0x110b, + 0x1161, 0x29, 0x410, 0x28, 0x110c, 0x1161, 0x29, 0x410, + 0x28, 0x110e, 0x1161, 0x29, 0x410, 0x28, 0x110f, 0x1161, + 0x29, 0x410, 0x28, 0x1110, 0x1161, 0x29, 0x410, 0x28, + 0x1111, 0x1161, 0x29, 0x410, 0x28, 0x1112, 0x1161, 0x29, + 0x410, 0x28, 0x110c, 0x116e, 0x29, 0x710, 0x28, 0x110b, + 0x1169, 0x110c, 0x1165, 0x11ab, 0x29, 0x610, 0x28, 0x110b, + 0x1169, 0x1112, 0x116e, 0x29, 0x310, 0x28, 0x4e00, 0x29, + 0x310, 0x28, 0x4e8c, 0x29, 0x310, 0x28, 0x4e09, 0x29, + 0x310, 0x28, 0x56db, 0x29, 0x310, 0x28, 0x4e94, 0x29, + 0x310, 0x28, 0x516d, 0x29, 0x310, 0x28, 0x4e03, 0x29, + 0x310, 0x28, 0x516b, 0x29, 0x310, 0x28, 0x4e5d, 0x29, + 0x310, 0x28, 0x5341, 0x29, 0x310, 0x28, 0x6708, 0x29, + 0x310, 0x28, 0x706b, 0x29, 0x310, 0x28, 0x6c34, 0x29, + 0x310, 0x28, 0x6728, 0x29, 0x310, 0x28, 0x91d1, 0x29, + 0x310, 0x28, 0x571f, 0x29, 0x310, 0x28, 0x65e5, 0x29, + 0x310, 0x28, 0x682a, 0x29, 0x310, 0x28, 0x6709, 0x29, + 0x310, 0x28, 0x793e, 0x29, 0x310, 0x28, 0x540d, 0x29, + 0x310, 0x28, 0x7279, 0x29, 0x310, 0x28, 0x8ca1, 0x29, + 0x310, 0x28, 0x795d, 0x29, 0x310, 0x28, 0x52b4, 0x29, + 0x310, 0x28, 0x4ee3, 0x29, 0x310, 0x28, 0x547c, 0x29, + 0x310, 0x28, 0x5b66, 0x29, 0x310, 0x28, 0x76e3, 0x29, + 0x310, 0x28, 0x4f01, 0x29, 0x310, 0x28, 0x8cc7, 0x29, + 0x310, 0x28, 0x5354, 0x29, 0x310, 0x28, 0x796d, 0x29, + 0x310, 0x28, 0x4f11, 0x29, 0x310, 0x28, 0x81ea, 0x29, + 0x310, 0x28, 0x81f3, 0x29, 0x108, 0x554f, 0x108, 0x5e7c, + 0x108, 0x6587, 0x108, 0x7b8f, 0x30f, 0x50, 0x54, 0x45, + 0x208, 0x32, 0x31, 0x208, 0x32, 0x32, 0x208, 0x32, + 0x33, 0x208, 0x32, 0x34, 0x208, 0x32, 0x35, 0x208, + 0x32, 0x36, 0x208, 0x32, 0x37, 0x208, 0x32, 0x38, + 0x208, 0x32, 0x39, 0x208, 0x33, 0x30, 0x208, 0x33, + 0x31, 0x208, 0x33, 0x32, 0x208, 0x33, 0x33, 0x208, + 0x33, 0x34, 0x208, 0x33, 0x35, 0x108, 0x1100, 0x108, + 0x1102, 0x108, 0x1103, 0x108, 0x1105, 0x108, 0x1106, 0x108, + 0x1107, 0x108, 0x1109, 0x108, 0x110b, 0x108, 0x110c, 0x108, + 0x110e, 0x108, 0x110f, 0x108, 0x1110, 0x108, 0x1111, 0x108, + 0x1112, 0x208, 0x1100, 0x1161, 0x208, 0x1102, 0x1161, 0x208, + 0x1103, 0x1161, 0x208, 0x1105, 0x1161, 0x208, 0x1106, 0x1161, + 0x208, 0x1107, 0x1161, 0x208, 0x1109, 0x1161, 0x208, 0x110b, + 0x1161, 0x208, 0x110c, 0x1161, 0x208, 0x110e, 0x1161, 0x208, + 0x110f, 0x1161, 0x208, 0x1110, 0x1161, 0x208, 0x1111, 0x1161, + 0x208, 0x1112, 0x1161, 0x508, 0x110e, 0x1161, 0x11b7, 0x1100, + 0x1169, 0x408, 0x110c, 0x116e, 0x110b, 0x1174, 0x208, 0x110b, + 0x116e, 0x108, 0x4e00, 0x108, 0x4e8c, 0x108, 0x4e09, 0x108, + 0x56db, 0x108, 0x4e94, 0x108, 0x516d, 0x108, 0x4e03, 0x108, + 0x516b, 0x108, 0x4e5d, 0x108, 0x5341, 0x108, 0x6708, 0x108, + 0x706b, 0x108, 0x6c34, 0x108, 0x6728, 0x108, 0x91d1, 0x108, + 0x571f, 0x108, 0x65e5, 0x108, 0x682a, 0x108, 0x6709, 0x108, + 0x793e, 0x108, 0x540d, 0x108, 0x7279, 0x108, 0x8ca1, 0x108, + 0x795d, 0x108, 0x52b4, 0x108, 0x79d8, 0x108, 0x7537, 0x108, + 0x5973, 0x108, 0x9069, 0x108, 0x512a, 0x108, 0x5370, 0x108, + 0x6ce8, 0x108, 0x9805, 0x108, 0x4f11, 0x108, 0x5199, 0x108, + 0x6b63, 0x108, 0x4e0a, 0x108, 0x4e2d, 0x108, 0x4e0b, 0x108, + 0x5de6, 0x108, 0x53f3, 0x108, 0x533b, 0x108, 0x5b97, 0x108, + 0x5b66, 0x108, 0x76e3, 0x108, 0x4f01, 0x108, 0x8cc7, 0x108, + 0x5354, 0x108, 0x591c, 0x208, 0x33, 0x36, 0x208, 0x33, + 0x37, 0x208, 0x33, 0x38, 0x208, 0x33, 0x39, 0x208, + 0x34, 0x30, 0x208, 0x34, 0x31, 0x208, 0x34, 0x32, + 0x208, 0x34, 0x33, 0x208, 0x34, 0x34, 0x208, 0x34, + 0x35, 0x208, 0x34, 0x36, 0x208, 0x34, 0x37, 0x208, + 0x34, 0x38, 0x208, 0x34, 0x39, 0x208, 0x35, 0x30, + 0x210, 0x31, 0x6708, 0x210, 0x32, 0x6708, 0x210, 0x33, + 0x6708, 0x210, 0x34, 0x6708, 0x210, 0x35, 0x6708, 0x210, + 0x36, 0x6708, 0x210, 0x37, 0x6708, 0x210, 0x38, 0x6708, + 0x210, 0x39, 0x6708, 0x310, 0x31, 0x30, 0x6708, 0x310, + 0x31, 0x31, 0x6708, 0x310, 0x31, 0x32, 0x6708, 0x20f, + 0x48, 0x67, 0x30f, 0x65, 0x72, 0x67, 0x20f, 0x65, + 0x56, 0x30f, 0x4c, 0x54, 0x44, 0x108, 0x30a2, 0x108, + 0x30a4, 0x108, 0x30a6, 0x108, 0x30a8, 0x108, 0x30aa, 0x108, + 0x30ab, 0x108, 0x30ad, 0x108, 0x30af, 0x108, 0x30b1, 0x108, + 0x30b3, 0x108, 0x30b5, 0x108, 0x30b7, 0x108, 0x30b9, 0x108, + 0x30bb, 0x108, 0x30bd, 0x108, 0x30bf, 0x108, 0x30c1, 0x108, + 0x30c4, 0x108, 0x30c6, 0x108, 0x30c8, 0x108, 0x30ca, 0x108, + 0x30cb, 0x108, 0x30cc, 0x108, 0x30cd, 0x108, 0x30ce, 0x108, + 0x30cf, 0x108, 0x30d2, 0x108, 0x30d5, 0x108, 0x30d8, 0x108, + 0x30db, 0x108, 0x30de, 0x108, 0x30df, 0x108, 0x30e0, 0x108, + 0x30e1, 0x108, 0x30e2, 0x108, 0x30e4, 0x108, 0x30e6, 0x108, + 0x30e8, 0x108, 0x30e9, 0x108, 0x30ea, 0x108, 0x30eb, 0x108, + 0x30ec, 0x108, 0x30ed, 0x108, 0x30ef, 0x108, 0x30f0, 0x108, + 0x30f1, 0x108, 0x30f2, 0x40f, 0x30a2, 0x30d1, 0x30fc, 0x30c8, + 0x40f, 0x30a2, 0x30eb, 0x30d5, 0x30a1, 0x40f, 0x30a2, 0x30f3, + 0x30da, 0x30a2, 0x30f, 0x30a2, 0x30fc, 0x30eb, 0x40f, 0x30a4, + 0x30cb, 0x30f3, 0x30b0, 0x30f, 0x30a4, 0x30f3, 0x30c1, 0x30f, + 0x30a6, 0x30a9, 0x30f3, 0x50f, 0x30a8, 0x30b9, 0x30af, 0x30fc, + 0x30c9, 0x40f, 0x30a8, 0x30fc, 0x30ab, 0x30fc, 0x30f, 0x30aa, + 0x30f3, 0x30b9, 0x30f, 0x30aa, 0x30fc, 0x30e0, 0x30f, 0x30ab, + 0x30a4, 0x30ea, 0x40f, 0x30ab, 0x30e9, 0x30c3, 0x30c8, 0x40f, + 0x30ab, 0x30ed, 0x30ea, 0x30fc, 0x30f, 0x30ac, 0x30ed, 0x30f3, + 0x30f, 0x30ac, 0x30f3, 0x30de, 0x20f, 0x30ae, 0x30ac, 0x30f, + 0x30ae, 0x30cb, 0x30fc, 0x40f, 0x30ad, 0x30e5, 0x30ea, 0x30fc, + 0x40f, 0x30ae, 0x30eb, 0x30c0, 0x30fc, 0x20f, 0x30ad, 0x30ed, + 0x50f, 0x30ad, 0x30ed, 0x30b0, 0x30e9, 0x30e0, 0x60f, 0x30ad, + 0x30ed, 0x30e1, 0x30fc, 0x30c8, 0x30eb, 0x50f, 0x30ad, 0x30ed, + 0x30ef, 0x30c3, 0x30c8, 0x30f, 0x30b0, 0x30e9, 0x30e0, 0x50f, + 0x30b0, 0x30e9, 0x30e0, 0x30c8, 0x30f3, 0x50f, 0x30af, 0x30eb, + 0x30bc, 0x30a4, 0x30ed, 0x40f, 0x30af, 0x30ed, 0x30fc, 0x30cd, + 0x30f, 0x30b1, 0x30fc, 0x30b9, 0x30f, 0x30b3, 0x30eb, 0x30ca, + 0x30f, 0x30b3, 0x30fc, 0x30dd, 0x40f, 0x30b5, 0x30a4, 0x30af, + 0x30eb, 0x50f, 0x30b5, 0x30f3, 0x30c1, 0x30fc, 0x30e0, 0x40f, + 0x30b7, 0x30ea, 0x30f3, 0x30b0, 0x30f, 0x30bb, 0x30f3, 0x30c1, + 0x30f, 0x30bb, 0x30f3, 0x30c8, 0x30f, 0x30c0, 0x30fc, 0x30b9, + 0x20f, 0x30c7, 0x30b7, 0x20f, 0x30c9, 0x30eb, 0x20f, 0x30c8, + 0x30f3, 0x20f, 0x30ca, 0x30ce, 0x30f, 0x30ce, 0x30c3, 0x30c8, + 0x30f, 0x30cf, 0x30a4, 0x30c4, 0x50f, 0x30d1, 0x30fc, 0x30bb, + 0x30f3, 0x30c8, 0x30f, 0x30d1, 0x30fc, 0x30c4, 0x40f, 0x30d0, + 0x30fc, 0x30ec, 0x30eb, 0x50f, 0x30d4, 0x30a2, 0x30b9, 0x30c8, + 0x30eb, 0x30f, 0x30d4, 0x30af, 0x30eb, 0x20f, 0x30d4, 0x30b3, + 0x20f, 0x30d3, 0x30eb, 0x50f, 0x30d5, 0x30a1, 0x30e9, 0x30c3, + 0x30c9, 0x40f, 0x30d5, 0x30a3, 0x30fc, 0x30c8, 0x50f, 0x30d6, + 0x30c3, 0x30b7, 0x30a7, 0x30eb, 0x30f, 0x30d5, 0x30e9, 0x30f3, + 0x50f, 0x30d8, 0x30af, 0x30bf, 0x30fc, 0x30eb, 0x20f, 0x30da, + 0x30bd, 0x30f, 0x30da, 0x30cb, 0x30d2, 0x30f, 0x30d8, 0x30eb, + 0x30c4, 0x30f, 0x30da, 0x30f3, 0x30b9, 0x30f, 0x30da, 0x30fc, + 0x30b8, 0x30f, 0x30d9, 0x30fc, 0x30bf, 0x40f, 0x30dd, 0x30a4, + 0x30f3, 0x30c8, 0x30f, 0x30dc, 0x30eb, 0x30c8, 0x20f, 0x30db, + 0x30f3, 0x30f, 0x30dd, 0x30f3, 0x30c9, 0x30f, 0x30db, 0x30fc, + 0x30eb, 0x30f, 0x30db, 0x30fc, 0x30f3, 0x40f, 0x30de, 0x30a4, + 0x30af, 0x30ed, 0x30f, 0x30de, 0x30a4, 0x30eb, 0x30f, 0x30de, + 0x30c3, 0x30cf, 0x30f, 0x30de, 0x30eb, 0x30af, 0x50f, 0x30de, + 0x30f3, 0x30b7, 0x30e7, 0x30f3, 0x40f, 0x30df, 0x30af, 0x30ed, + 0x30f3, 0x20f, 0x30df, 0x30ea, 0x50f, 0x30df, 0x30ea, 0x30d0, + 0x30fc, 0x30eb, 0x20f, 0x30e1, 0x30ac, 0x40f, 0x30e1, 0x30ac, + 0x30c8, 0x30f3, 0x40f, 0x30e1, 0x30fc, 0x30c8, 0x30eb, 0x30f, + 0x30e4, 0x30fc, 0x30c9, 0x30f, 0x30e4, 0x30fc, 0x30eb, 0x30f, + 0x30e6, 0x30a2, 0x30f3, 0x40f, 0x30ea, 0x30c3, 0x30c8, 0x30eb, + 0x20f, 0x30ea, 0x30e9, 0x30f, 0x30eb, 0x30d4, 0x30fc, 0x40f, + 0x30eb, 0x30fc, 0x30d6, 0x30eb, 0x20f, 0x30ec, 0x30e0, 0x50f, + 0x30ec, 0x30f3, 0x30c8, 0x30b2, 0x30f3, 0x30f, 0x30ef, 0x30c3, + 0x30c8, 0x210, 0x30, 0x70b9, 0x210, 0x31, 0x70b9, 0x210, + 0x32, 0x70b9, 0x210, 0x33, 0x70b9, 0x210, 0x34, 0x70b9, + 0x210, 0x35, 0x70b9, 0x210, 0x36, 0x70b9, 0x210, 0x37, + 0x70b9, 0x210, 0x38, 0x70b9, 0x210, 0x39, 0x70b9, 0x310, + 0x31, 0x30, 0x70b9, 0x310, 0x31, 0x31, 0x70b9, 0x310, + 0x31, 0x32, 0x70b9, 0x310, 0x31, 0x33, 0x70b9, 0x310, + 0x31, 0x34, 0x70b9, 0x310, 0x31, 0x35, 0x70b9, 0x310, + 0x31, 0x36, 0x70b9, 0x310, 0x31, 0x37, 0x70b9, 0x310, + 0x31, 0x38, 0x70b9, 0x310, 0x31, 0x39, 0x70b9, 0x310, + 0x32, 0x30, 0x70b9, 0x310, 0x32, 0x31, 0x70b9, 0x310, + 0x32, 0x32, 0x70b9, 0x310, 0x32, 0x33, 0x70b9, 0x310, + 0x32, 0x34, 0x70b9, 0x30f, 0x68, 0x50, 0x61, 0x20f, + 0x64, 0x61, 0x20f, 0x41, 0x55, 0x30f, 0x62, 0x61, + 0x72, 0x20f, 0x6f, 0x56, 0x20f, 0x70, 0x63, 0x20f, + 0x64, 0x6d, 0x30f, 0x64, 0x6d, 0xb2, 0x30f, 0x64, + 0x6d, 0xb3, 0x20f, 0x49, 0x55, 0x20f, 0x5e73, 0x6210, + 0x20f, 0x662d, 0x548c, 0x20f, 0x5927, 0x6b63, 0x20f, 0x660e, + 0x6cbb, 0x40f, 0x682a, 0x5f0f, 0x4f1a, 0x793e, 0x20f, 0x70, + 0x41, 0x20f, 0x6e, 0x41, 0x20f, 0x3bc, 0x41, 0x20f, + 0x6d, 0x41, 0x20f, 0x6b, 0x41, 0x20f, 0x4b, 0x42, + 0x20f, 0x4d, 0x42, 0x20f, 0x47, 0x42, 0x30f, 0x63, + 0x61, 0x6c, 0x40f, 0x6b, 0x63, 0x61, 0x6c, 0x20f, + 0x70, 0x46, 0x20f, 0x6e, 0x46, 0x20f, 0x3bc, 0x46, + 0x20f, 0x3bc, 0x67, 0x20f, 0x6d, 0x67, 0x20f, 0x6b, + 0x67, 0x20f, 0x48, 0x7a, 0x30f, 0x6b, 0x48, 0x7a, + 0x30f, 0x4d, 0x48, 0x7a, 0x30f, 0x47, 0x48, 0x7a, + 0x30f, 0x54, 0x48, 0x7a, 0x20f, 0x3bc, 0x2113, 0x20f, + 0x6d, 0x2113, 0x20f, 0x64, 0x2113, 0x20f, 0x6b, 0x2113, + 0x20f, 0x66, 0x6d, 0x20f, 0x6e, 0x6d, 0x20f, 0x3bc, + 0x6d, 0x20f, 0x6d, 0x6d, 0x20f, 0x63, 0x6d, 0x20f, + 0x6b, 0x6d, 0x30f, 0x6d, 0x6d, 0xb2, 0x30f, 0x63, + 0x6d, 0xb2, 0x20f, 0x6d, 0xb2, 0x30f, 0x6b, 0x6d, + 0xb2, 0x30f, 0x6d, 0x6d, 0xb3, 0x30f, 0x63, 0x6d, + 0xb3, 0x20f, 0x6d, 0xb3, 0x30f, 0x6b, 0x6d, 0xb3, + 0x30f, 0x6d, 0x2215, 0x73, 0x40f, 0x6d, 0x2215, 0x73, + 0xb2, 0x20f, 0x50, 0x61, 0x30f, 0x6b, 0x50, 0x61, + 0x30f, 0x4d, 0x50, 0x61, 0x30f, 0x47, 0x50, 0x61, + 0x30f, 0x72, 0x61, 0x64, 0x50f, 0x72, 0x61, 0x64, + 0x2215, 0x73, 0x60f, 0x72, 0x61, 0x64, 0x2215, 0x73, + 0xb2, 0x20f, 0x70, 0x73, 0x20f, 0x6e, 0x73, 0x20f, + 0x3bc, 0x73, 0x20f, 0x6d, 0x73, 0x20f, 0x70, 0x56, + 0x20f, 0x6e, 0x56, 0x20f, 0x3bc, 0x56, 0x20f, 0x6d, + 0x56, 0x20f, 0x6b, 0x56, 0x20f, 0x4d, 0x56, 0x20f, + 0x70, 0x57, 0x20f, 0x6e, 0x57, 0x20f, 0x3bc, 0x57, + 0x20f, 0x6d, 0x57, 0x20f, 0x6b, 0x57, 0x20f, 0x4d, + 0x57, 0x20f, 0x6b, 0x3a9, 0x20f, 0x4d, 0x3a9, 0x40f, + 0x61, 0x2e, 0x6d, 0x2e, 0x20f, 0x42, 0x71, 0x20f, + 0x63, 0x63, 0x20f, 0x63, 0x64, 0x40f, 0x43, 0x2215, + 0x6b, 0x67, 0x30f, 0x43, 0x6f, 0x2e, 0x20f, 0x64, + 0x42, 0x20f, 0x47, 0x79, 0x20f, 0x68, 0x61, 0x20f, + 0x48, 0x50, 0x20f, 0x69, 0x6e, 0x20f, 0x4b, 0x4b, + 0x20f, 0x4b, 0x4d, 0x20f, 0x6b, 0x74, 0x20f, 0x6c, + 0x6d, 0x20f, 0x6c, 0x6e, 0x30f, 0x6c, 0x6f, 0x67, + 0x20f, 0x6c, 0x78, 0x20f, 0x6d, 0x62, 0x30f, 0x6d, + 0x69, 0x6c, 0x30f, 0x6d, 0x6f, 0x6c, 0x20f, 0x50, + 0x48, 0x40f, 0x70, 0x2e, 0x6d, 0x2e, 0x30f, 0x50, + 0x50, 0x4d, 0x20f, 0x50, 0x52, 0x20f, 0x73, 0x72, + 0x20f, 0x53, 0x76, 0x20f, 0x57, 0x62, 0x30f, 0x56, + 0x2215, 0x6d, 0x30f, 0x41, 0x2215, 0x6d, 0x210, 0x31, + 0x65e5, 0x210, 0x32, 0x65e5, 0x210, 0x33, 0x65e5, 0x210, + 0x34, 0x65e5, 0x210, 0x35, 0x65e5, 0x210, 0x36, 0x65e5, + 0x210, 0x37, 0x65e5, 0x210, 0x38, 0x65e5, 0x210, 0x39, + 0x65e5, 0x310, 0x31, 0x30, 0x65e5, 0x310, 0x31, 0x31, + 0x65e5, 0x310, 0x31, 0x32, 0x65e5, 0x310, 0x31, 0x33, + 0x65e5, 0x310, 0x31, 0x34, 0x65e5, 0x310, 0x31, 0x35, + 0x65e5, 0x310, 0x31, 0x36, 0x65e5, 0x310, 0x31, 0x37, + 0x65e5, 0x310, 0x31, 0x38, 0x65e5, 0x310, 0x31, 0x39, + 0x65e5, 0x310, 0x32, 0x30, 0x65e5, 0x310, 0x32, 0x31, + 0x65e5, 0x310, 0x32, 0x32, 0x65e5, 0x310, 0x32, 0x33, + 0x65e5, 0x310, 0x32, 0x34, 0x65e5, 0x310, 0x32, 0x35, + 0x65e5, 0x310, 0x32, 0x36, 0x65e5, 0x310, 0x32, 0x37, + 0x65e5, 0x310, 0x32, 0x38, 0x65e5, 0x310, 0x32, 0x39, + 0x65e5, 0x310, 0x33, 0x30, 0x65e5, 0x310, 0x33, 0x31, + 0x65e5, 0x30f, 0x67, 0x61, 0x6c, 0x109, 0x44a, 0x109, + 0x44c, 0x109, 0xa76f, 0x109, 0x126, 0x109, 0x153, 0x109, + 0xa727, 0x109, 0xab37, 0x109, 0x26b, 0x109, 0xab52, 0x101, + 0x8c48, 0x101, 0x66f4, 0x101, 0x8eca, 0x101, 0x8cc8, 0x101, + 0x6ed1, 0x101, 0x4e32, 0x101, 0x53e5, 0x101, 0x9f9c, 0x101, + 0x9f9c, 0x101, 0x5951, 0x101, 0x91d1, 0x101, 0x5587, 0x101, + 0x5948, 0x101, 0x61f6, 0x101, 0x7669, 0x101, 0x7f85, 0x101, + 0x863f, 0x101, 0x87ba, 0x101, 0x88f8, 0x101, 0x908f, 0x101, + 0x6a02, 0x101, 0x6d1b, 0x101, 0x70d9, 0x101, 0x73de, 0x101, + 0x843d, 0x101, 0x916a, 0x101, 0x99f1, 0x101, 0x4e82, 0x101, + 0x5375, 0x101, 0x6b04, 0x101, 0x721b, 0x101, 0x862d, 0x101, + 0x9e1e, 0x101, 0x5d50, 0x101, 0x6feb, 0x101, 0x85cd, 0x101, + 0x8964, 0x101, 0x62c9, 0x101, 0x81d8, 0x101, 0x881f, 0x101, + 0x5eca, 0x101, 0x6717, 0x101, 0x6d6a, 0x101, 0x72fc, 0x101, + 0x90ce, 0x101, 0x4f86, 0x101, 0x51b7, 0x101, 0x52de, 0x101, + 0x64c4, 0x101, 0x6ad3, 0x101, 0x7210, 0x101, 0x76e7, 0x101, + 0x8001, 0x101, 0x8606, 0x101, 0x865c, 0x101, 0x8def, 0x101, + 0x9732, 0x101, 0x9b6f, 0x101, 0x9dfa, 0x101, 0x788c, 0x101, + 0x797f, 0x101, 0x7da0, 0x101, 0x83c9, 0x101, 0x9304, 0x101, + 0x9e7f, 0x101, 0x8ad6, 0x101, 0x58df, 0x101, 0x5f04, 0x101, + 0x7c60, 0x101, 0x807e, 0x101, 0x7262, 0x101, 0x78ca, 0x101, + 0x8cc2, 0x101, 0x96f7, 0x101, 0x58d8, 0x101, 0x5c62, 0x101, + 0x6a13, 0x101, 0x6dda, 0x101, 0x6f0f, 0x101, 0x7d2f, 0x101, + 0x7e37, 0x101, 0x964b, 0x101, 0x52d2, 0x101, 0x808b, 0x101, + 0x51dc, 0x101, 0x51cc, 0x101, 0x7a1c, 0x101, 0x7dbe, 0x101, + 0x83f1, 0x101, 0x9675, 0x101, 0x8b80, 0x101, 0x62cf, 0x101, + 0x6a02, 0x101, 0x8afe, 0x101, 0x4e39, 0x101, 0x5be7, 0x101, + 0x6012, 0x101, 0x7387, 0x101, 0x7570, 0x101, 0x5317, 0x101, + 0x78fb, 0x101, 0x4fbf, 0x101, 0x5fa9, 0x101, 0x4e0d, 0x101, + 0x6ccc, 0x101, 0x6578, 0x101, 0x7d22, 0x101, 0x53c3, 0x101, + 0x585e, 0x101, 0x7701, 0x101, 0x8449, 0x101, 0x8aaa, 0x101, + 0x6bba, 0x101, 0x8fb0, 0x101, 0x6c88, 0x101, 0x62fe, 0x101, + 0x82e5, 0x101, 0x63a0, 0x101, 0x7565, 0x101, 0x4eae, 0x101, + 0x5169, 0x101, 0x51c9, 0x101, 0x6881, 0x101, 0x7ce7, 0x101, + 0x826f, 0x101, 0x8ad2, 0x101, 0x91cf, 0x101, 0x52f5, 0x101, + 0x5442, 0x101, 0x5973, 0x101, 0x5eec, 0x101, 0x65c5, 0x101, + 0x6ffe, 0x101, 0x792a, 0x101, 0x95ad, 0x101, 0x9a6a, 0x101, + 0x9e97, 0x101, 0x9ece, 0x101, 0x529b, 0x101, 0x66c6, 0x101, + 0x6b77, 0x101, 0x8f62, 0x101, 0x5e74, 0x101, 0x6190, 0x101, + 0x6200, 0x101, 0x649a, 0x101, 0x6f23, 0x101, 0x7149, 0x101, + 0x7489, 0x101, 0x79ca, 0x101, 0x7df4, 0x101, 0x806f, 0x101, + 0x8f26, 0x101, 0x84ee, 0x101, 0x9023, 0x101, 0x934a, 0x101, + 0x5217, 0x101, 0x52a3, 0x101, 0x54bd, 0x101, 0x70c8, 0x101, + 0x88c2, 0x101, 0x8aaa, 0x101, 0x5ec9, 0x101, 0x5ff5, 0x101, + 0x637b, 0x101, 0x6bae, 0x101, 0x7c3e, 0x101, 0x7375, 0x101, + 0x4ee4, 0x101, 0x56f9, 0x101, 0x5be7, 0x101, 0x5dba, 0x101, + 0x601c, 0x101, 0x73b2, 0x101, 0x7469, 0x101, 0x7f9a, 0x101, + 0x8046, 0x101, 0x9234, 0x101, 0x96f6, 0x101, 0x9748, 0x101, + 0x9818, 0x101, 0x4f8b, 0x101, 0x79ae, 0x101, 0x91b4, 0x101, + 0x96b8, 0x101, 0x60e1, 0x101, 0x4e86, 0x101, 0x50da, 0x101, + 0x5bee, 0x101, 0x5c3f, 0x101, 0x6599, 0x101, 0x6a02, 0x101, + 0x71ce, 0x101, 0x7642, 0x101, 0x84fc, 0x101, 0x907c, 0x101, + 0x9f8d, 0x101, 0x6688, 0x101, 0x962e, 0x101, 0x5289, 0x101, + 0x677b, 0x101, 0x67f3, 0x101, 0x6d41, 0x101, 0x6e9c, 0x101, + 0x7409, 0x101, 0x7559, 0x101, 0x786b, 0x101, 0x7d10, 0x101, + 0x985e, 0x101, 0x516d, 0x101, 0x622e, 0x101, 0x9678, 0x101, + 0x502b, 0x101, 0x5d19, 0x101, 0x6dea, 0x101, 0x8f2a, 0x101, + 0x5f8b, 0x101, 0x6144, 0x101, 0x6817, 0x101, 0x7387, 0x101, + 0x9686, 0x101, 0x5229, 0x101, 0x540f, 0x101, 0x5c65, 0x101, + 0x6613, 0x101, 0x674e, 0x101, 0x68a8, 0x101, 0x6ce5, 0x101, + 0x7406, 0x101, 0x75e2, 0x101, 0x7f79, 0x101, 0x88cf, 0x101, + 0x88e1, 0x101, 0x91cc, 0x101, 0x96e2, 0x101, 0x533f, 0x101, + 0x6eba, 0x101, 0x541d, 0x101, 0x71d0, 0x101, 0x7498, 0x101, + 0x85fa, 0x101, 0x96a3, 0x101, 0x9c57, 0x101, 0x9e9f, 0x101, + 0x6797, 0x101, 0x6dcb, 0x101, 0x81e8, 0x101, 0x7acb, 0x101, + 0x7b20, 0x101, 0x7c92, 0x101, 0x72c0, 0x101, 0x7099, 0x101, + 0x8b58, 0x101, 0x4ec0, 0x101, 0x8336, 0x101, 0x523a, 0x101, + 0x5207, 0x101, 0x5ea6, 0x101, 0x62d3, 0x101, 0x7cd6, 0x101, + 0x5b85, 0x101, 0x6d1e, 0x101, 0x66b4, 0x101, 0x8f3b, 0x101, + 0x884c, 0x101, 0x964d, 0x101, 0x898b, 0x101, 0x5ed3, 0x101, + 0x5140, 0x101, 0x55c0, 0x101, 0x585a, 0x101, 0x6674, 0x101, + 0x51de, 0x101, 0x732a, 0x101, 0x76ca, 0x101, 0x793c, 0x101, + 0x795e, 0x101, 0x7965, 0x101, 0x798f, 0x101, 0x9756, 0x101, + 0x7cbe, 0x101, 0x7fbd, 0x101, 0x8612, 0x101, 0x8af8, 0x101, + 0x9038, 0x101, 0x90fd, 0x101, 0x98ef, 0x101, 0x98fc, 0x101, + 0x9928, 0x101, 0x9db4, 0x101, 0x90de, 0x101, 0x96b7, 0x101, + 0x4fae, 0x101, 0x50e7, 0x101, 0x514d, 0x101, 0x52c9, 0x101, + 0x52e4, 0x101, 0x5351, 0x101, 0x559d, 0x101, 0x5606, 0x101, + 0x5668, 0x101, 0x5840, 0x101, 0x58a8, 0x101, 0x5c64, 0x101, + 0x5c6e, 0x101, 0x6094, 0x101, 0x6168, 0x101, 0x618e, 0x101, + 0x61f2, 0x101, 0x654f, 0x101, 0x65e2, 0x101, 0x6691, 0x101, + 0x6885, 0x101, 0x6d77, 0x101, 0x6e1a, 0x101, 0x6f22, 0x101, + 0x716e, 0x101, 0x722b, 0x101, 0x7422, 0x101, 0x7891, 0x101, + 0x793e, 0x101, 0x7949, 0x101, 0x7948, 0x101, 0x7950, 0x101, + 0x7956, 0x101, 0x795d, 0x101, 0x798d, 0x101, 0x798e, 0x101, + 0x7a40, 0x101, 0x7a81, 0x101, 0x7bc0, 0x101, 0x7df4, 0x101, + 0x7e09, 0x101, 0x7e41, 0x101, 0x7f72, 0x101, 0x8005, 0x101, + 0x81ed, 0x101, 0x8279, 0x101, 0x8279, 0x101, 0x8457, 0x101, + 0x8910, 0x101, 0x8996, 0x101, 0x8b01, 0x101, 0x8b39, 0x101, + 0x8cd3, 0x101, 0x8d08, 0x101, 0x8fb6, 0x101, 0x9038, 0x101, + 0x96e3, 0x101, 0x97ff, 0x101, 0x983b, 0x101, 0x6075, 0x201, + 0xd850, 0xdeee, 0x101, 0x8218, 0x101, 0x4e26, 0x101, 0x51b5, + 0x101, 0x5168, 0x101, 0x4f80, 0x101, 0x5145, 0x101, 0x5180, + 0x101, 0x52c7, 0x101, 0x52fa, 0x101, 0x559d, 0x101, 0x5555, + 0x101, 0x5599, 0x101, 0x55e2, 0x101, 0x585a, 0x101, 0x58b3, + 0x101, 0x5944, 0x101, 0x5954, 0x101, 0x5a62, 0x101, 0x5b28, + 0x101, 0x5ed2, 0x101, 0x5ed9, 0x101, 0x5f69, 0x101, 0x5fad, + 0x101, 0x60d8, 0x101, 0x614e, 0x101, 0x6108, 0x101, 0x618e, + 0x101, 0x6160, 0x101, 0x61f2, 0x101, 0x6234, 0x101, 0x63c4, + 0x101, 0x641c, 0x101, 0x6452, 0x101, 0x6556, 0x101, 0x6674, + 0x101, 0x6717, 0x101, 0x671b, 0x101, 0x6756, 0x101, 0x6b79, + 0x101, 0x6bba, 0x101, 0x6d41, 0x101, 0x6edb, 0x101, 0x6ecb, + 0x101, 0x6f22, 0x101, 0x701e, 0x101, 0x716e, 0x101, 0x77a7, + 0x101, 0x7235, 0x101, 0x72af, 0x101, 0x732a, 0x101, 0x7471, + 0x101, 0x7506, 0x101, 0x753b, 0x101, 0x761d, 0x101, 0x761f, + 0x101, 0x76ca, 0x101, 0x76db, 0x101, 0x76f4, 0x101, 0x774a, + 0x101, 0x7740, 0x101, 0x78cc, 0x101, 0x7ab1, 0x101, 0x7bc0, + 0x101, 0x7c7b, 0x101, 0x7d5b, 0x101, 0x7df4, 0x101, 0x7f3e, + 0x101, 0x8005, 0x101, 0x8352, 0x101, 0x83ef, 0x101, 0x8779, + 0x101, 0x8941, 0x101, 0x8986, 0x101, 0x8996, 0x101, 0x8abf, + 0x101, 0x8af8, 0x101, 0x8acb, 0x101, 0x8b01, 0x101, 0x8afe, + 0x101, 0x8aed, 0x101, 0x8b39, 0x101, 0x8b8a, 0x101, 0x8d08, + 0x101, 0x8f38, 0x101, 0x9072, 0x101, 0x9199, 0x101, 0x9276, + 0x101, 0x967c, 0x101, 0x96e3, 0x101, 0x9756, 0x101, 0x97db, + 0x101, 0x97ff, 0x101, 0x980b, 0x101, 0x983b, 0x101, 0x9b12, + 0x101, 0x9f9c, 0x201, 0xd84a, 0xdc4a, 0x201, 0xd84a, 0xdc44, + 0x201, 0xd84c, 0xdfd5, 0x101, 0x3b9d, 0x101, 0x4018, 0x101, + 0x4039, 0x201, 0xd854, 0xde49, 0x201, 0xd857, 0xdcd0, 0x201, + 0xd85f, 0xded3, 0x101, 0x9f43, 0x101, 0x9f8e, 0x210, 0x66, + 0x66, 0x210, 0x66, 0x69, 0x210, 0x66, 0x6c, 0x310, + 0x66, 0x66, 0x69, 0x310, 0x66, 0x66, 0x6c, 0x210, + 0x17f, 0x74, 0x210, 0x73, 0x74, 0x210, 0x574, 0x576, + 0x210, 0x574, 0x565, 0x210, 0x574, 0x56b, 0x210, 0x57e, + 0x576, 0x210, 0x574, 0x56d, 0x201, 0x5d9, 0x5b4, 0x201, + 0x5f2, 0x5b7, 0x102, 0x5e2, 0x102, 0x5d0, 0x102, 0x5d3, + 0x102, 0x5d4, 0x102, 0x5db, 0x102, 0x5dc, 0x102, 0x5dd, + 0x102, 0x5e8, 0x102, 0x5ea, 0x102, 0x2b, 0x201, 0x5e9, + 0x5c1, 0x201, 0x5e9, 0x5c2, 0x201, 0xfb49, 0x5c1, 0x201, + 0xfb49, 0x5c2, 0x201, 0x5d0, 0x5b7, 0x201, 0x5d0, 0x5b8, + 0x201, 0x5d0, 0x5bc, 0x201, 0x5d1, 0x5bc, 0x201, 0x5d2, + 0x5bc, 0x201, 0x5d3, 0x5bc, 0x201, 0x5d4, 0x5bc, 0x201, + 0x5d5, 0x5bc, 0x201, 0x5d6, 0x5bc, 0x201, 0x5d8, 0x5bc, + 0x201, 0x5d9, 0x5bc, 0x201, 0x5da, 0x5bc, 0x201, 0x5db, + 0x5bc, 0x201, 0x5dc, 0x5bc, 0x201, 0x5de, 0x5bc, 0x201, + 0x5e0, 0x5bc, 0x201, 0x5e1, 0x5bc, 0x201, 0x5e3, 0x5bc, + 0x201, 0x5e4, 0x5bc, 0x201, 0x5e6, 0x5bc, 0x201, 0x5e7, + 0x5bc, 0x201, 0x5e8, 0x5bc, 0x201, 0x5e9, 0x5bc, 0x201, + 0x5ea, 0x5bc, 0x201, 0x5d5, 0x5b9, 0x201, 0x5d1, 0x5bf, + 0x201, 0x5db, 0x5bf, 0x201, 0x5e4, 0x5bf, 0x210, 0x5d0, + 0x5dc, 0x107, 0x671, 0x106, 0x671, 0x107, 0x67b, 0x106, + 0x67b, 0x104, 0x67b, 0x105, 0x67b, 0x107, 0x67e, 0x106, + 0x67e, 0x104, 0x67e, 0x105, 0x67e, 0x107, 0x680, 0x106, + 0x680, 0x104, 0x680, 0x105, 0x680, 0x107, 0x67a, 0x106, + 0x67a, 0x104, 0x67a, 0x105, 0x67a, 0x107, 0x67f, 0x106, + 0x67f, 0x104, 0x67f, 0x105, 0x67f, 0x107, 0x679, 0x106, + 0x679, 0x104, 0x679, 0x105, 0x679, 0x107, 0x6a4, 0x106, + 0x6a4, 0x104, 0x6a4, 0x105, 0x6a4, 0x107, 0x6a6, 0x106, + 0x6a6, 0x104, 0x6a6, 0x105, 0x6a6, 0x107, 0x684, 0x106, + 0x684, 0x104, 0x684, 0x105, 0x684, 0x107, 0x683, 0x106, + 0x683, 0x104, 0x683, 0x105, 0x683, 0x107, 0x686, 0x106, + 0x686, 0x104, 0x686, 0x105, 0x686, 0x107, 0x687, 0x106, + 0x687, 0x104, 0x687, 0x105, 0x687, 0x107, 0x68d, 0x106, + 0x68d, 0x107, 0x68c, 0x106, 0x68c, 0x107, 0x68e, 0x106, + 0x68e, 0x107, 0x688, 0x106, 0x688, 0x107, 0x698, 0x106, + 0x698, 0x107, 0x691, 0x106, 0x691, 0x107, 0x6a9, 0x106, + 0x6a9, 0x104, 0x6a9, 0x105, 0x6a9, 0x107, 0x6af, 0x106, + 0x6af, 0x104, 0x6af, 0x105, 0x6af, 0x107, 0x6b3, 0x106, + 0x6b3, 0x104, 0x6b3, 0x105, 0x6b3, 0x107, 0x6b1, 0x106, + 0x6b1, 0x104, 0x6b1, 0x105, 0x6b1, 0x107, 0x6ba, 0x106, + 0x6ba, 0x107, 0x6bb, 0x106, 0x6bb, 0x104, 0x6bb, 0x105, + 0x6bb, 0x107, 0x6c0, 0x106, 0x6c0, 0x107, 0x6c1, 0x106, + 0x6c1, 0x104, 0x6c1, 0x105, 0x6c1, 0x107, 0x6be, 0x106, + 0x6be, 0x104, 0x6be, 0x105, 0x6be, 0x107, 0x6d2, 0x106, + 0x6d2, 0x107, 0x6d3, 0x106, 0x6d3, 0x107, 0x6ad, 0x106, + 0x6ad, 0x104, 0x6ad, 0x105, 0x6ad, 0x107, 0x6c7, 0x106, + 0x6c7, 0x107, 0x6c6, 0x106, 0x6c6, 0x107, 0x6c8, 0x106, + 0x6c8, 0x107, 0x677, 0x107, 0x6cb, 0x106, 0x6cb, 0x107, + 0x6c5, 0x106, 0x6c5, 0x107, 0x6c9, 0x106, 0x6c9, 0x107, + 0x6d0, 0x106, 0x6d0, 0x104, 0x6d0, 0x105, 0x6d0, 0x104, + 0x649, 0x105, 0x649, 0x207, 0x626, 0x627, 0x206, 0x626, + 0x627, 0x207, 0x626, 0x6d5, 0x206, 0x626, 0x6d5, 0x207, + 0x626, 0x648, 0x206, 0x626, 0x648, 0x207, 0x626, 0x6c7, + 0x206, 0x626, 0x6c7, 0x207, 0x626, 0x6c6, 0x206, 0x626, + 0x6c6, 0x207, 0x626, 0x6c8, 0x206, 0x626, 0x6c8, 0x207, + 0x626, 0x6d0, 0x206, 0x626, 0x6d0, 0x204, 0x626, 0x6d0, + 0x207, 0x626, 0x649, 0x206, 0x626, 0x649, 0x204, 0x626, + 0x649, 0x107, 0x6cc, 0x106, 0x6cc, 0x104, 0x6cc, 0x105, + 0x6cc, 0x207, 0x626, 0x62c, 0x207, 0x626, 0x62d, 0x207, + 0x626, 0x645, 0x207, 0x626, 0x649, 0x207, 0x626, 0x64a, + 0x207, 0x628, 0x62c, 0x207, 0x628, 0x62d, 0x207, 0x628, + 0x62e, 0x207, 0x628, 0x645, 0x207, 0x628, 0x649, 0x207, + 0x628, 0x64a, 0x207, 0x62a, 0x62c, 0x207, 0x62a, 0x62d, + 0x207, 0x62a, 0x62e, 0x207, 0x62a, 0x645, 0x207, 0x62a, + 0x649, 0x207, 0x62a, 0x64a, 0x207, 0x62b, 0x62c, 0x207, + 0x62b, 0x645, 0x207, 0x62b, 0x649, 0x207, 0x62b, 0x64a, + 0x207, 0x62c, 0x62d, 0x207, 0x62c, 0x645, 0x207, 0x62d, + 0x62c, 0x207, 0x62d, 0x645, 0x207, 0x62e, 0x62c, 0x207, + 0x62e, 0x62d, 0x207, 0x62e, 0x645, 0x207, 0x633, 0x62c, + 0x207, 0x633, 0x62d, 0x207, 0x633, 0x62e, 0x207, 0x633, + 0x645, 0x207, 0x635, 0x62d, 0x207, 0x635, 0x645, 0x207, + 0x636, 0x62c, 0x207, 0x636, 0x62d, 0x207, 0x636, 0x62e, + 0x207, 0x636, 0x645, 0x207, 0x637, 0x62d, 0x207, 0x637, + 0x645, 0x207, 0x638, 0x645, 0x207, 0x639, 0x62c, 0x207, + 0x639, 0x645, 0x207, 0x63a, 0x62c, 0x207, 0x63a, 0x645, + 0x207, 0x641, 0x62c, 0x207, 0x641, 0x62d, 0x207, 0x641, + 0x62e, 0x207, 0x641, 0x645, 0x207, 0x641, 0x649, 0x207, + 0x641, 0x64a, 0x207, 0x642, 0x62d, 0x207, 0x642, 0x645, + 0x207, 0x642, 0x649, 0x207, 0x642, 0x64a, 0x207, 0x643, + 0x627, 0x207, 0x643, 0x62c, 0x207, 0x643, 0x62d, 0x207, + 0x643, 0x62e, 0x207, 0x643, 0x644, 0x207, 0x643, 0x645, + 0x207, 0x643, 0x649, 0x207, 0x643, 0x64a, 0x207, 0x644, + 0x62c, 0x207, 0x644, 0x62d, 0x207, 0x644, 0x62e, 0x207, + 0x644, 0x645, 0x207, 0x644, 0x649, 0x207, 0x644, 0x64a, + 0x207, 0x645, 0x62c, 0x207, 0x645, 0x62d, 0x207, 0x645, + 0x62e, 0x207, 0x645, 0x645, 0x207, 0x645, 0x649, 0x207, + 0x645, 0x64a, 0x207, 0x646, 0x62c, 0x207, 0x646, 0x62d, + 0x207, 0x646, 0x62e, 0x207, 0x646, 0x645, 0x207, 0x646, + 0x649, 0x207, 0x646, 0x64a, 0x207, 0x647, 0x62c, 0x207, + 0x647, 0x645, 0x207, 0x647, 0x649, 0x207, 0x647, 0x64a, + 0x207, 0x64a, 0x62c, 0x207, 0x64a, 0x62d, 0x207, 0x64a, + 0x62e, 0x207, 0x64a, 0x645, 0x207, 0x64a, 0x649, 0x207, + 0x64a, 0x64a, 0x207, 0x630, 0x670, 0x207, 0x631, 0x670, + 0x207, 0x649, 0x670, 0x307, 0x20, 0x64c, 0x651, 0x307, + 0x20, 0x64d, 0x651, 0x307, 0x20, 0x64e, 0x651, 0x307, + 0x20, 0x64f, 0x651, 0x307, 0x20, 0x650, 0x651, 0x307, + 0x20, 0x651, 0x670, 0x206, 0x626, 0x631, 0x206, 0x626, + 0x632, 0x206, 0x626, 0x645, 0x206, 0x626, 0x646, 0x206, + 0x626, 0x649, 0x206, 0x626, 0x64a, 0x206, 0x628, 0x631, + 0x206, 0x628, 0x632, 0x206, 0x628, 0x645, 0x206, 0x628, + 0x646, 0x206, 0x628, 0x649, 0x206, 0x628, 0x64a, 0x206, + 0x62a, 0x631, 0x206, 0x62a, 0x632, 0x206, 0x62a, 0x645, + 0x206, 0x62a, 0x646, 0x206, 0x62a, 0x649, 0x206, 0x62a, + 0x64a, 0x206, 0x62b, 0x631, 0x206, 0x62b, 0x632, 0x206, + 0x62b, 0x645, 0x206, 0x62b, 0x646, 0x206, 0x62b, 0x649, + 0x206, 0x62b, 0x64a, 0x206, 0x641, 0x649, 0x206, 0x641, + 0x64a, 0x206, 0x642, 0x649, 0x206, 0x642, 0x64a, 0x206, + 0x643, 0x627, 0x206, 0x643, 0x644, 0x206, 0x643, 0x645, + 0x206, 0x643, 0x649, 0x206, 0x643, 0x64a, 0x206, 0x644, + 0x645, 0x206, 0x644, 0x649, 0x206, 0x644, 0x64a, 0x206, + 0x645, 0x627, 0x206, 0x645, 0x645, 0x206, 0x646, 0x631, + 0x206, 0x646, 0x632, 0x206, 0x646, 0x645, 0x206, 0x646, + 0x646, 0x206, 0x646, 0x649, 0x206, 0x646, 0x64a, 0x206, + 0x649, 0x670, 0x206, 0x64a, 0x631, 0x206, 0x64a, 0x632, + 0x206, 0x64a, 0x645, 0x206, 0x64a, 0x646, 0x206, 0x64a, + 0x649, 0x206, 0x64a, 0x64a, 0x204, 0x626, 0x62c, 0x204, + 0x626, 0x62d, 0x204, 0x626, 0x62e, 0x204, 0x626, 0x645, + 0x204, 0x626, 0x647, 0x204, 0x628, 0x62c, 0x204, 0x628, + 0x62d, 0x204, 0x628, 0x62e, 0x204, 0x628, 0x645, 0x204, + 0x628, 0x647, 0x204, 0x62a, 0x62c, 0x204, 0x62a, 0x62d, + 0x204, 0x62a, 0x62e, 0x204, 0x62a, 0x645, 0x204, 0x62a, + 0x647, 0x204, 0x62b, 0x645, 0x204, 0x62c, 0x62d, 0x204, + 0x62c, 0x645, 0x204, 0x62d, 0x62c, 0x204, 0x62d, 0x645, + 0x204, 0x62e, 0x62c, 0x204, 0x62e, 0x645, 0x204, 0x633, + 0x62c, 0x204, 0x633, 0x62d, 0x204, 0x633, 0x62e, 0x204, + 0x633, 0x645, 0x204, 0x635, 0x62d, 0x204, 0x635, 0x62e, + 0x204, 0x635, 0x645, 0x204, 0x636, 0x62c, 0x204, 0x636, + 0x62d, 0x204, 0x636, 0x62e, 0x204, 0x636, 0x645, 0x204, + 0x637, 0x62d, 0x204, 0x638, 0x645, 0x204, 0x639, 0x62c, + 0x204, 0x639, 0x645, 0x204, 0x63a, 0x62c, 0x204, 0x63a, + 0x645, 0x204, 0x641, 0x62c, 0x204, 0x641, 0x62d, 0x204, + 0x641, 0x62e, 0x204, 0x641, 0x645, 0x204, 0x642, 0x62d, + 0x204, 0x642, 0x645, 0x204, 0x643, 0x62c, 0x204, 0x643, + 0x62d, 0x204, 0x643, 0x62e, 0x204, 0x643, 0x644, 0x204, + 0x643, 0x645, 0x204, 0x644, 0x62c, 0x204, 0x644, 0x62d, + 0x204, 0x644, 0x62e, 0x204, 0x644, 0x645, 0x204, 0x644, + 0x647, 0x204, 0x645, 0x62c, 0x204, 0x645, 0x62d, 0x204, + 0x645, 0x62e, 0x204, 0x645, 0x645, 0x204, 0x646, 0x62c, + 0x204, 0x646, 0x62d, 0x204, 0x646, 0x62e, 0x204, 0x646, + 0x645, 0x204, 0x646, 0x647, 0x204, 0x647, 0x62c, 0x204, + 0x647, 0x645, 0x204, 0x647, 0x670, 0x204, 0x64a, 0x62c, + 0x204, 0x64a, 0x62d, 0x204, 0x64a, 0x62e, 0x204, 0x64a, + 0x645, 0x204, 0x64a, 0x647, 0x205, 0x626, 0x645, 0x205, + 0x626, 0x647, 0x205, 0x628, 0x645, 0x205, 0x628, 0x647, + 0x205, 0x62a, 0x645, 0x205, 0x62a, 0x647, 0x205, 0x62b, + 0x645, 0x205, 0x62b, 0x647, 0x205, 0x633, 0x645, 0x205, + 0x633, 0x647, 0x205, 0x634, 0x645, 0x205, 0x634, 0x647, + 0x205, 0x643, 0x644, 0x205, 0x643, 0x645, 0x205, 0x644, + 0x645, 0x205, 0x646, 0x645, 0x205, 0x646, 0x647, 0x205, + 0x64a, 0x645, 0x205, 0x64a, 0x647, 0x305, 0x640, 0x64e, + 0x651, 0x305, 0x640, 0x64f, 0x651, 0x305, 0x640, 0x650, + 0x651, 0x207, 0x637, 0x649, 0x207, 0x637, 0x64a, 0x207, + 0x639, 0x649, 0x207, 0x639, 0x64a, 0x207, 0x63a, 0x649, + 0x207, 0x63a, 0x64a, 0x207, 0x633, 0x649, 0x207, 0x633, + 0x64a, 0x207, 0x634, 0x649, 0x207, 0x634, 0x64a, 0x207, + 0x62d, 0x649, 0x207, 0x62d, 0x64a, 0x207, 0x62c, 0x649, + 0x207, 0x62c, 0x64a, 0x207, 0x62e, 0x649, 0x207, 0x62e, + 0x64a, 0x207, 0x635, 0x649, 0x207, 0x635, 0x64a, 0x207, + 0x636, 0x649, 0x207, 0x636, 0x64a, 0x207, 0x634, 0x62c, + 0x207, 0x634, 0x62d, 0x207, 0x634, 0x62e, 0x207, 0x634, + 0x645, 0x207, 0x634, 0x631, 0x207, 0x633, 0x631, 0x207, + 0x635, 0x631, 0x207, 0x636, 0x631, 0x206, 0x637, 0x649, + 0x206, 0x637, 0x64a, 0x206, 0x639, 0x649, 0x206, 0x639, + 0x64a, 0x206, 0x63a, 0x649, 0x206, 0x63a, 0x64a, 0x206, + 0x633, 0x649, 0x206, 0x633, 0x64a, 0x206, 0x634, 0x649, + 0x206, 0x634, 0x64a, 0x206, 0x62d, 0x649, 0x206, 0x62d, + 0x64a, 0x206, 0x62c, 0x649, 0x206, 0x62c, 0x64a, 0x206, + 0x62e, 0x649, 0x206, 0x62e, 0x64a, 0x206, 0x635, 0x649, + 0x206, 0x635, 0x64a, 0x206, 0x636, 0x649, 0x206, 0x636, + 0x64a, 0x206, 0x634, 0x62c, 0x206, 0x634, 0x62d, 0x206, + 0x634, 0x62e, 0x206, 0x634, 0x645, 0x206, 0x634, 0x631, + 0x206, 0x633, 0x631, 0x206, 0x635, 0x631, 0x206, 0x636, + 0x631, 0x204, 0x634, 0x62c, 0x204, 0x634, 0x62d, 0x204, + 0x634, 0x62e, 0x204, 0x634, 0x645, 0x204, 0x633, 0x647, + 0x204, 0x634, 0x647, 0x204, 0x637, 0x645, 0x205, 0x633, + 0x62c, 0x205, 0x633, 0x62d, 0x205, 0x633, 0x62e, 0x205, + 0x634, 0x62c, 0x205, 0x634, 0x62d, 0x205, 0x634, 0x62e, + 0x205, 0x637, 0x645, 0x205, 0x638, 0x645, 0x206, 0x627, + 0x64b, 0x207, 0x627, 0x64b, 0x304, 0x62a, 0x62c, 0x645, + 0x306, 0x62a, 0x62d, 0x62c, 0x304, 0x62a, 0x62d, 0x62c, + 0x304, 0x62a, 0x62d, 0x645, 0x304, 0x62a, 0x62e, 0x645, + 0x304, 0x62a, 0x645, 0x62c, 0x304, 0x62a, 0x645, 0x62d, + 0x304, 0x62a, 0x645, 0x62e, 0x306, 0x62c, 0x645, 0x62d, + 0x304, 0x62c, 0x645, 0x62d, 0x306, 0x62d, 0x645, 0x64a, + 0x306, 0x62d, 0x645, 0x649, 0x304, 0x633, 0x62d, 0x62c, + 0x304, 0x633, 0x62c, 0x62d, 0x306, 0x633, 0x62c, 0x649, + 0x306, 0x633, 0x645, 0x62d, 0x304, 0x633, 0x645, 0x62d, + 0x304, 0x633, 0x645, 0x62c, 0x306, 0x633, 0x645, 0x645, + 0x304, 0x633, 0x645, 0x645, 0x306, 0x635, 0x62d, 0x62d, + 0x304, 0x635, 0x62d, 0x62d, 0x306, 0x635, 0x645, 0x645, + 0x306, 0x634, 0x62d, 0x645, 0x304, 0x634, 0x62d, 0x645, + 0x306, 0x634, 0x62c, 0x64a, 0x306, 0x634, 0x645, 0x62e, + 0x304, 0x634, 0x645, 0x62e, 0x306, 0x634, 0x645, 0x645, + 0x304, 0x634, 0x645, 0x645, 0x306, 0x636, 0x62d, 0x649, + 0x306, 0x636, 0x62e, 0x645, 0x304, 0x636, 0x62e, 0x645, + 0x306, 0x637, 0x645, 0x62d, 0x304, 0x637, 0x645, 0x62d, + 0x304, 0x637, 0x645, 0x645, 0x306, 0x637, 0x645, 0x64a, + 0x306, 0x639, 0x62c, 0x645, 0x306, 0x639, 0x645, 0x645, + 0x304, 0x639, 0x645, 0x645, 0x306, 0x639, 0x645, 0x649, + 0x306, 0x63a, 0x645, 0x645, 0x306, 0x63a, 0x645, 0x64a, + 0x306, 0x63a, 0x645, 0x649, 0x306, 0x641, 0x62e, 0x645, + 0x304, 0x641, 0x62e, 0x645, 0x306, 0x642, 0x645, 0x62d, + 0x306, 0x642, 0x645, 0x645, 0x306, 0x644, 0x62d, 0x645, + 0x306, 0x644, 0x62d, 0x64a, 0x306, 0x644, 0x62d, 0x649, + 0x304, 0x644, 0x62c, 0x62c, 0x306, 0x644, 0x62c, 0x62c, + 0x306, 0x644, 0x62e, 0x645, 0x304, 0x644, 0x62e, 0x645, + 0x306, 0x644, 0x645, 0x62d, 0x304, 0x644, 0x645, 0x62d, + 0x304, 0x645, 0x62d, 0x62c, 0x304, 0x645, 0x62d, 0x645, + 0x306, 0x645, 0x62d, 0x64a, 0x304, 0x645, 0x62c, 0x62d, + 0x304, 0x645, 0x62c, 0x645, 0x304, 0x645, 0x62e, 0x62c, + 0x304, 0x645, 0x62e, 0x645, 0x304, 0x645, 0x62c, 0x62e, + 0x304, 0x647, 0x645, 0x62c, 0x304, 0x647, 0x645, 0x645, + 0x304, 0x646, 0x62d, 0x645, 0x306, 0x646, 0x62d, 0x649, + 0x306, 0x646, 0x62c, 0x645, 0x304, 0x646, 0x62c, 0x645, + 0x306, 0x646, 0x62c, 0x649, 0x306, 0x646, 0x645, 0x64a, + 0x306, 0x646, 0x645, 0x649, 0x306, 0x64a, 0x645, 0x645, + 0x304, 0x64a, 0x645, 0x645, 0x306, 0x628, 0x62e, 0x64a, + 0x306, 0x62a, 0x62c, 0x64a, 0x306, 0x62a, 0x62c, 0x649, + 0x306, 0x62a, 0x62e, 0x64a, 0x306, 0x62a, 0x62e, 0x649, + 0x306, 0x62a, 0x645, 0x64a, 0x306, 0x62a, 0x645, 0x649, + 0x306, 0x62c, 0x645, 0x64a, 0x306, 0x62c, 0x62d, 0x649, + 0x306, 0x62c, 0x645, 0x649, 0x306, 0x633, 0x62e, 0x649, + 0x306, 0x635, 0x62d, 0x64a, 0x306, 0x634, 0x62d, 0x64a, + 0x306, 0x636, 0x62d, 0x64a, 0x306, 0x644, 0x62c, 0x64a, + 0x306, 0x644, 0x645, 0x64a, 0x306, 0x64a, 0x62d, 0x64a, + 0x306, 0x64a, 0x62c, 0x64a, 0x306, 0x64a, 0x645, 0x64a, + 0x306, 0x645, 0x645, 0x64a, 0x306, 0x642, 0x645, 0x64a, + 0x306, 0x646, 0x62d, 0x64a, 0x304, 0x642, 0x645, 0x62d, + 0x304, 0x644, 0x62d, 0x645, 0x306, 0x639, 0x645, 0x64a, + 0x306, 0x643, 0x645, 0x64a, 0x304, 0x646, 0x62c, 0x62d, + 0x306, 0x645, 0x62e, 0x64a, 0x304, 0x644, 0x62c, 0x645, + 0x306, 0x643, 0x645, 0x645, 0x306, 0x644, 0x62c, 0x645, + 0x306, 0x646, 0x62c, 0x62d, 0x306, 0x62c, 0x62d, 0x64a, + 0x306, 0x62d, 0x62c, 0x64a, 0x306, 0x645, 0x62c, 0x64a, + 0x306, 0x641, 0x645, 0x64a, 0x306, 0x628, 0x62d, 0x64a, + 0x304, 0x643, 0x645, 0x645, 0x304, 0x639, 0x62c, 0x645, + 0x304, 0x635, 0x645, 0x645, 0x306, 0x633, 0x62e, 0x64a, + 0x306, 0x646, 0x62c, 0x64a, 0x307, 0x635, 0x644, 0x6d2, + 0x307, 0x642, 0x644, 0x6d2, 0x407, 0x627, 0x644, 0x644, + 0x647, 0x407, 0x627, 0x643, 0x628, 0x631, 0x407, 0x645, + 0x62d, 0x645, 0x62f, 0x407, 0x635, 0x644, 0x639, 0x645, + 0x407, 0x631, 0x633, 0x648, 0x644, 0x407, 0x639, 0x644, + 0x64a, 0x647, 0x407, 0x648, 0x633, 0x644, 0x645, 0x307, + 0x635, 0x644, 0x649, 0x1207, 0x635, 0x644, 0x649, 0x20, + 0x627, 0x644, 0x644, 0x647, 0x20, 0x639, 0x644, 0x64a, + 0x647, 0x20, 0x648, 0x633, 0x644, 0x645, 0x807, 0x62c, + 0x644, 0x20, 0x62c, 0x644, 0x627, 0x644, 0x647, 0x407, + 0x631, 0x6cc, 0x627, 0x644, 0x10b, 0x2c, 0x10b, 0x3001, + 0x10b, 0x3002, 0x10b, 0x3a, 0x10b, 0x3b, 0x10b, 0x21, + 0x10b, 0x3f, 0x10b, 0x3016, 0x10b, 0x3017, 0x10b, 0x2026, + 0x10b, 0x2025, 0x10b, 0x2014, 0x10b, 0x2013, 0x10b, 0x5f, + 0x10b, 0x5f, 0x10b, 0x28, 0x10b, 0x29, 0x10b, 0x7b, + 0x10b, 0x7d, 0x10b, 0x3014, 0x10b, 0x3015, 0x10b, 0x3010, + 0x10b, 0x3011, 0x10b, 0x300a, 0x10b, 0x300b, 0x10b, 0x3008, + 0x10b, 0x3009, 0x10b, 0x300c, 0x10b, 0x300d, 0x10b, 0x300e, + 0x10b, 0x300f, 0x10b, 0x5b, 0x10b, 0x5d, 0x110, 0x203e, + 0x110, 0x203e, 0x110, 0x203e, 0x110, 0x203e, 0x110, 0x5f, + 0x110, 0x5f, 0x110, 0x5f, 0x10e, 0x2c, 0x10e, 0x3001, + 0x10e, 0x2e, 0x10e, 0x3b, 0x10e, 0x3a, 0x10e, 0x3f, + 0x10e, 0x21, 0x10e, 0x2014, 0x10e, 0x28, 0x10e, 0x29, + 0x10e, 0x7b, 0x10e, 0x7d, 0x10e, 0x3014, 0x10e, 0x3015, + 0x10e, 0x23, 0x10e, 0x26, 0x10e, 0x2a, 0x10e, 0x2b, + 0x10e, 0x2d, 0x10e, 0x3c, 0x10e, 0x3e, 0x10e, 0x3d, + 0x10e, 0x5c, 0x10e, 0x24, 0x10e, 0x25, 0x10e, 0x40, + 0x207, 0x20, 0x64b, 0x205, 0x640, 0x64b, 0x207, 0x20, + 0x64c, 0x207, 0x20, 0x64d, 0x207, 0x20, 0x64e, 0x205, + 0x640, 0x64e, 0x207, 0x20, 0x64f, 0x205, 0x640, 0x64f, + 0x207, 0x20, 0x650, 0x205, 0x640, 0x650, 0x207, 0x20, + 0x651, 0x205, 0x640, 0x651, 0x207, 0x20, 0x652, 0x205, + 0x640, 0x652, 0x107, 0x621, 0x107, 0x622, 0x106, 0x622, + 0x107, 0x623, 0x106, 0x623, 0x107, 0x624, 0x106, 0x624, + 0x107, 0x625, 0x106, 0x625, 0x107, 0x626, 0x106, 0x626, + 0x104, 0x626, 0x105, 0x626, 0x107, 0x627, 0x106, 0x627, + 0x107, 0x628, 0x106, 0x628, 0x104, 0x628, 0x105, 0x628, + 0x107, 0x629, 0x106, 0x629, 0x107, 0x62a, 0x106, 0x62a, + 0x104, 0x62a, 0x105, 0x62a, 0x107, 0x62b, 0x106, 0x62b, + 0x104, 0x62b, 0x105, 0x62b, 0x107, 0x62c, 0x106, 0x62c, + 0x104, 0x62c, 0x105, 0x62c, 0x107, 0x62d, 0x106, 0x62d, + 0x104, 0x62d, 0x105, 0x62d, 0x107, 0x62e, 0x106, 0x62e, + 0x104, 0x62e, 0x105, 0x62e, 0x107, 0x62f, 0x106, 0x62f, + 0x107, 0x630, 0x106, 0x630, 0x107, 0x631, 0x106, 0x631, + 0x107, 0x632, 0x106, 0x632, 0x107, 0x633, 0x106, 0x633, + 0x104, 0x633, 0x105, 0x633, 0x107, 0x634, 0x106, 0x634, + 0x104, 0x634, 0x105, 0x634, 0x107, 0x635, 0x106, 0x635, + 0x104, 0x635, 0x105, 0x635, 0x107, 0x636, 0x106, 0x636, + 0x104, 0x636, 0x105, 0x636, 0x107, 0x637, 0x106, 0x637, + 0x104, 0x637, 0x105, 0x637, 0x107, 0x638, 0x106, 0x638, + 0x104, 0x638, 0x105, 0x638, 0x107, 0x639, 0x106, 0x639, + 0x104, 0x639, 0x105, 0x639, 0x107, 0x63a, 0x106, 0x63a, + 0x104, 0x63a, 0x105, 0x63a, 0x107, 0x641, 0x106, 0x641, + 0x104, 0x641, 0x105, 0x641, 0x107, 0x642, 0x106, 0x642, + 0x104, 0x642, 0x105, 0x642, 0x107, 0x643, 0x106, 0x643, + 0x104, 0x643, 0x105, 0x643, 0x107, 0x644, 0x106, 0x644, + 0x104, 0x644, 0x105, 0x644, 0x107, 0x645, 0x106, 0x645, + 0x104, 0x645, 0x105, 0x645, 0x107, 0x646, 0x106, 0x646, + 0x104, 0x646, 0x105, 0x646, 0x107, 0x647, 0x106, 0x647, + 0x104, 0x647, 0x105, 0x647, 0x107, 0x648, 0x106, 0x648, + 0x107, 0x649, 0x106, 0x649, 0x107, 0x64a, 0x106, 0x64a, + 0x104, 0x64a, 0x105, 0x64a, 0x207, 0x644, 0x622, 0x206, + 0x644, 0x622, 0x207, 0x644, 0x623, 0x206, 0x644, 0x623, + 0x207, 0x644, 0x625, 0x206, 0x644, 0x625, 0x207, 0x644, + 0x627, 0x206, 0x644, 0x627, 0x10c, 0x21, 0x10c, 0x22, + 0x10c, 0x23, 0x10c, 0x24, 0x10c, 0x25, 0x10c, 0x26, + 0x10c, 0x27, 0x10c, 0x28, 0x10c, 0x29, 0x10c, 0x2a, + 0x10c, 0x2b, 0x10c, 0x2c, 0x10c, 0x2d, 0x10c, 0x2e, + 0x10c, 0x2f, 0x10c, 0x30, 0x10c, 0x31, 0x10c, 0x32, + 0x10c, 0x33, 0x10c, 0x34, 0x10c, 0x35, 0x10c, 0x36, + 0x10c, 0x37, 0x10c, 0x38, 0x10c, 0x39, 0x10c, 0x3a, + 0x10c, 0x3b, 0x10c, 0x3c, 0x10c, 0x3d, 0x10c, 0x3e, + 0x10c, 0x3f, 0x10c, 0x40, 0x10c, 0x41, 0x10c, 0x42, + 0x10c, 0x43, 0x10c, 0x44, 0x10c, 0x45, 0x10c, 0x46, + 0x10c, 0x47, 0x10c, 0x48, 0x10c, 0x49, 0x10c, 0x4a, + 0x10c, 0x4b, 0x10c, 0x4c, 0x10c, 0x4d, 0x10c, 0x4e, + 0x10c, 0x4f, 0x10c, 0x50, 0x10c, 0x51, 0x10c, 0x52, + 0x10c, 0x53, 0x10c, 0x54, 0x10c, 0x55, 0x10c, 0x56, + 0x10c, 0x57, 0x10c, 0x58, 0x10c, 0x59, 0x10c, 0x5a, + 0x10c, 0x5b, 0x10c, 0x5c, 0x10c, 0x5d, 0x10c, 0x5e, + 0x10c, 0x5f, 0x10c, 0x60, 0x10c, 0x61, 0x10c, 0x62, + 0x10c, 0x63, 0x10c, 0x64, 0x10c, 0x65, 0x10c, 0x66, + 0x10c, 0x67, 0x10c, 0x68, 0x10c, 0x69, 0x10c, 0x6a, + 0x10c, 0x6b, 0x10c, 0x6c, 0x10c, 0x6d, 0x10c, 0x6e, + 0x10c, 0x6f, 0x10c, 0x70, 0x10c, 0x71, 0x10c, 0x72, + 0x10c, 0x73, 0x10c, 0x74, 0x10c, 0x75, 0x10c, 0x76, + 0x10c, 0x77, 0x10c, 0x78, 0x10c, 0x79, 0x10c, 0x7a, + 0x10c, 0x7b, 0x10c, 0x7c, 0x10c, 0x7d, 0x10c, 0x7e, + 0x10c, 0x2985, 0x10c, 0x2986, 0x10d, 0x3002, 0x10d, 0x300c, + 0x10d, 0x300d, 0x10d, 0x3001, 0x10d, 0x30fb, 0x10d, 0x30f2, + 0x10d, 0x30a1, 0x10d, 0x30a3, 0x10d, 0x30a5, 0x10d, 0x30a7, + 0x10d, 0x30a9, 0x10d, 0x30e3, 0x10d, 0x30e5, 0x10d, 0x30e7, + 0x10d, 0x30c3, 0x10d, 0x30fc, 0x10d, 0x30a2, 0x10d, 0x30a4, + 0x10d, 0x30a6, 0x10d, 0x30a8, 0x10d, 0x30aa, 0x10d, 0x30ab, + 0x10d, 0x30ad, 0x10d, 0x30af, 0x10d, 0x30b1, 0x10d, 0x30b3, + 0x10d, 0x30b5, 0x10d, 0x30b7, 0x10d, 0x30b9, 0x10d, 0x30bb, + 0x10d, 0x30bd, 0x10d, 0x30bf, 0x10d, 0x30c1, 0x10d, 0x30c4, + 0x10d, 0x30c6, 0x10d, 0x30c8, 0x10d, 0x30ca, 0x10d, 0x30cb, + 0x10d, 0x30cc, 0x10d, 0x30cd, 0x10d, 0x30ce, 0x10d, 0x30cf, + 0x10d, 0x30d2, 0x10d, 0x30d5, 0x10d, 0x30d8, 0x10d, 0x30db, + 0x10d, 0x30de, 0x10d, 0x30df, 0x10d, 0x30e0, 0x10d, 0x30e1, + 0x10d, 0x30e2, 0x10d, 0x30e4, 0x10d, 0x30e6, 0x10d, 0x30e8, + 0x10d, 0x30e9, 0x10d, 0x30ea, 0x10d, 0x30eb, 0x10d, 0x30ec, + 0x10d, 0x30ed, 0x10d, 0x30ef, 0x10d, 0x30f3, 0x10d, 0x3099, + 0x10d, 0x309a, 0x10d, 0x3164, 0x10d, 0x3131, 0x10d, 0x3132, + 0x10d, 0x3133, 0x10d, 0x3134, 0x10d, 0x3135, 0x10d, 0x3136, + 0x10d, 0x3137, 0x10d, 0x3138, 0x10d, 0x3139, 0x10d, 0x313a, + 0x10d, 0x313b, 0x10d, 0x313c, 0x10d, 0x313d, 0x10d, 0x313e, + 0x10d, 0x313f, 0x10d, 0x3140, 0x10d, 0x3141, 0x10d, 0x3142, + 0x10d, 0x3143, 0x10d, 0x3144, 0x10d, 0x3145, 0x10d, 0x3146, + 0x10d, 0x3147, 0x10d, 0x3148, 0x10d, 0x3149, 0x10d, 0x314a, + 0x10d, 0x314b, 0x10d, 0x314c, 0x10d, 0x314d, 0x10d, 0x314e, + 0x10d, 0x314f, 0x10d, 0x3150, 0x10d, 0x3151, 0x10d, 0x3152, + 0x10d, 0x3153, 0x10d, 0x3154, 0x10d, 0x3155, 0x10d, 0x3156, + 0x10d, 0x3157, 0x10d, 0x3158, 0x10d, 0x3159, 0x10d, 0x315a, + 0x10d, 0x315b, 0x10d, 0x315c, 0x10d, 0x315d, 0x10d, 0x315e, + 0x10d, 0x315f, 0x10d, 0x3160, 0x10d, 0x3161, 0x10d, 0x3162, + 0x10d, 0x3163, 0x10c, 0xa2, 0x10c, 0xa3, 0x10c, 0xac, + 0x10c, 0xaf, 0x10c, 0xa6, 0x10c, 0xa5, 0x10c, 0x20a9, + 0x10d, 0x2502, 0x10d, 0x2190, 0x10d, 0x2191, 0x10d, 0x2192, + 0x10d, 0x2193, 0x10d, 0x25a0, 0x10d, 0x25cb, 0x401, 0xd804, + 0xdc99, 0xd804, 0xdcba, 0x401, 0xd804, 0xdc9b, 0xd804, 0xdcba, + 0x401, 0xd804, 0xdca5, 0xd804, 0xdcba, 0x401, 0xd804, 0xdd31, + 0xd804, 0xdd27, 0x401, 0xd804, 0xdd32, 0xd804, 0xdd27, 0x401, + 0xd804, 0xdf47, 0xd804, 0xdf3e, 0x401, 0xd804, 0xdf47, 0xd804, + 0xdf57, 0x401, 0xd805, 0xdcb9, 0xd805, 0xdcba, 0x401, 0xd805, + 0xdcb9, 0xd805, 0xdcb0, 0x401, 0xd805, 0xdcb9, 0xd805, 0xdcbd, + 0x401, 0xd805, 0xddb8, 0xd805, 0xddaf, 0x401, 0xd805, 0xddb9, + 0xd805, 0xddaf, 0x401, 0xd834, 0xdd57, 0xd834, 0xdd65, 0x401, + 0xd834, 0xdd58, 0xd834, 0xdd65, 0x401, 0xd834, 0xdd5f, 0xd834, + 0xdd6e, 0x401, 0xd834, 0xdd5f, 0xd834, 0xdd6f, 0x401, 0xd834, + 0xdd5f, 0xd834, 0xdd70, 0x401, 0xd834, 0xdd5f, 0xd834, 0xdd71, + 0x401, 0xd834, 0xdd5f, 0xd834, 0xdd72, 0x401, 0xd834, 0xddb9, + 0xd834, 0xdd65, 0x401, 0xd834, 0xddba, 0xd834, 0xdd65, 0x401, + 0xd834, 0xddbb, 0xd834, 0xdd6e, 0x401, 0xd834, 0xddbc, 0xd834, + 0xdd6e, 0x401, 0xd834, 0xddbb, 0xd834, 0xdd6f, 0x401, 0xd834, + 0xddbc, 0xd834, 0xdd6f, 0x102, 0x41, 0x102, 0x42, 0x102, + 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, + 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, + 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, + 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, + 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, + 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, + 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, + 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, + 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, + 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, + 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, + 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, + 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, + 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, + 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, + 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, + 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, + 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, + 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, + 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, + 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x69, 0x102, + 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, 0x6d, 0x102, + 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, 0x71, 0x102, + 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, 0x75, 0x102, + 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, 0x79, 0x102, + 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, 0x43, 0x102, + 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, 0x47, 0x102, + 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, 0x4b, 0x102, + 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, 0x4f, 0x102, + 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, 0x53, 0x102, + 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, 0x57, 0x102, + 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, 0x61, 0x102, + 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, 0x65, 0x102, + 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, 0x69, 0x102, + 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, 0x6d, 0x102, + 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, 0x71, 0x102, + 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, 0x75, 0x102, + 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, 0x79, 0x102, + 0x7a, 0x102, 0x41, 0x102, 0x43, 0x102, 0x44, 0x102, + 0x47, 0x102, 0x4a, 0x102, 0x4b, 0x102, 0x4e, 0x102, + 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x53, 0x102, + 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, 0x57, 0x102, + 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, 0x61, 0x102, + 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, 0x66, 0x102, + 0x68, 0x102, 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, + 0x6c, 0x102, 0x6d, 0x102, 0x6e, 0x102, 0x70, 0x102, + 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, + 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, + 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, + 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, + 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, + 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, + 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, + 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, + 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, + 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, + 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, + 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, + 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, + 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, + 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, + 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, + 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, 0x47, 0x102, + 0x4a, 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, + 0x4e, 0x102, 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, + 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, + 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x61, 0x102, + 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, 0x65, 0x102, + 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, 0x69, 0x102, + 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, 0x6d, 0x102, + 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, 0x71, 0x102, + 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, 0x75, 0x102, + 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, 0x79, 0x102, + 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, 0x44, 0x102, + 0x45, 0x102, 0x46, 0x102, 0x47, 0x102, 0x49, 0x102, + 0x4a, 0x102, 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, + 0x4f, 0x102, 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, + 0x56, 0x102, 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, + 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, + 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, + 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, + 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, + 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, + 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, + 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, + 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, + 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, + 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, + 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, + 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, + 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, + 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, + 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, + 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, + 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, + 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, + 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, + 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, + 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, + 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, + 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, + 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, + 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, + 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, + 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, + 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, + 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, + 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, + 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, + 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, + 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, + 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, + 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, + 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, + 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, + 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, + 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, + 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, + 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, + 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, + 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, + 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, + 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, + 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, + 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, + 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, + 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, + 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, + 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, + 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, + 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, + 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, + 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, + 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, + 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, + 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, + 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, + 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, + 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, + 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, + 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, + 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, + 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, + 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, + 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, + 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, + 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, + 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, + 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, + 0x79, 0x102, 0x7a, 0x102, 0x41, 0x102, 0x42, 0x102, + 0x43, 0x102, 0x44, 0x102, 0x45, 0x102, 0x46, 0x102, + 0x47, 0x102, 0x48, 0x102, 0x49, 0x102, 0x4a, 0x102, + 0x4b, 0x102, 0x4c, 0x102, 0x4d, 0x102, 0x4e, 0x102, + 0x4f, 0x102, 0x50, 0x102, 0x51, 0x102, 0x52, 0x102, + 0x53, 0x102, 0x54, 0x102, 0x55, 0x102, 0x56, 0x102, + 0x57, 0x102, 0x58, 0x102, 0x59, 0x102, 0x5a, 0x102, + 0x61, 0x102, 0x62, 0x102, 0x63, 0x102, 0x64, 0x102, + 0x65, 0x102, 0x66, 0x102, 0x67, 0x102, 0x68, 0x102, + 0x69, 0x102, 0x6a, 0x102, 0x6b, 0x102, 0x6c, 0x102, + 0x6d, 0x102, 0x6e, 0x102, 0x6f, 0x102, 0x70, 0x102, + 0x71, 0x102, 0x72, 0x102, 0x73, 0x102, 0x74, 0x102, + 0x75, 0x102, 0x76, 0x102, 0x77, 0x102, 0x78, 0x102, + 0x79, 0x102, 0x7a, 0x102, 0x131, 0x102, 0x237, 0x102, + 0x391, 0x102, 0x392, 0x102, 0x393, 0x102, 0x394, 0x102, + 0x395, 0x102, 0x396, 0x102, 0x397, 0x102, 0x398, 0x102, + 0x399, 0x102, 0x39a, 0x102, 0x39b, 0x102, 0x39c, 0x102, + 0x39d, 0x102, 0x39e, 0x102, 0x39f, 0x102, 0x3a0, 0x102, + 0x3a1, 0x102, 0x3f4, 0x102, 0x3a3, 0x102, 0x3a4, 0x102, + 0x3a5, 0x102, 0x3a6, 0x102, 0x3a7, 0x102, 0x3a8, 0x102, + 0x3a9, 0x102, 0x2207, 0x102, 0x3b1, 0x102, 0x3b2, 0x102, + 0x3b3, 0x102, 0x3b4, 0x102, 0x3b5, 0x102, 0x3b6, 0x102, + 0x3b7, 0x102, 0x3b8, 0x102, 0x3b9, 0x102, 0x3ba, 0x102, + 0x3bb, 0x102, 0x3bc, 0x102, 0x3bd, 0x102, 0x3be, 0x102, + 0x3bf, 0x102, 0x3c0, 0x102, 0x3c1, 0x102, 0x3c2, 0x102, + 0x3c3, 0x102, 0x3c4, 0x102, 0x3c5, 0x102, 0x3c6, 0x102, + 0x3c7, 0x102, 0x3c8, 0x102, 0x3c9, 0x102, 0x2202, 0x102, + 0x3f5, 0x102, 0x3d1, 0x102, 0x3f0, 0x102, 0x3d5, 0x102, + 0x3f1, 0x102, 0x3d6, 0x102, 0x391, 0x102, 0x392, 0x102, + 0x393, 0x102, 0x394, 0x102, 0x395, 0x102, 0x396, 0x102, + 0x397, 0x102, 0x398, 0x102, 0x399, 0x102, 0x39a, 0x102, + 0x39b, 0x102, 0x39c, 0x102, 0x39d, 0x102, 0x39e, 0x102, + 0x39f, 0x102, 0x3a0, 0x102, 0x3a1, 0x102, 0x3f4, 0x102, + 0x3a3, 0x102, 0x3a4, 0x102, 0x3a5, 0x102, 0x3a6, 0x102, + 0x3a7, 0x102, 0x3a8, 0x102, 0x3a9, 0x102, 0x2207, 0x102, + 0x3b1, 0x102, 0x3b2, 0x102, 0x3b3, 0x102, 0x3b4, 0x102, + 0x3b5, 0x102, 0x3b6, 0x102, 0x3b7, 0x102, 0x3b8, 0x102, + 0x3b9, 0x102, 0x3ba, 0x102, 0x3bb, 0x102, 0x3bc, 0x102, + 0x3bd, 0x102, 0x3be, 0x102, 0x3bf, 0x102, 0x3c0, 0x102, + 0x3c1, 0x102, 0x3c2, 0x102, 0x3c3, 0x102, 0x3c4, 0x102, + 0x3c5, 0x102, 0x3c6, 0x102, 0x3c7, 0x102, 0x3c8, 0x102, + 0x3c9, 0x102, 0x2202, 0x102, 0x3f5, 0x102, 0x3d1, 0x102, + 0x3f0, 0x102, 0x3d5, 0x102, 0x3f1, 0x102, 0x3d6, 0x102, + 0x391, 0x102, 0x392, 0x102, 0x393, 0x102, 0x394, 0x102, + 0x395, 0x102, 0x396, 0x102, 0x397, 0x102, 0x398, 0x102, + 0x399, 0x102, 0x39a, 0x102, 0x39b, 0x102, 0x39c, 0x102, + 0x39d, 0x102, 0x39e, 0x102, 0x39f, 0x102, 0x3a0, 0x102, + 0x3a1, 0x102, 0x3f4, 0x102, 0x3a3, 0x102, 0x3a4, 0x102, + 0x3a5, 0x102, 0x3a6, 0x102, 0x3a7, 0x102, 0x3a8, 0x102, + 0x3a9, 0x102, 0x2207, 0x102, 0x3b1, 0x102, 0x3b2, 0x102, + 0x3b3, 0x102, 0x3b4, 0x102, 0x3b5, 0x102, 0x3b6, 0x102, + 0x3b7, 0x102, 0x3b8, 0x102, 0x3b9, 0x102, 0x3ba, 0x102, + 0x3bb, 0x102, 0x3bc, 0x102, 0x3bd, 0x102, 0x3be, 0x102, + 0x3bf, 0x102, 0x3c0, 0x102, 0x3c1, 0x102, 0x3c2, 0x102, + 0x3c3, 0x102, 0x3c4, 0x102, 0x3c5, 0x102, 0x3c6, 0x102, + 0x3c7, 0x102, 0x3c8, 0x102, 0x3c9, 0x102, 0x2202, 0x102, + 0x3f5, 0x102, 0x3d1, 0x102, 0x3f0, 0x102, 0x3d5, 0x102, + 0x3f1, 0x102, 0x3d6, 0x102, 0x391, 0x102, 0x392, 0x102, + 0x393, 0x102, 0x394, 0x102, 0x395, 0x102, 0x396, 0x102, + 0x397, 0x102, 0x398, 0x102, 0x399, 0x102, 0x39a, 0x102, + 0x39b, 0x102, 0x39c, 0x102, 0x39d, 0x102, 0x39e, 0x102, + 0x39f, 0x102, 0x3a0, 0x102, 0x3a1, 0x102, 0x3f4, 0x102, + 0x3a3, 0x102, 0x3a4, 0x102, 0x3a5, 0x102, 0x3a6, 0x102, + 0x3a7, 0x102, 0x3a8, 0x102, 0x3a9, 0x102, 0x2207, 0x102, + 0x3b1, 0x102, 0x3b2, 0x102, 0x3b3, 0x102, 0x3b4, 0x102, + 0x3b5, 0x102, 0x3b6, 0x102, 0x3b7, 0x102, 0x3b8, 0x102, + 0x3b9, 0x102, 0x3ba, 0x102, 0x3bb, 0x102, 0x3bc, 0x102, + 0x3bd, 0x102, 0x3be, 0x102, 0x3bf, 0x102, 0x3c0, 0x102, + 0x3c1, 0x102, 0x3c2, 0x102, 0x3c3, 0x102, 0x3c4, 0x102, + 0x3c5, 0x102, 0x3c6, 0x102, 0x3c7, 0x102, 0x3c8, 0x102, + 0x3c9, 0x102, 0x2202, 0x102, 0x3f5, 0x102, 0x3d1, 0x102, + 0x3f0, 0x102, 0x3d5, 0x102, 0x3f1, 0x102, 0x3d6, 0x102, + 0x391, 0x102, 0x392, 0x102, 0x393, 0x102, 0x394, 0x102, + 0x395, 0x102, 0x396, 0x102, 0x397, 0x102, 0x398, 0x102, + 0x399, 0x102, 0x39a, 0x102, 0x39b, 0x102, 0x39c, 0x102, + 0x39d, 0x102, 0x39e, 0x102, 0x39f, 0x102, 0x3a0, 0x102, + 0x3a1, 0x102, 0x3f4, 0x102, 0x3a3, 0x102, 0x3a4, 0x102, + 0x3a5, 0x102, 0x3a6, 0x102, 0x3a7, 0x102, 0x3a8, 0x102, + 0x3a9, 0x102, 0x2207, 0x102, 0x3b1, 0x102, 0x3b2, 0x102, + 0x3b3, 0x102, 0x3b4, 0x102, 0x3b5, 0x102, 0x3b6, 0x102, + 0x3b7, 0x102, 0x3b8, 0x102, 0x3b9, 0x102, 0x3ba, 0x102, + 0x3bb, 0x102, 0x3bc, 0x102, 0x3bd, 0x102, 0x3be, 0x102, + 0x3bf, 0x102, 0x3c0, 0x102, 0x3c1, 0x102, 0x3c2, 0x102, + 0x3c3, 0x102, 0x3c4, 0x102, 0x3c5, 0x102, 0x3c6, 0x102, + 0x3c7, 0x102, 0x3c8, 0x102, 0x3c9, 0x102, 0x2202, 0x102, + 0x3f5, 0x102, 0x3d1, 0x102, 0x3f0, 0x102, 0x3d5, 0x102, + 0x3f1, 0x102, 0x3d6, 0x102, 0x3dc, 0x102, 0x3dd, 0x102, + 0x30, 0x102, 0x31, 0x102, 0x32, 0x102, 0x33, 0x102, + 0x34, 0x102, 0x35, 0x102, 0x36, 0x102, 0x37, 0x102, + 0x38, 0x102, 0x39, 0x102, 0x30, 0x102, 0x31, 0x102, + 0x32, 0x102, 0x33, 0x102, 0x34, 0x102, 0x35, 0x102, + 0x36, 0x102, 0x37, 0x102, 0x38, 0x102, 0x39, 0x102, + 0x30, 0x102, 0x31, 0x102, 0x32, 0x102, 0x33, 0x102, + 0x34, 0x102, 0x35, 0x102, 0x36, 0x102, 0x37, 0x102, + 0x38, 0x102, 0x39, 0x102, 0x30, 0x102, 0x31, 0x102, + 0x32, 0x102, 0x33, 0x102, 0x34, 0x102, 0x35, 0x102, + 0x36, 0x102, 0x37, 0x102, 0x38, 0x102, 0x39, 0x102, + 0x30, 0x102, 0x31, 0x102, 0x32, 0x102, 0x33, 0x102, + 0x34, 0x102, 0x35, 0x102, 0x36, 0x102, 0x37, 0x102, + 0x38, 0x102, 0x39, 0x102, 0x627, 0x102, 0x628, 0x102, + 0x62c, 0x102, 0x62f, 0x102, 0x648, 0x102, 0x632, 0x102, + 0x62d, 0x102, 0x637, 0x102, 0x64a, 0x102, 0x643, 0x102, + 0x644, 0x102, 0x645, 0x102, 0x646, 0x102, 0x633, 0x102, + 0x639, 0x102, 0x641, 0x102, 0x635, 0x102, 0x642, 0x102, + 0x631, 0x102, 0x634, 0x102, 0x62a, 0x102, 0x62b, 0x102, + 0x62e, 0x102, 0x630, 0x102, 0x636, 0x102, 0x638, 0x102, + 0x63a, 0x102, 0x66e, 0x102, 0x6ba, 0x102, 0x6a1, 0x102, + 0x66f, 0x102, 0x628, 0x102, 0x62c, 0x102, 0x647, 0x102, + 0x62d, 0x102, 0x64a, 0x102, 0x643, 0x102, 0x644, 0x102, + 0x645, 0x102, 0x646, 0x102, 0x633, 0x102, 0x639, 0x102, + 0x641, 0x102, 0x635, 0x102, 0x642, 0x102, 0x634, 0x102, + 0x62a, 0x102, 0x62b, 0x102, 0x62e, 0x102, 0x636, 0x102, + 0x63a, 0x102, 0x62c, 0x102, 0x62d, 0x102, 0x64a, 0x102, + 0x644, 0x102, 0x646, 0x102, 0x633, 0x102, 0x639, 0x102, + 0x635, 0x102, 0x642, 0x102, 0x634, 0x102, 0x62e, 0x102, + 0x636, 0x102, 0x63a, 0x102, 0x6ba, 0x102, 0x66f, 0x102, + 0x628, 0x102, 0x62c, 0x102, 0x647, 0x102, 0x62d, 0x102, + 0x637, 0x102, 0x64a, 0x102, 0x643, 0x102, 0x645, 0x102, + 0x646, 0x102, 0x633, 0x102, 0x639, 0x102, 0x641, 0x102, + 0x635, 0x102, 0x642, 0x102, 0x634, 0x102, 0x62a, 0x102, + 0x62b, 0x102, 0x62e, 0x102, 0x636, 0x102, 0x638, 0x102, + 0x63a, 0x102, 0x66e, 0x102, 0x6a1, 0x102, 0x627, 0x102, + 0x628, 0x102, 0x62c, 0x102, 0x62f, 0x102, 0x647, 0x102, + 0x648, 0x102, 0x632, 0x102, 0x62d, 0x102, 0x637, 0x102, + 0x64a, 0x102, 0x644, 0x102, 0x645, 0x102, 0x646, 0x102, + 0x633, 0x102, 0x639, 0x102, 0x641, 0x102, 0x635, 0x102, + 0x642, 0x102, 0x631, 0x102, 0x634, 0x102, 0x62a, 0x102, + 0x62b, 0x102, 0x62e, 0x102, 0x630, 0x102, 0x636, 0x102, + 0x638, 0x102, 0x63a, 0x102, 0x628, 0x102, 0x62c, 0x102, + 0x62f, 0x102, 0x648, 0x102, 0x632, 0x102, 0x62d, 0x102, + 0x637, 0x102, 0x64a, 0x102, 0x644, 0x102, 0x645, 0x102, + 0x646, 0x102, 0x633, 0x102, 0x639, 0x102, 0x641, 0x102, + 0x635, 0x102, 0x642, 0x102, 0x631, 0x102, 0x634, 0x102, + 0x62a, 0x102, 0x62b, 0x102, 0x62e, 0x102, 0x630, 0x102, + 0x636, 0x102, 0x638, 0x102, 0x63a, 0x210, 0x30, 0x2e, + 0x210, 0x30, 0x2c, 0x210, 0x31, 0x2c, 0x210, 0x32, + 0x2c, 0x210, 0x33, 0x2c, 0x210, 0x34, 0x2c, 0x210, + 0x35, 0x2c, 0x210, 0x36, 0x2c, 0x210, 0x37, 0x2c, + 0x210, 0x38, 0x2c, 0x210, 0x39, 0x2c, 0x310, 0x28, + 0x41, 0x29, 0x310, 0x28, 0x42, 0x29, 0x310, 0x28, + 0x43, 0x29, 0x310, 0x28, 0x44, 0x29, 0x310, 0x28, + 0x45, 0x29, 0x310, 0x28, 0x46, 0x29, 0x310, 0x28, + 0x47, 0x29, 0x310, 0x28, 0x48, 0x29, 0x310, 0x28, + 0x49, 0x29, 0x310, 0x28, 0x4a, 0x29, 0x310, 0x28, + 0x4b, 0x29, 0x310, 0x28, 0x4c, 0x29, 0x310, 0x28, + 0x4d, 0x29, 0x310, 0x28, 0x4e, 0x29, 0x310, 0x28, + 0x4f, 0x29, 0x310, 0x28, 0x50, 0x29, 0x310, 0x28, + 0x51, 0x29, 0x310, 0x28, 0x52, 0x29, 0x310, 0x28, + 0x53, 0x29, 0x310, 0x28, 0x54, 0x29, 0x310, 0x28, + 0x55, 0x29, 0x310, 0x28, 0x56, 0x29, 0x310, 0x28, + 0x57, 0x29, 0x310, 0x28, 0x58, 0x29, 0x310, 0x28, + 0x59, 0x29, 0x310, 0x28, 0x5a, 0x29, 0x310, 0x3014, + 0x53, 0x3015, 0x108, 0x43, 0x108, 0x52, 0x208, 0x43, + 0x44, 0x208, 0x57, 0x5a, 0x10f, 0x41, 0x10f, 0x42, + 0x10f, 0x43, 0x10f, 0x44, 0x10f, 0x45, 0x10f, 0x46, + 0x10f, 0x47, 0x10f, 0x48, 0x10f, 0x49, 0x10f, 0x4a, + 0x10f, 0x4b, 0x10f, 0x4c, 0x10f, 0x4d, 0x10f, 0x4e, + 0x10f, 0x4f, 0x10f, 0x50, 0x10f, 0x51, 0x10f, 0x52, + 0x10f, 0x53, 0x10f, 0x54, 0x10f, 0x55, 0x10f, 0x56, + 0x10f, 0x57, 0x10f, 0x58, 0x10f, 0x59, 0x10f, 0x5a, + 0x20f, 0x48, 0x56, 0x20f, 0x4d, 0x56, 0x20f, 0x53, + 0x44, 0x20f, 0x53, 0x53, 0x30f, 0x50, 0x50, 0x56, + 0x20f, 0x57, 0x43, 0x209, 0x4d, 0x43, 0x209, 0x4d, + 0x44, 0x20f, 0x44, 0x4a, 0x20f, 0x307b, 0x304b, 0x20f, + 0x30b3, 0x30b3, 0x10f, 0x30b5, 0x10f, 0x624b, 0x10f, 0x5b57, + 0x10f, 0x53cc, 0x10f, 0x30c7, 0x10f, 0x4e8c, 0x10f, 0x591a, + 0x10f, 0x89e3, 0x10f, 0x5929, 0x10f, 0x4ea4, 0x10f, 0x6620, + 0x10f, 0x7121, 0x10f, 0x6599, 0x10f, 0x524d, 0x10f, 0x5f8c, + 0x10f, 0x518d, 0x10f, 0x65b0, 0x10f, 0x521d, 0x10f, 0x7d42, + 0x10f, 0x751f, 0x10f, 0x8ca9, 0x10f, 0x58f0, 0x10f, 0x5439, + 0x10f, 0x6f14, 0x10f, 0x6295, 0x10f, 0x6355, 0x10f, 0x4e00, + 0x10f, 0x4e09, 0x10f, 0x904a, 0x10f, 0x5de6, 0x10f, 0x4e2d, + 0x10f, 0x53f3, 0x10f, 0x6307, 0x10f, 0x8d70, 0x10f, 0x6253, + 0x10f, 0x7981, 0x10f, 0x7a7a, 0x10f, 0x5408, 0x10f, 0x6e80, + 0x10f, 0x6709, 0x10f, 0x6708, 0x10f, 0x7533, 0x10f, 0x5272, + 0x10f, 0x55b6, 0x310, 0x3014, 0x672c, 0x3015, 0x310, 0x3014, + 0x4e09, 0x3015, 0x310, 0x3014, 0x4e8c, 0x3015, 0x310, 0x3014, + 0x5b89, 0x3015, 0x310, 0x3014, 0x70b9, 0x3015, 0x310, 0x3014, + 0x6253, 0x3015, 0x310, 0x3014, 0x76d7, 0x3015, 0x310, 0x3014, + 0x52dd, 0x3015, 0x310, 0x3014, 0x6557, 0x3015, 0x108, 0x5f97, + 0x108, 0x53ef, 0x101, 0x4e3d, 0x101, 0x4e38, 0x101, 0x4e41, + 0x201, 0xd840, 0xdd22, 0x101, 0x4f60, 0x101, 0x4fae, 0x101, + 0x4fbb, 0x101, 0x5002, 0x101, 0x507a, 0x101, 0x5099, 0x101, + 0x50e7, 0x101, 0x50cf, 0x101, 0x349e, 0x201, 0xd841, 0xde3a, + 0x101, 0x514d, 0x101, 0x5154, 0x101, 0x5164, 0x101, 0x5177, + 0x201, 0xd841, 0xdd1c, 0x101, 0x34b9, 0x101, 0x5167, 0x101, + 0x518d, 0x201, 0xd841, 0xdd4b, 0x101, 0x5197, 0x101, 0x51a4, + 0x101, 0x4ecc, 0x101, 0x51ac, 0x101, 0x51b5, 0x201, 0xd864, + 0xdddf, 0x101, 0x51f5, 0x101, 0x5203, 0x101, 0x34df, 0x101, + 0x523b, 0x101, 0x5246, 0x101, 0x5272, 0x101, 0x5277, 0x101, + 0x3515, 0x101, 0x52c7, 0x101, 0x52c9, 0x101, 0x52e4, 0x101, + 0x52fa, 0x101, 0x5305, 0x101, 0x5306, 0x101, 0x5317, 0x101, + 0x5349, 0x101, 0x5351, 0x101, 0x535a, 0x101, 0x5373, 0x101, + 0x537d, 0x101, 0x537f, 0x101, 0x537f, 0x101, 0x537f, 0x201, + 0xd842, 0xde2c, 0x101, 0x7070, 0x101, 0x53ca, 0x101, 0x53df, + 0x201, 0xd842, 0xdf63, 0x101, 0x53eb, 0x101, 0x53f1, 0x101, + 0x5406, 0x101, 0x549e, 0x101, 0x5438, 0x101, 0x5448, 0x101, + 0x5468, 0x101, 0x54a2, 0x101, 0x54f6, 0x101, 0x5510, 0x101, + 0x5553, 0x101, 0x5563, 0x101, 0x5584, 0x101, 0x5584, 0x101, + 0x5599, 0x101, 0x55ab, 0x101, 0x55b3, 0x101, 0x55c2, 0x101, + 0x5716, 0x101, 0x5606, 0x101, 0x5717, 0x101, 0x5651, 0x101, + 0x5674, 0x101, 0x5207, 0x101, 0x58ee, 0x101, 0x57ce, 0x101, + 0x57f4, 0x101, 0x580d, 0x101, 0x578b, 0x101, 0x5832, 0x101, + 0x5831, 0x101, 0x58ac, 0x201, 0xd845, 0xdce4, 0x101, 0x58f2, + 0x101, 0x58f7, 0x101, 0x5906, 0x101, 0x591a, 0x101, 0x5922, + 0x101, 0x5962, 0x201, 0xd845, 0xdea8, 0x201, 0xd845, 0xdeea, + 0x101, 0x59ec, 0x101, 0x5a1b, 0x101, 0x5a27, 0x101, 0x59d8, + 0x101, 0x5a66, 0x101, 0x36ee, 0x101, 0x36fc, 0x101, 0x5b08, + 0x101, 0x5b3e, 0x101, 0x5b3e, 0x201, 0xd846, 0xddc8, 0x101, + 0x5bc3, 0x101, 0x5bd8, 0x101, 0x5be7, 0x101, 0x5bf3, 0x201, + 0xd846, 0xdf18, 0x101, 0x5bff, 0x101, 0x5c06, 0x101, 0x5f53, + 0x101, 0x5c22, 0x101, 0x3781, 0x101, 0x5c60, 0x101, 0x5c6e, + 0x101, 0x5cc0, 0x101, 0x5c8d, 0x201, 0xd847, 0xdde4, 0x101, + 0x5d43, 0x201, 0xd847, 0xdde6, 0x101, 0x5d6e, 0x101, 0x5d6b, + 0x101, 0x5d7c, 0x101, 0x5de1, 0x101, 0x5de2, 0x101, 0x382f, + 0x101, 0x5dfd, 0x101, 0x5e28, 0x101, 0x5e3d, 0x101, 0x5e69, + 0x101, 0x3862, 0x201, 0xd848, 0xdd83, 0x101, 0x387c, 0x101, + 0x5eb0, 0x101, 0x5eb3, 0x101, 0x5eb6, 0x101, 0x5eca, 0x201, + 0xd868, 0xdf92, 0x101, 0x5efe, 0x201, 0xd848, 0xdf31, 0x201, + 0xd848, 0xdf31, 0x101, 0x8201, 0x101, 0x5f22, 0x101, 0x5f22, + 0x101, 0x38c7, 0x201, 0xd84c, 0xdeb8, 0x201, 0xd858, 0xddda, + 0x101, 0x5f62, 0x101, 0x5f6b, 0x101, 0x38e3, 0x101, 0x5f9a, + 0x101, 0x5fcd, 0x101, 0x5fd7, 0x101, 0x5ff9, 0x101, 0x6081, + 0x101, 0x393a, 0x101, 0x391c, 0x101, 0x6094, 0x201, 0xd849, + 0xded4, 0x101, 0x60c7, 0x101, 0x6148, 0x101, 0x614c, 0x101, + 0x614e, 0x101, 0x614c, 0x101, 0x617a, 0x101, 0x618e, 0x101, + 0x61b2, 0x101, 0x61a4, 0x101, 0x61af, 0x101, 0x61de, 0x101, + 0x61f2, 0x101, 0x61f6, 0x101, 0x6210, 0x101, 0x621b, 0x101, + 0x625d, 0x101, 0x62b1, 0x101, 0x62d4, 0x101, 0x6350, 0x201, + 0xd84a, 0xdf0c, 0x101, 0x633d, 0x101, 0x62fc, 0x101, 0x6368, + 0x101, 0x6383, 0x101, 0x63e4, 0x201, 0xd84a, 0xdff1, 0x101, + 0x6422, 0x101, 0x63c5, 0x101, 0x63a9, 0x101, 0x3a2e, 0x101, + 0x6469, 0x101, 0x647e, 0x101, 0x649d, 0x101, 0x6477, 0x101, + 0x3a6c, 0x101, 0x654f, 0x101, 0x656c, 0x201, 0xd84c, 0xdc0a, + 0x101, 0x65e3, 0x101, 0x66f8, 0x101, 0x6649, 0x101, 0x3b19, + 0x101, 0x6691, 0x101, 0x3b08, 0x101, 0x3ae4, 0x101, 0x5192, + 0x101, 0x5195, 0x101, 0x6700, 0x101, 0x669c, 0x101, 0x80ad, + 0x101, 0x43d9, 0x101, 0x6717, 0x101, 0x671b, 0x101, 0x6721, + 0x101, 0x675e, 0x101, 0x6753, 0x201, 0xd84c, 0xdfc3, 0x101, + 0x3b49, 0x101, 0x67fa, 0x101, 0x6785, 0x101, 0x6852, 0x101, + 0x6885, 0x201, 0xd84d, 0xdc6d, 0x101, 0x688e, 0x101, 0x681f, + 0x101, 0x6914, 0x101, 0x3b9d, 0x101, 0x6942, 0x101, 0x69a3, + 0x101, 0x69ea, 0x101, 0x6aa8, 0x201, 0xd84d, 0xdea3, 0x101, + 0x6adb, 0x101, 0x3c18, 0x101, 0x6b21, 0x201, 0xd84e, 0xdca7, + 0x101, 0x6b54, 0x101, 0x3c4e, 0x101, 0x6b72, 0x101, 0x6b9f, + 0x101, 0x6bba, 0x101, 0x6bbb, 0x201, 0xd84e, 0xde8d, 0x201, + 0xd847, 0xdd0b, 0x201, 0xd84e, 0xdefa, 0x101, 0x6c4e, 0x201, + 0xd84f, 0xdcbc, 0x101, 0x6cbf, 0x101, 0x6ccd, 0x101, 0x6c67, + 0x101, 0x6d16, 0x101, 0x6d3e, 0x101, 0x6d77, 0x101, 0x6d41, + 0x101, 0x6d69, 0x101, 0x6d78, 0x101, 0x6d85, 0x201, 0xd84f, + 0xdd1e, 0x101, 0x6d34, 0x101, 0x6e2f, 0x101, 0x6e6e, 0x101, + 0x3d33, 0x101, 0x6ecb, 0x101, 0x6ec7, 0x201, 0xd84f, 0xded1, + 0x101, 0x6df9, 0x101, 0x6f6e, 0x201, 0xd84f, 0xdf5e, 0x201, + 0xd84f, 0xdf8e, 0x101, 0x6fc6, 0x101, 0x7039, 0x101, 0x701e, + 0x101, 0x701b, 0x101, 0x3d96, 0x101, 0x704a, 0x101, 0x707d, + 0x101, 0x7077, 0x101, 0x70ad, 0x201, 0xd841, 0xdd25, 0x101, + 0x7145, 0x201, 0xd850, 0xde63, 0x101, 0x719c, 0x201, 0xd850, + 0xdfab, 0x101, 0x7228, 0x101, 0x7235, 0x101, 0x7250, 0x201, + 0xd851, 0xde08, 0x101, 0x7280, 0x101, 0x7295, 0x201, 0xd851, + 0xdf35, 0x201, 0xd852, 0xdc14, 0x101, 0x737a, 0x101, 0x738b, + 0x101, 0x3eac, 0x101, 0x73a5, 0x101, 0x3eb8, 0x101, 0x3eb8, + 0x101, 0x7447, 0x101, 0x745c, 0x101, 0x7471, 0x101, 0x7485, + 0x101, 0x74ca, 0x101, 0x3f1b, 0x101, 0x7524, 0x201, 0xd853, + 0xdc36, 0x101, 0x753e, 0x201, 0xd853, 0xdc92, 0x101, 0x7570, + 0x201, 0xd848, 0xdd9f, 0x101, 0x7610, 0x201, 0xd853, 0xdfa1, + 0x201, 0xd853, 0xdfb8, 0x201, 0xd854, 0xdc44, 0x101, 0x3ffc, + 0x101, 0x4008, 0x101, 0x76f4, 0x201, 0xd854, 0xdcf3, 0x201, + 0xd854, 0xdcf2, 0x201, 0xd854, 0xdd19, 0x201, 0xd854, 0xdd33, + 0x101, 0x771e, 0x101, 0x771f, 0x101, 0x771f, 0x101, 0x774a, + 0x101, 0x4039, 0x101, 0x778b, 0x101, 0x4046, 0x101, 0x4096, + 0x201, 0xd855, 0xdc1d, 0x101, 0x784e, 0x101, 0x788c, 0x101, + 0x78cc, 0x101, 0x40e3, 0x201, 0xd855, 0xde26, 0x101, 0x7956, + 0x201, 0xd855, 0xde9a, 0x201, 0xd855, 0xdec5, 0x101, 0x798f, + 0x101, 0x79eb, 0x101, 0x412f, 0x101, 0x7a40, 0x101, 0x7a4a, + 0x101, 0x7a4f, 0x201, 0xd856, 0xdd7c, 0x201, 0xd856, 0xdea7, + 0x201, 0xd856, 0xdea7, 0x101, 0x7aee, 0x101, 0x4202, 0x201, + 0xd856, 0xdfab, 0x101, 0x7bc6, 0x101, 0x7bc9, 0x101, 0x4227, + 0x201, 0xd857, 0xdc80, 0x101, 0x7cd2, 0x101, 0x42a0, 0x101, + 0x7ce8, 0x101, 0x7ce3, 0x101, 0x7d00, 0x201, 0xd857, 0xdf86, + 0x101, 0x7d63, 0x101, 0x4301, 0x101, 0x7dc7, 0x101, 0x7e02, + 0x101, 0x7e45, 0x101, 0x4334, 0x201, 0xd858, 0xde28, 0x201, + 0xd858, 0xde47, 0x101, 0x4359, 0x201, 0xd858, 0xded9, 0x101, + 0x7f7a, 0x201, 0xd858, 0xdf3e, 0x101, 0x7f95, 0x101, 0x7ffa, + 0x101, 0x8005, 0x201, 0xd859, 0xdcda, 0x201, 0xd859, 0xdd23, + 0x101, 0x8060, 0x201, 0xd859, 0xdda8, 0x101, 0x8070, 0x201, + 0xd84c, 0xdf5f, 0x101, 0x43d5, 0x101, 0x80b2, 0x101, 0x8103, + 0x101, 0x440b, 0x101, 0x813e, 0x101, 0x5ab5, 0x201, 0xd859, + 0xdfa7, 0x201, 0xd859, 0xdfb5, 0x201, 0xd84c, 0xdf93, 0x201, + 0xd84c, 0xdf9c, 0x101, 0x8201, 0x101, 0x8204, 0x101, 0x8f9e, + 0x101, 0x446b, 0x101, 0x8291, 0x101, 0x828b, 0x101, 0x829d, + 0x101, 0x52b3, 0x101, 0x82b1, 0x101, 0x82b3, 0x101, 0x82bd, + 0x101, 0x82e6, 0x201, 0xd85a, 0xdf3c, 0x101, 0x82e5, 0x101, + 0x831d, 0x101, 0x8363, 0x101, 0x83ad, 0x101, 0x8323, 0x101, + 0x83bd, 0x101, 0x83e7, 0x101, 0x8457, 0x101, 0x8353, 0x101, + 0x83ca, 0x101, 0x83cc, 0x101, 0x83dc, 0x201, 0xd85b, 0xdc36, + 0x201, 0xd85b, 0xdd6b, 0x201, 0xd85b, 0xdcd5, 0x101, 0x452b, + 0x101, 0x84f1, 0x101, 0x84f3, 0x101, 0x8516, 0x201, 0xd85c, + 0xdfca, 0x101, 0x8564, 0x201, 0xd85b, 0xdf2c, 0x101, 0x455d, + 0x101, 0x4561, 0x201, 0xd85b, 0xdfb1, 0x201, 0xd85c, 0xdcd2, + 0x101, 0x456b, 0x101, 0x8650, 0x101, 0x865c, 0x101, 0x8667, + 0x101, 0x8669, 0x101, 0x86a9, 0x101, 0x8688, 0x101, 0x870e, + 0x101, 0x86e2, 0x101, 0x8779, 0x101, 0x8728, 0x101, 0x876b, + 0x101, 0x8786, 0x101, 0x45d7, 0x101, 0x87e1, 0x101, 0x8801, + 0x101, 0x45f9, 0x101, 0x8860, 0x101, 0x8863, 0x201, 0xd85d, + 0xde67, 0x101, 0x88d7, 0x101, 0x88de, 0x101, 0x4635, 0x101, + 0x88fa, 0x101, 0x34bb, 0x201, 0xd85e, 0xdcae, 0x201, 0xd85e, + 0xdd66, 0x101, 0x46be, 0x101, 0x46c7, 0x101, 0x8aa0, 0x101, + 0x8aed, 0x101, 0x8b8a, 0x101, 0x8c55, 0x201, 0xd85f, 0xdca8, + 0x101, 0x8cab, 0x101, 0x8cc1, 0x101, 0x8d1b, 0x101, 0x8d77, + 0x201, 0xd85f, 0xdf2f, 0x201, 0xd842, 0xdc04, 0x101, 0x8dcb, + 0x101, 0x8dbc, 0x101, 0x8df0, 0x201, 0xd842, 0xdcde, 0x101, + 0x8ed4, 0x101, 0x8f38, 0x201, 0xd861, 0xddd2, 0x201, 0xd861, + 0xdded, 0x101, 0x9094, 0x101, 0x90f1, 0x101, 0x9111, 0x201, + 0xd861, 0xdf2e, 0x101, 0x911b, 0x101, 0x9238, 0x101, 0x92d7, + 0x101, 0x92d8, 0x101, 0x927c, 0x101, 0x93f9, 0x101, 0x9415, + 0x201, 0xd862, 0xdffa, 0x101, 0x958b, 0x101, 0x4995, 0x101, + 0x95b7, 0x201, 0xd863, 0xdd77, 0x101, 0x49e6, 0x101, 0x96c3, + 0x101, 0x5db2, 0x101, 0x9723, 0x201, 0xd864, 0xdd45, 0x201, + 0xd864, 0xde1a, 0x101, 0x4a6e, 0x101, 0x4a76, 0x101, 0x97e0, + 0x201, 0xd865, 0xdc0a, 0x101, 0x4ab2, 0x201, 0xd865, 0xdc96, + 0x101, 0x980b, 0x101, 0x980b, 0x101, 0x9829, 0x201, 0xd865, + 0xddb6, 0x101, 0x98e2, 0x101, 0x4b33, 0x101, 0x9929, 0x101, + 0x99a7, 0x101, 0x99c2, 0x101, 0x99fe, 0x101, 0x4bce, 0x201, + 0xd866, 0xdf30, 0x101, 0x9b12, 0x101, 0x9c40, 0x101, 0x9cfd, + 0x101, 0x4cce, 0x101, 0x4ced, 0x101, 0x9d67, 0x201, 0xd868, + 0xdcce, 0x101, 0x4cf8, 0x201, 0xd868, 0xdd05, 0x201, 0xd868, + 0xde0e, 0x201, 0xd868, 0xde91, 0x101, 0x9ebb, 0x101, 0x4d56, + 0x101, 0x9ef9, 0x101, 0x9efe, 0x101, 0x9f05, 0x101, 0x9f0f, + 0x101, 0x9f16, 0x101, 0x9f3b, 0x201, 0xd869, 0xde00 +}; + +static const unsigned short uc_ligature_trie[] = { + // 0 - 0x3100 + + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 663, 695, 727, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 759, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 791, 631, 631, 631, 823, 855, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 887, 919, 631, 631, 951, 983, 631, + 631, 631, 1015, 631, 631, 631, 1047, 631, + 631, 1079, 1111, 631, 631, 631, 1143, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + + 631, 1175, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 1207, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, + + 631, 631, 631, 631, 1239, 631, 631, 631, + + // 0x3100 - 0x12000 + + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1527, + 1783, 1271, 2039, 2295, 2551, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1271, 1271, + + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0x0, 0xa9, 0x194, 0x1d5, 0x20e, 0xffff, 0x267, 0x2a8, + 0x305, 0x372, 0x3a3, 0x3b0, 0x3bd, 0xffff, 0xffff, 0x408, + 0xffff, 0x425, 0xffff, 0x43e, 0x45b, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x47c, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0x485, 0x4da, 0x4df, 0x4e4, 0x4ed, + 0x51a, 0xffff, 0xffff, 0xffff, 0xffff, 0x52f, 0x548, 0xffff, + 0x54d, 0x55a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x57d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0x5d6, 0xffff, 0xffff, 0x611, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x690, 0x693, 0x6a0, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x6a3, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6aa, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6ad, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6b0, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6b3, 0x6b6, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6b9, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6be, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6c3, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0x6c6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6c9, 0x6d0, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6d3, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6d8, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x6db, 0xffff, 0xffff, 0xffff, 0xffff, 0x6e0, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6e3, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6e6, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x6e9, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0x700, 0x761, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x776, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x783, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x78c, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x791, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x796, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x79b, 0xffff, 0xffff, 0x7a0, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x7a5, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff +}; + +#define GET_LIGATURE_INDEX(ucs4) \ + (ucs4 < 0x3100 \ + ? (uc_ligature_trie[uc_ligature_trie[ucs4>>5] + (ucs4 & 0x1f)]) \ + : (ucs4 < 0x12000\ + ? uc_ligature_trie[uc_ligature_trie[((ucs4 - 0x3100)>>8) + 0x188] + (ucs4 & 0xff)]\ + : 0xffff)) + +static const unsigned short uc_ligature_map[] = { + 0x54, 0x41, 0xc0, 0x45, 0xc8, 0x49, 0xcc, 0x4e, + 0x1f8, 0x4f, 0xd2, 0x55, 0xd9, 0x57, 0x1e80, 0x59, + 0x1ef2, 0x61, 0xe0, 0x65, 0xe8, 0x69, 0xec, 0x6e, + 0x1f9, 0x6f, 0xf2, 0x75, 0xf9, 0x77, 0x1e81, 0x79, + 0x1ef3, 0xa8, 0x1fed, 0xc2, 0x1ea6, 0xca, 0x1ec0, 0xd4, + 0x1ed2, 0xdc, 0x1db, 0xe2, 0x1ea7, 0xea, 0x1ec1, 0xf4, + 0x1ed3, 0xfc, 0x1dc, 0x102, 0x1eb0, 0x103, 0x1eb1, 0x112, + 0x1e14, 0x113, 0x1e15, 0x14c, 0x1e50, 0x14d, 0x1e51, 0x1a0, + 0x1edc, 0x1a1, 0x1edd, 0x1af, 0x1eea, 0x1b0, 0x1eeb, 0x391, + 0x1fba, 0x395, 0x1fc8, 0x397, 0x1fca, 0x399, 0x1fda, 0x39f, + 0x1ff8, 0x3a5, 0x1fea, 0x3a9, 0x1ffa, 0x3b1, 0x1f70, 0x3b5, + 0x1f72, 0x3b7, 0x1f74, 0x3b9, 0x1f76, 0x3bf, 0x1f78, 0x3c5, + 0x1f7a, 0x3c9, 0x1f7c, 0x3ca, 0x1fd2, 0x3cb, 0x1fe2, 0x415, + 0x400, 0x418, 0x40d, 0x435, 0x450, 0x438, 0x45d, 0x1f00, + 0x1f02, 0x1f01, 0x1f03, 0x1f08, 0x1f0a, 0x1f09, 0x1f0b, 0x1f10, + 0x1f12, 0x1f11, 0x1f13, 0x1f18, 0x1f1a, 0x1f19, 0x1f1b, 0x1f20, + 0x1f22, 0x1f21, 0x1f23, 0x1f28, 0x1f2a, 0x1f29, 0x1f2b, 0x1f30, + 0x1f32, 0x1f31, 0x1f33, 0x1f38, 0x1f3a, 0x1f39, 0x1f3b, 0x1f40, + 0x1f42, 0x1f41, 0x1f43, 0x1f48, 0x1f4a, 0x1f49, 0x1f4b, 0x1f50, + 0x1f52, 0x1f51, 0x1f53, 0x1f59, 0x1f5b, 0x1f60, 0x1f62, 0x1f61, + 0x1f63, 0x1f68, 0x1f6a, 0x1f69, 0x1f6b, 0x1fbf, 0x1fcd, 0x1ffe, + 0x1fdd, 0x75, 0x41, 0xc1, 0x43, 0x106, 0x45, 0xc9, + 0x47, 0x1f4, 0x49, 0xcd, 0x4b, 0x1e30, 0x4c, 0x139, + 0x4d, 0x1e3e, 0x4e, 0x143, 0x4f, 0xd3, 0x50, 0x1e54, + 0x52, 0x154, 0x53, 0x15a, 0x55, 0xda, 0x57, 0x1e82, + 0x59, 0xdd, 0x5a, 0x179, 0x61, 0xe1, 0x63, 0x107, + 0x65, 0xe9, 0x67, 0x1f5, 0x69, 0xed, 0x6b, 0x1e31, + 0x6c, 0x13a, 0x6d, 0x1e3f, 0x6e, 0x144, 0x6f, 0xf3, + 0x70, 0x1e55, 0x72, 0x155, 0x73, 0x15b, 0x75, 0xfa, + 0x77, 0x1e83, 0x79, 0xfd, 0x7a, 0x17a, 0xa8, 0x385, + 0xc2, 0x1ea4, 0xc5, 0x1fa, 0xc6, 0x1fc, 0xc7, 0x1e08, + 0xca, 0x1ebe, 0xcf, 0x1e2e, 0xd4, 0x1ed0, 0xd5, 0x1e4c, + 0xd8, 0x1fe, 0xdc, 0x1d7, 0xe2, 0x1ea5, 0xe5, 0x1fb, + 0xe6, 0x1fd, 0xe7, 0x1e09, 0xea, 0x1ebf, 0xef, 0x1e2f, + 0xf4, 0x1ed1, 0xf5, 0x1e4d, 0xf8, 0x1ff, 0xfc, 0x1d8, + 0x102, 0x1eae, 0x103, 0x1eaf, 0x112, 0x1e16, 0x113, 0x1e17, + 0x14c, 0x1e52, 0x14d, 0x1e53, 0x168, 0x1e78, 0x169, 0x1e79, + 0x1a0, 0x1eda, 0x1a1, 0x1edb, 0x1af, 0x1ee8, 0x1b0, 0x1ee9, + 0x391, 0x386, 0x395, 0x388, 0x397, 0x389, 0x399, 0x38a, + 0x39f, 0x38c, 0x3a5, 0x38e, 0x3a9, 0x38f, 0x3b1, 0x3ac, + 0x3b5, 0x3ad, 0x3b7, 0x3ae, 0x3b9, 0x3af, 0x3bf, 0x3cc, + 0x3c5, 0x3cd, 0x3c9, 0x3ce, 0x3ca, 0x390, 0x3cb, 0x3b0, + 0x3d2, 0x3d3, 0x413, 0x403, 0x41a, 0x40c, 0x433, 0x453, + 0x43a, 0x45c, 0x1f00, 0x1f04, 0x1f01, 0x1f05, 0x1f08, 0x1f0c, + 0x1f09, 0x1f0d, 0x1f10, 0x1f14, 0x1f11, 0x1f15, 0x1f18, 0x1f1c, + 0x1f19, 0x1f1d, 0x1f20, 0x1f24, 0x1f21, 0x1f25, 0x1f28, 0x1f2c, + 0x1f29, 0x1f2d, 0x1f30, 0x1f34, 0x1f31, 0x1f35, 0x1f38, 0x1f3c, + 0x1f39, 0x1f3d, 0x1f40, 0x1f44, 0x1f41, 0x1f45, 0x1f48, 0x1f4c, + 0x1f49, 0x1f4d, 0x1f50, 0x1f54, 0x1f51, 0x1f55, 0x1f59, 0x1f5d, + 0x1f60, 0x1f64, 0x1f61, 0x1f65, 0x1f68, 0x1f6c, 0x1f69, 0x1f6d, + 0x1fbf, 0x1fce, 0x1ffe, 0x1fde, 0x20, 0x41, 0xc2, 0x43, + 0x108, 0x45, 0xca, 0x47, 0x11c, 0x48, 0x124, 0x49, + 0xce, 0x4a, 0x134, 0x4f, 0xd4, 0x53, 0x15c, 0x55, + 0xdb, 0x57, 0x174, 0x59, 0x176, 0x5a, 0x1e90, 0x61, + 0xe2, 0x63, 0x109, 0x65, 0xea, 0x67, 0x11d, 0x68, + 0x125, 0x69, 0xee, 0x6a, 0x135, 0x6f, 0xf4, 0x73, + 0x15d, 0x75, 0xfb, 0x77, 0x175, 0x79, 0x177, 0x7a, + 0x1e91, 0x1ea0, 0x1eac, 0x1ea1, 0x1ead, 0x1eb8, 0x1ec6, 0x1eb9, + 0x1ec7, 0x1ecc, 0x1ed8, 0x1ecd, 0x1ed9, 0x1c, 0x41, 0xc3, + 0x45, 0x1ebc, 0x49, 0x128, 0x4e, 0xd1, 0x4f, 0xd5, + 0x55, 0x168, 0x56, 0x1e7c, 0x59, 0x1ef8, 0x61, 0xe3, + 0x65, 0x1ebd, 0x69, 0x129, 0x6e, 0xf1, 0x6f, 0xf5, + 0x75, 0x169, 0x76, 0x1e7d, 0x79, 0x1ef9, 0xc2, 0x1eaa, + 0xca, 0x1ec4, 0xd4, 0x1ed6, 0xe2, 0x1eab, 0xea, 0x1ec5, + 0xf4, 0x1ed7, 0x102, 0x1eb4, 0x103, 0x1eb5, 0x1a0, 0x1ee0, + 0x1a1, 0x1ee1, 0x1af, 0x1eee, 0x1b0, 0x1eef, 0x2c, 0x41, + 0x100, 0x45, 0x112, 0x47, 0x1e20, 0x49, 0x12a, 0x4f, + 0x14c, 0x55, 0x16a, 0x59, 0x232, 0x61, 0x101, 0x65, + 0x113, 0x67, 0x1e21, 0x69, 0x12b, 0x6f, 0x14d, 0x75, + 0x16b, 0x79, 0x233, 0xc4, 0x1de, 0xc6, 0x1e2, 0xd5, + 0x22c, 0xd6, 0x22a, 0xdc, 0x1d5, 0xe4, 0x1df, 0xe6, + 0x1e3, 0xf5, 0x22d, 0xf6, 0x22b, 0xfc, 0x1d6, 0x1ea, + 0x1ec, 0x1eb, 0x1ed, 0x226, 0x1e0, 0x227, 0x1e1, 0x22e, + 0x230, 0x22f, 0x231, 0x391, 0x1fb9, 0x399, 0x1fd9, 0x3a5, + 0x1fe9, 0x3b1, 0x1fb1, 0x3b9, 0x1fd1, 0x3c5, 0x1fe1, 0x418, + 0x4e2, 0x423, 0x4ee, 0x438, 0x4e3, 0x443, 0x4ef, 0x1e36, + 0x1e38, 0x1e37, 0x1e39, 0x1e5a, 0x1e5c, 0x1e5b, 0x1e5d, 0x20, + 0x41, 0x102, 0x45, 0x114, 0x47, 0x11e, 0x49, 0x12c, + 0x4f, 0x14e, 0x55, 0x16c, 0x61, 0x103, 0x65, 0x115, + 0x67, 0x11f, 0x69, 0x12d, 0x6f, 0x14f, 0x75, 0x16d, + 0x228, 0x1e1c, 0x229, 0x1e1d, 0x391, 0x1fb8, 0x399, 0x1fd8, + 0x3a5, 0x1fe8, 0x3b1, 0x1fb0, 0x3b9, 0x1fd0, 0x3c5, 0x1fe0, + 0x410, 0x4d0, 0x415, 0x4d6, 0x416, 0x4c1, 0x418, 0x419, + 0x423, 0x40e, 0x430, 0x4d1, 0x435, 0x4d7, 0x436, 0x4c2, + 0x438, 0x439, 0x443, 0x45e, 0x1ea0, 0x1eb6, 0x1ea1, 0x1eb7, + 0x2e, 0x41, 0x226, 0x42, 0x1e02, 0x43, 0x10a, 0x44, + 0x1e0a, 0x45, 0x116, 0x46, 0x1e1e, 0x47, 0x120, 0x48, + 0x1e22, 0x49, 0x130, 0x4d, 0x1e40, 0x4e, 0x1e44, 0x4f, + 0x22e, 0x50, 0x1e56, 0x52, 0x1e58, 0x53, 0x1e60, 0x54, + 0x1e6a, 0x57, 0x1e86, 0x58, 0x1e8a, 0x59, 0x1e8e, 0x5a, + 0x17b, 0x61, 0x227, 0x62, 0x1e03, 0x63, 0x10b, 0x64, + 0x1e0b, 0x65, 0x117, 0x66, 0x1e1f, 0x67, 0x121, 0x68, + 0x1e23, 0x6d, 0x1e41, 0x6e, 0x1e45, 0x6f, 0x22f, 0x70, + 0x1e57, 0x72, 0x1e59, 0x73, 0x1e61, 0x74, 0x1e6b, 0x77, + 0x1e87, 0x78, 0x1e8b, 0x79, 0x1e8f, 0x7a, 0x17c, 0x15a, + 0x1e64, 0x15b, 0x1e65, 0x160, 0x1e66, 0x161, 0x1e67, 0x17f, + 0x1e9b, 0x1e62, 0x1e68, 0x1e63, 0x1e69, 0x36, 0x41, 0xc4, + 0x45, 0xcb, 0x48, 0x1e26, 0x49, 0xcf, 0x4f, 0xd6, + 0x55, 0xdc, 0x57, 0x1e84, 0x58, 0x1e8c, 0x59, 0x178, + 0x61, 0xe4, 0x65, 0xeb, 0x68, 0x1e27, 0x69, 0xef, + 0x6f, 0xf6, 0x74, 0x1e97, 0x75, 0xfc, 0x77, 0x1e85, + 0x78, 0x1e8d, 0x79, 0xff, 0xd5, 0x1e4e, 0xf5, 0x1e4f, + 0x16a, 0x1e7a, 0x16b, 0x1e7b, 0x399, 0x3aa, 0x3a5, 0x3ab, + 0x3b9, 0x3ca, 0x3c5, 0x3cb, 0x3d2, 0x3d4, 0x406, 0x407, + 0x410, 0x4d2, 0x415, 0x401, 0x416, 0x4dc, 0x417, 0x4de, + 0x418, 0x4e4, 0x41e, 0x4e6, 0x423, 0x4f0, 0x427, 0x4f4, + 0x42b, 0x4f8, 0x42d, 0x4ec, 0x430, 0x4d3, 0x435, 0x451, + 0x436, 0x4dd, 0x437, 0x4df, 0x438, 0x4e5, 0x43e, 0x4e7, + 0x443, 0x4f1, 0x447, 0x4f5, 0x44b, 0x4f9, 0x44d, 0x4ed, + 0x456, 0x457, 0x4d8, 0x4da, 0x4d9, 0x4db, 0x4e8, 0x4ea, + 0x4e9, 0x4eb, 0x18, 0x41, 0x1ea2, 0x45, 0x1eba, 0x49, + 0x1ec8, 0x4f, 0x1ece, 0x55, 0x1ee6, 0x59, 0x1ef6, 0x61, + 0x1ea3, 0x65, 0x1ebb, 0x69, 0x1ec9, 0x6f, 0x1ecf, 0x75, + 0x1ee7, 0x79, 0x1ef7, 0xc2, 0x1ea8, 0xca, 0x1ec2, 0xd4, + 0x1ed4, 0xe2, 0x1ea9, 0xea, 0x1ec3, 0xf4, 0x1ed5, 0x102, + 0x1eb2, 0x103, 0x1eb3, 0x1a0, 0x1ede, 0x1a1, 0x1edf, 0x1af, + 0x1eec, 0x1b0, 0x1eed, 0x6, 0x41, 0xc5, 0x55, 0x16e, + 0x61, 0xe5, 0x75, 0x16f, 0x77, 0x1e98, 0x79, 0x1e99, + 0x6, 0x4f, 0x150, 0x55, 0x170, 0x6f, 0x151, 0x75, + 0x171, 0x423, 0x4f2, 0x443, 0x4f3, 0x25, 0x41, 0x1cd, + 0x43, 0x10c, 0x44, 0x10e, 0x45, 0x11a, 0x47, 0x1e6, + 0x48, 0x21e, 0x49, 0x1cf, 0x4b, 0x1e8, 0x4c, 0x13d, + 0x4e, 0x147, 0x4f, 0x1d1, 0x52, 0x158, 0x53, 0x160, + 0x54, 0x164, 0x55, 0x1d3, 0x5a, 0x17d, 0x61, 0x1ce, + 0x63, 0x10d, 0x64, 0x10f, 0x65, 0x11b, 0x67, 0x1e7, + 0x68, 0x21f, 0x69, 0x1d0, 0x6a, 0x1f0, 0x6b, 0x1e9, + 0x6c, 0x13e, 0x6e, 0x148, 0x6f, 0x1d2, 0x72, 0x159, + 0x73, 0x161, 0x74, 0x165, 0x75, 0x1d4, 0x7a, 0x17e, + 0xdc, 0x1d9, 0xfc, 0x1da, 0x1b7, 0x1ee, 0x292, 0x1ef, + 0xe, 0x41, 0x200, 0x45, 0x204, 0x49, 0x208, 0x4f, + 0x20c, 0x52, 0x210, 0x55, 0x214, 0x61, 0x201, 0x65, + 0x205, 0x69, 0x209, 0x6f, 0x20d, 0x72, 0x211, 0x75, + 0x215, 0x474, 0x476, 0x475, 0x477, 0xc, 0x41, 0x202, + 0x45, 0x206, 0x49, 0x20a, 0x4f, 0x20e, 0x52, 0x212, + 0x55, 0x216, 0x61, 0x203, 0x65, 0x207, 0x69, 0x20b, + 0x6f, 0x20f, 0x72, 0x213, 0x75, 0x217, 0xe, 0x391, + 0x1f08, 0x395, 0x1f18, 0x397, 0x1f28, 0x399, 0x1f38, 0x39f, + 0x1f48, 0x3a9, 0x1f68, 0x3b1, 0x1f00, 0x3b5, 0x1f10, 0x3b7, + 0x1f20, 0x3b9, 0x1f30, 0x3bf, 0x1f40, 0x3c1, 0x1fe4, 0x3c5, + 0x1f50, 0x3c9, 0x1f60, 0x10, 0x391, 0x1f09, 0x395, 0x1f19, + 0x397, 0x1f29, 0x399, 0x1f39, 0x39f, 0x1f49, 0x3a1, 0x1fec, + 0x3a5, 0x1f59, 0x3a9, 0x1f69, 0x3b1, 0x1f01, 0x3b5, 0x1f11, + 0x3b7, 0x1f21, 0x3b9, 0x1f31, 0x3bf, 0x1f41, 0x3c1, 0x1fe5, + 0x3c5, 0x1f51, 0x3c9, 0x1f61, 0x4, 0x4f, 0x1a0, 0x55, + 0x1af, 0x6f, 0x1a1, 0x75, 0x1b0, 0x2a, 0x41, 0x1ea0, + 0x42, 0x1e04, 0x44, 0x1e0c, 0x45, 0x1eb8, 0x48, 0x1e24, + 0x49, 0x1eca, 0x4b, 0x1e32, 0x4c, 0x1e36, 0x4d, 0x1e42, + 0x4e, 0x1e46, 0x4f, 0x1ecc, 0x52, 0x1e5a, 0x53, 0x1e62, + 0x54, 0x1e6c, 0x55, 0x1ee4, 0x56, 0x1e7e, 0x57, 0x1e88, + 0x59, 0x1ef4, 0x5a, 0x1e92, 0x61, 0x1ea1, 0x62, 0x1e05, + 0x64, 0x1e0d, 0x65, 0x1eb9, 0x68, 0x1e25, 0x69, 0x1ecb, + 0x6b, 0x1e33, 0x6c, 0x1e37, 0x6d, 0x1e43, 0x6e, 0x1e47, + 0x6f, 0x1ecd, 0x72, 0x1e5b, 0x73, 0x1e63, 0x74, 0x1e6d, + 0x75, 0x1ee5, 0x76, 0x1e7f, 0x77, 0x1e89, 0x79, 0x1ef5, + 0x7a, 0x1e93, 0x1a0, 0x1ee2, 0x1a1, 0x1ee3, 0x1af, 0x1ef0, + 0x1b0, 0x1ef1, 0x2, 0x55, 0x1e72, 0x75, 0x1e73, 0x2, + 0x41, 0x1e00, 0x61, 0x1e01, 0x4, 0x53, 0x218, 0x54, + 0x21a, 0x73, 0x219, 0x74, 0x21b, 0x16, 0x43, 0xc7, + 0x44, 0x1e10, 0x45, 0x228, 0x47, 0x122, 0x48, 0x1e28, + 0x4b, 0x136, 0x4c, 0x13b, 0x4e, 0x145, 0x52, 0x156, + 0x53, 0x15e, 0x54, 0x162, 0x63, 0xe7, 0x64, 0x1e11, + 0x65, 0x229, 0x67, 0x123, 0x68, 0x1e29, 0x6b, 0x137, + 0x6c, 0x13c, 0x6e, 0x146, 0x72, 0x157, 0x73, 0x15f, + 0x74, 0x163, 0xa, 0x41, 0x104, 0x45, 0x118, 0x49, + 0x12e, 0x4f, 0x1ea, 0x55, 0x172, 0x61, 0x105, 0x65, + 0x119, 0x69, 0x12f, 0x6f, 0x1eb, 0x75, 0x173, 0xc, + 0x44, 0x1e12, 0x45, 0x1e18, 0x4c, 0x1e3c, 0x4e, 0x1e4a, + 0x54, 0x1e70, 0x55, 0x1e76, 0x64, 0x1e13, 0x65, 0x1e19, + 0x6c, 0x1e3d, 0x6e, 0x1e4b, 0x74, 0x1e71, 0x75, 0x1e77, + 0x2, 0x48, 0x1e2a, 0x68, 0x1e2b, 0x6, 0x45, 0x1e1a, + 0x49, 0x1e2c, 0x55, 0x1e74, 0x65, 0x1e1b, 0x69, 0x1e2d, + 0x75, 0x1e75, 0x11, 0x42, 0x1e06, 0x44, 0x1e0e, 0x4b, + 0x1e34, 0x4c, 0x1e3a, 0x4e, 0x1e48, 0x52, 0x1e5e, 0x54, + 0x1e6e, 0x5a, 0x1e94, 0x62, 0x1e07, 0x64, 0x1e0f, 0x68, + 0x1e96, 0x6b, 0x1e35, 0x6c, 0x1e3b, 0x6e, 0x1e49, 0x72, + 0x1e5f, 0x74, 0x1e6f, 0x7a, 0x1e95, 0x2c, 0x3c, 0x226e, + 0x3d, 0x2260, 0x3e, 0x226f, 0x2190, 0x219a, 0x2192, 0x219b, + 0x2194, 0x21ae, 0x21d0, 0x21cd, 0x21d2, 0x21cf, 0x21d4, 0x21ce, + 0x2203, 0x2204, 0x2208, 0x2209, 0x220b, 0x220c, 0x2223, 0x2224, + 0x2225, 0x2226, 0x223c, 0x2241, 0x2243, 0x2244, 0x2245, 0x2247, + 0x2248, 0x2249, 0x224d, 0x226d, 0x2261, 0x2262, 0x2264, 0x2270, + 0x2265, 0x2271, 0x2272, 0x2274, 0x2273, 0x2275, 0x2276, 0x2278, + 0x2277, 0x2279, 0x227a, 0x2280, 0x227b, 0x2281, 0x227c, 0x22e0, + 0x227d, 0x22e1, 0x2282, 0x2284, 0x2283, 0x2285, 0x2286, 0x2288, + 0x2287, 0x2289, 0x2291, 0x22e2, 0x2292, 0x22e3, 0x22a2, 0x22ac, + 0x22a8, 0x22ad, 0x22a9, 0x22ae, 0x22ab, 0x22af, 0x22b2, 0x22ea, + 0x22b3, 0x22eb, 0x22b4, 0x22ec, 0x22b5, 0x22ed, 0x1d, 0xa8, + 0x1fc1, 0x3b1, 0x1fb6, 0x3b7, 0x1fc6, 0x3b9, 0x1fd6, 0x3c5, + 0x1fe6, 0x3c9, 0x1ff6, 0x3ca, 0x1fd7, 0x3cb, 0x1fe7, 0x1f00, + 0x1f06, 0x1f01, 0x1f07, 0x1f08, 0x1f0e, 0x1f09, 0x1f0f, 0x1f20, + 0x1f26, 0x1f21, 0x1f27, 0x1f28, 0x1f2e, 0x1f29, 0x1f2f, 0x1f30, + 0x1f36, 0x1f31, 0x1f37, 0x1f38, 0x1f3e, 0x1f39, 0x1f3f, 0x1f50, + 0x1f56, 0x1f51, 0x1f57, 0x1f59, 0x1f5f, 0x1f60, 0x1f66, 0x1f61, + 0x1f67, 0x1f68, 0x1f6e, 0x1f69, 0x1f6f, 0x1fbf, 0x1fcf, 0x1ffe, + 0x1fdf, 0x3f, 0x391, 0x1fbc, 0x397, 0x1fcc, 0x3a9, 0x1ffc, + 0x3ac, 0x1fb4, 0x3ae, 0x1fc4, 0x3b1, 0x1fb3, 0x3b7, 0x1fc3, + 0x3c9, 0x1ff3, 0x3ce, 0x1ff4, 0x1f00, 0x1f80, 0x1f01, 0x1f81, + 0x1f02, 0x1f82, 0x1f03, 0x1f83, 0x1f04, 0x1f84, 0x1f05, 0x1f85, + 0x1f06, 0x1f86, 0x1f07, 0x1f87, 0x1f08, 0x1f88, 0x1f09, 0x1f89, + 0x1f0a, 0x1f8a, 0x1f0b, 0x1f8b, 0x1f0c, 0x1f8c, 0x1f0d, 0x1f8d, + 0x1f0e, 0x1f8e, 0x1f0f, 0x1f8f, 0x1f20, 0x1f90, 0x1f21, 0x1f91, + 0x1f22, 0x1f92, 0x1f23, 0x1f93, 0x1f24, 0x1f94, 0x1f25, 0x1f95, + 0x1f26, 0x1f96, 0x1f27, 0x1f97, 0x1f28, 0x1f98, 0x1f29, 0x1f99, + 0x1f2a, 0x1f9a, 0x1f2b, 0x1f9b, 0x1f2c, 0x1f9c, 0x1f2d, 0x1f9d, + 0x1f2e, 0x1f9e, 0x1f2f, 0x1f9f, 0x1f60, 0x1fa0, 0x1f61, 0x1fa1, + 0x1f62, 0x1fa2, 0x1f63, 0x1fa3, 0x1f64, 0x1fa4, 0x1f65, 0x1fa5, + 0x1f66, 0x1fa6, 0x1f67, 0x1fa7, 0x1f68, 0x1fa8, 0x1f69, 0x1fa9, + 0x1f6a, 0x1faa, 0x1f6b, 0x1fab, 0x1f6c, 0x1fac, 0x1f6d, 0x1fad, + 0x1f6e, 0x1fae, 0x1f6f, 0x1faf, 0x1f70, 0x1fb2, 0x1f74, 0x1fc2, + 0x1f7c, 0x1ff2, 0x1fb6, 0x1fb7, 0x1fc6, 0x1fc7, 0x1ff6, 0x1ff7, + 0x1, 0x627, 0x622, 0x6, 0x627, 0x623, 0x648, 0x624, + 0x64a, 0x626, 0x6c1, 0x6c2, 0x6d2, 0x6d3, 0x6d5, 0x6c0, + 0x1, 0x627, 0x625, 0x3, 0x928, 0x929, 0x930, 0x931, + 0x933, 0x934, 0x1, 0x9c7, 0x9cb, 0x1, 0x9c7, 0x9cc, + 0x1, 0xb47, 0xb4b, 0x1, 0xb47, 0xb48, 0x1, 0xb47, + 0xb4c, 0x2, 0xbc6, 0xbca, 0xbc7, 0xbcb, 0x2, 0xb92, + 0xb94, 0xbc6, 0xbcc, 0x1, 0xc46, 0xc48, 0x1, 0xcc6, + 0xcca, 0x3, 0xcbf, 0xcc0, 0xcc6, 0xcc7, 0xcca, 0xccb, + 0x1, 0xcc6, 0xcc8, 0x2, 0xd46, 0xd4a, 0xd47, 0xd4b, + 0x1, 0xd46, 0xd4c, 0x2, 0xdd9, 0xdda, 0xddc, 0xddd, + 0x1, 0xdd9, 0xddc, 0x1, 0xdd9, 0xdde, 0x1, 0x1025, + 0x1026, 0xb, 0x1b05, 0x1b06, 0x1b07, 0x1b08, 0x1b09, 0x1b0a, + 0x1b0b, 0x1b0c, 0x1b0d, 0x1b0e, 0x1b11, 0x1b12, 0x1b3a, 0x1b3b, + 0x1b3c, 0x1b3d, 0x1b3e, 0x1b40, 0x1b3f, 0x1b41, 0x1b42, 0x1b43, + 0x30, 0x3046, 0x3094, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, + 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, + 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, + 0x3060, 0x3061, 0x3062, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, + 0x3069, 0x306f, 0x3070, 0x3072, 0x3073, 0x3075, 0x3076, 0x3078, + 0x3079, 0x307b, 0x307c, 0x309d, 0x309e, 0x30a6, 0x30f4, 0x30ab, + 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0, 0x30b1, 0x30b2, 0x30b3, + 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8, 0x30b9, 0x30ba, 0x30bb, + 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0, 0x30c1, 0x30c2, 0x30c4, + 0x30c5, 0x30c6, 0x30c7, 0x30c8, 0x30c9, 0x30cf, 0x30d0, 0x30d2, + 0x30d3, 0x30d5, 0x30d6, 0x30d8, 0x30d9, 0x30db, 0x30dc, 0x30ef, + 0x30f7, 0x30f0, 0x30f8, 0x30f1, 0x30f9, 0x30f2, 0x30fa, 0x30fd, + 0x30fe, 0xa, 0x306f, 0x3071, 0x3072, 0x3074, 0x3075, 0x3077, + 0x3078, 0x307a, 0x307b, 0x307d, 0x30cf, 0x30d1, 0x30d2, 0x30d4, + 0x30d5, 0x30d7, 0x30d8, 0x30da, 0x30db, 0x30dd, 0x3, 0xd804, + 0xdc99, 0xd804, 0xdc9a, 0xd804, 0xdc9b, 0xd804, 0xdc9c, 0xd804, + 0xdca5, 0xd804, 0xdcab, 0x2, 0xd804, 0xdd31, 0xd804, 0xdd2e, + 0xd804, 0xdd32, 0xd804, 0xdd2f, 0x1, 0xd804, 0xdf47, 0xd804, + 0xdf4b, 0x1, 0xd804, 0xdf47, 0xd804, 0xdf4c, 0x1, 0xd805, + 0xdcb9, 0xd805, 0xdcbc, 0x1, 0xd805, 0xdcb9, 0xd805, 0xdcbb, + 0x1, 0xd805, 0xdcb9, 0xd805, 0xdcbe, 0x2, 0xd805, 0xddb8, + 0xd805, 0xddba, 0xd805, 0xddb9, 0xd805, 0xddbb +}; + + +struct NormalizationCorrection { + uint ucs4; + uint old_mapping; + int version; +}; + +static const NormalizationCorrection uc_normalization_corrections[] = { + { 0xf951, 0x96fb, 6 }, + { 0x2f868, 0x2136a, 7 }, + { 0x2f874, 0x5f33, 7 }, + { 0x2f91f, 0x43ab, 7 }, + { 0x2f95f, 0x7aae, 7 }, + { 0x2f9bf, 0x4d57, 7 }, +}; + +enum { NumNormalizationCorrections = 6 }; +enum { NormalizationCorrectionsVersionMax = 7 }; + +} // namespace QUnicodeTables + +using namespace QUnicodeTables; + +QT_END_NAMESPACE diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/gui/image/qbmphandler.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/gui/image/qbmphandler.cpp similarity index 96% rename from Telegram/_qt_5_4_0_patch/qtbase/src/gui/image/qbmphandler.cpp rename to Telegram/_qt_5_5_0_patch/qtbase/src/gui/image/qbmphandler.cpp index f293ef9cc..eb78a1326 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/gui/image/qbmphandler.cpp +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/gui/image/qbmphandler.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtGui module of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -314,12 +314,20 @@ static bool read_dib_body(QDataStream &s, const BMP_INFOHDR &bi, int offset, int } } else if (comp == BMP_BITFIELDS && (nbits == 16 || nbits == 32)) { red_shift = calc_shift(red_mask); + if (((red_mask >> red_shift) + 1) == 0) + return false; red_scale = 256 / ((red_mask >> red_shift) + 1); green_shift = calc_shift(green_mask); + if (((green_mask >> green_shift) + 1) == 0) + return false; green_scale = 256 / ((green_mask >> green_shift) + 1); blue_shift = calc_shift(blue_mask); + if (((blue_mask >> blue_shift) + 1) == 0) + return false; blue_scale = 256 / ((blue_mask >> blue_shift) + 1); alpha_shift = calc_shift(alpha_mask); + if (((alpha_mask >> alpha_shift) + 1) == 0) + return false; alpha_scale = 256 / ((alpha_mask >> alpha_shift) + 1); } else if (comp == BMP_RGB && (nbits == 24 || nbits == 32)) { blue_mask = 0x000000ff; @@ -476,12 +484,6 @@ static bool read_dib_body(QDataStream &s, const BMP_INFOHDR &bi, int offset, int p = data + (h-y-1)*bpl; break; case 2: // delta (jump) - // Protection - if ((uint)x >= (uint)w) - x = w-1; - if ((uint)y >= (uint)h) - y = h-1; - { quint8 tmp; d->getChar((char *)&tmp); @@ -489,6 +491,13 @@ static bool read_dib_body(QDataStream &s, const BMP_INFOHDR &bi, int offset, int d->getChar((char *)&tmp); y += tmp; } + + // Protection + if ((uint)x >= (uint)w) + x = w-1; + if ((uint)y >= (uint)h) + y = h-1; + p = data + (h-y-1)*bpl + x; break; default: // absolute mode @@ -631,7 +640,7 @@ bool qt_write_dib(QDataStream &s, QImage image) if (nbits == 1 || nbits == 8) { // direct output for (y=image.height()-1; y>=0; y--) { - if (d->write((char*)image.constScanLine(y), bpl) == -1) + if (d->write((const char*)image.constScanLine(y), bpl) == -1) return false; } return true; @@ -791,6 +800,10 @@ bool QBmpHandler::write(const QImage &img) case QImage::Format_ARGB32: image = img; break; + case QImage::Format_Alpha8: + case QImage::Format_Grayscale8: + image = img.convertToFormat(QImage::Format_Indexed8); + break; default: if (img.hasAlphaChannel()) image = img.convertToFormat(QImage::Format_ARGB32); diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/gui/kernel/qplatformdialoghelper.h b/Telegram/_qt_5_5_0_patch/qtbase/src/gui/kernel/qplatformdialoghelper.h similarity index 96% rename from Telegram/_qt_5_4_0_patch/qtbase/src/gui/kernel/qplatformdialoghelper.h rename to Telegram/_qt_5_5_0_patch/qtbase/src/gui/kernel/qplatformdialoghelper.h index 00fccad7d..2d1cdd90f 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/gui/kernel/qplatformdialoghelper.h +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/gui/kernel/qplatformdialoghelper.h @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtGui module of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/gui/painting/qpaintengine_p.h b/Telegram/_qt_5_5_0_patch/qtbase/src/gui/painting/qpaintengine_p.h similarity index 84% rename from Telegram/_qt_5_4_0_patch/qtbase/src/gui/painting/qpaintengine_p.h rename to Telegram/_qt_5_5_0_patch/qtbase/src/gui/painting/qpaintengine_p.h index 5e823183d..468d671c0 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/gui/painting/qpaintengine_p.h +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/gui/painting/qpaintengine_p.h @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtGui module of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -80,8 +80,8 @@ public: if (systemTransform.type() <= QTransform::TxTranslate) systemClip.translate(qRound(systemTransform.dx()), qRound(systemTransform.dy())); else { - // Transform the system clip region back from device pixels to device-independent pixels before - // applying systemTransform, which already has transform from device-independent pixels to device pixels +// Transform the system clip region back from device pixels to device-independent pixels before +// applying systemTransform, which already has transform from device-independent pixels to device pixels #ifdef Q_OS_MAC QTransform scaleTransform; const qreal invDevicePixelRatio = 1. / pdev->devicePixelRatio(); diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/gui/text/qtextlayout.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/gui/text/qtextlayout.cpp similarity index 98% rename from Telegram/_qt_5_4_0_patch/qtbase/src/gui/text/qtextlayout.cpp rename to Telegram/_qt_5_5_0_patch/qtbase/src/gui/text/qtextlayout.cpp index 3c88caa39..082925006 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/gui/text/qtextlayout.cpp +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/gui/text/qtextlayout.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtGui module of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -643,15 +643,15 @@ int QTextLayout::nextCursorPosition(int oldPos, CursorMode mode) const while (oldPos < len && !attributes[oldPos].graphemeBoundary) oldPos++; } else { - while (oldPos < len && d->atSpace(oldPos)) + while (oldPos < len && attributes[oldPos].whiteSpace) oldPos++; - if (oldPos < len && d->atWordSeparator(oldPos)) { + if (oldPos < len && d->atWordSeparator(oldPos)) { oldPos++; while (oldPos < len && d->atWordSeparator(oldPos)) oldPos++; } else { - while (oldPos < len && !d->atSpace(oldPos) && !d->atWordSeparator(oldPos)) + while (oldPos < len && !attributes[oldPos].whiteSpace && !d->atWordSeparator(oldPos)) oldPos++; } } @@ -680,7 +680,7 @@ int QTextLayout::previousCursorPosition(int oldPos, CursorMode mode) const while (oldPos && !attributes[oldPos].graphemeBoundary) oldPos--; } else { - while (oldPos && d->atSpace(oldPos-1)) + while (oldPos > 0 && attributes[oldPos - 1].whiteSpace) oldPos--; if (oldPos && d->atWordSeparator(oldPos-1)) { @@ -688,7 +688,7 @@ int QTextLayout::previousCursorPosition(int oldPos, CursorMode mode) const while (oldPos && d->atWordSeparator(oldPos-1)) oldPos--; } else { - while (oldPos && !d->atSpace(oldPos-1) && !d->atWordSeparator(oldPos-1)) + while (oldPos > 0 && !attributes[oldPos - 1].whiteSpace && !d->atWordSeparator(oldPos-1)) oldPos--; } } @@ -1777,6 +1777,11 @@ void QTextLine::layout_helper(int maxGlyphs) QFixed x = line.x + line.textWidth + lbh.tmpData.textWidth + lbh.spaceData.textWidth; QFixed tabWidth = eng->calculateTabWidth(item, x); + attributes = eng->attributes(); + if (!attributes) + return; + lbh.logClusters = eng->layoutData->logClustersPtr; + lbh.glyphs = eng->shapedGlyphs(¤t); lbh.spaceData.textWidth += tabWidth; lbh.spaceData.length++; @@ -2064,9 +2069,8 @@ static QGlyphRun glyphRunWithInfo(QFontEngine *fontEngine, // Make a font for this particular engine QRawFont font; QRawFontPrivate *fontD = QRawFontPrivate::get(font); - fontD->fontEngine = fontEngine; - fontD->thread = QThread::currentThread(); - fontD->fontEngine->ref.ref(); + fontD->setFontEngine(fontEngine); + QVarLengthArray glyphsArray; QVarLengthArray positionsArray; @@ -2088,7 +2092,9 @@ static QGlyphRun glyphRunWithInfo(QFontEngine *fontEngine, qreal minY = 0; qreal maxY = 0; QVector glyphs; + glyphs.reserve(glyphsArray.size()); QVector positions; + positions.reserve(glyphsArray.size()); for (int i=0; isin6_family = AF_INET6; - sockAddrIPv6->sin6_scope_id = address.scopeId().toInt(); + sockAddrIPv6->sin6_scope_id = address.scopeId().toUInt(); WSAHtons(socketDescriptor, port, &(sockAddrIPv6->sin6_port)); Q_IPV6ADDR tmp = address.toIPv6Address(); memcpy(&(sockAddrIPv6->sin6_addr.qt_s6_addr), &tmp, sizeof(tmp)); @@ -383,8 +442,15 @@ bool QNativeSocketEnginePrivate::createNewSocket(QAbstractSocket::SocketType soc #endif socketDescriptor = socket; - return true; + // Make the socket nonblocking. + if (!setOption(QAbstractSocketEngine::NonBlockingSocketOption, 1)) { + setError(QAbstractSocket::UnsupportedSocketOperationError, NonBlockingInitFailedErrorString); + q_func()->close(); + return false; + } + + return true; } /*! \internal @@ -397,19 +463,8 @@ int QNativeSocketEnginePrivate::option(QNativeSocketEngine::SocketOption opt) co if (!q->isValid()) return -1; - int n = -1; - int level = SOL_SOCKET; // default - + // handle non-getsockopt switch (opt) { - case QNativeSocketEngine::ReceiveBufferSocketOption: - n = SO_RCVBUF; - break; - case QNativeSocketEngine::SendBufferSocketOption: - n = SO_SNDBUF; - break; - case QNativeSocketEngine::BroadcastSocketOption: - n = SO_BROADCAST; - break; case QNativeSocketEngine::NonBlockingSocketOption: { unsigned long buf = 0; if (WSAIoctl(socketDescriptor, FIONBIO, 0,0, &buf, sizeof(buf), 0,0,0) == 0) @@ -418,53 +473,21 @@ int QNativeSocketEnginePrivate::option(QNativeSocketEngine::SocketOption opt) co return -1; break; } - case QNativeSocketEngine::AddressReusable: - n = SO_REUSEADDR; - break; - case QNativeSocketEngine::BindExclusively: - n = SO_EXCLUSIVEADDRUSE; - break; - case QNativeSocketEngine::ReceiveOutOfBandData: - n = SO_OOBINLINE; - break; - case QNativeSocketEngine::LowDelayOption: - level = IPPROTO_TCP; - n = TCP_NODELAY; - break; - case QNativeSocketEngine::KeepAliveOption: - n = SO_KEEPALIVE; - break; - case QNativeSocketEngine::MulticastTtlOption: - - if (socketProtocol == QAbstractSocket::IPv6Protocol) { - level = IPPROTO_IPV6; - n = IPV6_MULTICAST_HOPS; - } else - { - level = IPPROTO_IP; - n = IP_MULTICAST_TTL; - } - break; - case QNativeSocketEngine::MulticastLoopbackOption: - if (socketProtocol == QAbstractSocket::IPv6Protocol) { - level = IPPROTO_IPV6; - n = IPV6_MULTICAST_LOOP; - } else - { - level = IPPROTO_IP; - n = IP_MULTICAST_LOOP; - } - break; case QNativeSocketEngine::TypeOfServiceOption: return -1; + + default: break; } #if Q_BYTE_ORDER != Q_LITTLE_ENDIAN #error code assumes windows is little endian #endif + int n, level; int v = 0; //note: windows doesn't write to all bytes if the option type is smaller than int QT_SOCKOPTLEN_T len = sizeof(v); + + convertToLevelAndOption(opt, socketProtocol, level, n); if (getsockopt(socketDescriptor, level, n, (char *) &v, &len) == 0) return v; WS_ERROR_DEBUG(WSAGetLastError()); @@ -481,21 +504,12 @@ bool QNativeSocketEnginePrivate::setOption(QNativeSocketEngine::SocketOption opt if (!q->isValid()) return false; - int n = 0; - int level = SOL_SOCKET; // default - + // handle non-setsockopt options switch (opt) { - case QNativeSocketEngine::ReceiveBufferSocketOption: - n = SO_RCVBUF; - break; case QNativeSocketEngine::SendBufferSocketOption: // see QTBUG-30478 SO_SNDBUF should not be used on Vista or later if (QSysInfo::windowsVersion() >= QSysInfo::WV_VISTA) return false; - n = SO_SNDBUF; - break; - case QNativeSocketEngine::BroadcastSocketOption: - n = SO_BROADCAST; break; case QNativeSocketEngine::NonBlockingSocketOption: { @@ -509,47 +523,15 @@ bool QNativeSocketEnginePrivate::setOption(QNativeSocketEngine::SocketOption opt return true; break; } - case QNativeSocketEngine::AddressReusable: - n = SO_REUSEADDR; - break; - case QNativeSocketEngine::BindExclusively: - n = SO_EXCLUSIVEADDRUSE; - break; - case QNativeSocketEngine::ReceiveOutOfBandData: - n = SO_OOBINLINE; - break; - case QNativeSocketEngine::LowDelayOption: - level = IPPROTO_TCP; - n = TCP_NODELAY; - break; - case QNativeSocketEngine::KeepAliveOption: - n = SO_KEEPALIVE; - break; - case QNativeSocketEngine::MulticastTtlOption: - if (socketProtocol == QAbstractSocket::IPv6Protocol) { - level = IPPROTO_IPV6; - n = IPV6_MULTICAST_HOPS; - } else - { - level = IPPROTO_IP; - n = IP_MULTICAST_TTL; - } - break; - case QNativeSocketEngine::MulticastLoopbackOption: - if (socketProtocol == QAbstractSocket::IPv6Protocol) { - level = IPPROTO_IPV6; - n = IPV6_MULTICAST_LOOP; - } else - { - level = IPPROTO_IP; - n = IP_MULTICAST_LOOP; - } - break; case QNativeSocketEngine::TypeOfServiceOption: return false; + + default: break; } + int n, level; + convertToLevelAndOption(opt, socketProtocol, level, n); if (::setsockopt(socketDescriptor, level, n, (char*)&v, sizeof(v)) != 0) { WS_ERROR_DEBUG(WSAGetLastError()); return false; @@ -651,7 +633,7 @@ bool QNativeSocketEnginePrivate::nativeConnect(const QHostAddress &address, quin setPortAndAddress(&sockAddrIPv4, &sockAddrIPv6, port, address, &sockAddrPtr, &sockAddrSize); - if (socketProtocol == QAbstractSocket::IPv6Protocol && address.toIPv4Address()) { + if ((socketProtocol == QAbstractSocket::IPv6Protocol || socketProtocol == QAbstractSocket::AnyIPProtocol) && address.toIPv4Address()) { //IPV6_V6ONLY option must be cleared to connect to a V4 mapped address if (QSysInfo::windowsVersion() >= QSysInfo::WV_6_0) { DWORD ipv6only = 0; @@ -709,7 +691,7 @@ bool QNativeSocketEnginePrivate::nativeConnect(const QHostAddress &address, quin errorDetected = true; break; } - if (value == WSAEADDRNOTAVAIL) { + if (value == WSAEADDRNOTAVAIL) { setError(QAbstractSocket::NetworkError, AddressNotAvailableErrorString); socketState = QAbstractSocket::UnconnectedState; errorDetected = true; @@ -858,9 +840,6 @@ bool QNativeSocketEnginePrivate::nativeBind(const QHostAddress &a, quint16 port) return false; } - localPort = port; - localAddress = address; - #if defined (QNATIVESOCKETENGINE_DEBUG) qDebug("QNativeSocketEnginePrivate::nativeBind(%s, %i) == true", address.toString().toLatin1().constData(), port); @@ -1037,7 +1016,7 @@ bool QNativeSocketEnginePrivate::nativeLeaveMulticastGroup(const QHostAddress &g QNetworkInterface QNativeSocketEnginePrivate::nativeMulticastInterface() const { - if (socketProtocol == QAbstractSocket::IPv6Protocol) { + if (socketProtocol == QAbstractSocket::IPv6Protocol || socketProtocol == QAbstractSocket::AnyIPProtocol) { uint v; QT_SOCKOPTLEN_T sizeofv = sizeof(v); if (::getsockopt(socketDescriptor, IPPROTO_IPV6, IPV6_MULTICAST_IF, (char *) &v, &sizeofv) == -1) @@ -1071,7 +1050,7 @@ QNetworkInterface QNativeSocketEnginePrivate::nativeMulticastInterface() const bool QNativeSocketEnginePrivate::nativeSetMulticastInterface(const QNetworkInterface &iface) { - if (socketProtocol == QAbstractSocket::IPv6Protocol) { + if (socketProtocol == QAbstractSocket::IPv6Protocol || socketProtocol == QAbstractSocket::AnyIPProtocol) { uint v = iface.isValid() ? iface.index() : 0; return (::setsockopt(socketDescriptor, IPPROTO_IPV6, IPV6_MULTICAST_IF, (char *) &v, sizeof(v)) != -1); } diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp similarity index 63% rename from Telegram/_qt_5_4_0_patch/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp rename to Telegram/_qt_5_5_0_patch/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp index efa70140a..190683ef9 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -52,37 +52,6 @@ QT_BEGIN_NAMESPACE -typedef struct { - quint16 majorVersion; - quint16 minorVersion; - quint16 numTables; - quint16 searchRange; - quint16 entrySelector; - quint16 rangeShift; -} OFFSET_TABLE; - -typedef struct { - quint32 tag; - quint32 checkSum; - quint32 offset; - quint32 length; -} TABLE_DIRECTORY; - -typedef struct { - quint16 fontSelector; - quint16 nrCount; - quint16 storageOffset; -} NAME_TABLE_HEADER; - -typedef struct { - quint16 platformID; - quint16 encodingID; - quint16 languageID; - quint16 nameID; - quint16 stringLength; - quint16 stringOffset; -} NAME_RECORD; - void QBasicFontDatabase::populateFontDatabase() { QString fontpath = fontDir(); @@ -106,6 +75,24 @@ void QBasicFontDatabase::populateFontDatabase() } } +inline static void setHintingPreference(QFontEngine *engine, QFont::HintingPreference hintingPreference) +{ + switch (hintingPreference) { + case QFont::PreferNoHinting: + engine->setDefaultHintStyle(QFontEngineFT::HintNone); + break; + case QFont::PreferFullHinting: + engine->setDefaultHintStyle(QFontEngineFT::HintFull); + break; + case QFont::PreferVerticalHinting: + engine->setDefaultHintStyle(QFontEngineFT::HintLight); + break; + case QFont::PreferDefaultHinting: + // Leave it as it is + break; + } +} + QFontEngine *QBasicFontDatabase::fontEngine(const QFontDef &fontDef, void *usrPtr) { FontFile *fontfile = static_cast (usrPtr); @@ -114,12 +101,24 @@ QFontEngine *QBasicFontDatabase::fontEngine(const QFontDef &fontDef, void *usrPt fid.index = fontfile->indexValue; bool antialias = !(fontDef.styleStrategy & QFont::NoAntialias); - QFontEngineFT::GlyphFormat format = antialias? QFontEngineFT::Format_A8 : QFontEngineFT::Format_Mono; - QFontEngineFT *engine = new QFontEngineFT(fontDef); + QFontEngineFT::GlyphFormat format = QFontEngineFT::Format_Mono; + if (antialias) { + QFontEngine::SubpixelAntialiasingType subpixelType = subpixelAntialiasingTypeHint(); + if (subpixelType == QFontEngine::Subpixel_None || (fontDef.styleStrategy & QFont::NoSubpixelAntialias)) { + format = QFontEngineFT::Format_A8; + engine->subpixelType = QFontEngine::Subpixel_None; + } else { + format = QFontEngineFT::Format_A32; + engine->subpixelType = subpixelType; + } + } + if (!engine->init(fid, antialias, format) || engine->invalid()) { delete engine; engine = 0; + } else { + setHintingPreference(engine, static_cast(fontDef.hintingPreference)); } return engine; @@ -172,21 +171,7 @@ QFontEngine *QBasicFontDatabase::fontEngine(const QByteArray &fontData, qreal pi } fe->updateFamilyNameAndStyle(); - - switch (hintingPreference) { - case QFont::PreferNoHinting: - fe->setDefaultHintStyle(QFontEngineFT::HintNone); - break; - case QFont::PreferFullHinting: - fe->setDefaultHintStyle(QFontEngineFT::HintFull); - break; - case QFont::PreferVerticalHinting: - fe->setDefaultHintStyle(QFontEngineFT::HintLight); - break; - default: - // Leave it as it is - break; - } + setHintingPreference(fe, hintingPreference); return fe; } @@ -296,7 +281,7 @@ QStringList QBasicFontDatabase::addTTFile(const QByteArray &fontData, const QByt FT_Face face; FT_Error error; if (!fontData.isEmpty()) { - error = __ft_New_Memory_Face(library, (const FT_Byte *)fontData.constData(), fontData.size(), index, &face); + error = __ft_New_Memory_Face(library, (const FT_Byte *)fontData.constData(), fontData.size(), index, &face); } else { error = __ft_New_Face(library, file.constData(), index, &face); } @@ -347,41 +332,26 @@ QStringList QBasicFontDatabase::addTTFile(const QByteArray &fontData, const QByt if (supportedWritingSystems) *supportedWritingSystems = writingSystems; - if (os2->usWeightClass == 0) - ; - else if (os2->usWeightClass < 150) - weight = qt_thinFontWeight; - else if (os2->usWeightClass < 250) - weight = qt_extralightFontWeight; - else if (os2->usWeightClass < 350) - weight = QFont::Light; - else if (os2->usWeightClass < 450) - weight = QFont::Normal; - else if (os2->usWeightClass < 550) - weight = qt_mediumFontWeight; - else if (os2->usWeightClass < 650) - weight = QFont::DemiBold; - else if (os2->usWeightClass < 750) - weight = QFont::Bold; - else if (os2->usWeightClass < 1000) - weight = QFont::Black; - - if (os2->panose[2] >= 2) { + if (os2->usWeightClass) { + weight = QPlatformFontDatabase::weightFromInteger(os2->usWeightClass); + } else if (os2->panose[2]) { int w = os2->panose[2]; if (w <= 1) - weight = qt_thinFontWeight; + weight = QFont::Thin; else if (w <= 2) - weight = qt_extralightFontWeight; + weight = QFont::ExtraLight; else if (w <= 3) weight = QFont::Light; else if (w <= 5) weight = QFont::Normal; else if (w <= 6) - weight = qt_mediumFontWeight; + weight = QFont::Medium; else if (w <= 7) weight = QFont::DemiBold; else if (w <= 8) weight = QFont::Bold; + else if (w <= 9) + weight = QFont::ExtraBold; else if (w <= 10) weight = QFont::Black; } @@ -404,92 +374,4 @@ QStringList QBasicFontDatabase::addTTFile(const QByteArray &fontData, const QByt return families; } -QString QBasicFontDatabase::fontNameFromTTFile(const QString &filename) -{ - QFile f(filename); - QString retVal; - qint64 bytesRead; - qint64 bytesToRead; - - if (f.open(QIODevice::ReadOnly)) { - OFFSET_TABLE ttOffsetTable; - bytesToRead = sizeof(OFFSET_TABLE); - bytesRead = f.read((char*)&ttOffsetTable, bytesToRead); - if (bytesToRead != bytesRead) - return retVal; - ttOffsetTable.numTables = qFromBigEndian(ttOffsetTable.numTables); - ttOffsetTable.majorVersion = qFromBigEndian(ttOffsetTable.majorVersion); - ttOffsetTable.minorVersion = qFromBigEndian(ttOffsetTable.minorVersion); - - if (ttOffsetTable.majorVersion != 1 || ttOffsetTable.minorVersion != 0) - return retVal; - - TABLE_DIRECTORY tblDir; - bool found = false; - - for (int i = 0; i < ttOffsetTable.numTables; i++) { - bytesToRead = sizeof(TABLE_DIRECTORY); - bytesRead = f.read((char*)&tblDir, bytesToRead); - if (bytesToRead != bytesRead) - return retVal; - if (qFromBigEndian(tblDir.tag) == MAKE_TAG('n', 'a', 'm', 'e')) { - found = true; - tblDir.length = qFromBigEndian(tblDir.length); - tblDir.offset = qFromBigEndian(tblDir.offset); - break; - } - } - - if (found) { - f.seek(tblDir.offset); - NAME_TABLE_HEADER ttNTHeader; - bytesToRead = sizeof(NAME_TABLE_HEADER); - bytesRead = f.read((char*)&ttNTHeader, bytesToRead); - if (bytesToRead != bytesRead) - return retVal; - ttNTHeader.nrCount = qFromBigEndian(ttNTHeader.nrCount); - ttNTHeader.storageOffset = qFromBigEndian(ttNTHeader.storageOffset); - NAME_RECORD ttRecord; - found = false; - - for (int i = 0; i < ttNTHeader.nrCount; i++) { - bytesToRead = sizeof(NAME_RECORD); - bytesRead = f.read((char*)&ttRecord, bytesToRead); - if (bytesToRead != bytesRead) - return retVal; - ttRecord.nameID = qFromBigEndian(ttRecord.nameID); - if (ttRecord.nameID == 1) { - ttRecord.stringLength = qFromBigEndian(ttRecord.stringLength); - ttRecord.stringOffset = qFromBigEndian(ttRecord.stringOffset); - int nPos = f.pos(); - f.seek(tblDir.offset + ttRecord.stringOffset + ttNTHeader.storageOffset); - - QByteArray nameByteArray = f.read(ttRecord.stringLength); - if (!nameByteArray.isEmpty()) { - if (ttRecord.encodingID == 256 || ttRecord.encodingID == 768) { - //This is UTF-16 in big endian - int stringLength = ttRecord.stringLength / 2; - retVal.resize(stringLength); - QChar *data = retVal.data(); - const ushort *srcData = (const ushort *)nameByteArray.data(); - for (int i = 0; i < stringLength; ++i) - data[i] = qFromBigEndian(srcData[i]); - return retVal; - } else if (ttRecord.encodingID == 0) { - //This is Latin1 - retVal = QString::fromLatin1(nameByteArray); - } else { - qWarning("Could not retrieve Font name from file: %s", qPrintable(QDir::toNativeSeparators(filename))); - } - break; - } - f.seek(nPos); - } - } - } - f.close(); - } - return retVal; -} - QT_END_NAMESPACE diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp similarity index 87% rename from Telegram/_qt_5_4_0_patch/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp rename to Telegram/_qt_5_5_0_patch/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp index f4d6fcd13..9f1df7082 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -54,6 +54,13 @@ QT_BEGIN_NAMESPACE +static const int maxWeight = 99; + +static inline int mapToQtWeightForRange(int fcweight, int fcLower, int fcUpper, int qtLower, int qtUpper) +{ + return qtLower + ((fcweight - fcLower) * (qtUpper - qtLower)) / (fcUpper - fcLower); +} + static inline bool requiresOpenType(int writingSystem) { return ((writingSystem >= QFontDatabase::Syriac && writingSystem <= QFontDatabase::Sinhala) @@ -68,26 +75,28 @@ static inline int weightFromFcWeight(int fcweight) // mapping. This ensures that where there is a corresponding enum on both sides (for example // FC_WEIGHT_DEMIBOLD and QFont::DemiBold) we map one to the other but other values map // to intermediate Qt weights. - const int maxWeight = 99; - int qtweight; - if (fcweight < 0) - qtweight = 0; - else if (fcweight <= FC_WEIGHT_LIGHT) - qtweight = (fcweight * QFont::Light) / FC_WEIGHT_LIGHT; - else if (fcweight <= FC_WEIGHT_NORMAL) - qtweight = QFont::Light + ((fcweight - FC_WEIGHT_LIGHT) * (QFont::Normal - QFont::Light)) / (FC_WEIGHT_NORMAL - FC_WEIGHT_LIGHT); - else if (fcweight <= FC_WEIGHT_DEMIBOLD) - qtweight = QFont::Normal + ((fcweight - FC_WEIGHT_NORMAL) * (QFont::DemiBold - QFont::Normal)) / (FC_WEIGHT_DEMIBOLD - FC_WEIGHT_NORMAL); - else if (fcweight <= FC_WEIGHT_BOLD) - qtweight = QFont::DemiBold + ((fcweight - FC_WEIGHT_DEMIBOLD) * (QFont::Bold - QFont::DemiBold)) / (FC_WEIGHT_BOLD - FC_WEIGHT_DEMIBOLD); - else if (fcweight <= FC_WEIGHT_BLACK) - qtweight = QFont::Bold + ((fcweight - FC_WEIGHT_BOLD) * (QFont::Black - QFont::Bold)) / (FC_WEIGHT_BLACK - FC_WEIGHT_BOLD); - else if (fcweight <= FC_WEIGHT_ULTRABLACK) - qtweight = QFont::Black + ((fcweight - FC_WEIGHT_BLACK) * (maxWeight - QFont::Black)) / (FC_WEIGHT_ULTRABLACK - FC_WEIGHT_BLACK); - else - qtweight = maxWeight; - return qtweight; + if (fcweight <= FC_WEIGHT_THIN) + return QFont::Thin; + if (fcweight <= FC_WEIGHT_ULTRALIGHT) + return mapToQtWeightForRange(fcweight, FC_WEIGHT_THIN, FC_WEIGHT_ULTRALIGHT, QFont::Thin, QFont::ExtraLight); + if (fcweight <= FC_WEIGHT_LIGHT) + return mapToQtWeightForRange(fcweight, FC_WEIGHT_ULTRALIGHT, FC_WEIGHT_LIGHT, QFont::ExtraLight, QFont::Light); + if (fcweight <= FC_WEIGHT_NORMAL) + return mapToQtWeightForRange(fcweight, FC_WEIGHT_LIGHT, FC_WEIGHT_NORMAL, QFont::Light, QFont::Normal); + if (fcweight <= FC_WEIGHT_MEDIUM) + return mapToQtWeightForRange(fcweight, FC_WEIGHT_NORMAL, FC_WEIGHT_MEDIUM, QFont::Normal, QFont::Medium); + if (fcweight <= FC_WEIGHT_DEMIBOLD) + return mapToQtWeightForRange(fcweight, FC_WEIGHT_MEDIUM, FC_WEIGHT_DEMIBOLD, QFont::Medium, QFont::DemiBold); + if (fcweight <= FC_WEIGHT_BOLD) + return mapToQtWeightForRange(fcweight, FC_WEIGHT_DEMIBOLD, FC_WEIGHT_BOLD, QFont::DemiBold, QFont::Bold); + if (fcweight <= FC_WEIGHT_ULTRABOLD) + return mapToQtWeightForRange(fcweight, FC_WEIGHT_BOLD, FC_WEIGHT_ULTRABOLD, QFont::Bold, QFont::ExtraBold); + if (fcweight <= FC_WEIGHT_BLACK) + return mapToQtWeightForRange(fcweight, FC_WEIGHT_ULTRABOLD, FC_WEIGHT_BLACK, QFont::ExtraBold, QFont::Black); + if (fcweight <= FC_WEIGHT_ULTRABLACK) + return mapToQtWeightForRange(fcweight, FC_WEIGHT_BLACK, FC_WEIGHT_ULTRABLACK, QFont::Black, maxWeight); + return maxWeight; } static inline int stretchFromFcWidth(int fcwidth) @@ -209,7 +218,30 @@ static const char *specialLanguages[] = { "hmd", // Miao "sa", // Sharada "srb", // SoraSompeng - "doi" // Takri + "doi", // Takri + "lez", // CaucasianAlbanian + "bsq", // BassaVah + "fr", // Duployan + "sq", // Elbasan + "sa", // Grantha + "hnj", // PahawhHmong + "sd", // Khojki + "lab", // LinearA + "hi", // Mahajani + "xmn", // Manichaean + "men", // MendeKikakui + "mr", // Modi + "mru", // Mro + "xna", // OldNorthArabian + "arc", // Nabataean + "arc", // Palmyrene + "ctd", // PauCinHau + "kv", // OldPermic + "pal", // PsalterPahlavi + "sa", // Siddham + "sd", // Khudawadi + "mai", // Tirhuta + "hoc" // WarangCiti }; Q_STATIC_ASSERT(sizeof(specialLanguages) / sizeof(const char *) == QChar::ScriptCount); @@ -270,7 +302,7 @@ static const char *openType[] = { "deva", // Devanagari "beng", // Bengali "guru", // Gurmukhi - "gurj", // Gujarati + "gujr", // Gujarati "orya", // Oriya "taml", // Tamil "telu", // Telugu @@ -530,6 +562,28 @@ QFontEngine::HintStyle defaultHintStyleFromMatch(QFont::HintingPreference hintin break; } + if (QGuiApplication::platformNativeInterface()->nativeResourceForScreen("nofonthinting", + QGuiApplication::primaryScreen())) { + return QFontEngine::HintNone; + } + + int hint_style = 0; + if (FcPatternGetInteger (match, FC_HINT_STYLE, 0, &hint_style) == FcResultMatch) { + switch (hint_style) { + case FC_HINT_NONE: + return QFontEngine::HintNone; + case FC_HINT_SLIGHT: + return QFontEngine::HintLight; + case FC_HINT_MEDIUM: + return QFontEngine::HintMedium; + case FC_HINT_FULL: + return QFontEngine::HintFull; + default: + Q_UNREACHABLE(); + break; + } + } + if (useXftConf) { void *hintStyleResource = QGuiApplication::platformNativeInterface()->nativeResourceForScreen("hintstyle", @@ -539,27 +593,31 @@ QFontEngine::HintStyle defaultHintStyleFromMatch(QFont::HintingPreference hintin return QFontEngine::HintStyle(hintStyle - 1); } - int hint_style = 0; - if (FcPatternGetInteger (match, FC_HINT_STYLE, 0, &hint_style) == FcResultNoMatch) - hint_style = FC_HINT_FULL; - switch (hint_style) { - case FC_HINT_NONE: - return QFontEngine::HintNone; - case FC_HINT_SLIGHT: - return QFontEngine::HintLight; - case FC_HINT_MEDIUM: - return QFontEngine::HintMedium; - case FC_HINT_FULL: - return QFontEngine::HintFull; - default: - Q_UNREACHABLE(); - break; - } return QFontEngine::HintFull; } QFontEngine::SubpixelAntialiasingType subpixelTypeFromMatch(FcPattern *match, bool useXftConf) { + int subpixel = FC_RGBA_UNKNOWN; + if (FcPatternGetInteger(match, FC_RGBA, 0, &subpixel) == FcResultMatch) { + switch (subpixel) { + case FC_RGBA_UNKNOWN: + case FC_RGBA_NONE: + return QFontEngine::Subpixel_None; + case FC_RGBA_RGB: + return QFontEngine::Subpixel_RGB; + case FC_RGBA_BGR: + return QFontEngine::Subpixel_BGR; + case FC_RGBA_VRGB: + return QFontEngine::Subpixel_VRGB; + case FC_RGBA_VBGR: + return QFontEngine::Subpixel_VBGR; + default: + Q_UNREACHABLE(); + break; + } + } + if (useXftConf) { void *subpixelTypeResource = QGuiApplication::platformNativeInterface()->nativeResourceForScreen("subpixeltype", @@ -569,25 +627,6 @@ QFontEngine::SubpixelAntialiasingType subpixelTypeFromMatch(FcPattern *match, bo return QFontEngine::SubpixelAntialiasingType(subpixelType - 1); } - int subpixel = FC_RGBA_UNKNOWN; - FcPatternGetInteger(match, FC_RGBA, 0, &subpixel); - - switch (subpixel) { - case FC_RGBA_UNKNOWN: - case FC_RGBA_NONE: - return QFontEngine::Subpixel_None; - case FC_RGBA_RGB: - return QFontEngine::Subpixel_RGB; - case FC_RGBA_BGR: - return QFontEngine::Subpixel_BGR; - case FC_RGBA_VRGB: - return QFontEngine::Subpixel_VRGB; - case FC_RGBA_VBGR: - return QFontEngine::Subpixel_VBGR; - default: - Q_UNREACHABLE(); - break; - } return QFontEngine::Subpixel_None; } } // namespace @@ -836,10 +875,8 @@ void QFontconfigDatabase::setupFontEngine(QFontEngineFT *engine, const QFontDef QGuiApplication::platformNativeInterface()->nativeResourceForScreen("antialiasingEnabled", QGuiApplication::primaryScreen()); int antialiasingEnabled = int(reinterpret_cast(antialiasResource)); - if (antialiasingEnabled > 0) { + if (antialiasingEnabled > 0) antialias = antialiasingEnabled - 1; - forcedAntialiasSetting = true; - } } QFontEngine::GlyphFormat format; diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm b/Telegram/_qt_5_5_0_patch/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm similarity index 90% rename from Telegram/_qt_5_4_0_patch/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm rename to Telegram/_qt_5_5_0_patch/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm index fe87ca137..1594dacbc 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm @@ -1,40 +1,32 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL$ +** $QT_BEGIN_LICENSE:LGPL21$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** ** $QT_END_LICENSE$ ** ****************************************************************************/ @@ -56,6 +48,18 @@ QT_BEGIN_NAMESPACE +namespace { +class AutoReleasePool +{ +public: + AutoReleasePool(): pool([[NSAutoreleasePool alloc] init]) {} + ~AutoReleasePool() { [pool release]; } + +private: + NSAutoreleasePool *pool; +}; +} + // this could become a list of all languages used for each writing // system, instead of using the single most common language. static const char *languageForWritingSystem[] = { @@ -177,6 +181,8 @@ QCoreTextFontDatabase::QCoreTextFontDatabase() QCoreTextFontDatabase::~QCoreTextFontDatabase() { + foreach (CTFontDescriptorRef ref, m_systemFontDescriptors) + CFRelease(ref); } static CFArrayRef availableFamilyNames() @@ -268,47 +274,37 @@ static void getFontDescription(CTFontDescriptorRef font, FontDescription *fd) fd->fixedPitch = false; if (QCFType tempFont = CTFontCreateWithFontDescriptor(font, 0.0, 0)) { - uint length = 0; uint tag = MAKE_TAG('O', 'S', '/', '2'); CTFontRef tempFontRef = tempFont; void *userData = reinterpret_cast(&tempFontRef); - if (QCoreTextFontEngine::ct_getSfntTable(userData, tag, 0, &length)) { - QVarLengthArray os2Table(length); - if (length >= 86 && QCoreTextFontEngine::ct_getSfntTable(userData, tag, os2Table.data(), &length)) { - quint32 unicodeRange[4] = { - qFromBigEndian(os2Table.data() + 42), - qFromBigEndian(os2Table.data() + 46), - qFromBigEndian(os2Table.data() + 50), - qFromBigEndian(os2Table.data() + 54) - }; - quint32 codePageRange[2] = { qFromBigEndian(os2Table.data() + 78), - qFromBigEndian(os2Table.data() + 82) }; - fd->writingSystems = QPlatformFontDatabase::writingSystemsFromTrueTypeBits(unicodeRange, codePageRange); + uint length = 128; + QVarLengthArray os2Table(length); + if (QCoreTextFontEngine::ct_getSfntTable(userData, tag, os2Table.data(), &length) && length >= 86) { + if (length > uint(os2Table.length())) { + os2Table.resize(length); + if (!QCoreTextFontEngine::ct_getSfntTable(userData, tag, os2Table.data(), &length)) + Q_UNREACHABLE(); + Q_ASSERT(length >= 86); } + quint32 unicodeRange[4] = { + qFromBigEndian(os2Table.data() + 42), + qFromBigEndian(os2Table.data() + 46), + qFromBigEndian(os2Table.data() + 50), + qFromBigEndian(os2Table.data() + 54) + }; + quint32 codePageRange[2] = { + qFromBigEndian(os2Table.data() + 78), + qFromBigEndian(os2Table.data() + 82) + }; + fd->writingSystems = QPlatformFontDatabase::writingSystemsFromTrueTypeBits(unicodeRange, codePageRange); } } if (styles) { if (CFNumberRef weightValue = (CFNumberRef) CFDictionaryGetValue(styles, kCTFontWeightTrait)) { - double normalizedWeight; - if (CFNumberGetValue(weightValue, kCFNumberDoubleType, &normalizedWeight)) { - if (normalizedWeight >= 0.62) - fd->weight = QFont::Black; - else if (normalizedWeight >= 0.4) - fd->weight = QFont::Bold; - else if (normalizedWeight >= 0.3) - fd->weight = QFont::DemiBold; - else if (normalizedWeight >= 0.2) - fd->weight = qt_mediumFontWeight; - else if (normalizedWeight == 0.0) - fd->weight = QFont::Normal; - else if (normalizedWeight <= -0.4) - fd->weight = QFont::Light; - else if (normalizedWeight <= -0.6) - fd->weight = qt_extralightFontWeight; - else if (normalizedWeight <= -0.8) - fd->weight = qt_thinFontWeight; - } + float normalizedWeight; + if (CFNumberGetValue(weightValue, kCFNumberFloatType, &normalizedWeight)) + fd->weight = QCoreTextFontEngine::qtWeightFromCFWeight(normalizedWeight); } if (CFNumberRef italic = (CFNumberRef) CFDictionaryGetValue(styles, kCTFontSlantTrait)) { double d; @@ -356,11 +352,7 @@ void QCoreTextFontDatabase::populateFromDescriptor(CTFontDescriptorRef font) { FontDescription fd; getFontDescription(font, &fd); - populateFromFontDescription(font, fd); -} -void QCoreTextFontDatabase::populateFromFontDescription(CTFontDescriptorRef font, const FontDescription &fd) -{ CFRetain(font); QPlatformFontDatabase::registerFont(fd.familyName, fd.styleName, fd.foundryName, fd.weight, fd.style, fd.stretch, true /* antialiased */, true /* scalable */, @@ -372,6 +364,8 @@ void QCoreTextFontDatabase::releaseHandle(void *handle) CFRelease(CTFontDescriptorRef(handle)); } +extern CGAffineTransform qt_transform_from_fontdef(const QFontDef &fontDef); + QFontEngine *QCoreTextFontDatabase::fontEngine(const QFontDef &f, void *usrPtr) { qreal scaledPointSize = f.pixelSize; @@ -386,7 +380,8 @@ QFontEngine *QCoreTextFontDatabase::fontEngine(const QFontDef &f, void *usrPtr) scaledPointSize = f.pointSize; CTFontDescriptorRef descriptor = (CTFontDescriptorRef) usrPtr; - CTFontRef font = CTFontCreateWithFontDescriptor(descriptor, scaledPointSize, NULL); + CGAffineTransform matrix = qt_transform_from_fontdef(f); + CTFontRef font = CTFontCreateWithFontDescriptor(descriptor, scaledPointSize, &matrix); if (font) { QFontEngine *engine = new QCoreTextFontEngine(font, f); engine->fontDef = f; @@ -462,6 +457,8 @@ QStringList QCoreTextFontDatabase::fallbacksForFamily(const QString &family, QFo Q_UNUSED(style); Q_UNUSED(script); + AutoReleasePool pool; + static QHash fallbackLists; if (!family.isEmpty()) { @@ -830,7 +827,11 @@ QFont *QCoreTextFontDatabase::themeFont(QPlatformTheme::Font f) const CTFontDescriptorRef fontDesc = fontDescriptorFromTheme(f); FontDescription fd; getFontDescription(fontDesc, &fd); - m_systemFontDescriptors.insert(fontDesc); + + if (!m_systemFontDescriptors.contains(fontDesc)) + m_systemFontDescriptors.insert(fontDesc); + else + CFRelease(fontDesc); QFont *font = new QFont(fd.familyName, fd.pixelSize, fd.weight, fd.style == QFont::StyleItalic); return font; @@ -846,6 +847,11 @@ QFont QCoreTextFontDatabase::defaultFont() const return QFont(defaultFontName); } +bool QCoreTextFontDatabase::fontsAlwaysScalable() const +{ + return true; +} + QList QCoreTextFontDatabase::standardSizes() const { QList ret; diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm similarity index 92% rename from Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm rename to Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm index 5df151437..643ebdd53 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm @@ -1,40 +1,32 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL$ +** $QT_BEGIN_LICENSE:LGPL21$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** ** $QT_END_LICENSE$ ** ****************************************************************************/ @@ -88,12 +80,14 @@ QT_USE_NAMESPACE +QT_BEGIN_NAMESPACE static QCocoaApplicationDelegate *sharedCocoaApplicationDelegate = nil; static void cleanupCocoaApplicationDelegate() { [sharedCocoaApplicationDelegate release]; } +QT_END_NAMESPACE @implementation QCocoaApplicationDelegate diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm similarity index 91% rename from Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm rename to Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm index 7f7bd24f4..9c695aaec 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm @@ -1,41 +1,33 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2015 The Qt Company Ltd. ** Copyright (C) 2012 Klaralvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Christoph Schleifenbaum -** Contact: http://www.qt-project.org/legal +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL$ +** $QT_BEGIN_LICENSE:LGPL21$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** ** $QT_END_LICENSE$ ** ****************************************************************************/ @@ -102,7 +94,7 @@ QT_USE_NAMESPACE QCocoaSystemTrayIcon *systray; NSStatusItem *item; QCocoaMenu *menu; - bool menuVisible, iconSelected; + bool menuVisible, iconSelected; QIcon icon; QT_MANGLE_NAMESPACE(QNSImageView) *imageCell; } @@ -188,7 +180,7 @@ void QCocoaSystemTrayIcon::cleanup() } static bool heightCompareFunction (QSize a, QSize b) { return (a.height() < b.height()); } -static QList sortByHeight(const QList sizes) +static QList sortByHeight(const QList &sizes) { QList sorted = sizes; std::sort(sorted.begin(), sorted.end(), heightCompareFunction); @@ -216,7 +208,7 @@ void QCocoaSystemTrayIcon::updateIcon(const QIcon &icon) // devicePixelRatio for the "best" screen on the system. qreal devicePixelRatio = qApp->devicePixelRatio(); const int maxPixmapHeight = maxImageHeight * devicePixelRatio; - const QIcon::Mode mode = m_sys->item->iconSelected ? QIcon::Selected : QIcon::Normal; + const QIcon::Mode mode = m_sys->item->iconSelected ? QIcon::Selected : QIcon::Normal; QSize selectedSize; Q_FOREACH (const QSize& size, sortByHeight(icon.availableSizes(mode))) { // Select a pixmap based on the height. We want the largest pixmap @@ -232,6 +224,10 @@ void QCocoaSystemTrayIcon::updateIcon(const QIcon &icon) } } + // Handle SVG icons, which do not return anything for availableSizes(). + if (!selectedSize.isValid()) + selectedSize = icon.actualSize(QSize(maxPixmapHeight, maxPixmapHeight), mode); + QPixmap pixmap = icon.pixmap(selectedSize, mode); // Draw a low-resolution icon if there is not enough pixels for a retina @@ -391,8 +387,8 @@ QT_END_NAMESPACE down = YES; int clickCount = [mouseEvent clickCount]; [self setNeedsDisplay:YES]; - - parent->iconSelected = (clickCount != 2) && parent->menu; + + parent->iconSelected = (clickCount != 2) && parent->menu; parent->systray->updateIcon(parent->icon); if (clickCount == 2) { @@ -445,7 +441,7 @@ QT_END_NAMESPACE } -(void)drawRect:(NSRect)rect { - [[parent item] drawStatusBarBackgroundInRect:rect withHighlight:parent->menu ? down : NO]; + [[parent item] drawStatusBarBackgroundInRect:rect withHighlight:parent->menu ? down : NO]; [super drawRect:rect]; } @end @@ -458,7 +454,7 @@ QT_END_NAMESPACE if (self) { item = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength] retain]; menu = 0; - menuVisible = false; + menuVisible = false; systray = sys; imageCell = [[QNSImageView alloc] initWithParent:self]; [item setView: imageCell]; @@ -468,6 +464,7 @@ QT_END_NAMESPACE -(void)dealloc { [[NSStatusBar systemStatusBar] removeStatusItem:item]; + [[NSNotificationCenter defaultCenter] removeObserver:imageCell]; [imageCell release]; [item release]; [super dealloc]; @@ -502,7 +499,7 @@ QT_END_NAMESPACE selector:@selector(menuTrackingDone:) name:NSMenuDidEndTrackingNotification object:m]; - menuVisible = true; + menuVisible = true; [item popUpStatusItemMenu: m]; } } diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm similarity index 93% rename from Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm rename to Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm index 486fda0ff..d18884ad5 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -1,40 +1,32 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL$ +** $QT_BEGIN_LICENSE:LGPL21$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** ** $QT_END_LICENSE$ ** ****************************************************************************/ @@ -82,31 +74,6 @@ static bool isMouseEvent(NSEvent *ev) } } -static void selectNextKeyWindow(NSWindow *currentKeyWindow) -{ - if (!currentKeyWindow) - return; - - const QCocoaAutoReleasePool pool; - - if ([[NSApplication sharedApplication] keyWindow] != currentKeyWindow) - return;//currentKeyWindow is not a key window actually. - - NSArray *const windows = [[NSApplication sharedApplication] windows]; - bool startLookup = false; - for (NSWindow *candidate in [windows reverseObjectEnumerator]) { - if (!startLookup) { - if (candidate == currentKeyWindow) - startLookup = true; - } else { - if ([candidate isVisible] && [candidate canBecomeKeyWindow]) { - [candidate makeKeyWindow]; - break; - } - } - } -} - @implementation QNSWindowHelper @synthesize window = _window; @@ -379,6 +346,7 @@ QCocoaWindow::QCocoaWindow(QWindow *tlw) , m_synchedWindowState(Qt::WindowActive) , m_windowModality(Qt::NonModal) , m_windowUnderMouse(false) + , m_ignoreWindowShouldClose(false) , m_inConstructor(true) , m_inSetVisible(false) , m_inSetGeometry(false) @@ -447,11 +415,28 @@ QCocoaWindow::~QCocoaWindow() if (m_isNSWindowChild) { if (m_parentCocoaWindow) m_parentCocoaWindow->removeChildWindow(this); - } else if (parent()) { + } else if ([m_contentView superview]) { [m_contentView removeFromSuperview]; - } else if (m_qtView) { - [[NSNotificationCenter defaultCenter] removeObserver:m_qtView - name:nil object:m_nsWindow]; + } + + // Make sure to disconnect observer in all case if view is valid + // to avoid notifications received when deleting when using Qt::AA_NativeWindows attribute + if (m_qtView) { + [[NSNotificationCenter defaultCenter] removeObserver:m_qtView]; + } + + // The QNSView object may outlive the corresponding QCocoaWindow object, + // for example during app shutdown when the QNSView is embedded in a + // foregin NSView hiearchy. Clear the pointers to the QWindow/QCocoaWindow + // here to make sure QNSView does not dereference stale pointers. + if (m_qtView) { + [m_qtView clearQWindowPointers]; + } + + // While it is unlikely that this window will be in the popup stack + // during deletetion we clear any pointers here to make sure. + if (QCocoaIntegration::instance()) { + QCocoaIntegration::instance()->popupWindowStack()->removeAll(this); } foreach (QCocoaWindow *child, m_childWindows) { @@ -466,7 +451,13 @@ QCocoaWindow::~QCocoaWindow() QSurfaceFormat QCocoaWindow::format() const { - return window()->requestedFormat(); + QSurfaceFormat format = window()->requestedFormat(); + + // Upgrade the default surface format to include an alpha channel. The default RGB format + // causes Cocoa to spend an unreasonable amount of time converting it to RGBA internally. + if (format == QSurfaceFormat()) + format.setAlphaBufferSize(8); + return format; } void QCocoaWindow::setGeometry(const QRect &rectIn) @@ -599,9 +590,6 @@ void QCocoaWindow::hide(bool becauseOfAncestor) foreach (QCocoaWindow *childWindow, m_childWindows) childWindow->hide(true); - if (window()->transientParent() && m_nsWindow == [[NSApplication sharedApplication] keyWindow]) - selectNextKeyWindow(m_nsWindow); // Otherwise, Cocoa can do it wrong. - [m_nsWindow orderOut:nil]; } @@ -646,17 +634,17 @@ void QCocoaWindow::setVisible(bool visible) // We need to recreate if the modality has changed as the style mask will need updating if (m_windowModality != window()->modality()) recreateWindow(parent()); + + // Register popup windows. The Cocoa platform plugin will forward mouse events + // to them and close them when needed. + if (window()->type() == Qt::Popup || window()->type() == Qt::ToolTip) + QCocoaIntegration::instance()->pushPopupWindow(this); + if (parentCocoaWindow) { // The parent window might have moved while this window was hidden, // update the window geometry if there is a parent. setGeometry(window()->geometry()); - // Register popup windows so that the parent window can close them when needed. - if (window()->type() == Qt::Popup || window()->type() == Qt::ToolTip) { - // qDebug() << "transientParent and popup" << window()->type() << Qt::Popup << (window()->type() & Qt::Popup); - parentCocoaWindow->m_activePopupWindow = window(); - } - if (window()->type() == Qt::Popup) { // QTBUG-30266: a window should not be resizable while a transient popup is open // Since this isn't a native popup, the window manager doesn't close the popup when you click outside @@ -708,8 +696,10 @@ void QCocoaWindow::setVisible(bool visible) && [m_nsWindow isKindOfClass:[NSPanel class]]) { [(NSPanel *)m_nsWindow setWorksWhenModal:YES]; if (!(parentCocoaWindow && window()->transientParent()->isActive()) && window()->type() == Qt::Popup) { - monitor = [NSEvent addGlobalMonitorForEventsMatchingMask:NSLeftMouseDownMask|NSRightMouseDownMask|NSOtherMouseDown handler:^(NSEvent *) { - QWindowSystemInterface::handleMouseEvent(window(), QPointF(-1, -1), QPointF(window()->framePosition() - QPointF(1, 1)), Qt::LeftButton); + monitor = [NSEvent addGlobalMonitorForEventsMatchingMask:NSLeftMouseDownMask|NSRightMouseDownMask|NSOtherMouseDownMask|NSMouseMovedMask handler:^(NSEvent *e) { + QPointF localPoint = qt_mac_flipPoint([NSEvent mouseLocation]); + QWindowSystemInterface::handleMouseEvent(window(), window()->mapFromGlobal(localPoint.toPoint()), localPoint, + cocoaButton2QtButton([e buttonNumber])); }]; } } @@ -758,8 +748,11 @@ void QCocoaWindow::setVisible(bool visible) [NSEvent removeMonitor:monitor]; monitor = nil; } + + if (window()->type() == Qt::Popup || window()->type() == Qt::ToolTip) + QCocoaIntegration::instance()->popupWindowStack()->removeAll(this); + if (parentCocoaWindow && window()->type() == Qt::Popup) { - parentCocoaWindow->m_activePopupWindow = 0; if (m_resizableTransientParent && !([parentCocoaWindow->m_nsWindow styleMask] & NSFullScreenWindowMask)) // QTBUG-30266: a window should not be resizable while a transient popup is open @@ -806,9 +799,22 @@ NSUInteger QCocoaWindow::windowStyleMask(Qt::WindowFlags flags) if (flags & Qt::FramelessWindowHint) return styleMask; if ((type & Qt::Popup) == Qt::Popup) { - if (!windowIsPopupType(type)) - styleMask = (NSUtilityWindowMask | NSResizableWindowMask | NSClosableWindowMask | - NSMiniaturizableWindowMask | NSTitledWindowMask); + if (!windowIsPopupType(type)) { + styleMask = NSUtilityWindowMask; + if (!(flags & Qt::CustomizeWindowHint)) { + styleMask |= NSResizableWindowMask | NSClosableWindowMask | + NSMiniaturizableWindowMask | NSTitledWindowMask; + } else { + if (flags & Qt::WindowMaximizeButtonHint) + styleMask |= NSResizableWindowMask; + if (flags & Qt::WindowTitleHint) + styleMask |= NSTitledWindowMask; + if (flags & Qt::WindowCloseButtonHint) + styleMask |= NSClosableWindowMask; + if (flags & Qt::WindowMinimizeButtonHint) + styleMask |= NSMiniaturizableWindowMask; + } + } } else { if (type == Qt::Window && !(flags & Qt::CustomizeWindowHint)) { styleMask = (NSResizableWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSTitledWindowMask); @@ -1181,10 +1187,9 @@ void QCocoaWindow::setEmbeddedInForeignView(bool embedded) void QCocoaWindow::windowWillMove() { // Close any open popups on window move - if (m_activePopupWindow) { - QWindowSystemInterface::handleCloseEvent(m_activePopupWindow); + while (QCocoaWindow *popup = QCocoaIntegration::instance()->popPopupWindow()) { + QWindowSystemInterface::handleCloseEvent(popup->window()); QWindowSystemInterface::flushWindowSystemEvents(); - m_activePopupWindow = 0; } } @@ -1218,6 +1223,9 @@ void QCocoaWindow::windowDidEndLiveResize() bool QCocoaWindow::windowShouldClose() { + // might have been set from qnsview.mm + if (m_ignoreWindowShouldClose) + return false; bool accepted = false; QWindowSystemInterface::handleCloseEvent(window(), &accepted); QWindowSystemInterface::flushWindowSystemEvents(); @@ -1512,19 +1520,33 @@ void QCocoaWindow::syncWindowState(Qt::WindowState newState) } Qt::WindowState predictedState = newState; + if ((m_synchedWindowState & Qt::WindowMaximized) != (newState & Qt::WindowMaximized)) { + const int styleMask = [m_nsWindow styleMask]; + const bool usePerform = styleMask & NSResizableWindowMask; + [m_nsWindow setStyleMask:styleMask | NSResizableWindowMask]; + if (usePerform) + [m_nsWindow performZoom : m_nsWindow]; // toggles + else + [m_nsWindow zoom : m_nsWindow]; // toggles + [m_nsWindow setStyleMask:styleMask]; + } if ((m_synchedWindowState & Qt::WindowMinimized) != (newState & Qt::WindowMinimized)) { if (newState & Qt::WindowMinimized) { - [m_nsWindow performMiniaturize : m_nsWindow]; + if ([m_nsWindow styleMask] & NSMiniaturizableWindowMask) + [m_nsWindow performMiniaturize : m_nsWindow]; + else + [m_nsWindow miniaturize : m_nsWindow]; } else { [m_nsWindow deminiaturize : m_nsWindow]; } } + const bool effMax = m_effectivelyMaximized; if ((m_synchedWindowState & Qt::WindowMaximized) != (newState & Qt::WindowMaximized) || (m_effectivelyMaximized && newState == Qt::WindowNoState)) { if ((m_synchedWindowState & Qt::WindowFullScreen) == (newState & Qt::WindowFullScreen)) { [m_nsWindow zoom : m_nsWindow]; // toggles - m_effectivelyMaximized = !m_effectivelyMaximized; + m_effectivelyMaximized = !effMax; } else if (!(newState & Qt::WindowMaximized)) { // it would be nice to change the target geometry that toggleFullScreen will animate toward // but there is no known way, so the maximized state is not possible at this time diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/cocoa/qnsview.mm b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/cocoa/qnsview.mm similarity index 89% rename from Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/cocoa/qnsview.mm rename to Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/cocoa/qnsview.mm index 0357bf4b6..cfc8705e4 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/cocoa/qnsview.mm +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/cocoa/qnsview.mm @@ -1,40 +1,32 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL$ +** $QT_BEGIN_LICENSE:LGPL21$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** ** $QT_END_LICENSE$ ** ****************************************************************************/ @@ -83,7 +75,7 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; - (CGFloat)deviceDeltaZ; @end -@interface QNSViewMouseMoveHelper : NSObject +@interface QT_MANGLE_NAMESPACE(QNSViewMouseMoveHelper) : NSObject { QNSView *view; } @@ -97,7 +89,7 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; @end -@implementation QNSViewMouseMoveHelper +@implementation QT_MANGLE_NAMESPACE(QNSViewMouseMoveHelper) - (id)initWithView:(QNSView *)theView { @@ -158,13 +150,14 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; currentCustomDragTypes = 0; m_sendUpAsRightButton = false; m_inputSource = 0; - m_mouseMoveHelper = [[QNSViewMouseMoveHelper alloc] initWithView:self]; + m_mouseMoveHelper = [[QT_MANGLE_NAMESPACE(QNSViewMouseMoveHelper) alloc] initWithView:self]; m_resendKeyEvent = false; + m_scrolling = false; if (!touchDevice) { touchDevice = new QTouchDevice; touchDevice->setType(QTouchDevice::TouchPad); - touchDevice->setCapabilities(QTouchDevice::Position | QTouchDevice::NormalizedPosition); + touchDevice->setCapabilities(QTouchDevice::Position | QTouchDevice::NormalizedPosition | QTouchDevice::MouseEmulation); QWindowSystemInterface::registerTouchDevice(touchDevice); } } @@ -174,6 +167,7 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; - (void)dealloc { CGImageRelease(m_maskImage); + [m_trackingArea release]; m_maskImage = 0; m_window = 0; m_subscribesForGlobalFrameNotifications = false; @@ -195,6 +189,7 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; m_window = window; m_platformWindow = platformWindow; m_sendKeyEvent = false; + m_trackingArea = nil; #ifdef QT_COCOA_ENABLE_ACCESSIBILITY_INSPECTOR // prevent rift in space-time continuum, disable @@ -221,6 +216,12 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; return self; } +- (void) clearQWindowPointers +{ + m_window = 0; + m_platformWindow = 0; +} + #ifndef QT_NO_OPENGL - (void) setQCocoaGLContext:(QCocoaGLContext *)context { @@ -271,10 +272,13 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; if (self.window) { // This is the case of QWidgetAction's generated QWidget inserted in an NSMenu. // 10.9 and newer get the NSWindowDidChangeOcclusionStateNotification - if (!_q_NSWindowDidChangeOcclusionStateNotification - && [self.window.className isEqualToString:@"NSCarbonMenuWindow"]) + if ((!_q_NSWindowDidChangeOcclusionStateNotification + && [self.window.className isEqualToString:@"NSCarbonMenuWindow"])) { + m_exposedOnMoveToWindow = true; m_platformWindow->exposeWindow(); - } else { + } + } else if (m_exposedOnMoveToWindow) { + m_exposedOnMoveToWindow = false; m_platformWindow->obscureWindow(); } } @@ -366,6 +370,8 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; // calles, which Qt and Qt applications do not excpect. if (!m_platformWindow->m_inSetGeometry) QWindowSystemInterface::flushWindowSystemEvents(); + else + m_backingStore = QImage(); } } @@ -415,8 +421,8 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; && [notificationName isEqualToString:_q_NSWindowDidChangeOcclusionStateNotification]) { #if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_9 // ### HACK Remove the enum declaration, the warning disabling and the cast further down once 10.8 is unsupported -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wobjc-method-access" +QT_WARNING_PUSH +QT_WARNING_DISABLE_CLANG("-Wobjc-method-access") enum { NSWindowOcclusionStateVisible = 1UL << 1 }; #endif if ((NSUInteger)[self.window occlusionState] & NSWindowOcclusionStateVisible) { @@ -431,7 +437,7 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; m_platformWindow->obscureWindow(); } #if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_9 -#pragma clang diagnostic pop +QT_WARNING_POP #endif } else if (notificationName == NSWindowDidChangeScreenNotification) { if (m_window) { @@ -485,6 +491,8 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; - (BOOL) isOpaque { + if (!m_platformWindow) + return true; return m_platformWindow->isOpaque(); } @@ -689,6 +697,12 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; m_platformWindow->m_forwardWindow = 0; } + // Popups implicitly grap mouse events; forward to the active popup if there is one + if (QCocoaWindow *popup = QCocoaIntegration::instance()->activePopupWindow()) { + if (QNSView *popupView = popup->qtView()) + targetView = popupView; + } + [targetView convertFromScreen:[self screenMousePoint:theEvent] toWindowPoint:&qtWindowPoint andScreenPoint:&qtScreenPoint]; ulong timestamp = [theEvent timestamp] * 1000; @@ -739,12 +753,13 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; NSPoint windowPoint = [theEvent locationInWindow]; int windowScreenY = [window frame].origin.y + [window frame].size.height; - int viewScreenY = [window convertBaseToScreen:[self convertPoint:[self frame].origin toView:nil]].y; + NSPoint windowCoord = [self convertPoint:[self frame].origin toView:nil]; + int viewScreenY = [window convertRectToScreen:NSMakeRect(windowCoord.x, windowCoord.y, 0, 0)].origin.y; int titleBarHeight = windowScreenY - viewScreenY; NSPoint nsViewPoint = [self convertPoint: windowPoint fromView: nil]; QPoint qtWindowPoint = QPoint(nsViewPoint.x, titleBarHeight + nsViewPoint.y); - NSPoint screenPoint = [window convertBaseToScreen:windowPoint]; + NSPoint screenPoint = [window convertRectToScreen:NSMakeRect(windowPoint.x, windowPoint.y, 0, 0)].origin; QPoint qtScreenPoint = QPoint(screenPoint.x, qt_mac_flipYCoordinate(screenPoint.y)); ulong timestamp = [theEvent timestamp] * 1000; @@ -756,21 +771,41 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; if (m_window->flags() & Qt::WindowTransparentForInput) return [super mouseDown:theEvent]; m_sendUpAsRightButton = false; - if (m_platformWindow->m_activePopupWindow) { - Qt::WindowType type = m_platformWindow->m_activePopupWindow->type(); - QWindowSystemInterface::handleCloseEvent(m_platformWindow->m_activePopupWindow); - QWindowSystemInterface::flushWindowSystemEvents(); - m_platformWindow->m_activePopupWindow = 0; - // Consume the mouse event when closing the popup, except for tool tips - // were it's expected that the event is processed normally. - if (type != Qt::ToolTip) - return; - } - if ([self hasMarkedText]) { - NSInputManager* inputManager = [NSInputManager currentInputManager]; - if ([inputManager wantsToHandleMouseEvents]) { - [inputManager handleMouseEvent:theEvent]; + + // Handle any active poup windows; clicking outisde them should close them + // all. Don't do anything or clicks inside one of the menus, let Cocoa + // handle that case. Note that in practice many windows of the Qt::Popup type + // will actually close themselves in this case using logic implemented in + // that particular poup type (for example context menus). However, Qt expects + // that plain popup QWindows will also be closed, so we implement the logic + // here as well. + QList *popups = QCocoaIntegration::instance()->popupWindowStack(); + if (!popups->isEmpty()) { + // Check if the click is outside all popups. + bool inside = false; + QPointF qtScreenPoint = qt_mac_flipPoint([self screenMousePoint:theEvent]); + for (QList::const_iterator it = popups->begin(); it != popups->end(); ++it) { + if ((*it)->geometry().contains(qtScreenPoint.toPoint())) { + inside = true; + break; + } } + // Close the popups if the click was outside. + if (!inside) { + Qt::WindowType type = QCocoaIntegration::instance()->activePopupWindow()->window()->type(); + while (QCocoaWindow *popup = QCocoaIntegration::instance()->popPopupWindow()) { + QWindowSystemInterface::handleCloseEvent(popup->window()); + QWindowSystemInterface::flushWindowSystemEvents(); + } + // Consume the mouse event when closing the popup, except for tool tips + // were it's expected that the event is processed normally. + if (type != Qt::ToolTip) + return; + } + } + + if ([self hasMarkedText]) { + [[NSTextInputContext currentInputContext] handleEvent:theEvent]; } else { if ([QNSView convertKeyModifiers:[theEvent modifierFlags]] & Qt::MetaModifier) { m_buttons |= Qt::RightButton; @@ -808,19 +843,11 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; { [super updateTrackingAreas]; - // [NSView addTrackingArea] is slow, so bail out early if we can: - if (NSIsEmptyRect([self visibleRect])) - return; - - // Remove current trakcing areas: QCocoaAutoReleasePool pool; - if (NSArray *trackingArray = [self trackingAreas]) { - NSUInteger size = [trackingArray count]; - for (NSUInteger i = 0; i < size; ++i) { - NSTrackingArea *t = [trackingArray objectAtIndex:i]; - [self removeTrackingArea:t]; - } - } + + // NSTrackingInVisibleRect keeps care of updating once the tracking is set up, so bail out early + if (m_trackingArea && [[self trackingAreas] containsObject:m_trackingArea]) + return; // Ideally, we shouldn't have NSTrackingMouseMoved events included below, it should // only be turned on if mouseTracking, hover is on or a tool tip is set. @@ -830,12 +857,12 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; // is a performance hit). So it goes. NSUInteger trackingOptions = NSTrackingMouseEnteredAndExited | NSTrackingActiveInActiveApp | NSTrackingInVisibleRect | NSTrackingMouseMoved | NSTrackingCursorUpdate; - NSTrackingArea *ta = [[[NSTrackingArea alloc] initWithRect:[self frame] - options:trackingOptions - owner:m_mouseMoveHelper - userInfo:nil] - autorelease]; - [self addTrackingArea:ta]; + [m_trackingArea release]; + m_trackingArea = [[NSTrackingArea alloc] initWithRect:[self frame] + options:trackingOptions + owner:m_mouseMoveHelper + userInfo:nil]; + [self addTrackingArea:m_trackingArea]; } -(void)cursorUpdateImpl:(NSEvent *)theEvent @@ -925,6 +952,7 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; if (m_window->flags() & Qt::WindowTransparentForInput) return [super rightMouseDown:theEvent]; m_buttons |= Qt::RightButton; + m_sendUpAsRightButton = true; [self handleMouseEvent:theEvent]; } @@ -942,6 +970,7 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; if (m_window->flags() & Qt::WindowTransparentForInput) return [super rightMouseUp:theEvent]; m_buttons &= ~Qt::RightButton; + m_sendUpAsRightButton = false; [self handleMouseEvent:theEvent]; } @@ -1265,12 +1294,10 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent) { if (m_window->flags() & Qt::WindowTransparentForInput) return [super scrollWheel:theEvent]; - const EventRef carbonEvent = (EventRef)[theEvent eventRef]; - const UInt32 carbonEventKind = carbonEvent ? ::GetEventKind(carbonEvent) : 0; - const bool scrollEvent = carbonEventKind == kEventMouseScroll; QPoint angleDelta; - if (scrollEvent) { + Qt::MouseEventSource source = Qt::MouseEventNotSynthesized; + if ([theEvent hasPreciseScrollingDeltas]) { // The mouse device contains pixel scroll wheel support (Mighty Mouse, Trackpad). // Since deviceDelta is delivered as pixels rather than degrees, we need to // convert from pixels to degrees in a sensible manner. @@ -1279,8 +1306,8 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent) const int pixelsToDegrees = 2; // 8 * 1/4 angleDelta.setX([theEvent scrollingDeltaX] * pixelsToDegrees); angleDelta.setY([theEvent scrollingDeltaY] * pixelsToDegrees); + source = Qt::MouseEventSynthesizedBySystem; } else { - // carbonEventKind == kEventMouseWheelMoved // Remove acceleration, and use either -120 or 120 as delta: angleDelta.setX(qBound(-120, int([theEvent deltaX] * 10000), 120)); angleDelta.setY(qBound(-120, int([theEvent deltaY] * 10000), 120)); @@ -1321,19 +1348,24 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent) #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8 if (QSysInfo::QSysInfo::MacintoshVersion >= QSysInfo::MV_10_8) { // On 10.8 and above, MayBegin is likely to happen. We treat it the same as an actual begin. - if (phase == NSEventPhaseMayBegin || phase == NSEventPhaseBegan) - ph = Qt::ScrollBegin; - } else -#endif - if (phase == NSEventPhaseBegan) { - // On 10.7, MayBegin will not happen, so Began is the actual beginning. + if (phase == NSEventPhaseMayBegin || phase == NSEventPhaseBegan) { + m_scrolling = true; ph = Qt::ScrollBegin; } - if (phase == NSEventPhaseEnded || phase == NSEventPhaseCancelled) { + } +#endif + if (phase == NSEventPhaseBegan) { + // If MayBegin did not happen, Began is the actual beginning. + if (!m_scrolling) + ph = Qt::ScrollBegin; + m_scrolling = true; + } else if (phase == NSEventPhaseEnded || phase == NSEventPhaseCancelled || + momentumPhase == NSEventPhaseEnded || momentumPhase == NSEventPhaseCancelled) { ph = Qt::ScrollEnd; + m_scrolling = false; } - QWindowSystemInterface::handleWheelEvent(m_window, qt_timestamp, qt_windowPoint, qt_screenPoint, pixelDelta, angleDelta, currentWheelModifiers, ph); + QWindowSystemInterface::handleWheelEvent(m_window, qt_timestamp, qt_windowPoint, qt_screenPoint, pixelDelta, angleDelta, currentWheelModifiers, ph, source); } #endif //QT_NO_WHEELEVENT @@ -1403,6 +1435,10 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent) QObject *fo = QGuiApplication::focusObject(); if (m_sendKeyEvent && fo) { + // if escape is pressed we don't want interpretKeyEvents to close a dialog. This will be done via QWindowSystemInterface + if (keyCode == Qt::Key_Escape) + m_platformWindow->m_ignoreWindowShouldClose = true; + QInputMethodQueryEvent queryEvent(Qt::ImEnabled | Qt::ImHints); if (QCoreApplication::sendEvent(fo, &queryEvent)) { bool imEnabled = queryEvent.value(Qt::ImEnabled).toBool(); @@ -1412,6 +1448,8 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent) [self interpretKeyEvents:[NSArray arrayWithObject:nsevent]]; } } + + m_platformWindow->m_ignoreWindowShouldClose = false;; } if (m_resendKeyEvent) m_sendKeyEvent = true; @@ -1419,7 +1457,7 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent) if (m_sendKeyEvent && m_composingText.isEmpty()) QWindowSystemInterface::handleExtendedKeyEvent(focusWindow, timestamp, QEvent::Type(eventType), keyCode, modifiers, - nativeScanCode, nativeVirtualKey, nativeModifiers, text, [nsevent isARepeat]); + nativeScanCode, nativeVirtualKey, nativeModifiers, text, [nsevent isARepeat], 1, false); m_sendKeyEvent = false; m_resendKeyEvent = false; @@ -1451,7 +1489,8 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent) && qtKey == Qt::Key_Period) { [self handleKeyEvent:nsevent eventType:int(QEvent::KeyPress)]; return YES; - } else if ([nsevent modifierFlags] & NSControlKeyMask && (qtKey == Qt::Key_Tab || qtKey == Qt::Key_Backtab)) { + } else if ([nsevent modifierFlags] & NSControlKeyMask + && (qtKey == Qt::Key_Tab || qtKey == Qt::Key_Backtab)) { [self handleKeyEvent:nsevent eventType:int(QEvent::KeyPress)]; return YES; } @@ -1809,6 +1848,50 @@ static QPoint mapWindowCoordinates(QWindow *source, QWindow *target, QPoint poin return NO; } +- (void)updateCursorFromDragResponse:(QPlatformDragQtResponse)response drag:(QCocoaDrag *)drag +{ + const QPixmap pixmapCursor = drag->currentDrag()->dragCursor(response.acceptedAction()); + NSCursor *nativeCursor = nil; + + if (pixmapCursor.isNull()) { + switch (response.acceptedAction()) { + case Qt::CopyAction: + nativeCursor = [NSCursor dragCopyCursor]; + break; + case Qt::LinkAction: + nativeCursor = [NSCursor dragLinkCursor]; + break; + case Qt::IgnoreAction: + // Uncomment the next lines if forbiden cursor wanted on non droppable targets. + /*nativeCursor = [NSCursor operationNotAllowedCursor]; + break;*/ + case Qt::MoveAction: + default: + nativeCursor = [NSCursor arrowCursor]; + break; + } + } + else { + NSImage *nsimage = qt_mac_create_nsimage(pixmapCursor); + nativeCursor = [[NSCursor alloc] initWithImage:nsimage hotSpot:NSZeroPoint]; + [nsimage release]; + } + + // change the cursor + [nativeCursor set]; + + // Make sure the cursor is updated correctly if the mouse does not move and window is under cursor + // by creating a fake move event + const QPoint mousePos(QCursor::pos()); + CGEventRef moveEvent(CGEventCreateMouseEvent( + NULL, kCGEventMouseMoved, + CGPointMake(mousePos.x(), mousePos.y()), + kCGMouseButtonLeft // ignored + )); + CGEventPost(kCGHIDEventTap, moveEvent); + CFRelease(moveEvent); +} + - (NSDragOperation)draggingEntered:(id )sender { return [self handleDrag : sender]; @@ -1827,14 +1910,18 @@ static QPoint mapWindowCoordinates(QWindow *source, QWindow *target, QPoint poin Qt::DropActions qtAllowed = qt_mac_mapNSDragOperations([sender draggingSourceOperationMask]); QWindow *target = findEventTargetWindow(m_window); + if (!target) + return NSDragOperationNone; // update these so selecting move/copy/link works QGuiApplicationPrivate::modifier_buttons = [QNSView convertKeyModifiers: [[NSApp currentEvent] modifierFlags]]; QPlatformDragQtResponse response(false, Qt::IgnoreAction, QRect()); - if ([sender draggingSource] != nil) { - QCocoaDrag* nativeDrag = QCocoaIntegration::instance()->drag(); + QCocoaDrag* nativeDrag = QCocoaIntegration::instance()->drag(); + if (nativeDrag->currentDrag()) { + // The drag was started from within the application response = QWindowSystemInterface::handleDrag(target, nativeDrag->platformDropData(), mapWindowCoordinates(m_window, target, qt_windowPoint), qtAllowed); + [self updateCursorFromDragResponse:response drag:nativeDrag]; } else { QCocoaDropData mimeData([sender draggingPasteboard]); response = QWindowSystemInterface::handleDrag(target, &mimeData, mapWindowCoordinates(m_window, target, qt_windowPoint), qtAllowed); @@ -1846,6 +1933,8 @@ static QPoint mapWindowCoordinates(QWindow *source, QWindow *target, QPoint poin - (void)draggingExited:(id )sender { QWindow *target = findEventTargetWindow(m_window); + if (!target) + return; NSPoint windowPoint = [self convertPoint: [sender draggingLocation] fromView: nil]; QPoint qt_windowPoint(windowPoint.x, windowPoint.y); @@ -1858,14 +1947,17 @@ static QPoint mapWindowCoordinates(QWindow *source, QWindow *target, QPoint poin - (BOOL)performDragOperation:(id )sender { QWindow *target = findEventTargetWindow(m_window); + if (!target) + return false; NSPoint windowPoint = [self convertPoint: [sender draggingLocation] fromView: nil]; QPoint qt_windowPoint(windowPoint.x, windowPoint.y); Qt::DropActions qtAllowed = qt_mac_mapNSDragOperations([sender draggingSourceOperationMask]); QPlatformDropQtResponse response(false, Qt::IgnoreAction); - if ([sender draggingSource] != nil) { - QCocoaDrag* nativeDrag = QCocoaIntegration::instance()->drag(); + QCocoaDrag* nativeDrag = QCocoaIntegration::instance()->drag(); + if (nativeDrag->currentDrag()) { + // The drag was started from within the application response = QWindowSystemInterface::handleDrop(target, nativeDrag->platformDropData(), mapWindowCoordinates(m_window, target, qt_windowPoint), qtAllowed); } else { QCocoaDropData mimeData([sender draggingPasteboard]); @@ -1883,6 +1975,8 @@ static QPoint mapWindowCoordinates(QWindow *source, QWindow *target, QPoint poin Q_UNUSED(img); Q_UNUSED(operation); QWindow *target = findEventTargetWindow(m_window); + if (!target) + return; // keep our state, and QGuiApplication state (buttons member) in-sync, // or future mouse events will be processed incorrectly @@ -1892,7 +1986,7 @@ static QPoint mapWindowCoordinates(QWindow *source, QWindow *target, QPoint poin QPoint qtWindowPoint(windowPoint.x, windowPoint.y); NSWindow *window = [self window]; - NSPoint screenPoint = [window convertBaseToScreen :point]; + NSPoint screenPoint = [window convertRectToScreen:NSMakeRect(point.x, point.y, 0, 0)].origin; QPoint qtScreenPoint = QPoint(screenPoint.x, qt_mac_flipYCoordinate(screenPoint.y)); QWindowSystemInterface::handleMouseEvent(target, mapWindowCoordinates(m_window, target, qtWindowPoint), qtScreenPoint, m_buttons); diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp similarity index 94% rename from Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp rename to Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp index 97819ddc8..1d42b7970 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -58,16 +58,14 @@ #include #include #include +#include +#include #include #include #include "qtwindows_additional.h" -#define STRICT_TYPED_ITEMIDS -#include -#include - // #define USE_NATIVE_COLOR_DIALOG /* Testing purposes only */ #ifdef Q_CC_MINGW /* Add missing declarations for MinGW */ @@ -381,7 +379,12 @@ static inline QString guidToString(const GUID &g) } inline QDebug operator<<(QDebug d, const GUID &g) -{ d.nospace() << guidToString(g); return d; } +{ + QDebugStateSaver saver(d); + d.nospace(); + d << guidToString(g); + return d; +} // Return an allocated wchar_t array from a QString, reserve more memory if desired. static wchar_t *qStringToWCharArray(const QString &s, size_t reserveSize = 0) @@ -890,8 +893,8 @@ public: virtual void setWindowTitle(const QString &title); inline void setMode(QFileDialogOptions::FileMode mode, QFileDialogOptions::AcceptMode acceptMode, QFileDialogOptions::FileDialogOptions options); - inline void setDirectory(const QString &directory); - inline void updateDirectory() { setDirectory(m_data.directory().toLocalFile()); } + inline void setDirectory(const QUrl &directory); + inline void updateDirectory() { setDirectory(m_data.directory()); } inline QString directory() const; virtual void doExec(HWND owner = 0); virtual void setNameFilters(const QStringList &f); @@ -934,7 +937,7 @@ protected: static QList libraryItemFolders(IShellItem *item); static QString libraryItemDefaultSaveFolder(IShellItem *item); static int itemPaths(IShellItemArray *items, QList *fileResult = 0); - static IShellItem *shellItem(const QString &path); + static IShellItem *shellItem(const QUrl &url); const QWindowsFileDialogSharedData &data() const { return m_data; } QWindowsFileDialogSharedData &data() { return m_data; } @@ -994,25 +997,58 @@ void QWindowsNativeFileDialogBase::setWindowTitle(const QString &title) m_fileDialog->SetTitle(reinterpret_cast(title.utf16())); } -IShellItem *QWindowsNativeFileDialogBase::shellItem(const QString &path) +IShellItem *QWindowsNativeFileDialogBase::shellItem(const QUrl &url) { #ifndef Q_OS_WINCE - if (QWindowsContext::shell32dll.sHCreateItemFromParsingName) { - IShellItem *result = 0; - const QString native = QDir::toNativeSeparators(path); + if (url.isLocalFile()) { + if (!QWindowsContext::shell32dll.sHCreateItemFromParsingName) + return Q_NULLPTR; + IShellItem *result = Q_NULLPTR; + const QString native = QDir::toNativeSeparators(url.toLocalFile()); const HRESULT hr = - QWindowsContext::shell32dll.sHCreateItemFromParsingName(reinterpret_cast(native.utf16()), - NULL, IID_IShellItem, - reinterpret_cast(&result)); - if (SUCCEEDED(hr)) - return result; + QWindowsContext::shell32dll.sHCreateItemFromParsingName(reinterpret_cast(native.utf16()), + NULL, IID_IShellItem, + reinterpret_cast(&result)); + if (FAILED(hr)) { + qErrnoWarning("%s: SHCreateItemFromParsingName(%s)) failed", __FUNCTION__, qPrintable(url.toString())); + return Q_NULLPTR; + } + return result; + } else if (url.scheme() == QLatin1String("clsid")) { + if (!QWindowsContext::shell32dll.sHGetKnownFolderIDList || !QWindowsContext::shell32dll.sHCreateItemFromIDList) + return Q_NULLPTR; + // Support for virtual folders via GUID + // (see https://msdn.microsoft.com/en-us/library/windows/desktop/dd378457(v=vs.85).aspx) + // specified as "clsid:" (without '{', '}'). + IShellItem *result = Q_NULLPTR; + const QUuid uuid(url.path()); + if (uuid.isNull()) { + qWarning() << __FUNCTION__ << ": Invalid CLSID: " << url.path(); + return Q_NULLPTR; + } + PIDLIST_ABSOLUTE idList; + HRESULT hr = QWindowsContext::shell32dll.sHGetKnownFolderIDList(uuid, 0, 0, &idList); + if (FAILED(hr)) { + qErrnoWarning("%s: SHGetKnownFolderIDList(%s)) failed", __FUNCTION__, qPrintable(url.toString())); + return Q_NULLPTR; + } + hr = QWindowsContext::shell32dll.sHCreateItemFromIDList(idList, IID_IShellItem, reinterpret_cast(&result)); + CoTaskMemFree(idList); + if (FAILED(hr)) { + qErrnoWarning("%s: SHCreateItemFromIDList(%s)) failed", __FUNCTION__, qPrintable(url.toString())); + return Q_NULLPTR; + } + return result; + } else { + qWarning() << __FUNCTION__ << ": Unhandled scheme: " << url.scheme(); } +#else // !Q_OS_WINCE + Q_UNUSED(url) #endif - qErrnoWarning("%s: SHCreateItemFromParsingName(%s)) failed", __FUNCTION__, qPrintable(path)); return 0; } -void QWindowsNativeFileDialogBase::setDirectory(const QString &directory) +void QWindowsNativeFileDialogBase::setDirectory(const QUrl &directory) { if (!directory.isEmpty()) { if (IShellItem *psi = QWindowsNativeFileDialogBase::shellItem(directory)) { @@ -1302,14 +1338,27 @@ void QWindowsNativeFileDialogBase::setLabelText(QFileDialogOptions::DialogLabel } } +static inline bool isClsid(const QString &s) +{ + // detect "374DE290-123F-4565-9164-39C4925E467B". + static const QRegularExpression pattern(QLatin1String("[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{8}")); + Q_ASSERT(pattern.isValid()); + return pattern.match(s).hasMatch(); +} + void QWindowsNativeFileDialogBase::selectFile(const QString &fileName) const { - QString file = QDir::toNativeSeparators(fileName); - int lastBackSlash = file.lastIndexOf(QChar::fromLatin1('\\')); - if (lastBackSlash >= 0) { - file = file.mid(lastBackSlash + 1); + // Hack to prevent CLSIDs from being set as file name due to + // QFileDialogPrivate::initialSelection() being QString-based. + if (!isClsid(fileName)) + { + QString file = QDir::toNativeSeparators(fileName); + int lastBackSlash = file.lastIndexOf(QChar::fromLatin1('\\')); + if (lastBackSlash >= 0) { + file = file.mid(lastBackSlash + 1); + } + m_fileDialog->SetFileName((wchar_t*)file.utf16());; } - m_fileDialog->SetFileName((wchar_t*)file.utf16());; } // Return the index of the selected filter, accounting for QFileDialog @@ -1654,14 +1703,14 @@ QWindowsNativeDialogBase *QWindowsFileDialogHelper::createNativeDialog() QWindowsNativeFileDialogBase *result = QWindowsNativeFileDialogBase::create(options()->acceptMode(), m_data); if (!result) return 0; - QObject::connect(result, SIGNAL(accepted()), this, SIGNAL(accept())); - QObject::connect(result, SIGNAL(rejected()), this, SIGNAL(reject())); - QObject::connect(result, SIGNAL(directoryEntered(QUrl)), - this, SIGNAL(directoryEntered(QUrl))); - QObject::connect(result, SIGNAL(currentChanged(QUrl)), - this, SIGNAL(currentChanged(QUrl))); - QObject::connect(result, SIGNAL(filterSelected(QString)), - this, SIGNAL(filterSelected(QString))); + QObject::connect(result, &QWindowsNativeDialogBase::accepted, this, &QPlatformDialogHelper::accept); + QObject::connect(result, &QWindowsNativeDialogBase::rejected, this, &QPlatformDialogHelper::reject); + QObject::connect(result, &QWindowsNativeFileDialogBase::directoryEntered, + this, &QPlatformFileDialogHelper::directoryEntered); + QObject::connect(result, &QWindowsNativeFileDialogBase::currentChanged, + this, &QPlatformFileDialogHelper::currentChanged); + QObject::connect(result, &QWindowsNativeFileDialogBase::filterSelected, + this, &QPlatformFileDialogHelper::filterSelected); // Apply settings. const QSharedPointer &opts = options(); @@ -2041,8 +2090,8 @@ QWindowsNativeDialogBase *QWindowsXpFileDialogHelper::createNativeDialog() { m_data.fromOptions(options()); if (QWindowsXpNativeFileDialog *result = QWindowsXpNativeFileDialog::create(options(), m_data)) { - QObject::connect(result, SIGNAL(accepted()), this, SIGNAL(accept())); - QObject::connect(result, SIGNAL(rejected()), this, SIGNAL(reject())); + QObject::connect(result, &QWindowsNativeDialogBase::accepted, this, &QPlatformDialogHelper::accept); + QObject::connect(result, &QWindowsNativeDialogBase::rejected, this, &QPlatformDialogHelper::reject); return result; } return 0; @@ -2202,8 +2251,8 @@ QWindowsNativeDialogBase *QWindowsColorDialogHelper::createNativeDialog() { QWindowsNativeColorDialog *nativeDialog = new QWindowsNativeColorDialog(m_currentColor); nativeDialog->setWindowTitle(options()->windowTitle()); - connect(nativeDialog, SIGNAL(accepted()), this, SIGNAL(accept())); - connect(nativeDialog, SIGNAL(rejected()), this, SIGNAL(reject())); + connect(nativeDialog, &QWindowsNativeDialogBase::accepted, this, &QPlatformDialogHelper::accept); + connect(nativeDialog, &QWindowsNativeDialogBase::rejected, this, &QPlatformDialogHelper::reject); return nativeDialog; } #endif // USE_NATIVE_COLOR_DIALOG diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp similarity index 85% rename from Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp rename to Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp index 16fda2677..d80429b6d 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -37,6 +37,8 @@ #include "qwindowsdrag.h" #include "qwindowsscreen.h" #include "qwindowsscaling.h" +#include "qwindowsintegration.h" +#include "qwindowsopenglcontext.h" #ifdef QT_NO_CURSOR # include "qwindowscursor.h" #endif @@ -104,31 +106,16 @@ static QByteArray debugWinExStyle(DWORD exStyle) return rc; } -static QByteArray debugWindowStates(Qt::WindowStates s) -{ - - QByteArray rc = "0x"; - rc += QByteArray::number(int(s), 16); - if (s & Qt::WindowMinimized) - rc += " WindowMinimized"; - if (s & Qt::WindowMaximized) - rc += " WindowMaximized"; - if (s & Qt::WindowFullScreen) - rc += " WindowFullScreen"; - if (s & Qt::WindowActive) - rc += " WindowActive"; - return rc; -} - #ifndef Q_OS_WINCE // maybe available on some SDKs revisit WM_GETMINMAXINFO QDebug operator<<(QDebug d, const MINMAXINFO &i) { - d.nospace() << "MINMAXINFO maxSize=" << i.ptMaxSize.x << ',' - << i.ptMaxSize.y << " maxpos=" << i.ptMaxPosition.x - << ',' << i.ptMaxPosition.y << " mintrack=" - << i.ptMinTrackSize.x << ',' << i.ptMinTrackSize.y - << " maxtrack=" << i.ptMaxTrackSize.x << ',' - << i.ptMaxTrackSize.y; + QDebugStateSaver saver(d); + d.nospace(); + d << "MINMAXINFO maxSize=" << i.ptMaxSize.x << ',' + << i.ptMaxSize.y << " maxpos=" << i.ptMaxPosition.x + << ',' << i.ptMaxPosition.y << " mintrack=" + << i.ptMinTrackSize.x << ',' << i.ptMinTrackSize.y + << " maxtrack=" << i.ptMaxTrackSize.x << ',' << i.ptMaxTrackSize.y; return d; } #endif // !Q_OS_WINCE @@ -153,22 +140,43 @@ static inline RECT RECTfromQRect(const QRect &rect) QDebug operator<<(QDebug d, const RECT &r) { - d.nospace() << "RECT: left/top=" << r.left << ',' << r.top - << " right/bottom=" << r.right << ',' << r.bottom; + QDebugStateSaver saver(d); + d.nospace(); + d << "RECT: left/top=" << r.left << ',' << r.top + << " right/bottom=" << r.right << ',' << r.bottom; return d; } #ifndef Q_OS_WINCE // maybe available on some SDKs revisit WM_NCCALCSIZE QDebug operator<<(QDebug d, const NCCALCSIZE_PARAMS &p) { - qDebug().nospace() << "NCCALCSIZE_PARAMS " - << qrectFromRECT(p.rgrc[0]) - << ' ' << qrectFromRECT(p.rgrc[1]) << ' ' - << qrectFromRECT(p.rgrc[2]); + QDebugStateSaver saver(d); + d.nospace(); + d << "NCCALCSIZE_PARAMS " << qrectFromRECT(p.rgrc[0]) + << ' ' << qrectFromRECT(p.rgrc[1]) << ' ' << qrectFromRECT(p.rgrc[2]); return d; } #endif // !Q_OS_WINCE +// QTBUG-43872, for windows that do not have WS_EX_TOOLWINDOW set, WINDOWPLACEMENT +// is in workspace/available area coordinates. +static QPoint windowPlacementOffset(HWND hwnd, const QPoint &point) +{ +#ifndef Q_OS_WINCE + if (GetWindowLongPtr(hwnd, GWL_EXSTYLE) & WS_EX_TOOLWINDOW) + return QPoint(0, 0); + const QWindowsScreenManager &screenManager = QWindowsContext::instance()->screenManager(); + const QWindowsScreen *screen = screenManager.screens().size() == 1 + ? screenManager.screens().first() : screenManager.screenAtDp(point); + if (screen) + return screen->availableGeometryDp().topLeft() - screen->geometryDp().topLeft(); +#else + Q_UNUSED(hwnd) + Q_UNUSED(point) +#endif + return QPoint(0, 0); +} + // Return the frame geometry relative to the parent // if there is one. static inline QRect frameGeometry(HWND hwnd, bool topLevel) @@ -179,8 +187,10 @@ static inline QRect frameGeometry(HWND hwnd, bool topLevel) WINDOWPLACEMENT windowPlacement; windowPlacement.length = sizeof(WINDOWPLACEMENT); GetWindowPlacement(hwnd, &windowPlacement); - if (windowPlacement.showCmd == SW_SHOWMINIMIZED) - return qrectFromRECT(windowPlacement.rcNormalPosition); + if (windowPlacement.showCmd == SW_SHOWMINIMIZED) { + const QRect result = qrectFromRECT(windowPlacement.rcNormalPosition); + return result.translated(windowPlacementOffset(hwnd, result.topLeft())); + } } #endif // !Q_OS_WINCE GetWindowRect(hwnd, &rect); // Screen coordinates. @@ -205,6 +215,18 @@ static inline QSize clientSize(HWND hwnd) return qSizeOfRect(rect); } +static inline bool windowIsOpenGL(const QWindow *w) +{ + switch (w->surfaceType()) { + case QSurface::OpenGLSurface: + return true; + case QSurface::RasterGLSurface: + return qt_window_private(const_cast(w))->compositing; + default: + return false; + } +} + static bool applyBlurBehindWindow(HWND hwnd) { #ifdef Q_OS_WINCE @@ -328,6 +350,17 @@ static void setWindowOpacity(HWND hwnd, Qt::WindowFlags flags, bool hasAlpha, bo #endif // !Q_OS_WINCE } +static inline void updateGLWindowSettings(const QWindow *w, HWND hwnd, Qt::WindowFlags flags, qreal opacity) +{ + const bool isGL = windowIsOpenGL(w); + const bool hasAlpha = w->format().hasAlpha(); + + if (isGL && hasAlpha) + applyBlurBehindWindow(hwnd); + + setWindowOpacity(hwnd, flags, hasAlpha, isGL, opacity); +} + /*! \class WindowCreationData \brief Window creation code. @@ -369,14 +402,13 @@ struct WindowCreationData void fromWindow(const QWindow *w, const Qt::WindowFlags flags, unsigned creationFlags = 0); inline WindowData create(const QWindow *w, const WindowData &data, QString title) const; inline void applyWindowFlags(HWND hwnd) const; - void initialize(HWND h, bool frameChange, qreal opacityLevel) const; + void initialize(const QWindow *w, HWND h, bool frameChange, qreal opacityLevel) const; Qt::WindowFlags flags; HWND parentHandle; Qt::WindowType type; unsigned style; unsigned exStyle; - bool isGL; bool topLevel; bool popup; bool dialog; @@ -388,19 +420,26 @@ struct WindowCreationData QDebug operator<<(QDebug debug, const WindowCreationData &d) { - debug.nospace() << QWindowsWindow::debugWindowFlags(d.flags) - << " GL=" << d.isGL << " topLevel=" << d.topLevel << " popup=" - << d.popup << " dialog=" << d.dialog << " desktop=" << d.desktop - << " embedded=" << d.embedded - << " tool=" << d.tool << " style=" << debugWinStyle(d.style) - << " exStyle=" << debugWinExStyle(d.exStyle) - << " parent=" << d.parentHandle; + QDebugStateSaver saver(debug); + debug.nospace(); + debug.noquote(); + debug << "WindowCreationData: " << d.flags + << "\n topLevel=" << d.topLevel; + if (d.parentHandle) + debug << " parent=" << d.parentHandle; + debug << " popup=" << d.popup << " dialog=" << d.dialog << " desktop=" << d.desktop + << " embedded=" << d.embedded << " tool=" << d.tool + << "\n style=" << debugWinStyle(d.style); + if (d.exStyle) + debug << "\n exStyle=" << debugWinExStyle(d.exStyle); return debug; } // Fix top level window flags in case only the type flags are passed. static inline void fixTopLevelWindowFlags(Qt::WindowFlags &flags) { + // Not supported on Windows, also do correction when it is set. + flags &= ~Qt::WindowFullscreenButtonHint; switch (flags) { case Qt::Window: flags |= Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowMinimizeButtonHint @@ -420,8 +459,6 @@ static inline void fixTopLevelWindowFlags(Qt::WindowFlags &flags) void WindowCreationData::fromWindow(const QWindow *w, const Qt::WindowFlags flagsIn, unsigned creationFlags) { - isGL = w->surfaceType() == QWindow::OpenGLSurface; - hasAlpha = w->format().hasAlpha(); flags = flagsIn; // Sometimes QWindow doesn't have a QWindow parent but does have a native parent window, @@ -494,7 +531,7 @@ void WindowCreationData::fromWindow(const QWindow *w, const Qt::WindowFlags flag // ### Commented out for now as it causes some problems, but // this should be correct anyway, so dig some more into this #ifdef Q_FLATTEN_EXPOSE - if (isGL) + if (windowIsOpenGL(w)) // a bit incorrect since the is-opengl status may change from false to true at any time later on style |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN; // see SetPixelFormat #else style |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN ; @@ -513,7 +550,7 @@ void WindowCreationData::fromWindow(const QWindow *w, const Qt::WindowFlags flag } if (flags & Qt::WindowSystemMenuHint) style |= WS_SYSMENU; - else if (dialog) { + else if (dialog && (flags & Qt::WindowCloseButtonHint) && !(flags & Qt::FramelessWindowHint)) { style |= WS_SYSMENU | WS_BORDER; // QTBUG-2027, dialogs without system menu. exStyle |= WS_EX_DLGMODALFRAME; } @@ -559,16 +596,17 @@ QWindowsWindowData Q_ASSERT(result.hwnd); const LONG_PTR style = GetWindowLongPtr(result.hwnd, GWL_STYLE); const LONG_PTR exStyle = GetWindowLongPtr(result.hwnd, GWL_EXSTYLE); - result.geometry = frameGeometry(result.hwnd, !GetParent(result.hwnd)); - result.frame = QWindowsGeometryHint::frame(style, exStyle); result.embedded = false; - qCDebug(lcQpaWindows) << "Foreign window: " << w << result.hwnd << result.geometry << result.frame; + result.frame = QWindowsGeometryHint::frame(style, exStyle); + result.geometry = frameGeometry(result.hwnd, !GetParent(result.hwnd)) + .marginsRemoved(result.frame); + qCDebug(lcQpaWindows) << "Foreign window: " << w << result.hwnd << result.geometry; return result; } const HINSTANCE appinst = (HINSTANCE)GetModuleHandle(0); - const QString windowClassName = QWindowsContext::instance()->registerWindowClass(w, isGL); + const QString windowClassName = QWindowsContext::instance()->registerWindowClass(w); const QRect geometryDip = QWindowsScaling::mapFromNative(data.geometry); QRect fixedGeometryDip = QPlatformWindow::initialGeometry(w, geometryDip, defaultWindowWidth, defaultWindowHeight); @@ -586,8 +624,8 @@ QWindowsWindowData QWindowsContext::instance()->setWindowCreationContext(context); qCDebug(lcQpaWindows).nospace() - << "CreateWindowEx: " << w << *this << " class=" <frameWidth << 'x' << context->frameHeight << '+' << context->frameX << '+' << context->frameY << " custom margins: " << context->customMargins; @@ -597,9 +635,13 @@ QWindowsWindowData context->frameX, context->frameY, context->frameWidth, context->frameHeight, parentHandle, NULL, appinst, NULL); +#ifdef Q_OS_WINCE + if (DisableGestures(result.hwnd, TGF_GID_ALL, TGF_SCOPE_WINDOW)) + EnableGestures(result.hwnd, TGF_GID_DIRECTMANIPULATION, TGF_SCOPE_WINDOW); +#endif qCDebug(lcQpaWindows).nospace() << "CreateWindowEx: returns " << w << ' ' << result.hwnd << " obtained geometry: " - << context->obtainedGeometry << context->margins; + << context->obtainedGeometry << ' ' << context->margins; if (!result.hwnd) { qErrnoWarning("%s: CreateWindowEx failed", __FUNCTION__); @@ -611,9 +653,6 @@ QWindowsWindowData result.embedded = embedded; result.customMargins = context->customMargins; - if (isGL && hasAlpha) - applyBlurBehindWindow(result.hwnd); - return result; } @@ -636,7 +675,7 @@ void WindowCreationData::applyWindowFlags(HWND hwnd) const << debugWinExStyle(newExStyle); } -void WindowCreationData::initialize(HWND hwnd, bool frameChange, qreal opacityLevel) const +void WindowCreationData::initialize(const QWindow *w, HWND hwnd, bool frameChange, qreal opacityLevel) const { if (desktop || !hwnd) return; @@ -661,8 +700,7 @@ void WindowCreationData::initialize(HWND hwnd, bool frameChange, qreal opacityLe else EnableMenuItem(systemMenu, SC_CLOSE, MF_BYCOMMAND|MF_GRAYED); } - - setWindowOpacity(hwnd, flags, hasAlpha, isGL, opacityLevel); + updateGLWindowSettings(w, hwnd, flags, opacityLevel); } else { // child. SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, swpFlags); } @@ -704,9 +742,9 @@ QMargins QWindowsGeometryHint::frame(DWORD style, DWORD exStyle) qErrnoWarning("%s: AdjustWindowRectEx failed", __FUNCTION__); const QMargins result(qAbs(rect.left), qAbs(rect.top), qAbs(rect.right), qAbs(rect.bottom)); - qCDebug(lcQpaWindows).nospace() << __FUNCTION__ << " style= 0x" - << QString::number(style, 16) << " exStyle=0x" << QString::number(exStyle, 16) << ' ' << rect << ' ' << result; - + qCDebug(lcQpaWindows).nospace() << __FUNCTION__ << " style=" + << showbase << hex << style << " exStyle=" << exStyle << dec << noshowbase + << ' ' << rect << ' ' << result; return result; } @@ -801,7 +839,7 @@ QWindowCreationContext::QWindowCreationContext(const QWindow *w, const QRect &geometry, const QMargins &cm, DWORD style_, DWORD exStyle_) : - geometryHint(w, cm), style(style_), exStyle(exStyle_), + geometryHint(w, cm), window(w), style(style_), exStyle(exStyle_), requestedGeometry(geometry), obtainedGeometry(geometry), margins(QWindowsGeometryHint::frame(style, exStyle)), customMargins(cm), frameX(CW_USEDEFAULT), frameY(CW_USEDEFAULT), @@ -825,12 +863,12 @@ QWindowCreationContext::QWindowCreationContext(const QWindow *w, } qCDebug(lcQpaWindows).nospace() - << __FUNCTION__ << ' ' << w << geometry - << " pos incl. frame" << QWindowsGeometryHint::positionIncludesFrame(w) - << " frame: " << frameWidth << 'x' << frameHeight << '+' + << __FUNCTION__ << ' ' << w << ' ' << geometry + << " pos incl. frame=" << QWindowsGeometryHint::positionIncludesFrame(w) + << " frame=" << frameWidth << 'x' << frameHeight << '+' << frameX << '+' << frameY - << " min" << geometryHint.minimumSize << " max" << geometryHint.maximumSize - << " custom margins " << customMargins; + << " min=" << geometryHint.minimumSize << " max=" << geometryHint.maximumSize + << " custom margins=" << customMargins; } /*! @@ -886,17 +924,9 @@ QWindowsWindow::QWindowsWindow(QWindow *aWindow, const QWindowsWindowData &data) setFlag(OpenGL_ES2); } #endif // QT_NO_OPENGL - updateDropSite(); + updateDropSite(window()->isTopLevel()); -#ifndef Q_OS_WINCE - if (QWindowsContext::instance()->systemInfo() & QWindowsContext::SI_SupportsTouch) { - if (QWindowsContext::user32dll.registerTouchWindow(m_data.hwnd, 0)) { - setFlag(TouchRegistered); - } else { - qErrnoWarning("RegisterTouchWindow() failed for window '%s'.", qPrintable(aWindow->objectName())); - } - } -#endif // !Q_OS_WINCE + registerTouchWindow(); setWindowState(aWindow->windowState()); const qreal opacity = qt_window_private(aWindow)->opacity; if (!qFuzzyCompare(opacity, qreal(1.0))) @@ -952,7 +982,8 @@ void QWindowsWindow::destroyWindow() setDropSiteEnabled(false); #ifndef QT_NO_OPENGL if (m_surface) { - m_data.staticOpenGLContext->destroyWindowSurface(m_surface); + if (QWindowsStaticOpenGLContext *staticOpenGLContext = QWindowsIntegration::staticOpenGLContext()) + staticOpenGLContext->destroyWindowSurface(m_surface); m_surface = 0; } #endif @@ -971,10 +1002,10 @@ void QWindowsWindow::destroyWindow() } } -void QWindowsWindow::updateDropSite() +void QWindowsWindow::updateDropSite(bool topLevel) { bool enabled = false; - if (window()->isTopLevel()) { + if (topLevel) { switch (window()->type()) { case Qt::Window: case Qt::Dialog: @@ -1043,13 +1074,14 @@ QWindowsWindowData creationData.fromWindow(w, parameters.flags); QWindowsWindowData result = creationData.create(w, parameters, title); // Force WM_NCCALCSIZE (with wParam=1) via SWP_FRAMECHANGED for custom margin. - creationData.initialize(result.hwnd, !parameters.customMargins.isNull(), 1); + creationData.initialize(w, result.hwnd, !parameters.customMargins.isNull(), 1); return result; } void QWindowsWindow::setVisible(bool visible) { - qCDebug(lcQpaWindows) << __FUNCTION__ << this << window() << m_data.hwnd << visible; + const QWindow *win = window(); + qCDebug(lcQpaWindows) << __FUNCTION__ << this << win << m_data.hwnd << visible; if (m_data.hwnd) { if (visible) { show_sys(); @@ -1057,11 +1089,13 @@ void QWindowsWindow::setVisible(bool visible) // When the window is layered, we won't get WM_PAINT, and "we" are in control // over the rendering of the window // There is nobody waiting for this, so we don't need to flush afterwards. - if (isLayered()) { - QWindow *w = window(); - fireExpose(QRect(0, 0, w->width(), w->height())); - } + if (isLayered()) + fireExpose(QRect(0, 0, win->width(), win->height())); + // QTBUG-44928, QTBUG-7386: This is to resolve the problem where popups are + // opened from the system tray and not being implicitly activated + if (win->type() == Qt::Popup && !win->parent() && !QGuiApplication::focusWindow()) + SetForegroundWindow(m_data.hwnd); } else { if (hasMouseCapture()) setMouseGrabEnabled(false); @@ -1270,7 +1304,7 @@ void QWindowsWindow::setParent_sys(const QPlatformWindow *parent) if (wasTopLevel != isTopLevel) { setDropSiteEnabled(false); setWindowFlags_sys(window()->flags(), unsigned(isTopLevel ? WindowCreationData::ForceTopLevel : WindowCreationData::ForceChild)); - updateDropSite(); + updateDropSite(isTopLevel); } } } @@ -1292,8 +1326,10 @@ static QRect normalFrameGeometry(HWND hwnd) #ifndef Q_OS_WINCE WINDOWPLACEMENT wp; wp.length = sizeof(WINDOWPLACEMENT); - if (GetWindowPlacement(hwnd, &wp)) - return qrectFromRECT(wp.rcNormalPosition); + if (GetWindowPlacement(hwnd, &wp)) { + const QRect result = qrectFromRECT(wp.rcNormalPosition); + return result.translated(windowPlacementOffset(hwnd, result.topLeft())); + } #else Q_UNUSED(hwnd) #endif @@ -1318,21 +1354,8 @@ void QWindowsWindow::setGeometryDp(const QRect &rectIn) const QMargins margins = frameMarginsDp(); rect.moveTopLeft(rect.topLeft() + QPoint(margins.left(), margins.top())); } - const QSize oldSize = m_data.geometry.size(); - m_data.geometry = rect; - const QSize newSize = rect.size(); - // Check on hint. - if (newSize != oldSize) { - const QWindowsGeometryHint hint(window(), m_data.customMargins); - if (!hint.validSize(newSize)) { - qWarning("%s: Attempt to set a size (%dx%d) violating the constraints" - "(%dx%d - %dx%d) on window %s/'%s'.", __FUNCTION__, - newSize.width(), newSize.height(), - hint.minimumSize.width(), hint.minimumSize.height(), - hint.maximumSize.width(), hint.maximumSize.height(), - window()->metaObject()->className(), qPrintable(window()->objectName())); - } - } + if (m_windowState == Qt::WindowMinimized) + m_data.geometry = rect; // Otherwise set by handleGeometryChange() triggered by event. if (m_data.hwnd) { // A ResizeEvent with resulting geometry will be sent. If we cannot // achieve that size (for example, window title minimal constraint), @@ -1403,11 +1426,11 @@ void QWindowsWindow::handleGeometryChange() // QTBUG-32121: OpenGL/normal windows (with exception of ANGLE) do not receive // expose events when shrinking, synthesize. if (!testFlag(OpenGL_ES2) && isExposed() - && !(m_data.geometry.width() > previousGeometry.width() || m_data.geometry.height() > previousGeometry.height())) { + && !(m_data.geometry.width() >= previousGeometry.width() || m_data.geometry.height() >= previousGeometry.height())) { fireExpose(QRect(QPoint(0, 0), m_data.geometry.size()), true); } if (previousGeometry.topLeft() != m_data.geometry.topLeft()) { - QPlatformScreen *newScreen = screenForGeometry(m_data.geometry); + QPlatformScreen *newScreen = screenForGeometry(geometryDip); if (newScreen != screen()) QWindowSystemInterface::handleWindowScreenChanged(window(), newScreen->screen()); } @@ -1422,10 +1445,10 @@ void QWindowsWindow::setGeometry_sys(const QRect &rect) const const QMargins margins = frameMarginsDp(); const QRect frameGeometry = rect + margins; - qCDebug(lcQpaWindows) << '>' << __FUNCTION__ << this << window() - << " \n from " << geometry_sys() << " frame: " - << margins << " to " <' << __FUNCTION__ << window() + << "\n from " << geometry_sys() << " frame: " + << margins << " to " <' << __FUNCTION__ << this << window() << "\n from: " - << QWindowsWindow::debugWindowFlags(m_data.flags) - << "\n to: " << QWindowsWindow::debugWindowFlags(flags); + << m_data.flags << "\n to: " << flags; const QRect oldGeometry = geometryDp(); if (m_data.flags != flags) { m_data.flags = flags; if (m_data.hwnd) { m_data = setWindowFlags_sys(flags); - updateDropSite(); + updateDropSite(window()->isTopLevel()); } } // When switching to a frameless window, geometry @@ -1547,8 +1570,7 @@ void QWindowsWindow::setWindowFlags(Qt::WindowFlags flags) handleGeometryChange(); qCDebug(lcQpaWindows) << '<' << __FUNCTION__ << "\n returns: " - << QWindowsWindow::debugWindowFlags(m_data.flags) - << " geometry " << oldGeometry << "->" << newGeometry; + << m_data.flags << " geometry " << oldGeometry << "->" << newGeometry; } QWindowsWindowData QWindowsWindow::setWindowFlags_sys(Qt::WindowFlags wt, @@ -1557,7 +1579,7 @@ QWindowsWindowData QWindowsWindow::setWindowFlags_sys(Qt::WindowFlags wt, WindowCreationData creationData; creationData.fromWindow(window(), wt, flags); creationData.applyWindowFlags(m_data.hwnd); - creationData.initialize(m_data.hwnd, true, m_opacity); + creationData.initialize(window(), m_data.hwnd, true, m_opacity); QWindowsWindowData result = m_data; result.flags = creationData.flags; @@ -1569,8 +1591,7 @@ QWindowsWindowData QWindowsWindow::setWindowFlags_sys(Qt::WindowFlags wt, void QWindowsWindow::handleWindowStateChange(Qt::WindowState state) { qCDebug(lcQpaWindows) << __FUNCTION__ << this << window() - << "\n from " << debugWindowStates(m_windowState) - << " to " << debugWindowStates(state); + << "\n from " << m_windowState << " to " << state; setFlag(FrameDirty); m_windowState = state; QWindowSystemInterface::handleWindowStateChanged(window(), state); @@ -1639,23 +1660,12 @@ void QWindowsWindow::setWindowState_sys(Qt::WindowState newState) if (oldState == newState) return; qCDebug(lcQpaWindows) << '>' << __FUNCTION__ << this << window() - << " from " << debugWindowStates(oldState) << " to " << debugWindowStates(newState); + << " from " << oldState << " to " << newState; const bool visible = isVisible(); setFlag(FrameDirty); - if ((oldState == Qt::WindowMaximized) != (newState == Qt::WindowMaximized)) { - if (visible && !(newState == Qt::WindowMinimized)) { - setFlag(WithinMaximize); - if (newState == Qt::WindowFullScreen) - setFlag(MaximizeToFullScreen); - ShowWindow(m_data.hwnd, (newState == Qt::WindowMaximized) ? SW_MAXIMIZE : SW_SHOWNOACTIVATE); - clearFlag(WithinMaximize); - clearFlag(MaximizeToFullScreen); - } - } - if ((oldState == Qt::WindowFullScreen) != (newState == Qt::WindowFullScreen)) { #ifdef Q_OS_WINCE HWND handle = FindWindow(L"HHTaskBar", L""); @@ -1735,6 +1745,15 @@ void QWindowsWindow::setWindowState_sys(Qt::WindowState newState) m_savedStyle = 0; m_savedFrameGeometry = QRect(); } + } else if ((oldState == Qt::WindowMaximized) != (newState == Qt::WindowMaximized)) { + if (visible && !(newState == Qt::WindowMinimized)) { + setFlag(WithinMaximize); + if (newState == Qt::WindowFullScreen) + setFlag(MaximizeToFullScreen); + ShowWindow(m_data.hwnd, (newState == Qt::WindowMaximized) ? SW_MAXIMIZE : SW_SHOWNOACTIVATE); + clearFlag(WithinMaximize); + clearFlag(MaximizeToFullScreen); + } } if ((oldState == Qt::WindowMinimized) != (newState == Qt::WindowMinimized)) { @@ -1742,7 +1761,7 @@ void QWindowsWindow::setWindowState_sys(Qt::WindowState newState) ShowWindow(m_data.hwnd, (newState == Qt::WindowMinimized) ? SW_MINIMIZE : (newState == Qt::WindowMaximized) ? SW_MAXIMIZE : SW_SHOWNOACTIVATE); } - qCDebug(lcQpaWindows) << '<' << __FUNCTION__ << this << window() << debugWindowStates(newState); + qCDebug(lcQpaWindows) << '<' << __FUNCTION__ << this << window() << newState; } void QWindowsWindow::setStyle(unsigned s) const @@ -1781,6 +1800,8 @@ void QWindowsWindow::windowEvent(QEvent *event) case QEvent::WindowBlocked: // Blocked by another modal window. setEnabled(false); setFlag(BlockedByModal); + if (hasMouseCapture()) + ReleaseCapture(); break; case QEvent::WindowUnblocked: setEnabled(true); @@ -1796,6 +1817,47 @@ void QWindowsWindow::propagateSizeHints() qCDebug(lcQpaWindows) << __FUNCTION__ << this << window(); } +bool QWindowsWindow::handleGeometryChangingMessage(MSG *message, const QWindow *qWindow, const QMargins &marginsDp) +{ +#ifndef Q_OS_WINCE + if (!qWindow->isTopLevel()) // Implement hasHeightForWidth(). + return false; + WINDOWPOS *windowPos = reinterpret_cast(message->lParam); + if ((windowPos->flags & (SWP_NOCOPYBITS | SWP_NOSIZE))) + return false; + const QRect suggestedFrameGeometryDp(windowPos->x, windowPos->y, + windowPos->cx, windowPos->cy); + const qreal factor = QWindowsScaling::factor(); + const QRect suggestedGeometryDp = suggestedFrameGeometryDp - marginsDp; + const QRectF suggestedGeometry = QRectF(QPointF(suggestedGeometryDp.topLeft()) / factor, + QSizeF(suggestedGeometryDp.size()) / factor); + const QRectF correctedGeometryF = + qt_window_private(const_cast(qWindow))->closestAcceptableGeometry(suggestedGeometry); + if (!correctedGeometryF.isValid()) + return false; + const QRect correctedFrameGeometryDp + = QRectF(correctedGeometryF.topLeft() * factor, + correctedGeometryF.size() * factor).toRect() + + marginsDp; + if (correctedFrameGeometryDp == suggestedFrameGeometryDp) + return false; + windowPos->x = correctedFrameGeometryDp.left(); + windowPos->y = correctedFrameGeometryDp.top(); + windowPos->cx = correctedFrameGeometryDp.width(); + windowPos->cy = correctedFrameGeometryDp.height(); + return true; +#else // !Q_OS_WINCE + Q_UNUSED(message) + return false; +#endif +} + +bool QWindowsWindow::handleGeometryChanging(MSG *message) const +{ + const QMargins marginsDp = window()->isTopLevel() ? frameMarginsDp() : QMargins(); + return QWindowsWindow::handleGeometryChangingMessage(message, window(), marginsDp); +} + QMargins QWindowsWindow::frameMarginsDp() const { // Frames are invalidated by style changes (window state, flags). @@ -1803,7 +1865,12 @@ QMargins QWindowsWindow::frameMarginsDp() const // event sequences, introduce a dirty flag mechanism to be able // to cache results. if (testFlag(FrameDirty)) { - m_data.frame = QWindowsGeometryHint::frame(style(), exStyle()); + // Always skip calculating style-dependent margins for windows claimed to be frameless. + // This allows users to remove the margins by handling WM_NCCALCSIZE with WS_THICKFRAME set + // to ensure Areo snap still works (QTBUG-40578). + m_data.frame = window()->flags() & Qt::FramelessWindowHint + ? QMargins(0, 0, 0, 0) + : QWindowsGeometryHint::frame(style(), exStyle()); clearFlag(FrameDirty); } return m_data.frame + m_data.customMargins; @@ -2087,8 +2154,8 @@ void QWindowsWindow::setCursor(const QWindowsWindowCursor &c) #ifndef QT_NO_CURSOR if (c.handle() != m_cursor.handle()) { const bool apply = applyNewCursor(window()); - qCDebug(lcQpaWindows) <createWindowSurface(m_data.hwnd, nativeConfig); + if (!m_surface) { + if (QWindowsStaticOpenGLContext *staticOpenGLContext = QWindowsIntegration::staticOpenGLContext()) + m_surface = staticOpenGLContext->createWindowSurface(m_data.hwnd, nativeConfig, err); + } return m_surface; #endif } +void QWindowsWindow::invalidateSurface() +{ +#ifndef QT_NO_OPENGL + if (m_surface) { + if (QWindowsStaticOpenGLContext *staticOpenGLContext = QWindowsIntegration::staticOpenGLContext()) + staticOpenGLContext->destroyWindowSurface(m_surface); + m_surface = 0; + } +#endif // QT_NO_OPENGL +} + +void QWindowsWindow::setTouchWindowTouchTypeStatic(QWindow *window, QWindowsWindowFunctions::TouchWindowTouchTypes touchTypes) +{ + if (!window->handle()) + return; + static_cast(window->handle())->registerTouchWindow(touchTypes); +} + +void QWindowsWindow::registerTouchWindow(QWindowsWindowFunctions::TouchWindowTouchTypes touchTypes) +{ +#ifndef Q_OS_WINCE + if ((QWindowsContext::instance()->systemInfo() & QWindowsContext::SI_SupportsTouch) + && window()->type() != Qt::ForeignWindow) { + ULONG touchFlags = 0; + const bool ret = QWindowsContext::user32dll.isTouchWindow(m_data.hwnd, &touchFlags); + // Return if it is not a touch window or the flags are already set by a hook + // such as HCBT_CREATEWND + if (ret || touchFlags != 0) + return; + if (QWindowsContext::user32dll.registerTouchWindow(m_data.hwnd, (ULONG)touchTypes)) + setFlag(TouchRegistered); + else + qErrnoWarning("RegisterTouchWindow() failed for window '%s'.", qPrintable(window()->objectName())); + } +#endif // !Q_OS_WINCE +} + +void QWindowsWindow::aboutToMakeCurrent() +{ +#ifndef QT_NO_OPENGL + // For RasterGLSurface windows, that become OpenGL windows dynamically, it might be + // time to set up some GL specifics. This is particularly important for layered + // windows (WS_EX_LAYERED due to alpha > 0). + const bool isCompositing = qt_window_private(window())->compositing; + if (isCompositing != testFlag(Compositing)) { + if (isCompositing) + setFlag(Compositing); + else + clearFlag(Compositing); + + updateGLWindowSettings(window(), m_data.hwnd, m_data.flags, m_opacity); + } +#endif +} + QT_END_NAMESPACE diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.h similarity index 91% rename from Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.h rename to Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.h index 4fa2e5dba..71d060ba2 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.h +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.h @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -40,9 +40,9 @@ #endif #include "qwindowsscaling.h" #include "qwindowscursor.h" -#include "qwindowsopenglcontext.h" #include +#include QT_BEGIN_NAMESPACE @@ -84,6 +84,7 @@ struct QWindowCreationContext #endif QWindowsGeometryHint geometryHint; + const QWindow *window; DWORD style; DWORD exStyle; QRect requestedGeometry; @@ -106,9 +107,6 @@ struct QWindowsWindowData QMargins customMargins; // User-defined, additional frame for NCCALCSIZE HWND hwnd; bool embedded; -#ifndef QT_NO_OPENGL - QSharedPointer staticOpenGLContext; -#endif // QT_NO_OPENGL static QWindowsWindowData create(const QWindow *w, const QWindowsWindowData ¶meters, @@ -138,7 +136,9 @@ public: Exposed = 0x10000, WithinCreate = 0x20000, WithinMaximize = 0x40000, - MaximizeToFullScreen = 0x80000 + MaximizeToFullScreen = 0x80000, + InputMethodDisabled = 0x100000, + Compositing = 0x200000 }; QWindowsWindow(QWindow *window, const QWindowsWindowData &data); @@ -182,6 +182,8 @@ public: void windowEvent(QEvent *event); void propagateSizeHints() Q_DECL_OVERRIDE; + static bool handleGeometryChangingMessage(MSG *message, const QWindow *qWindow, const QMargins &marginsDp); + bool handleGeometryChanging(MSG *message) const; QMargins frameMarginsDp() const; QMargins frameMargins() const Q_DECL_OVERRIDE { return frameMarginsDp() / QWindowsScaling::factor(); } @@ -238,8 +240,6 @@ public: void setCursor(const QWindowsWindowCursor &c); void applyCursor(); - static QByteArray debugWindowFlags(Qt::WindowFlags wf); - inline bool testFlag(unsigned f) const { return (m_flags & f) != 0; } inline void setFlag(unsigned f) const { m_flags |= f; } inline void clearFlag(unsigned f) const { m_flags &= ~f; } @@ -248,7 +248,9 @@ public: bool isEnabled() const; void setWindowIcon(const QIcon &icon); - void *surface(void *nativeConfig); + void *surface(void *nativeConfig, int *err); + void invalidateSurface() Q_DECL_OVERRIDE; + void aboutToMakeCurrent(); #ifndef Q_OS_WINCE void setAlertState(bool enabled); @@ -257,6 +259,9 @@ public: void stopAlertWindow(); #endif + static void setTouchWindowTouchTypeStatic(QWindow *window, QWindowsWindowFunctions::TouchWindowTouchTypes touchTypes); + void registerTouchWindow(QWindowsWindowFunctions::TouchWindowTouchTypes touchTypes = QWindowsWindowFunctions::NormalTouch); + private: inline void show_sys() const; inline void hide_sys() const; @@ -272,7 +277,7 @@ private: void destroyWindow(); inline bool isDropSiteEnabled() const { return m_dropTarget != 0; } void setDropSiteEnabled(bool enabled); - void updateDropSite(); + void updateDropSite(bool topLevel); void handleGeometryChange(); void handleWindowStateChange(Qt::WindowState state); inline void destroyIcon(); diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/dialogs/qfiledialog.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/dialogs/qfiledialog.cpp similarity index 95% rename from Telegram/_qt_5_4_0_patch/qtbase/src/widgets/dialogs/qfiledialog.cpp rename to Telegram/_qt_5_5_0_patch/qtbase/src/widgets/dialogs/qfiledialog.cpp index 03fad7a72..ea8aa43b2 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/dialogs/qfiledialog.cpp +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/dialogs/qfiledialog.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtWidgets module of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -327,16 +327,13 @@ Q_GLOBAL_STATIC(QUrl, lastVisitedDir) This signal is emitted when the user selects a \a filter. */ -//#if defined(Q_WS_WIN) || defined(Q_WS_MAC) -//bool Q_WIDGETS_EXPORT qt_use_native_dialogs = true; // for the benefit of testing tools, until we have a proper API -//#endif - QT_BEGIN_INCLUDE_NAMESPACE -#ifdef Q_WS_WIN +#ifdef Q_DEAD_CODE_FROM_QT4_WIN #include #endif +#include #include -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC #include #endif QT_END_INCLUDE_NAMESPACE @@ -389,9 +386,8 @@ QFileDialog::QFileDialog(const QFileDialogArgs &args) QFileDialog::~QFileDialog() { #ifndef QT_NO_SETTINGS - QSettings settings(QSettings::UserScope, QLatin1String("QtProject")); - settings.beginGroup(QLatin1String("Qt")); - settings.setValue(QLatin1String("filedialog"), saveState()); + Q_D(QFileDialog); + d->saveSettings(); #endif } @@ -507,34 +503,7 @@ bool QFileDialog::restoreState(const QByteArray &state) if (!d->usingWidgets()) return true; - if (!d->qFileDialogUi->splitter->restoreState(d->splitterState)) - return false; - QList list = d->qFileDialogUi->splitter->sizes(); - if (list.count() >= 2 && (list.at(0) == 0 || list.at(1) == 0)) { - for (int i = 0; i < list.count(); ++i) - list[i] = d->qFileDialogUi->splitter->widget(i)->sizeHint().width(); - d->qFileDialogUi->splitter->setSizes(list); - } - - d->qFileDialogUi->sidebar->setUrls(d->sidebarUrls); - while (history.count() > 5) - history.pop_front(); - setHistory(history); - QHeaderView *headerView = d->qFileDialogUi->treeView->header(); - if (!headerView->restoreState(d->headerData)) - return false; - - QList actions = headerView->actions(); - QAbstractItemModel *abstractModel = d->model; -#ifndef QT_NO_PROXYMODEL - if (d->proxyModel) - abstractModel = d->proxyModel; -#endif - int total = qMin(abstractModel->columnCount(QModelIndex()), actions.count() + 1); - for (int i = 1; i < total; ++i) - actions.at(i - 1)->setChecked(!headerView->isSectionHidden(i)); - - return true; + return d->restoreWidgetState(history, -1); } /*! @@ -590,10 +559,6 @@ void QFileDialogPrivate::helperPrepareShow(QPlatformDialogHelper *) options->setHistory(q->history()); if (usingWidgets()) options->setSidebarUrls(qFileDialogUi->sidebar->urls()); - const QDir directory = q->directory(); - options->setInitialDirectory(directory.exists() ? - QUrl::fromLocalFile(directory.absolutePath()) : - QUrl()); if (options->initiallySelectedNameFilter().isEmpty()) options->setInitiallySelectedNameFilter(q->selectedNameFilter()); if (options->initiallySelectedFiles().isEmpty()) @@ -928,12 +893,17 @@ void QFileDialogPrivate::_q_goToUrl(const QUrl &url) /*! Sets the file dialog's current \a directory. + + \note On iOS, if you set \a directory to \l{QStandardPaths::standardLocations()} + {QStandardPaths::standardLocations(QStandardPaths::PicturesLocation).last()}, + a native image picker dialog will be used for accessing the user's photo album. + The filename returned can be loaded using QFile and related APIs. + This feature was added in Qt 5.5. */ void QFileDialog::setDirectory(const QString &directory) { Q_D(QFileDialog); QString newDirectory = directory; - QFileInfo info(directory); //we remove .. and . from the given path if exist if (!directory.isEmpty()) newDirectory = QDir::cleanPath(directory); @@ -942,7 +912,7 @@ void QFileDialog::setDirectory(const QString &directory) return; QUrl newDirUrl = QUrl::fromLocalFile(newDirectory); - d->setLastVisitedDirectory(newDirUrl); + QFileDialogPrivate::setLastVisitedDirectory(newDirUrl); d->options->setInitialDirectory(QUrl::fromLocalFile(directory)); if (!d->usingWidgets()) { @@ -985,6 +955,16 @@ QDir QFileDialog::directory() const \note The non-native QFileDialog supports only local files. + \note On Windows, it is possible to pass URLs representing + one of the \e {virtual folders}, such as "Computer" or "Network". + This is done by passing a QUrl using the scheme \c clsid followed + by the CLSID value with the curly braces removed. For example the URL + \c clsid:374DE290-123F-4565-9164-39C4925E467B denotes the download + location. For a complete list of possible values, see the MSDN documentation on + \l{https://msdn.microsoft.com/en-us/library/windows/desktop/dd378457.aspx}{KNOWNFOLDERID}. + This feature was added in Qt 5.5. + + \sa QUuid \since 5.2 */ void QFileDialog::setDirectoryUrl(const QUrl &directory) @@ -993,14 +973,14 @@ void QFileDialog::setDirectoryUrl(const QUrl &directory) if (!directory.isValid()) return; - d->setLastVisitedDirectory(directory); + QFileDialogPrivate::setLastVisitedDirectory(directory); d->options->setInitialDirectory(directory); if (d->nativeDialogInUse) d->setDirectory_sys(directory); else if (directory.isLocalFile()) setDirectory(directory.toLocalFile()); - else + else if (d->usingWidgets()) qWarning() << "Non-native QFileDialog supports only local files"; } @@ -1227,7 +1207,7 @@ QByteArray QFileDialogPrivate::userSelectedRemoteContent() const return QByteArray(); } -QStringList QFileDialogPrivate::addDefaultSuffixToFiles(const QStringList filesToFix) const +QStringList QFileDialogPrivate::addDefaultSuffixToFiles(const QStringList &filesToFix) const { QStringList files; for (int i=0; ishowHiddenAction->setChecked((filters & QDir::Hidden)); } +#ifndef QT_NO_MIMETYPE + static QString nameFilterForMime(const QString &mimeType) { QMimeDatabase db; @@ -1609,6 +1591,8 @@ void QFileDialog::selectMimeTypeFilter(const QString &filter) selectNameFilter(text); } +#endif // QT_NO_MIMETYPE + /*! \property QFileDialog::viewMode \brief the way files and directories are displayed in the dialog @@ -2680,6 +2664,104 @@ void QFileDialog::accept() } } +#ifndef QT_NO_SETTINGS +void QFileDialogPrivate::saveSettings() +{ + Q_Q(QFileDialog); + QSettings settings(QSettings::UserScope, QLatin1String("QtProject")); + settings.beginGroup(QLatin1String("FileDialog")); + + if (usingWidgets()) { + settings.setValue(QLatin1String("sidebarWidth"), qFileDialogUi->splitter->sizes().first()); + settings.setValue(QLatin1String("shortcuts"), QUrl::toStringList(qFileDialogUi->sidebar->urls())); + settings.setValue(QLatin1String("treeViewHeader"), qFileDialogUi->treeView->header()->saveState()); + } + QStringList historyUrls; + foreach (const QString &path, q->history()) + historyUrls << QUrl::fromLocalFile(path).toString(); + settings.setValue(QLatin1String("history"), historyUrls); + settings.setValue(QLatin1String("lastVisited"), lastVisitedDir()->toString()); + const QMetaEnum &viewModeMeta = q->metaObject()->enumerator(q->metaObject()->indexOfEnumerator("ViewMode")); + settings.setValue(QLatin1String("viewMode"), QLatin1String(viewModeMeta.key(q->viewMode()))); + settings.setValue(QLatin1String("qtVersion"), QLatin1String(QT_VERSION_STR)); +} + +bool QFileDialogPrivate::restoreFromSettings() +{ + Q_Q(QFileDialog); + QSettings settings(QSettings::UserScope, QLatin1String("QtProject")); + if (!settings.childGroups().contains(QLatin1String("FileDialog"))) + return false; + settings.beginGroup(QLatin1String("FileDialog")); + + q->setDirectoryUrl(lastVisitedDir()->isEmpty() ? settings.value(QLatin1String("lastVisited")).toUrl() : *lastVisitedDir()); + + QByteArray viewModeStr = settings.value(QLatin1String("viewMode")).toString().toLatin1(); + const QMetaEnum &viewModeMeta = q->metaObject()->enumerator(q->metaObject()->indexOfEnumerator("ViewMode")); + bool ok = false; + int viewMode = viewModeMeta.keyToValue(viewModeStr.constData(), &ok); + if (!ok) + viewMode = QFileDialog::List; + q->setViewMode(static_cast(viewMode)); + + sidebarUrls = QUrl::fromStringList(settings.value(QLatin1String("shortcuts")).toStringList()); + headerData = settings.value(QLatin1String("treeViewHeader")).toByteArray(); + + if (!usingWidgets()) + return true; + + QStringList history; + foreach (const QString &urlStr, settings.value(QLatin1String("history")).toStringList()) { + QUrl url(urlStr); + if (url.isLocalFile()) + history << url.toLocalFile(); + } + + return restoreWidgetState(history, settings.value(QLatin1String("sidebarWidth"), -1).toInt()); +} +#endif // QT_NO_SETTINGS + +bool QFileDialogPrivate::restoreWidgetState(QStringList &history, int splitterPosition) +{ + Q_Q(QFileDialog); + if (splitterPosition >= 0) { + QList splitterSizes; + splitterSizes.append(splitterPosition); + splitterSizes.append(qFileDialogUi->splitter->widget(1)->sizeHint().width()); + qFileDialogUi->splitter->setSizes(splitterSizes); + } else { + if (!qFileDialogUi->splitter->restoreState(splitterState)) + return false; + QList list = qFileDialogUi->splitter->sizes(); + if (list.count() >= 2 && (list.at(0) == 0 || list.at(1) == 0)) { + for (int i = 0; i < list.count(); ++i) + list[i] = qFileDialogUi->splitter->widget(i)->sizeHint().width(); + qFileDialogUi->splitter->setSizes(list); + } + } + + qFileDialogUi->sidebar->setUrls(sidebarUrls); + while (history.count() > 5) + history.pop_front(); + q->setHistory(history); + + QHeaderView *headerView = qFileDialogUi->treeView->header(); + if (!headerView->restoreState(headerData)) + return false; + + QList actions = headerView->actions(); + QAbstractItemModel *abstractModel = model; +#ifndef QT_NO_PROXYMODEL + if (proxyModel) + abstractModel = proxyModel; +#endif + int total = qMin(abstractModel->columnCount(QModelIndex()), actions.count() + 1); + for (int i = 1; i < total; ++i) + actions.at(i - 1)->setChecked(!headerView->isSectionHidden(i)); + + return true; +} + /*! \internal @@ -2706,8 +2788,12 @@ void QFileDialogPrivate::init(const QUrl &directory, const QString &nameFilter, q->selectFile(initialSelection(directory)); #ifndef QT_NO_SETTINGS - const QSettings settings(QSettings::UserScope, QLatin1String("QtProject")); - q->restoreState(settings.value(QLatin1String("Qt/filedialog")).toByteArray()); + // Try to restore from the FileDialog settings group; if it fails, fall back + // to the pre-5.5 QByteArray serialized settings. + if (!restoreFromSettings()) { + const QSettings settings(QSettings::UserScope, QLatin1String("QtProject")); + q->restoreState(settings.value(QLatin1String("Qt/filedialog")).toByteArray()); + } #endif #if defined(Q_EMBEDDED_SMALLSCREEN) @@ -2731,7 +2817,7 @@ void QFileDialogPrivate::createWidgets() return; Q_Q(QFileDialog); model = new QFileSystemModel(q); - options->setFilter(model->filter()); + model->setFilter(options->filter()); model->setObjectName(QLatin1String("qt_filesystem_model")); if (QPlatformFileDialogHelper *helper = platformFileDialogHelper()) model->setNameFilterDisables(helper->defaultNameFilterDisables()); @@ -2855,8 +2941,12 @@ void QFileDialogPrivate::createWidgets() createMenuActions(); #ifndef QT_NO_SETTINGS - const QSettings settings(QSettings::UserScope, QLatin1String("QtProject")); - q->restoreState(settings.value(QLatin1String("Qt/filedialog")).toByteArray()); + // Try to restore from the FileDialog settings group; if it fails, fall back + // to the pre-5.5 QByteArray serialized settings. + if (!restoreFromSettings()) { + const QSettings settings(QSettings::UserScope, QLatin1String("QtProject")); + q->restoreState(settings.value(QLatin1String("Qt/filedialog")).toByteArray()); + } #endif // Initial widget states from options @@ -2867,9 +2957,12 @@ void QFileDialogPrivate::createWidgets() if (!options->sidebarUrls().isEmpty()) q->setSidebarUrls(options->sidebarUrls()); q->setDirectoryUrl(options->initialDirectory()); +#ifndef QT_NO_MIMETYPE if (!options->mimeTypeFilters().isEmpty()) q->setMimeTypeFilters(options->mimeTypeFilters()); - else if (!options->nameFilters().isEmpty()) + else +#endif + if (!options->nameFilters().isEmpty()) q->setNameFilters(options->nameFilters()); q->selectNameFilter(options->initiallySelectedNameFilter()); q->setDefaultSuffix(options->defaultSuffix()); @@ -3610,7 +3703,7 @@ void QFileDialogPrivate::_q_rowsInserted(const QModelIndex &parent) return; } -void QFileDialogPrivate::_q_fileRenamed(const QString &path, const QString oldName, const QString newName) +void QFileDialogPrivate::_q_fileRenamed(const QString &path, const QString &oldName, const QString &newName) { const QFileDialog::FileMode fileMode = q_func()->fileMode(); if (fileMode == QFileDialog::Directory || fileMode == QFileDialog::DirectoryOnly) { diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/dialogs/qfiledialog.h b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/dialogs/qfiledialog.h similarity index 93% rename from Telegram/_qt_5_4_0_patch/qtbase/src/widgets/dialogs/qfiledialog.h rename to Telegram/_qt_5_5_0_patch/qtbase/src/widgets/dialogs/qfiledialog.h index b13e8b2c6..0dca0ef18 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/dialogs/qfiledialog.h +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/dialogs/qfiledialog.h @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtWidgets module of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -55,7 +55,6 @@ class QAbstractProxyModel; class Q_WIDGETS_EXPORT QFileDialog : public QDialog { Q_OBJECT - Q_ENUMS(ViewMode FileMode AcceptMode Option) Q_FLAGS(Options) Q_PROPERTY(ViewMode viewMode READ viewMode WRITE setViewMode) Q_PROPERTY(FileMode fileMode READ fileMode WRITE setFileMode) @@ -70,8 +69,11 @@ class Q_WIDGETS_EXPORT QFileDialog : public QDialog public: enum ViewMode { Detail, List }; + Q_ENUM(ViewMode) enum FileMode { AnyFile, ExistingFile, Directory, ExistingFiles, DirectoryOnly }; + Q_ENUM(FileMode) enum AcceptMode { AcceptOpen, AcceptSave }; + Q_ENUM(AcceptMode) enum DialogLabel { LookIn, FileName, FileType, Accept, Reject }; enum Option @@ -85,6 +87,7 @@ public: HideNameFilterDetails = 0x00000040, DontUseCustomDirectoryIcons = 0x00000080 }; + Q_ENUM(Option) Q_DECLARE_FLAGS(Options, Option) QFileDialog(QWidget *parent, Qt::WindowFlags f); @@ -117,9 +120,11 @@ public: void selectNameFilter(const QString &filter); QString selectedNameFilter() const; +#ifndef QT_NO_MIMETYPE void setMimeTypeFilters(const QStringList &filters); QStringList mimeTypeFilters() const; void selectMimeTypeFilter(const QString &filter); +#endif QDir::Filters filter() const; void setFilter(QDir::Filters filters); @@ -173,15 +178,9 @@ public: void setOptions(Options options); Options options() const; -#ifdef Q_NO_USING_KEYWORD -#ifndef Q_QDOC - void open() { QDialog::open(); } -#endif -#else using QDialog::open; -#endif void open(QObject *receiver, const char *member); - void setVisible(bool visible); + void setVisible(bool visible) Q_DECL_OVERRIDE; Q_SIGNALS: void fileSelected(const QString &file); @@ -257,9 +256,9 @@ public: protected: QFileDialog(const QFileDialogArgs &args); - void done(int result); - void accept(); - void changeEvent(QEvent *e); + void done(int result) Q_DECL_OVERRIDE; + void accept() Q_DECL_OVERRIDE; + void changeEvent(QEvent *e) Q_DECL_OVERRIDE; private: Q_DECLARE_PRIVATE(QFileDialog) @@ -293,7 +292,8 @@ private: Q_PRIVATE_SLOT(d_func(), void _q_autoCompleteFileName(const QString &text)) Q_PRIVATE_SLOT(d_func(), void _q_rowsInserted(const QModelIndex & parent)) Q_PRIVATE_SLOT(d_func(), void _q_fileRenamed(const QString &path, - const QString oldName, const QString newName)) + const QString &oldName, + const QString &newName)) friend class QPlatformDialogHelper; }; diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/dialogs/qfiledialog_p.h b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/dialogs/qfiledialog_p.h similarity index 89% rename from Telegram/_qt_5_4_0_patch/qtbase/src/widgets/dialogs/qfiledialog_p.h rename to Telegram/_qt_5_5_0_patch/qtbase/src/widgets/dialogs/qfiledialog_p.h index cf70355fd..16fa44ed9 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/dialogs/qfiledialog_p.h +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/dialogs/qfiledialog_p.h @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtWidgets module of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -124,7 +124,7 @@ public: QStringList typedFiles() const; QList userSelectedFiles() const; QByteArray userSelectedRemoteContent() const; - QStringList addDefaultSuffixToFiles(const QStringList filesToFix) const; + QStringList addDefaultSuffixToFiles(const QStringList &filesToFix) const; QList addDefaultSuffixToUrls(const QList &urlsToFix) const; bool removeDirectory(const QString &path); void setLabelTextControl(QFileDialog::DialogLabel label, const QString &text); @@ -182,7 +182,13 @@ public: #endif } - void setLastVisitedDirectory(const QUrl &dir); +#ifndef QT_NO_SETTINGS + void saveSettings(); + bool restoreFromSettings(); +#endif + + bool restoreWidgetState(QStringList &history, int splitterPosition); + static void setLastVisitedDirectory(const QUrl &dir); void retranslateWindowTitle(); void retranslateStrings(); void emitFilesSelected(const QStringList &files); @@ -213,7 +219,7 @@ public: void _q_goToUrl(const QUrl &url); void _q_autoCompleteFileName(const QString &); void _q_rowsInserted(const QModelIndex & parent); - void _q_fileRenamed(const QString &path, const QString oldName, const QString newName); + void _q_fileRenamed(const QString &path, const QString &oldName, const QString &newName); // layout #ifndef QT_NO_PROXYMODEL @@ -244,7 +250,7 @@ public: // setVisible_sys returns true if it ends up showing a native // dialog. Returning false means that a non-native dialog must be // used instead. - bool canBeNativeDialog() const; + bool canBeNativeDialog() const Q_DECL_OVERRIDE; inline bool usingWidgets() const; void setDirectory_sys(const QUrl &directory); @@ -275,9 +281,9 @@ public: ~QFileDialogPrivate(); private: - virtual void initHelper(QPlatformDialogHelper *); - virtual void helperPrepareShow(QPlatformDialogHelper *); - virtual void helperDone(QDialog::DialogCode, QPlatformDialogHelper *); + virtual void initHelper(QPlatformDialogHelper *) Q_DECL_OVERRIDE; + virtual void helperPrepareShow(QPlatformDialogHelper *) Q_DECL_OVERRIDE; + virtual void helperDone(QDialog::DialogCode, QPlatformDialogHelper *) Q_DECL_OVERRIDE; Q_DISABLE_COPY(QFileDialogPrivate) }; @@ -287,7 +293,7 @@ class QFileDialogLineEdit : public QLineEdit public: QFileDialogLineEdit(QWidget *parent = 0) : QLineEdit(parent), d_ptr(0){} void setFileDialogPrivate(QFileDialogPrivate *d_pointer) {d_ptr = d_pointer; } - void keyPressEvent(QKeyEvent *e); + void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE; bool hideOnEsc; private: QFileDialogPrivate *d_ptr; @@ -298,10 +304,10 @@ class QFileDialogComboBox : public QComboBox public: QFileDialogComboBox(QWidget *parent = 0) : QComboBox(parent), urlModel(0) {} void setFileDialogPrivate(QFileDialogPrivate *d_pointer); - void showPopup(); + void showPopup() Q_DECL_OVERRIDE; void setHistory(const QStringList &paths); QStringList history() const { return m_history; } - void paintEvent(QPaintEvent *); + void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE; private: QUrlModel *urlModel; @@ -314,9 +320,9 @@ class QFileDialogListView : public QListView public: QFileDialogListView(QWidget *parent = 0); void setFileDialogPrivate(QFileDialogPrivate *d_pointer); - QSize sizeHint() const; + QSize sizeHint() const Q_DECL_OVERRIDE; protected: - void keyPressEvent(QKeyEvent *e); + void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE; private: QFileDialogPrivate *d_ptr; }; @@ -326,10 +332,10 @@ class QFileDialogTreeView : public QTreeView public: QFileDialogTreeView(QWidget *parent); void setFileDialogPrivate(QFileDialogPrivate *d_pointer); - QSize sizeHint() const; + QSize sizeHint() const Q_DECL_OVERRIDE; protected: - void keyPressEvent(QKeyEvent *e); + void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE; private: QFileDialogPrivate *d_ptr; }; diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/kernel/qwidget.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/kernel/qwidget.cpp similarity index 97% rename from Telegram/_qt_5_4_0_patch/qtbase/src/widgets/kernel/qwidget.cpp rename to Telegram/_qt_5_5_0_patch/qtbase/src/widgets/kernel/qwidget.cpp index e99b1c322..1bdaff5b7 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/kernel/qwidget.cpp +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/kernel/qwidget.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtWidgets module of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -35,7 +35,7 @@ #include "qapplication_p.h" #include "qbrush.h" #include "qcursor.h" -#include "qdesktopwidget.h" +#include "qdesktopwidget_p.h" #include "qevent.h" #include "qhash.h" #include "qlayout.h" @@ -53,7 +53,7 @@ #ifndef QT_NO_ACCESSIBILITY # include "qaccessible.h" #endif -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC # include "qt_mac_p.h" # include "qt_cocoa_helpers_mac_p.h" # include "qmainwindow.h" @@ -76,7 +76,7 @@ #include #include #include -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC # include #endif #include @@ -108,7 +108,7 @@ QT_BEGIN_NAMESPACE static bool qt_enable_backingstore = true; -#ifdef Q_WS_X11 +#ifdef Q_DEAD_CODE_FROM_QT4_X11 // for compatibility with Qt 4.0 Q_WIDGETS_EXPORT void qt_x11_set_global_double_buffer(bool enable) { @@ -116,7 +116,7 @@ Q_WIDGETS_EXPORT void qt_x11_set_global_double_buffer(bool enable) } #endif -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC bool qt_mac_clearDirtyOnWidgetInsideDrawWidget = false; #endif @@ -131,7 +131,7 @@ static inline bool hasBackingStoreSupport() return true; } -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC # define QT_NO_PAINT_DEBUG #endif @@ -272,13 +272,13 @@ QWidgetPrivate::QWidgetPrivate(int version) #if defined(Q_OS_WIN) , noPaintOnScreen(0) #endif -#if defined(Q_WS_X11) +#if defined(Q_DEAD_CODE_FROM_QT4_X11) , picture(0) -#elif defined(Q_WS_WIN) +#elif defined(Q_DEAD_CODE_FROM_QT4_WIN) #ifndef QT_NO_GESTURES , nativeGesturePanEnabled(0) #endif -#elif defined(Q_WS_MAC) +#elif defined(Q_DEAD_CODE_FROM_QT4_MAC) , needWindowChange(0) , window_event(0) , qd_hd(0) @@ -294,7 +294,7 @@ QWidgetPrivate::QWidgetPrivate(int version) isWidget = true; memset(high_attributes, 0, sizeof(high_attributes)); -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC drawRectOriginalAdded = false; originalDrawMethod = true; changeMethods = false; @@ -303,7 +303,7 @@ QWidgetPrivate::QWidgetPrivate(int version) toolbar_ancestor = 0; flushRequested = false; touchEventsEnabled = false; -#endif // Q_WS_MAC +#endif // Q_DEAD_CODE_FROM_QT4_MAC #ifdef QWIDGET_EXTRA_DEBUG static int count = 0; qDebug() << "widgets" << ++count; @@ -359,12 +359,12 @@ void QWidgetPrivate::setWSGeometry() void QWidgetPrivate::updateWidgetTransform(QEvent *event) { Q_Q(QWidget); - if (q == qGuiApp->focusObject() || event->type() == QEvent::FocusIn) { + if (q == QGuiApplication::focusObject() || event->type() == QEvent::FocusIn) { QTransform t; QPoint p = q->mapTo(q->topLevelWidget(), QPoint(0,0)); t.translate(p.x(), p.y()); - qApp->inputMethod()->setInputItemTransform(t); - qApp->inputMethod()->setInputItemRectangle(q->rect()); + QGuiApplication::inputMethod()->setInputItemTransform(t); + QGuiApplication::inputMethod()->setInputItemRectangle(q->rect()); } } @@ -1063,7 +1063,7 @@ void QWidgetPrivate::adjustFlags(Qt::WindowFlags &flags, QWidget *w) // Only enable this on non-Mac platforms. Since the old way of doing this would // interpret WindowSystemMenuHint as a close button and we can't change that behavior // we can't just add this in. -#ifndef Q_WS_MAC +#ifndef Q_DEAD_CODE_FROM_QT4_MAC if ((flags & (Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint | Qt::WindowContextHelpButtonHint)) # ifdef Q_OS_WIN && type != Qt::Dialog // QTBUG-2027, allow for menu-less dialogs. @@ -1111,9 +1111,10 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) if (allWidgets) allWidgets->insert(q); - QWidget *desktopWidget = 0; + int targetScreen = -1; if (parentWidget && parentWidget->windowType() == Qt::Desktop) { - desktopWidget = parentWidget; + const QDesktopScreenWidget *sw = qobject_cast(parentWidget); + targetScreen = sw ? sw->screenNumber() : 0; parentWidget = 0; } @@ -1126,17 +1127,17 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) } #endif -#if defined(Q_WS_X11) +#if defined(Q_DEAD_CODE_FROM_QT4_X11) if (desktopWidget) { // make sure the widget is created on the same screen as the // programmer specified desktop widget xinfo = desktopWidget->d_func()->xinfo; } #endif - if (desktopWidget) { - const int screen = desktopWidget->d_func()->topData()->screenIndex; + if (targetScreen >= 0) { + topData()->initialScreenIndex = targetScreen; if (QWindow *window = q->windowHandle()) - window->setScreen(QGuiApplication::screens().value(screen, 0)); + window->setScreen(QGuiApplication::screens().value(targetScreen, Q_NULLPTR)); } data.fstrut_dirty = true; @@ -1160,7 +1161,7 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) mustHaveWindowHandle = 1; q->setAttribute(Qt::WA_NativeWindow); } -//#ifdef Q_WS_MAC +//#ifdef Q_DEAD_CODE_FROM_QT4_MAC // q->setAttribute(Qt::WA_NativeWindow); //#endif @@ -1185,9 +1186,9 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) setOpaque(q->isWindow() && background.style() != Qt::NoBrush && background.isOpaque()); } data.fnt = QFont(data.fnt, q); -#if defined(Q_WS_X11) +#if defined(Q_DEAD_CODE_FROM_QT4_X11) data.fnt.x11SetScreen(xinfo.screen()); -#endif // Q_WS_X11 +#endif // Q_DEAD_CODE_FROM_QT4_X11 q->setAttribute(Qt::WA_PendingMoveEvent); q->setAttribute(Qt::WA_PendingResizeEvent); @@ -1204,7 +1205,7 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) extraPaintEngine = 0; -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC // If we add a child to the unified toolbar, we have to redirect the painting. if (parentWidget && parentWidget->d_func() && parentWidget->d_func()->isInUnifiedToolbar) { if (parentWidget->d_func()->unifiedSurface) { @@ -1212,7 +1213,7 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) parentWidget->d_func()->unifiedSurface->recursiveRedirect(toolbar, toolbar, toolbar->d_func()->toolbar_offset); } } -#endif // Q_WS_MAC +#endif // Q_DEAD_CODE_FROM_QT4_MAC } @@ -1283,10 +1284,8 @@ void QWidget::create(WId window, bool initializeWindow, bool destroyOldWindow) } - static int paintOnScreenEnv = -1; - if (paintOnScreenEnv == -1) - paintOnScreenEnv = qgetenv("QT_ONSCREEN_PAINT").toInt() > 0 ? 1 : 0; - if (paintOnScreenEnv == 1) + static const bool paintOnScreenEnv = qEnvironmentVariableIntValue("QT_ONSCREEN_PAINT") > 0; + if (paintOnScreenEnv) setAttribute(Qt::WA_PaintOnScreen); if (QApplicationPrivate::testAttribute(Qt::AA_NativeWindows)) @@ -1297,14 +1296,14 @@ void QWidget::create(WId window, bool initializeWindow, bool destroyOldWindow) << "Alien?" << !testAttribute(Qt::WA_NativeWindow); #endif -#if defined (Q_WS_WIN) && !defined(QT_NO_DRAGANDDROP) +#if defined (Q_DEAD_CODE_FROM_QT4_WIN) && !defined(QT_NO_DRAGANDDROP) // Unregister the dropsite (if already registered) before we // re-create the widget with a native window. if (testAttribute(Qt::WA_WState_Created) && !internalWinId() && testAttribute(Qt::WA_NativeWindow) && d->extra && d->extra->dropTarget) { d->registerDropSite(false); } -#endif // defined (Q_WS_WIN) && !defined(QT_NO_DRAGANDDROP) +#endif // defined (Q_DEAD_CODE_FROM_QT4_WIN) && !defined(QT_NO_DRAGANDDROP) d->updateIsOpaque(); @@ -1414,8 +1413,15 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO win->setGeometry(q->geometry()); else win->resize(q->size()); - if (win->isTopLevel()) - win->setScreen(QGuiApplication::screens().value(topData()->screenIndex, 0)); + if (win->isTopLevel()) { + int screenNumber = topData()->initialScreenIndex; + topData()->initialScreenIndex = -1; + if (screenNumber < 0) { + screenNumber = q->windowType() != Qt::Desktop + ? QApplication::desktop()->screenNumber(q) : 0; + } + win->setScreen(QGuiApplication::screens().value(screenNumber, Q_NULLPTR)); + } QSurfaceFormat format = win->requestedFormat(); if ((flags & Qt::Window) && win->surfaceType() != QSurface::OpenGLSurface @@ -1585,7 +1591,7 @@ QWidget::~QWidget() } } -#if defined(Q_WS_WIN) || defined(Q_WS_X11)|| defined(Q_WS_MAC) +#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(Q_DEAD_CODE_FROM_QT4_X11)|| defined(Q_DEAD_CODE_FROM_QT4_MAC) else if (!internalWinId() && isVisible()) { qApp->d_func()->sendSyntheticEnterLeave(this); } @@ -1629,7 +1635,7 @@ QWidget::~QWidget() d->blockSig = blocked; -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC // QCocoaView holds a pointer back to this widget. Clear it now // to make sure it's not followed later on. The lifetime of the // QCocoaView might exceed the lifetime of this widget in cases @@ -1680,7 +1686,7 @@ void QWidgetPrivate::setWinId(WId id) // set widget identifier const WId oldWinId = data.winid; data.winid = id; -#if defined(Q_WS_X11) +#if defined(Q_DEAD_CODE_FROM_QT4_X11) hd = id; // X11: hd == ident #endif if (mapper && id && !userDesktopWidget) { @@ -1715,10 +1721,10 @@ void QWidgetPrivate::createTLExtra() x->embedded = 0; x->window = 0; x->shareContext = 0; - x->screenIndex = 0; -#ifdef Q_WS_MAC + x->initialScreenIndex = -1; +#ifdef Q_DEAD_CODE_FROM_QT4_MAC x->wasMaximized = false; -#endif // Q_WS_MAC +#endif // Q_DEAD_CODE_FROM_QT4_MAC #ifdef QWIDGET_EXTRA_DEBUG static int count = 0; qDebug() << "tlextra" << ++count; @@ -2112,14 +2118,14 @@ void QWidgetPrivate::subtractOpaqueSiblings(QRegion &sourceRegion, bool *hasDirt bool alsoNonOpaque) const { Q_Q(const QWidget); - static int disableSubtractOpaqueSiblings = qgetenv("QT_NO_SUBTRACTOPAQUESIBLINGS").toInt(); + static int disableSubtractOpaqueSiblings = qEnvironmentVariableIntValue("QT_NO_SUBTRACTOPAQUESIBLINGS"); if (disableSubtractOpaqueSiblings || q->isWindow()) return; -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC if (q->d_func()->isInUnifiedToolbar) return; -#endif // Q_WS_MAC +#endif // Q_DEAD_CODE_FROM_QT4_MAC QRect clipBoundingRect; bool dirtyClipBoundingRect = true; @@ -2253,7 +2259,7 @@ void QWidgetPrivate::updateIsOpaque() #endif //QT_NO_GRAPHICSEFFECT Q_Q(QWidget); -#ifdef Q_WS_X11 +#ifdef Q_DEAD_CODE_FROM_QT4_X11 if (q->testAttribute(Qt::WA_X11OpenGLOverlay)) { setOpaque(false); return; @@ -2312,7 +2318,7 @@ static inline void fillRegion(QPainter *painter, const QRegion &rgn, const QBrus Q_ASSERT(painter); if (brush.style() == Qt::TexturePattern) { -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC // Optimize pattern filling on mac by using HITheme directly // when filling with the standard widget background. // Defined in qmacstyle_mac.cpp @@ -2324,7 +2330,7 @@ static inline void fillRegion(QPainter *painter, const QRegion &rgn, const QBrus painter->setClipRegion(rgn); painter->drawTiledPixmap(rect, brush.texture(), rect.topLeft()); } -#endif // Q_WS_MAC +#endif // Q_DEAD_CODE_FROM_QT4_MAC } else if (brush.gradient() && brush.gradient()->coordinateMode() == QGradient::ObjectBoundingMode) { @@ -2396,7 +2402,7 @@ void QWidgetPrivate::paintBackground(QPainter *painter, const QRegion &rgn, int visible widgets. */ -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC extern QPointer qt_button_down; #else extern QWidget *qt_button_down; @@ -2602,6 +2608,8 @@ QString QWidget::styleSheet() const void QWidget::setStyleSheet(const QString& styleSheet) { Q_D(QWidget); + if (data->in_destructor) + return; d->createExtra(); QStyleSheetStyle *proxy = qobject_cast(d->extra->style); @@ -2683,7 +2691,7 @@ void QWidget::setStyle(QStyle *style) } void QWidgetPrivate::setStyle_helper(QStyle *newStyle, bool propagate, bool -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC metalHack #endif ) @@ -2694,7 +2702,7 @@ void QWidgetPrivate::setStyle_helper(QStyle *newStyle, bool propagate, bool QPointer origStyle; #endif -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC // the metalhack boolean allows Qt/Mac to do a proper re-polish depending // on how the Qt::WA_MacBrushedMetal attribute is set. It is only ever // set when changing that attribute and passes the widget's CURRENT style. @@ -2714,12 +2722,12 @@ void QWidgetPrivate::setStyle_helper(QStyle *newStyle, bool propagate, bool if (q->windowType() != Qt::Desktop) { if (polished) { oldStyle->unpolish(q); -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC if (metalHack) macUpdateMetalAttribute(); #endif q->style()->polish(q); -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC } else if (metalHack) { macUpdateMetalAttribute(); #endif @@ -3084,7 +3092,7 @@ bool QWidget::isFullScreen() const */ void QWidget::showFullScreen() { -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC // If the unified toolbar is enabled, we have to disable it before going fullscreen. QMainWindow *mainWindow = qobject_cast(this); if (mainWindow && mainWindow->unifiedTitleAndToolBarOnMac()) { @@ -3092,7 +3100,7 @@ void QWidget::showFullScreen() QMainWindowLayout *mainLayout = qobject_cast(mainWindow->layout()); mainLayout->activateUnifiedToolbarAfterFullScreen = true; } -#endif // Q_WS_MAC +#endif // Q_DEAD_CODE_FROM_QT4_MAC ensurePolished(); setWindowState((windowState() & ~(Qt::WindowMinimized | Qt::WindowMaximized)) @@ -3120,7 +3128,7 @@ void QWidget::showMaximized() setWindowState((windowState() & ~(Qt::WindowMinimized | Qt::WindowFullScreen)) | Qt::WindowMaximized); -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC // If the unified toolbar was enabled before going fullscreen, we have to enable it back. QMainWindow *mainWindow = qobject_cast(this); if (mainWindow) @@ -3131,7 +3139,7 @@ void QWidget::showMaximized() mainLayout->activateUnifiedToolbarAfterFullScreen = false; } } -#endif // Q_WS_MAC +#endif // Q_DEAD_CODE_FROM_QT4_MAC setVisible(true); } @@ -3149,7 +3157,7 @@ void QWidget::showNormal() setWindowState(windowState() & ~(Qt::WindowMinimized | Qt::WindowMaximized | Qt::WindowFullScreen)); -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC // If the unified toolbar was enabled before going fullscreen, we have to enable it back. QMainWindow *mainWindow = qobject_cast(this); if (mainWindow) @@ -3160,7 +3168,7 @@ void QWidget::showNormal() mainLayout->activateUnifiedToolbarAfterFullScreen = false; } } -#endif // Q_WS_MAC +#endif // Q_DEAD_CODE_FROM_QT4_MAC setVisible(true); } @@ -3221,7 +3229,11 @@ void QWidget::addAction(QAction *action) \sa removeAction(), QMenu, addAction() */ +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) +void QWidget::addActions(const QList &actions) +#else void QWidget::addActions(QList actions) +#endif { for(int i = 0; i < actions.count(); i++) insertAction(0, actions.at(i)); @@ -3368,7 +3380,7 @@ void QWidgetPrivate::setEnabled_helper(bool enable) if (w && !w->testAttribute(attribute)) w->d_func()->setEnabled_helper(enable); } -#if defined(Q_WS_X11) +#if defined(Q_DEAD_CODE_FROM_QT4_X11) if (q->testAttribute(Qt::WA_SetCursor) || q->isWindow()) { // enforce the windows behavior of clearing the cursor on // disabled widgets @@ -3382,7 +3394,7 @@ void QWidgetPrivate::setEnabled_helper(bool enable) qt_qpa_set_cursor(q, false); } #endif -#if defined(Q_WS_MAC) +#if defined(Q_DEAD_CODE_FROM_QT4_MAC) setEnabled_helper_sys(enable); #endif #ifndef QT_NO_IM @@ -3391,10 +3403,10 @@ void QWidgetPrivate::setEnabled_helper(bool enable) if (enable) { if (focusWidget->testAttribute(Qt::WA_InputMethodEnabled)) - qApp->inputMethod()->update(Qt::ImEnabled); + QGuiApplication::inputMethod()->update(Qt::ImEnabled); } else { - qApp->inputMethod()->commit(); - qApp->inputMethod()->update(Qt::ImEnabled); + QGuiApplication::inputMethod()->commit(); + QGuiApplication::inputMethod()->update(Qt::ImEnabled); } } #endif //QT_NO_IM @@ -4274,7 +4286,7 @@ QPoint QWidget::mapFromParent(const QPoint &pos) const QWidget *QWidget::window() const { - QWidget *w = (QWidget *)this; + QWidget *w = const_cast(this); QWidget *p = w->parentWidget(); while (!w->isWindow() && p) { w = p; @@ -4486,7 +4498,7 @@ const QPalette &QWidget::palette() const ) { data->pal.setCurrentColorGroup(QPalette::Active); } else { -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC extern bool qt_mac_can_clickThrough(const QWidget *); //qwidget_mac.cpp if (qt_mac_can_clickThrough(this)) data->pal.setCurrentColorGroup(QPalette::Active); @@ -4730,7 +4742,7 @@ void QWidgetPrivate::updateFont(const QFont &font) #endif data.fnt = QFont(font, q); -#if defined(Q_WS_X11) +#if defined(Q_DEAD_CODE_FROM_QT4_X11) // make sure the font set on this widget is associated with the correct screen data.fnt.x11SetScreen(xinfo.screen()); #endif @@ -4847,7 +4859,7 @@ void QWidget::unsetLayoutDirection() \fn QFontMetrics QWidget::fontMetrics() const Returns the font metrics for the widget's current font. - Equivalent to QFontMetrics(widget->font()). + Equivalent to \c QFontMetrics(widget->font()). \sa font(), fontInfo(), setFont() */ @@ -4856,7 +4868,7 @@ void QWidget::unsetLayoutDirection() \fn QFontInfo QWidget::fontInfo() const Returns the font info for the widget's current font. - Equivalent to QFontInto(widget->font()). + Equivalent to \c QFontInfo(widget->font()). \sa font(), fontMetrics(), setFont() */ @@ -4903,7 +4915,7 @@ void QWidget::setCursor(const QCursor &cursor) { Q_D(QWidget); // On Mac we must set the cursor even if it is the ArrowCursor. -#if !defined(Q_WS_MAC) +#if !defined(Q_DEAD_CODE_FROM_QT4_MAC) if (cursor.shape() != Qt::ArrowCursor || (d->extra && d->extra->curs)) #endif @@ -5219,6 +5231,9 @@ QGraphicsEffect *QWidget::graphicsEffect() const \note This function will apply the effect on itself and all its children. + \note Graphics effects are not supported for OpenGL-based widgets, such as QGLWidget, + QOpenGLWidget and QQuickWidget. + \since 4.6 \sa graphicsEffect() @@ -5328,7 +5343,7 @@ void QWidgetPrivate::render_helper(QPainter *painter, const QPoint &targetOffset Q_ASSERT(!toBePainted.isEmpty()); Q_Q(QWidget); -#ifndef Q_WS_MAC +#ifndef Q_DEAD_CODE_FROM_QT4_MAC const QTransform originalTransform = painter->worldTransform(); const bool useDeviceCoordinates = originalTransform.isScaling(); if (!useDeviceCoordinates) { @@ -5339,7 +5354,10 @@ void QWidgetPrivate::render_helper(QPainter *painter, const QPoint &targetOffset if (size.isNull()) return; - QPixmap pixmap(size); + const qreal pixmapDevicePixelRatio = qreal(painter->device()->devicePixelRatio()); + QPixmap pixmap(size * pixmapDevicePixelRatio); + pixmap.setDevicePixelRatio(pixmapDevicePixelRatio); + if (!(renderFlags & QWidget::DrawWindowBackground) || !isOpaque) pixmap.fill(Qt::transparent); q->render(&pixmap, QPoint(), toBePainted, renderFlags); @@ -5352,7 +5370,7 @@ void QWidgetPrivate::render_helper(QPainter *painter, const QPoint &targetOffset if (restore) painter->setRenderHints(QPainter::SmoothPixmapTransform, false); -#ifndef Q_WS_MAC +#ifndef Q_DEAD_CODE_FROM_QT4_MAC } else { // Render via a pixmap in device coordinates (to avoid pixmap scaling). QTransform transform = originalTransform; @@ -5461,7 +5479,7 @@ void QWidgetPrivate::drawWidget(QPaintDevice *pdev, const QRegion &rgn, const QP if (paintEngine) { setRedirected(pdev, -offset); -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC // (Alien support) Special case for Mac when redirecting: If the paint device // is of the Widget type we need to set WA_WState_InPaintEvent since painting // outside the paint event is not supported on QWidgets. The attributeis @@ -5538,12 +5556,12 @@ void QWidgetPrivate::drawWidget(QPaintDevice *pdev, const QRegion &rgn, const QP } // Native widgets need to be marked dirty on screen so painting will be done in correct context - if (backingStore && !onScreen && !asRoot && (q->internalWinId() || !q->nativeParentWidget()->isWindow())) + if (backingStore && !onScreen && !asRoot && (q->internalWinId() || (q->nativeParentWidget() && !q->nativeParentWidget()->isWindow()))) backingStore->markDirtyOnScreen(toBePainted, q, offset); //restore if (paintEngine) { -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC if (pdev->devType() == QInternal::Widget) static_cast(pdev)->setAttribute(Qt::WA_WState_InPaintEvent, false); #endif @@ -5617,7 +5635,7 @@ void QWidgetPrivate::render(QPaintDevice *target, const QPoint &targetOffset, if (paintRegion.isEmpty()) return; -#ifndef Q_WS_MAC +#ifndef Q_DEAD_CODE_FROM_QT4_MAC QPainter *oldSharedPainter = inRenderWithPainter ? sharedPainter() : 0; // Use the target's shared painter if set (typically set when doing @@ -6236,7 +6254,7 @@ QString QWidget::windowRole() const */ void QWidget::setWindowRole(const QString &role) { -#if defined(Q_WS_X11) +#if defined(Q_DEAD_CODE_FROM_QT4_X11) Q_D(QWidget); d->topData()->role = role; d->setWindowRole(); @@ -6378,7 +6396,7 @@ void QWidget::setFocus(Qt::FocusReason reason) f = f->d_func()->extra->focus_proxy; if (QApplication::focusWidget() == f -#if defined(Q_WS_WIN) +#if defined(Q_DEAD_CODE_FROM_QT4_WIN) && GetFocus() == f->internalWinId() #endif ) @@ -6414,7 +6432,7 @@ void QWidget::setFocus(Qt::FocusReason reason) if (prev) { if (reason != Qt::PopupFocusReason && reason != Qt::MenuBarFocusReason && prev->testAttribute(Qt::WA_InputMethodEnabled)) { - qApp->inputMethod()->commit(); + QGuiApplication::inputMethod()->commit(); } if (reason != Qt::NoFocusReason) { @@ -6537,7 +6555,7 @@ void QWidget::clearFocus() { if (hasFocus()) { if (testAttribute(Qt::WA_InputMethodEnabled)) - qApp->inputMethod()->commit(); + QGuiApplication::inputMethod()->commit(); QFocusEvent focusAboutToChange(QEvent::FocusAboutToChange); QApplication::sendEvent(this, &focusAboutToChange); @@ -6563,7 +6581,7 @@ void QWidget::clearFocus() if (hasFocus()) { // Update proxy state QApplicationPrivate::setFocusWidget(0, Qt::OtherFocusReason); -#if defined(Q_WS_WIN) +#if defined(Q_DEAD_CODE_FROM_QT4_WIN) if (!(windowType() == Qt::Popup) && GetFocus() == internalWinId()) SetFocus(0); else @@ -7118,14 +7136,16 @@ void QWidgetPrivate::setGeometry_sys(int x, int y, int w, int h, bool isMove) bool needsShow = false; - if (!(data.window_state & Qt::WindowFullScreen) && (w == 0 || h == 0)) { - q->setAttribute(Qt::WA_OutsideWSRange, true); - if (q->isVisible() && q->testAttribute(Qt::WA_Mapped)) - hide_sys(); - data.crect = QRect(x, y, w, h); - } else if (q->isVisible() && q->testAttribute(Qt::WA_OutsideWSRange)) { - q->setAttribute(Qt::WA_OutsideWSRange, false); - needsShow = true; + if (q->isWindow()) { + if (!(data.window_state & Qt::WindowFullScreen) && (w == 0 || h == 0)) { + q->setAttribute(Qt::WA_OutsideWSRange, true); + if (q->isVisible() && q->testAttribute(Qt::WA_Mapped)) + hide_sys(); + data.crect = QRect(x, y, w, h); + } else if (q->isVisible() && q->testAttribute(Qt::WA_OutsideWSRange)) { + q->setAttribute(Qt::WA_OutsideWSRange, false); + needsShow = true; + } } if (q->isVisible()) { @@ -7193,7 +7213,7 @@ void QWidgetPrivate::setGeometry_sys(int x, int y, int w, int h, bool isMove) */ QByteArray QWidget::saveGeometry() const { -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC // We check if the window was maximized during this invocation. If so, we need to record the // starting position as 0,0. Q_D(const QWidget); @@ -7204,7 +7224,7 @@ QByteArray QWidget::saveGeometry() const newFramePosition.moveTo(0, 0); newNormalPosition.moveTo(0, 0); } -#endif // Q_WS_MAC +#endif // Q_DEAD_CODE_FROM_QT4_MAC QByteArray array; QDataStream stream(&array, QIODevice::WriteOnly); stream.setVersion(QDataStream::Qt_4_0); @@ -7218,13 +7238,13 @@ QByteArray QWidget::saveGeometry() const stream << magicNumber << majorVersion << minorVersion -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC << newFramePosition << newNormalPosition #else << frameGeometry() << normalGeometry() -#endif // Q_WS_MAC +#endif // Q_DEAD_CODE_FROM_QT4_MAC << qint32(screenNumber) << quint8(windowState() & Qt::WindowMaximized) << quint8(windowState() & Qt::WindowFullScreen) @@ -7235,7 +7255,7 @@ QByteArray QWidget::saveGeometry() const /*! \since 4.2 - Restores the geometry and state top-level widgets stored in the + Restores the geometry and state of top-level widgets stored in the byte array \a geometry. Returns \c true on success; otherwise returns \c false. @@ -7295,6 +7315,8 @@ bool QWidget::restoreGeometry(const QByteArray &geometry) stream >> restoredScreenWidth; const QDesktopWidget * const desktop = QApplication::desktop(); + if (restoredScreenNumber >= desktop->numScreens()) + restoredScreenNumber = desktop->primaryScreen(); const qreal screenWidthF = qreal(desktop->screenGeometry(restoredScreenNumber).width()); // Sanity check bailing out when large variations of screen sizes occur due to // high DPI scaling or different levels of DPI awareness. @@ -7322,9 +7344,6 @@ bool QWidget::restoreGeometry(const QByteArray &geometry) .expandedTo(d_func()->adjustedSize())); } - if (restoredScreenNumber >= desktop->numScreens()) - restoredScreenNumber = desktop->primaryScreen(); - const QRect availableGeometry = desktop->availableGeometry(restoredScreenNumber); // Modify the restored geometry if we are about to restore to coordinates @@ -7333,7 +7352,7 @@ bool QWidget::restoreGeometry(const QByteArray &geometry) // - The title bar is outside the available geometry. // - (Mac only) The window is higher than the available geometry. It must // be possible to bring the size grip on screen by moving the window. -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC restoredFrameGeometry.setHeight(qMin(restoredFrameGeometry.height(), availableGeometry.height())); restoredNormalGeometry.setHeight(qMin(restoredNormalGeometry.height(), availableGeometry.height() - frameHeight)); #endif @@ -7382,7 +7401,7 @@ bool QWidget::restoreGeometry(const QByteArray &geometry) d_func()->topData()->normalGeometry = restoredNormalGeometry; } else { QPoint offset; -#ifdef Q_WS_X11 +#ifdef Q_DEAD_CODE_FROM_QT4_X11 if (isFullScreen()) offset = d_func()->topData()->fullScreenOffset; #endif @@ -7738,10 +7757,17 @@ void QWidgetPrivate::show_helper() + const bool isWindow = q->isWindow(); +#ifndef QT_NO_GRAPHICSVIEW + bool isEmbedded = isWindow && q->graphicsProxyWidget() != Q_NULLPTR; +#else + bool isEmbedded = false; +#endif + // popup handling: new popups and tools need to be raised, and // existing popups must be closed. Also propagate the current // windows's KeyboardFocusChange status. - if (q->isWindow()) { + if (isWindow && !isEmbedded) { if ((q->windowType() == Qt::Tool) || (q->windowType() == Qt::Popup) || q->windowType() == Qt::ToolTip) { q->raise(); if (q->parentWidget() && q->parentWidget()->window()->testAttribute(Qt::WA_KeyboardFocusChange)) @@ -7756,10 +7782,8 @@ void QWidgetPrivate::show_helper() // Automatic embedding of child windows of widgets already embedded into // QGraphicsProxyWidget when they are shown the first time. - bool isEmbedded = false; #ifndef QT_NO_GRAPHICSVIEW - if (q->isWindow()) { - isEmbedded = q->graphicsProxyWidget() ? true : false; + if (isWindow) { if (!isEmbedded && !bypassGraphicsProxyWidget(q)) { QGraphicsProxyWidget *ancestorProxy = nearestGraphicsProxyWidget(q->parentWidget()); if (ancestorProxy) { @@ -7775,7 +7799,7 @@ void QWidgetPrivate::show_helper() // On Windows, show the popup now so that our own focus handling // stores the correct old focus widget even if it's stolen in the // showevent -#if defined(Q_WS_WIN) || defined(Q_WS_MAC) +#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(Q_DEAD_CODE_FROM_QT4_MAC) if (!isEmbedded && q->windowType() == Qt::Popup) qApp->d_func()->openPopup(q); #endif @@ -7898,7 +7922,7 @@ void QWidgetPrivate::hide_helper() if (!isEmbedded && (q->windowType() == Qt::Popup)) qApp->d_func()->closePopup(q); -#if defined(Q_WS_WIN) +#if defined(Q_DEAD_CODE_FROM_QT4_WIN) if (q->isWindow() && !(q->windowType() == Qt::Popup) && q->parentWidget() && !q->parentWidget()->isHidden() && q->isActiveWindow()) q->parentWidget()->activateWindow(); // Activate parent @@ -8013,28 +8037,13 @@ void QWidget::setVisible(bool visible) && !parentWidget()->testAttribute(Qt::WA_WState_Created)) parentWidget()->window()->d_func()->createRecursively(); - //we have to at least create toplevels before applyX11SpecificCommandLineArguments - //but not children of non-visible parents + //create toplevels but not children of non-visible parents QWidget *pw = parentWidget(); if (!testAttribute(Qt::WA_WState_Created) && (isWindow() || pw->testAttribute(Qt::WA_WState_Created))) { create(); } - // Handling of the -qwindowgeometry, -geometry command line arguments - if (windowType() == Qt::Window && windowHandle()) { - static bool done = false; - if (!done) { - done = true; - const QRect oldGeometry = frameGeometry(); - const QRect geometry = QGuiApplicationPrivate::applyWindowGeometrySpecification(oldGeometry, windowHandle()); - if (oldGeometry.size() != geometry.size()) - resize(geometry.size()); - if (geometry.topLeft() != oldGeometry.topLeft()) - move(geometry.topLeft()); - } // done - } - bool wasResized = testAttribute(Qt::WA_Resized); Qt::WindowStates initialWindowState = windowState(); @@ -8093,7 +8102,7 @@ void QWidget::setVisible(bool visible) } else { // hide if (testAttribute(Qt::WA_WState_ExplicitShowHide) && testAttribute(Qt::WA_WState_Hidden)) return; -#if defined(Q_WS_WIN) +#if defined(Q_DEAD_CODE_FROM_QT4_WIN) // reset WS_DISABLED style in a Blocked window if(isWindow() && testAttribute(Qt::WA_WState_Created) && QApplicationPrivate::isBlockedByModal(this)) @@ -8178,7 +8187,7 @@ void QWidgetPrivate::hideChildren(bool spontaneous) QWidget *widget = qobject_cast(childList.at(i)); if (!widget || widget->isWindow() || widget->testAttribute(Qt::WA_WState_Hidden)) continue; -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC // Before doing anything we need to make sure that we don't leave anything in a non-consistent state. // When hiding a widget we need to make sure that no mouse_down events are active, because // the mouse_up event will never be received by a hidden widget or one of its descendants. @@ -8194,7 +8203,7 @@ void QWidgetPrivate::hideChildren(bool spontaneous) // supposed to trigger because it is not visible. if(widget == qt_button_down) qt_button_down = 0; -#endif // Q_WS_MAC +#endif // Q_DEAD_CODE_FROM_QT4_MAC if (spontaneous) widget->setAttribute(Qt::WA_Mapped, false); else @@ -8429,7 +8438,7 @@ QSize QWidgetPrivate::adjustedSize() const s.setWidth(qMax(s.width(), 200)); if (exp & Qt::Vertical) s.setHeight(qMax(s.height(), 100)); -#if defined(Q_WS_X11) +#if defined(Q_DEAD_CODE_FROM_QT4_X11) QRect screen = QApplication::desktop()->screenGeometry(q->x11Info().screen()); #else // all others QRect screen = QApplication::desktop()->screenGeometry(q->pos()); @@ -8562,7 +8571,7 @@ bool QWidget::isAncestorOf(const QWidget *child) const return false; } -#if defined(Q_WS_WIN) +#if defined(Q_DEAD_CODE_FROM_QT4_WIN) inline void setDisabledStyle(QWidget *w, bool setStyle) { // set/reset WS_DISABLED style. @@ -8674,7 +8683,7 @@ bool QWidget::event(QEvent *event) case QEvent::KeyPress: { QKeyEvent *k = (QKeyEvent *)event; bool res = false; - if (!(k->modifiers() & (Qt::ControlModifier | Qt::AltModifier | Qt::MetaModifier))) { //### Add MetaModifier? + if (!(k->modifiers() & (Qt::ControlModifier | Qt::AltModifier | Qt::MetaModifier))) { //### Add MetaModifier? if (k->key() == Qt::Key_Backtab || (k->key() == Qt::Key_Tab && (k->modifiers() & Qt::ShiftModifier))) res = focusNextPrevChild(false); @@ -8984,7 +8993,7 @@ bool QWidget::event(QEvent *event) } } } -#if defined(Q_WS_WIN) +#if defined(Q_DEAD_CODE_FROM_QT4_WIN) setDisabledStyle(this, (event->type() == QEvent::WindowBlocked)); #endif break; @@ -9011,7 +9020,7 @@ bool QWidget::event(QEvent *event) case QEvent::EmbeddingControl: d->topData()->frameStrut.setCoords(0 ,0, 0, 0); data->fstrut_dirty = false; -#if defined(Q_WS_WIN) || defined(Q_WS_X11) +#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(Q_DEAD_CODE_FROM_QT4_X11) d->topData()->embedded = 1; #endif break; @@ -9036,7 +9045,7 @@ bool QWidget::event(QEvent *event) } break; } -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC case QEvent::MacGLWindowChange: d->needWindowChange = false; break; @@ -9147,7 +9156,7 @@ void QWidget::changeEvent(QEvent * event) case QEvent::MacSizeChange: updateGeometry(); break; -#elif defined Q_WS_MAC +#elif defined Q_DEAD_CODE_FROM_QT4_MAC case QEvent::ToolTipChange: case QEvent::MouseTrackingChange: qt_mac_update_mouseTracking(this); @@ -9408,9 +9417,11 @@ void QWidget::focusOutEvent(QFocusEvent *) if (focusPolicy() != Qt::NoFocus || !isWindow()) update(); - // automatically hide the SIP +#ifndef Q_OS_IOS + // FIXME: revisit autoSIP logic, QTBUG-42906 if (qApp->autoSipEnabled() && testAttribute(Qt::WA_InputMethodEnabled)) - qApp->inputMethod()->hide(); + QGuiApplication::inputMethod()->hide(); +#endif } /*! @@ -9698,8 +9709,8 @@ void QWidget::setInputMethodHints(Qt::InputMethodHints hints) if (d->imHints == hints) return; d->imHints = hints; - if (this == qApp->focusObject()) - qApp->inputMethod()->update(Qt::ImHints); + if (this == QGuiApplication::focusObject()) + QGuiApplication::inputMethod()->update(Qt::ImHints); #endif //QT_NO_IM } @@ -10415,7 +10426,7 @@ void QWidget::setParent(QWidget *parent, Qt::WindowFlags f) // (f & Qt::MSWindowsOwnDC) clause (which is set on QGLWidgets on all // platforms). if (newParent -#if defined(Q_WS_WIN) || defined(QT_OPENGL_ES) +#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(QT_OPENGL_ES) || (f & Qt::MSWindowsOwnDC) #endif ) { @@ -10435,7 +10446,7 @@ void QWidget::setParent(QWidget *parent, Qt::WindowFlags f) } //### already hidden above ---> must probably do something smart on the mac -// #ifdef Q_WS_MAC +// #ifdef Q_DEAD_CODE_FROM_QT4_MAC // extern bool qt_mac_is_macdrawer(const QWidget *); //qwidget_mac.cpp // if(!qt_mac_is_macdrawer(q)) //special case // q->setAttribute(Qt::WA_WState_Hidden); @@ -10496,9 +10507,8 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) if (newparent && newparent->windowType() == Qt::Desktop) { // make sure the widget is created on the same screen as the // programmer specified desktop widget - - // get the desktop's screen number - targetScreen = newparent->window()->d_func()->topData()->screenIndex; + const QDesktopScreenWidget *sw = qobject_cast(newparent); + targetScreen = sw ? sw->screenNumber() : 0; newparent = 0; } @@ -10511,8 +10521,9 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) QWidget *parentWithWindow = newparent ? (newparent->windowHandle() ? newparent : newparent->nativeParentWidget()) : 0; if (parentWithWindow) { - if (f & Qt::Window) { - q->windowHandle()->setTransientParent(parentWithWindow->windowHandle()); + QWidget *topLevel = parentWithWindow->window(); + if ((f & Qt::Window) && topLevel && topLevel->windowHandle()) { + q->windowHandle()->setTransientParent(topLevel->windowHandle()); q->windowHandle()->setParent(0); } else { q->windowHandle()->setTransientParent(0); @@ -10529,7 +10540,7 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) f |= Qt::Window; if (targetScreen == -1) { if (parent) - targetScreen = q->parentWidget()->window()->d_func()->topData()->screenIndex; + targetScreen = QApplication::desktop()->screenNumber(q->parentWidget()->window()); } } @@ -10573,12 +10584,11 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) // move the window to the selected screen if (!newparent && targetScreen != -1) { - if (maybeTopData()) - maybeTopData()->screenIndex = targetScreen; // only if it is already created - if (q->testAttribute(Qt::WA_WState_Created)) { + if (q->testAttribute(Qt::WA_WState_Created)) q->windowHandle()->setScreen(QGuiApplication::screens().value(targetScreen, 0)); - } + else + topData()->initialScreenIndex = targetScreen; } } @@ -10914,9 +10924,9 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) return; Q_D(QWidget); - Q_ASSERT_X(sizeof(d->high_attributes)*8 >= (Qt::WA_AttributeCount - sizeof(uint)*8), - "QWidget::setAttribute(WidgetAttribute, bool)", - "QWidgetPrivate::high_attributes[] too small to contain all attributes in WidgetAttribute"); + Q_STATIC_ASSERT_X(sizeof(d->high_attributes)*8 >= (Qt::WA_AttributeCount - sizeof(uint)*8), + "QWidget::setAttribute(WidgetAttribute, bool): " + "QWidgetPrivate::high_attributes[] too small to contain all attributes in WidgetAttribute"); #ifdef Q_OS_WIN // ### Don't use PaintOnScreen+paintEngine() to do native painting in some future release if (attribute == Qt::WA_PaintOnScreen && on && windowType() != Qt::Desktop && !inherits("QGLWidget")) { @@ -10966,7 +10976,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) d->receiveChildEvents = !on; break; case Qt::WA_MacBrushedMetal: -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC d->setStyle_helper(style(), false, true); // Make sure things get unpolished/polished correctly. // fall through since changing the metal attribute affects the opaque size grip. case Qt::WA_MacOpaqueSizeGrip: @@ -10983,7 +10993,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) break; #endif case Qt::WA_MacAlwaysShowToolWindow: -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC d->macUpdateHideOnSuspend(); #endif break; @@ -11042,25 +11052,25 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) d->createTLSysExtra(); #ifndef QT_NO_IM QWidget *focusWidget = d->effectiveFocusWidget(); - if (on && !internalWinId() && this == qApp->focusObject() + if (on && !internalWinId() && this == QGuiApplication::focusObject() && focusWidget->testAttribute(Qt::WA_InputMethodEnabled)) { - qApp->inputMethod()->commit(); - qApp->inputMethod()->update(Qt::ImEnabled); + QGuiApplication::inputMethod()->commit(); + QGuiApplication::inputMethod()->update(Qt::ImEnabled); } if (!qApp->testAttribute(Qt::AA_DontCreateNativeWidgetSiblings) && parentWidget()) parentWidget()->d_func()->enforceNativeChildren(); if (on && !internalWinId() && testAttribute(Qt::WA_WState_Created)) d->createWinId(); - if (isEnabled() && focusWidget->isEnabled() && this == qApp->focusObject() + if (isEnabled() && focusWidget->isEnabled() && this == QGuiApplication::focusObject() && focusWidget->testAttribute(Qt::WA_InputMethodEnabled)) { - qApp->inputMethod()->update(Qt::ImEnabled); + QGuiApplication::inputMethod()->update(Qt::ImEnabled); } #endif //QT_NO_IM break; } case Qt::WA_PaintOnScreen: d->updateIsOpaque(); -#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined(Q_WS_MAC) +#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(Q_DEAD_CODE_FROM_QT4_X11) || defined(Q_DEAD_CODE_FROM_QT4_MAC) // Recreate the widget if it's already created as an alien widget and // WA_PaintOnScreen is enabled. Paint on screen widgets must have win id. // So must their children. @@ -11080,16 +11090,16 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) d->updateSystemBackground(); break; case Qt::WA_TransparentForMouseEvents: -#ifdef Q_WS_MAC +#ifdef Q_DEAD_CODE_FROM_QT4_MAC d->macUpdateIgnoreMouseEvents(); #endif break; case Qt::WA_InputMethodEnabled: { #ifndef QT_NO_IM - if (qApp->focusObject() == this) { + if (QGuiApplication::focusObject() == this) { if (!on) - qApp->inputMethod()->commit(); - qApp->inputMethod()->update(Qt::ImEnabled); + QGuiApplication::inputMethod()->commit(); + QGuiApplication::inputMethod()->update(Qt::ImEnabled); } #endif //QT_NO_IM break; @@ -11099,7 +11109,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) d->resolveFont(); d->resolveLocale(); break; -#ifdef Q_WS_X11 +#ifdef Q_DEAD_CODE_FROM_QT4_X11 case Qt::WA_NoX11EventCompression: if (!d->extra) d->createExtra(); @@ -11124,7 +11134,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) break; } -#ifdef Q_WS_X11 +#ifdef Q_DEAD_CODE_FROM_QT4_X11 case Qt::WA_X11NetWmWindowTypeDesktop: case Qt::WA_X11NetWmWindowTypeDock: case Qt::WA_X11NetWmWindowTypeToolBar: @@ -11159,7 +11169,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) break; case Qt::WA_AcceptTouchEvents: -#if defined(Q_WS_WIN) || defined(Q_WS_MAC) +#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(Q_DEAD_CODE_FROM_QT4_MAC) if (on) d->registerTouchWindow(); #endif @@ -11577,8 +11587,8 @@ void QWidget::setShortcutAutoRepeat(int id, bool enable) void QWidget::updateMicroFocus() { // updating everything since this is currently called for any kind of state change - if (this == qApp->focusObject()) - qApp->inputMethod()->update(Qt::ImQueryAll); + if (this == QGuiApplication::focusObject()) + QGuiApplication::inputMethod()->update(Qt::ImQueryAll); } /*! @@ -11780,7 +11790,7 @@ QRect QWidgetPrivate::frameStrut() const } if (data.fstrut_dirty -#ifndef Q_WS_WIN +#ifndef Q_DEAD_CODE_FROM_QT4_WIN // ### Fix properly for 4.3 && q->isVisible() #endif @@ -12063,6 +12073,7 @@ QOpenGLContext *QWidgetPrivate::shareContext() const QOpenGLContext *ctx = new QOpenGLContext; ctx->setShareContext(qt_gl_global_share_context()); ctx->setFormat(extra->topextra->window->format()); + ctx->setScreen(extra->topextra->window->screen()); ctx->create(); that->extra->topextra->shareContext = ctx; } @@ -12255,7 +12266,7 @@ QPoint QWidget::mapToGlobal(const QPoint &pos) const { #ifndef QT_NO_GRAPHICSVIEW Q_D(const QWidget); - if (d->extra && d->extra->proxyWidget) { + if (d->extra && d->extra->proxyWidget && d->extra->proxyWidget->scene()) { const QList views = d->extra->proxyWidget->scene()->views(); if (!views.isEmpty()) { const QPointF scenePos = d->extra->proxyWidget->mapToScene(pos); @@ -12290,7 +12301,7 @@ QPoint QWidget::mapFromGlobal(const QPoint &pos) const { #ifndef QT_NO_GRAPHICSVIEW Q_D(const QWidget); - if (d->extra && d->extra->proxyWidget) { + if (d->extra && d->extra->proxyWidget && d->extra->proxyWidget->scene()) { const QList views = d->extra->proxyWidget->scene()->views(); if (!views.isEmpty()) { const QPoint viewPortPos = views.first()->viewport()->mapFromGlobal(pos); @@ -12389,10 +12400,9 @@ static void releaseMouseGrabOfWidget(QWidget *widget) \note Only visible widgets can grab mouse input. If isVisible() returns \c false for a widget, that widget cannot call grabMouse(). - \note \b{(Mac OS X developers)} For \e Cocoa, calling - grabMouse() on a widget only works when the mouse is inside the - frame of that widget. For \e Carbon, it works outside the widget's - frame as well, like for Windows and X11. + \note On Windows, grabMouse() only works when the mouse is inside a window + owned by the process. + On OS X, grabMouse() only works when the mouse is inside the frame of that widget. \sa releaseMouse(), grabKeyboard(), releaseKeyboard() */ @@ -12413,7 +12423,7 @@ void QWidget::grabMouse() \warning Grabbing the mouse might lock the terminal. - \note \b{(Mac OS X developers)} See the note in QWidget::grabMouse(). + \note See the note in QWidget::grabMouse(). \sa releaseMouse(), grabKeyboard(), releaseKeyboard(), setCursor() */ @@ -12576,13 +12586,10 @@ int QWidget::metric(PaintDeviceMetric m) const QWindow *topLevelWindow = 0; QScreen *screen = 0; - if (QWidget *topLevel = window()) + if (QWidget *topLevel = window()) { topLevelWindow = topLevel->windowHandle(); - - if (topLevelWindow) { - QPlatformScreen *platformScreen = QPlatformScreen::platformScreenForWindow(topLevelWindow); - if (platformScreen) - screen = platformScreen->screen(); + if (topLevelWindow) + screen = topLevelWindow->screen(); } if (!screen && QGuiApplication::primaryScreen()) screen = QGuiApplication::primaryScreen(); @@ -12692,7 +12699,7 @@ void QWidget::setMask(const QRegion &newMask) d->extra->mask = newMask; d->extra->hasMask = !newMask.isEmpty(); -#ifndef Q_WS_MAC +#ifndef Q_DEAD_CODE_FROM_QT4_MAC if (!testAttribute(Qt::WA_WState_Created)) return; #endif @@ -12781,6 +12788,14 @@ void QWidget::clearMask() setMask(QRegion()); } +void QWidgetPrivate::setWidgetParentHelper(QObject *widgetAsObject, QObject *newParent) +{ + Q_ASSERT(widgetAsObject->isWidgetType()); + Q_ASSERT(!newParent || newParent->isWidgetType()); + QWidget *widget = static_cast(widgetAsObject); + widget->setParent(static_cast(newParent)); +} + QT_END_NAMESPACE #include "moc_qwidget.cpp" diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/util/qsystemtrayicon.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/util/qsystemtrayicon.cpp similarity index 92% rename from Telegram/_qt_5_4_0_patch/qtbase/src/widgets/util/qsystemtrayicon.cpp rename to Telegram/_qt_5_5_0_patch/qtbase/src/widgets/util/qsystemtrayicon.cpp index 53c285654..aa9bc91a6 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/util/qsystemtrayicon.cpp +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/util/qsystemtrayicon.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtWidgets module of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -37,6 +37,7 @@ #ifndef QT_NO_SYSTEMTRAYICON #include "qmenu.h" +#include "qlist.h" #include "qevent.h" #include "qpoint.h" #include "qlabel.h" @@ -69,8 +70,12 @@ QT_BEGIN_NAMESPACE \list \li All supported versions of Windows. - \li All window managers for X11 that implement the \l{freedesktop.org} system - tray specification, including recent versions of KDE and GNOME. + \li All window managers and independent tray implementations for X11 that implement the + \l{http://standards.freedesktop.org/systemtray-spec/systemtray-spec-0.2.html freedesktop.org} + XEmbed system tray specification. + \li All X11 desktop environments that implement the D-Bus + \l{http://www.freedesktop.org/wiki/Specifications/StatusNotifierItem/ StatusNotifierItem} + specification, including recent versions of KDE and Unity. \li All supported versions of Mac OS X. Note that the Growl notification system must be installed for QSystemTrayIcon::showMessage() to display messages on Mac OS X prior to 10.8 (Mountain Lion). @@ -279,7 +284,7 @@ bool QSystemTrayIcon::isVisible() const */ bool QSystemTrayIcon::event(QEvent *e) { -#if defined(Q_WS_X11) +#if defined(Q_DEAD_CODE_FROM_QT4_X11) if (e->type() == QEvent::ToolTip) { Q_D(QSystemTrayIcon); return d->sys->deliverToolTipEvent(e); @@ -582,7 +587,7 @@ void QBalloonTip::balloon(const QPoint& pos, int msecs, bool showArrow) } QPainterPath path; -#if defined(QT_NO_XSHAPE) && defined(Q_WS_X11) +#if defined(QT_NO_XSHAPE) && defined(Q_DEAD_CODE_FROM_QT4_X11) // XShape is required for setting the mask, so we just // draw an ugly square when its not available path.moveTo(0, 0); @@ -704,15 +709,11 @@ void QSystemTrayIconPrivate::updateIcon_sys_qpa() void QSystemTrayIconPrivate::updateMenu_sys_qpa() { if (menu) { - if (!menu->platformMenu()) { - QPlatformMenu *platformMenu = qpa_sys->createMenu(); - if (platformMenu) - menu->setPlatformMenu(platformMenu); - } + addPlatformMenu(menu); qpa_sys->updateMenu(menu->platformMenu()); } else { qpa_sys->updateMenu(0); - } + } } void QSystemTrayIconPrivate::updateToolTip_sys_qpa() @@ -720,8 +721,8 @@ void QSystemTrayIconPrivate::updateToolTip_sys_qpa() qpa_sys->updateToolTip(toolTip); } -void QSystemTrayIconPrivate::showMessage_sys_qpa(const QString &message, - const QString &title, +void QSystemTrayIconPrivate::showMessage_sys_qpa(const QString &title, + const QString &message, QSystemTrayIcon::MessageIcon icon, int msecs) { @@ -739,10 +740,31 @@ void QSystemTrayIconPrivate::showMessage_sys_qpa(const QString &message, default: break; } - qpa_sys->showMessage(message, title, notificationIcon, + qpa_sys->showMessage(title, message, notificationIcon, static_cast(icon), msecs); } +void QSystemTrayIconPrivate::addPlatformMenu(QMenu *menu) const +{ + if (menu->platformMenu()) + return; // The platform menu already exists. + + // The recursion depth is the same as menu depth, so should not + // be higher than 3 levels. + QListIterator it(menu->actions()); + while (it.hasNext()) { + QAction *action = it.next(); + if (action->menu()) + addPlatformMenu(action->menu()); + } + + // This menu should be processed *after* its children, otherwise + // setMenu() is not called on respective QPlatformMenuItems. + QPlatformMenu *platformMenu = qpa_sys->createMenu(); + if (platformMenu) + menu->setPlatformMenu(platformMenu); +} + QT_END_NAMESPACE #endif // QT_NO_SYSTEMTRAYICON diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/widgets/qwidgetlinecontrol.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/widgets/qwidgetlinecontrol.cpp similarity index 98% rename from Telegram/_qt_5_4_0_patch/qtbase/src/widgets/widgets/qwidgetlinecontrol.cpp rename to Telegram/_qt_5_5_0_patch/qtbase/src/widgets/widgets/qwidgetlinecontrol.cpp index 8e1543eb2..fbd306438 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/widgets/qwidgetlinecontrol.cpp +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/widgets/qwidgetlinecontrol.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtWidgets module of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -66,7 +66,7 @@ int QWidgetLineControl::redoTextLayout() const QTextLine l = m_textLayout.createLine(); m_textLayout.endLayout(); -#if defined(Q_WS_MAC) +#if defined(Q_DEAD_CODE_FROM_QT4_MAC) if (m_threadChecks) m_textLayoutThread = QThread::currentThread(); #endif @@ -183,7 +183,7 @@ void QWidgetLineControl::commitPreedit() if (!composeMode()) return; - qApp->inputMethod()->commit(); + QGuiApplication::inputMethod()->commit(); if (!composeMode()) return; @@ -279,6 +279,23 @@ void QWidgetLineControl::clear() separate(); finishChange(priorState, /*update*/false, /*edited*/false); } +/*! + \internal + + Undoes the previous operation. +*/ + +void QWidgetLineControl::undo() +{ + // Undo works only for clearing the line when in any of password the modes + if (m_echoMode == QLineEdit::Normal) { + internalUndo(); + finishChange(-1, true); + } else { + cancelPasswordEchoTimer(); + clear(); + } +} /*! \internal @@ -919,7 +936,7 @@ void QWidgetLineControl::parseInputMask(const QString &maskFields) delete [] m_maskData; m_maskData = 0; m_maxLength = 32767; - internalSetText(QString()); + internalSetText(QString(), -1, false); } return; } @@ -1005,7 +1022,7 @@ void QWidgetLineControl::parseInputMask(const QString &maskFields) } } } - internalSetText(m_text); + internalSetText(m_text, -1, false); } @@ -1278,12 +1295,6 @@ void QWidgetLineControl::internalUndo(int until) cancelPasswordEchoTimer(); internalDeselect(); - // Undo works only for clearing the line when in any of password the modes - if (m_echoMode != QLineEdit::Normal) { - clear(); - return; - } - while (m_undoState && m_undoState > until) { Command& cmd = m_history[--m_undoState]; switch (cmd.type) { @@ -1868,9 +1879,12 @@ void QWidgetLineControl::processKeyEvent(QKeyEvent* event) unknown = false; } - if (unknown && !isReadOnly()) { + // QTBUG-35734: ignore Ctrl/Ctrl+Shift; accept only AltGr (Alt+Ctrl) on German keyboards + if (unknown && !isReadOnly() + && event->modifiers() != Qt::ControlModifier + && event->modifiers() != (Qt::ControlModifier | Qt::ShiftModifier)) { QString t = event->text(); - if (!t.isEmpty() && (t.at(0).isPrint() || t.at(0).unicode() == 0x200C || t.at(0).unicode() == 0x200D)) { + if (!t.isEmpty() && (t.at(0).isPrint() || t.at(0).unicode() == 0x200C || t.at(0).unicode() == 0x200D)) { insert(t); #ifndef QT_NO_COMPLETER complete(event->key()); diff --git a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp similarity index 98% rename from Telegram/_qt_5_4_0_patch/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp rename to Telegram/_qt_5_5_0_patch/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp index a1be4a14b..f3de5397c 100644 --- a/Telegram/_qt_5_4_0_patch/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/widgets/widgets/qwidgettextcontrol.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtWidgets module of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -110,7 +110,7 @@ QWidgetTextControlPrivate::QWidgetTextControlPrivate() #ifndef Q_OS_ANDROID interactionFlags(Qt::TextEditorInteraction), #else - interactionFlags(Qt::TextEditable), + interactionFlags(Qt::TextEditable | Qt::TextSelectableByKeyboard), #endif dragEnabled(true), #ifndef QT_NO_DRAGANDDROP @@ -1312,8 +1312,10 @@ void QWidgetTextControlPrivate::keyPressEvent(QKeyEvent *e) else if (e == QKeySequence::Delete) { QTextCursor localCursor = cursor; localCursor.deleteChar(); - } - else if (e == QKeySequence::DeleteEndOfWord) { + } else if (e == QKeySequence::Backspace) { + QTextCursor localCursor = cursor; + localCursor.deletePreviousChar(); + }else if (e == QKeySequence::DeleteEndOfWord) { if (!cursor.hasSelection()) cursor.movePosition(QTextCursor::NextWord, QTextCursor::KeepAnchor); cursor.removeSelectedText(); @@ -1339,8 +1341,14 @@ void QWidgetTextControlPrivate::keyPressEvent(QKeyEvent *e) process: { + // QTBUG-35734: ignore Ctrl/Ctrl+Shift; accept only AltGr (Alt+Ctrl) on German keyboards + if (e->modifiers() == Qt::ControlModifier + || e->modifiers() == (Qt::ShiftModifier | Qt::ControlModifier)) { + e->ignore(); + return; + } QString text = e->text(); - if (!text.isEmpty() && (text.at(0).isPrint() || text.at(0) == QLatin1Char('\t') || text.at(0).unicode() == 0x200C || text.at(0).unicode() == 0x200D)) { + if (!text.isEmpty() && (text.at(0).isPrint() || text.at(0) == QLatin1Char('\t') || text.at(0).unicode() == 0x200C || text.at(0).unicode() == 0x200D)) { if (overwriteMode // no need to call deleteChar() if we have a selection, insertText // does it already @@ -1731,7 +1739,7 @@ void QWidgetTextControlPrivate::mouseMoveEvent(QEvent *e, Qt::MouseButton button _q_updateCurrentCharFormatAndSelection(); #ifndef QT_NO_IM if (contextWidget) - qApp->inputMethod()->update(Qt::ImQueryInput); + QGuiApplication::inputMethod()->update(Qt::ImQueryInput); #endif //QT_NO_IM } else { //emit q->visibilityRequest(QRectF(mousePos, QSizeF(1, 1))); @@ -1879,7 +1887,7 @@ bool QWidgetTextControlPrivate::sendMouseEventToInputContext( if (cursorPos >= 0) { if (eventType == QEvent::MouseButtonRelease) - qApp->inputMethod()->invokeAction(QInputMethod::Click, cursorPos); + QGuiApplication::inputMethod()->invokeAction(QInputMethod::Click, cursorPos); e->setAccepted(true); return true; @@ -2219,15 +2227,18 @@ QMenu *QWidgetTextControl::createStandardContextMenu(const QPointF &pos, QWidget if (d->interactionFlags & Qt::TextEditable) { a = menu->addAction(tr("&Undo") + ACCEL_KEY(QKeySequence::Undo), this, SLOT(undo())); a->setEnabled(d->doc->isUndoAvailable()); + a->setObjectName(QStringLiteral("edit-undo")); setActionIcon(a, QStringLiteral("edit-undo")); a = menu->addAction(tr("&Redo") + ACCEL_KEY(QKeySequence::Redo), this, SLOT(redo())); a->setEnabled(d->doc->isRedoAvailable()); + a->setObjectName(QStringLiteral("edit-redo")); setActionIcon(a, QStringLiteral("edit-redo")); menu->addSeparator(); #ifndef QT_NO_CLIPBOARD a = menu->addAction(tr("Cu&t") + ACCEL_KEY(QKeySequence::Cut), this, SLOT(cut())); a->setEnabled(d->cursor.hasSelection()); + a->setObjectName(QStringLiteral("edit-cut")); setActionIcon(a, QStringLiteral("edit-cut")); #endif } @@ -2236,6 +2247,7 @@ QMenu *QWidgetTextControl::createStandardContextMenu(const QPointF &pos, QWidget if (showTextSelectionActions) { a = menu->addAction(tr("&Copy") + ACCEL_KEY(QKeySequence::Copy), this, SLOT(copy())); a->setEnabled(d->cursor.hasSelection()); + a->setObjectName(QStringLiteral("edit-copy")); setActionIcon(a, QStringLiteral("edit-copy")); } @@ -2244,6 +2256,7 @@ QMenu *QWidgetTextControl::createStandardContextMenu(const QPointF &pos, QWidget a = menu->addAction(tr("Copy &Link Location"), this, SLOT(_q_copyLink())); a->setEnabled(!d->linkToCopy.isEmpty()); + a->setObjectName(QStringLiteral("link-copy")); } #endif // QT_NO_CLIPBOARD @@ -2251,10 +2264,12 @@ QMenu *QWidgetTextControl::createStandardContextMenu(const QPointF &pos, QWidget #ifndef QT_NO_CLIPBOARD a = menu->addAction(tr("&Paste") + ACCEL_KEY(QKeySequence::Paste), this, SLOT(paste())); a->setEnabled(canPaste()); + a->setObjectName(QStringLiteral("edit-paste")); setActionIcon(a, QStringLiteral("edit-paste")); #endif a = menu->addAction(tr("Delete"), this, SLOT(_q_deleteSelected())); a->setEnabled(d->cursor.hasSelection()); + a->setObjectName(QStringLiteral("edit-delete")); setActionIcon(a, QStringLiteral("edit-delete")); } @@ -2263,9 +2278,10 @@ QMenu *QWidgetTextControl::createStandardContextMenu(const QPointF &pos, QWidget menu->addSeparator(); a = menu->addAction(tr("Select All") + ACCEL_KEY(QKeySequence::SelectAll), this, SLOT(selectAll())); a->setEnabled(!d->doc->isEmpty()); + a->setObjectName(QStringLiteral("select-all")); } - if ((d->interactionFlags & Qt::TextEditable) && qApp->styleHints()->useRtlExtensions()) { + if ((d->interactionFlags & Qt::TextEditable) && QGuiApplication::styleHints()->useRtlExtensions()) { menu->addSeparator(); QUnicodeControlCharacterMenu *ctrlCharacterMenu = new QUnicodeControlCharacterMenu(this, menu); menu->addMenu(ctrlCharacterMenu); @@ -2851,7 +2867,7 @@ void QWidgetTextControlPrivate::commitPreedit() if (!isPreediting()) return; - qApp->inputMethod()->commit(); + QGuiApplication::inputMethod()->commit(); if (!isPreediting()) return; From 8bb376798e6f2d7582472c5d3650c59973713398 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 14 Jul 2015 16:18:37 +0300 Subject: [PATCH 045/121] removed old warning disable for clang --- Telegram/_qt_5_5_0_patch.diff | 13 + .../qtbase/src/corelib/kernel/qobjectdefs.h | 509 ++++++++++++++++++ 2 files changed, 522 insertions(+) create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/corelib/kernel/qobjectdefs.h diff --git a/Telegram/_qt_5_5_0_patch.diff b/Telegram/_qt_5_5_0_patch.diff index 9911188f6..edce3fe02 100644 --- a/Telegram/_qt_5_5_0_patch.diff +++ b/Telegram/_qt_5_5_0_patch.diff @@ -64,6 +64,19 @@ index 0907653..96f6e19 100644 { /* High surrogate. Must be a followed by a low surrogate. */ if (length == 0) +diff --git a/qtbase/src/corelib/kernel/qobjectdefs.h b/qtbase/src/corelib/kernel/qobjectdefs.h +index 4d01264..fd3854f 100644 +--- a/qtbase/src/corelib/kernel/qobjectdefs.h ++++ b/qtbase/src/corelib/kernel/qobjectdefs.h +@@ -142,7 +142,7 @@ inline void qYouForgotTheQ_OBJECT_Macro(T1, T2) {} + # define Q_DECL_HIDDEN_STATIC_METACALL Q_DECL_HIDDEN + #endif + +-#if defined(Q_CC_CLANG) && Q_CC_CLANG >= 306 ++#if defined(Q_CC_CLANG) && Q_CC_CLANG >= 306 && false + # define Q_OBJECT_NO_OVERRIDE_WARNING QT_WARNING_DISABLE_CLANG("-Winconsistent-missing-override") + #else + # define Q_OBJECT_NO_OVERRIDE_WARNING diff --git a/qtbase/src/corelib/tools/qunicodetables.cpp b/qtbase/src/corelib/tools/qunicodetables.cpp index 73dce81..76c6933 100644 --- a/qtbase/src/corelib/tools/qunicodetables.cpp diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/corelib/kernel/qobjectdefs.h b/Telegram/_qt_5_5_0_patch/qtbase/src/corelib/kernel/qobjectdefs.h new file mode 100644 index 000000000..fd3854fd5 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/corelib/kernel/qobjectdefs.h @@ -0,0 +1,509 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QOBJECTDEFS_H +#define QOBJECTDEFS_H + +#if defined(__OBJC__) && !defined(__cplusplus) +# warning "File built in Objective-C mode (.m), but using Qt requires Objective-C++ (.mm)" +#endif + +#include + +#include + +QT_BEGIN_NAMESPACE + + +class QByteArray; +struct QArrayData; +typedef QArrayData QByteArrayData; + +class QString; + +#ifndef Q_MOC_OUTPUT_REVISION +#define Q_MOC_OUTPUT_REVISION 67 +#endif + +// The following macros are our "extensions" to C++ +// They are used, strictly speaking, only by the moc. + +#ifndef Q_MOC_RUN +#ifndef QT_NO_META_MACROS +# if defined(QT_NO_KEYWORDS) +# define QT_NO_EMIT +# else +# ifndef QT_NO_SIGNALS_SLOTS_KEYWORDS +# define slots +# define signals public +# endif +# endif +# define Q_SLOTS +# define Q_SIGNALS public +# define Q_PRIVATE_SLOT(d, signature) +# define Q_EMIT +#ifndef QT_NO_EMIT +# define emit +#endif +#define Q_CLASSINFO(name, value) +#define Q_PLUGIN_METADATA(x) +#define Q_INTERFACES(x) +#define Q_PROPERTY(text) +#define Q_PRIVATE_PROPERTY(d, text) +#define Q_REVISION(v) +#define Q_OVERRIDE(text) +#define Q_ENUMS(x) +#define Q_FLAGS(x) +#define Q_ENUM(ENUM) \ + friend Q_DECL_CONSTEXPR const QMetaObject *qt_getEnumMetaObject(ENUM) Q_DECL_NOEXCEPT { return &staticMetaObject; } \ + friend Q_DECL_CONSTEXPR const char *qt_getEnumName(ENUM) Q_DECL_NOEXCEPT { return #ENUM; } +#define Q_FLAG(ENUM) Q_ENUM(ENUM) +#define Q_SCRIPTABLE +#define Q_INVOKABLE +#define Q_SIGNAL +#define Q_SLOT +#endif // QT_NO_META_MACROS + +#ifndef QT_NO_TRANSLATION +// full set of tr functions +# define QT_TR_FUNCTIONS \ + static inline QString tr(const char *s, const char *c = Q_NULLPTR, int n = -1) \ + { return staticMetaObject.tr(s, c, n); } \ + QT_DEPRECATED static inline QString trUtf8(const char *s, const char *c = Q_NULLPTR, int n = -1) \ + { return staticMetaObject.tr(s, c, n); } +#else +// inherit the ones from QObject +# define QT_TR_FUNCTIONS +#endif + +#if defined(QT_NO_QOBJECT_CHECK) +/* qmake ignore Q_OBJECT */ +#define Q_OBJECT_CHECK +#else + +/* This is a compile time check that ensures that any class cast with qobject_cast + actually contains a Q_OBJECT macro. Note: qobject_cast will fail if a QObject + subclass doesn't contain Q_OBJECT. + + In qt_check_for_QOBJECT_macro, we call a dummy templated function with two + parameters, the first being "this" and the other the target of the qobject + cast. If the types are not identical, we know that a Q_OBJECT macro is missing. + + If you get a compiler error here, make sure that the class you are casting + to contains a Q_OBJECT macro. +*/ + +/* qmake ignore Q_OBJECT */ +#define Q_OBJECT_CHECK \ + template inline void qt_check_for_QOBJECT_macro(const ThisObject &_q_argument) const \ + { int i = qYouForgotTheQ_OBJECT_Macro(this, &_q_argument); i = i + 1; } + +template +inline int qYouForgotTheQ_OBJECT_Macro(T, T) { return 0; } + +template +inline void qYouForgotTheQ_OBJECT_Macro(T1, T2) {} +#endif // QT_NO_QOBJECT_CHECK + +#if defined(Q_CC_INTEL) +// Cannot redefine the visibility of a method in an exported class +# define Q_DECL_HIDDEN_STATIC_METACALL +#else +# define Q_DECL_HIDDEN_STATIC_METACALL Q_DECL_HIDDEN +#endif + +#if defined(Q_CC_CLANG) && Q_CC_CLANG >= 306 && false +# define Q_OBJECT_NO_OVERRIDE_WARNING QT_WARNING_DISABLE_CLANG("-Winconsistent-missing-override") +#else +# define Q_OBJECT_NO_OVERRIDE_WARNING +#endif + +/* qmake ignore Q_OBJECT */ +#define Q_OBJECT \ +public: \ + Q_OBJECT_CHECK \ + QT_WARNING_PUSH \ + Q_OBJECT_NO_OVERRIDE_WARNING \ + static const QMetaObject staticMetaObject; \ + virtual const QMetaObject *metaObject() const; \ + virtual void *qt_metacast(const char *); \ + virtual int qt_metacall(QMetaObject::Call, int, void **); \ + QT_WARNING_POP \ + QT_TR_FUNCTIONS \ +private: \ + Q_DECL_HIDDEN_STATIC_METACALL static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **); \ + struct QPrivateSignal {}; + +/* qmake ignore Q_OBJECT */ +#define Q_OBJECT_FAKE Q_OBJECT + +#ifndef QT_NO_META_MACROS +/* qmake ignore Q_GADGET */ +#define Q_GADGET \ +public: \ + static const QMetaObject staticMetaObject; \ + void qt_check_for_QGADGET_macro(); \ + typedef void QtGadgetHelper; \ +private: \ + Q_DECL_HIDDEN_STATIC_METACALL static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **); +#endif // QT_NO_META_MACROS + +#else // Q_MOC_RUN +#define slots slots +#define signals signals +#define Q_SLOTS Q_SLOTS +#define Q_SIGNALS Q_SIGNALS +#define Q_CLASSINFO(name, value) Q_CLASSINFO(name, value) +#define Q_INTERFACES(x) Q_INTERFACES(x) +#define Q_PROPERTY(text) Q_PROPERTY(text) +#define Q_PRIVATE_PROPERTY(d, text) Q_PRIVATE_PROPERTY(d, text) +#define Q_REVISION(v) Q_REVISION(v) +#define Q_OVERRIDE(text) Q_OVERRIDE(text) +#define Q_ENUMS(x) Q_ENUMS(x) +#define Q_FLAGS(x) Q_FLAGS(x) +#define Q_ENUM(x) Q_ENUM(x) +#define Q_FLAGS(x) Q_FLAGS(x) + /* qmake ignore Q_OBJECT */ +#define Q_OBJECT Q_OBJECT + /* qmake ignore Q_OBJECT */ +#define Q_OBJECT_FAKE Q_OBJECT_FAKE + /* qmake ignore Q_GADGET */ +#define Q_GADGET Q_GADGET +#define Q_SCRIPTABLE Q_SCRIPTABLE +#define Q_INVOKABLE Q_INVOKABLE +#define Q_SIGNAL Q_SIGNAL +#define Q_SLOT Q_SLOT +#endif //Q_MOC_RUN + +#ifndef QT_NO_META_MACROS +// macro for onaming members +#ifdef METHOD +#undef METHOD +#endif +#ifdef SLOT +#undef SLOT +#endif +#ifdef SIGNAL +#undef SIGNAL +#endif +#endif // QT_NO_META_MACROS + +Q_CORE_EXPORT const char *qFlagLocation(const char *method); + +#ifndef QT_NO_META_MACROS +#ifndef QT_NO_DEBUG +# define QLOCATION "\0" __FILE__ ":" QT_STRINGIFY(__LINE__) +# ifndef QT_NO_KEYWORDS +# define METHOD(a) qFlagLocation("0"#a QLOCATION) +# endif +# define SLOT(a) qFlagLocation("1"#a QLOCATION) +# define SIGNAL(a) qFlagLocation("2"#a QLOCATION) +#else +# ifndef QT_NO_KEYWORDS +# define METHOD(a) "0"#a +# endif +# define SLOT(a) "1"#a +# define SIGNAL(a) "2"#a +#endif + +#define QMETHOD_CODE 0 // member type codes +#define QSLOT_CODE 1 +#define QSIGNAL_CODE 2 +#endif // QT_NO_META_MACROS + +#define Q_ARG(type, data) QArgument(#type, data) +#define Q_RETURN_ARG(type, data) QReturnArgument(#type, data) + +class QObject; +class QMetaMethod; +class QMetaEnum; +class QMetaProperty; +class QMetaClassInfo; + + +class Q_CORE_EXPORT QGenericArgument +{ +public: + inline QGenericArgument(const char *aName = 0, const void *aData = 0) + : _data(aData), _name(aName) {} + inline void *data() const { return const_cast(_data); } + inline const char *name() const { return _name; } + +private: + const void *_data; + const char *_name; +}; + +class Q_CORE_EXPORT QGenericReturnArgument: public QGenericArgument +{ +public: + inline QGenericReturnArgument(const char *aName = 0, void *aData = 0) + : QGenericArgument(aName, aData) + {} +}; + +template +class QArgument: public QGenericArgument +{ +public: + inline QArgument(const char *aName, const T &aData) + : QGenericArgument(aName, static_cast(&aData)) + {} +}; +template +class QArgument: public QGenericArgument +{ +public: + inline QArgument(const char *aName, T &aData) + : QGenericArgument(aName, static_cast(&aData)) + {} +}; + + +template +class QReturnArgument: public QGenericReturnArgument +{ +public: + inline QReturnArgument(const char *aName, T &aData) + : QGenericReturnArgument(aName, static_cast(&aData)) + {} +}; + +struct Q_CORE_EXPORT QMetaObject +{ + class Connection; + const char *className() const; + const QMetaObject *superClass() const; + + QObject *cast(QObject *obj) const; + const QObject *cast(const QObject *obj) const; + +#ifndef QT_NO_TRANSLATION + QString tr(const char *s, const char *c, int n = -1) const; +#endif // QT_NO_TRANSLATION + + int methodOffset() const; + int enumeratorOffset() const; + int propertyOffset() const; + int classInfoOffset() const; + + int constructorCount() const; + int methodCount() const; + int enumeratorCount() const; + int propertyCount() const; + int classInfoCount() const; + + int indexOfConstructor(const char *constructor) const; + int indexOfMethod(const char *method) const; + int indexOfSignal(const char *signal) const; + int indexOfSlot(const char *slot) const; + int indexOfEnumerator(const char *name) const; + int indexOfProperty(const char *name) const; + int indexOfClassInfo(const char *name) const; + + QMetaMethod constructor(int index) const; + QMetaMethod method(int index) const; + QMetaEnum enumerator(int index) const; + QMetaProperty property(int index) const; + QMetaClassInfo classInfo(int index) const; + QMetaProperty userProperty() const; + + static bool checkConnectArgs(const char *signal, const char *method); + static bool checkConnectArgs(const QMetaMethod &signal, + const QMetaMethod &method); + static QByteArray normalizedSignature(const char *method); + static QByteArray normalizedType(const char *type); + + // internal index-based connect + static Connection connect(const QObject *sender, int signal_index, + const QObject *receiver, int method_index, + int type = 0, int *types = 0); + // internal index-based disconnect + static bool disconnect(const QObject *sender, int signal_index, + const QObject *receiver, int method_index); + static bool disconnectOne(const QObject *sender, int signal_index, + const QObject *receiver, int method_index); + // internal slot-name based connect + static void connectSlotsByName(QObject *o); + + // internal index-based signal activation + static void activate(QObject *sender, int signal_index, void **argv); + static void activate(QObject *sender, const QMetaObject *, int local_signal_index, void **argv); + static void activate(QObject *sender, int signal_offset, int local_signal_index, void **argv); + + static bool invokeMethod(QObject *obj, const char *member, + Qt::ConnectionType, + QGenericReturnArgument ret, + QGenericArgument val0 = QGenericArgument(0), + QGenericArgument val1 = QGenericArgument(), + QGenericArgument val2 = QGenericArgument(), + QGenericArgument val3 = QGenericArgument(), + QGenericArgument val4 = QGenericArgument(), + QGenericArgument val5 = QGenericArgument(), + QGenericArgument val6 = QGenericArgument(), + QGenericArgument val7 = QGenericArgument(), + QGenericArgument val8 = QGenericArgument(), + QGenericArgument val9 = QGenericArgument()); + + static inline bool invokeMethod(QObject *obj, const char *member, + QGenericReturnArgument ret, + QGenericArgument val0 = QGenericArgument(0), + QGenericArgument val1 = QGenericArgument(), + QGenericArgument val2 = QGenericArgument(), + QGenericArgument val3 = QGenericArgument(), + QGenericArgument val4 = QGenericArgument(), + QGenericArgument val5 = QGenericArgument(), + QGenericArgument val6 = QGenericArgument(), + QGenericArgument val7 = QGenericArgument(), + QGenericArgument val8 = QGenericArgument(), + QGenericArgument val9 = QGenericArgument()) + { + return invokeMethod(obj, member, Qt::AutoConnection, ret, val0, val1, val2, val3, + val4, val5, val6, val7, val8, val9); + } + + static inline bool invokeMethod(QObject *obj, const char *member, + Qt::ConnectionType type, + QGenericArgument val0 = QGenericArgument(0), + QGenericArgument val1 = QGenericArgument(), + QGenericArgument val2 = QGenericArgument(), + QGenericArgument val3 = QGenericArgument(), + QGenericArgument val4 = QGenericArgument(), + QGenericArgument val5 = QGenericArgument(), + QGenericArgument val6 = QGenericArgument(), + QGenericArgument val7 = QGenericArgument(), + QGenericArgument val8 = QGenericArgument(), + QGenericArgument val9 = QGenericArgument()) + { + return invokeMethod(obj, member, type, QGenericReturnArgument(), val0, val1, val2, + val3, val4, val5, val6, val7, val8, val9); + } + + static inline bool invokeMethod(QObject *obj, const char *member, + QGenericArgument val0 = QGenericArgument(0), + QGenericArgument val1 = QGenericArgument(), + QGenericArgument val2 = QGenericArgument(), + QGenericArgument val3 = QGenericArgument(), + QGenericArgument val4 = QGenericArgument(), + QGenericArgument val5 = QGenericArgument(), + QGenericArgument val6 = QGenericArgument(), + QGenericArgument val7 = QGenericArgument(), + QGenericArgument val8 = QGenericArgument(), + QGenericArgument val9 = QGenericArgument()) + { + return invokeMethod(obj, member, Qt::AutoConnection, QGenericReturnArgument(), val0, + val1, val2, val3, val4, val5, val6, val7, val8, val9); + } + + QObject *newInstance(QGenericArgument val0 = QGenericArgument(0), + QGenericArgument val1 = QGenericArgument(), + QGenericArgument val2 = QGenericArgument(), + QGenericArgument val3 = QGenericArgument(), + QGenericArgument val4 = QGenericArgument(), + QGenericArgument val5 = QGenericArgument(), + QGenericArgument val6 = QGenericArgument(), + QGenericArgument val7 = QGenericArgument(), + QGenericArgument val8 = QGenericArgument(), + QGenericArgument val9 = QGenericArgument()) const; + + enum Call { + InvokeMetaMethod, + ReadProperty, + WriteProperty, + ResetProperty, + QueryPropertyDesignable, + QueryPropertyScriptable, + QueryPropertyStored, + QueryPropertyEditable, + QueryPropertyUser, + CreateInstance, + IndexOfMethod, + RegisterPropertyMetaType, + RegisterMethodArgumentMetaType + }; + + int static_metacall(Call, int, void **) const; + static int metacall(QObject *, Call, int, void **); + + struct { // private data + const QMetaObject *superdata; + const QByteArrayData *stringdata; + const uint *data; + typedef void (*StaticMetacallFunction)(QObject *, QMetaObject::Call, int, void **); + StaticMetacallFunction static_metacall; + const QMetaObject * const *relatedMetaObjects; + void *extradata; //reserved for future use + } d; +}; + +class Q_CORE_EXPORT QMetaObject::Connection { + void *d_ptr; //QObjectPrivate::Connection* + explicit Connection(void *data) : d_ptr(data) { } + friend class QObject; + friend class QObjectPrivate; + friend struct QMetaObject; +public: + ~Connection(); + Connection(); + Connection(const Connection &other); + Connection &operator=(const Connection &other); +#ifdef Q_QDOC + operator bool() const; +#else + typedef void *Connection::*RestrictedBool; + operator RestrictedBool() const { return d_ptr ? &Connection::d_ptr : 0; } +#endif + +#ifdef Q_COMPILER_RVALUE_REFS + inline Connection(Connection &&o) : d_ptr(o.d_ptr) { o.d_ptr = 0; } + inline Connection &operator=(Connection &&other) + { qSwap(d_ptr, other.d_ptr); return *this; } +#endif +}; + +inline const QMetaObject *QMetaObject::superClass() const +{ return d.superdata; } + +namespace QtPrivate { + /* Trait that tells is a the Object has a Q_OBJECT macro */ + template struct HasQ_OBJECT_Macro { + template + static char test(int (T::*)(QMetaObject::Call, int, void **)); + static int test(int (Object::*)(QMetaObject::Call, int, void **)); + enum { Value = sizeof(test(&Object::qt_metacall)) == sizeof(int) }; + }; +} + +QT_END_NAMESPACE + +#endif // QOBJECTDEFS_H From 20fe4ccc55b9e2f73bd895824aff9f5b01e5536e Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 14 Jul 2015 19:48:49 +0300 Subject: [PATCH 046/121] Qt 5.5.0 added to Xcode and Qt Creator project files --- MSVC.md | 14 +- QTCREATOR.md | 16 +- README.md | 4 +- Telegram/MetaEmoji.pro | 4 +- Telegram/MetaEmoji.xcodeproj/project.pbxproj | 568 ++++++++-------- .../MetaEmoji.xcodeproj/qt_preprocess.mak | 18 +- Telegram/MetaLang.pro | 4 +- Telegram/MetaLang.xcodeproj/project.pbxproj | 596 ++++++++--------- Telegram/MetaLang.xcodeproj/qt_preprocess.mak | 18 +- Telegram/MetaStyle.pro | 4 +- Telegram/MetaStyle.xcodeproj/project.pbxproj | 592 +++++++++-------- .../MetaStyle.xcodeproj/qt_preprocess.mak | 18 +- Telegram/Packer.plist | 2 +- Telegram/Packer.pro | 4 +- Telegram/Packer.xcodeproj/project.pbxproj | 580 ++++++++-------- Telegram/Packer.xcodeproj/qt_preprocess.mak | 16 +- Telegram/Telegram.pro | 4 +- Telegram/Telegram.xcodeproj/project.pbxproj | 626 +++++++++--------- Telegram/Telegram.xcodeproj/qt_preprocess.mak | 146 ++-- XCODE.md | 22 +- 20 files changed, 1633 insertions(+), 1623 deletions(-) diff --git a/MSVC.md b/MSVC.md index c93ac3d23..d73c9e671 100644 --- a/MSVC.md +++ b/MSVC.md @@ -139,18 +139,18 @@ Open **VS2013 x86 Native Tools Command Prompt.bat** (should be in **\\Program Fi make make install -####Qt 5.4.0, slightly patched +####Qt 5.5.0, slightly patched -http://download.qt-project.org/official_releases/qt/5.4/5.4.0/single/qt-everywhere-opensource-src-5.4.0.zip +http://download.qt-project.org/official_releases/qt/5.5/5.5.0/single/qt-everywhere-opensource-src-5.5.0.zip -Extract to **D:\TBuild\Libraries\**, rename **qt-everywhere-opensource-src-5.4.0** to **QtStatic** to have **D:\TBuild\Libraries\QtStatic\qtbase\** folder +Extract to **D:\TBuild\Libraries\**, rename **qt-everywhere-opensource-src-5.5.0** to **QtStatic** to have **D:\TBuild\Libraries\QtStatic\qtbase\** folder Apply patch -* OR copy (with overwrite!) everything from **D:\TBuild\tdesktop\\\_qt\_5\_4\_0\_patch\** to **D:\TBuild\Libraries\QtStatic\** +* OR copy (with overwrite!) everything from **D:\TBuild\tdesktop\\\_qt\_5\_5\_0\_patch\** to **D:\TBuild\Libraries\QtStatic\** * OR in Git Bash go to **/d/TBuild/Libraries/QtStatic/** and run - git apply ./../../tdesktop/Telegram/_qt_5_4_0_patch.diff + git apply ./../../tdesktop/Telegram/_qt_5_5_0_patch.diff #####Building library @@ -183,8 +183,8 @@ Close all VS2013 instances and install to default location * Launch VS2013 for configuring Qt Addin * QT5 > Qt Options > Add - * Version name: **QtStatic.5.4.0** + * Version name: **QtStatic.5.5.0** * Path: **D:\TBuild\Libraries\QtStatic\qtbase** -* Default Qt/Win version: **QtStatic.5.4.0** – **OK** +* Default Qt/Win version: **QtStatic.5.5.0** – **OK** * File > Open > Project/Solution > **D:\TBuild\tdesktop\Telegram.sln** * Build \ Build Solution (Debug and Release configurations) diff --git a/QTCREATOR.md b/QTCREATOR.md index dd0f89d80..dc15b0cf5 100644 --- a/QTCREATOR.md +++ b/QTCREATOR.md @@ -76,18 +76,18 @@ then go to **/home/user/TBuild/Libraries/openal-soft/build** and run make sudo make install -####Qt 5.4.0, slightly patched +####Qt 5.5.0, slightly patched -http://download.qt-project.org/official_releases/qt/5.4/5.4.0/single/qt-everywhere-opensource-src-5.4.0.tar.gz +http://download.qt-project.org/official_releases/qt/5.5/5.5.0/single/qt-everywhere-opensource-src-5.5.0.tar.gz -Extract to **/home/user/TBuild/Libraries**, rename **qt-everywhere-opensource-src-5.4.0** to **QtStatic** to have **/home/user/TBuild/Libraries/QtStatic/qtbase** folder +Extract to **/home/user/TBuild/Libraries**, rename **qt-everywhere-opensource-src-5.5.0** to **QtStatic** to have **/home/user/TBuild/Libraries/QtStatic/qtbase** folder Apply patch: -* OR copy (with overwrite!) everything from **/home/user/TBuild/tdesktop/Telegram/\_qt\_5\_4\_0\_patch/** to **/home/user/TBuild/Libraries/QtStatic/** -* OR copy **/home/user/TBuild/tdesktop/Telegram/\_qt\_5\_4\_0\_patch.diff** to **/home/user/TBuild/Libraries/QtStatic/**, go there in Terminal and run +* OR copy (with overwrite!) everything from **/home/user/TBuild/tdesktop/Telegram/\_qt\_5\_5\_0\_patch/** to **/home/user/TBuild/Libraries/QtStatic/** +* OR copy **/home/user/TBuild/tdesktop/Telegram/\_qt\_5\_5\_0\_patch.diff** to **/home/user/TBuild/Libraries/QtStatic/**, go there in Terminal and run - git apply _qt_5_4_0_patch.diff + git apply _qt_5_5_0_patch.diff #####Building library @@ -106,8 +106,8 @@ building (**make** command) will take really long time. ###Building Telegram Desktop * Launch Qt Creator, all projects will be taken from **/home/user/TBuild/tdesktop/Telegram** -* Tools > Options > Build & Run > Qt Versions tab > Add > File System /usr/local/Qt-5.4.0/bin/qmake > **Qt 5.4.0 (Qt-5.4.0)** > Apply -* Tools > Options > Build & Run > Kits tab > Desktop (default) > change **Qt version** to **Qt 5.4.0 (Qt-5.4.0)** > Apply +* Tools > Options > Build & Run > Qt Versions tab > Add > File System /usr/local/Qt-5.5.0/bin/qmake > **Qt 5.5.0 (Qt-5.5.0)** > Apply +* Tools > Options > Build & Run > Kits tab > Desktop (default) > change **Qt version** to **Qt 5.5.0 (Qt-5.5.0)** > Apply * Open MetaStyle.pro, configure project with paths **/home/user/TBuild/tdesktop/Linux/DebugIntermediateStyle** and **/home/user/TBuild/tdesktop/Linux/ReleaseIntermediateStyle** and build for Debug * Open MetaEmoji.pro, configure project with paths **/home/user/TBuild/tdesktop/Linux/DebugIntermediateEmoji** and **/home/user/TBuild/tdesktop/Linux/ReleaseIntermediateEmoji** and build for Debug * Open MetaLang.pro, configure project with paths **/home/user/TBuild/tdesktop/Linux/DebugIntermediateLang** and **/home/user/TBuild/tdesktop/Linux/ReleaseIntermediateLang** and build for Debug diff --git a/README.md b/README.md index 2ac7de5b0..b406d179c 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Source code is published under GPL v3, license is available [here](https://githu ###Third-party -* Qt 5.4.0, slightly patched ([LGPL](http://qt-project.org/doc/qt-5/lgpl.html)) +* Qt 5.5.0, slightly patched ([LGPL](http://qt-project.org/doc/qt-5/lgpl.html)) * OpenSSL 1.0.1g ([OpenSSL License](https://www.openssl.org/source/license.html)) * zlib 1.2.8 ([zlib License](http://www.zlib.net/zlib_license.html)) * libexif 0.6.20 ([LGPL](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html)) @@ -25,7 +25,7 @@ Source code is published under GPL v3, license is available [here](https://githu ###[Build instructions for Visual Studio 2013](https://github.com/telegramdesktop/tdesktop/blob/master/MSVC.md) -###[Build instructions for XCode 6.3.1](https://github.com/telegramdesktop/tdesktop/blob/master/XCODE.md) +###[Build instructions for XCode 6.4](https://github.com/telegramdesktop/tdesktop/blob/master/XCODE.md) ###[Build instructions for Qt Creator 3.2.0 Ubuntu](https://github.com/telegramdesktop/tdesktop/blob/master/QTCREATOR.md) diff --git a/Telegram/MetaEmoji.pro b/Telegram/MetaEmoji.pro index 9c8cff740..422dffca1 100644 --- a/Telegram/MetaEmoji.pro +++ b/Telegram/MetaEmoji.pro @@ -27,7 +27,7 @@ HEADERS += \ ./SourceFiles/_other/memain.h \ ./SourceFiles/_other/genemoji.h \ -INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui\ - ./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore\ +INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui\ + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore\ ./../../Libraries/QtStatic/qtbase/include\ diff --git a/Telegram/MetaEmoji.xcodeproj/project.pbxproj b/Telegram/MetaEmoji.xcodeproj/project.pbxproj index c56fff40c..e6817e61c 100644 --- a/Telegram/MetaEmoji.xcodeproj/project.pbxproj +++ b/Telegram/MetaEmoji.xcodeproj/project.pbxproj @@ -21,6 +21,7 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 07D795491B5544B200DE9598 /* qtpcre */; }; 1A681B886F50EE30FBE62B4B /* Qt5PrintSupport in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DBF506D10449BFABD45B82DA /* Qt5PrintSupport */; }; 1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */; }; 328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DFD7912080BC557230093752 /* ApplicationServices.framework */; }; @@ -62,160 +63,161 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.4.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; - 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; - 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/unix.conf"; sourceTree = ""; }; - 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = ""; }; - 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = ""; }; + 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.5.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; + 07D795491B5544B200DE9598 /* qtpcre */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtpcre; path = "usr/local/Qt-5.5.0/lib/libqtpcre$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/unix.conf"; sourceTree = ""; }; + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = ""; }; + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = ""; }; 1F47C130E1F45B4A5A91DB5E /* genemoji.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = genemoji.cpp; path = SourceFiles/_other/genemoji.cpp; sourceTree = ""; }; - 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = ""; }; - 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = ""; }; - 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = ""; }; - 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = ""; }; - 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = ""; }; - 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = ""; }; - 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = ""; }; - 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = ""; }; - 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = ""; }; - 311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = ""; }; - 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = ""; }; - 346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = ""; }; - 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = ""; }; - 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = ""; }; - 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = ""; }; + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = ""; }; + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = ""; }; + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = ""; }; + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = ""; }; + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = ""; }; + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = ""; }; + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = ""; }; + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = ""; }; + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = ""; }; + 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = ""; }; + 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = ""; }; + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = ""; }; + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = ""; }; + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = ""; }; + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = ""; }; 3AC2626B26B65AA88F06BFB5 /* memain.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = memain.cpp; path = SourceFiles/_other/memain.cpp; sourceTree = ""; }; - 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = ""; }; - 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf"; sourceTree = ""; }; - 45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = ""; }; - 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.4.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = ""; }; + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = ""; }; + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf"; sourceTree = ""; }; + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = ""; }; + 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.5.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = ""; }; 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; - 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = ""; }; - 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = ""; }; + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = ""; }; + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = ""; }; 58308B26DE991A86E8589883 /* genemoji.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = genemoji.h; path = SourceFiles/_other/genemoji.h; sourceTree = ""; }; - 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.4.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = ""; }; - 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; - 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; - 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; - 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf"; sourceTree = ""; }; - 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf"; sourceTree = ""; }; - 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = ""; }; - 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = ""; }; - 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qdevice.pri"; sourceTree = ""; }; - 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; - 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; - 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; - 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = ""; }; - 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = ""; }; - 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = ""; }; - 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = ""; }; - 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/macx.conf"; sourceTree = ""; }; - 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = ""; }; - 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = ""; }; - 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = ""; }; - 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = ""; }; - 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = ""; }; - 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = ""; }; - 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = ""; }; - 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = ""; }; - 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = ""; }; - 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = ""; }; - 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = ""; }; - 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang.conf"; sourceTree = ""; }; - 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.5.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = ""; }; + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf"; sourceTree = ""; }; + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf"; sourceTree = ""; }; + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = ""; }; + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = ""; }; + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qdevice.pri"; sourceTree = ""; }; + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = ""; }; + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = ""; }; + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = ""; }; + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = ""; }; + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/macx.conf"; sourceTree = ""; }; + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = ""; }; + 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = ""; }; + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = ""; }; + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = ""; }; + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = ""; }; + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = ""; }; + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = ""; }; + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = ""; }; + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = ""; }; + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = ""; }; + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = ""; }; + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang.conf"; sourceTree = ""; }; + 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; - 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = ""; }; - 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = ""; }; - 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = ""; }; - 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = ""; }; + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = ""; }; + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = ""; }; + 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = ""; }; + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = ""; }; 93E4BE1A02365B73BAF00B73 /* moc_genemoji.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_genemoji.cpp; path = GeneratedFiles/Debug/moc_genemoji.cpp; sourceTree = ""; }; - 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = ""; }; + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = ""; }; 9742F24EE18EA44D52824F1E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; - 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = ""; }; + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = ""; }; 9DFF62A901D70814B8A323D4 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; - A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; A1A67BEAA744704B29168D39 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; - A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; - A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = ""; }; - A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = ""; }; - A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = ""; }; - AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = ""; }; - AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = ""; }; + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = ""; }; + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = ""; }; + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = ""; }; + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = ""; }; + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = ""; }; AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = ""; }; - ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = ""; }; - ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = ""; }; - ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = ""; }; + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = ""; }; + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = ""; }; + ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = ""; }; AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; - AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = ""; }; - B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = ""; }; - B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = ""; }; - B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = ""; }; - B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = ""; }; - B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = ""; }; - B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = ""; }; - B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = ""; }; - B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = ""; }; - B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = ""; }; - BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = ""; }; - BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = ""; }; - BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = ""; }; - BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = ""; }; + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = ""; }; + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = ""; }; + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = ""; }; + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = ""; }; + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = ""; }; + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = ""; }; + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = ""; }; + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = ""; }; + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = ""; }; + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = ""; }; + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = ""; }; + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = ""; }; + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = ""; }; + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = ""; }; C3345709A0BD182590087379 /* MetaEmoji.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MetaEmoji.app; sourceTree = BUILT_PRODUCTS_DIR; }; - C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = ""; }; - C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = ""; }; - C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = ""; }; - CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = ""; }; - CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = ""; }; - CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = ""; }; - CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = ""; }; - CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = ""; }; - D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = ""; }; - D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = ""; }; - D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = ""; }; - D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = ""; }; + C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = ""; }; + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = ""; }; + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = ""; }; + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = ""; }; + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = ""; }; + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = ""; }; + CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = ""; }; + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = ""; }; + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = ""; }; + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = ""; }; + D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; D4B32C2222F82AC56BADEB21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; - D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qconfig.pri"; sourceTree = ""; }; - D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = ""; }; - D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.4.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.4.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = ""; }; - D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = ""; }; - D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = ""; }; - DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = ""; }; - DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = ""; }; + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qconfig.pri"; sourceTree = ""; }; + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = ""; }; + D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.5.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.5.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = ""; }; + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = ""; }; + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = ""; }; + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = ""; }; + DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = ""; }; DFD7912080BC557230093752 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; - E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = ""; }; - E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = ""; }; - E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = ""; }; - E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = ""; }; - E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = ""; }; - E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = ""; }; + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = ""; }; + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = ""; }; + E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = ""; }; + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = ""; }; + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = ""; }; + E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = ""; }; E981470FA003A8DCE3C52E59 /* memain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = memain.h; path = SourceFiles/_other/memain.h; sourceTree = ""; }; - EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = ""; }; - EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = ""; }; - EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = ""; }; - EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/mac.conf"; sourceTree = ""; }; - F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = ""; }; + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = ""; }; + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = ""; }; + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = ""; }; + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/mac.conf"; sourceTree = ""; }; + F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = ""; }; F13124A218B58585B027D96A /* MetaEmoji.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = MetaEmoji.pro; sourceTree = ""; }; - F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = ""; }; - F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf"; sourceTree = ""; }; - F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = ""; }; - F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = ""; }; - F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = ""; }; - F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = ""; }; + F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = ""; }; + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf"; sourceTree = ""; }; + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = ""; }; + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = ""; }; + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = ""; }; + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = ""; }; FCC237CA5AD60B9BA4447615 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; - FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = ""; }; + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -247,6 +249,7 @@ F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */, 9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */, 8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */, + 07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */, B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */, ); name = "Link Binary With Libraries"; @@ -294,127 +297,127 @@ isa = PBXGroup; children = ( F13124A218B58585B027D96A /* MetaEmoji.pro */, - 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */, - 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */, - 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */, - EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */, - 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */, - 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */, - A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */, - 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */, - F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */, - D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */, - ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */, - 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, - BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, - CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */, - 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */, - 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */, - 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */, - 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */, - 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */, - 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */, - F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */, - 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */, - 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, - 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */, - 4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */, - 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */, - D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */, - FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */, - D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */, - A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */, - 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */, - D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */, - E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */, - 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, - D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, - 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */, - 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */, - 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */, - B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */, - 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */, - E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */, - E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */, - 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, - 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, - F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */, - E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */, - 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */, - D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */, - B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */, - 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */, - 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, - DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */, - ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */, - 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, - 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */, - 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */, - 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, - D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */, - B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, - CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */, - C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */, - CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */, - A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */, - 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */, - BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */, - BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */, - 311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */, - 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */, - 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */, - ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */, - 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */, - DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */, - 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */, - E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */, - B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */, - 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */, - 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */, - A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */, - 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */, - AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */, - E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */, - 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, - F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, - D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, - 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, - F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, - AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */, - EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, - 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */, - 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, - 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, - EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */, - C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */, - 45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */, - B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */, - F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, - B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, - EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, - 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, - 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */, - CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, - 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, - B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */, - F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */, - CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, - 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, - 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, - 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, - 060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */, - BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */, - B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, - 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, - C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, - AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, - 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, - 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, - A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, - 346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */, - B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */, - 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */, - 85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */, + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */, + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */, + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */, + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */, + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */, + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */, + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */, + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */, + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */, + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */, + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */, + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */, + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */, + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */, + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */, + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */, + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */, + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */, + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */, + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */, + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */, + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */, + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */, + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */, + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */, + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */, + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */, + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */, + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */, + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */, + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */, + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */, + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */, + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */, + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */, + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */, + E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */, + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */, + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */, + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */, + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */, + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */, + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */, + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, + DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */, + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */, + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */, + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */, + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */, + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */, + C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */, + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */, + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */, + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */, + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */, + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */, + 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */, + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */, + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */, + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */, + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */, + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */, + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */, + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */, + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */, + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */, + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */, + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */, + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */, + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */, + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */, + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */, + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */, + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */, + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */, + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */, + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */, + F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */, + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */, + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */, + CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, + 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */, + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */, + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */, + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */, + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */, + 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */, AB745978DF0F41D1801ABDA6 /* .qmake.stash */, ); name = "Supporting Files"; @@ -431,6 +434,7 @@ AF39DD055C3EF8226FBE929D /* Frameworks */ = { isa = PBXGroup; children = ( + 07D795491B5544B200DE9598 /* qtpcre */, AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */, DFD7912080BC557230093752 /* ApplicationServices.framework */, 9742F24EE18EA44D52824F1E /* CoreServices.framework */, @@ -598,25 +602,25 @@ GCC_WARN_UNUSED_FUNCTION = NO; GCC_WARN_UNUSED_VARIABLE = NO; HEADER_SEARCH_PATHS = ( - ../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ../../Libraries/QtStatic/qtbase/include, - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", GeneratedFiles/Debug, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INFOPLIST_FILE = Emoji.plist; INSTALL_DIR = ../Mac/ReleaseEmoji/; LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; LIBRARY_SEARCH_PATHS = ( /System/Library/Frameworks/, - "/usr/local/Qt-5.4.0/lib", - "/usr/local/Qt-5.4.0/plugins/platforms", - "/usr/local/Qt-5.4.0/plugins/imageformats", + "/usr/local/Qt-5.5.0/lib", + "/usr/local/Qt-5.5.0/plugins/platforms", + "/usr/local/Qt-5.5.0/plugins/imageformats", ); MACOSX_DEPLOYMENT_TARGET = 10.7; OBJROOT = ./../Mac/ReleaseIntermediateEmoji/; @@ -645,10 +649,10 @@ OTHER_LDFLAGS = ( "-headerpad_max_install_names", "-stdlib=libc++", - "-L/usr/local/Qt-5.4.0/lib", - "-L/usr/local/Qt-5.4.0/plugins/platforms", + "-L/usr/local/Qt-5.5.0/lib", + "-L/usr/local/Qt-5.5.0/plugins/platforms", "-lcups", - "-L/usr/local/Qt-5.4.0/plugins/imageformats", + "-L/usr/local/Qt-5.5.0/plugins/imageformats", "-lz", "-lm", ); @@ -688,25 +692,25 @@ GCC_WARN_UNUSED_FUNCTION = NO; GCC_WARN_UNUSED_VARIABLE = NO; HEADER_SEARCH_PATHS = ( - ../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ../../Libraries/QtStatic/qtbase/include, - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", GeneratedFiles/Debug, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INFOPLIST_FILE = Emoji.plist; INSTALL_DIR = ../Mac/DebugEmoji/; LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; LIBRARY_SEARCH_PATHS = ( /System/Library/Frameworks/, - "/usr/local/Qt-5.4.0/lib", - "/usr/local/Qt-5.4.0/plugins/platforms", - "/usr/local/Qt-5.4.0/plugins/imageformats", + "/usr/local/Qt-5.5.0/lib", + "/usr/local/Qt-5.5.0/plugins/platforms", + "/usr/local/Qt-5.5.0/plugins/imageformats", ); MACOSX_DEPLOYMENT_TARGET = 10.7; OBJROOT = ./../Mac/DebugIntermediateEmoji/; @@ -736,10 +740,10 @@ OTHER_LDFLAGS = ( "-headerpad_max_install_names", "-stdlib=libc++", - "-L/usr/local/Qt-5.4.0/lib", - "-L/usr/local/Qt-5.4.0/plugins/platforms", + "-L/usr/local/Qt-5.5.0/lib", + "-L/usr/local/Qt-5.5.0/plugins/platforms", "-lcups", - "-L/usr/local/Qt-5.4.0/plugins/imageformats", + "-L/usr/local/Qt-5.5.0/plugins/imageformats", "-lz", "-lm", ); diff --git a/Telegram/MetaEmoji.xcodeproj/qt_preprocess.mak b/Telegram/MetaEmoji.xcodeproj/qt_preprocess.mak index ef67200da..258380179 100644 --- a/Telegram/MetaEmoji.xcodeproj/qt_preprocess.mak +++ b/Telegram/MetaEmoji.xcodeproj/qt_preprocess.mak @@ -1,25 +1,25 @@ ############################################################################# # Makefile for building: ../Mac/DebugEmoji/MetaEmoji.app/Contents/MacOS/MetaEmoji -# Generated by qmake (3.0) (Qt 5.4.0) +# Generated by qmake (3.0) (Qt 5.5.0) # Project: MetaEmoji.pro # Template: app -# Command: /usr/local/Qt-5.4.0/bin/qmake -spec macx-xcode -o MetaEmoji.xcodeproj/project.pbxproj MetaEmoji.pro +# Command: /usr/local/Qt-5.5.0/bin/qmake -spec macx-xcode -o MetaEmoji.xcodeproj/project.pbxproj MetaEmoji.pro ############################################################################# MAKEFILE = project.pbxproj -MOC = /usr/local/Qt-5.4.0/bin/moc -UIC = +MOC = /usr/local/Qt-5.5.0/bin/moc +UIC = LEX = flex -LEXFLAGS = +LEXFLAGS = YACC = yacc YACCFLAGS = -d DEFINES = -D_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -INCPATH = -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers +INCPATH = -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers DEL_FILE = rm -f MOVE = mv -f -IMAGES = +IMAGES = PARSERS = preprocess: $(PARSERS) compilers clean preprocess_clean: parser_clean compiler_clean @@ -54,7 +54,7 @@ GeneratedFiles/Debug/moc_genemoji.cpp: ../../Libraries/QtStatic/qtbase/include/Q ../../Libraries/QtStatic/qtbase/include/QtCore/QCoreApplication \ ../../Libraries/QtStatic/qtbase/include/QtGui/QGuiApplication \ SourceFiles/_other/genemoji.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/_other/genemoji.h -o GeneratedFiles/Debug/moc_genemoji.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/_other/genemoji.h -o GeneratedFiles/Debug/moc_genemoji.cpp compiler_moc_source_make_all: compiler_moc_source_clean: @@ -66,5 +66,5 @@ compiler_yacc_impl_make_all: compiler_yacc_impl_clean: compiler_lex_make_all: compiler_lex_clean: -compiler_clean: compiler_moc_header_clean +compiler_clean: compiler_moc_header_clean diff --git a/Telegram/MetaLang.pro b/Telegram/MetaLang.pro index 14237c7ad..d2eaa5213 100644 --- a/Telegram/MetaLang.pro +++ b/Telegram/MetaLang.pro @@ -27,7 +27,7 @@ HEADERS += \ ./SourceFiles/_other/mlmain.h \ ./SourceFiles/_other/genlang.h \ -INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui\ - ./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore\ +INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui\ + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore\ ./../../Libraries/QtStatic/qtbase/include\ diff --git a/Telegram/MetaLang.xcodeproj/project.pbxproj b/Telegram/MetaLang.xcodeproj/project.pbxproj index 5f24dc7fe..13aedfb39 100644 --- a/Telegram/MetaLang.xcodeproj/project.pbxproj +++ b/Telegram/MetaLang.xcodeproj/project.pbxproj @@ -23,6 +23,7 @@ /* Begin PBXBuildFile section */ 0E4EEB1BFC9FA7662AD934C6 /* moc_genlang.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 680437016D61255E7F889A94 /* moc_genlang.cpp */; settings = {ATTRIBUTES = (); }; }; + 07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 07D795491B5544B200DE9598 /* qtpcre */; }; 1A681B886F50EE30FBE62B4B /* Qt5PrintSupport in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DBF506D10449BFABD45B82DA /* Qt5PrintSupport */; }; 1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */; }; 328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DFD7912080BC557230093752 /* ApplicationServices.framework */; }; @@ -63,160 +64,161 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.4.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; - 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; - 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/unix.conf"; sourceTree = ""; }; - 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = ""; }; - 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = ""; }; - 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = ""; }; - 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = ""; }; - 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = ""; }; - 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = ""; }; - 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = ""; }; - 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = ""; }; - 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = ""; }; - 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = ""; }; - 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = ""; }; - 311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = ""; }; - 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.5.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; + 07D795491B5544B200DE9598 /* qtpcre */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtpcre; path = "usr/local/Qt-5.5.0/lib/libqtpcre$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/unix.conf"; sourceTree = ""; }; + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = ""; }; + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = ""; }; + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = ""; }; + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = ""; }; + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = ""; }; + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = ""; }; + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = ""; }; + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = ""; }; + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = ""; }; + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = ""; }; + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = ""; }; + 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = ""; }; + 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 33A9E861B2FAD8C39E154E7C /* MetaLang.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = MetaLang.pro; sourceTree = ""; }; - 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = ""; }; - 346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = ""; }; - 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = ""; }; - 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = ""; }; - 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = ""; }; - 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = ""; }; - 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf"; sourceTree = ""; }; - 45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = ""; }; - 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.4.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = ""; }; + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = ""; }; + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = ""; }; + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = ""; }; + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = ""; }; + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = ""; }; + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = ""; }; + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf"; sourceTree = ""; }; + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = ""; }; + 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.5.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = ""; }; 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; - 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = ""; }; + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = ""; }; 54D6D1A7260739988F6FC406 /* genlang.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = genlang.h; path = SourceFiles/_other/genlang.h; sourceTree = ""; }; - 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = ""; }; - 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.4.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = ""; }; - 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; - 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; - 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; - 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf"; sourceTree = ""; }; + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = ""; }; + 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.5.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = ""; }; + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf"; sourceTree = ""; }; 669AB12AE74AC219B4669D79 /* genlang.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = genlang.cpp; path = SourceFiles/_other/genlang.cpp; sourceTree = ""; }; - 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf"; sourceTree = ""; }; + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf"; sourceTree = ""; }; 680437016D61255E7F889A94 /* moc_genlang.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_genlang.cpp; path = GeneratedFiles/Debug/moc_genlang.cpp; sourceTree = ""; }; - 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = ""; }; - 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = ""; }; - 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qdevice.pri"; sourceTree = ""; }; - 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; - 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; - 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; - 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = ""; }; - 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = ""; }; - 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = ""; }; - 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = ""; }; - 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/macx.conf"; sourceTree = ""; }; - 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = ""; }; - 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = ""; }; + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = ""; }; + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qdevice.pri"; sourceTree = ""; }; + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = ""; }; + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = ""; }; + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = ""; }; + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = ""; }; + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/macx.conf"; sourceTree = ""; }; + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = ""; }; + 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 83FFCB79DDEB015B4A5CB301 /* MetaLang.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MetaLang.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = ""; }; - 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = ""; }; - 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = ""; }; - 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = ""; }; - 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = ""; }; - 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = ""; }; - 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = ""; }; - 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = ""; }; - 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = ""; }; - 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = ""; }; - 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang.conf"; sourceTree = ""; }; - 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = ""; }; + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = ""; }; + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = ""; }; + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = ""; }; + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = ""; }; + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = ""; }; + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = ""; }; + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = ""; }; + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = ""; }; + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = ""; }; + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang.conf"; sourceTree = ""; }; + 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; - 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = ""; }; - 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = ""; }; - 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = ""; }; - 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = ""; }; - 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = ""; }; + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = ""; }; + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = ""; }; + 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = ""; }; + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = ""; }; + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = ""; }; 9742F24EE18EA44D52824F1E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; - 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = ""; }; + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = ""; }; 9DFF62A901D70814B8A323D4 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; - A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; A1A67BEAA744704B29168D39 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; - A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; - A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = ""; }; - A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = ""; }; + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = ""; }; + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = ""; }; A83296E7180A28ABB0FD85D2 /* mlmain.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mlmain.cpp; path = SourceFiles/_other/mlmain.cpp; sourceTree = ""; }; - A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = ""; }; - AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = ""; }; - AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = ""; }; + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = ""; }; + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = ""; }; + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = ""; }; AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = ""; }; - ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = ""; }; - ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = ""; }; - ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = ""; }; + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = ""; }; + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = ""; }; + ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = ""; }; AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; - AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = ""; }; - B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = ""; }; - B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = ""; }; - B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = ""; }; - B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = ""; }; - B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = ""; }; - B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = ""; }; - B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = ""; }; - B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = ""; }; - B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = ""; }; - BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = ""; }; - BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = ""; }; - BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = ""; }; - BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = ""; }; - C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = ""; }; - C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = ""; }; - C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = ""; }; - CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = ""; }; - CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = ""; }; - CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = ""; }; - CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = ""; }; - CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = ""; }; - D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = ""; }; - D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = ""; }; - D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = ""; }; - D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = ""; }; + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = ""; }; + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = ""; }; + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = ""; }; + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = ""; }; + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = ""; }; + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = ""; }; + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = ""; }; + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = ""; }; + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = ""; }; + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = ""; }; + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = ""; }; + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = ""; }; + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = ""; }; + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = ""; }; + C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = ""; }; + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = ""; }; + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = ""; }; + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = ""; }; + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = ""; }; + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = ""; }; + CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = ""; }; + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = ""; }; + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = ""; }; + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = ""; }; + D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; D4B32C2222F82AC56BADEB21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; - D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qconfig.pri"; sourceTree = ""; }; - D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = ""; }; - D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.4.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.4.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = ""; }; + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qconfig.pri"; sourceTree = ""; }; + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = ""; }; + D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.5.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.5.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = ""; }; D7D645CBFF3B86CF39CEF3DA /* mlmain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mlmain.h; path = SourceFiles/_other/mlmain.h; sourceTree = ""; }; - D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = ""; }; - D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = ""; }; - DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = ""; }; - DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = ""; }; + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = ""; }; + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = ""; }; + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = ""; }; + DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = ""; }; DFD7912080BC557230093752 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; - E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = ""; }; - E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = ""; }; - E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = ""; }; - E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = ""; }; - E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = ""; }; - E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = ""; }; - EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = ""; }; - EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = ""; }; - EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = ""; }; - EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/mac.conf"; sourceTree = ""; }; - F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = ""; }; - F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = ""; }; - F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf"; sourceTree = ""; }; - F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = ""; }; - F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = ""; }; - F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = ""; }; - F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = ""; }; + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = ""; }; + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = ""; }; + E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = ""; }; + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = ""; }; + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = ""; }; + E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = ""; }; + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = ""; }; + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = ""; }; + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = ""; }; + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/mac.conf"; sourceTree = ""; }; + F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = ""; }; + F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = ""; }; + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf"; sourceTree = ""; }; + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = ""; }; + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = ""; }; + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = ""; }; + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = ""; }; FCC237CA5AD60B9BA4447615 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; - FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = ""; }; + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -248,6 +250,7 @@ F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */, 9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */, 8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */, + 07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */, B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */, ); name = "Link Binary With Libraries"; @@ -295,127 +298,127 @@ isa = PBXGroup; children = ( 33A9E861B2FAD8C39E154E7C /* MetaLang.pro */, - 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */, - 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */, - 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */, - EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */, - 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */, - 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */, - A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */, - 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */, - F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */, - D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */, - ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */, - 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, - BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, - CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */, - 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */, - 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */, - 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */, - 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */, - 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */, - 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */, - F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */, - 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */, - 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, - 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */, - 4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */, - 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */, - D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */, - FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */, - D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */, - A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */, - 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */, - D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */, - E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */, - 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, - D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, - 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */, - 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */, - 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */, - B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */, - 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */, - E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */, - E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */, - 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, - 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, - F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */, - E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */, - 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */, - D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */, - B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */, - 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */, - 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, - DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */, - ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */, - 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, - 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */, - 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */, - 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, - D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */, - B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, - CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */, - C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */, - CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */, - A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */, - 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */, - BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */, - BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */, - 311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */, - 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */, - 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */, - ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */, - 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */, - DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */, - 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */, - E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */, - B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */, - 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */, - 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */, - A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */, - 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */, - AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */, - E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */, - 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, - F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, - D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, - 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, - F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, - AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */, - EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, - 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */, - 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, - 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, - EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */, - C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */, - 45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */, - B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */, - F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, - B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, - EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, - 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, - 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */, - CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, - 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, - B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */, - F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */, - CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, - 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, - 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, - 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, - 060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */, - BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */, - B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, - 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, - C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, - AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, - 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, - 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, - A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, - 346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */, - B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */, - 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */, - 85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */, + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */, + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */, + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */, + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */, + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */, + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */, + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */, + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */, + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */, + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */, + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */, + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */, + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */, + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */, + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */, + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */, + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */, + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */, + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */, + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */, + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */, + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */, + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */, + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */, + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */, + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */, + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */, + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */, + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */, + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */, + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */, + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */, + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */, + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */, + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */, + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */, + E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */, + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */, + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */, + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */, + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */, + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */, + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */, + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, + DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */, + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */, + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */, + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */, + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */, + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */, + C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */, + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */, + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */, + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */, + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */, + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */, + 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */, + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */, + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */, + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */, + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */, + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */, + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */, + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */, + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */, + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */, + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */, + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */, + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */, + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */, + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */, + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */, + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */, + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */, + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */, + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */, + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */, + F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */, + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */, + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */, + CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, + 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */, + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */, + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */, + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */, + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */, + 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */, AB745978DF0F41D1801ABDA6 /* .qmake.stash */, ); name = "Supporting Files"; @@ -432,6 +435,7 @@ AF39DD055C3EF8226FBE929D /* Frameworks */ = { isa = PBXGroup; children = ( + 07D795491B5544B200DE9598 /* qtpcre */, AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */, DFD7912080BC557230093752 /* ApplicationServices.framework */, 9742F24EE18EA44D52824F1E /* CoreServices.framework */, @@ -516,7 +520,7 @@ 6DB9C3763D02B1415CD9D565 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0610; + LastUpgradeCheck = 0640; }; buildConfigurationList = DAC4C1AA5EDEA1C85E9CA5E6 /* Build configuration list for PBXProject "MetaLang" */; compatibilityVersion = "Xcode 3.2"; @@ -603,6 +607,7 @@ ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; @@ -611,25 +616,25 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( - ../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ../../Libraries/QtStatic/qtbase/include, - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", GeneratedFiles/Debug, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INFOPLIST_FILE = Lang.plist; INSTALL_DIR = ../Mac/ReleaseLang/; LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; LIBRARY_SEARCH_PATHS = ( /System/Library/Frameworks/, - "/usr/local/Qt-5.4.0/lib", - "/usr/local/Qt-5.4.0/plugins/platforms", - "/usr/local/Qt-5.4.0/plugins/imageformats", + "/usr/local/Qt-5.5.0/lib", + "/usr/local/Qt-5.5.0/plugins/platforms", + "/usr/local/Qt-5.5.0/plugins/imageformats", ); MACOSX_DEPLOYMENT_TARGET = 10.7; OBJROOT = ./../Mac/ReleaseIntermediateLang; @@ -658,10 +663,10 @@ OTHER_LDFLAGS = ( "-headerpad_max_install_names", "-stdlib=libc++", - "-L/usr/local/Qt-5.4.0/lib", - "-L/usr/local/Qt-5.4.0/plugins/platforms", + "-L/usr/local/Qt-5.5.0/lib", + "-L/usr/local/Qt-5.5.0/plugins/platforms", "-lcups", - "-L/usr/local/Qt-5.4.0/plugins/imageformats", + "-L/usr/local/Qt-5.5.0/plugins/imageformats", "-lz", "-lm", ); @@ -691,6 +696,7 @@ ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -700,25 +706,25 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( - ../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ../../Libraries/QtStatic/qtbase/include, - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", GeneratedFiles/Debug, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INFOPLIST_FILE = Lang.plist; INSTALL_DIR = ../Mac/DebugLang/; LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; LIBRARY_SEARCH_PATHS = ( /System/Library/Frameworks/, - "/usr/local/Qt-5.4.0/lib", - "/usr/local/Qt-5.4.0/plugins/platforms", - "/usr/local/Qt-5.4.0/plugins/imageformats", + "/usr/local/Qt-5.5.0/lib", + "/usr/local/Qt-5.5.0/plugins/platforms", + "/usr/local/Qt-5.5.0/plugins/imageformats", ); MACOSX_DEPLOYMENT_TARGET = 10.7; OBJROOT = ./../Mac/DebugIntermediateLang; @@ -748,10 +754,10 @@ OTHER_LDFLAGS = ( "-headerpad_max_install_names", "-stdlib=libc++", - "-L/usr/local/Qt-5.4.0/lib", - "-L/usr/local/Qt-5.4.0/plugins/platforms", + "-L/usr/local/Qt-5.5.0/lib", + "-L/usr/local/Qt-5.5.0/plugins/platforms", "-lcups", - "-L/usr/local/Qt-5.4.0/plugins/imageformats", + "-L/usr/local/Qt-5.5.0/plugins/imageformats", "-lz", "-lm", ); @@ -769,15 +775,15 @@ COPY_PHASE_STRIP = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; HEADER_SEARCH_PATHS = ( - ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ./../../Libraries/QtStatic/qtbase/include, - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INSTALL_DIR = ../Mac/ReleaseLang/; PRODUCT_NAME = MetaLang; @@ -795,15 +801,15 @@ GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; HEADER_SEARCH_PATHS = ( - ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ./../../Libraries/QtStatic/qtbase/include, - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INSTALL_DIR = ../Mac/DebugLang/; PRODUCT_NAME = MetaLang; diff --git a/Telegram/MetaLang.xcodeproj/qt_preprocess.mak b/Telegram/MetaLang.xcodeproj/qt_preprocess.mak index bda38ce72..3b9048805 100644 --- a/Telegram/MetaLang.xcodeproj/qt_preprocess.mak +++ b/Telegram/MetaLang.xcodeproj/qt_preprocess.mak @@ -1,25 +1,25 @@ ############################################################################# # Makefile for building: ../Mac/DebugLang/MetaLang.app/Contents/MacOS/MetaLang -# Generated by qmake (3.0) (Qt 5.4.0) +# Generated by qmake (3.0) (Qt 5.5.0) # Project: MetaLang.pro # Template: app -# Command: /usr/local/Qt-5.4.0/bin/qmake -spec macx-xcode -o MetaLang.xcodeproj/project.pbxproj MetaLang.pro +# Command: /usr/local/Qt-5.5.0/bin/qmake -spec macx-xcode -o MetaLang.xcodeproj/project.pbxproj MetaLang.pro ############################################################################# MAKEFILE = project.pbxproj -MOC = /usr/local/Qt-5.4.0/bin/moc -UIC = +MOC = /usr/local/Qt-5.5.0/bin/moc +UIC = LEX = flex -LEXFLAGS = +LEXFLAGS = YACC = yacc YACCFLAGS = -d DEFINES = -D_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -INCPATH = -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers +INCPATH = -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers DEL_FILE = rm -f MOVE = mv -f -IMAGES = +IMAGES = PARSERS = preprocess: $(PARSERS) compilers clean preprocess_clean: parser_clean compiler_clean @@ -52,7 +52,7 @@ GeneratedFiles/Debug/moc_genlang.cpp: ../../Libraries/QtStatic/qtbase/include/Qt ../../Libraries/QtStatic/qtbase/include/QtCore/QCoreApplication \ ../../Libraries/QtStatic/qtbase/include/QtGui/QGuiApplication \ SourceFiles/_other/genlang.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/_other/genlang.h -o GeneratedFiles/Debug/moc_genlang.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/_other/genlang.h -o GeneratedFiles/Debug/moc_genlang.cpp compiler_moc_source_make_all: compiler_moc_source_clean: @@ -64,5 +64,5 @@ compiler_yacc_impl_make_all: compiler_yacc_impl_clean: compiler_lex_make_all: compiler_lex_clean: -compiler_clean: compiler_moc_header_clean +compiler_clean: compiler_moc_header_clean diff --git a/Telegram/MetaStyle.pro b/Telegram/MetaStyle.pro index 304942e8f..82b5d05eb 100644 --- a/Telegram/MetaStyle.pro +++ b/Telegram/MetaStyle.pro @@ -27,7 +27,7 @@ HEADERS += \ ./SourceFiles/_other/msmain.h \ ./SourceFiles/_other/genstyles.h \ -INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui\ - ./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore\ +INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui\ + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore\ ./../../Libraries/QtStatic/qtbase/include\ diff --git a/Telegram/MetaStyle.xcodeproj/project.pbxproj b/Telegram/MetaStyle.xcodeproj/project.pbxproj index 9c558c041..04a822d2a 100644 --- a/Telegram/MetaStyle.xcodeproj/project.pbxproj +++ b/Telegram/MetaStyle.xcodeproj/project.pbxproj @@ -22,6 +22,7 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 07D795491B5544B200DE9598 /* qtpcre */; }; 1A681B886F50EE30FBE62B4B /* Qt5PrintSupport in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DBF506D10449BFABD45B82DA /* Qt5PrintSupport */; }; 1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */; }; 328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DFD7912080BC557230093752 /* ApplicationServices.framework */; }; @@ -63,160 +64,161 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.4.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; - 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; - 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/unix.conf"; sourceTree = ""; }; + 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.5.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; + 07D795491B5544B200DE9598 /* qtpcre */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtpcre; path = "usr/local/Qt-5.5.0/lib/libqtpcre$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/unix.conf"; sourceTree = ""; }; 10F719DFC6D0B05605ED1C16 /* MetaStyle.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = MetaStyle.pro; sourceTree = ""; }; - 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = ""; }; - 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = ""; }; - 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = ""; }; - 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = ""; }; - 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = ""; }; - 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = ""; }; - 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = ""; }; - 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = ""; }; - 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = ""; }; + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = ""; }; + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = ""; }; + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = ""; }; + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = ""; }; + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = ""; }; + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = ""; }; + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = ""; }; + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = ""; }; + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = ""; }; 2CBD32689B153445ED220FAE /* MetaStyle.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MetaStyle.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = ""; }; - 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = ""; }; - 311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = ""; }; - 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = ""; }; - 346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = ""; }; - 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = ""; }; - 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = ""; }; - 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = ""; }; - 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = ""; }; - 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf"; sourceTree = ""; }; - 45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = ""; }; - 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.4.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = ""; }; + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = ""; }; + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = ""; }; + 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = ""; }; + 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = ""; }; + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = ""; }; + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = ""; }; + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = ""; }; + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = ""; }; + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = ""; }; + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf"; sourceTree = ""; }; + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = ""; }; + 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.5.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = ""; }; 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; - 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = ""; }; - 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = ""; }; - 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.4.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = ""; }; - 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; - 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; - 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; - 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf"; sourceTree = ""; }; - 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf"; sourceTree = ""; }; - 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = ""; }; - 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = ""; }; - 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qdevice.pri"; sourceTree = ""; }; + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = ""; }; + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = ""; }; + 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.5.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = ""; }; + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf"; sourceTree = ""; }; + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf"; sourceTree = ""; }; + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = ""; }; + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = ""; }; + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qdevice.pri"; sourceTree = ""; }; 6FF81CB4A724CE1990CEE99A /* msmain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = msmain.h; path = SourceFiles/_other/msmain.h; sourceTree = ""; }; - 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; - 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; - 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; - 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = ""; }; - 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = ""; }; - 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = ""; }; - 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = ""; }; - 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/macx.conf"; sourceTree = ""; }; - 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = ""; }; - 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = ""; }; - 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = ""; }; + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = ""; }; + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = ""; }; + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = ""; }; + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = ""; }; + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/macx.conf"; sourceTree = ""; }; + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = ""; }; + 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = ""; }; + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = ""; }; 861D2151FB56504EB72BDB6E /* moc_genstyles.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_genstyles.cpp; path = GeneratedFiles/Debug/moc_genstyles.cpp; sourceTree = ""; }; - 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = ""; }; - 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = ""; }; - 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = ""; }; - 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = ""; }; - 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = ""; }; - 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = ""; }; - 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = ""; }; - 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = ""; }; - 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang.conf"; sourceTree = ""; }; - 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = ""; }; + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = ""; }; + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = ""; }; + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = ""; }; + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = ""; }; + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = ""; }; + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = ""; }; + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = ""; }; + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang.conf"; sourceTree = ""; }; + 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; - 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = ""; }; - 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = ""; }; - 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = ""; }; - 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = ""; }; - 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = ""; }; + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = ""; }; + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = ""; }; + 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = ""; }; + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = ""; }; + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = ""; }; 9742F24EE18EA44D52824F1E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; - 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = ""; }; + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = ""; }; 9DFF62A901D70814B8A323D4 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; - A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; A1A67BEAA744704B29168D39 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; A35D133D7C0EFB42FA85D194 /* genstyles.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = genstyles.h; path = SourceFiles/_other/genstyles.h; sourceTree = ""; }; - A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; - A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = ""; }; - A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = ""; }; - A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = ""; }; - AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = ""; }; - AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = ""; }; + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = ""; }; + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = ""; }; + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = ""; }; + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = ""; }; + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = ""; }; AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = ""; }; - ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = ""; }; - ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = ""; }; - ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = ""; }; + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = ""; }; + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = ""; }; + ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = ""; }; AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; - AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = ""; }; - B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = ""; }; - B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = ""; }; - B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = ""; }; - B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = ""; }; - B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = ""; }; - B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = ""; }; - B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = ""; }; - B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = ""; }; - B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = ""; }; - BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = ""; }; - BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = ""; }; - BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = ""; }; - BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = ""; }; - C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = ""; }; - C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = ""; }; - C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = ""; }; - CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = ""; }; - CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = ""; }; - CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = ""; }; - CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = ""; }; - CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = ""; }; - D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = ""; }; - D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = ""; }; - D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = ""; }; - D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = ""; }; + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = ""; }; + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = ""; }; + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = ""; }; + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = ""; }; + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = ""; }; + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = ""; }; + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = ""; }; + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = ""; }; + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = ""; }; + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = ""; }; + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = ""; }; + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = ""; }; + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = ""; }; + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = ""; }; + C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = ""; }; + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = ""; }; + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = ""; }; + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = ""; }; + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = ""; }; + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = ""; }; + CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = ""; }; + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = ""; }; + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = ""; }; + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = ""; }; + D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; D4B32C2222F82AC56BADEB21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; - D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qconfig.pri"; sourceTree = ""; }; - D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = ""; }; - D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.4.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.4.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = ""; }; - D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = ""; }; - D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = ""; }; - DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = ""; }; - DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = ""; }; + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qconfig.pri"; sourceTree = ""; }; + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = ""; }; + D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.5.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.5.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = ""; }; + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = ""; }; + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = ""; }; + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = ""; }; + DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = ""; }; DFD7912080BC557230093752 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; - E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = ""; }; - E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = ""; }; - E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = ""; }; - E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = ""; }; - E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = ""; }; - E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = ""; }; - EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = ""; }; - EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = ""; }; - EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = ""; }; - EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/mac.conf"; sourceTree = ""; }; + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = ""; }; + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = ""; }; + E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = ""; }; + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = ""; }; + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = ""; }; + E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = ""; }; + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = ""; }; + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = ""; }; + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = ""; }; + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/mac.conf"; sourceTree = ""; }; EF5243ECB3132AF2796F09DF /* msmain.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = msmain.cpp; path = SourceFiles/_other/msmain.cpp; sourceTree = ""; }; - F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = ""; }; - F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = ""; }; - F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf"; sourceTree = ""; }; - F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = ""; }; - F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = ""; }; - F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = ""; }; + F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = ""; }; + F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = ""; }; + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf"; sourceTree = ""; }; + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = ""; }; + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = ""; }; + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = ""; }; F8BC976260B6D624F23C32D6 /* genstyles.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = genstyles.cpp; path = SourceFiles/_other/genstyles.cpp; sourceTree = ""; }; - F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = ""; }; + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = ""; }; FCC237CA5AD60B9BA4447615 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; - FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = ""; }; + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -248,6 +250,7 @@ F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */, 9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */, 8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */, + 07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */, B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */, ); name = "Link Binary With Libraries"; @@ -295,127 +298,127 @@ isa = PBXGroup; children = ( 10F719DFC6D0B05605ED1C16 /* MetaStyle.pro */, - 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */, - 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */, - 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */, - EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */, - 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */, - 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */, - A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */, - 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */, - F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */, - D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */, - ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */, - 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, - BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, - CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */, - 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */, - 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */, - 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */, - 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */, - 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */, - 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */, - F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */, - 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */, - 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, - 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */, - 4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */, - 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */, - D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */, - FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */, - D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */, - A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */, - 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */, - D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */, - E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */, - 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, - D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, - 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */, - 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */, - 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */, - B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */, - 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */, - E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */, - E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */, - 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, - 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, - F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */, - E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */, - 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */, - D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */, - B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */, - 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */, - 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, - DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */, - ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */, - 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, - 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */, - 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */, - 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, - D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */, - B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, - CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */, - C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */, - CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */, - A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */, - 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */, - BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */, - BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */, - 311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */, - 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */, - 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */, - ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */, - 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */, - DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */, - 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */, - E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */, - B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */, - 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */, - 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */, - A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */, - 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */, - AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */, - E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */, - 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, - F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, - D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, - 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, - F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, - AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */, - EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, - 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */, - 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, - 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, - EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */, - C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */, - 45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */, - B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */, - F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, - B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, - EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, - 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, - 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */, - CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, - 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, - B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */, - F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */, - CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, - 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, - 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, - 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, - 060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */, - BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */, - B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, - 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, - C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, - AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, - 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, - 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, - A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, - 346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */, - B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */, - 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */, - 85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */, + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */, + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */, + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */, + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */, + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */, + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */, + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */, + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */, + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */, + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */, + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */, + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */, + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */, + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */, + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */, + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */, + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */, + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */, + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */, + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */, + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */, + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */, + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */, + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */, + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */, + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */, + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */, + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */, + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */, + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */, + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */, + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */, + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */, + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */, + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */, + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */, + E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */, + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */, + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */, + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */, + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */, + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */, + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */, + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, + DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */, + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */, + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */, + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */, + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */, + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */, + C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */, + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */, + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */, + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */, + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */, + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */, + 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */, + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */, + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */, + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */, + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */, + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */, + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */, + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */, + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */, + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */, + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */, + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */, + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */, + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */, + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */, + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */, + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */, + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */, + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */, + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */, + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */, + F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */, + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */, + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */, + CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, + 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */, + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */, + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */, + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */, + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */, + 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */, AB745978DF0F41D1801ABDA6 /* .qmake.stash */, ); name = "Supporting Files"; @@ -432,6 +435,7 @@ AF39DD055C3EF8226FBE929D /* Frameworks */ = { isa = PBXGroup; children = ( + 07D795491B5544B200DE9598 /* qtpcre */, AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */, DFD7912080BC557230093752 /* ApplicationServices.framework */, 9742F24EE18EA44D52824F1E /* CoreServices.framework */, @@ -612,25 +616,25 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( - ../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ../../Libraries/QtStatic/qtbase/include, - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", GeneratedFiles/Debug, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INFOPLIST_FILE = Style.plist; INSTALL_DIR = ../Mac/ReleaseStyle/; LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; LIBRARY_SEARCH_PATHS = ( /System/Library/Frameworks/, - "/usr/local/Qt-5.4.0/lib", - "/usr/local/Qt-5.4.0/plugins/platforms", - "/usr/local/Qt-5.4.0/plugins/imageformats", + "/usr/local/Qt-5.5.0/lib", + "/usr/local/Qt-5.5.0/plugins/platforms", + "/usr/local/Qt-5.5.0/plugins/imageformats", ); MACOSX_DEPLOYMENT_TARGET = 10.7; OBJROOT = ./../Mac/ReleaseIntermediateStyle; @@ -659,10 +663,10 @@ OTHER_LDFLAGS = ( "-headerpad_max_install_names", "-stdlib=libc++", - "-L/usr/local/Qt-5.4.0/lib", - "-L/usr/local/Qt-5.4.0/plugins/platforms", + "-L/usr/local/Qt-5.5.0/lib", + "-L/usr/local/Qt-5.5.0/plugins/platforms", "-lcups", - "-L/usr/local/Qt-5.4.0/plugins/imageformats", + "-L/usr/local/Qt-5.5.0/plugins/imageformats", "-lz", "-lm", ); @@ -702,25 +706,25 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( - ../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ../../Libraries/QtStatic/qtbase/include, - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", GeneratedFiles/Debug, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INFOPLIST_FILE = Style.plist; INSTALL_DIR = ../Mac/DebugStyle/; LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; LIBRARY_SEARCH_PATHS = ( /System/Library/Frameworks/, - "/usr/local/Qt-5.4.0/lib", - "/usr/local/Qt-5.4.0/plugins/platforms", - "/usr/local/Qt-5.4.0/plugins/imageformats", + "/usr/local/Qt-5.5.0/lib", + "/usr/local/Qt-5.5.0/plugins/platforms", + "/usr/local/Qt-5.5.0/plugins/imageformats", ); MACOSX_DEPLOYMENT_TARGET = 10.7; OBJROOT = ./../Mac/DebugIntermediateStyle; @@ -750,10 +754,10 @@ OTHER_LDFLAGS = ( "-headerpad_max_install_names", "-stdlib=libc++", - "-L/usr/local/Qt-5.4.0/lib", - "-L/usr/local/Qt-5.4.0/plugins/platforms", + "-L/usr/local/Qt-5.5.0/lib", + "-L/usr/local/Qt-5.5.0/plugins/platforms", "-lcups", - "-L/usr/local/Qt-5.4.0/plugins/imageformats", + "-L/usr/local/Qt-5.5.0/plugins/imageformats", "-lz", "-lm", ); @@ -771,15 +775,15 @@ COPY_PHASE_STRIP = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; HEADER_SEARCH_PATHS = ( - ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ./../../Libraries/QtStatic/qtbase/include, - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INSTALL_DIR = ./../Mac/ReleaseStyle/; PRODUCT_NAME = MetaStyle; @@ -797,15 +801,15 @@ GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; HEADER_SEARCH_PATHS = ( - ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ./../../Libraries/QtStatic/qtbase/include, - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INSTALL_DIR = ./../Mac/DebugStyle/; PRODUCT_NAME = MetaStyle; diff --git a/Telegram/MetaStyle.xcodeproj/qt_preprocess.mak b/Telegram/MetaStyle.xcodeproj/qt_preprocess.mak index c4b262dea..3d1238690 100644 --- a/Telegram/MetaStyle.xcodeproj/qt_preprocess.mak +++ b/Telegram/MetaStyle.xcodeproj/qt_preprocess.mak @@ -1,25 +1,25 @@ ############################################################################# # Makefile for building: ../Mac/DebugStyle/MetaStyle.app/Contents/MacOS/MetaStyle -# Generated by qmake (3.0) (Qt 5.4.0) +# Generated by qmake (3.0) (Qt 5.5.0) # Project: MetaStyle.pro # Template: app -# Command: /usr/local/Qt-5.4.0/bin/qmake -spec macx-xcode -o MetaStyle.xcodeproj/project.pbxproj MetaStyle.pro +# Command: /usr/local/Qt-5.5.0/bin/qmake -spec macx-xcode -o MetaStyle.xcodeproj/project.pbxproj MetaStyle.pro ############################################################################# MAKEFILE = project.pbxproj -MOC = /usr/local/Qt-5.4.0/bin/moc -UIC = +MOC = /usr/local/Qt-5.5.0/bin/moc +UIC = LEX = flex -LEXFLAGS = +LEXFLAGS = YACC = yacc YACCFLAGS = -d DEFINES = -D_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -INCPATH = -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers +INCPATH = -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers DEL_FILE = rm -f MOVE = mv -f -IMAGES = +IMAGES = PARSERS = preprocess: $(PARSERS) compilers clean preprocess_clean: parser_clean compiler_clean @@ -51,7 +51,7 @@ GeneratedFiles/Debug/moc_genstyles.cpp: ../../Libraries/QtStatic/qtbase/include/ ../../Libraries/QtStatic/qtbase/include/QtGui/QGuiApplication \ ../../Libraries/QtStatic/qtbase/include/QtGui/QPainter \ SourceFiles/_other/genstyles.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/_other/genstyles.h -o GeneratedFiles/Debug/moc_genstyles.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/_other/genstyles.h -o GeneratedFiles/Debug/moc_genstyles.cpp compiler_moc_source_make_all: compiler_moc_source_clean: @@ -63,5 +63,5 @@ compiler_yacc_impl_make_all: compiler_yacc_impl_clean: compiler_lex_make_all: compiler_lex_clean: -compiler_clean: compiler_moc_header_clean +compiler_clean: compiler_moc_header_clean diff --git a/Telegram/Packer.plist b/Telegram/Packer.plist index f1583971a..69da5da44 100644 --- a/Telegram/Packer.plist +++ b/Telegram/Packer.plist @@ -9,7 +9,7 @@ CFBundleIconFile CFBundleIdentifier - com.ddesktop.${PRODUCT_NAME:rfc1034identifier} + com.tdesktop.$(PRODUCT_NAME:rfc1034identifier) CFBundlePackageType APPL CFBundleSignature diff --git a/Telegram/Packer.pro b/Telegram/Packer.pro index 6e4e51244..584b92e52 100644 --- a/Telegram/Packer.pro +++ b/Telegram/Packer.pro @@ -35,8 +35,8 @@ unix { } } -INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui\ - ./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore\ +INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui\ + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore\ ./../../Libraries/QtStatic/qtbase/include LIBS += -lcrypto -lssl -lz -llzma diff --git a/Telegram/Packer.xcodeproj/project.pbxproj b/Telegram/Packer.xcodeproj/project.pbxproj index ca59985a8..2f63e3a9e 100644 --- a/Telegram/Packer.xcodeproj/project.pbxproj +++ b/Telegram/Packer.xcodeproj/project.pbxproj @@ -21,6 +21,7 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 07D795491B5544B200DE9598 /* qtpcre */; }; 1A681B886F50EE30FBE62B4B /* Qt5PrintSupport in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DBF506D10449BFABD45B82DA /* Qt5PrintSupport */; }; 1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */; }; 328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DFD7912080BC557230093752 /* ApplicationServices.framework */; }; @@ -60,157 +61,158 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.4.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; - 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; - 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/unix.conf"; sourceTree = ""; }; - 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = ""; }; - 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = ""; }; - 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = ""; }; - 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = ""; }; - 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = ""; }; - 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = ""; }; - 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = ""; }; - 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = ""; }; - 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = ""; }; - 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = ""; }; - 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = ""; }; - 311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = ""; }; - 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = ""; }; - 346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = ""; }; - 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = ""; }; - 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = ""; }; - 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = ""; }; - 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = ""; }; - 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf"; sourceTree = ""; }; - 45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = ""; }; - 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.4.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = ""; }; + 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.5.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; + 07D795491B5544B200DE9598 /* qtpcre */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtpcre; path = "usr/local/Qt-5.5.0/lib/libqtpcre$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/unix.conf"; sourceTree = ""; }; + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = ""; }; + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = ""; }; + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = ""; }; + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = ""; }; + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = ""; }; + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = ""; }; + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = ""; }; + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = ""; }; + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = ""; }; + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = ""; }; + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = ""; }; + 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = ""; }; + 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = ""; }; + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = ""; }; + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = ""; }; + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = ""; }; + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = ""; }; + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = ""; }; + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf"; sourceTree = ""; }; + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = ""; }; + 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.5.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = ""; }; 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; - 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = ""; }; + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = ""; }; 5520A59148EC5EC44EF0D3CD /* Packer.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = Packer.pro; sourceTree = ""; }; - 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = ""; }; - 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.4.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = ""; }; + 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.5.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 5AA25EFD83BC060B26945285 /* packer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = packer.h; path = SourceFiles/_other/packer.h; sourceTree = ""; }; - 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = ""; }; - 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; - 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; - 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; - 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf"; sourceTree = ""; }; - 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf"; sourceTree = ""; }; - 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = ""; }; - 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = ""; }; - 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qdevice.pri"; sourceTree = ""; }; - 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; - 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; - 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; - 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = ""; }; - 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = ""; }; - 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = ""; }; - 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = ""; }; - 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/macx.conf"; sourceTree = ""; }; - 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = ""; }; - 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = ""; }; - 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = ""; }; - 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = ""; }; - 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = ""; }; - 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = ""; }; - 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = ""; }; - 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = ""; }; - 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = ""; }; - 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = ""; }; - 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = ""; }; - 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang.conf"; sourceTree = ""; }; - 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = ""; }; + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf"; sourceTree = ""; }; + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf"; sourceTree = ""; }; + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = ""; }; + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = ""; }; + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qdevice.pri"; sourceTree = ""; }; + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = ""; }; + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = ""; }; + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = ""; }; + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = ""; }; + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/macx.conf"; sourceTree = ""; }; + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = ""; }; + 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = ""; }; + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = ""; }; + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = ""; }; + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = ""; }; + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = ""; }; + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = ""; }; + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = ""; }; + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = ""; }; + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = ""; }; + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = ""; }; + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang.conf"; sourceTree = ""; }; + 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; - 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = ""; }; - 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = ""; }; - 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = ""; }; - 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = ""; }; - 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = ""; }; + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = ""; }; + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = ""; }; + 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = ""; }; + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = ""; }; + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = ""; }; 9742F24EE18EA44D52824F1E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; - 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = ""; }; + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = ""; }; 9DFF62A901D70814B8A323D4 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; - A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; A1A67BEAA744704B29168D39 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; - A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; A5588D4B50885E2A9CAA5505 /* Packer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Packer.app; sourceTree = BUILT_PRODUCTS_DIR; }; - A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = ""; }; - A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = ""; }; - A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = ""; }; - AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = ""; }; - AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = ""; }; + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = ""; }; + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = ""; }; + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = ""; }; + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = ""; }; + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = ""; }; AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = ""; }; - ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = ""; }; - ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = ""; }; - ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = ""; }; + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = ""; }; + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = ""; }; + ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = ""; }; AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; - AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = ""; }; - B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = ""; }; - B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = ""; }; - B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = ""; }; - B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = ""; }; - B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = ""; }; - B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = ""; }; - B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = ""; }; - B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = ""; }; - B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = ""; }; - BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = ""; }; - BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = ""; }; - BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = ""; }; - BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = ""; }; - C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = ""; }; - C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = ""; }; - C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = ""; }; - CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = ""; }; - CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = ""; }; - CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = ""; }; - CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = ""; }; - CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = ""; }; - D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = ""; }; - D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = ""; }; - D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = ""; }; - D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = ""; }; + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = ""; }; + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = ""; }; + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = ""; }; + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = ""; }; + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = ""; }; + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = ""; }; + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = ""; }; + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = ""; }; + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = ""; }; + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = ""; }; + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = ""; }; + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = ""; }; + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = ""; }; + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = ""; }; + C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = ""; }; + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = ""; }; + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = ""; }; + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = ""; }; + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = ""; }; + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = ""; }; + CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = ""; }; + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = ""; }; + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = ""; }; + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = ""; }; + D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; D4B32C2222F82AC56BADEB21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; - D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qconfig.pri"; sourceTree = ""; }; - D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = ""; }; - D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.4.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.4.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = ""; }; - D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = ""; }; - D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = ""; }; - DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = ""; }; - DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = ""; }; + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qconfig.pri"; sourceTree = ""; }; + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = ""; }; + D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.5.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.5.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = ""; }; + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = ""; }; + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = ""; }; + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = ""; }; + DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = ""; }; DFD7912080BC557230093752 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; - E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = ""; }; - E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = ""; }; + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = ""; }; + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = ""; }; E3790AE49DBDB3F5EFA42FE1 /* packer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = packer.cpp; path = SourceFiles/_other/packer.cpp; sourceTree = ""; }; - E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = ""; }; - E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = ""; }; - E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = ""; }; - E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = ""; }; - EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = ""; }; - EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = ""; }; - EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = ""; }; - EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/mac.conf"; sourceTree = ""; }; - F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = ""; }; - F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = ""; }; - F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf"; sourceTree = ""; }; - F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = ""; }; - F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = ""; }; - F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = ""; }; - F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = ""; }; + E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = ""; }; + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = ""; }; + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = ""; }; + E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = ""; }; + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = ""; }; + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = ""; }; + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = ""; }; + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/mac.conf"; sourceTree = ""; }; + F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = ""; }; + F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = ""; }; + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf"; sourceTree = ""; }; + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = ""; }; + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = ""; }; + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = ""; }; + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = ""; }; FCC237CA5AD60B9BA4447615 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; - FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = ""; }; + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -242,6 +244,7 @@ F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */, 9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */, 8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */, + 07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */, B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */, ); name = "Link Binary With Libraries"; @@ -279,127 +282,127 @@ isa = PBXGroup; children = ( 5520A59148EC5EC44EF0D3CD /* Packer.pro */, - 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */, - 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */, - 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */, - EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */, - 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */, - 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */, - A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */, - 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */, - F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */, - D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */, - ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */, - 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, - BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, - CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */, - 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */, - 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */, - 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */, - 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */, - 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */, - 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */, - F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */, - 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */, - 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, - 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */, - 4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */, - 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */, - D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */, - FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */, - D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */, - A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */, - 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */, - D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */, - E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */, - 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, - D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, - 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */, - 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */, - 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */, - B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */, - 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */, - E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */, - E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */, - 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, - 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, - F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */, - E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */, - 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */, - D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */, - B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */, - 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */, - 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, - DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */, - ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */, - 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, - 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */, - 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */, - 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, - D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */, - B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, - CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */, - C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */, - CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */, - A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */, - 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */, - BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */, - BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */, - 311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */, - 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */, - 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */, - ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */, - 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */, - DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */, - 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */, - E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */, - B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */, - 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */, - 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */, - A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */, - 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */, - AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */, - E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */, - 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, - F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, - D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, - 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, - F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, - AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */, - EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, - 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */, - 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, - 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, - EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */, - C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */, - 45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */, - B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */, - F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, - B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, - EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, - 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, - 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */, - CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, - 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, - B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */, - F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */, - CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, - 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, - 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, - 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, - 060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */, - BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */, - B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, - 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, - C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, - AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, - 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, - 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, - A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, - 346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */, - B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */, - 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */, - 85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */, + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */, + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */, + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */, + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */, + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */, + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */, + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */, + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */, + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */, + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */, + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */, + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */, + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */, + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */, + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */, + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */, + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */, + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */, + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */, + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */, + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */, + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */, + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */, + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */, + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */, + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */, + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */, + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */, + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */, + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */, + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */, + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */, + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */, + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */, + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */, + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */, + E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */, + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */, + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */, + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */, + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */, + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */, + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */, + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, + DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */, + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */, + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */, + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */, + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */, + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */, + C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */, + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */, + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */, + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */, + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */, + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */, + 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */, + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */, + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */, + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */, + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */, + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */, + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */, + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */, + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */, + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */, + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */, + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */, + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */, + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */, + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */, + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */, + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */, + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */, + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */, + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */, + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */, + F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */, + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */, + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */, + CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, + 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */, + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */, + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */, + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */, + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */, + 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */, AB745978DF0F41D1801ABDA6 /* .qmake.stash */, ); name = "Supporting Files"; @@ -408,6 +411,7 @@ AF39DD055C3EF8226FBE929D /* Frameworks */ = { isa = PBXGroup; children = ( + 07D795491B5544B200DE9598 /* qtpcre */, AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */, DFD7912080BC557230093752 /* ApplicationServices.framework */, 9742F24EE18EA44D52824F1E /* CoreServices.framework */, @@ -483,7 +487,7 @@ 6DB9C3763D02B1415CD9D565 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0610; + LastUpgradeCheck = 0640; }; buildConfigurationList = DAC4C1AA5EDEA1C85E9CA5E6 /* Build configuration list for PBXProject "Packer" */; compatibilityVersion = "Xcode 3.2"; @@ -554,6 +558,7 @@ ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; @@ -562,26 +567,26 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( - ../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ../../Libraries/QtStatic/qtbase/include, /usr/local/include, - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", GeneratedFiles/Debug, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INFOPLIST_FILE = Packer.plist; INSTALL_DIR = "../Mac/$(CONFIGURATION)"; LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; LIBRARY_SEARCH_PATHS = ( /System/Library/Frameworks/, - "/usr/local/Qt-5.4.0/lib", - "/usr/local/Qt-5.4.0/plugins/platforms", - "/usr/local/Qt-5.4.0/plugins/imageformats", + "/usr/local/Qt-5.5.0/lib", + "/usr/local/Qt-5.5.0/plugins/platforms", + "/usr/local/Qt-5.5.0/plugins/imageformats", ); MACOSX_DEPLOYMENT_TARGET = 10.7; OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker/"; @@ -612,10 +617,10 @@ "-stdlib=libc++", "-lcrypto", "-lssl", - "-L/usr/local/Qt-5.4.0/lib", - "-L/usr/local/Qt-5.4.0/plugins/platforms", + "-L/usr/local/Qt-5.5.0/lib", + "-L/usr/local/Qt-5.5.0/plugins/platforms", "-lcups", - "-L/usr/local/Qt-5.4.0/plugins/imageformats", + "-L/usr/local/Qt-5.5.0/plugins/imageformats", "-lz", "-lm", "-llzma", @@ -645,6 +650,7 @@ ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -654,26 +660,26 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( - ../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ../../Libraries/QtStatic/qtbase/include, /usr/local/include, - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", GeneratedFiles/Debug, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INFOPLIST_FILE = Packer.plist; INSTALL_DIR = "../Mac/$(CONFIGURATION)"; LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; LIBRARY_SEARCH_PATHS = ( /System/Library/Frameworks/, - "/usr/local/Qt-5.4.0/lib", - "/usr/local/Qt-5.4.0/plugins/platforms", - "/usr/local/Qt-5.4.0/plugins/imageformats", + "/usr/local/Qt-5.5.0/lib", + "/usr/local/Qt-5.5.0/plugins/platforms", + "/usr/local/Qt-5.5.0/plugins/imageformats", ); MACOSX_DEPLOYMENT_TARGET = 10.7; OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker/"; @@ -705,10 +711,10 @@ "-stdlib=libc++", "-lcrypto", "-lssl", - "-L/usr/local/Qt-5.4.0/lib", - "-L/usr/local/Qt-5.4.0/plugins/platforms", + "-L/usr/local/Qt-5.5.0/lib", + "-L/usr/local/Qt-5.5.0/plugins/platforms", "-lcups", - "-L/usr/local/Qt-5.4.0/plugins/imageformats", + "-L/usr/local/Qt-5.5.0/plugins/imageformats", "-lz", "-lm", "-llzma", @@ -726,6 +732,10 @@ COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "/usr/local/Qt-5.5.0/lib", + ); OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker"; OTHER_CFLAGS = ( "-pipe", @@ -765,6 +775,10 @@ DEBUG_INFORMATION_FORMAT = dwarf; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "/usr/local/Qt-5.5.0/lib", + ); OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker"; OTHER_CFLAGS = ( "-pipe", diff --git a/Telegram/Packer.xcodeproj/qt_preprocess.mak b/Telegram/Packer.xcodeproj/qt_preprocess.mak index 2bb904e81..b9fdf82de 100644 --- a/Telegram/Packer.xcodeproj/qt_preprocess.mak +++ b/Telegram/Packer.xcodeproj/qt_preprocess.mak @@ -1,25 +1,25 @@ ############################################################################# # Makefile for building: ../Mac/DebugPacker/Packer.app/Contents/MacOS/Packer -# Generated by qmake (3.0) (Qt 5.4.0) +# Generated by qmake (3.0) (Qt 5.5.0) # Project: Packer.pro # Template: app -# Command: /usr/local/Qt-5.4.0/bin/qmake -spec macx-xcode -o Packer.xcodeproj/project.pbxproj Packer.pro +# Command: /usr/local/Qt-5.5.0/bin/qmake -spec macx-xcode -o Packer.xcodeproj/project.pbxproj Packer.pro ############################################################################# MAKEFILE = project.pbxproj -MOC = /usr/local/Qt-5.4.0/bin/moc -UIC = +MOC = /usr/local/Qt-5.5.0/bin/moc +UIC = LEX = flex -LEXFLAGS = +LEXFLAGS = YACC = yacc YACCFLAGS = -d DEFINES = -D_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -INCPATH = -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I../../Libraries/lzma/C -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers +INCPATH = -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I../../Libraries/lzma/C -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers DEL_FILE = rm -f MOVE = mv -f -IMAGES = +IMAGES = PARSERS = preprocess: $(PARSERS) compilers clean preprocess_clean: parser_clean compiler_clean @@ -48,5 +48,5 @@ compiler_yacc_impl_make_all: compiler_yacc_impl_clean: compiler_lex_make_all: compiler_lex_clean: -compiler_clean: +compiler_clean: diff --git a/Telegram/Telegram.pro b/Telegram/Telegram.pro index 8c38adf6e..c68949b7f 100644 --- a/Telegram/Telegram.pro +++ b/Telegram/Telegram.pro @@ -282,8 +282,8 @@ CONFIG(release, debug|release) { QMAKE_LFLAGS_RELEASE += -Ofast -flto } -INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui\ - ./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore\ +INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui\ + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore\ ./../../Libraries/QtStatic/qtbase/include\ /usr/local/include/opus\ ./SourceFiles\ diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index dfaa734e7..31f7d120a 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -97,6 +97,7 @@ 1299DDAE203A7EDFED9F5D6B /* main.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 5271C394C1E7646D117CE67E /* main.cpp */; settings = {ATTRIBUTES = (); }; }; 15364689D2AB5A30E87A689F /* Security.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 205259EEEE2BADA5E64741E3 /* Security.framework */; }; 19A66ECD6EE2F8356F27D32D /* layerwidget.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 5A9B4C6C59856143F3D0DE53 /* layerwidget.cpp */; settings = {ATTRIBUTES = (); }; }; + 07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 07D795491B5544B200DE9598 /* qtpcre */; }; 1A681B886F50EE30FBE62B4B /* Qt5PrintSupport in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DBF506D10449BFABD45B82DA /* Qt5PrintSupport */; }; 1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */; }; 1BD711B4C358EA7D727BF358 /* moc_flatcheckbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 58E05D0B8B104D83F43F9859 /* moc_flatcheckbox.cpp */; settings = {ATTRIBUTES = (); }; }; @@ -258,9 +259,9 @@ /* Begin PBXFileReference section */ 01D6341DC31FE5997F7BB159 /* mtpFileLoader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtpFileLoader.cpp; path = SourceFiles/mtproto/mtpFileLoader.cpp; sourceTree = ""; }; 032C1BF3E727B450A4851D48 /* emojibox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = emojibox.h; path = SourceFiles/boxes/emojibox.h; sourceTree = ""; }; - 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.4.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.5.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 047DAFB0A7DE92C63033A43C /* mainwidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mainwidget.cpp; path = SourceFiles/mainwidget.cpp; sourceTree = ""; }; - 060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; + 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; 06E379415713F34B83F99C35 /* app.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = app.cpp; path = SourceFiles/app.cpp; sourceTree = ""; }; 07055CC3194EE85B0008DEF6 /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcrypto.a; path = "./../../Libraries/openssl-xcode/libcrypto.a"; sourceTree = ""; }; 07080BCB1A4357F300741A51 /* lang.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = lang.strings; path = Resources/lang.strings; sourceTree = SOURCE_ROOT; }; @@ -288,7 +289,7 @@ 0755AEDA1AD12A80004D738A /* moc_abstractbox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_abstractbox.cpp; path = GeneratedFiles/Debug/moc_abstractbox.cpp; sourceTree = SOURCE_ROOT; }; 0755AEDB1AD12A80004D738A /* moc_intropwdcheck.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_intropwdcheck.cpp; path = GeneratedFiles/Debug/moc_intropwdcheck.cpp; sourceTree = SOURCE_ROOT; }; 0755AEDC1AD12A80004D738A /* moc_sessionsbox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_sessionsbox.cpp; path = GeneratedFiles/Debug/moc_sessionsbox.cpp; sourceTree = SOURCE_ROOT; }; - 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; 075F99A91A45EEF200915C72 /* lang_es.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = lang_es.strings; path = SourceFiles/langs/lang_es.strings; sourceTree = SOURCE_ROOT; }; 0764D5581ABAD6F900FBFEED /* apiwrap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = apiwrap.cpp; path = SourceFiles/apiwrap.cpp; sourceTree = SOURCE_ROOT; }; 0764D5591ABAD6F900FBFEED /* apiwrap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = apiwrap.h; path = SourceFiles/apiwrap.h; sourceTree = SOURCE_ROOT; }; @@ -358,7 +359,8 @@ 08A7682548FB7E671FF03822 /* boxshadow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = boxshadow.cpp; path = SourceFiles/gui/boxshadow.cpp; sourceTree = ""; }; 098EA7CE256AAFAE4A17EB77 /* introcode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = introcode.h; path = SourceFiles/intro/introcode.h; sourceTree = ""; }; 09FD01F2BD652EB838A296D8 /* application.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = application.h; path = SourceFiles/application.h; sourceTree = ""; }; - 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/unix.conf"; sourceTree = ""; }; + 07D795491B5544B200DE9598 /* qtpcre */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtpcre; path = "usr/local/Qt-5.5.0/lib/libqtpcre$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/unix.conf"; sourceTree = ""; }; 0BDE09020E45EFA57DCB2E25 /* photosendbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = photosendbox.h; path = SourceFiles/boxes/photosendbox.h; sourceTree = ""; }; 0C0DC15EB416789673526AA5 /* moc_emojibox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_emojibox.cpp; path = GeneratedFiles/Debug/moc_emojibox.cpp; sourceTree = ""; }; 0CAA815FFFEDCD84808E11F5 /* logs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = logs.h; path = SourceFiles/logs.h; sourceTree = ""; }; @@ -367,92 +369,91 @@ 0FBED3C6654EA3753EB39831 /* mtpSession.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtpSession.cpp; path = SourceFiles/mtproto/mtpSession.cpp; sourceTree = ""; }; 0FC38EE7F29EF895925A2C49 /* style_core.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = style_core.h; path = SourceFiles/gui/style_core.h; sourceTree = ""; }; 1080B6D395843B8F76A2E45E /* moc_title.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_title.cpp; path = GeneratedFiles/Debug/moc_title.cpp; sourceTree = ""; }; - 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = ""; }; - 112159B026FDEF9CD4E24175 /* Qt5Multimedia */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Multimedia; path = "/usr/local/Qt-5.4.0/lib/libQt5Multimedia$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = ""; }; + 112159B026FDEF9CD4E24175 /* Qt5Multimedia */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Multimedia; path = "/usr/local/Qt-5.5.0/lib/libQt5Multimedia$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 120EBCD9A37DB9A36BFE58C0 /* contactsbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = contactsbox.h; path = SourceFiles/boxes/contactsbox.h; sourceTree = ""; }; 1292B92B4848460640F6A391 /* telegram.qrc */ = {isa = PBXFileReference; lastKnownFileType = text; name = telegram.qrc; path = SourceFiles/telegram.qrc; sourceTree = ""; }; 135FD3715BFDC50AD7B00E04 /* text.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = text.cpp; path = SourceFiles/gui/text.cpp; sourceTree = ""; }; 143405635D04698F421A12EA /* aboutbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = aboutbox.h; path = SourceFiles/boxes/aboutbox.h; sourceTree = ""; }; 14437BFDCD58FF1742EF1B35 /* photocropbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = photocropbox.h; path = SourceFiles/boxes/photocropbox.h; sourceTree = ""; }; 152B8D1BCECEB7B0C77E073C /* intro.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = intro.h; path = SourceFiles/intro/intro.h; sourceTree = ""; }; - 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = ""; }; + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = ""; }; 186D09F4CB713AD4B8BDD260 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = ""; }; 19618554524B8D928F13940D /* emoji_config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = emoji_config.h; path = SourceFiles/gui/emoji_config.h; sourceTree = ""; }; 1A4C47331E186344291B8178 /* dropdown.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dropdown.h; path = SourceFiles/dropdown.h; sourceTree = ""; }; 1B4A65B84270FF2FED008EB6 /* moc_introphone.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_introphone.cpp; path = GeneratedFiles/Debug/moc_introphone.cpp; sourceTree = ""; }; - 1C21DCD421D7B7E0462F1121 /* qqt7engine */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qqt7engine; path = "/usr/local/Qt-5.4.0/plugins/mediaservice/libqqt7engine$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 1D7899ACAA9F973CADFA34C1 /* moc_localimageloader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_localimageloader.cpp; path = GeneratedFiles/Debug/moc_localimageloader.cpp; sourceTree = ""; }; 1DC02F674A7192FF8BE391A7 /* types.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = types.h; path = SourceFiles/types.h; sourceTree = ""; }; 1DEFC0760BB9340529F582F7 /* confirmbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = confirmbox.h; path = SourceFiles/boxes/confirmbox.h; sourceTree = ""; }; 1E5EEB5782B6357057356F9E /* moc_flatinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_flatinput.cpp; path = GeneratedFiles/Debug/moc_flatinput.cpp; sourceTree = ""; }; - 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = ""; }; + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = ""; }; 1FE45A67215BEA2434F588E8 /* moc_layerwidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_layerwidget.cpp; path = GeneratedFiles/Debug/moc_layerwidget.cpp; sourceTree = ""; }; 205259EEEE2BADA5E64741E3 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = /System/Library/Frameworks/Security.framework; sourceTree = ""; }; 206B4F5CBD5354BCE19FF32F /* countries.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = countries.h; path = SourceFiles/countries.h; sourceTree = ""; }; 2181F5E34DE0A4B2F811E2E2 /* moc_flatlabel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_flatlabel.cpp; path = GeneratedFiles/Debug/moc_flatlabel.cpp; sourceTree = ""; }; 21F907AB8D19BD779147A085 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = /System/Library/Frameworks/AVFoundation.framework; sourceTree = ""; }; 220B97F8F62C720E6059A64B /* profilewidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = profilewidget.h; path = SourceFiles/profilewidget.h; sourceTree = ""; }; - 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = ""; }; - 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = ""; }; - 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = ""; }; - 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = ""; }; + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = ""; }; + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = ""; }; + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = ""; }; + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = ""; }; 24F7D3E789E91B10E422C116 /* config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = config.h; path = SourceFiles/config.h; sourceTree = ""; }; 25CA12A22B83B0B038C5B5DE /* langloaderplain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = langloaderplain.h; path = SourceFiles/langloaderplain.h; sourceTree = ""; }; 26083D8E535AFF927591E1A5 /* moc_contactsbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_contactsbox.cpp; path = GeneratedFiles/Debug/moc_contactsbox.cpp; sourceTree = ""; }; 26B83A58EE268598E703875D /* history.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = history.cpp; path = SourceFiles/history.cpp; sourceTree = ""; }; 27E7471A4EC90E84353AA16F /* mtpCoreTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpCoreTypes.h; path = SourceFiles/mtproto/mtpCoreTypes.h; sourceTree = ""; }; - 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = ""; }; - 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = ""; }; + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = ""; }; + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = ""; }; 2BB2A1BB8DB0993F78F4E3C7 /* title.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = title.cpp; path = SourceFiles/title.cpp; sourceTree = ""; }; 2C540BAEABD7F9B5FA11008E /* moc_mtpDC.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mtpDC.cpp; path = GeneratedFiles/Debug/moc_mtpDC.cpp; sourceTree = ""; }; 2C99425D7670941EAF07B453 /* moc_historywidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_historywidget.cpp; path = GeneratedFiles/Debug/moc_historywidget.cpp; sourceTree = ""; }; - 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = ""; }; - 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = ""; }; + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = ""; }; + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = ""; }; 2EA58EF6CDF368B0132BAEB9 /* settings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = settings.h; path = SourceFiles/settings.h; sourceTree = ""; }; 301BB513F2F5D447B3BF22DF /* window.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = window.h; path = SourceFiles/window.h; sourceTree = ""; }; - 311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = ""; }; - 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = ""; }; + 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 315C7FACB4A9E18AA95486CA /* mtpDC.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtpDC.cpp; path = SourceFiles/mtproto/mtpDC.cpp; sourceTree = ""; }; - 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = ""; }; - 346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = ""; }; + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = ""; }; + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = ""; }; 34E1DF19219C52D7DB20224A /* flatlabel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flatlabel.h; path = SourceFiles/gui/flatlabel.h; sourceTree = ""; }; - 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = ""; }; - 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = ""; }; + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = ""; }; + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = ""; }; 36BDA5D01BED543A92886669 /* Telegram.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = Telegram.pro; sourceTree = ""; }; 36F718DC72345A84987DB0F6 /* flatbutton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flatbutton.h; path = SourceFiles/gui/flatbutton.h; sourceTree = ""; }; - 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = ""; }; + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = ""; }; 39C1ADF085370E033CB7E7E1 /* style_classes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = style_classes.h; path = GeneratedFiles/style_classes.h; sourceTree = ""; }; 3A220FD1AE5AD9FE3DC073A4 /* moc_mainwidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mainwidget.cpp; path = GeneratedFiles/Debug/moc_mainwidget.cpp; sourceTree = ""; }; 3B3ED09AB00290D78CF1181B /* moc_dialogswidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_dialogswidget.cpp; path = GeneratedFiles/Debug/moc_dialogswidget.cpp; sourceTree = ""; }; - 3BBB805F6180E363BF89151A /* qtaudio_coreaudio */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtaudio_coreaudio; path = "/usr/local/Qt-5.4.0/plugins/audio/libqtaudio_coreaudio$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 3BBB805F6180E363BF89151A /* qtaudio_coreaudio */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtaudio_coreaudio; path = "/usr/local/Qt-5.5.0/plugins/audio/libqtaudio_coreaudio$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 3BE70E2A82DC2BF402165ED5 /* sysbuttons.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sysbuttons.h; path = SourceFiles/sysbuttons.h; sourceTree = ""; }; 3C44131FDCFEF4396B9EA2BA /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; }; 3D54A9F3266BB8739520E3FB /* moc_fileuploader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_fileuploader.cpp; path = GeneratedFiles/Debug/moc_fileuploader.cpp; sourceTree = ""; }; 3E329D4547CC23585307FA32 /* countryinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = countryinput.cpp; path = SourceFiles/gui/countryinput.cpp; sourceTree = ""; }; - 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = ""; }; + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = ""; }; 420A06A32B66D250142B4B6D /* style_core.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = style_core.cpp; path = SourceFiles/gui/style_core.cpp; sourceTree = ""; }; - 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf"; sourceTree = ""; }; - 45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = ""; }; + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf"; sourceTree = ""; }; + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = ""; }; 4604687EBA85611C9E8A9CDF /* button.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = button.h; path = SourceFiles/gui/button.h; sourceTree = ""; }; 46292F489228B60010794CE4 /* moc_button.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_button.cpp; path = GeneratedFiles/Debug/moc_button.cpp; sourceTree = ""; }; - 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.4.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.5.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 48003469151B9DDE82E851FB /* moc_profilewidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_profilewidget.cpp; path = GeneratedFiles/Debug/moc_profilewidget.cpp; sourceTree = ""; }; 4AF15B5A0A43EB62D6DAF211 /* libexif.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libexif.a; path = "../../Libraries/libexif-0.6.20/libexif/.libs/libexif.a"; sourceTree = ""; }; - 4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = ""; }; + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = ""; }; 4D1099F2D3696E8A0E17D37D /* mtpSession.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpSession.h; path = SourceFiles/mtproto/mtpSession.h; sourceTree = ""; }; 4D504A849F15EB58E53A4E5F /* title.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = title.h; path = SourceFiles/title.h; sourceTree = ""; }; 4D55B83DFDFE3D492CDBD27A /* button.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = button.cpp; path = SourceFiles/gui/button.cpp; sourceTree = ""; }; 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; 4E4D06EC4D2C82C7D6E079A2 /* flatinput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flatinput.h; path = SourceFiles/gui/flatinput.h; sourceTree = ""; }; - 4EC011DBE92DD1FD208D94D2 /* qtmultimedia_m3u */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtmultimedia_m3u; path = "/usr/local/Qt-5.4.0/plugins/playlistformats/libqtmultimedia_m3u$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = ""; }; + 4EC011DBE92DD1FD208D94D2 /* qtmultimedia_m3u */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtmultimedia_m3u; path = "/usr/local/Qt-5.5.0/plugins/playlistformats/libqtmultimedia_m3u$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = ""; }; 5059175BDCEC77B7246DE1B9 /* flatcheckbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flatcheckbox.h; path = SourceFiles/gui/flatcheckbox.h; sourceTree = ""; }; 507CCEEC4CBA3E3BD6EEDED1 /* twidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = twidget.h; path = SourceFiles/gui/twidget.h; sourceTree = ""; }; 51355181C0E6689B0B764543 /* connectionbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = connectionbox.cpp; path = SourceFiles/boxes/connectionbox.cpp; sourceTree = ""; }; 5271C394C1E7646D117CE67E /* main.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = SourceFiles/main.cpp; sourceTree = ""; }; 547CCADBD1CC5050167EF948 /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = /System/Library/Frameworks/CoreMedia.framework; sourceTree = ""; }; 5591A965D1DC024FBDB40151 /* moc_mtpFileLoader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mtpFileLoader.cpp; path = GeneratedFiles/Debug/moc_mtpFileLoader.cpp; sourceTree = ""; }; - 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = ""; }; + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = ""; }; 55A654A2EE8554FF062742B8 /* moc_twidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_twidget.cpp; path = GeneratedFiles/Debug/moc_twidget.cpp; sourceTree = ""; }; 55B4A93DD455EED91C899A8E /* dialogswidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dialogswidget.h; path = SourceFiles/dialogswidget.h; sourceTree = ""; }; 58A7114F60E7D09E73283983 /* moc_introsignup.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_introsignup.cpp; path = GeneratedFiles/Debug/moc_introsignup.cpp; sourceTree = ""; }; @@ -460,100 +461,99 @@ 59E514973BA9BF6599252DDC /* flattextarea.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flattextarea.h; path = SourceFiles/gui/flattextarea.h; sourceTree = ""; }; 5A5431331A13AA7B07414240 /* stdafx.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = stdafx.cpp; path = SourceFiles/stdafx.cpp; sourceTree = ""; }; 5A7F88F9C7F08D3DDE6EEF6B /* localimageloader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = localimageloader.cpp; path = SourceFiles/localimageloader.cpp; sourceTree = ""; }; - 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.4.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.5.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 5A9B4C6C59856143F3D0DE53 /* layerwidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = layerwidget.cpp; path = SourceFiles/layerwidget.cpp; sourceTree = ""; }; - 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = ""; }; + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = ""; }; 5C7FD422BBEDA858D7237AE9 /* flattextarea.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flattextarea.cpp; path = SourceFiles/gui/flattextarea.cpp; sourceTree = ""; }; - 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; - 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; 6011DDB120E1B2D4803E129A /* stdafx.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = stdafx.h; path = SourceFiles/stdafx.h; sourceTree = ""; }; 60C0061633AC4244EA634B2A /* countrycodeinput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = countrycodeinput.h; path = SourceFiles/gui/countrycodeinput.h; sourceTree = ""; }; - 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; 61C679D8B4B332026BD34200 /* introphone.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = introphone.cpp; path = SourceFiles/intro/introphone.cpp; sourceTree = ""; }; 62807F13DBD204D0716143AD /* Telegram.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Telegram.app; sourceTree = BUILT_PRODUCTS_DIR; }; 63AF8520023B4EA40306CB03 /* moc_mtpSession.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mtpSession.cpp; path = GeneratedFiles/Debug/moc_mtpSession.cpp; sourceTree = ""; }; - 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf"; sourceTree = ""; }; + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf"; sourceTree = ""; }; 6532A0DC7EFE446967682E83 /* moc_downloadpathbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_downloadpathbox.cpp; path = GeneratedFiles/Debug/moc_downloadpathbox.cpp; sourceTree = ""; }; 6610564B876E47D289A596DB /* confirmbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = confirmbox.cpp; path = SourceFiles/boxes/confirmbox.cpp; sourceTree = ""; }; - 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf"; sourceTree = ""; }; - 6700DD555BF1C0FC338FB959 /* Qt5Network */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Network; path = "/usr/local/Qt-5.4.0/lib/libQt5Network$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf"; sourceTree = ""; }; + 6700DD555BF1C0FC338FB959 /* Qt5Network */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Network; path = "/usr/local/Qt-5.5.0/lib/libQt5Network$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 6868ADA9E9A9801B2BA92B97 /* countryinput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = countryinput.h; path = SourceFiles/gui/countryinput.h; sourceTree = ""; }; - 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = ""; }; + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = ""; }; 6A510365F9F6367ECB0DB065 /* images.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = images.cpp; path = SourceFiles/gui/images.cpp; sourceTree = ""; }; 6B46A0EE3C3B9D3B5A24946E /* moc_window.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_window.cpp; path = GeneratedFiles/Debug/moc_window.cpp; sourceTree = ""; }; 6B90F69947805586A6FAE80E /* sysbuttons.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = sysbuttons.cpp; path = SourceFiles/sysbuttons.cpp; sourceTree = ""; }; - 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = ""; }; + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = ""; }; 6C86B6E6AB1857B735B720D6 /* layerwidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = layerwidget.h; path = SourceFiles/layerwidget.h; sourceTree = ""; }; 6D50D70712776D7ED3B00E5C /* mtp.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtp.cpp; path = SourceFiles/mtproto/mtp.cpp; sourceTree = ""; }; 6E1859D714E4471E053D90C9 /* scrollarea.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = scrollarea.cpp; path = SourceFiles/gui/scrollarea.cpp; sourceTree = ""; }; - 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qdevice.pri"; sourceTree = ""; }; + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qdevice.pri"; sourceTree = ""; }; 6E8FD0ED1B60D43929944CD2 /* text.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = text.h; path = SourceFiles/gui/text.h; sourceTree = ""; }; 710C982FC773400941B3AFBC /* dropdown.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = dropdown.cpp; path = SourceFiles/dropdown.cpp; sourceTree = ""; }; 723F90793B2C195E2CCB2233 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 73737DC91E390C4AB18FB595 /* pspecific_mac_p.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = pspecific_mac_p.mm; path = SourceFiles/pspecific_mac_p.mm; sourceTree = ""; }; 74772222DA764BE4623EAC5D /* moc_pspecific_mac.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_pspecific_mac.cpp; path = GeneratedFiles/Debug/moc_pspecific_mac.cpp; sourceTree = ""; }; 748F1BCCBEEB3675768960FB /* mtpAuthKey.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpAuthKey.h; path = SourceFiles/mtproto/mtpAuthKey.h; sourceTree = ""; }; - 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; 751C8D0E0BE6D16937B77A2C /* countrycodeinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = countrycodeinput.cpp; path = SourceFiles/gui/countrycodeinput.cpp; sourceTree = ""; }; 763ED3C6815ED6C89E352652 /* flatlabel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flatlabel.cpp; path = SourceFiles/gui/flatlabel.cpp; sourceTree = ""; }; - 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; - 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; - 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = ""; }; + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = ""; }; 7C8F9CA4FCE8AF8FCCCB961E /* phoneinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = phoneinput.cpp; path = SourceFiles/gui/phoneinput.cpp; sourceTree = ""; }; 7CA6945B22800A0F30B75DA5 /* addcontactbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = addcontactbox.cpp; path = SourceFiles/boxes/addcontactbox.cpp; sourceTree = ""; }; 7CDE9D7CB2C729BC3612372B /* addcontactbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = addcontactbox.h; path = SourceFiles/boxes/addcontactbox.h; sourceTree = ""; }; 7D075A915E8739C1B6BC5F43 /* types.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = types.cpp; path = SourceFiles/types.cpp; sourceTree = ""; }; - 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = ""; }; + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = ""; }; 7DBFC0B5EAF874BA10E3D603 /* mtpScheme.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpScheme.h; path = SourceFiles/mtproto/mtpScheme.h; sourceTree = ""; }; - 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = ""; }; + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = ""; }; 7EC00404ACD5AB0E97726B0E /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = /System/Library/Frameworks/QuartzCore.framework; sourceTree = ""; }; - 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = ""; }; + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = ""; }; 81780025807318AEA3B8A6FF /* moc_addcontactbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_addcontactbox.cpp; path = GeneratedFiles/Debug/moc_addcontactbox.cpp; sourceTree = ""; }; - 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/macx.conf"; sourceTree = ""; }; - 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = ""; }; - 833B45FEF5DC4AD0E8ADA64A /* Qt5MultimediaWidgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5MultimediaWidgets; path = "/usr/local/Qt-5.4.0/lib/libQt5MultimediaWidgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/macx.conf"; sourceTree = ""; }; + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = ""; }; 83728F60A64483E0AA933D76 /* pspecific.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pspecific.h; path = SourceFiles/pspecific.h; sourceTree = ""; }; 83A36F229E897566E011B79E /* scrollarea.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = scrollarea.h; path = SourceFiles/gui/scrollarea.h; sourceTree = ""; }; - 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = ""; }; - 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = ""; }; + 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = ""; }; + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = ""; }; 85FABD67716E36CD8B3CA4FA /* animation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = animation.h; path = SourceFiles/gui/animation.h; sourceTree = ""; }; - 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = ""; }; - 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = ""; }; - 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = ""; }; + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = ""; }; + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = ""; }; + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = ""; }; 8880067F9BFD46108777E134 /* mtp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtp.h; path = SourceFiles/mtproto/mtp.h; sourceTree = ""; }; 8918F4B71ED5FC138AFD3F70 /* moc_scrollarea.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_scrollarea.cpp; path = GeneratedFiles/Debug/moc_scrollarea.cpp; sourceTree = ""; }; - 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = ""; }; - 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = ""; }; + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = ""; }; + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = ""; }; 89F92B278CA31C393E245056 /* mtpRPC.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtpRPC.cpp; path = SourceFiles/mtproto/mtpRPC.cpp; sourceTree = ""; }; - 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = ""; }; + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = ""; }; 8A28F7789408AA839F48A5F2 /* settings.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = settings.cpp; path = SourceFiles/settings.cpp; sourceTree = ""; }; 8A9D926C08392F7A9BC83B0C /* fileuploader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fileuploader.h; path = SourceFiles/fileuploader.h; sourceTree = ""; }; - 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = ""; }; + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = ""; }; 8B98A212C068D6CC7CE73CAA /* moc_introcode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_introcode.cpp; path = GeneratedFiles/Debug/moc_introcode.cpp; sourceTree = ""; }; - 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = ""; }; - 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang.conf"; sourceTree = ""; }; + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = ""; }; + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang.conf"; sourceTree = ""; }; 8C800AAC9549E6E9E7046BED /* contactsbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = contactsbox.cpp; path = SourceFiles/boxes/contactsbox.cpp; sourceTree = ""; }; 8CCCACE96535180FEB557712 /* settingswidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = settingswidget.cpp; path = SourceFiles/settingswidget.cpp; sourceTree = ""; }; - 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; - 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = ""; }; + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = ""; }; 8DF456E9A416E4C3C2D6946C /* downloadpathbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = downloadpathbox.cpp; path = SourceFiles/boxes/downloadpathbox.cpp; sourceTree = ""; }; - 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = ""; }; + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = ""; }; 8EB83A4D34226609E79A613A /* connectionbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = connectionbox.h; path = SourceFiles/boxes/connectionbox.h; sourceTree = ""; }; - 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = ""; }; - 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = ""; }; + 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = ""; }; + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = ""; }; 924D4939FD169BB4B8AEB1C9 /* moc_mtp.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mtp.cpp; path = GeneratedFiles/Debug/moc_mtp.cpp; sourceTree = ""; }; 93AFE74928551FC3D7E8390B /* moc_settingswidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_settingswidget.cpp; path = GeneratedFiles/Debug/moc_settingswidget.cpp; sourceTree = ""; }; - 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = ""; }; + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = ""; }; 963123025C466CB8DD9CF4AF /* mtpConnection.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpConnection.h; path = SourceFiles/mtproto/mtpConnection.h; sourceTree = ""; }; 96ACDDE3DCB798B97F9EA2F4 /* mtpFileLoader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpFileLoader.h; path = SourceFiles/mtproto/mtpFileLoader.h; sourceTree = ""; }; 9742F24EE18EA44D52824F1E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; 974DB34EEB8F83B91614C0B0 /* logs.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = logs.cpp; path = SourceFiles/logs.cpp; sourceTree = ""; }; 99B8D38F7F5858601230911E /* style_auto.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = style_auto.cpp; path = GeneratedFiles/style_auto.cpp; sourceTree = ""; }; - 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = ""; }; - 9A55B8F7C143D66AD9EAE304 /* qgenericbearer */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qgenericbearer; path = "/usr/local/Qt-5.4.0/plugins/bearer/libqgenericbearer$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = ""; }; + 9A55B8F7C143D66AD9EAE304 /* qgenericbearer */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qgenericbearer; path = "/usr/local/Qt-5.5.0/plugins/bearer/libqgenericbearer$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 9A69B711DE4B9C89BA803750 /* moc_aboutbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_aboutbox.cpp; path = GeneratedFiles/Debug/moc_aboutbox.cpp; sourceTree = ""; }; 9AB1479D7D63386FD2046620 /* flatinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flatinput.cpp; path = SourceFiles/gui/flatinput.cpp; sourceTree = ""; }; 9B36BB8C5B8CA7B07F3F35F0 /* fileuploader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = fileuploader.cpp; path = SourceFiles/fileuploader.cpp; sourceTree = ""; }; @@ -563,138 +563,135 @@ 9E0704DE8650D7952DC6B7AE /* moc_photosendbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_photosendbox.cpp; path = GeneratedFiles/Debug/moc_photosendbox.cpp; sourceTree = ""; }; 9EFD7CB36012BFC00CC79434 /* style_auto.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = style_auto.h; path = GeneratedFiles/style_auto.h; sourceTree = ""; }; A0090709DE1B155085362C36 /* introcode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = introcode.cpp; path = SourceFiles/intro/introcode.cpp; sourceTree = ""; }; - A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; A1479F94376F9732B57C69DB /* moc_animation.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_animation.cpp; path = GeneratedFiles/Debug/moc_animation.cpp; sourceTree = ""; }; A1A67BEAA744704B29168D39 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; A1F48DF3E5D0D7C741C1EAC4 /* moc_countrycodeinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_countrycodeinput.cpp; path = GeneratedFiles/Debug/moc_countrycodeinput.cpp; sourceTree = ""; }; A3622760CEC6D6827A25E710 /* mtpPublicRSA.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpPublicRSA.h; path = SourceFiles/mtproto/mtpPublicRSA.h; sourceTree = ""; }; A37C7E516201B0264A4CDA38 /* moc_intro.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_intro.cpp; path = GeneratedFiles/Debug/moc_intro.cpp; sourceTree = ""; }; - A490341D0650372A5757B367 /* qtmedia_audioengine */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtmedia_audioengine; path = "/usr/local/Qt-5.4.0/plugins/mediaservice/libqtmedia_audioengine$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; - A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = ""; }; - A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = ""; }; - A7782E2B07CB2D1D14F431B0 /* qtaccessiblewidgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtaccessiblewidgets; path = "/usr/local/Qt-5.4.0/plugins/accessible/libqtaccessiblewidgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = ""; }; + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = ""; }; + A7782E2B07CB2D1D14F431B0 /* qtaccessiblewidgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtaccessiblewidgets; path = "/usr/local/Qt-5.5.0/plugins/accessible/libqtaccessiblewidgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; A83D2C19F756D3371E5999A8 /* historywidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = historywidget.cpp; path = SourceFiles/historywidget.cpp; sourceTree = ""; }; - A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = ""; }; + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = ""; }; A9FF4818C6775109B3DBFA18 /* introsignup.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = introsignup.cpp; path = SourceFiles/intro/introsignup.cpp; sourceTree = ""; }; - AA5379CB06E908AC80BE7B82 /* Qt5OpenGL */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5OpenGL; path = "/usr/local/Qt-5.4.0/lib/libQt5OpenGL$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = ""; }; - AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = ""; }; + AA5379CB06E908AC80BE7B82 /* Qt5OpenGL */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5OpenGL; path = "/usr/local/Qt-5.5.0/lib/libQt5OpenGL$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = ""; }; + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = ""; }; AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = ""; }; - ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = ""; }; + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = ""; }; AC9B5F6FB4B984C8D76F7AE2 /* moc_dropdown.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_dropdown.cpp; path = GeneratedFiles/Debug/moc_dropdown.cpp; sourceTree = ""; }; - ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = ""; }; + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = ""; }; AD0C395D671BC024083A5FC7 /* localimageloader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = localimageloader.h; path = SourceFiles/localimageloader.h; sourceTree = ""; }; AD90723EF02EAD016FD49CC9 /* introsteps.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = introsteps.h; path = SourceFiles/intro/introsteps.h; sourceTree = ""; }; - ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = ""; }; + ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = ""; }; AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; AF4585F593B1C9D0D4FD061C /* flatcheckbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flatcheckbox.cpp; path = SourceFiles/gui/flatcheckbox.cpp; sourceTree = ""; }; AF5776B0652744978B7DF6D3 /* langloaderplain.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = langloaderplain.cpp; path = SourceFiles/langloaderplain.cpp; sourceTree = ""; }; AF61D864B8C444ADD4E1B391 /* moc_photocropbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_photocropbox.cpp; path = GeneratedFiles/Debug/moc_photocropbox.cpp; sourceTree = ""; }; - AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = ""; }; - B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = ""; }; - B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = ""; }; - B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = ""; }; + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = ""; }; + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = ""; }; + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = ""; }; + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = ""; }; B3062303CE8F4EB9325CB3DC /* emoji_config.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = emoji_config.cpp; path = SourceFiles/gui/emoji_config.cpp; sourceTree = ""; }; - B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = ""; }; + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = ""; }; B3D42654F18B1FE49512C404 /* mtpDC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpDC.h; path = SourceFiles/mtproto/mtpDC.h; sourceTree = ""; }; - B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = ""; }; - B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = ""; }; - B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = ""; }; + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = ""; }; + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = ""; }; + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = ""; }; B714EA71A09A832FAA846A0A /* moc_mtpConnection.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mtpConnection.cpp; path = GeneratedFiles/Debug/moc_mtpConnection.cpp; sourceTree = ""; }; B8100EAB0521FC7A937D2E4F /* moc_phoneinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_phoneinput.cpp; path = GeneratedFiles/Debug/moc_phoneinput.cpp; sourceTree = ""; }; - B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = ""; }; + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = ""; }; B88236FC554B694F618D848C /* moc_sysbuttons.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_sysbuttons.cpp; path = GeneratedFiles/Debug/moc_sysbuttons.cpp; sourceTree = ""; }; - B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = ""; }; + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = ""; }; B8D9AFA42E8633154A9817A2 /* mtpConnection.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtpConnection.cpp; path = SourceFiles/mtproto/mtpConnection.cpp; sourceTree = ""; }; B97D4DB97FE881648644211A /* downloadpathbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = downloadpathbox.h; path = SourceFiles/boxes/downloadpathbox.h; sourceTree = ""; }; BB1602EA641643DE565005B1 /* twidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = twidget.cpp; path = SourceFiles/gui/twidget.cpp; sourceTree = ""; }; - BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = ""; }; - BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = ""; }; + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = ""; }; + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = ""; }; BDAB6725B830DEE896DC0F55 /* boxshadow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = boxshadow.h; path = SourceFiles/gui/boxshadow.h; sourceTree = ""; }; - BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = ""; }; + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = ""; }; BEF9DFDA6822604126A7E233 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = ""; }; - BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = ""; }; + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = ""; }; C194EDD00F76216057D48A5C /* aboutbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = aboutbox.cpp; path = SourceFiles/boxes/aboutbox.cpp; sourceTree = ""; }; C19DF71B273A4843553518F2 /* app.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = app.h; path = SourceFiles/app.h; sourceTree = ""; }; C20F9DD8C7B031B8E20D5653 /* application.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = application.cpp; path = SourceFiles/application.cpp; sourceTree = ""; }; C34459FA465B57DF4DB80D12 /* introsteps.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = introsteps.cpp; path = SourceFiles/intro/introsteps.cpp; sourceTree = ""; }; - C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = ""; }; - C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = ""; }; - C52030E4534894A117CA66CA /* qavfcamera */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qavfcamera; path = "/usr/local/Qt-5.4.0/plugins/mediaservice/libqavfcamera$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = ""; }; + C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = ""; }; C63C6D083EBEB13A60256DF3 /* historywidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = historywidget.h; path = SourceFiles/historywidget.h; sourceTree = ""; }; - C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = ""; }; + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = ""; }; C913E6A1001E07EE7C13CE93 /* style.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = style.h; path = SourceFiles/style.h; sourceTree = ""; }; C9FFCCE4FCB845744636795F /* moc_flatbutton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_flatbutton.cpp; path = GeneratedFiles/Debug/moc_flatbutton.cpp; sourceTree = ""; }; CA56ACFB53D87637192CC9B2 /* window.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = window.cpp; path = SourceFiles/window.cpp; sourceTree = ""; }; - CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = ""; }; + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = ""; }; CE0D5EFE401BF9815FACE579 /* pspecific_mac.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pspecific_mac.h; path = SourceFiles/pspecific_mac.h; sourceTree = ""; }; CE7FFE194127BD789A2C877A /* moc_confirmbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_confirmbox.cpp; path = GeneratedFiles/Debug/moc_confirmbox.cpp; sourceTree = ""; }; - CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = ""; }; + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = ""; }; CF1690B68F3B278E78823DB9 /* history.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = history.h; path = SourceFiles/history.h; sourceTree = ""; }; CF32DF59C7823E4F3397EF3C /* profilewidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = profilewidget.cpp; path = SourceFiles/profilewidget.cpp; sourceTree = ""; }; - CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = ""; }; - CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = ""; }; - CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = ""; }; - D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = ""; }; + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = ""; }; + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = ""; }; + CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = ""; }; + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = ""; }; D12A6BD8EE80B8B308E481AD /* moc_flattextarea.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_flattextarea.cpp; path = GeneratedFiles/Debug/moc_flattextarea.cpp; sourceTree = ""; }; D1C9C77F1318F5A55C9BF289 /* photosendbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = photosendbox.cpp; path = SourceFiles/boxes/photosendbox.cpp; sourceTree = ""; }; - D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = ""; }; - D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = ""; }; - D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = ""; }; + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = ""; }; + D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; D3FE9C29B6A61D7C3C4B731B /* animation.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = animation.cpp; path = SourceFiles/gui/animation.cpp; sourceTree = ""; }; D4B32C2222F82AC56BADEB21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; - D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qconfig.pri"; sourceTree = ""; }; - D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = ""; }; - D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.4.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.4.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qconfig.pri"; sourceTree = ""; }; + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = ""; }; + D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.5.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.5.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; D6FF6676816C4E374D374060 /* qrc_telegram.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = qrc_telegram.cpp; path = GeneratedFiles/qrc_telegram.cpp; sourceTree = ""; }; - D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = ""; }; - D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = ""; }; - D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = ""; }; - DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = ""; }; - DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = ""; }; + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = ""; }; + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = ""; }; + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = ""; }; + DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; DC23E0B79FF53F35BA8F76A1 /* introsignup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = introsignup.h; path = SourceFiles/intro/introsignup.h; sourceTree = ""; }; - DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; DE4C0E3685DDAE58F9397B13 /* filedialog.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = filedialog.cpp; path = SourceFiles/gui/filedialog.cpp; sourceTree = ""; }; - DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = ""; }; + DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = ""; }; DFD7912080BC557230093752 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; - E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = ""; }; + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = ""; }; E181C525E21A16F2D4396CA7 /* moc_application.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_application.cpp; path = GeneratedFiles/Debug/moc_application.cpp; sourceTree = ""; }; - E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = ""; }; - E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = ""; }; + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = ""; }; + E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = ""; }; E466873F01ABA1E55E914489 /* dialogswidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = dialogswidget.cpp; path = SourceFiles/dialogswidget.cpp; sourceTree = ""; }; - E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = ""; }; - E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = ""; }; - E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = ""; }; + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = ""; }; + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = ""; }; + E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = ""; }; E908A6C86F93FA27DF70866C /* photocropbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = photocropbox.cpp; path = SourceFiles/boxes/photocropbox.cpp; sourceTree = ""; }; - EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = ""; }; - EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = ""; }; - EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = ""; }; - EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/mac.conf"; sourceTree = ""; }; + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = ""; }; + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = ""; }; + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = ""; }; + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/mac.conf"; sourceTree = ""; }; EC4D4A7398CAAD47386D9CA0 /* mtpSessionImpl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpSessionImpl.h; path = SourceFiles/mtproto/mtpSessionImpl.h; sourceTree = ""; }; - EDD43CF4FA85D97A1140E973 /* qavfmediaplayer */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qavfmediaplayer; path = "/usr/local/Qt-5.4.0/plugins/mediaservice/libqavfmediaplayer$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - EE03BC5CA4628A6D6BEB0122 /* qcorewlanbearer */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcorewlanbearer; path = "/usr/local/Qt-5.4.0/plugins/bearer/libqcorewlanbearer$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + EE03BC5CA4628A6D6BEB0122 /* qcorewlanbearer */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcorewlanbearer; path = "/usr/local/Qt-5.5.0/plugins/bearer/libqcorewlanbearer$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; EF1AD6A66D0C28A6A15E2C30 /* introphone.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = introphone.h; path = SourceFiles/intro/introphone.h; sourceTree = ""; }; - F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = ""; }; + F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = ""; }; F1A04BDB750C2AE652797B04 /* flatbutton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flatbutton.cpp; path = SourceFiles/gui/flatbutton.cpp; sourceTree = ""; }; F1B68FFCE8AE823F6D45EB06 /* phoneinput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = phoneinput.h; path = SourceFiles/gui/phoneinput.h; sourceTree = ""; }; - F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; F26998DF735BCE5F975508ED /* CoreWLAN.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreWLAN.framework; path = /System/Library/Frameworks/CoreWLAN.framework; sourceTree = ""; }; - F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = ""; }; - F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf"; sourceTree = ""; }; - F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = ""; }; + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = ""; }; + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf"; sourceTree = ""; }; + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = ""; }; F4EECA1187A744AEF5165243 /* pspecific_mac.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = pspecific_mac.cpp; path = SourceFiles/pspecific_mac.cpp; sourceTree = ""; }; - F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = ""; }; + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = ""; }; F80095A026AF9453E9C2B8BD /* settingswidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = settingswidget.h; path = SourceFiles/settingswidget.h; sourceTree = ""; }; - F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = ""; }; - F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = ""; }; + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = ""; }; + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = ""; }; FB61F72601D91BF3AC730D20 /* mtpRPC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpRPC.h; path = SourceFiles/mtproto/mtpRPC.h; sourceTree = ""; }; FCC237CA5AD60B9BA4447615 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; - FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = ""; }; + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = ""; }; FE8FD20832B4C226E345CFBA /* mainwidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mainwidget.h; path = SourceFiles/mainwidget.h; sourceTree = ""; }; FEC58F9D8A0963E5A9D4BE6F /* moc_connectionbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_connectionbox.cpp; path = GeneratedFiles/Debug/moc_connectionbox.cpp; sourceTree = ""; }; FF5BDAB0076F3391B219EA52 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = /System/Library/Frameworks/SystemConfiguration.framework; sourceTree = ""; }; @@ -741,6 +738,7 @@ F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */, 9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */, 8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */, + 07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */, B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */, ); name = "Link Binary With Libraries"; @@ -983,127 +981,127 @@ isa = PBXGroup; children = ( 36BDA5D01BED543A92886669 /* Telegram.pro */, - 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */, - 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */, - 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */, - EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */, - 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */, - 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */, - A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */, - 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */, - F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */, - D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */, - ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */, - 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, - BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, - CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */, - 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */, - 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */, - 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */, - 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */, - 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */, - 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */, - F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */, - 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */, - 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, - 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */, - 4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */, - 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */, - D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */, - FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */, - D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */, - A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */, - 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */, - D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */, - E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */, - 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, - D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, - 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */, - 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */, - 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */, - B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */, - 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */, - E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */, - E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */, - 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, - 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, - F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */, - E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */, - 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */, - D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */, - B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */, - 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */, - 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, - DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */, - ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */, - 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, - 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */, - 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */, - 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, - D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */, - B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, - CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */, - C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */, - CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */, - A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */, - 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */, - BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */, - BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */, - 311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */, - 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */, - 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */, - ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */, - 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */, - DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */, - 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */, - E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */, - B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */, - 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */, - 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */, - A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */, - 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */, - AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */, - E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */, - 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, - F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, - D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, - 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, - F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, - AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */, - EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, - 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */, - 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, - 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, - EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */, - C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */, - 45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */, - B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */, - F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, - B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, - EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, - 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, - 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */, - CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, - 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, - B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */, - F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */, - CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, - 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, - 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, - 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, - 060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */, - BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */, - B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, - 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, - C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, - AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, - 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, - 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, - A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, - 346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */, - B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */, - 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */, - 85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */, + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */, + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */, + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */, + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */, + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */, + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */, + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */, + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */, + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */, + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */, + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */, + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */, + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */, + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */, + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */, + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */, + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */, + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */, + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */, + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */, + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */, + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */, + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */, + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */, + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */, + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */, + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */, + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */, + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */, + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */, + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */, + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */, + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */, + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */, + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */, + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */, + E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */, + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */, + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */, + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */, + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */, + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */, + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */, + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, + DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */, + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */, + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */, + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */, + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */, + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */, + C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */, + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */, + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */, + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */, + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */, + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */, + 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */, + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */, + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */, + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */, + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */, + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */, + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */, + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */, + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */, + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */, + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */, + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */, + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */, + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */, + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */, + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */, + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */, + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */, + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */, + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */, + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */, + F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */, + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */, + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */, + CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, + 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */, + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */, + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */, + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */, + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */, + 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */, AB745978DF0F41D1801ABDA6 /* .qmake.stash */, 370997172D3BAEED157B8E70 /* SourceFiles */, ); @@ -1228,6 +1226,7 @@ children = ( 07CAACD71AEA64F00058E508 /* AudioUnit.framework */, 07055CC3194EE85B0008DEF6 /* libcrypto.a */, + 07D795491B5544B200DE9598 /* qtpcre */, AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */, 4AF15B5A0A43EB62D6DAF211 /* libexif.a */, DFD7912080BC557230093752 /* ApplicationServices.framework */, @@ -1239,7 +1238,6 @@ 205259EEEE2BADA5E64741E3 /* Security.framework */, FF5BDAB0076F3391B219EA52 /* SystemConfiguration.framework */, 9DFF62A901D70814B8A323D4 /* Carbon.framework */, - C52030E4534894A117CA66CA /* qavfcamera */, 3C44131FDCFEF4396B9EA2BA /* AudioToolbox.framework */, BEF9DFDA6822604126A7E233 /* CoreAudio.framework */, 7EC00404ACD5AB0E97726B0E /* QuartzCore.framework */, @@ -1247,11 +1245,7 @@ 547CCADBD1CC5050167EF948 /* CoreMedia.framework */, 723F90793B2C195E2CCB2233 /* AppKit.framework */, 186D09F4CB713AD4B8BDD260 /* AudioUnit.framework */, - EDD43CF4FA85D97A1140E973 /* qavfmediaplayer */, - 1C21DCD421D7B7E0462F1121 /* qqt7engine */, - 833B45FEF5DC4AD0E8ADA64A /* Qt5MultimediaWidgets */, AA5379CB06E908AC80BE7B82 /* Qt5OpenGL */, - A490341D0650372A5757B367 /* qtmedia_audioengine */, 3BBB805F6180E363BF89151A /* qtaudio_coreaudio */, 4EC011DBE92DD1FD208D94D2 /* qtmultimedia_m3u */, 112159B026FDEF9CD4E24175 /* Qt5Multimedia */, @@ -1776,8 +1770,8 @@ GCC_WARN_UNUSED_FUNCTION = NO; GCC_WARN_UNUSED_VARIABLE = NO; HEADER_SEARCH_PATHS = ( - ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ./../../Libraries/QtStatic/qtbase/include, ./SourceFiles, ./GeneratedFiles, @@ -1785,15 +1779,15 @@ ./../../Libraries/opus/include, "./../../Libraries/openal-soft/include", "./../../Libraries/libexif-0.6.20", - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtMultimedia", - "/usr/local/Qt-5.4.0/include/QtWidgets", - "/usr/local/Qt-5.4.0/include/QtNetwork", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtMultimedia", + "/usr/local/Qt-5.5.0/include/QtWidgets", + "/usr/local/Qt-5.5.0/include/QtNetwork", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INFOPLIST_FILE = Telegram.plist; INSTALL_DIR = ./../Mac/Release/; @@ -1801,13 +1795,10 @@ LIBRARY_SEARCH_PATHS = ( /System/Library/Frameworks/, "./../../Libraries/libexif-0.6.20/libexif/.libs", - "/usr/local/Qt-5.4.0/lib", - "/usr/local/Qt-5.4.0/plugins/mediaservice", - "/usr/local/Qt-5.4.0/plugins/audio", - "/usr/local/Qt-5.4.0/plugins/playlistformats", - "/usr/local/Qt-5.4.0/plugins/bearer", - "/usr/local/Qt-5.4.0/plugins/platforms", - "/usr/local/Qt-5.4.0/plugins/imageformats", + "/usr/local/Qt-5.5.0/lib", + "/usr/local/Qt-5.5.0/plugins/bearer", + "/usr/local/Qt-5.5.0/plugins/platforms", + "/usr/local/Qt-5.5.0/plugins/imageformats", "./../../Libraries/openssl-xcode", ); MACOSX_DEPLOYMENT_TARGET = 10.7; @@ -1857,14 +1848,11 @@ OTHER_LDFLAGS = ( "-headerpad_max_install_names", "-stdlib=libc++", - "-L/usr/local/Qt-5.4.0/lib", - "-L/usr/local/Qt-5.4.0/plugins/mediaservice", - "-L/usr/local/Qt-5.4.0/plugins/audio", - "-L/usr/local/Qt-5.4.0/plugins/playlistformats", - "-L/usr/local/Qt-5.4.0/plugins/bearer", - "-L/usr/local/Qt-5.4.0/plugins/platforms", + "-L/usr/local/Qt-5.5.0/lib", + "-L/usr/local/Qt-5.5.0/plugins/bearer", + "-L/usr/local/Qt-5.5.0/plugins/platforms", "-lcups", - "-L/usr/local/Qt-5.4.0/plugins/imageformats", + "-L/usr/local/Qt-5.5.0/plugins/imageformats", "-lz", "-lm", /usr/local/lib/libopenal.a, @@ -1919,8 +1907,8 @@ GCC_WARN_UNUSED_FUNCTION = NO; GCC_WARN_UNUSED_VARIABLE = NO; HEADER_SEARCH_PATHS = ( - ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ./../../Libraries/QtStatic/qtbase/include, ./SourceFiles, ./GeneratedFiles, @@ -1928,15 +1916,15 @@ ./../../Libraries/opus/include, "./../../Libraries/openal-soft/include", "./../../Libraries/libexif-0.6.20", - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtMultimedia", - "/usr/local/Qt-5.4.0/include/QtWidgets", - "/usr/local/Qt-5.4.0/include/QtNetwork", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtMultimedia", + "/usr/local/Qt-5.5.0/include/QtWidgets", + "/usr/local/Qt-5.5.0/include/QtNetwork", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INFOPLIST_FILE = Telegram.plist; INSTALL_DIR = ./../Mac/Debug/; @@ -1944,13 +1932,10 @@ LIBRARY_SEARCH_PATHS = ( /System/Library/Frameworks/, "./../../Libraries/libexif-0.6.20/libexif/.libs", - "/usr/local/Qt-5.4.0/lib", - "/usr/local/Qt-5.4.0/plugins/mediaservice", - "/usr/local/Qt-5.4.0/plugins/audio", - "/usr/local/Qt-5.4.0/plugins/playlistformats", - "/usr/local/Qt-5.4.0/plugins/bearer", - "/usr/local/Qt-5.4.0/plugins/platforms", - "/usr/local/Qt-5.4.0/plugins/imageformats", + "/usr/local/Qt-5.5.0/lib", + "/usr/local/Qt-5.5.0/plugins/bearer", + "/usr/local/Qt-5.5.0/plugins/platforms", + "/usr/local/Qt-5.5.0/plugins/imageformats", "./../../Libraries/openssl-xcode", ); MACOSX_DEPLOYMENT_TARGET = 10.7; @@ -1999,14 +1984,11 @@ OTHER_LDFLAGS = ( "-headerpad_max_install_names", "-stdlib=libc++", - "-L/usr/local/Qt-5.4.0/lib", - "-L/usr/local/Qt-5.4.0/plugins/mediaservice", - "-L/usr/local/Qt-5.4.0/plugins/audio", - "-L/usr/local/Qt-5.4.0/plugins/playlistformats", - "-L/usr/local/Qt-5.4.0/plugins/bearer", - "-L/usr/local/Qt-5.4.0/plugins/platforms", + "-L/usr/local/Qt-5.5.0/lib", + "-L/usr/local/Qt-5.5.0/plugins/bearer", + "-L/usr/local/Qt-5.5.0/plugins/platforms", "-lcups", - "-L/usr/local/Qt-5.4.0/plugins/imageformats", + "-L/usr/local/Qt-5.5.0/plugins/imageformats", "-lz", "-lm", /usr/local/lib/libopenal.a, diff --git a/Telegram/Telegram.xcodeproj/qt_preprocess.mak b/Telegram/Telegram.xcodeproj/qt_preprocess.mak index 1843b0fb7..662fd8be5 100644 --- a/Telegram/Telegram.xcodeproj/qt_preprocess.mak +++ b/Telegram/Telegram.xcodeproj/qt_preprocess.mak @@ -1,21 +1,21 @@ ############################################################################# # Makefile for building: ../Mac/Debug/Telegram.app/Contents/MacOS/Telegram -# Generated by qmake (3.0) (Qt 5.4.0) +# Generated by qmake (3.0) (Qt 5.5.0) # Project: Telegram.pro # Template: app -# Command: /usr/local/Qt-5.4.0/bin/qmake -spec macx-xcode -o Telegram.xcodeproj/project.pbxproj Telegram.pro +# Command: /usr/local/Qt-5.5.0/bin/qmake -spec macx-xcode -o Telegram.xcodeproj/project.pbxproj Telegram.pro ############################################################################# MAKEFILE = project.pbxproj -MOC = /usr/local/Qt-5.4.0/bin/moc -UIC = /usr/local/Qt-5.4.0/bin/uic +MOC = /usr/local/Qt-5.5.0/bin/moc +UIC = /usr/local/Qt-5.5.0/bin/uic LEX = flex LEXFLAGS = YACC = yacc YACCFLAGS = -d DEFINES = -D_DEBUG -D_DEBUG -DQT_MULTIMEDIA_LIB -DQT_WIDGETS_LIB -DQT_NETWORK_LIB -DQT_GUI_LIB -DQT_CORE_LIB -INCPATH = -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore -I../../Libraries/QtStatic/qtbase/include -ISourceFiles -IGeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers +INCPATH = -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore -I../../Libraries/QtStatic/qtbase/include -ISourceFiles -IGeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers DEL_FILE = rm -f MOVE = mv -f @@ -85,7 +85,7 @@ GeneratedFiles/qrc_telegram.cpp: SourceFiles/telegram.qrc \ SourceFiles/art/usercolor1.png \ SourceFiles/art/usercolor5.png \ SourceFiles/art/chatcolor2.png - /usr/local/Qt-5.4.0/bin/rcc -name telegram SourceFiles/telegram.qrc -o GeneratedFiles/qrc_telegram.cpp + /usr/local/Qt-5.5.0/bin/rcc -name telegram SourceFiles/telegram.qrc -o GeneratedFiles/qrc_telegram.cpp GeneratedFiles/qrc_telegram_emojis.cpp: SourceFiles/telegram_emojis.qrc \ SourceFiles/art/emoji.webp \ @@ -93,11 +93,11 @@ GeneratedFiles/qrc_telegram_emojis.cpp: SourceFiles/telegram_emojis.qrc \ SourceFiles/art/emoji_200x.webp \ SourceFiles/art/emoji_250x.webp \ SourceFiles/art/emoji_125x.webp - /usr/local/Qt-5.4.0/bin/rcc -name telegram_emojis SourceFiles/telegram_emojis.qrc -o GeneratedFiles/qrc_telegram_emojis.cpp + /usr/local/Qt-5.5.0/bin/rcc -name telegram_emojis SourceFiles/telegram_emojis.qrc -o GeneratedFiles/qrc_telegram_emojis.cpp GeneratedFiles/qrc_telegram_mac.cpp: SourceFiles/telegram_mac.qrc \ SourceFiles/art/osxtray.png - /usr/local/Qt-5.4.0/bin/rcc -name telegram_mac SourceFiles/telegram_mac.qrc -o GeneratedFiles/qrc_telegram_mac.cpp + /usr/local/Qt-5.5.0/bin/rcc -name telegram_mac SourceFiles/telegram_mac.qrc -o GeneratedFiles/qrc_telegram_mac.cpp compiler_moc_header_make_all: GeneratedFiles/Debug/moc_apiwrap.cpp GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_audio.cpp GeneratedFiles/Debug/moc_autoupdater.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_history.cpp GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp GeneratedFiles/Debug/moc_mediaview.cpp GeneratedFiles/Debug/moc_overviewwidget.cpp GeneratedFiles/Debug/moc_playerwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp GeneratedFiles/Debug/moc_passcodewidget.cpp GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_localstorage.cpp GeneratedFiles/Debug/moc_mainwidget.cpp GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp GeneratedFiles/Debug/moc_types.cpp GeneratedFiles/Debug/moc_window.cpp GeneratedFiles/Debug/moc_mtp.cpp GeneratedFiles/Debug/moc_mtpConnection.cpp GeneratedFiles/Debug/moc_mtpDC.cpp GeneratedFiles/Debug/moc_mtpFileLoader.cpp GeneratedFiles/Debug/moc_mtpSession.cpp GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp GeneratedFiles/Debug/moc_contextmenu.cpp GeneratedFiles/Debug/moc_countrycodeinput.cpp GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp GeneratedFiles/Debug/moc_switcher.cpp GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp GeneratedFiles/Debug/moc_aboutbox.cpp GeneratedFiles/Debug/moc_abstractbox.cpp GeneratedFiles/Debug/moc_addcontactbox.cpp GeneratedFiles/Debug/moc_autolockbox.cpp GeneratedFiles/Debug/moc_backgroundbox.cpp GeneratedFiles/Debug/moc_confirmbox.cpp GeneratedFiles/Debug/moc_connectionbox.cpp GeneratedFiles/Debug/moc_contactsbox.cpp GeneratedFiles/Debug/moc_downloadpathbox.cpp GeneratedFiles/Debug/moc_emojibox.cpp GeneratedFiles/Debug/moc_languagebox.cpp GeneratedFiles/Debug/moc_passcodebox.cpp GeneratedFiles/Debug/moc_photocropbox.cpp GeneratedFiles/Debug/moc_photosendbox.cpp GeneratedFiles/Debug/moc_sessionsbox.cpp GeneratedFiles/Debug/moc_stickersetbox.cpp GeneratedFiles/Debug/moc_usernamebox.cpp GeneratedFiles/Debug/moc_intro.cpp GeneratedFiles/Debug/moc_introcode.cpp GeneratedFiles/Debug/moc_introphone.cpp GeneratedFiles/Debug/moc_intropwdcheck.cpp GeneratedFiles/Debug/moc_introsignup.cpp GeneratedFiles/Debug/moc_pspecific_mac.cpp compiler_moc_header_clean: @@ -105,7 +105,7 @@ compiler_moc_header_clean: GeneratedFiles/Debug/moc_apiwrap.cpp: SourceFiles/types.h \ SourceFiles/logs.h \ SourceFiles/apiwrap.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/apiwrap.h -o GeneratedFiles/Debug/moc_apiwrap.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/apiwrap.h -o GeneratedFiles/Debug/moc_apiwrap.cpp GeneratedFiles/Debug/moc_application.cpp: ../../Libraries/QtStatic/qtbase/include/QtNetwork/QLocalSocket \ ../../Libraries/QtStatic/qtbase/include/QtNetwork/QLocalServer \ @@ -128,7 +128,7 @@ GeneratedFiles/Debug/moc_application.cpp: ../../Libraries/QtStatic/qtbase/includ SourceFiles/pspecific_wnd.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/application.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/application.h -o GeneratedFiles/Debug/moc_application.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/application.h -o GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_audio.cpp: SourceFiles/types.h \ SourceFiles/audio.h \ @@ -136,7 +136,7 @@ GeneratedFiles/Debug/moc_audio.cpp: SourceFiles/types.h \ SourceFiles/logs.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/audio.h -o GeneratedFiles/Debug/moc_audio.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/audio.h -o GeneratedFiles/Debug/moc_audio.cpp GeneratedFiles/Debug/moc_autoupdater.cpp: SourceFiles/types.h \ SourceFiles/autoupdater.h \ @@ -144,22 +144,22 @@ GeneratedFiles/Debug/moc_autoupdater.cpp: SourceFiles/types.h \ SourceFiles/logs.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/autoupdater.h -o GeneratedFiles/Debug/moc_autoupdater.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/autoupdater.h -o GeneratedFiles/Debug/moc_autoupdater.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp: SourceFiles/dialogswidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/dialogswidget.h -o GeneratedFiles/Debug/moc_dialogswidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/dialogswidget.h -o GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp: SourceFiles/gui/twidget.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/dropdown.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/dropdown.h -o GeneratedFiles/Debug/moc_dropdown.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/dropdown.h -o GeneratedFiles/Debug/moc_dropdown.cpp GeneratedFiles/Debug/moc_fileuploader.cpp: SourceFiles/localimageloader.h \ SourceFiles/fileuploader.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/fileuploader.h -o GeneratedFiles/Debug/moc_fileuploader.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/fileuploader.h -o GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_history.cpp: SourceFiles/history.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/history.h -o GeneratedFiles/Debug/moc_history.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/history.h -o GeneratedFiles/Debug/moc_history.cpp GeneratedFiles/Debug/moc_historywidget.cpp: SourceFiles/localimageloader.h \ SourceFiles/gui/boxshadow.h \ @@ -167,32 +167,32 @@ GeneratedFiles/Debug/moc_historywidget.cpp: SourceFiles/localimageloader.h \ SourceFiles/gui/twidget.h \ SourceFiles/passcodewidget.h \ SourceFiles/historywidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/historywidget.h -o GeneratedFiles/Debug/moc_historywidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/historywidget.h -o GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp: SourceFiles/gui/boxshadow.h \ SourceFiles/layerwidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/layerwidget.h -o GeneratedFiles/Debug/moc_layerwidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/layerwidget.h -o GeneratedFiles/Debug/moc_layerwidget.cpp GeneratedFiles/Debug/moc_mediaview.cpp: SourceFiles/mediaview.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mediaview.h -o GeneratedFiles/Debug/moc_mediaview.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mediaview.h -o GeneratedFiles/Debug/moc_mediaview.cpp GeneratedFiles/Debug/moc_overviewwidget.cpp: SourceFiles/overviewwidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/overviewwidget.h -o GeneratedFiles/Debug/moc_overviewwidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/overviewwidget.h -o GeneratedFiles/Debug/moc_overviewwidget.cpp GeneratedFiles/Debug/moc_playerwidget.cpp: SourceFiles/playerwidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/playerwidget.h -o GeneratedFiles/Debug/moc_playerwidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/playerwidget.h -o GeneratedFiles/Debug/moc_playerwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp: SourceFiles/profilewidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/profilewidget.h -o GeneratedFiles/Debug/moc_profilewidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/profilewidget.h -o GeneratedFiles/Debug/moc_profilewidget.cpp GeneratedFiles/Debug/moc_passcodewidget.cpp: SourceFiles/passcodewidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/passcodewidget.h -o GeneratedFiles/Debug/moc_passcodewidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/passcodewidget.h -o GeneratedFiles/Debug/moc_passcodewidget.cpp GeneratedFiles/Debug/moc_localimageloader.cpp: SourceFiles/localimageloader.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/localimageloader.h -o GeneratedFiles/Debug/moc_localimageloader.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/localimageloader.h -o GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_localstorage.cpp: SourceFiles/localstorage.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/localstorage.h -o GeneratedFiles/Debug/moc_localstorage.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/localstorage.h -o GeneratedFiles/Debug/moc_localstorage.cpp GeneratedFiles/Debug/moc_mainwidget.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/flatbutton.h \ @@ -216,7 +216,7 @@ GeneratedFiles/Debug/moc_mainwidget.cpp: ../../Libraries/QtStatic/qtbase/include SourceFiles/overviewwidget.h \ SourceFiles/profilewidget.h \ SourceFiles/mainwidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mainwidget.h -o GeneratedFiles/Debug/moc_mainwidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mainwidget.h -o GeneratedFiles/Debug/moc_mainwidget.cpp GeneratedFiles/Debug/moc_settingswidget.cpp: SourceFiles/gui/flatbutton.h \ SourceFiles/gui/button.h \ @@ -234,7 +234,7 @@ GeneratedFiles/Debug/moc_settingswidget.cpp: SourceFiles/gui/flatbutton.h \ GeneratedFiles/style_auto.h \ SourceFiles/sysbuttons.h \ SourceFiles/settingswidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/settingswidget.h -o GeneratedFiles/Debug/moc_settingswidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/settingswidget.h -o GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/animation.h \ @@ -247,7 +247,7 @@ GeneratedFiles/Debug/moc_sysbuttons.cpp: ../../Libraries/QtStatic/qtbase/include SourceFiles/passcodewidget.h \ SourceFiles/gui/twidget.h \ SourceFiles/sysbuttons.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/sysbuttons.h -o GeneratedFiles/Debug/moc_sysbuttons.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/sysbuttons.h -o GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/sysbuttons.h \ @@ -260,14 +260,14 @@ GeneratedFiles/Debug/moc_title.cpp: ../../Libraries/QtStatic/qtbase/include/QtWi SourceFiles/gui/button.h \ SourceFiles/gui/twidget.h \ SourceFiles/title.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/title.h -o GeneratedFiles/Debug/moc_title.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/title.h -o GeneratedFiles/Debug/moc_title.cpp GeneratedFiles/Debug/moc_types.cpp: SourceFiles/types.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ SourceFiles/logs.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/types.h -o GeneratedFiles/Debug/moc_types.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/types.h -o GeneratedFiles/Debug/moc_types.cpp GeneratedFiles/Debug/moc_window.cpp: SourceFiles/title.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ @@ -288,7 +288,7 @@ GeneratedFiles/Debug/moc_window.cpp: SourceFiles/title.h \ SourceFiles/passcodewidget.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/window.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/window.h -o GeneratedFiles/Debug/moc_window.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/window.h -o GeneratedFiles/Debug/moc_window.cpp GeneratedFiles/Debug/moc_mtp.cpp: SourceFiles/mtproto/mtpSession.h \ SourceFiles/mtproto/mtpConnection.h \ @@ -304,7 +304,7 @@ GeneratedFiles/Debug/moc_mtp.cpp: SourceFiles/mtproto/mtpSession.h \ SourceFiles/mtproto/mtpFileLoader.h \ SourceFiles/mtproto/mtpSessionImpl.h \ SourceFiles/mtproto/mtp.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtp.h -o GeneratedFiles/Debug/moc_mtp.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtp.h -o GeneratedFiles/Debug/moc_mtp.cpp GeneratedFiles/Debug/moc_mtpConnection.cpp: SourceFiles/mtproto/mtpCoreTypes.h \ SourceFiles/types.h \ @@ -314,13 +314,13 @@ GeneratedFiles/Debug/moc_mtpConnection.cpp: SourceFiles/mtproto/mtpCoreTypes.h \ SourceFiles/mtproto/mtpPublicRSA.h \ SourceFiles/mtproto/mtpAuthKey.h \ SourceFiles/mtproto/mtpConnection.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpConnection.h -o GeneratedFiles/Debug/moc_mtpConnection.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpConnection.h -o GeneratedFiles/Debug/moc_mtpConnection.cpp GeneratedFiles/Debug/moc_mtpDC.cpp: SourceFiles/mtproto/mtpDC.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpDC.h -o GeneratedFiles/Debug/moc_mtpDC.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpDC.h -o GeneratedFiles/Debug/moc_mtpDC.cpp GeneratedFiles/Debug/moc_mtpFileLoader.cpp: SourceFiles/mtproto/mtpFileLoader.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpFileLoader.h -o GeneratedFiles/Debug/moc_mtpFileLoader.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpFileLoader.h -o GeneratedFiles/Debug/moc_mtpFileLoader.cpp GeneratedFiles/Debug/moc_mtpSession.cpp: SourceFiles/mtproto/mtpConnection.h \ SourceFiles/mtproto/mtpCoreTypes.h \ @@ -333,7 +333,7 @@ GeneratedFiles/Debug/moc_mtpSession.cpp: SourceFiles/mtproto/mtpConnection.h \ SourceFiles/mtproto/mtpDC.h \ SourceFiles/mtproto/mtpRPC.h \ SourceFiles/mtproto/mtpSession.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpSession.h -o GeneratedFiles/Debug/moc_mtpSession.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpSession.h -o GeneratedFiles/Debug/moc_mtpSession.cpp GeneratedFiles/Debug/moc_animation.cpp: SourceFiles/types.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ @@ -341,16 +341,16 @@ GeneratedFiles/Debug/moc_animation.cpp: SourceFiles/types.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/gui/animation.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/animation.h -o GeneratedFiles/Debug/moc_animation.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/animation.h -o GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/twidget.h \ SourceFiles/gui/button.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/button.h -o GeneratedFiles/Debug/moc_button.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/button.h -o GeneratedFiles/Debug/moc_button.cpp GeneratedFiles/Debug/moc_contextmenu.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/contextmenu.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/contextmenu.h -o GeneratedFiles/Debug/moc_contextmenu.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/contextmenu.h -o GeneratedFiles/Debug/moc_contextmenu.cpp GeneratedFiles/Debug/moc_countrycodeinput.cpp: SourceFiles/gui/flatinput.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ @@ -364,7 +364,7 @@ GeneratedFiles/Debug/moc_countrycodeinput.cpp: SourceFiles/gui/flatinput.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/gui/countrycodeinput.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/countrycodeinput.h -o GeneratedFiles/Debug/moc_countrycodeinput.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/countrycodeinput.h -o GeneratedFiles/Debug/moc_countrycodeinput.cpp GeneratedFiles/Debug/moc_countryinput.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/style.h \ @@ -386,7 +386,7 @@ GeneratedFiles/Debug/moc_countryinput.cpp: ../../Libraries/QtStatic/qtbase/inclu SourceFiles/gui/flatcheckbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/gui/countryinput.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/countryinput.h -o GeneratedFiles/Debug/moc_countryinput.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/countryinput.h -o GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp: SourceFiles/gui/button.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ @@ -402,13 +402,13 @@ GeneratedFiles/Debug/moc_flatbutton.cpp: SourceFiles/gui/button.h \ GeneratedFiles/style_classes.h \ GeneratedFiles/style_auto.h \ SourceFiles/gui/flatbutton.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatbutton.h -o GeneratedFiles/Debug/moc_flatbutton.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatbutton.h -o GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp: SourceFiles/gui/button.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/twidget.h \ SourceFiles/gui/flatcheckbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatcheckbox.h -o GeneratedFiles/Debug/moc_flatcheckbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatcheckbox.h -o GeneratedFiles/Debug/moc_flatcheckbox.cpp GeneratedFiles/Debug/moc_flatinput.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ SourceFiles/style.h \ @@ -421,13 +421,13 @@ GeneratedFiles/Debug/moc_flatinput.cpp: ../../Libraries/QtStatic/qtbase/include/ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/gui/flatinput.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatinput.h -o GeneratedFiles/Debug/moc_flatinput.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatinput.h -o GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp: SourceFiles/style.h \ GeneratedFiles/style_classes.h \ GeneratedFiles/style_auto.h \ SourceFiles/gui/flatlabel.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatlabel.h -o GeneratedFiles/Debug/moc_flatlabel.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatlabel.h -o GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QTextEdit \ SourceFiles/style.h \ @@ -440,7 +440,7 @@ GeneratedFiles/Debug/moc_flattextarea.cpp: ../../Libraries/QtStatic/qtbase/inclu ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/gui/flattextarea.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flattextarea.h -o GeneratedFiles/Debug/moc_flattextarea.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flattextarea.h -o GeneratedFiles/Debug/moc_flattextarea.cpp GeneratedFiles/Debug/moc_switcher.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/twidget.h \ @@ -454,7 +454,7 @@ GeneratedFiles/Debug/moc_switcher.cpp: ../../Libraries/QtStatic/qtbase/include/Q ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/gui/switcher.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/switcher.h -o GeneratedFiles/Debug/moc_switcher.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/switcher.h -o GeneratedFiles/Debug/moc_switcher.cpp GeneratedFiles/Debug/moc_phoneinput.cpp: SourceFiles/gui/flatinput.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ @@ -468,47 +468,47 @@ GeneratedFiles/Debug/moc_phoneinput.cpp: SourceFiles/gui/flatinput.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/gui/phoneinput.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/phoneinput.h -o GeneratedFiles/Debug/moc_phoneinput.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/phoneinput.h -o GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QScrollArea \ SourceFiles/style.h \ GeneratedFiles/style_classes.h \ GeneratedFiles/style_auto.h \ SourceFiles/gui/scrollarea.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/scrollarea.h -o GeneratedFiles/Debug/moc_scrollarea.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/scrollarea.h -o GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp: SourceFiles/gui/twidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/twidget.h -o GeneratedFiles/Debug/moc_twidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/twidget.h -o GeneratedFiles/Debug/moc_twidget.cpp GeneratedFiles/Debug/moc_aboutbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/aboutbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/aboutbox.h -o GeneratedFiles/Debug/moc_aboutbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/aboutbox.h -o GeneratedFiles/Debug/moc_aboutbox.cpp GeneratedFiles/Debug/moc_abstractbox.cpp: SourceFiles/layerwidget.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/abstractbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/abstractbox.h -o GeneratedFiles/Debug/moc_abstractbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/abstractbox.h -o GeneratedFiles/Debug/moc_abstractbox.cpp GeneratedFiles/Debug/moc_addcontactbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/addcontactbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/addcontactbox.h -o GeneratedFiles/Debug/moc_addcontactbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/addcontactbox.h -o GeneratedFiles/Debug/moc_addcontactbox.cpp GeneratedFiles/Debug/moc_autolockbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/autolockbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/autolockbox.h -o GeneratedFiles/Debug/moc_autolockbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/autolockbox.h -o GeneratedFiles/Debug/moc_autolockbox.cpp GeneratedFiles/Debug/moc_backgroundbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/backgroundbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/backgroundbox.h -o GeneratedFiles/Debug/moc_backgroundbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/backgroundbox.h -o GeneratedFiles/Debug/moc_backgroundbox.cpp GeneratedFiles/Debug/moc_confirmbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/confirmbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/confirmbox.h -o GeneratedFiles/Debug/moc_confirmbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/confirmbox.h -o GeneratedFiles/Debug/moc_confirmbox.cpp GeneratedFiles/Debug/moc_connectionbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ @@ -525,12 +525,12 @@ GeneratedFiles/Debug/moc_connectionbox.cpp: SourceFiles/boxes/abstractbox.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/boxes/connectionbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/connectionbox.h -o GeneratedFiles/Debug/moc_connectionbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/connectionbox.h -o GeneratedFiles/Debug/moc_connectionbox.cpp GeneratedFiles/Debug/moc_contactsbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/contactsbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/contactsbox.h -o GeneratedFiles/Debug/moc_contactsbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/contactsbox.h -o GeneratedFiles/Debug/moc_contactsbox.cpp GeneratedFiles/Debug/moc_downloadpathbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ @@ -547,50 +547,50 @@ GeneratedFiles/Debug/moc_downloadpathbox.cpp: SourceFiles/boxes/abstractbox.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/boxes/downloadpathbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/downloadpathbox.h -o GeneratedFiles/Debug/moc_downloadpathbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/downloadpathbox.h -o GeneratedFiles/Debug/moc_downloadpathbox.cpp GeneratedFiles/Debug/moc_emojibox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/emojibox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/emojibox.h -o GeneratedFiles/Debug/moc_emojibox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/emojibox.h -o GeneratedFiles/Debug/moc_emojibox.cpp GeneratedFiles/Debug/moc_languagebox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/languagebox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/languagebox.h -o GeneratedFiles/Debug/moc_languagebox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/languagebox.h -o GeneratedFiles/Debug/moc_languagebox.cpp GeneratedFiles/Debug/moc_passcodebox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/passcodebox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/passcodebox.h -o GeneratedFiles/Debug/moc_passcodebox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/passcodebox.h -o GeneratedFiles/Debug/moc_passcodebox.cpp GeneratedFiles/Debug/moc_photocropbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/photocropbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/photocropbox.h -o GeneratedFiles/Debug/moc_photocropbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/photocropbox.h -o GeneratedFiles/Debug/moc_photocropbox.cpp GeneratedFiles/Debug/moc_photosendbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/localimageloader.h \ SourceFiles/boxes/photosendbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/photosendbox.h -o GeneratedFiles/Debug/moc_photosendbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/photosendbox.h -o GeneratedFiles/Debug/moc_photosendbox.cpp GeneratedFiles/Debug/moc_sessionsbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/localimageloader.h \ SourceFiles/boxes/sessionsbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/sessionsbox.h -o GeneratedFiles/Debug/moc_sessionsbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/sessionsbox.h -o GeneratedFiles/Debug/moc_sessionsbox.cpp GeneratedFiles/Debug/moc_stickersetbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/localimageloader.h \ SourceFiles/boxes/stickersetbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/stickersetbox.h -o GeneratedFiles/Debug/moc_stickersetbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/stickersetbox.h -o GeneratedFiles/Debug/moc_stickersetbox.cpp GeneratedFiles/Debug/moc_usernamebox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/usernamebox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/usernamebox.h -o GeneratedFiles/Debug/moc_usernamebox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/usernamebox.h -o GeneratedFiles/Debug/moc_usernamebox.cpp GeneratedFiles/Debug/moc_intro.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/flatbutton.h \ @@ -607,7 +607,7 @@ GeneratedFiles/Debug/moc_intro.cpp: ../../Libraries/QtStatic/qtbase/include/QtWi GeneratedFiles/style_classes.h \ GeneratedFiles/style_auto.h \ SourceFiles/intro/intro.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/intro.h -o GeneratedFiles/Debug/moc_intro.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/intro.h -o GeneratedFiles/Debug/moc_intro.cpp GeneratedFiles/Debug/moc_introcode.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/flatbutton.h \ @@ -627,7 +627,7 @@ GeneratedFiles/Debug/moc_introcode.cpp: ../../Libraries/QtStatic/qtbase/include/ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ SourceFiles/intro/intro.h \ SourceFiles/intro/introcode.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/introcode.h -o GeneratedFiles/Debug/moc_introcode.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/introcode.h -o GeneratedFiles/Debug/moc_introcode.cpp GeneratedFiles/Debug/moc_introphone.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/flatbutton.h \ @@ -653,7 +653,7 @@ GeneratedFiles/Debug/moc_introphone.cpp: ../../Libraries/QtStatic/qtbase/include SourceFiles/gui/boxshadow.h \ SourceFiles/intro/intro.h \ SourceFiles/intro/introphone.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/introphone.h -o GeneratedFiles/Debug/moc_introphone.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/introphone.h -o GeneratedFiles/Debug/moc_introphone.cpp GeneratedFiles/Debug/moc_intropwdcheck.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/flatbutton.h \ @@ -679,7 +679,7 @@ GeneratedFiles/Debug/moc_intropwdcheck.cpp: ../../Libraries/QtStatic/qtbase/incl SourceFiles/gui/boxshadow.h \ SourceFiles/intro/intro.h \ SourceFiles/intro/intropwdcheck.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/intropwdcheck.h -o GeneratedFiles/Debug/moc_intropwdcheck.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/intropwdcheck.h -o GeneratedFiles/Debug/moc_intropwdcheck.cpp GeneratedFiles/Debug/moc_introsignup.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/flatbutton.h \ @@ -699,10 +699,10 @@ GeneratedFiles/Debug/moc_introsignup.cpp: ../../Libraries/QtStatic/qtbase/includ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ SourceFiles/intro/intro.h \ SourceFiles/intro/introsignup.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/introsignup.h -o GeneratedFiles/Debug/moc_introsignup.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/introsignup.h -o GeneratedFiles/Debug/moc_introsignup.cpp GeneratedFiles/Debug/moc_pspecific_mac.cpp: SourceFiles/pspecific_mac.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/pspecific_mac.h -o GeneratedFiles/Debug/moc_pspecific_mac.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/pspecific_mac.h -o GeneratedFiles/Debug/moc_pspecific_mac.cpp compiler_moc_source_make_all: compiler_moc_source_clean: diff --git a/XCODE.md b/XCODE.md index 23d2ca40b..a7db5bee2 100644 --- a/XCODE.md +++ b/XCODE.md @@ -1,4 +1,4 @@ -##Build instructions for Xcode 6.3.1 +##Build instructions for Xcode 6.4 ###Prepare folder @@ -136,26 +136,26 @@ Then in Terminal go to **/Users/user/TBuild/Libraries/ffmpeg-2.6.3** and run make sudo make install -####Qt 5.4.0, slightly patched +####Qt 5.5.0, slightly patched -http://download.qt-project.org/official_releases/qt/5.4/5.4.0/single/qt-everywhere-opensource-src-5.4.0.tar.gz +http://download.qt-project.org/official_releases/qt/5.5/5.5.0/single/qt-everywhere-opensource-src-5.5.0.tar.gz -Extract to **/Users/user/TBuild/Libraries**, rename **qt-everywhere-opensource-src-5.4.0** to **QtStatic** to have **/Users/user/TBuild/Libraries/QtStatic/qtbase** folder +Extract to **/Users/user/TBuild/Libraries**, rename **qt-everywhere-opensource-src-5.5.0** to **QtStatic** to have **/Users/user/TBuild/Libraries/QtStatic/qtbase** folder Apply patch: -* OR copy (with overwrite!) everything from **/Users/user/TBuild/tdesktop/\_qt\_5\_4\_0\_patch/** to **/Users/user/TBuild/Libraries/QtStatic/** -* OR copy **/Users/user/TBuild/tdesktop/\_qt\_5\_4\_0\_patch.diff** to **/Users/user/TBuild/Libraries/QtStatic/**, go there in Terminal and run +* OR copy (with overwrite!) everything from **/Users/user/TBuild/tdesktop/\_qt\_5\_5\_0\_patch/** to **/Users/user/TBuild/Libraries/QtStatic/** +* OR copy **/Users/user/TBuild/tdesktop/\_qt\_5\_5\_0\_patch.diff** to **/Users/user/TBuild/Libraries/QtStatic/**, go there in Terminal and run - git apply _qt_5_4_0_patch.diff + git apply _qt_5_5_0_patch.diff #####Building library In Terminal go to **/Users/user/TBuild/Libraries/QtStatic** and there run - ./configure -debug-and-release -opensource -confirm-license -static -opengl desktop -nomake examples -nomake tests -platform macx-clang - make -j4 module-qtbase module-qtimageformats module-qtmultimedia - sudo make module-qtbase-install_subtargets module-qtimageformats-install_subtargets module-qtmultimedia-install_subtargets + ./configure -debug-and-release -opensource -confirm-license -static -opengl desktop -no-openssl -securetransport -nomake examples -nomake tests -platform macx-clang + make -j4 module-qtbase module-qtimageformats + sudo make module-qtbase-install_subtargets module-qtimageformats-install_subtargets building (**make** command) will take really long time. @@ -167,4 +167,4 @@ building (**make** command) will take really long time. * Open MetaLang.xcodeproj and build for Debug (Release optionally) * Open Telegram.xcodeproj and build for Debug * Build Updater target as well, it is required for Telegram relaunch -* Release Telegram build will require removing **CUSTOM_API_ID** definition in Telegram target settings (Apple LLVM 5.1 - Custom Compiler Flags > Other C / C++ Flags > Release) +* Release Telegram build will require removing **CUSTOM_API_ID** definition in Telegram target settings (Apple LLVM 6.1 - Custom Compiler Flags > Other C / C++ Flags > Release) From 5b9cdbd98a84b485b3561c5f2ea589e4e13069c3 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 14 Jul 2015 22:07:21 +0300 Subject: [PATCH 047/121] dev version 0.8.39 - Qt 5.5.0, repeat button in audio play --- Telegram/PrepareWin.bat | 10 +++---- Telegram/Resources/style.txt | 1 + Telegram/SourceFiles/application.cpp | 4 +-- Telegram/SourceFiles/art/sprite.png | Bin 171109 -> 171310 bytes Telegram/SourceFiles/art/sprite_200x.png | Bin 224769 -> 225082 bytes Telegram/SourceFiles/audio.cpp | 30 +++++++++++++------- Telegram/SourceFiles/config.h | 6 ++-- Telegram/SourceFiles/playerwidget.cpp | 29 +++++++++++++------ Telegram/SourceFiles/playerwidget.h | 4 ++- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 ++++---- Telegram/Version.sh | 2 +- 13 files changed, 62 insertions(+), 38 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index 7e4e156f6..b0eee4e0f 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,11 +1,11 @@ @echo OFF set "AppVersionStrMajor=0.8" -set "AppVersion=8038" -set "AppVersionStrSmall=0.8.38" -set "AppVersionStr=0.8.38" -set "AppVersionStrFull=0.8.38.0" -set "DevChannel=0" +set "AppVersion=8039" +set "AppVersionStrSmall=0.8.39" +set "AppVersionStr=0.8.39" +set "AppVersionStrFull=0.8.39.0" +set "DevChannel=1" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index 859f3d1f5..e2658c14c 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -1989,6 +1989,7 @@ playerNext: sprite(374px, 151px, 22px, 14px); playerPrev: sprite(374px, 165px, 22px, 14px); playerClose: sprite(361px, 97px, 12px, 12px); playerFull: sprite(365px, 109px, 12px, 12px); +playerRepeat: sprite(365px, 121px, 12px, 14px); playerVolume: sprite(352px, 179px, 44px, 12px); playerInactiveOpacity: 0.8; playerUnavailableOpacity: 0.3; diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index 1d75d7824..76e8a4bc1 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -654,8 +654,8 @@ void Application::checkMapVersion() { psRegisterCustomScheme(); if (Local::oldMapVersion()) { QString versionFeatures; - if (DevChannel && Local::oldMapVersion() < 8037) { - versionFeatures = lang(lng_new_version_text);// QString::fromUtf8("\xe2\x80\x94 Forward photos, media and stickers with drag-n-drop\n\xe2\x80\x94 Drag-n-drop text messages by timestamp to forward them\n\xe2\x80\x94 Larger stickers panel");// .replace('@', qsl("@") + QChar(0x200D)); + if (DevChannel && Local::oldMapVersion() < 8039) { + versionFeatures = QString::fromUtf8("\xe2\x80\x94 Moved to Qt 5.5\n\xe2\x80\x94 Some bugfixes and optimizations\n\xe2\x80\x94 In OS X 10.10.3 location marks sent from mobile should be displayed now");// .replace('@', qsl("@") + QChar(0x200D)); } else if (!DevChannel && Local::oldMapVersion() < 8038) { versionFeatures = lang(lng_new_version_text).trimmed(); } diff --git a/Telegram/SourceFiles/art/sprite.png b/Telegram/SourceFiles/art/sprite.png index fe2c98bc2c48cea53269a939c7b9d1395a54e9b6..648101a311ff6ef50e8f30d95a451a7b5e7aad05 100644 GIT binary patch delta 50328 zcma&NWn5I<7dCtbh7yqOPEm$#K}u3U1eA~*x>HKx&>;;Etb?7h$0YhCMF*IH|MP}cMyUKDMbu<~giIxe5!Ykt0`f_zT}gp=^# z;{VroP53ibeqml=K_PP_mzb!SD3_oquO*kLrKu^GsfeJch!{UoKn!VFT@BZP|3BTC z#EtXx;s5WEoV)@_O;|sxr5|+M(eum82?-1H^9#xd@$tzEiOS0gCxx=ri){f;MQw8=H_(Iv}6|3!jmq0}n_7Kyx%DI3c>U zZF4WS2_P*JU5!CJJu>S;pvoG#Nr!Hh92n&NZVo-EB;`BP)Ey?2-5!QCH1$sPy9B>i`0xIY}jte~ngaD7fv40bIlLK6$%iB@cIdGYeK!6hK6DDP1 z+CCV7ARi>sSCn!+>H#V4WxsO4(7GN}!%8qK;L@}})E@6sqL5KBb|68G^D*qu4e$Y4 z2$rTJunR6*dzHTR!!w>HV=@v*V+N1{FEZY|I%wvWl0*uKPpuKN8cjcYl@!6E|b4GmVfoN2~KAJQ5IDmsjW;3k#a{6J?UOcP; zt>X%4gC9N#NIv?E`~|E7y4WV%0nEVoVZpFt!!MX9MlNxO%&d!j%c-bN)geZL(z_`+ zwiprmrUdMw$85iMx~7C=4MRzFfXkQ|!BYS;7?D#uzzUlKO!xveV7~MNAw(EUj{t7; zilHK9I7ssVz_sslsB?1%JZ7I9xWSPL)`Evu8#%^^1SQn=XFfb!=7h~MI&lwCr7&bF z3wzSm7-w0-znz4B!>e;U@fd|WC(nhe43>qF7`X){tbS+qnC0o??lnWoR>#LGV;IDd zr$Xvesj9u=kCVmJ2FaSAYlKaR`&W&d@ZFw|gHi2b|MupTRxx1200GcI1&E-Zx(a#gNw|LY^;XVei1=^bv}jMT z?WAwk=pGtqVId73+oqG6QI7g%!QW4N*E8Rk(2tAu5kR3Wna=L!(DbYe&(_4u+LN3t zcH4Fl=yye+J2#hh$RkhZKf@YkJ!oMSR2}UAW!E11ML2?$7^kYLijaf^JwXYc^)fs= zoBrLqchS0a<(*l`R72x=*9}+o4N!rZXS({_nJq^8C+W)tdFIN^fgIG;uo2B;JSKdr zs>7nd=#L0Wf##jNll$hm@&8T96p+AQGMJ495!cyeN-T--rWyEiPQ`!P!+iqTh;fQuW<3aEbUt2He&^|_Z{^QSRHT{~6cPeo zU0=_ys}r^!#j~n%rXvNj29V6@1qyZvvkKG|cGPHk05JL2@~nw>o7h9mj4R+#-`nm6 z@(vq)8B>-^aTTmX{(u#L8+#*YeSKY)m3aAdYy4pq07Uf!X?=Mq^JSb#K!8Nk#^lBL z@l-aC-hUPvEKeTTPePdHJSnK~f?UVXPh;S}*Gz?|!j>}v^+*bJ6&kgGcsfd;U8aEm^9Tu z#-=ttn2B|jU`>wtNkT|1@bOEx9tqXAZzD5!YxddH56zip#%ogFu1oaC$yFcf7{$k1 zW^}qy&SN-&Ad+Y5ZG+d>*f8a71>io!-NmZqUrNP$k9nAhz9?CAk&P~bJg$9K5{7-XT9t#W_?fM8AB{ zk<D%l!}SALLe@(C7}I4dA-ElXf??t1_53n$8ma zSq8hcC#mu#c@tr`6q9N$B=}&!MDh01kU(5VMMbQSFW4U7;<{}A`NjnMP5J$E|-Ev84O!j z9z|vS=L_PGv~)$-vFxx!I!`2SASagtE_u`I7qssO%0 zl`~!x+zq51%DNOWPx{h%H8nNkQ&S@n6NzhTYdg*PWxl;;hRh8vliSqvUM@j+9)FjG zY8RuFSu}+7VXp3aO+ALAxXmks+xv!5XOW6H^9lkY4Pa8OQw14=Plh0TTbc~&wZ1P-&K{<4Nd7yfqUrBC>?^J?(jbIr_W`|Cf3SP^Vq+cH2dC{@{t-#Sfk4Q) zy7EI?L)V@*Z29`lo4opZ&n{uj3d^g!KjgBdks*oE){Un1fd9rRT(vM1T} z8{xsw;L+cEkeXkyyXi}rNHu8eEwbT^Je0qAi2J*Eb}@N5NrR}uaKN+y&W}|X*s0PS zVeaMH9J>k<%89h{8WJ*ud9MUS^=G2OKU>o&pcTpk=Qw_yPMgT#wK2kewGo_;bA{IU z+Fov+=0wql>u7LQ_$4n+X}D1Tcj5jxHY_YG{Hv=geOPW$(fZ%7Upe%!BOX(C(6I0+ z_jET6>IK}#cc;_yVSzG3wMd#@p)$`7<3vp+q=*;Q`_UQ5`{g2zccv$KJ6sGnX47Hu zV#Hn37Bm0`JnY@h4p|FI>gwrHG30*TaCkc%8z+Sl9UGTt0B>E0OK$X&(Y=_k-yEOr?C8v6l{cYJ8uSG&>CO7#3yZ}FH>xYTTKSo7m|cN9^xl>ygMHa{SBf*Zw<>+vr9Maf z)fx0RriL$gbIb&(J-<(E=i+Tb?vtHlAp6{dTes@D*sE@pOpZiW@7d)jK?Pc;C$D(E zl_T8?$Ot7`V0It%;||x@glK(FhDCI=NYA*{#`&ifDZ{n|GKM*I$_%{wjlJKNdNj&0 zUrB+U0*|vdu--kL_d7Z|`f~e+ml!$U%uhE-$hl$cHY_wx-=B{yEf#=lP!21Ero@j)FWFJj z2-_<~#>L&^D<_`d1of|Zw`H$1Ja27n9RX}`KPs^fswO<@BA>WEKVWC0emj@pY`zKxh!~ZsDVr+ zSW<-47R~?BUuNU ziAhM*?@n^=4Ty(O$MpvcoUUw9#v_-t1?>?(UT5mE-!JW_lrw0&OjTmXmEsNPCrVAQD>mK}hZbyqhe`7pVq6bzNwYK^_7(Ka>XCAxH_B)?BH91S!#}N)TO2}L zsEhXd;fBL5T#COn@zOZKn7{sw;{E`<;2J#`jV*;{DM z*zjK1FkQ#xX<=l-?kfE@FoUoV&QQS#!hUx|GiBhW22S-cfWB=p97QuP<3bS0Ep7f2 zM(R>+(B&=AVAh@NW-@Qy$Ql#ibyeT{~ za5vf~u%F)Y&7_GJ&4m}Rn=cd*t?P75tpvvm#`&l6d>8&?xq`eNxgF{B~TB)Zqh2!Ov7Pkr8QqMyt z7sI{U(uH_Z+R@0+u~nLObw@#^j&7b+dHwpAtSb!8h2T>pM4eGA{BNRzYLM#`w}IOQ z&PrB@6KpaV99|WaZGb^+KJc%>6VG1?4&8VILvxL88;}X>u#w6yC#rCZX&M>%hvajl zZ+Hi>DhCzWG?kR>_W%6E8Ak~3bb^+34msQP*?!Z81RS}#s;MjH=-Mty$?x&#m)>6) z@~3w0hg>pe`j(8qKty)_nczEcm#KVyV?qC$%0llTTBE- zpNsJ;QujfKCOGg=JG$N}PthQC$Aw1WJ86GA1En(bChb6^Zc*ED2dwjEXtIx+7Gk!XuW;$Bw-X~`Y6UEK|W-eMwgEME73#sp%T677j3BP9dDqaCyGKR zThs;Z(aX%GQL&B87ug$)(DH|COI@H8nnORWJ&?fX?;GGByDTR$fQ?3J?j?u^>c09? znJaH4(;a}}5RAuR`kKO}2uP*b4mWr=CZDr;c0GgF-C|Rz+vHF^r5%Pe`fXb)pbbq} ziqIRv?BYJ}-#h;EM!5wsUOOB&iN@YkG&WxKHZ(L;B_xL4d8%{QlLQKynwfb<$T73Y z5JqWgX%!3qcO+s&7QEh_tb@ZDTF?-7kgj>9E;qOoi1jvDuWk{cdmrg2Ei!9b*)oti zG%s9QIbq7z{(0PW|g{L zVaQ7;(;pOB^c8SA-<@HTVZ@#OdEHvNYqYoK8RMAVnka)0c2$a0)}Zf>0181%ivKl&B*oh;bYJ(mAVjJ>9O! zVL?mW{_|0w+Q}hCL5>CQ!-BcIk1@j;B0A%Oh8?^^Tl@R_h38odr1D&~d#C;r-d{W` zj(%N%*tTF=t{2!hsjeK2pkyKlNR#xt-i2Nm5#-mlWU@D|c-k&aJE72Pg%ycV(sjEO zJzw%>j<(i)P8BVc&j{e+*6dJi4$<{+BJloeq>H-@UfE3*{$ed< zd|s|%ajFP#*#k#?^~bl9_(s#(IP$b{&L3DZlCmfVTg@2^x*jvm(J!hs5Y#aLYa)qWjs&$oKwT9M_{Se-|J*webl zWF;Vbr~0FRivGhwQ<)(-SF&Y|>*?H5Lb&26lCJ!4xjL*W!lk|d?gXXePU=&a#xHK2 ziF5!8XNgwV%{*1{GF<{-my!a%@7)J~5-`BC!>a{Fb3V5YIkRN5>OS1$tJ)N(di6nh z=tcZem#Uby`G7{^YCDz2OW0V=#Bd;Os}7i25yE7`K^f+a*%6GU2bath=PAP){3L?y z`WLWAJ7iUGOqY$1M62UZsN=7L+#6-ID{o6~LP(6`jT&te9$r2NngB7YZg$=ewi#E1 zDwWZ@B#$hNw*uiIU!~C{VzE=Ob6NqQ;bcVI7~}B!>{elTXl-O>ve3{#SL}V~Hn>)g zsXb20z&@b}M4(m7Xe(SYM~6~gJwbg<3h5onQyC3n4UqkWEwak#@+KQ?qi8_k_Gs6B zGLT7$uwb@mpo05W8~geC;nDT=n{HcQ@H)DkX}}Q6-D-wqSd89!5w$YN@Qhx0?_$HJ z%u|0sS~dp$v>!`6I+DUZNC*%000jQ>esjeL*sH7RWa!c*-p}esMQ&2jL%u*aTQToN z^kCIm0|(~=3d^5FTn}T9l$`j@e5zps4~}$Owy)5T(NfrNJNuVuZGX`4;aSCB=y>pc zWCG&4sJE_Kco}1?bq%c-Zh6B83m8r2UTJfIyF^}Bx8 zpTjq~${61hfn(O_M_AwY#g+cou;mGR?26?>XeMmp{pID1l*nRC^*8N)D&~EB4K}4; z6%a5JXfWhL+fe!V3&3E`L?~;mj1KIgHw~Cy7b~$|$DA~p3_Khwo>pFg0V1>5-4ZV* zIO>Rc+mUMWyF$iMoXBY{l~^%lUfN$~CSy*fL_BORM(Ly!=DN?o%n$!q3p8U-zo^H}2rT&D?EThvZ0spFJacM2)7~nrU)a8Q z=o^SoNDzvZ;Us%l`V}&X+A~=E+Bcb!R{HtXUW>> zDxDK4Umqx669N9H5#{3^)L8zV$uXoFAN@WJrC-o#BNR;a4KC`aiv1jqkwm(XR}fC& z)PCpjSZ$o`p#5I5{r#D3Im@-rL2I863;u}OhBG@JSSuO3;`JeaH_EA{7@>1QuKd&k z<7mJATV&_!easUR{6jOsu2lg*5gAkC^0*W^O02%!*zwAypcZo-LtBcgD5B7X z2xOqLVjrxnm}bXD3G*VwAcx^pga$Y)o;9{|a>Sd$6_77WC1vSq75Lb| zD*j;bw*{fr>U4eT+c<{5F-mXb0{c>l71|E(LNJSU%Gp~I!UXi@-i@nuXE%ENCcGV! z+uhL|34hdOLWxNpg@MV;tFC)P}>yKF(64VeW!GZQ^>yl&Bm4*x9KJW5#vG=ryE580D&pn1fI`#bmQ zc(gcX{28rKV--LSmr$Y?+i{y1;!*_&1!@bFd_xWbf6Tldo3;`w99y@vjtm8&9Uc{a zOUP%Zn5=`|a>1=@czfW& z7Ck-owZ@Vz_{Qp6*GEJ^lhLztPs#*p5)6}}H$FYqP|8V4PX2GY(u`#Pxd(fUNmA&1 z^lD4nQqzdZ{d^Wn7*a%t?a?D2zp}fxFr+f6Hy{i&Ob(CQ)R{2_+=w{N)sUqyox(^s zDN112I6%mbsmvei*V&85Vb74h-d3a8cf}BJt{cq~*Lh|&l9`fs3L~X$a2fBZcrQ6K@Q*AbEWz=nZQSAh z{=?pd9gMa%WemE5v(G@$Va!^vLQ~e%vzY#3=vCr>vH!PprMWmd+oWm*jL9yX8Y{4MHUcu1nTdfITAy6P%s zIhu{1(sTynlcf@{G_V<$Y=UYg?fnc$#Nc*jzjZ`QXJ;p;8oO5WfcZ8xC8h3aFoGT3 zYf6E<9OCQFEk(@v;5(D0dvEI<_l8rr&S5O9WrWMw2hB%6EB7n5z3+<|Lb7vZj*%yU zvHcu|y4GrWypStTd3O$DSBI)2%;Ms+Gk*m0RA2gAQ@U{bNsifA`q9a2JSLTA>l*#x zTy_iE8tCw z`uW^APkcGMEGq+dOEqYtoHEXoJ`l4+*F8&9aIHQ`{{dkvrlbLQ)u9Y|HyghCI>*fr z55#MWiHY@(jw;H?z@UeI$j@h1%@D?ioH4_1ZnWF*9#ij8WpPm>Lqo#@-Za9HnJtla z;(xq&EAdvs8F61efBqwWXYT?2zBV_iiE0G6F<)UV?IYX%&ez@W)D5`JE*d}?BlABQ zw=+3vqk%3uWORB=#Bu;75wDO@*d86N|M8ngWvCkZoHrMyB@#*JLOaeSQ$Znwa;hEIs1@(-J#${7*H~!+gm8w$w>9;ci+dq!l-_u27bGp5Lr8M_R zkU0$jh3FP~)W2kX$24$|cZkT?<@4_6PUwSEo{WUUA2(DkO9Fz}H2<}TQO(jwNGivK zGv=*H|6y2aYN}}V#=Z4DSgCv45ltoVAPWVGlr-n*)xO;m=vWv?dbDDljw(n}-U-~_ zcMO+kHEPeOg~^tp>e2Bxoc}`_Wtg?V<4_*-73GTsF91X$~pO{Qv}Nx zSD_Iqj@kQz{wReY#AoTMMlEG#U< z4c0z=`qV>CN@`zI>dldb%_7Cbl=stKxV?{e$VyPHyqYKE5j(qo$%O5cqN3t~vzFY= z{s23;(C1EPHs4fx9vMAPo4iq$)5z^%Wfd;08@|H<8i*%nC9S}MHsUGNkhY0vH#azQ z6|FQB_g`QP+NaE3Fq+Zc6d`Kb9U&H@7h$s^G&RDNx`?l3W#s*)q)U$El#!SJEiiN7 z`Qs$Hs{*$FEKBPrtAf z+lpn=tjvyF^1`OUmU3_TmvU**lZTCCq`GoQFb6}teW!QO;_mWIZV-WjgeIH4g1-zp^vy3#7bHVZkPjC(AoCYp=M z5Wes{{!c#vFe)D-yb*)cI6=8y*#~4%JrBKU`x-xC*=c_E0$w<22SLS)GVn0Z`-iw5 z^}qQu&W(Wq?EZf#btgv9!iW|8MBQ~`v9NU`gQH@*a7r=i_cuEi2PZC1y5tap8klQh z)U7zpv(aX090Me}(FtjIdM&30d2vQMGDzwDwa@|oX(p8kAJ;&74oha6j@LlBc=90`oL4iO$kw4- z-}(fbB}UNrGv8ZtBBp6{6Z(<`wL+G7x1^|+gf0p_uX&<<+o@$Duy^47ZqavHGW;~v zXenB}k%btCn5Pjv`4wikx+|mb{32Yf+se%p+P)h%xnptdNx^y>yrNEMMf=kQ6~}XW zA~REh@G4Q<^Y_;SkY^7gD;V`yR5w@+O+;iWckiuBdLHpSMAxMs;p%km_)JOd^EYOC zGPj#etb2;Tsa65pbrfKJ_LkgnodXah>hFO_A)KrI#h{=dm!oJCh|nS?0kQ>SK3q@w z0k1x0wCOV9azb?`{U(={qH^SX%Y`Q(MH80V-n~tCb_PWl6^CFE>>xmGJlBR=^V?#j z@*Nv)d3soLEXt2n5L+4GGbL81qf1M!EHw&$PZ!PsK0z3}h4X?Gg!}0V8jjbdfrz<( zlDZ-b3;#VK!1dL1S^I>?y`K!n;4aYLl~lwxONZQ5B;*$eox|%uPkTV!{1*Q*AK4K2 z7{Xg$gJqxKDAKq|m84a{v9W!A6ZUtNCc9vE4A&i*8U z_u4WXTopbvJG>2QH-|h}Ina>dOwSRuXjgOJh}9vMkZU1mO@&ZOT*@fsM{B!Rje8g+ zWvdXR38O|@-7lgoDF7VpTYbZ#@a37e)w|>53;mcmmk$jxw!Ey}-QAT^CuZ=3cDmQ& zB~~u+)0n{C$TxaOhnF}1%R3QzVA&3N9%Gc$qTAg{1ff^@JIA?(E$UlJr3#YC`9&w# zSL1p|hw@=};i)2xIlyjxTn4BwgOJ3E^Ls^gz80xic-N8_ql(N*Gda44Ai=-ep^nMq zwh{)pxKKH2zIE^B`Q>V9r(XgRs`hf_r4O9DZVuYpRiAu9g)v50kjj4pDZ|7@T;{-x z^mO5Q@cwSw`Iq3X9W}scO-?Tq69+-SceGNLbIqe3CeV)UJL1Uqw#F0p>I2!4A-#+^ z(h4MAsF0`9T}zdvE`*iK3H7sN!GI+7OT%dLuq5$Wx|YTf`gSG(j?vUJVcr`Heb70_Vrum@F=WH0Fq$FsSSmye$3&tA8tp!p4hhiBa zD=jTegTjH-hPOXVIZ+ugSVsh}Y;J2q4S&=6f>~4FC46bT@p0S-Cjd=X5tqdkted^eV3WBE{#iDur+WOeqJMVpgF5evMrC*i zgXGm}(y*Y~VlS_1@R+qh_4~7JL*Q`EZScC!IaBJ7I5dWv}*EBaSrUR*nR%Zsf{9hu-M};zm3jt|Dxo87! z@L%<)B!n|L%m4Uz2}}LRJX&c#4+g90O7@Ip)!ybXcZ_g6-)V zq#*1?M|lP@<+C;-dF=(f1Oi}EQN!rco}MDqG&FhI#poX-RWwLnKOw8Cu1CQa<%mB37EqBiSaD<gFUWaX4ue7%vFin1R_gBdN1Fbxt`$MBEKy<9Z{OW2FECTu;A0KPQ=j1RDr?p`hkae{4wK(h*JWPixbu}d) z<*3Y)U=H$L8h0~l=CdtRK3K)kb%-{TB?k@{KCI^Y++rU_doKEUCabdFzyZi6sjaG@ z%F?i1S)=7J1b5tsiHWyitD=IoiJ4*vJ8Dlpfs$MhcL~V{vKAtkq=(VkQD^09?Uy|~ zr)8g!#_g2(#D~6M#ln~7W|}u|-t>=*^#1v#B{Tl6gCD9`ztYo-{Qmt3$EQi9h0f$H zb-c`Q=0Xw|iTE$1%TNaA>)YGP-cYO@m1Ij^`L6=^-VAoQQOSx6=pHpLDM+Q86OoaD zwMqFLpJwchs%+;xnI*pT5ECrp@UHshl(C->XUr z_R_ciF3*YO`_s()t0Jx`L07ZzN9GJ`T;PK6)S37phIj5Qa=GW?EdUi0_!h z$P=Gyh>6iFC2CktpiepM{3!pjQz5GNA>E(FNFq-mOD{x%3?G+9J8HfadrV;hzdLgdrts%dN0K zBj;@HX#iH@fdZ(ISb5SY9iNz}`DMbE!6l^_1MLZD))y<*Km1bA#>U17bW7giK~lnQ z(TJ*~I=YUOlC&r*;xETFxbm@u@DPMtDNO3}p)`8HBqcvnrw?Z$445rfa*Gd=CO5;K zU2mohLoT$O|Fsiwm~T20^E6+!Epui1BqXbbQlds>;==!{>CFE9>-Zrqu04izfK6hw z4|JuS!Z6WMQ5npD6h($+M`e&Q4$69=og5e#fN`1boV`DkAgI*E19&rrAI5aeIz3l? z4f}ZJu50#vG%Dof4`+#0QeI^?40JS7SiA&9toad60MBza-<}PJhpzu~3UdpQ1oo`V z@jcVId3npIl9G~MyYkj^mkjZ}x8SV8vwHJoWppB2{u(6}6+8Ih7w0Ehc6OYq>?A)- z`5;l8!rfJ1S%?8aE>l%{78X8z-F??fD%pr)m7_}_>yK7(e z7YfoVXnNRCJ-i%Vm6S#~tcgoGJ18WF4hP~5d64et28SdoHnH{_;wPAC2 zH{|6Pba{>L-`tRS!Inxw9gN#!LU@5Cd4K}eU|`)vwEPChiJk1;{d{zr2*0&dkIU7I z=KHL<{m*gE*EwE5!?C|SgDMhglHF=+dkBqiyOjsg#;Sh2e*Bk1~_ zSlIA7(o+y?9Slm-j?J24xO+D8=o()ZjeCpm!xOJ4jvxoj|ybS6F$Z(b;ND% z?S;NA#Z*pIQdhr7R~n|-!s{y)rVQ!qq;@LQw*DEwhfM%7eZo-1vxmYP79biczAV_S zH8aVv4?;32D-F^!S^zse6acJkY+!>`5wWofuCB)w=FvY&Cu0+Ki@%~f7ykMPTaf^4 z^QhUmCrk9k0f1E*^~1j`FAwSc{CW5B=g*&Mtq2|mBH)|vo zR9WkPChqO}g-ntP#>K@2*=4*EtCBjy>>J=IHvdAP(94@B+41*1XFwbN8aiHd{HVBQ zu6FT3Tuh81J9$*j&1#amfA@)RuoCNA5EJ;%RDvz^AmkBXp~uR`*68kjMq#$By@SIu zgCbMve&z^2%y}iX`r~^^yww>u0)clW;FV2qB@nw9zja2{t@j!aZZ}zCGu`5SV*lyI z8Lis54y+$Zx!y2ij~f5}rdX0pGA$Bg!IuSU_jzKkX(Cm%zHbR*L( zcGj7Jwl9#?k4LN;5d{fvg!Vi) z1L-=lx*idxdEMV#?A2j(vaf~6Pc8Cfh*dLkzo1T%9h0L4WsWsJ5Q_E0E-9z8YS9X4 zWi!ADVxWEiGw+v!RhyNmF@C|+rPpWerDPrnPno2o7+w?-$Hc@~+uBlVzjU&y!VXn^ z8gk$iG9h5i6|liB?Lz~*C7%3PhX$8JIJO;BrheSr#ru$KuF0AuuPG;iA-jFYokG_M zC&EC}cxhDv2IFH$Bf>O^f~DGSi72yo)NA^~{(xY2$;n?GyQU zmx42cbVd@Hgvi{@Z~T?;xVD;}A=j_BNI%1~_oPq?3-z?f z{#u34s{Ewb$2imh_*Om}zJ*EP?HGNGmpM$Nem1S9DKh_VyrF#4hrx$Wjh;qFbv&O+ zP)07)jA|H9YcRdxm}lX(CO`ili<{`Dy&On?Ro$k&of>SCC<<7B+o9>R#-R zsSh^kCNknNnxO9Nj481JuMO(_bd|Tg*4Z)dD zyY6o+TPts86#YG(67QhOn)j=SJChE0K(zSx6+BJDBsSCi%w*c?DnuPo)*rUFX($of z+fzM3;SpHQP2cQXG!5Pv8`QJ}A!k?vq-AB%Ao<4%2K>&da_s6@g@l^boi4Vv6z*&-+C>;l8W7vo7U;x;A&Ke_x<0=VD4UT>H*W z_;$;9_9eaed{tV}S8iSO?x#xKu?3285A~ubAL^MzbGBe=JLNyFD06xj>Ovy|gLI1C z!oy0=DP)914J!$10|ZWgT^(M$);w<|eqkUR{F(VKi{pb*ynJN&`_&$T1E0e!PZblx z7XmXekAC!gF=i~< z{I*g{XOkFFXz`De-tVZpP@!Ne+-h>(l{K+#{6Cu!mk~|qC4_nrl9%%r7d$RIZNwhm ze#f;k&e!Y*m%LC6@PKIe+H5g*>O{p_^UCbP4Crx*>I2)3c?9oPeo;ku|D@0h!9`9Z zfr=Rqb97ydC0St5ME{Tq0}pK)$3(oujw>kVl5(X*9QD+g`ICWSqG-;)NYY=gpAJ@? zNsM|P($;sI|7yRuYo{+KwEY>DNIcdp<#%YHshTA~UxU*w_%JadGEs%cXSIim%~oxc z0)#S;XTxTC^vw!KkO~M>j=D~3uWW~Uc>c~a13}I&#d37R`sP%`GE5_ttHe+CIa^<^ zuU33Q!2XpKDDC6~_hr_)a1U8q?$(I!=v}8A^b;c<*Cas+;eVR%BhvP5=l8AuV)*^k zcHHhnu?|UFO`Otc;`OkW6RE;L0Z*PXvj_7z732qrO_LnK%}~!c-}~oV^*2)Q9SutO zJkD)Y%!&E<6JO7I2QcDjdZ01~M$sjd6623LOx`DM)1=AyI$E`Rv~eOYnejnzfH@PV zn`*BjjOHpwEA0fSMvy^ZcbVX&`@Ccj)_+)_mQ-oO9bD1tu^r~V_qkJnT&U|8t$)L& zj=BLA8QC4Td?cwqJ}L8OE7XP6C^xsWrI)S5LP#;k6tcW~z|d;~yq<|Y2pKi=MfULAd$4hRx)WKN zVUsWXWxD0b>2yC>Rlac9jf&JXw##{MXZun1nq*PD@=0Wyio-Z?$fJZgIAKuGRt9jkNWB{dM)>Ya!+M_puwRORz-N7`TkHReH12SO%j1 zWuyEu^>J^^+*oTDv z+{YTsZ0ffp0mji&@0(D0k3J;{9BYrUCa|AUFXk#SD-e}l&s>963o~uYojLT_io;!0 z&@a`y8K6F?6pcC@&{$vY_oum~Kb`n{3b)__YR+ugvmE#HPk#S9)8S5&Oj#2ZTT|qC zXQjpxujVH!H$uqr2g!{c)Ul`TM|k*r!D~|i4e&?(o?_x!YTs|2E|>J!-@6wvCZcoy zW!$Lu*hLiFe+`zT8i&-k&4rf}WV+t=Rv~7K_eVJWb_N2_XF_lCFL>?`KAnobnNzn3 z`iNt!vsB?ccl2mq|BNbV$zS|Ko{S@lau+;c(XZtECaZ5`=wNJ92~c|Vq+!kNn1Czm z6G-nxNIR-x{ozy`mHbRPZ;^yQ4;Kd;tN-)ASzp6~*ZrU~YVMn^q}79Cfg}K+?OU-v zdu5c%@jmQU)6``dxx{LE?<2pf#RcDM7Fsb=s>l-K z+kX_@>68l?20I(>RzyFK#jc`~M+YuM?;gpd8j=Ny3)^4eb(~;#rSt4rSngJ1Vl%~A zd|vvmK>#FMs6?u825ltL8mL9GCO7Tnl7@zkpExhyG7n`Xq9@Y+UHfUL|7*Vd*({z+ z{02cd?=E*e6xg+NCq~gnTb^k>Av0DE&JEd@=#q*1jO*_?`@DYt=j^=^YtzC4YW2p~ zWRZNJD;?*|7|8bWyZesx34cGqOK$G~>pn8MtOgx)`kealc3zyN96bUyvizZ2WP$%~ zJcVYx++7*Zs*aZ?Y*F}Q`O(I3uXi;rA=@Xf7N@DPC+gLub4R}e+Wq$DkYT+fK%`2<&>VcK$x1lEQNCftp1m2$n*jPKe)_pLmtf7_p~+yF`O@ zkkYLXtx!{MeiCAJ{qL^p@M(lU7Zw)Q+6tz3`Rq47GEd+<$rjUhrWq} zctugHzpE%+JKQ0>=yByqIYxu zeaE=kW718^CDA*Q|Ff2DXd>j%xLwZdxWF%K!O)TWun&Tnkg#Q1ayWHA7vely{DRdW z(p5Jx^vR1Lk^M&OnaJ+Jm>!~Az3;N#4!HY%*M<`97UI{n!B+Ft1vS5`rL&_pU*`}w z`ub$6BB;u#o^(H84pIWS(?kx~KYo-85$Nn}vzCnS4sU?^zQDdPE}q3oWYlQu6Ql~| ze*eD(pMz)kzy-t*Z@o$g6R-N}{Untel~Fz96Y`F!MM=<6iv~OZ4-? za6(hS6Mfnfdi=#a^mx{M>~0#pX`%d)-B=(yi-(|L)pH4)0TUQWN65-R&6n_S#Gl|I4D zZG6vHmQ-_OU#^0u$Y8pAw*SGz=Hb?bYTvJ43&B6bJnE--OA7VpzZo(7^aOWG>t8%) zOg8Xe=(2lcYklk-B**&p=#V7Ct*h2o#;E%+tQfZYp9DX~(|$S;qTKMiP9)klQ;sOm z*eH}o=^s4SYe=qdZO!80;ki&kL&eLh4yABWqH%$9;s-4!*oS89l3~c$IY=(x7CfO& z|Mzsnn>b`xbNm6=VHs<>5_BX$tzPznv0;LX>vgQL7t2Pl?Trw{a-u_ zX?Q`odZcrZ^Qs+JXzh|#)0&CoyIjG?eU>QA0Tn6j@B3JCvhD{TmF3B=>XWi*H%u|> z)?=oJj{PvWPg$fyBLhEcF()iZ(kSFAY4TYuv~ae2(;S5B&n$R(xl1QiFgi@Kb&asD z*}jDwM9MAora>*Pl~~)Wi>09P5y$G+nN?2@(t??)@0!^yL^6hb40Zhrq&ZH9mzT#T2A zjDZ9^lT-detxTw8z6>4EY!dFZ#=C(F^u}a@)%QHV(4j154)R{_#Y(VO{yPnH9RH;i z(w<-(yG=xoY1bz~Of0P6R!ctn-_GZ*uIw>m%(&v`Ek`Na<;J&rFS0zGVU&X>h(TJU zu1dXHmNjTWY1tlHDe-Om>leSPe@;&4BG2qn6EG&F?)SY(Mn|x-OIW&=bxO)1%pmIx$|} zrO8`TY&|c%Zs*WGA$%u0%CgnNF9a7Wl{Dn|Q6K`%u-jS3s?vlmxHgja?A zNR34)Jya?^O#LgC+H=8})KbI-v%R#Z-t*3&;xe*dfpe)#KWD<^DgGt^%s6 zt?OR8yE{cnX(Xjn8brENKtMVV-QA6}h_rxogM@@MNGqKpp@97RzVClyJO=}~mwV3H zd+oL6oNF$sAX6m0tpv^>?ukg()6VOHK(Hz>k4w#%;-z5~GN1#XH2HeGSGv92oGJdD zkD9Op8Z1iKZRZR~M&Zq(pj>9<7aW%U{G_ARv@UhXE(a>=%jbmAv$KC7mQobE+L(D@ zFIMs$xA1$Ct*w_;Cy=8M%F$fDS4G>bKxS3oIU!t(9>pO^8+w-T!!?iGVpD_KMqti?K+h~6Yp ziXA`X+|Hoa32)uvTLQm`8gIW~;z9C8>d^*wc5d&uukI@4tpX)1N+UV^**D3k1|k+_ zX8d5Q4oU=j`Ff@3ZcQ8b9q03=e zoN5HUh|#u&^&C~U?mBpcE>Cm?&s0!}RN=jPHtPzJM&RgDl&epCVI5ccs;(aQB<|H9 zavqdlZg26obbL^$ep)|QV*MgvO&fWXK7?f?4eeQ%@vreVL)^rd-PA+AVG;q?Sh;^j zY8^ApPjwGfD4m>~_F+@t9H%`v+nFexUY|>QuBnQAAVu`=ZZjC;qKn}%7OeYzAIXg^ zC5i$%_KHnNNU83!ns(yR`w(41ck*l)6j~Y%pQ}|(9@P=%v6z?| z2~ExOWMQ4jItRjnFMal#w={GME4L>rw6q?G(7cthAtK|1;!Ttj)*3QQ?Dv#R(A>QI zVxU`XB8oY|s7(asE%poWNCbX7BvK3W{&)a-I}R&(Y@!BM_BInv(&&u1!CPa`lQ`>t zNrU=GWqQmb$}d<)!T%!A8-kTunxlpQ%cG!)Df{jOMx|s%#7vAIG6#Na9AQ)N0*-t5fVyWAS!toLei&-}=Sp|g=7F*^-@7{uPdv+e(>>Tnc z6;-ebe%O{}EGB-B`$2KFPH354Sp>0QiN;h|O;T0+5=RfjhSH#}#$Ro`xTs4-Io6iysRpq#??m;W1#;ig+CyGETwYs>y{q~nlN_wWRyr@tUOOlxJfdZjt?;k&Y&BT`w z7U?mUll8T|G9RGT21g)o80Q@`F0hKQbz4hswrzcs4gL({_q15NC~oN{HfLhn3Zimq zpeK6ti1rB{Bdi<2g)Imohuti6lF_-g+Q51;VFhSr6k~1MKL66H|3xGL1@C7%3OL7@;)=$1l?61@*#I&FApL72oC#2wfHPf|8ODbv~z>y z=!J?JC&icuHNW8}@bra@a-MHB40PnP;5RXIug$E0c$* z)X~HOU++b$pDM6^mueah^jmJ^uqR?ZGE4uSTQSAkZ$8knVn@E6ZE{afYa0Z{hk@Dd>AE+?uv#P&={~Vj$t}$w#_1xOEN?Efa6yyks7&kN zmPUg%>M%wgu{o?Q@!X~1jUjz~bqG#$T7g*cKLX^*N5S04ag_R;dUfx7dqYs>HWeww zCZVIRKR`Pe=&zQ*-EB)ySI(h+YQ4X|aF7G8pMB_s#B<|yt+rjeOY&~KbSyJj(Y@2f zx!C$?HxGGTOsBnVNhhq4V`?BSPI3 zS=*t0GNwBfy4x`|x&J+BdLnv-(2tzqP@*nAbvu!HyN+R#kdREzu1xXC(SNhX3Ef1C z2#c%dp#2yfXG;p}4`C07v`0L)m&DauLKJDrH$Rs>N?%{ADq&T8;}<^&yvspwT9A0Y zbkF7Ytt52Vp-S5#y?saJYkN=aZ4>CbYB#03YcVL9iF^^DmBxzIvt~BxzU0hP>=3HN z9umP*Z-#KjA9R5*e(93u+&;vpv!G~O@S)D#yxQqx@Ac`)^;mdY=L_Rk3*SBbHJr)M zVbu#%IHyjcHw6w69ZqO!w7l6*0oKqQ69URAj1N93B zD=`nNxvLHkR-W=suZQ9@2^+0fmb{wD%gzxRMAM&LY+O>ZvN(??duo)Ona%I;dGfoV z=MHotxR{M?<7W8E)Z>l(FKp*)KJ0$F%GVz-TG~pLw0u^aT9gowsSB8=;=TWw(6MWi z9Pc9u3!H@__n4Zg&Jz&i2B_iOO+g3_8I=-eV$O)LYF#SV)1tZ8G^YeKG)|Ow$2?DV zjEE*L0-GXrMX!jy1P3G39&h3WUiYCXZ7vJ0A}yPkF66y=!{tRg`*7b)_xyJ5!$mrq zYdr$jj~34>9lr~}e4JKZ%aMyCEu&U@PT?n9Qt(-85(crvxq0&`-J|rhDMA!^j*9i^ zf4KVm&`$}ruFvjWlXZ+fcWJz;ZJt~Z=%maa@?dE__5OMySqOUNyYDpyz1C_f9gdx@ z9#z!Tb2u7@JSt_xC4#M?Z)czf)*6OgO3@kp^Od~|77kE5UsJeF^QO07h;){TCMgIsd%pUs zO&dD>!`0lF@7*zFEG#sT2vu>;`!SZJOBD${J+lUz1@WedeD&Hlnks3ixME$KC{4ev zoRNmWcP=#GpV2T;>2O-b*ZctU{M7_lUrnbB!ICaLF!GRwB`dPyUGsWgRT?&aBa9Kd zFUX)arB8{niyi3`D$IOQnS`CdFXcU+^GbJxaGpU`F(oBjKiLFcquC6$=A#mPBnySn18op5nD6-78gJma8S;6X6rz=yvbOu?ntg=@R=@4T+*dESoN zSK}frcIxGCt!|jMsBJPG^c>c2q#ZxKst!mMBr+8Iue zaPQ~;zgh!XCGgQ$LYF?y;aqvQ%RkK=ebec9{-iZqDLR!`JH!TC=`NY1nQFVRgQg_pMs$UM95Y2(HdwudLhK)xlxG)I%Na5=XHU zVh4i|&%}d%_IK*){U)V1Lo8`6X?JDbe2y4w^fdiRfwA|})>3%pWhI&~4vU+qMINsq zCtt~ry)Rs--UEW_>oHU_O9cq7J`YO;K&38VZ_D!z4}}4{U(o{<+-@9dBZc% z?N##fD?zeu#^#M8=DZT@GhPn@%W4i4f+54~B<{^=t~cu-TKP)$M3ZwJZ>^A?Uy)9U>i5c*=G z2(pl4&+#l&&_j29sGUWkx8r|uXGNlV$GsY`F#jiJ_1G#b;P_lD5eSC>1>0*!{g;+K z9TS*b$r>0K=w)<58u5uQx}l&Ewh!*LHFN?r9-nR2enutBDahi@+wtFAtvH)|Dj$B- zt(sn3i~>?M$s+RHdmXWUo+$jaTJObTK&VgxrL(#yy z8}fs@4hF4*y7Jb?N1mGSApGII1Obn>Gj8&?H3gUvY-0h|wiyuFcF~mIL(b_-_fb6L z*A8ashZNU;pDv(x?l~hn%r*=XkH}0jk9#IYI~C)U&{wkGfR;nG!sqe89gNfHv&$D1 zL2+>!eSQ7KMq4~w8j&!dG~&tKZ$lb(wcB^Txbbr{HI)7BpRhf(w6yQD^L?7f#+r{( zHS}#OC*#5SUiQ#mlGt({#$;B?4 z2hQQ-zeHd~nGgQ923MId{@Fdx@H4v2P#pN!F4Sb60;WI@23)=vSXfYjh*a>tJ z31A<97A5Mpt<*F$G;jd{;AOYA05j{XU~`bV-J*Mz!}KpKxJFfz}I&% zt>QDi=xsroK3vwE=Kioev2pw1J}K7vv(?Za4Mmbg{d%-Qx_e5$4|p3AkbaUc-$;Io&NG8naFfAU))!_9amG_I-LF!PPeNaIt?woiErRJX6E8nEBHy;%{E zMXn8Hk?cQ}sL6&90TthkG<7)H#PBF?XHD1NxETpnXYrSpnIqNZ-41$!KpKO7c2qjw z(;!)91Uaq6m#t(-sMVp|pHOL-88Om+)tml4+1u+`>-0l_#gaY&5D%hSo=`AYQv<`p z+W@K#*W(1jCL#YDZg-LVP;P+FF_6agzn(ViVf`us>AQzg--cgV|2M51w+2ybxL}{n${HauGyg=~Be^Xj?IOU$GGn85zKzk;Rx9&6O zLU+vp!4i8Z-Cgp#7b3=)=LDugPuT-ulNWkC0TjGj-!$fpf=h57<5xrt#_W&L6Dak# zQd9bU-1oO;bP&p*b>b2cSp5?9B2-$W8Oh1iln$3#2v)G`Iw8DE|L74)g?gbp@Gt}B zaim-(*g%&DqSG5JAEsoz?!i+Z> zl+xh(p$QXgM|x$(;ZX`Qq3_m^Pyp<5RrQPNxV(i5q6#UI=c{A1VYjRl5sDO^?;eip zFU+~g>&$u)t*oqotr;rVmcc44{jIwNhf~xE)WRVd8KmGx^iQAS+B8ytoxCB03uM@U zIl$+xHxt|wWiGDwTHK?VYJG$aB}bM2`j%SGT3q@wR3wx@Y_jm9!&1v(NrFv@bBpER>h6W+AU<=3YOa zE6QmZ@oxLG{?v6YlJQV*{ZNK!U(cpz@(G!Gax*uzeX4T5@Ar76W!s8j#f&+yx8Nqn z1`%Hh^rV5)+~wxX95hyO>NgCSd$MzJDX6OA0H+*o=%4?YSRxR66<1WCr9M`ty;xmi z8H($MZn-+T4)c3Z#fG5(=g480qu@5sqz*&>E((KA8ud8)+nh^d#b$tUrf{=O13GU6j-`|FOUdK1WCrGSnMn0c_WvP$~- zi2{!&v}DCFc;bM8q5EtD9F3blMpC1qqkB^xy`WE4bUE9Q0-8N~AZTl}ous{3lO`y2 zVzIg(Qlx|G+xi4hN#!(~uQ%@4clEl5yYLDH>NwZ=u8=4v4^c1QG{v#Dsyy$cw|rBq zOn?IHCUl-PpI);(73X=%Gqu~|b?rB&>^p}&-$+#{n2l7(t;{*nnivBcc@`E>~Tcx2&@^Lyj4A%6qGNXUsz%h5`6 z+8{o(N#R}E@WwZN4tf%$`bG=94=a=Od{1e{D)L2l5YR6!E_gt{tV%X7NSj^wd} zTbg5v8iS>ixdpF~b2HBW6g1qg&GY{HMp*v$)~K(!vB6pLlqXKGpZjhBZB)YTsE--l z!hR$TMe}Xt=rPPmFmkT^%TCRF1UGXm^s-Jqs}qm*mz(G&t{&6E-wwgOuw;_LU>~2x zX%G%;)%>v{EaB(D4`u_^F3k2_E6`gy5_)dW=pyLhg=yuA4H zXL4{$Za^zWZv!WYgw&-gf|dgO{O~&gLO?=OTtfqIWbX0SU~GQ~Cq#W((oo~vR8@Ug zw@doe{UMkrOs3u8_>}yuvk*Pcv`FjmNwY{zKp2|wfS|15vLRkGL?BbW%!(D0QhFQ7U#2VJ}W8!|bIs(n7UTP`)jocg# zTJqnhbG>GlkS#F^g&e5>m7kr7kvrtPKCZ_(j@^AC= z5us>!U!t4LLUiu0`76T?v$zmNF~In!^;8l_@WO z(Jq?m_W!!e8V={l?Z|a4{?TxAVWU>?BGwKQmXP=Qy{J#QYocL%dU^EN1Y1|$C*wmr zt*yx`PsAYTBvAEso<_lQ@j>E=u$sr((MYE3h&Amh<`ZlpK`O>x1Iqqc>Pv(m6qrev zz}ClS9k^yi5(^OnFJ1%UZ;HZ0sKN}P+*Snv_UU)iX6~>2jo$6zEo((hmQAY{B+7@? zhvZ}{^E`bRz+Nldq;@z@*p1ugmlaIr+KSVpgB%0Gzz_mCs#<{;LAj~?eFexqOZ?&z|F_aX)*~%1W3** zzB0mGFuMa6nP2s1>7((d**P=rbsbmO-USbKx0|QMRw;U33^Ih<7LD^p%|CLU{cFFK zFhTO|rR-)06w|J+$+Pzh0cT%}u8*-6qcM1RUKNP$HiYTD993Mi);aV@s+77ZCYo1l zEbO6FoSLDfLiw2N5MV;(jw4e-Cke@@^EGVoar2EWPqv}9ov&7&_Wt^4sV*<)AkbC2 zjMl0bk*8TknYjb)4TIbS-rN^?v!e1W%n zU=Fp%p^_KyiQPh9CSMc$Tg2E9)3cP@mw)RtC4k)&2(F4jLU>{RGj`zn=TYFe9xE>h z1=+S*IUB~)0@p4}FR#x8sKc&bMjO+#ShsUr!({{0H zsH6Gvw$s}7LtcNFQJvZHk-qlZj5eE#nFG`&K%#x=J{E0D=iyzF!-{#TlJH8k+&%|= zzCDamtp6nTub)rkHjp#M;I3SQW!DSr|6=+h@k&}-Da6Ia_gt6! z^FT@IbFmX#K71wq-2WHD*AlM4MOp11S=nXdqz^~`7ztFZ%UM(k^OC>oKy!=p%M}!} zL;$A$ec5|_>^55+8}qnYM|LFg{j}?ctedh&Jg>N(WMi(rGqG*vE*E+kXBcs^Khqre z`?xm|5EAen(i9^eujRY(w6Mwo($+~v>FTnHzyA#c3p(5}g&zt@$P@&p<_kwc z2{NE6Xm(!5g?-*Dj>RV<+oivE2?`gWt6Qsgiae&2+RqXeR`zFv4!D{wQX!eCd{r+v8+0hl@A!Li__PT9t%}8f z3qqC}YYd}BNr_g*SGEr3rv`y%W^yuRx(=(*lL>ut&)a{$m{#!e#M;c3OYh>+7RO7& zvf{$B_BeB%uQhU*L2za62m6{B(w@? z#?H_*;m=rPQSbrPq>nbK@cgqr8UWLU=~l_f$RJTtQqmJfo7L+{;v)ll!b81v&|5*K zmj8F^?ktur?;Y#gwM9E2N6CFO`y7@uo|saU!9QfG6RO#Pzpb|aZ8xdLvy=?>^|vvc zZj9vcp{Z}h-52zA%<8}t6JI^LehppTw@IZIHMf?Gy=)d!W^Z+LJx}S&`-D<#epJq% zrDFNPoO@%j`R{?{cIPBqN|?Cv&;Rb~@%nBse(RjF9S^B`LE^W++f#c28{V`$yeKS> zeipMhaFSYr99_ucfcTTa6Yl~vrIat@;{&Bisq~VP^mcC?7Bh2sDxok&`SqRQ zEMZUY^&rI*LbBX;#~My+Wwl@XB^8DVbIqQfev`cRMhg-_JiKnas`+ zw^x(ev3MEBxLSzvriFzKYckGS^cVH$dce6l(sr3C?NO{JK2qTKNU0vmZ{GuH8JMtp z4nFvd#9c6T@g7s15AmIJo$W%~TjIL4CN%Ru{jQ@UZ|MRzL*K@f+sYfPj{elr*EO(k zm3CC|JeBm+c6bG8`z4lFL1r2ts6HcCA;lVdD`v}tpTdZqQ~ZUsQZ_HSG=^(jDL;*{ zHm_7i_7Q3d9n<%oUt$X@GaZk$MjiOXTNxtkY6mtnFNk*nfG;?0n+Vi)U0PN_oYIoK*w)6Vlk}zH{Huk&km!aR#Z`0!jm)^jHWuerUOV zG-B6OdSubc8f3h=iJf4{VRAp??AO;CH&MwhAzI+#5JWaFb4@E?xhY6v>80$Um8GIR=OuZC#@ivvPT^J+w2#7*2)&XTK*+Xve zuGT@_NJ}|cgQ!1Lhm(>>osVzqW%s|9rji1=X&Ro6^Rw42l%efXYo;k@4h{6~5(tR$ zWL(b!omWl^9_oxZ8DkX=vzak0I%W%HRpLd=>%=B;eqSA7Lu3}8fxas8K2K7~LQ#V7 zxhZ%d-Pb0P75xILCYmuV1O7K}kzdG`6ut}JTx5bCX2fZFGyDK&e&Lz|(D!xY!Nrb+nf{6c5zL^A|Sn`wLHnwf+pIq*P|M?o>pvHVEn7588=OzMFf4Alw@{S~l5quyswbPFc2@*h>pOMfj{?NmOZR2aQHElF8S^J_*P zO#4qpyzWK%6i?JI6w1NL!kxt_qZNRQO*!jZG6;jI=8HSQxb66J4VHax`$9emb^VFH zedA4pU^A18zRkjr6beJw42>*+pl}^#5ry~B^$7iL5qw`SAI=tt1*V78`^+Hj&jFUz zy0KSRo_73{AAV^ogEu6L`0=PjG|xB79YPgRq zq&8A(|3Sp;)hjZPCxKiOoC!%884)@TCs{$W3)3nL%OExX``7oq4m)tCa?;}kJ+W6O ztA}6Q3NkYzJ32ao*0Rk%R$|-bTpiv&rZk7ac)V)%yd0qUb!NsdM(E@uU`OtwHW><5 zKln6hP!&kEj4jHD_Sy3A=UOWMfl}jli*WUzyqM7tH^Kb4fl?Re9j4+%M&{Pj> zmB54xI8VaLO3thInMwst?j$5YxZs%ri!*v2S39*mjW6y6$0zIE>r%4Mvy;o~z0bEA z3!sf21kjNR@{3e{@UfoumUUb)2C11=Zsujlg=QU;s)*YvH=0&F#2cD$d;Ct-q{;Waf@w4_|d*1CMLPh zWBejy{vMM?g>MSGD0te=ef*txvOKshfUa)U zk7I@-Vv#-leM$Z`TF&TS1AQw!ho;l!^y~E-fyLrZ_ET7*sppclX*@94;G#sQ^(rY22|xC z;y3NjZv|`m+h7OvsZ0fLdT3)1qAg2TM|5JAbUdTcHN!$AE&ijx+Y) zfKEUJvhodioIL@0gl&@tf#ym>LnElKPZ|(_XCIep55=#frj~x_=;}rk6g2kVx_kQK zg`OtNcJwwmc6N5kpg$G<#%3p}ciE!;9awf?b+A5pGFW5W4##NWn;v-OAf(D! zS~3Bc4v<7pxoU2N+k`OM#qOk+opoqvsLkqL%|D=C^Nw?kMU?N)*!Qgwa+}g2@F1 zC!RK-mf{2wWBT@l zD-3};``}l(R4D|m$mpFHt>g9SdSch}Nxw93ws$^#3SZDbBnL?8Hg#v-obr1{EEv2> z{Wdd0<7D%g&X$lgT6S-5&n4@;gFwp7t?^ZZ3ky3`oBtm4b~m0oKLj2a^Ns0XHu3n^ ziP_TbQF+^LJ39*t%UdPmnmr3Dvos=kfpFBE4h=(nptplol|H!VdG4#KxijX*`g#J+ zF%UvWYA+^uji*;uM8gzCL_{L&5P&blms23H-8((?GQ0u{7sUEw&TjzVMVq|f&Q^JI z`Uo8{J3BkjUK8NA0P>Qvwl13t|J&8|ypV;v{nb2h)z{F|+ndgoWK6~$qZ+Y*>faR? zTcES414}~+3JS1CfNi)W*q#%4!l8giX$jk$__T|$y1I&JegiW#cu$nPcRa0ifhZ>@z;-5-KQWffshT@DL$L= zAV6&c5Dh?3Ac_)DQDKGl!YXxQKvmp*?F`OqxFchJe*WIUL5O_G`3I7hIyykpjfok4 zJ@vq>1RqWW`(AU6jf*QHsE8U85rGQ-@}C478-(HN>KYXjBkk+36-!u-Dp zOB3Jr5E)?VHPeU_-_nF(rV=*;hL_*S_veb@#06@;glw`eCj?wB0lSxYOIcDZggd;T zDz>fgCg=25NJ2PZI$aTnJ_|T9UELT0M$f`*kidMi>R)5eRt@}n9-A*7&#ZknMt}}; zf}iol1V}dMaVBK9RgEj9vY3A>ReGb!a55n}=5Cu&WbgaMaTSD<*4CvG`=JGvuCz2_ zFt!XlobfziB4#DHugTQwCJk2NEU=U6zIt9Q1?uXOf}v|JTLT!tNWqUra%^-Ij!qTU zRDjhZBUWPsjvW6J9@lWFQC@C_pGCdk$U72XCc=WW2|GJ72ohV_>#M$hBO(j`4*&T5 z-9d)tr(jnHK!JX(zkloNisG>m!oAH@*yeGAdkc-gX$~4>OLy?0S+*MDSmM)8yYIA zSg;*H@|N}02K);$tlCX2BV$`*>t$8nV0_emZa7&4G#%g}|8KMtm>LC6TnM=soyh;@ zhYV#1{hI&HlGh~Ji-8wml&;zC=SGEX6}$bJblraAZ|gn=RNd_Y$MMtTUgKmeKw3L2 zbiMqC5Y&|W<_WGxsfloq`aJkXEO_P*V@&2C*bevbr+k*ILFy9C1`3zRB}aL{)}^GT z(ggkkncw@WDqt$n2Z0^gk@5x19RT@4kya(Jd7*e&lRzkq=7mH+JA9PnHSEoKG# z;%kMyM%5hP0VFv|O8_(p92{i$8FOd>PK%b!ake#Yq80{fwM(cQuIeSh@~%*6Cox7B*4dhm@~_Y{yLAwft;Ac~S} zzDK=9Y*a2ogthR_%*?ogq(bM_EAR4Yy1y z8hEh|3=RUThxN_5RDk+@{wxGG_7*&&`7YS$BbKdF&fq}$pPovV9vu;^EmjT=DnWaY zUBQWCWGOQUq&W${D(7AUVE&dFYu8&J9DZMN;u;S>8a-98wXNu<(Jh${+Wy>#`lqJm z>F?`n;Qvv_i4|e~Ze}0MVAIgl3m8gwESD5Mq-@+(ELScvQC)x3mORxSr)6W3R+W}Sz`gr{}&j?FR?HPmo} zXdKqrxhPOnx3LUcSD})t!L?-X$~w-&x?$ic3r@L@A2~q=3fGIFh9ZCk1sGvPH8pu9 zr4jr-mvs9`KA%Ojewj#IIA#d2G%&!34KA+&^~>+e%S}Lr+5WllGk}0*8!KHoT))vq zn7{Py&L0#v-mBktalkt!$nAsV2f&U9bx&D_hlWH*YdWQv357>bqB)Oj*lu%>%r0*l za_5aO0J}~BKbDS;WSyOBW!^|h1zW<@)zmzZUzOS~bD?46tC6`#P)>*=M%YmuX?J(o z?`CJTWsZ~9K>pJ9B-9mrS@DJU$6Zt=e&^?YD}6;OU{}o}eWvUI(*-jz%-o`4?^uGW zoPK&@^_g*>fzc^4;P3Qz@@p*0=mMFC<(1>%UsYDCwuy#(Fm?=B6`wA)0!OweaQ&^1 zq`Wj8jYlki55yZ)_bYM@W+gxpE?R!%u>E}rU2fi-Z*K@qNQu?3)Jcv9!?$L2wTCwk z2{CcrPjgfl&=25dT6rxj8b_$I5Rpe9^mBt#QmfKk@g78BBs5&f+J#$^BHe1;l7@!2 zQJLuy;5g|6OE6Lelf~CADS4x7*i>12;Bg)Y+&kftMn8cL_zn39cHAD-*F*dgf4Ef% zU@*=2G&z;W4@pPpIq`Iuh$HOxNP-?x{~H*(#y-sz~rHx9#{gcIA(--Qg(K9U*ATl zFfhScY;mR|kLU&49h!LSfb#K>01y_4lNW%^>x-l4cY8PiIXVcIpq?dtYP2`w-~gIl z`sa1oVkjHBnDK|coW~9qDn+S(F_I=6z>c9G3SUj!ya`MlY1qvMEzxh+5$w+yc%UIFZxN;_89w9VCT`VF-HHHb7}6!=7$2lF|b#feWBvz}>*P zx#HqthD|+rBt&y$y#Gp!@lSb!{Bk7P^rgu+xTFcrf(EE~;@3Sn+RZ2rQGMWKb8g7a zI6~Tt0}(&dul1i1>>Bo&ws{ePO{}_uDN^RoyU8W9Q*9b;K)5^o3G#JfME5>;3ENllqk(t6$YZpAglZ5D5WgqkbvKoDZUO4?*Pw1|LwB zD3wfuEPw*|=ptlCyng)}4g#d7dt~HRj#%|=_D7oYQzj=R1%YxFIY2YhS|3dPB11tz zp>=cR#tsd*yC2BF(WPq zqm2~6o#gVxS@d%T!gJKHS&i_kj<177bAke4XR8< z6_wxmEWzB;v9Zp^WCEc6w=iHXkk*z}yGcT>*bbsJsgU?L(BC2u*W%lf9nl4I36==k zbYItkbuWP@B)~);cM8Fbb{sLO1kHu;hyk(zPD)TW1D_*)Rhg%mGG$uvtQB6|)`${A z=~`8DVB3O>lrVZA`SJHmEW7uh%Pj(=poM}E0-|{sQn_lol>dl2*JRPpV#l0fH~SQF zfm^12H`Ih}N}-6VQ>T-UKKDzvw?lpbpiu3A&3`AZh7i^ioZFhRD0cW}%)j=!`U+k9 zF~f&O_GK;V`S&9=gu9iO#WFVtg~;=wfN7BQ35?O^&Wjd41=~LEXJRYEjsA34x~nsD z>vy%?s|!zNy>CMC5xX$(>FM7|S)Le8cV@2JT*?=f5k{+=Xl!C&S`>sc1!F4Yd?k&q zA%p#eR7CpQ)y2MZ&AyW)M+9>j>CN&&f&3TI60|y{D_T3x%4ye%l<%$bGG?fm>#{4Cz=9pFJE_&yNDlq^MVlkEO^(4fnttT{T~AN z_8pBqOdbwGgBMwuvB1n>H?CE!uuLo+#3z{l`@Uq5BzfjvZA5CQ4;4_K0KIspK|n+; z&B+Gthqs)q?PIvoCt(|4DLj5xjzwD1Xo!-F@(INJ@Ehh0jvlVSn@uzqYFip^Me{G{ zG%xXyodpfOLxbhAnec%F1Ce7!2O2)6DtZk{LHUEB5tV z4}1xu`K8&Y}11O2-@iI!j8X64b7d=4F6xI~W10x~h zcqRVpHg4b{FqyUe1U15z9I1A}4X&}Lr{}B#BB%FruVF!8JAW&CA*Gq7!DESj{$nKN zCew5z;bEbBTh47aRyaT5=hq#cX+h9$1)oNKhW5nJRa5#~1yoq}pB1qP_0ijIb+z$WQgW8%90WXzUMc7KWOy6$3CEEAJ>zukLL zQtbNw*C5MCknzM2HC!42wzt3E3zV8P@b0YWw&XmhamlM~jw4gaPzy0N7!JXQmx46S!|3GoUV^uKVw&Goe=5w+kdB z^ufOo|E+!(cq#-RhKR@Sgd_Y)TRRkJg^Dcth)ZRqhwrvB^_5Kh^T|AhjkTseWz$jr z2%)f%{qKW%%Yv!WV6?l@@N;aII8Pd^vv+T-Y+@`6z1i6|Lle_d%ErjmYHfW=r2hN$ zFk0Z4sMq1m^VZD`XdS4Fq#2RItWG*g2k@Tf5MM(FR7$_o?6E6!4SV9pbCv&l%?(_# z3&1;i9od0tR4IAmKSXlhAc@H+pCea_QbJs&GjAev8L-3=hlCZwrKPQRmFbhQ6Raj9 zk|dS>`!*MOzt{Q|UdK(xpubsna+-39lxDvP3fcd^ih;99fb^@|q#yKoib8jY%6#WEfd9Y0!I;OcQdYK#L{<2W-0QRyJtied`K994=l?Af1Om+R z)}@aDKcTX~`$$7n@B9RopKl3~2^!v+{Ms}s?wSBOgO?$fmqozYR=ZqW1xfL9VK?1(7wX_IZpwHDKU@aF)QrC(HK$&OhQBj=3=lCO$`|olA9=yl-8z+7 z@aTZwHCDdbE{}aIh%CTER=PQ9=t4{_Ujzi_-2x|jN`Q)k#vcZTYO|g}-;+F(5wd zXUgG)J}BL6aqO`BC98G8laVQzrsv|qgS0AjG;r=5cR}V12#MO`yn=!RP&g;GxVgIW zfV5x=5Fw5Ek5zMsd5(?N#HV!eXvxoiW zNU8VCBnf*u`5tBELqhIBc;PDQl;gQ1HnXqwRJ63dXy7ZxGuG3GOIJtqC)l8#YavQx z|L9gyo;W&g^ zSRSQGPNi2UJl$_$DjM2Aiz}aN!(4_ju2NUiIIj2(x$i8LyYJvdQ*IG3erL47M}Va; zL%@ie?*|R?&6{07A4WO+_pjZqSJgOoeb1K8B+_lpvG2#Fz-HUU$?}+bq4bDol(i~e zH0Bv1u@U#dOdQe<_daA{obNowaTOU~&LaP44J>}j(xr)f{370t{EX`>>m-t>A$fJVRE2LJXMC>q?{E>rAWvG3qtiOv z@P;DtLRnZ?0FvDQ~Ee*Y249;NtU#wA5rK* z;KXL&0lS-F2?{ovqjST?vVZa)pMSR32zVHeWOcJ$;FJ**1eR^fn_Ms?44{J`M1Y4NWnhp~ z$Ho;BUEI_}0;ZHYYKKmv1NI#JCY&xWE0en`7lWp3bA5)D?x}8!7I*|}laOF3PFORm zsI-i^ynE~yDUJlq&-CjUU;J3`vCZx}vqlPS?xkBQW{&Qg6~bhDOIYEnZ#OPB3i;`2 zFeg>g136uWf+S^V@@6mQAvsYZH=shMrlw#pxR{$9xCfylO95mQL@hWFKoItnjcug< z9UDC_zz7onBd#F&`0-kczz&+l%dfDdmRZJ(* z5cmk`0R;-PthrG8!MkuTJMtRd+OK3d)AauNUK#sXBx=^F)5y9cdMg6D${TnWWoAA> z%pd)Dkn<(!P(UAUvnQ-{z2#5>7{uey~hc&MTko19b4(9Ti z7mO&`V{1<;?=x7+ z_oJ;7!83Xov(WwjRrM86Rc=wYhmdZNl9Du#7Le|e5K#oAjsg-&Nasg~G)k9xCm0%}Cv1OqI;!aC!k}Vhw)}I4%rncvUc#!`jEr&H zM0mdcDPFgfTcyBZ*JTb-W--rK%Y@N5OlMvlxMWgi0%k8---~##yxUmZ8foD^DV`Rx zFj4e>jV2+6F&C)90G#>x`O^lSyt|j7B?JXps0Pac>Y-m4VSk+|EF=^c7dLz03uD$g zIy>c|1rG2BoE47v;6MW^QXD3-&%zzil;jV4<pt&IIvUuYc@VadAQ8c0I~ zMvcV4Vc)ywRQTR zjn}~Dw5{+mu5{KWiTLF~^rxP8`h&=P?{a`0gTsTgAJ1lWnRISp?|LQ}(%*g~fanYH zrn>jVy`K4&J7ZzODk!AykOxtfjdlQ04^v4&&xcIoSIQjf8};it2hJV^*S6N8Ht!j3 zmA}U&!X}nh(DB#dm&zR?quXa5=5UIw*zBZmvy0tytDKR{YN?(SQI2XSr!Oha3`kLE za?0MXd^j&NC8Er9HTJ*oGPkL<*|maPfubQ!tzWiNS}M`r%;}Y zo3V5}Ya`rR7My>)L{&M&yXoTbJo@=jl zg^hUdPgeI2H2g{wmqtp`bAsLWqsJm>HnJ{%wd2tm9qFCD#~)eKNkdyOpqBJd@hORs zhs%oRn%$E-<2F+yJURZ71$E?#EJUdd{SqBHwb_aB-Sl_ZH8nkh_G=i<3)J67YHPNowvyMK)f$C1JcBg3 zy^YzT2$aC;?0QLqb74y+*I}-hXwS{f4T-;{30NDPdQ(UZ{4=@! z!9g5wDesVXS2%fih^09+p{6<8F9c>^ZYg06h$)mfi#tc#&uuG@;|6{V&D7m3*ryQHcj z*(h2+>xzZbtim^r$1bH5qmEywRD68CaAe(s-Z=zOK2&mmyoS8+s}mClp7vP_%sK5`^2?L-hc8kgjw<-FBYZB=Ww}#tadXp2B%{Y z!UZn9S&!GX*{u+=Y6u2g{~PMnJtn*ab9^=L#;Zjm?7p@{y%tyo94ji37fv4;Q-}Hr zl=26zx=28h==DVu`ulJv)Zr0;xs>=Is{V5O-kkZ~Ody*QnCe$rDQ0<+MD?Ama;wl@q`B1uUYz4nUzbZoF7$d~rCGJh{UH3ikR6972f-XmPQxrvn!` zy`l?)M9ww>M9AC(OuJq(&1yS@y!_i#XRU}55L zxL`YN$4&jPB0Ka>CCoG7U8~CLkS4!=d(bAEcwt{?(-yt8}=pQM7ECLUDXMR)OJ3mMGr+(+&J(<@X{Rj*5)g6PgmX)SLUJfhfN2w@x2fDeduZ zNQtrt&dnrR6%+5F?u@nnax6F~`HYM1Y1|%Z6*_TwG5WY@$KWbu5{oVXUDVFDTF8r! zM;gx%*H$3gm4g~G+A@J%oeHKm%!?Oa6>FhnYQHrt@891$hg%UDq4uP-$Pfhk$z4cH zcJTy)?@Y$yp}zQiCyA+2DXn+N$2B63)oRzY{`tJ)LBf@&ynf4B3Vtr#1kKAceW#an z*|FWVsplQ(A_uhbZZeW(J<|G%nijWIFnWdjEaa1$?%ohciN_=)MfFqF|WfI~VLOz72CHMJh5kGFY0T{=N0 zn){3JMuZZ(?fQ5{q}#@%=c@Fs8s{F4`;HSALbI%6-p5nC-!CEXq>&;)8l+lX1e*wmaQs&4h=d?Egvf#;x;VrF< zi=XzRB!rG0!~BdDATAmGgS|cN*vXar`*z-dZYga@qWU$cbHNuq0xB7vp0|KS2rw17 z!MWvb&|iW^1h_W9|58v>3l~ZaQj-GO3-mPnRdT;ZQ1kqM%*KZbWXogW z9if&H89a}L>dVn#>#vdRefwENG-e_OCG`EfpItVTAr` zKG}=L4?kO*+_8%tf5Q!(3eL3?F&e-D3oYJ{8OTlI61WriLsH??&q7E zv4$zZg)cRQUi!=wk9t+kH(xz+#L^xPcmo`|_@ zje5!RN8X{M)oBeE)cz*dgpL2==HViL((QSJR9bK1o8}C&2S2ES>j>`*f1iII#ONOO z;>dKMLO-mE&&3~q_8NljAN@MR8A+(k`^AF`3vH<)2E0HKJ@P_;)ThxXGP)>41=5zq|zPD1~*(CMx&`h(pt10i>_U$G3N8! zZl$9Gb{8V^1xA%E+uPeKHf)9UoM`|Y>FNV!oI4k@E`Gf3b0M>K5c>%4*C$!`**{}< z52FX4r2YBCG<{Zs!#wqSm2j&2pT#R>8?iEh=kD)hs6~@RvclupDp|RrPrR7V5~r|Y z@Hfb)(eY!SS&OKA9SYBO(P^{aezl5UEu)d}x&KxkQBF6-uF|2I`swNxlTFdyRgu3R z*{otOC;WGu5sgM~OjJ3TRr>t@eSV1Q#Ul#?%~;spfD zQ{<+oanP%N+?KO5S2(Sr>7F$4ss1}-k#doAzqB*~% zDu?ehWuI*luGV~98M9?xxp$O!k`)zikQbJqger_pZdM*B7qC#kL(*@o>)Y-VwL48h zFLI~Se#&eA*nHF{im3SVfdRAF~Oss6mQq8jip&?5UY}!+=55&W zflJxEET}C$b4JCK3+4bKv1NTPo(a%tmzGdc9$;`3zrS~FUF{oYlj8m`q;16865PFi z2Ng#=``}vQ2OG{`dUx**q$DM|dG%#U*ARugdB!=2gknDJq)4ld+E4it{Qx!j;qH6e zP)R<Od%iJ+ z)H#RQO2p;_=ZotA<9i@Hky4}Q*}p{|hso;g_keNI>FMtF zapC+W&~-cT(~eY0{|r`fYu&-c6CF^dBRLPl9u2uPq@`jQg&$|n{nBm8Tha0dGY>ol z8VmMA=I%k``Kb*A2*b7&X*#l}yN8bL==@~dO-?U`Yv%nq^QFfcc4lEG1m=lj$DAmK z)cOO#j^=9Z62>MI*b2B)PE>gE6tr9IvS&^MKt<5MWQm!ada^V005R*i)GOY-^=j5c z*s$=HVdUWb(=_odYSg)a_c^XV4^}mn_@gVHD1Wl1Q}|T^|NE;jic8O?zW|Bo3Jqjr zJ)xwRDx-sWr_&KdT4bq_H|h&&_F?&f1J)sy+~+xI@>$(Pjf&(Aal#-r0%C)5E3Hvz z_(zrXBQPP@X`(IqQdq@hk6Ob{g`RDX4T~Gv_eni8o-_O7JLM+7B9N;dJ9`30q;WY0 zvmcg1XHFKx0)$ed*0pG1Oyb87g`96}kuX~5`*p=@kyncz?GFF2sV%_Wi4d-^IGIcu{E|M&+e3EkEe3p-FnG{gGVDsk;%>_M#eK}a~&1Hky6H7po9Tt(u)0Q zA(!Pv&I`CJ_luXl1iNza_}zAwMzAyZec?)4LR0-D|V+qY-ET-Q%Soz>TCs__H+O zY&BaM)I7H=gO{nQq|^pq zN)X@$TVGR!pJb5{5g}FpiseY!WY^Wo#ip~{n~ z%V>&k^tm5CXfU&~o)^`K00@E^8wW=*s%#Ycs%~~L;o_bI3-VFtr%OVcIAx@Pd#O4t zB6VNvcbVGR8*6EMO~c*-esU8;Z!*+8(?L~L^=qMFc}6U=q`pIgG#6LvV^BPi2lcC> z$qKs%7f|4}a>YeOhdYgFr>CbM(b3VN<>kM|X&3O(Mlw_w^&EWO1hK<|?Y+H3W*MLA zvbsJi2(l5+Bf@CYjLb|16m-#FA4|R1-q{hpzal`gV}QhLgB3X69n|>n7@Yz;ya=S}q^o z@PrhF@B6?A%l|>G#$&c-M@PqMb#dVDz3}^sbn?(ewm#a1p^vVAzv8o=V4=uZq*7`f z=b8;d(eyDeX8V$;&yD0RWjOaP9{}|3d%RvH3wd&VY9Am`mb&;Gzi3{eA!7AjEA4AI z`P=nE+Iyd~C+((P0+4xzM@GbYvSrT^paw{QLI8_9DAsDd?D|udmX;O@>V}98?0!u< z%kFfszPOm?$kJC1uc%#K3~(Vdxd6CUS6J6>SU`W0JvfMQ&bUeCu)$d(0b(qhr4Mv?`^xw9WH1peUXmt zzzql^esK2igAzmXhV*oN&4Pr7u1O(YTV+dm7CAUucaHw{n=E%Jx?_2Cl&m|13Isg@ zHyB?v?X{{|Vf0DR9$s<`YIb$?x+LKC`K6GS+~+ku8J-52+U?S3hx3u}q2&k}1PY#S zKf-JRC=S{_Fr=4h@4OOu|D!$^F)lV%-;NK=?@avr_jyR_5+@9bRBw>j$S>QeXg>3|JM2=)5)Ey4i?Vs0$PzX;N3pFe1~b1a$$Yp<{Ns> z%5u%-3v7}asHshud9PO>L2b|2p?{K)@N4^5B>w{M!^$;^b|(qNt0c(3F0+R3y}b># zBxo9z(|aEg`9WC7&Fr?MfRZB^iw)! zyL?Z)PRDSY50Y2e_SRP4vGH+RjmfTLezS8Ze z+0n5?9T!gII^c2+ZkRRr$e4ESWOVz zmV=~&9t^ooQ*WaJ(bg|2xpUcGEAJy>Vq(bh?bLMmQT~vUYKl+?ZEUx*%3eT0=kClZ zFNO@$uFapL0t39^=jX=)1|ko<*jf=tQf*-SgW^lO58n-Vp>Fiekq`~$Gayyz4^lDl zD}DJuNfIy099DR&O%y-Lk^!PgJb!?4th!IRKEOi(0pQZeoWC5Kd9hhzg9N+^`yEp) zV0b$q%@OD1Ts+5Bf{w+_6p|ZV^Dh892U!O2{7g8UeRCpvAg8EHMvI=VfYl0>Z_E zA=?T!pq&6=94Mr9Z>fWrm!;FtsHpeE3!Z+OCj9ag(!!&jxov3z??@j<#ZCAq zV4HL7=05aY;~c-=U)*_e_pRO|d=!9dM)zDh{`@7YWvz5(W{-at^cKhIjSTC(e=_&>6Kr7B? zovX~mtLrXdP|1c5E6)j5r9Z+v1^ zn*mO7aq&BZLG-{l5qp&VOmvDIZ5B0NnF7!(*q;3TwtFo%AcC4(T*QZ~z_s9tfOY~6 zR4_iwu-$=erU+dH@QaYip$8KQNVr-Fw&F6|>mQ;aL@@s10m_#xBO`RMIH3lUo}V}) z5G8ED&OUhpIR4<*uV15pwO{QxhYd_}A{Zz|rGkt$B8_31+z-jkbI^KL-rmPYmR(6h zcUKH9=i*wXd<&QP6#JpNs;UYzM_8(lgN+SENlEFOrN&Fk0kBK#02FZYVbHw_2)0@X zo#NKs^VB;mf6T7L(zdPFAeUO7eUHaJmGGK8`{uK$rKlT8@O7E1%qGv z`ijlU1bCp(1r`N34bTN@+@5%2vCa~&w#(gBWT>?>OIQ_W~v6tKRKDM+v>I|lpTTi zt9$RKO-_S-6*yqMfZf0hu z)ooC2M*UopUIS55UYISiiQ+b3E49s9Gy{s%w0#3G-F>NA1iU@68ee5(e95?*%GM^@ zhNxexBh$zbKw|^koPvhtXYqPlDZNHsLa?BMPfuB4-l_j@l9rRzj(84yJw3hROBUN~ zEds1UBphgZZan|{Ax`4Q^t9TkI1y@(M#M0Jm>`xgtYtz%_(zq-PfkA$Aw2_G5%T|3@2f@sgd81Fv|E>?UzI$5O_GZhI;4eYR zMEV^gqZesujKIHxh3MP(b>5fDI`w(Ivo)4PV$E^q-(vR6=kY zA8%S7EpUZws5rS-^<5#FzZGgse><6vblx+o6ABhk*k!DB&7AXW$VAg4HLaC%)#ETH zH&mEp=UP{pyQ}o6qp_m5swCNo4=&}|OF{R$OiI}CCeuK+iXMihc zZ2j5j^M_Z~whp0hYH0VK?Nz(3yphiwgwiw}2>UaeLe5ZslyFAwK0L zn&|3?K{oUCavVcDyX&x*DOp%zAk<(CS0xExa=G*2zO{bkoBSHQp`M$t%7J%t*N{E& zISQ9%fEp`<9RfmuD-q%qZt^&+4=b(e}7bU%@n;?{^0WKJ6ALp z%U=j|Zyy}E`|b3IIT%9rx&}3X7*-jdLk&B-kK?os8>NriJ+c;|t(;(t=f#BLHTrDb zt!)j0AAH8g7q}`$O2waJAyU8X-MpD$ydg%p5~LGmfBnJ^q>tkiVJa(L%&9fRQoem- zT*63|lSNxw+tJ-!6+o_kcXpufZ#llWurRDnA|0QdO`dm`(B0i#@2aH%OD@DkhZ}K9L^&T@w>Wv}DIp>oJ-o2-qSHe*V6q;vjlI+q6rL z3oANTit0rll?hO>u#g4F`Ga}={pSzq(kMu@!Ad~};=*`U=II~%B+D_(%*t!R!aH+f zGd{vM#l=U5+Oqi4=|kh8aQl-1!oTYqR|}o81$p~+w089b^GJJXEYUMHIIv+WS63mR zWk-Ov_X0@XwWUgp6eJ}QHW^Bxge>ym+4T72sRRm`2ym~c+vMqxH1KOKo zaLASHM@!}~5*s%meq(-rC_v&&)pR$>as*2}B_ZLt00+msA8LX=RFGd?DjvSkf5+D7 ziQAfE4jx61)8vd{QhiGj!p4|MJ7XphVt13vfF?fNi7M6PtiQtO2ILxHkWzJLN!Lxt zAZxfkE|ROdN4c|-vp(Ukj&TmvWWU*&GqIW4D>0T`RV9{@k)e5gBQYuI4a65CThgDZ z#eV6$hh%J?9F#F<;I}zs!|=KA=+|Ju$Gdk<_<6gyK|-U^Vszj0?%jk){g0XXL$(E6 zTwFDP0`Mh60q~B$lsCNtKB|tWtEc0$<;(v`7Hsm%m(-9J0mRN9!tnjWI~LR&^@d574+;$^D-es$gc3*@v!wPej%C9PPWK;;1r0J z#?=V4R+iw!>S1!1;^N{5WFw1kIV3qNE9<*JHxF;ubnni|Gk9f&C_f?Gh{yC+!18C$ zTKwplgt7v~m8kocRAbEIKdb|3OZxoi`Rapcy&zN*^wrPde*MUr@TL0bNPAO; z)koM4P`pIh_^C=(RfEbn{@K|GD~N8s(|EB&$J7^Vk(0gL$N%Mi%j1JQH{%b355lyZ z=zdLK6%v0zKS387Us57)us%`6|FFTw^AKv52!_8|GK2-|hEyTvXID}+E2AyP>KH;J z@F`}NBb%JeDyynw(VcfcLG*hJv$cMSFJh(GMd}zhxBQ}*lN~EUkVC+>fo}3LqLC(9qJp zaFs9#bgI)XxDDJ58hDR0imP4+F~yN$8=1agQ(eu2gVa!=xZW8^@9L8?gm;$DtJ<^Ci}S(8f#1;E0Zn#<=G>g*cTt+53BDii%sn*JFZ)?d_a& z4a9(?efy4$L{p%$$wQN3G=qS+&neo*0_pYCN$@t1B!>m_0XIkQY}x38AXF=vn`Y z+g^ot?HJ4Q>)U^vQAKb}U7~(}(Z!XgNP3?4;qwC!0u3FM3+@ecj8hZfu^`hnxiz#d z7|G2a99FK^sBs;KuV=kDO!J$0`==rt88VcN*@Eav^Q?HxM7_8B^d*NcPDjXOjq}Cb zAr6A(>BEMS&Fz+{*n{7KH^i~E$>!rsl7f!*Rl-B4G#$y6g3oEHCBA=RCw}?OB}nq1 zglK+uc`&cCWd8zGi_9sAxvW>MH=WLRw+Cn0;$PQ|iF!JwEK!G>Z=$SSj0g;{a9ad6 zRJkAZ7tQ@Bn!8LbxRp?P=d&|16}p$OJU?ikBB5lJ66I*1!jt&wm59vg?%=t5JG1+m zjLXs;%FaMG0&gpu-D0mvx`m4`ZoRb1DSn^I5E@``g^|_})kGua`)~Gnkj$|O!<6%U zEqMIGZG(?V0wRpj8&Fg|US6-7k$GrrJSk@;9LT1E^IY|+es=@@V(}>w^|y_vgan7b zhK~KTWo~nWl&tbVQ>s%dcxQ;wNAImtVKPCfDZ7+#3nlB>!0>y{?Yb1F@V$ZJKigXI z11^R4gD*qs3Hdq3e)_I{s_M;>aQ*PA!StJfe?B$C!|KjI227dOV%zo7_g)PCVeTj% zd}NkGkabYYof}H7ndsfxBXuR zw+;@rT^`r7kcO;T-X&zd8teX;(`59t!W-2sos@xn4+MnhSz4_&eCfAcQKIlb$t znV_GT>!jB0iUff+vim5XHSrA>W;Y*ZoSxkJw@SUtkJm(?Z)bJ6k{TDSZNEb}oi)$8{A!f7e$OL% zVMlpyf%qEcS)#H;^RO_`mV5Vthc=F!hW`C4A|NFVQA0RaM5QoIF$FW_is6`f8FQnD z51sbc46Q}dv?ri0Bw#npD=r~1?LuHqSi_94ylc@P-oje%auL6f#N68(Go4kMgHm3S_i}OyOt?eYGyHGvm1MML zPbn{p5p0|lwP70V;K`edl> z1k}0dU>}!Y&#yj@-yP*huIQELGW&rh^S8*5{YsO?~JStTXvm#?(3 zmsX>gpESBZduU+b(a7?ZJLOwIrP-NQ??MCw%H`}eD- zc=3LD6(j%sH?bo6m7ii0d_FEd9{s~fr6$T2Eg-h=Q&wvLDM6L*a@ZKe`G{q;YrhoX zRhJ!9+_6b$>o;!@NK`(sAj!L^{y1(~b%5UZC|(3F*^e{&>tz}u0Q`P7I$iOC+JbcG z%?;tui$o!hwdpxY6Y$i7-U?bdxw>9J0b>mt)!fqJO=36sgv3tDjd!1&-6l>%jgd22 zFf1~X81))~K?bPVxw!xcn)Q~y8YBR&Iv^}ewVe)Js5Q`Tq$6{t(6uG(lj)X0t3SnDn3y6%~S%`eSC5U;=tO+jS@Ao+<4)4k-9v7)b<5%?-{XrcdQRLmt$;-QdKwS|wDrT0+Pg~dGc0ye2 zkFA|kQ_Rqg#E|eIBL(dC?C;;WP@_W0>FH6YrKdv*35h&NxXpnwlth+_0#3osMq~Dh z5`MhjP`2I?DfcNY;zpM@!#1#a7VB4;x~up89;OHdd{P*m<){6~9yj{GRVPhoqY&(0;e_&?nVA{P z?@dR%*hzUvT2embqMF9W7)S4GUmAcJAkm~Y2K=XOfg**Y?bhG&FqOj2o-=X`m>XglgfjmfF^I?O5;9NCK@9a6c_-YHKK!tDgy~+GtQ4^A zMH`*(Ov!@=mkUk5Ak0HL9-$Xzub%Q2+V|@ok>X{>T#DJfy^ed_!en zycV!wy{?W)3pB7gFIT&Sf zst-t`cex1yQKmvCz6AcU%!w~#1S9|RJI&*mVm_+xlBp7TGHVL8?)Y&Cub8aYc8x@1H7Cd2=P5Jiv+Et7vq(mJu$$gNga%ZgE6z=%tjB>~7 z-+LZ|U?0{STAiJtEVlWBcYA^-VHd#ji7xC;#DL@n35o*ru` zj%Inx6b7STwLQj(Yu&`Zb8R_B*kn4J9TO0cFzcWUp6oXeG~Ga@krbOTR5BQbO@E9! zx*naAbb(|*lIV5M)-F-%Nx*I)YrXWt$hl`yLn5^4jz+gjJUMC~XZ!X?Z&71GtmCvxZnozylD2dp8 zz97G|{4}hNH^pCl2X9nYE>{bZwTy=9f`tP_P=*kyN?sOuaVeDKm}9Bka#uOwa-oyT z7z`x)j>i^xrZ(S<$`fP`N)LL0IR-y)#`^oD>}2vE$@-7gGYMa65?hjTo9An(!Mhfj z^D6ZI|Gd#^c|3n_r`)-RR&grUVrWIu<2Hur)z=Q?OA_C`8S!L#-+UCwPhDTV&1hmN zzlx?naODjmim?hq{g{d6WRrfKzut^78njIRCmuPpb8c^TfcWzp8(nMGFq9!|#YN)(-!G+q?tzL`oOwsO^rXml zaLZQg=`mi@wOu6Yo0=TlE^Kog3Dkl7jA$uk6M5)*70RQtMCZx;$p8Hz^*Ww>%8sJg zL>ulsE@k+5oIo;R1~wZGE@4per(|qKhT}iyq#LBWmF|$59scQ|Jw_&e7Kz2>Q;q>Kqkz!X4&qyQLKQp+(19Sip& z(^c6#Edcy+j0FR(U{uujCZC#T$k>Tf%{6;@fK8-6cpR#vjpnFK?cNZ;SDUv~m^%gg z4U8e@NKhEouJkTNQc>;34k0hJTpf0 zB`0Fq1(Paj9v}rt2)8{2Fhm*SN#?_%Xtx6}fg#vyEMr#xA9L8GA^0d`3YQO1SrASs%;3sjxcz;?}Bs5!CUG8gW7>xDk&WV1-9?Q%?_y|BB4#h2CFLw z62kTN@&G5nglxN_-`soibddAW8{wkedOweor~bG=?QyqVQRm7SFE|0?Nl-Kss=ZV2 zB9$xGAJBOJMTWs|c#@wf@dPKrLUq!myX^HRlZ(sjeJ&lWwtMhA*Ad4@RFJ?+Dge3t z9&muSM@!}%lU`co1D;gve8A}ZkGQY&QAt2qb)}sKSyr~A=rmxBbo?wJ7TAw6??gw{ ztv{f8lM146*>&pNT-u6Srx`LO4P=M8jgK5O#P?xNOR`y0wDvQ-K3%uz@APo16@eiHX4rgKhi7jQ`&qK}T>WwyxEIhx`byuM_qxpbe%&AXnwY5?sr} zR+*$o@r(l1p7K5Ik9avg`e6ae`q4MVVC*?u2|=Ko%7cO|wfgfT;qSx4+L1dM2IVX< zaz#bO&s-+(ceb{{mqQ9nm@`t~cq&y-p76ULBn|fYu%<%#I26G6yZxK;$Q%xn8NO+_ zC&MB|4?m!~@PvT2dqtNiAO%K+Y(TqdIBs<_!Mm_=N5xBO{$g?^`u@b`x(+ z@-To&z+=bjiIdmV4jypsZ|Px@;!cfoDJ}u4*%cgzQUBc$ycsQ9fZ0Xo2aWS#M|Q8D zc-+c~N94j2Zl{Jl*y?b9UrH@|IT_s?X$uA+EU!gZZxfiY_STq_jN?N~yxs|=_1x~< zdo=h-*5RIx1m9wdmMtnA-(i7hzDB1(Z!_Bh+_FPCg3=f5z~>vBfS8CLMNedfgH$Xf z+KLuaKsj(HobaSzW{*DU6+OYn#RnQvD|?E(ak7g2a)(wk;Vv#wn>531v3jG2Bk&=K zB+{SocfgTi7S~&O!9{kbCVg~T92+i6cV_m&WNiA#BaX)s1(^q?G1y9CGo7|PM(OR~ zxm5D=T52h3P~6TUlja>ZBXK)uvP2}fe2k{k@~uo3xqj9C{d>t`t=z9)(V5k8D>A`!25TQgYTuE#?Ph$w;%^^+2042qs?6DT<2VzhXi%}u>?3Lb z?#Sa^{L}(i)pzsH)5s-4-OOAn+?@!;Mys>Iha1p2Ysa~pSepnRS&Ck0k0IlGsRT-e zxK>CdSvxcOXit+u$5TMHz0vwT>taZJa&p+_runDjvCKd}p!$)UlXTG4iIERp_DFIqZg9?m|mr=&r$7IstrIZgNHTRSxPE_F= zy|HiTXM@_u*W;L_y?X7;LHi z&p%b6pp(h71iF>KVcC}xQ%s@14qgxnTs}#mT7yx8QE1m( z7~jMB`@RYE#XdztL&HWvLD2_t3JbT>K7S_DMgQ=Oq@9wHTk&aUl)YSg6#C<5(f%DG7=dwLTY>!*+o*lV0{t~Xt2@v7~8$38j+Q^@tkgUReq^=s{J z9H1}#VxwIPl@^1^pV*j3qAXYtGV#Ig<{nY`-_hOCBrs^Oa`u zgJlLy*9QxAGk#Y~9+VPy$6Y_x`fTm(hXqoVV=1D0IEO7=Q#*{WhphR;opyf}{{&=T zI8Juff_Epq{aGA;!Rw7!P2;7NDynu&sjmq|Mn-MBsz7vw_YeN&R{yDkifs`b!=)B}MOhU+r%i2el}qkQglPt8DYMbHnsgz|g9>Ke9A-lBI1 zCui~6YPw@eFf#8RM$#*q_PYL=T8`2d|#3Z0Ne5j(V zEcT};EFNobImxCXOh@==x1{{=Qj(+_UjacR5a>37Ey7%3tmbYx%9Z6T5fA2fu#e1#! z4&xLMgUU>ks>NC&`*_qHs=1p=wXS|X?b^Tu{%j{G2n$$g@^B=URlmEtIV+k|mL9=n z7`Ci#&ClPI06s)SMA&wlR+gj?VE{gt`@;QPSe54e3H>28n#j39lYj_(oU4qaj{#AS z-JUz{ySkGN8t%U$QA*)(i(=(dVOBsS;AVjjUTrSE@87@QY)S~#VawW(adCEOxH}mY zzXgXlnK2gHL7IR>fr;6*Qk!cf5?Jp3#YIUJFg@1?ukCoKD=#-H2!C8Nz*#7JWcMGs zPe3!yRPmovSUAdlyxUpd+}un=C@y2d@iY~ zbP*$Iu-8N=35cbGE;=Bt$^Ag2-n2Vn$z##E*D$i%)SbC2WePK(XN5G!L?r-0$4535 z#|jCC?~xX&gqFc&KmQ~AE}oQ@_R;maVqAkLsS^6P{(V-a4u)|>O;GTx!P5ZHd?S@ki&!LE5n^R6zWt9X-39Uszx+*R8f3wy#^doZ+{fF12xV z%pN+s6OUIoZ-YEifLG`Kses(g2hm~EK0s=mu#ipXc+4pqpG6m0bYt1c0xf_8*};Ds zvgwxNPE6izQ*N(0ixg^5)M>R{H{ZnQ*xf9K0eJ0mb@;*wieR5KiDd8ZkHBmWf{*#= zVnXyNIfF)>o>VU>llK z&*cKfLc^Nm0mIJMN#{=Yhp2-_6R84?`*?)nlD3hb+fo;!bOj%Hx)V!&--5zn4^8LM5dw6Kx^kTXnen%V&pFjz4o^*{ZHj_ zsYTxRF-1BFgySQx+4&=Y*JwCYLht_+q|h*!vnc2L#< zF}A2b^u3@fS*v`^isyE!l{ueE6F;?3dV%}FeD|5ykt_FED5+r_9`f4suT8sTp7dc0 zWGUpv>*$j5*2cY!SPAh_IU-H_BKemjkq~UXi!Gx4_rVSO8r`1% z!>PO!NGs#t_3IJ}3JP3}^-Jg!2~@}5VE|gXx^o>$91WW+fbY##3NHz}9>_;)RUUYa ziP}yM@}ICzq2}YxO?6dx z>hLztPL}}YZft02>t5ci1W$$KneP1-?H1?p2pVww zY3G3<=~Z?zgi29z8!=#fLg-mL%}|ujLm!RQe{b3;rhSE4%f$fq!^MWPT8AZ(bm%4f zo^*%D(!9_^4PZhKa+(j80&-%hgf(ja35zUcyf^*5+RnVg)YC^wL4WSKFR?g&dwFQ3 z@2_LhDAlYB&b#JALW%M-+uEV3{SisbUCZHh=`6wK8T;6t^bsMS0YT&?=>OQZ?sDrt98Mx#n`M7#FO6&ZBlx>btlDd?}CD&wm z6v=pdD3$jLvJ2J%mM5e}z9(xCZgvsLj*E>FA`}VuR3^8!w!*c`-g-d^kN>~zZjWY5 zjLMO8fzirzRY@%)q$Z`rJ;&;yRPCeE_joOak5(}oL*l4ce+ijY#nxh*A08fN))?)0 z2dnHCYVCboL(HAUOKmBbjW4n&IBaCtg<@`la=)gRHyw)9*+$G5cw|OFx56>E3_7E~ zaB%MChN=v2F}rv!iY||?=8ZBG8OhAo#44IVoZp8dC`y-H9i5GDm?#3VXaL@SIImyl zkSUFa%+Y+@S><noMla4`WGP*;|3nY%VyVF;Z-7ZL7Tn-1TSY79-%7y9vXXz`~N#tzo?BMqi zbDkGixHOVtqqt;PVJk*Z{_M}(dbNqYHMk}4?lvR4X=3W#MYeE^X6f68)4aC(14rrQ zTSxF#|8yYfxx~7V>X$bqk5r{qFPb;ilA7mSkZdg>&xuSu;Qbvfcz=Hw>w8HmY6I10 zxmYXhyT_8zPM)TgBN@7Xp;pc)h|r?o5`kOG3SV#8pVyL==+ezRGVRpi*m!DOR$8Ai+j*O&Kkn4HbW zge`^=ktUx7*-4b@>@VjBxQ3MUzPta0_IriGz$qZ$F0ZCG8Z9;os)BejZ7PPOz0R}( zf`Th?adEH3HL5Be5Bs;=#p2|Aeec}k74i}2rY7Fr-cyAt=>jb$J(RI_^FM4fp%r2& zJWO_yL5r&u5VYkQyiC8@lNiVTZK=zaEJ&W%uu#ZftH-vT!k3oyXK%!7_UNDMrNl~C zRiqcRqS0Y@W+a2D+-5!dkWCE_j*M8ckzkH;VPz*JS=?-=J8qAp@t5$So5S>V+v<{* zN?PtlDpd*SfR<4CqO8F9t$0$UjWESZoeX;Ew2YV8AG?z&sB8Ht<4EPrh^kYU1L^FJ zPo*cn%HeGUS(uyi!LK#(Wc&cyvg&{6UpMUYt|^)i6tA$MX*E8t#_BQoB>JhU(q^*o zU0NX~d6@9h(o)N>*2(nTuLZT4%jF_R=Qsj1Vn?`A2b>#3N3(yQeT+w8+=OvWLTagT z+k3N~pu{2EekS(VO=>ihEnq)iN*9lUVT(iCOCzQhf{$s-5?m=ygludQ=>7sJGgUe{ zsFRowG_7FJk2$N}>WiU%XZqHFEZnxuuFHcR)%@A-an|h%z@Ixt;+s(yh1xEvV_CH- zM;$Ft->WwF+!1_NEpamy&WnVTYG+lYQ*Egde{g;jax#O)t4}%$mS_}1ohS$<{Bx+@ z6ea#w;Y|~*Gs(iik#%xVxAF?e$;mNxiR%O56=lW#*3YZ8JL{c?;*rtbQ<7OLQ++Ze z800b6NoDT6(RCsE+AR9LH1o?(?dafD&j2dwg-=i3B(4^1oG`Zi-7QgTAN8gGr_z+{ zv{33t43lwbh6N;D^kXy06bNOFvH#XDPBs|#;{cDyPB^8)JVT7WDl~xR>(^Y}m*8W^ z069k(f7rZ4hT4RoWxcu@0UO#mneI8cE=xDUl1b4?s+Q`x%O;D;$x0MUQGm|;?zUvi z^7APDPCPCmtS&L6RahV!oOUdebS8LffD&2Q9uReOgILpsN6(>e-sJWz)_9$^|!(#`PiI|icKT%@2S!n$~iC^`H;xaQ9}TL zGA-(IxaZWt`9xReyr=3Q#hSTE@1ya>sXkJPO+;+mE+g<0m^FXS=!@S2kMbo3e<{8+ z+a4>hk|L0de-*Na`Kg}ADA1MHobkcaoo}xl5Ak8#eo{+^)c<)Xz3VmT>39Flguhk7 zuV*E0vn;r=dOv=f3ipTO^weMN^Cn7-z-=J`?wKQ}qU7stKc9(_seUy;PzAjA_SI zm?n*68O9wmMo~Z|_Ya2MsuWj9_5E^W+v?xsDx}+gU5gC(3 zYT*auj&1kubHjow`!i*K>z2Js_LKD;PJGZ>B}wv>C@$MT`}uZ8xjbj6-vfCFy)r-( z&hOn(ZolEgQiI*}W*okX0%YH~CW>~VQz}+ajaiwF+Z*FQXW-_Sic&h$sz-35@+Khi z3=1Ept)29SjlD%+F_@SpA7JK4LQk=^do&fdO_IeUIG`%F1QAU8g)^9h_>GO^7j&YQA-R=gXDU)FGyW zN8prMKYEEa$R*ja`-=~KudrF$K7Wn$Ee50C55=IJKp1cMr4*`0nxu0xnM5{0IPshd z+u$c%&L@Pe4inP!DIsPDo#cclo#^5YtvB1kM{VGvI4-cP(4|TO;C%>NE5BSjXy#RS zqVgbd{?NTnKOfFb-X?eBmc_=j+}^3ZMpspGmpj0O5C>iY_BsTN#Y zroMpHS7d~8C2}%|KnJ8q2c+PS&J2sZ1|K6`%_`V5QMqNq+PZ&v-;FuQG%}!yb-p4) z=>)F`DM}4n(vIaQM$DZzq6Kk$w$~M&|Q)cvmKNQpf?|>%2H=K479SuvnvyVDjFGmsnJs4|~FA!u? z>#*?RR!A7fpVBbm|2_5&DC|95?G)8j0*PAF$C;r{Zs>DGq0zrDYzRhzo2z@;tJuiG zobdwhMM7V4hd>*^d@n++%tS~QhEL(KzZ!Mmxg=1W?U1fu*_Ectjq_&aZF?gL4`2)b zZmFZ$m5lVY_gLen_tU6ffl?;Zw#N<0vZipT)L6P z(~u(3?SE@A{m};pp#0S7{P(!?6}@PpTt$DUgPe<@k&}THlzOO|bXBCMX=rM;h|lt!{Z zc2NRllRrjNdF7$22--0J~o;*yQGP(zUaG}CvL$<Puzw1mq3m?Z>V8Dl}f2YM0P>sA$-|Zt-=bu)L9e%mF-7+R_Ecg~;CNT=*g$9#=IPrTLtV~h)at8q3W@78ujVVxVQN@&#%`@TIg|!kE=dYp#jK023V zy$i#p^b-8(%$&k=1!Dl!IeJ=r{yJ?HU0j!yN!(4d#B|pUd*}cBfG@R>rOenc=cQr_ zrK@rM=5XC>y2!PJFlN_Je%mRTnbFP7VnjqlITaOnnuW?z&d%J0s+kc`0*Gxx3VY}> zt!&=Or=}_?D=YK(tc>2df1YlH;S9NDA8-0_@5IE!Zl=G0C}`uy!#Uqg1(3qNB00@) z869ve+>_32HXJyXK@|@ENlt?|19rLjS`3%mu-s24$qe+*2`pW;I5-kF-w3t+^kPT9 z`QUSm=C=%sP#x6JJwsM^ln>~@_g9uyFgxAshwHXeQ2eCSt!Iq>7e3hV*t?SWa`82v zRPpZ13t4!AH9B#d3#$3Y-y)wKRcJO*oh5QDyEi`mms0CCvT~r3WpI0a1Zgh(0(;@` zwmh<#-fzh3<+`G++w@z%xG?Q1Cwa2Wyg71V8elX}Qjt-R9@WUhss16|;ca69OkedP zO2qlD+z^eCVStL5h`{4%v^7&?XXnfE@V0s=N#6mvuv}-gsh)}2{QIJBji*L=ks@67Kek{F8C z=>*DC81}=37LbaBsi+e-U<6c5&ul92Hf{|uTbHM!&(y4)uHF-uu|&v!t+wIC3U<`T zQqYw7B>V*M4$iOLfJS#w ze+sh8_-5mP8N!xf;d?wBI1{AKQJ_I?^cs9!5lHvJ_F066$h{U_V*j^SN=hq?il@9; zJ2TJ}1}3SYG12=Z)YQ+*>&9K%3#!9ULPJ9-?QCgYF?X^kyn6KwYU~_wW1W$!Oz!Pt zuJ!l#)7sX|UsP6BE-Vp^xB67|XJ0uR^y<_(eD`B86Aa&K+OsN)Txw|ef<3(^@&ud- zt9Eq}lRTz6HG8J4sBUZ|5x7_9wvqeDx7syeh|FocF?U@h7o68(iFnnoaBCSn%|sH3 z0*!c}6b!yN49~;=Cty6U7mGy#8TcdQ8Oj{_t5igfDoI&YP>#*A+T^)ChdHb$@IfvC zAwh?p`^!HD;vb|cUoI^+xVC|=Ev;X_{`UVUv#y>6jn>tf68)eN@vF>{Bvzt`BdGK1 z;ozWHdB3n#65;o`V4tu@M(y4X*>A{gxN}DwTN^v?1%XKMlvcONOEwe|?%5fuj+mpy z6BjQD|NnA3u{8;U%A9@2h0tFiaI|yt)#0l zdWIh`k)C9{)L8Qz^tGn>sG1xm<8eRW<-!B6x-K|qp7En73sI+4q)y&|!QZT}nwmMi zwe4VE@HxJE!vD}rM?QG^Ny;lm&atyhz)XnnsTVwwD-{DJO1avJDb5;4(1AJnpB!14 zKy!SUXw~&@xY>~nR$+&6JPJT1?t5Kj+*+i})Wp{JpEhVkxyo#8Zn=fQaq4^7WReid z%k7E4*6#cYAA`}cPkcaHjVsA%e`fl+P{8bl*?!iII`pY7BW}%)8Y!rFWGgJxIdhen zxO&2Qc*9C+Z0;PW=vZ- z(Nb|u?=hyhgCvT1@#OhvrdOVyiZoqhwQ+e-w%u%nvkv!PyQ}-3vW6`EovD0_4u`I! zkL!2=Tk(qoSZK;od6i8|AHHLYyv-2wWzW;M{Rx%{F!GpL#9PL|12zKRib0V(?&tx^ zz^MpF(V48%n7DCP6(_%zIxb-X-Gn@(80IG35F8Hv3#t62=~oXpt5#ijXC68&d98+Z z4)&?`$EZ?xIW`o0D$=YMq5{Qj=4<~=I?ar?#fG8MW6-H8ulF-DPV&@F@4YVHz>@}L zH*FnAw~ycq29qpVaSaM|n057})6sQxkTl#mR7ACVj+INGBi;bdbD-)t-)6`~p6nJc zWJsA_5b0R5HmGOh4N|K$nS=2w8Y6+-oVZsE<2{SGwuNjkI71d6a+OnwMFz|%(O#^@ ztSc<~ak;|8ECM%IVGhbg+F*+&VABy(dPe*@M|$!qr*3^h&vW3AAp>n7;fmq_JVbR; z<+CQo)gtLItZj zm|O2>%tdMR3=F6VEZqd8hwmzc5u-xxe(rtQ&c6St%A`*|T%XFvq9`SUdyTRzee0th zMptCH$XQI8lmd3m6cVTe`yp;uSNg#2%y<0-Ti47?<4KmXaQ?GDbOHL)-}P^u5iNN| zWXrVjNG48Vad|l>29dCZbTnr}cVk;6qiNjS-j@u)=swF19@lJRl;>Eugp^aZCGd>n zhub60#8(Av^ysGKvg)j0m`RK?)zwO2VPP~h0?Za6;KRO6Lj};&LgiI9HlVDCrYn~G z>ad1-w!$Q@N&jWMGiQFt2}yue?iX$ac-%O0mP8p&9G9n^J(Y~F`R0LpH(fw%m?mjn z=-TFpI~vq<=`9<@8Q`__pQW0%!a{?_nO>@FB;_bTvc(iu7f6+7gDAn;R9`; zyzx(AdWV>2_J_!MyYW)}6)Hq*tM6ZJLvUXM6-z@)%nOkKt@M9p~txWjcwu=V5&GteO`sm!y$ z8?3%#j3&$kMW}uYFshK_do>xHV8}fa{20*J#hmS1^|A1eK6#i87e%z~8>sLj1hRY% zh5s`&Tz2JCSz%2Xl<+!i*s+uiD#ZU|P9Lw34D+NAI8yW2dHZGRU5XMS;Sq_hGCdH& zMW8}NLgH}(n)>+=5)!K6NG}LIv2FbIHKgu`OSvqFWC8%P06|)N7~{P^VNc41$X9mc zD#l5wi?rk7ST(!3s;xI^g^m`wZ*x|plnU#6QAL;KC= zpFzz*ACa91h&a;-ngUN;h%Z^?`Hg+ zz}n!N`#~XU5}h-LS=_t>E}{GH9wMmrkGmNUMpjL#n6|2!QdZ;|#lNWRIYeLkJ-srCUazQu0Nbl6b3BB_*`5T?w+b(^J6$LFKU^Ffj<%!L z+h6Gd_5+$FQ}3+St>3--I~jsO=LY7LxVv4W;0Q+ym9v%zq`stqMG>4C&&y!(=a)7XDfbk4x-AkpU9Bak~fpL z2V{3|!*ZIMD5ImJUzbe5WV4~!0c+BehK2@+OGR^hk4m+C^voc%M;0=(9fp@FRFD^Sw4@N!BS4dW$b@xJbSe*Vi;P3jgwz|A~%b49X zmT4J$ytgPbk55Ud3oiVVN)lpGkcK$L|IPbQQaJpI;6m|I;<2u;}9A&Qjx>(_V$sjcXF#O-a| z&GrX*IBCcVosG#S*-DFqsDoVBMqP9hrcdL^o@_en*hiVrV*;LzvhT)T_#=DvG##~y zYC`!69DrCJ(Y(4`SZCW)+D0vwlZBv)7ew#608XhW_!URUMlYED&(H|R@h4u6WuVdH z-)a@!^P_U&7a zmL8)Qntq`Kw-ZfNvg*$h$ySXJwLP?x6Y{IH)e$Ck)vvlgBN;jFz*v;_>@GzTpkm#% zBif&@pMibYjisc-*fZ*OhcSH*W1xf5!=eY==6as>^0pT!pbc@A~11!6GF z8X$+VVaC=rg*aZ6NKY}D_b**hTX~`V&Ca41Xnb5>H*G_8_Xw1;Nt1&rABfmDHakmJ zpzE1ns`X9HF1Y7x zg;e33MR40O}u(4m}!&rN4i923D>guG+>qOl9w_Ngzih}9T%iDwp z&r{r|J18O%>v=9NVsQ+4W8cuqmgYYisZE-we2XLJ(g8u*A)02!#PJUA~^^Vp(hFZ zV0Uo!Dv9>alfF1jvWmFtNqlxwbbc&0yyq$OMzXRLy1+CU4}FKva}5}ag$YDpgCi(Gv$M0*_V)IIOiWD6uM##* zvvxK>;g~&mMRh^J)^JczP?=M6iD9|Cwl*nC#LIW@-bqHzdbiMsjY_kTAOS;`)zW## zmkW4={{a?$)YG4LUGu&Wa#P_7qbO@Bb_76}j~JC@(Dj9{4!*`PI`K*mrm8i_3Z$%c zTSub&h;EKg!^g+Bn39+{={d|lBWCGZWMB&}eBDWA6SJXvsS-v4=^z?-AX2n=XKxR| ze~=EF+?zMkUnL~QlH&FNJ{j%mvz(5uOQWC9q|qzU^y&hsUsAwzLuesN2Db<0h28cy zm67dl5WPr@DJ~R<><+rTbO$6|TzH5g+6j6gBfvw3RnP4TsNo@Rx-^Wg$h{;3qbm*v z@dQ#(&}O)bO~lW3!0_S)H87$#dwH>-fQ|$hB0JFs42CdK;TxhH|FM2Cq)IW$soLr2 zeubVU`x#;#W+MT?9ZpH2Rbc(@x031lcXaW1nQtUN?<2%wlav3^;C}v;K`^1VTE)?! z_cFNCwMBp80&GoBnSj)nnmCTRSS5rVUvn4Q*L&-TeAcKGa3B=0lO5i4_(-W1eD$m7fCw{4k z8ub+T^^!lzs1&k%7*rzNeY}4wE!}k*78bVk?AbG~5gHA+E;__qg_yFa#s;H-3TV8? z2eqbN$WNXp0jFeP!Vq)u@yENVZ)%}xmcAXr8R5JN2{KSXhOUN&St|&$71$vg=!$Tt zaZe3#9V<<^lA|(xv;-V6h9!`n!|bR(21HQ0%G=XLA|K<&p*V~Est)M;Q*B{k(QH`W zE4-7jA+U(n>rAJ(qBO!bXgZqp0_UJTeMs^LRnw3$8lf*``&NbJ9_7^=Gyqfn6$x}M zf$X+#c(}X09bkR_yn`!BU!{u_Bny+Wuy~4!iW--mzNc9z;gqBpzPj{?W{esz3Mf+* z9f0WVNkGUZ0rdalj}SZbAJ6%}|Ni@zAfS=_uRmE8FuEJu1-uv+tFlk58 zTeDGmV1(urevBc*3`KjtCVQz0MPZXQx2t~3Ar|Ei@jV6VeDRWTVDl#i8P!Tg&jhA^ zzTTlvJ7^u!8+>=ab+RU_*u2>+%~o>cO8oB~Z9@(6RasbAAV#u`nHghRT3T4r6jO%zZjXq_`7D6t55%=iN4F zA1G&PHh3W{MerW{f?;A}RT6t+m&P6R&@hP==2` zl%X$V+?zusu0N;G{Pj6es!ou+;k=!t@GpJk?X;M}v|Z4{=x#D#Or(o)6XK5q%~e}5 zLOx^d5_Ir%3-b!NejZTIJ;CuEpb2v0eAP$isTfVO&s0q5*z7!{ef}c0^)r2}8p{`( z@%L$TrVN!)mSM#fDsQ_<9sTumb#LN@69z6v!3S5JE9&2oOK{`0J7oK?*u8mR|8}SG zKZ#&=1CUJ-4;7E=@u7wj3pt=|(YY8)>?hTzl5zB+iTc%*O)S-oGkENz2#sS#Tz;#U zZKMEpVf^5QpZeW*azG4w)p=nBjx2*x*0iTC>u)lyoKUDFgB(xsXN!39TxRUE=T>=H z)A^IjdDiM>os<182~p~3HxOd9>3v-Nctr{a6(q(;7q&n0*_p@VloS=9ugdbtx?Nyn zk$7C}t#?TOL=sy1Rm1X>zLt~zjbVR<-4jW=XU{OItw!CkF1yD07UN|hpVe`B?}1cL z+m6s7{g8)2qN8Gm0z9z9g$8^jFQxGl`O`tV+~Pa&YyB3%Fpe@VNive7_!2=9|MW=# zc-JFuczvAZrq&`#h(37DZ#t`xyQE5C*aux%psi59m~8x`mfk8pzW9Bajzm2}N5++X zDXr+?y!<wnVaL+kl>Nkb=P zg7HmBg)PZL9Mtp4VbRc>`gQS3;<0IG`eUl%=eVr%!to(Ix$4lqQDtveQ%iz}o4IBE zlC;LGLY9g6ID4V|wP-dVs!?%(`kRRX*TaiadcHCwCw1f@ny8BH`3Lm&aL|351n=I- zCG+CL)w0j%2LE_PtMg8t8uL?xWfo`Q?`LK;)HVqpiY(R#X}wOm3gq(sgj-E7`3j}A zPTpY5V~I)$#rNP<0YLJa>B_SA@4#X&o4aqAmIkF7ec-C+11)kuDPn7(WF&j8;-<+= ze`U`5cWbYI>nSJS{l*yi2heMPR9EJS$*c)b(eJ(q*Fjl@1B1r;$K)tj@L8BKWvMND zP`2mi%FWBRkwk^3GYN>1JWmE}zNG#tyBDKp)MCB%g5>8%evjq7tf6UDUw&wvkEziL zr4VWEM4{Msaz+Ou)=f7jlxY2(U5oW5&$=OEiifMvpxF$Iq2I+67@*MQ{%y(4Ag`h6 zkt4DDC5ib{FgrKmzGsN*Np)zAn)TOT*Y%E1suMf}-7Yg17MC6eG5$zbpWH}OJjBW7 zCt#o8LZt2Q7vk~rclcl|Xiik^96&hi93xNly7IbKf~bGXS?!srS((rR zLP`bTg0;Vl*SYHhL$B;SHD?NL?w4^N%cp4PO0>(Fd~ImQe?PrQXI^26i0?I2PL#Rx z+~?&}EPUEsw0OCSc|`N@5MJeY<#)dLS;uUDe=>OhVQOCRwe|#%BFNuwo=eO^^Nd5# zZv=J>5lsp5e7s&9@jnpL?u43m56~eP!Z6->6Kug#i6S15v^|Zc7MMO}{0LEnQ;_1; zJb#9G+L@Z}01c=fi?_fODzx9iHich}!>MM>fhZ`QDO_%WLl z2c~>paS&gD+*p{w{R!|aW+1EWz52-!EKY1xspBl9!(7pXjKt+*{mf*wSiBq^N4+$9 z*W8LkPzUg}ih2bjyLYxT!sy}Pi5}~%V|%qy#H+mSiK92mmnjxTEhpiA8wIV?;y2Tu z$U@JVTRlu;dF_MgEZ#?54}=?fwpq{MqDe%`*mo^~@Vc|Ku=}?TdY$^-iCZze!%Kpr z=?Q1H33L}!qx~I72t^8vpw$sRkCjqE-MIARW0K|&CKq`~k0^Kr4mR)}rjeVQqeyi8 zi^F4ij8{WF3Xe^`!+(Ep8|fAl{mX3NI-T)mBse5rF)sE}+ z@9-jUeWPR){v+VAafhMp?`%We{fd~Z-4G1i+RlHv+AOSDVQR>|{MUuEbs3yEfvWl{ zyYfcSw*BwSa2#{eKatCAcWv4{gjyI91sEDkz6OC^ozA^9Z5~rr=s~v!EMce(NeB!= zz<*|Z{>X#s1#h{09wUrSv3NCkltZZgy=4c%F`ZCW${5ifk2`jsfR}B|<}XPJ@G#;O zyCDOWD~?cvE=cfNr*W9-}_t5bbWlWl+D$5uMlA6FMG5C7PimH zv6$P$W+R(oahqct+Ug5IhyDk1mgqrZjzS?O9u5CUc8uTr55esNsB?AwgaY~L`yG57 zZ-l{hlRj;;h1EmrRqpu3Wi9ja4$^I{0?D-U*GKsA_1>N~_JZiIk}z&i36m@att;EU zNd)TJ%4mOUi;}<*0*}t2pAf^^p{vF6!!Jv50!+ozpK&&ts(Nt$Dsz(LAy%0vt@V@E zO!;qO!?jFNNvL-Ru16f7BD+a3r2V+~u^D`BCQu|s2f+2r*eqWK-X5bF@&0S!fI*0m zc6J6BLVPAx`_~x32p}kcom&3-ctVMjm^Eo&x3;!+2)x*vse5tpOB1U7$iGuW7ydqM zI>OQ29JsT>A=1DY*nKD~9LhrDjOw{o$Em6)E}X(&_+s;F-`BK%h@teY&iVyYb!f+- z*&(x%*mX$daX~rwu(YM2*Q`ahE}dh8XMUPriXqVk0n^Hd!e+`d!XL0<7u;`2BaEIr zrOqd1U>ih%2K^w)6)sZRtgQFeY(E^};o;HCeEg3!X^OM$&c%cUT3Xk1(F=a+VQg%y z12H9WA0htE@xj5t!$h5E6-(5ZrDaEjv<7hQM3S(qreovr_DWAwHK?79V|)gk!FkxdED{){B@BViL;^YE))5(x z*u*wMi6}sYUs}as4uAS^vtO`^tgNg|LMW?TklZft9{= z;keGENY@Y0^V@tO+w?p9@1stqlRU}QqU)#)P=9;aq!u3WFVk8=I_pZV=uTw=GHTYC zH2T(4^}iFYNf@>n>+pEStZeMQAVT6rc0g(akvkX?}JL3BHaClO*Y&$Gpg~ z(W!E8{d>D4MpkZj)??LVQp*K2r{}R`t%zl)_^kDG?j0r;CnRW(=U0p}*lF71>z*#` zEE@=ol$hWIj5ojYDqUO*pf|4PJBPqD#zVwYP*=$x1h&U;xMXOO*^4T6HB1O|M*7i{JOANf!!!> zhO2pv74Z4@lrTtB8K|BZ*qvu$ZO19XWbmh?A4h4hp6S*n*R`}{mVf?lhh)fzmpu7{k@%p zR=ilaqoRE}Jnb+8m_x?s^01mx64`%~9x0zeD?9UQu(!NWc2l3|>6`i)2Aw)EEp+_n+pCuBFT*WQ)vE|ApJz>D@yI&_5c+-`HNuE+e!#d~|Y;B~hG zD3`>xe|?w~E>2GMYs7@yvcyP`YsjY&XSnpp=zgi}bxk_2F0wEeeG*xU=ai>n5rqn# zrulf|&T`g^krFA~RU5$75IQii^?^qb);h!e_CE;^bNs$T$J^&2@2IMj*Qm^Hb=}692U9Dez!V0su zXcs(L^+-iUTfyNgy81`RL(4S@iDL`NT*Su-+rbibKL9(lhl-)IvnXl9qgf?p$P_)y zz{B0&zyI~_Gef#@8+~z=;SXsiVjp2V$+uW$74?bjEr0Ys_?%PhDzphP2T%0bNC^K` zOikpRA21iYc+`r~R6JLQ4RBmMAr)OuhTk6lzQB|&)2;8iDwlA}6xj736f*p_|4PgJ^S`?&6vc{!0 zr?A21`d?hjm&Mc~-%eGK!aXFCtrOeB{AAv?JPB3F|DFHe?x1JySRzg*C&4P;%XR&7 z9p8f&CEANOx1#>1ec6YNm*Z&u?tkWu41GFOBy`1noHcw)P5A~9Uw#(+50-J8 zUP8J-x=TR1y95LTq#LBWJH$(OcXx<%Bi)^Xq;xlk2#VrA_x=90kmcgmbLW|vbI#uT z>?s;sAwr9#N2d(JZbdZAm5(*?0 zXklm7uNLaV1n$vmv%!Mb9vT`-r9p`rrS$pzZkSggf~|FVcU5-yncnztG_fAM0uJJ& z>r~*(TqOmsoeE#;SIy;?wgfq$WW2P7CNy`n7Z&s?(Ft1nV+ZPOQAN9E78C8nS=?f> zTATsuGrn4J7mwl_z7`R~7VDWn(9L9~nE~;6E+yYZ5X6b#gV2`(@_?_$T6@v^ZJ;;n#(Hq|Gmk9$y746 zt<((T#4Pf6sUM@!1^)>vFAOzDt;VSDn!ED{^gL2@SD>W!^C~A!H8H9bB%HLhITWwZ9rxf&XxGrt7q{`hiBq{Qd>)5fkU zdyQp6g>Nwn!>XxwR+IVp_i6$yX+QP%c2L0U{;+&X9M(f9)1@CD zmuHy)|HPeDxYp|^&Km>F&%xBN?Tx2ZNTQX?cKG*?I7;SVe29RxwBjQg;cORnX^BjEfVITg+t9g9|TVuJ=|2_lo!mu z(7jZs982<_+#|DKGyki6KZ`c%AK!;?>JB;T23@X>bTsG%q$535P1KT-#A=u(`N|s- zCyIoSLmGL1UTGx)NZ@0EufM+F5<7%igpbC%+6yncJSr-yvhsNa*=q*r26-ipK+n2? zNU?IL6LjJpFSu&lm$-f4C+lX&`vK+84}mCj1fA`#eZ7R8CU!ck)bvm1zf;3slR+{d zkqChxU79z|ut$QtM+Kf9rdpl8`4YBOz5h8z)XLzECq@q44%|6p$q+T8L&#f;9w+>z?TSiVChPk!kXCnZGoHUuQD(=qhEiZ< zv#m9JYfxqt`4lRjq&e^DE%xc*_zL<(mPHMPG(0egc18sdjnf)}_@O!O=1ZYFvwpIP z%2D)E^9(!hkABAYwA$h~jXI3hI-c55O&_TtN*$`Ou)@`I=yKELu_6u-)1i124F7j6 zsPGUV->eYyxh|a1I*UYX*Mn|*b>dJ~wqM;W-`WPJhBaaE)oif69I^SgY~y(vPuXJC zT=243cDSE9)`l8wbm}#+)94G(4fZbJdRuCv%lDRGUYbyJwxBs_NQ%r>DK5MtoyDvo ztP_Jm%ucz^uh5+J=fOf8g(>PX4Q5q+w8utTk5X{Cpq{Ss2h3fnu$AwV(D9dJq(hFx^6?aH(UZYZsf?zR_gT(NxZ z5$wj0I=QD(JifG>BnjUcRhQU=7CYHfH`D}UMy2NS7C+%4&N9G0k5q4}K%#eTRrI++ zY5(n?(aj}h2PosG1iH_)_!{brvWj|szgs#Eo6Xv_NQYv=%q$chul+u8t-$pq8s}hk&f)O zfhtQIq-G;3XNez&?~MQcn0xG2Oo8t=Qb-Ovd9Ts#Sb^5;db7NwdTIq*_N5 zrafjZ!-NG|<;91x&|@_w0UxpnzkOQu1nRAlS7xOW75`+pA> z%f07Ng#;|}sv4CToy%M?hJWvSFPBdjuRa89Z`sAEP%+;rs1=h#{DYZqyddRUyeOv8Wr9I<34l5O7hTOjLdwaBa-#;EmZ)}#;R@q+)^M4eG z^$A=$iwnPRrSzHQd$qar_XSq=6k%`UAw?zB?%U== z+&=nj^A{bAW>HJtBv)5bkx8VLSBvviwlgYk^Up(A?ao)v>A4#o!qEwSx9fAm)ZoXkqvyqCQryxjpKzzvhsC@E4zqxi*T*p0dtBAjkjEm!o3;UT# z>RlUk$X55YlwxVC@_k_I@-kmV&icz-x$t%9sU=C>v+O7owVzZz`!n;p*A-kzSB} zaj<-fxuzWO4}B1O4>hDu!>Qz0{91K!>#1BPSK*qca4DwU^m5Lc3uDk(ME6%-oBgT2 ze@?)7rTuxdZiWeJrF@@Ypuj-8Q1sTB)s9%`J<5&04+sJDQj#Q<9O_$NHuff=A___| zGPOtXI(+7Vhcp})O`5D9$+{n}aSE2g5bbz!R@f^%iE;DNWa7`PLWxKF7L13# z7ROT2J{w;4%pf6QW}kNa{E1RGBX55t0y#&#eo3{=1!wpYc7a8Z*Dl5K9DC!xm$cvA zC0 zkPOlk;tJb(5JMr&k;yWCB+5uldR1iSH(qgu>}eZrC&f80EGp>VPN}@f65{gL>stdo z%f_Dbf3zAJxG0go7XO*b%Kz|EV!=cDSdDG~EeGl5wFEB>v~C$Klt!{oP_B1r@$@WP zM$2%mCWGViS^6Z=zloI9F(Oz}>b)ocl{_OAS3XKqn+#&Cgw;6N=ihus{y?6)bfkq03ZjU(a?&5C8$0?YFor{Oh zHdz4F`*d2?=gjfXP&pGnsqRcICaZq;OoMZ>d8pLRxD zc6byn!~-CYGvx52x0xvt_!%?ME}V?1c8CTy+I-d7sLp7wtfO_n(DHA#OWx-z z4V&rjC*!5C_ZNk;n5|n%z&RFwbHY4D2vA35Y9XkQgh>qKqJV|20ZtO)$ zIazmxFIts?&Zl@xc~*_S<3ddGIe~SPZRVquV)F5CqF1t0#f<_CtP6yr%g;MdIEt~BhHS_n#}WP)AMJ== zlf4984uZSpnz~$$t2mAIbRsnPM}%ylSzIN>pYg~?Weukbggw!KTayf!T)?VeKOF;1 zF;#tiG@vyB&3&&I{W-}IoP{W+Vue`5)zdAzdm@JMpgo@QC8nxWQJ&hV1^FMwcS&xY z+kN^c_DkCZA@!N8N^h*4J?YbKWsGijn7D5O5y-|#NBALcOg+=SChV`N<*4P_2!#b$ zW6_Aqg-u!;p@i`wO$XE*Q!P>}X9cIW(~q{KeEIGQF5Rw^R5e$KZ;rGUI;Y$0Eq)9Cubn&xuK{3Lrf^a!GWEYmS*GRBqt>W2lH_=dB44%H4+p% zH5JMHR>9Qi@|QarN1P6GiX$V{PY(@iE$;+Ajm66HpV6p#wiZbZ9^gt5N z|8y+&8jn8N48M>EOWHm*_eZyLa$Q#p+j}rdGRGPQ$h5>*1I1%g!`o#zv(pU1W2)TzJ9nJ zyjfFB*?CG4H_-B$VqA3pJ;TzEf=(@y;M{{}4 zd0)fWg1Ay_rNltAM+Mcg5|WEV;1=BR-O*Yio}9b$%O3VEEC`tUBBZ^r~OPFe!sMt4&*2SCV}7 z)@vwK!q49yIIAIjHpGJ4QyPS(#orx5Z90UE1B9L66wOl~i}XGjbq4w8b$#R2fkrIg9zmw|03d$I!)zzJ+Jf{ZJsk z6Dq@4xsy1|$wjsl*$iz?TDx1ssAz1fdxL>iqYhnM~OXuo!tW12`!mM}u zG!b%aEe&m!h*VXS{dSR7ENxoScyVA?^gNbMP2H}Mgit;kCk0NaGWGXb!#KksN$zIOY-jS$&nOun;$wwwMcLZo7Pz5 z+rjUpz0ZwV z#A;=6F+3k1A6VP{phyNb4?oXWL-O+}m9lx6&pW%7V@aU@e!lYwI1&lM^of7mjE{v| zaToz0Zvya$l7QQ=ZqN<)+>&qjH#WW`|54zsuW)qOA3osv9cd6l z-?Psf2YhMW&{MdA9J6>WzDqa8pl8GQir-{MTUM3~X*Y(^>U`OX;h~uE$ee zxPso91VkAiC5r(s3+rxEMYPR9)$8T@^18ZKJ}yXBE%ic7uy=yw z@_yxUrwJ+jz<)rZ@TSX2^-6m(GHG&u0j=qfzKVb=kngper}?9}^DcJ^elkM92Y>Hg zs7_6(j@Vp7clAU=lL)i8c2Yr>=)y(|5)Zx_djw;6jOKv+vupTjTHtW#5LQp=LqV2gvJ?0cq>K|3u+m{#*uP}QGU(U+V(>odH15`hSdcS*-z zj7EI!hWDqRO|d0)RaFCF$r0$fJU)Y-4PI_^_TP4y&yzub#iyFFas0}PE~`-o0bUd$ zGB%}5K!6y?2RNZm??x^5b0cy_y1h%cvNMtFEQD-9bL;U_lY`2J|y$;1o?K3VOyWs{>y zvBXIFc8if`suO0eg+J?|gVSEJ`GQ(+ERex)`SJVQN=7?T_C)&-8(W-2!)%SItGH3c&)Pm*CuNgp3 zGvNtb;1=PK;^i6H&zai)^1{geA=qX^^IfC*awSfTZN=9PyOfrhJ?}F-SQ_NjV!?xV zqe%ogkuep}0_;jAH*NzgEUeuKst+#J<`$NE%bIIzYrwD!PM#hQHWNS$c>eskpznA3 z-Mu}E@=AH>j)~I^-_jy-NMcTE-1CKWEL2N&{5P&@$I-X)-p8q=1m?%9QHI z%a=9wC4dRnZMK=mx#;g1Nli}Pjby@r08t>c#CY@X zni!49=`wshUN&`lAl4QW^&?rC|YcEyo;+Zi4XT@hf15HGE@0+#n!}e z5QAif6UglD^Myhw9jU&gGBeGvMng02fmw|lP=9uGcEa`@r5t`tpm+wFR#_;t*WA0C z0%VG>K)_8-PF4k8GN%U{V3P@dZTzSH89@@hHs+uMw=V^XP4>j3e72S_L*0p_>;=iS z=)d{aS6jnl^f#B%;q)(tj;cR<++Li!QR_d&}qnq}**3+kj=_qd%CaTPx`OvrOUUQ*%<+wn{Ajv#%fGw$k4eMjBm%?p zt@i1yOy%NR3Oq4A_BvCxLJsss^J6EL?B2g?A#!WL06FFrKaQy&XttVPS_=R1!-L?t z9`e-Yrt$e!FBSQyDRjPAR{qVKSB{Psi7qrrT~f|!MPC;^>Mv1R)1k=StDjb13^NLj zne`P8AHDAJvLT9zIeh)ie??gt%*cnG2rBZ=@~}y1QM7PUZ$63@;RQ&t^Xn`&-8U-& zS$eulN7bT$WSPy;ujhR!Mw4GyLx})`2^ZpfKD1f2 zGvifBu}Jo#;8OUv)7v_^Nqoelr0l{DyOZ-b$@m2LAvf$LaDd0075~$uFC*>+(S^6K zX4;Ui#q0<#TEY(86C@~Aspn%4q56bvGFLj<$b4jCrkI~%s~8+pUU0OsL17!(?@I3G zR*nBE9BS&aKZZ+;fi#sPfDLSEZS3s_`$Ldt-J0SwEnZmceqSZp>BQeEsjb2VnY(VEg^*%^P&Eh=J2pU}z{J zDCv88#DCn~1s(Ygjf|M>41~!mDPb7+l0k*_Rg}iF+G)E;k6Fd}<4L-NvoL*y-}&=2>ObCk0+*{C>X-)e!4;4ar4%l`n&*ERRs3 zz!#8e;+Yny7Z?Le->TVOl|>de6c!SY{)I&I#LR&h@66KrN-3t^ZR8nlOQG-&v1$%8 z@10UxQXZ?RJ|O!B#eF1bi8x*{6)AKQ)+ z2t*mPX$P&+xefj_J;s2HFE5|hQC-_kL(AO2zQ9WLEo`wZBe%B9YPYeoX0@y1(oq%5 zz4*9`myteV)Y9yM<`LqTw>prCr|IfM(oykt{r7wuviK>$VIYCfLIt7>K$=Pghaft7O8*9c+XLB)M#_<#NwDq!l+U4vTjbs zV&A@QYb9D&IftKg)m3X`H5-So@38p78@INmzkhTTLazYS-P8;W&;I`X3sRlBLEh(V z7N!wOti!Skvj~&WhU2B5yL+$xAwUd8uH5K{8H4G^KKfvHT8+Ar|Ni~E-f^8D(gzG0 z0YZU@eDWHewfYyavcjMov0TdPm7Z^`Cb^D&Zs(Lmg9A@iCVzLo4Se9n>rXH5wHLJu zB&;W?=^>n5i%bX=`8e9*XR! zlnC+JS@q(hn0=GPK2BJSO-{a2R>lP8l!2iC3j{F_Z|{=oYQVyhfZ_(Lv8kz~bySu9 zV1*0;N=-Zc_9>8FVRVxiV#+7sJ3v$y;I;dyv$i{vcC3CVatEF>PnAG+Xmq5MEyu{i zRl535U(iIjhJKA_o1nGnisK^-mh(DvckE9kK6>Mq-6oCX-NxiyGk2Tc4t14M-BMed zCE|A*MH-!XJjXYPQmh3$zH42T`0VM?j#B%7pnP?Dne{oPtb{*NES@Bm<5U!!3{NZF1GM2F3<(Wn$iW;RC4G=))Z;{liYcv*}hA<=>56cMJmKv};9T2**|p!xb~RYLroxc@r- zm4wyfZNqxLPXV&@zV^$aVO?HZO6bICf>goN^qRMTmH%+TOM=IGcY#UVZBPea9BKcZ}-CZZH&mE5R*anWM3&boJtO?Q@* zb@4BxkeNl^DPmCay*1r@A=!6aR8`{dEoY@aZevd(H^OZ;OPgIj-ma_9kfD$YifIic z#+Z39jBMm}0-00#-Tfc=vh-49lwvIL8l>5uk4~21rD@WpLu24qo>Pu*3$}j$D)G1V zMe^jagJL88An2)(9NLckg{n_}9P=FIRbb%!Nbi%E^F1BMd);T*Oq3fzGuA$ll93^R zwKrI%G8@%+^z`<4!pRzfyfBNT;NlYe$7TbA{c#Zjj5_hvzeI;+6H}I&sp*PNPqFI! z{k^pm??)&L^&Yw&c~!MxhjEGI3so4X8xNlQ3z~Y2x*k@<9DDtr2GJTKSxIWFlj$QH z)S-A>e5axP-$e!H)|=?mBX@u@lz$FcUjxX+}CN*i}j7|eC9YV zD{kC}V8U>7?0fji zPqPbXKaK6$+!2-BiH2x*GA#b;pwmhr#xniW|MO}Z@}+n`K-humjww%c&rIPqNt@2~R(ue2F*`R4>ykO+u8S{{-EoEoKA8 zP$f$zoh0ZIf;PN1%^`Brh4a;QwkHmsoG(u)Yut$0(#2-~Uj8ISA%-7#g-mEC7Z|8E zf{@Uw^-*=g8DsfY0asahLPZ5GP|#N?mSyQv)DUxNgWLFAn3ZL<=pa>=Rg-0(Nh5~B zoe-yu>RBA<`{ecf*$mfLI1hEOvpu_rLHV-#a5#F^{iKYTsq8Eon-eOD1v-GRDBnN* zeXgE#OkTt|fB=TjI{WP3P93vdS6o48zlqD^h<*(rP|VKR@B#yZdRv^X#jwWe1(ZgC?Ak^msIM zbO-u$(#_ytguA;ta8gF5u;*#LMWzxXNT)`VjzlFSr~pa?*UdAit3fiy zd$IhOATR)dn9Y#SUoBPls>vkcQ=4e^eHX1DTXfoNe>(aq?dXGaA$+W@sVOLaT3rpq zLlv)B(u5nQN#f+d=a+!4OCuvAP-FvbVbo|dG_xr2q`Cq0&<0xSwJB|_tVEWVGpZ7V z0n@6swKp0X_<$|q0uD+vw&E~$Bo}ZM7wo@Ge?LA-;UIqb^5>mE^`}qLpgyvi$_&cP z%uGxf25r*-xWYg}0D&Hti0J56ylEAq;bAlqk6s}@avuc8cnT3DNT!f``8%j3al-cG z1S_!mUdtmVa(X|ARAA>EH7)S_ozdunqujMj+F+wY6meek1uB)tsO1*l80Ej)%n+~ktK%@g-Y<^<{vq3i&6+c{slO$XUWb#91T&ap> z?_~CXj2eifU|)V4Bug5tgv6F}3c(M69m1_R*==Ai(wxkZVK2bA8x=WgpQ33Q*^eZqy&L* za*lTdn8k{`L5GoBv2rEmNEcDO;Cs0~T$?6XYBLc40xW3jYGrXTbOBoNR^&;7iwhU% zP2;&ctC~_?yv3S#0)U(*%kxx42Jjn@IFiYwI*plp_UX%60icf?jN~(r)c{1c>DTCk z4;L2~Xx8KgWgx<-g_xL_jk7aM&aS(3>Laa20P5z%{QS$b(or5$NS|`AKdm^2`z{-= z!VvnP)-}}BVyZL$&t06zz|DD!vz98vjDJ&|n=^Vg7J;+z*}RbTdEoTEs;A)P{6a_a(d zD=cR%FGm8Mu`8e5UjX(cl*f9e5UgU8M%WDne40@UJN=tdARowliy4de!_v+4zt*~oS=<%ZhajcVB{bj!>&REcPLzm@s+bP2Y3Vr zEvr^uUS3jeB%yX2tdLhIQnX1J^Ne8DY|O;oe*Yf6av+uzK5p?{e{*U|>7SNK%1N~+ zjt;l0&Jy5~QlaVTW=qw2PRr(k@gZ_0QUC}!Jw1h|Mekg-0lpGoroeq!Sdda90PskJ z4QS5HJ}@krw{ZcMt28n@XaJ-Glwhxdjp*)R2Gv4KM!@GN(_ctM{Bl@G*(oVmXC{t9M+JQ=lnQYJ+b&->9XU*A#)-n{TnSv;-sP zKGxJwxb=44)^cz3U)GoxO#jZl=y>)1y=Zhy%tmr}lTL;JCaeej2)_H)q|1$LNZvANRYNOF+lXiV1w2V2J!+VAP<3^66K{tkEK6(-Y~r=V>RZMZebVmcRq@ke zGJhM#+-TB1(OU8@pcQJnz-XR1W(F7d56*>8wyXYUO|%^Z925rc;o^H7bwH3Q@K-Y2saBikjRPr&(55Lk zNFY8gqU7^0)xHFuL+`fSo~NQ0|G1dl2l$HO-N+8~!@?SLTlJP-)?&XQS?bYpB?+8{ ze1opGSg&Foot?n}hm8UA=QZH%WI-?$j0eZ00V_qZ7)|+P4~K8Jve6Lo&Q_9e z*TiQg8+66mRez1EuK%MqL1>5aDr0BqjgF4e0rVey0)Pm>Z={fZ`*s4IWj&oNuM}hI z(0)z~*k*2Qj0G|Yu-)tFMHLs*G7+E!G0`GYiQg24Q%4F=`Tg9u9m2aYE0Qy0G!k8| zxIFoFeK2~7W`LCrBFi80K8YPM?)I0A5YW`U2L1x}*$e21fub};r4H713hX&%;GX~c zE>FyzHO0jlN6(&k7I>v{*kC?t!k?2=P>=xPdqe>ggg~%Kf<&O+Wkz7gP_k;7&m zHCal_%8E)$5d*(oUMUiTbQ7zlxS|3X6B84bpyo^i$;4-!?;?Ibn7|Fk!^6WNBZJ0( z4FlZhZ*>$qJxXHA%F6L#R6wu*oDd3`(7?L5vn5@$YXLME;J5)e`O4Dr04L4?Y}p{n zQWe{-E~owp0**CN_%AqpzgtY@i4cKT!y+(9$pCo@W6i#O`$qF9h8Vgbb9b=;{p;`f z-thZdrf7N6E6)MwcTsE8%z(Guf2UM>s;9s~b?qd5XV=NAi^%d20eIbJFbAH4Ie_Zf z?n&BrX212R-l3~($nla$ABc}kOdu2#6m)1`P2QPkS877GwXLkI7-7j7F!}}ACdfPo zYJudHE|#<3J!)Zu-GBzcmsl; zUW%(%UfSdVknVW258CmP0-NV0>aDL|!=9c#)U%?eTY~BIKc8ckm(Z6D;2tXF2|ouu zOdqSN27%5C&~V`L0Vp4HPxasgn;nY=wEra$asF3W-jC>x=)AXYb7=`A}; z(=2$VUtoX~*LhQPbmjug1aeWIIX2Xe7_&1)La&h4O%na-N^iv1Tx)vcCSB6`KbFbU*Ix^qrj}m)s8AS$&)s#Nlw0ji5w) zbsDiJ2sjWZm0$N}9ZC!Ev;o1Ebl36#8^jY%V3bFb5`05RYC+$A-;lvg5T$Sw&FnX! z8}K@P51Ey4^0Hzx;HQn?^jmQy4aC4vIML%BJm6HOyNpXOK4jDa64$pIqJ#U^uA*%F z;;7r+Ugx;CK@Ba8t0}_nW@y!=3pJ0mcH9F2J*bGvN32 zx8BZ<4)8`;m738Y_kH-W22L;=t#8qaE)K8eKn>+``?K3%os5^#NR)yI<;tUtu0jGLdx>~*J^Jd)tX;XqeNF7%C)o_qGKpCIhzROiFG5>TdW#f)?MNO5B<044%@=^J09l-xnwn&JQFb|H;v zwy=Sa4cuOgM+$JTCT!Bnl&e>Ay6(ypd`ASv_b9=Iur@SVTGuIzXnIE3j-`ILKY?LQ z#39^GfZKgZNn?5pF>C@8*%|&+ zWIor`8B{kQFMBnmap@INrO84-M1)MP=0#s0!J)&FMz?u=1P*r`cO)>j2HyjgpI+nv z@jEOT1)+P^O%O#>)l{xbCJ;ZwzAV$O0$C`4CFt>@=-#$-5Y4F;0n~*V%FHb8 z_ymtQ5Q(Ui=hywPTVS02dQ$c?uk71G1+&HT1dLe{!Fc;^;@Y0J&rOGS)>mg_XLsFT z0!iz-YcwPIP<7v=<5^|SPKELzkDly&yGr5&XEmdkzc-)1yPqVS%Fkv_9>YT+tt60% zLJUHTrVsBnjXCg*Kbr5qb)cGseh*;P^?a)Xy@jE>ZK``o*wQEujFN$Yfk<&e?lSj= zUR7Vo!qOG#xj(-Od%+axOBj#HLT<}%z}sOAIp#URxDtO-?NtqdHwDKhf|qe&>6gr- z#Bzm$5QYi?+dBT5F9sbQ-7C(GFyfx%@G#P+@iP!YpKKcL{$WgP)~LZ~7t z1quY0Oh|nW_S$XS?(S|FwcO{L>)A&gMnmVJDTULu>ac@}M2Ji3sB04d&dF>K)2|tU z=|sXCkj&VapiF(SBs`(fsJKSgNC44F-uS=2w0d3_cNnvrNXB(X|6Q)6 zjLH4w2FL^Xw5pMCY_K7tCZ~YHU9T7wWw~F4;KJ-AXOQQ;9SeT`0s`EeLN`9 zwC2toLShHE9N*2aJ_{hJGtXk5`dt6{XhZ(r>-yl5GxXl8C+q+SVv2u6}Ty~iwy{SkoXKq`P-mbbUJmz12$eYloIjZ)-b zj&q3r+-`b-Ojzk1R2HFdd_@=ZuojB3qkywhL0&-!jADlxeey?vmH`H}ZEnVcVoJC% z0Tl%*QXu5cczp2qpu_$ZpL84bA2%d`w+Bnh8)vsI5}p`s%_DqN?i zipMroGQfcq0s#i2K*brPUP=CwHT=jIRO}v}o<$&K1wMBGE^U+~#hsf00Tog`uc4u? z4#ekji!&e%g`x8o7qTEu0;DUe&#<_^4p5_-SWPB*TE=###vocd zbA^*TKV&^vc35BUA`=p6WCRK^fRn@cS_sV3*00<6xZBjhT0{?=AX*3xK?diM&^aAF zJopfR`ryS2WQeMs9&>Y3ASVwZwlpgZq(0nn>xYMtuWaY0HsiDnz zFIiaLx4Ih|8p_MRBnBNd)S|d@Z9$`l3s&SOX5I0kh=Hrj1lrG|lUQ$!m!W_(S+58rkCg-)t9&;*NRa@vJP+m~@Uv+`;te+~ z1i20PnYT$SD8PnRYO;Jp`q1j`=*Y%P8n^5r=ND{Feel9=_c=9I*+S z9D#KW?twyxZ_}4peax6BMKnD$_!BPr!wR*JUtLxNBww_o7@6;L=Kp?t>&44S*Y zE?hRE(pFEE&{RZ?&2!Qc@j@7jQA%1`p8v0=$P^Fgpi6Km4cQX}B2#c@z;qTVp3+E? zhe^_b8Fw(~AOWd-$)`MM0wAzT<|A`+b0fLme#Vol$R90v#N=!Md=05Y4((5arQWw$ z4NYM|q41Oj)UUF?u?Q1zZ|t}b#VDs)Vd(oX4I}a%Qgu3&2M+Umnicje?hdO*IU*rf1w7DTPb4PyRx-uRiKShCA!!6Eo7tt^D(6V!Z*j@?NlbYo$s z;9Ml90>+V)7|Vx2QRZC-eWj}SL3~R&UW|tftJI?)3N{R5W`P|OPq!>9W^_l2O5Ac_qscV?h#R08hSh z(QX;-nbc97Av*{m!ppieF$*$?8Ge|QCYe#Fped?e3tAHO;N4o?-3slI8#KMOeL3$N zoV0VZLxOIHEV#25%Q&#@Fg{*lyL2M@=@TFg zH{^!N{Y~7n-fy*|>Dfgh*Bg1>X(w1Z$^@pij2Av~aoK|zn1rKf^@`Heaxx}RZoPv%s+y; zppZB@1OPk1p7MYL(jq{mFr`hnwnUW6IWjc;vZZ_MA}XCj=1@HMbj2(&*LO-Vd&%e-gU1Zy0NI0v=ce1kTSKbiit1bg*35f zy!YcQ7*LGDmX@zI>*c`DSi4Hrz<>;pbcsnxG!7FnX2oFf zgXCCzebIzhy6P)94&XTu5Ci?MS}*e~)sI!HO;q)NNaD+$vC1#^A%U9f10HQb5o6^T z9TQ!GI-!orgwkpSp(fjsyscs6b=AB0sINdd{@MxHwp@_tTt$o zSTHKOr)P712BcGfuE&X~;r9YV4aW5H(h0;$@Kah|ZU*plbAzhZ)yFimt57b6pn*#9 zSvtE|=(LgN+<*u#hECQpL1efMP7fekeuODjG>+TASE1Ehka93wNBFAOi%Q}xbrT1x zP~(i$tLo@PfE)p`RF4e?!+Lds0WZqj+sofy1Q0+J_b8>fFwzOeLqG%#vy9gD07U`Z ziS_jKVBnaBM#^4(gAyrsc3)u_G$Lq+0-;%?nj`Ij7xgpN_gd~wOi>>Qvy+#rH<=F( zBsuqkd)f)AU-;;$G?y`pfRz2AsfBNs>zB}+7cohd)KWMQw)&xuA>?m3%oBLu;2<(8 zXNLl|z7D+#QHmO<1AxU0HOc^PnYN?_EKLDU^oUY|@Up+{jsT0N1O;}v01yR#1*MXC z>xXk1!43?%raF&P-w4sS+yaz*I~>Td54BmYHv9-ylp^}Xe+~+9$r7?eCw_#Ez+pkf zY~Yb8p_wm+i#cdtA$g=>993GAY z&Nio}p^-XvWB*@Q zZvhqc_eGBmNH?fRcd1BsD%~n5B{hVUlr#u~v{EA7C7>XJbV!$qw3IYRx1cns0 zCcAf~ath+X=(mN+)R31LKe$P+ToKw3d#@=ak|DHM8ev&$kxC`_mg}shFR=O^$rF?v zck+8Se)iS|!elS1VI=>}7p9AH?Pb1S!Oai3RjH+^83GFoWOT5c24|ADZhaiIVWNx( zs~VO7{PlU=3yqq6xirqy&s)k=|{9A5rQphjM5jou(uS!1WA%3Xmm2pk0kqM;U z&HZ^eF!GMrh?u%hIxv(x|H>=BIYzB)3Frrgtmx##$3`eM;OQq!B~pNQqhF%fwv6=j zaH|ZZIVQzqhoGUk>aXVmbuF?BL9ucwNed8R#uEE7wmVtSrU$&bnl4ED2e%$uVOlUvW4J-NeN>RigHVzxxhoFuRChXgFj zY}wXy`PI9Wi@g(2#Z-x>P(dBcV;ar$=E^&6)6}!mGySwN{HS`GhLj zU@lZ{Hr7g3%%OG0!`^bjG+reX3m+0dRLlM-{UpNKs_Cn>n*rh_$q}kuY2n-YmqEK> z6}%6!%a3lFgfod0AVuZzw>D`j-rk%NHVz!qN-nF(XoY~~s(q7NtuXdhP3SlT-PND_ z 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 diff --git a/Telegram/SourceFiles/art/sprite_200x.png b/Telegram/SourceFiles/art/sprite_200x.png index 63b51ff0ba507b6127b095238f4eee50028d3b26..f8d5d7f382b6b87129dd7a50c84c22eddaaa6189 100644 GIT binary patch delta 102189 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 z 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

    vc08G;u)q_N7iA=yZ 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 messages:Vector< messages.messages#8c718e87 messages:Vector chats:Vector users:Vector = messages.Messages; messages.messagesSlice#b446ae3 count:int messages:Vector chats:Vector users:Vector = messages.Messages; -messages.messageEmpty#3f4e0648 = messages.Message; - -messages.sentMessage#4c3d47f3 id:int date:int media:MessageMedia pts:int pts_count:int = messages.SentMessage; +messages.sentMessage#8a99d8e0 id:int date:int media:MessageMedia entities:Vector pts:int pts_count:int = messages.SentMessage; messages.chats#64ff9fd5 chats:Vector = messages.Chats; @@ -343,8 +341,8 @@ updates.difference#f49ca0 new_messages:Vector new_encrypted_messages:Ve updates.differenceSlice#a8fb1981 new_messages:Vector new_encrypted_messages:Vector other_updates:Vector chats:Vector users:Vector intermediate_state:updates.State = updates.Difference; updatesTooLong#e317af7e = Updates; -updateShortMessage#ed5c2127 flags:# id:int user_id:int message:string pts:int pts_count:int date:int fwd_from_id:flags.2?int fwd_date:flags.2?int reply_to_msg_id:flags.3?int = Updates; -updateShortChatMessage#52238b3c flags:# id:int from_id:int chat_id:int message:string pts:int pts_count:int date:int fwd_from_id:flags.2?int fwd_date:flags.2?int reply_to_msg_id:flags.3?int = Updates; +updateShortMessage#3f32d858 flags:# id:int user_id:int message:string pts:int pts_count:int date:int fwd_from_id:flags.2?int fwd_date:flags.2?int reply_to_msg_id:flags.3?int entities:flags.7?Vector = Updates; +updateShortChatMessage#f9409b3d flags:# id:int from_id:int chat_id:int message:string pts:int pts_count:int date:int fwd_from_id:flags.2?int fwd_date:flags.2?int reply_to_msg_id:flags.3?int entities:flags.7?Vector = Updates; updateShort#78d4dec1 update:Update date:int = Updates; updatesCombined#725b04c3 updates:Vector users:Vector chats:Vector date:int seq_start:int seq:int = Updates; updates#74ae4240 updates:Vector users:Vector chats:Vector date:int seq:int = Updates; @@ -611,6 +609,18 @@ inputUser#d8292816 user_id:int access_hash:long = InputUser; help.appChangelogEmpty#af7e0394 = help.AppChangelog; help.appChangelog#4668e6bd text:string = help.AppChangelog; +messageEntityUnknown#bb92ba95 offset:int length:int = MessageEntity; +messageEntityMention#fa04579d offset:int length:int = MessageEntity; +messageEntityHashtag#6f635b0d offset:int length:int = MessageEntity; +messageEntityBotCommand#6cef8ac7 offset:int length:int = MessageEntity; +messageEntityUrl#6ed02538 offset:int length:int = MessageEntity; +messageEntityEmail#64e475c2 offset:int length:int = MessageEntity; +messageEntityBold#bd610bc9 offset:int length:int = MessageEntity; +messageEntityItalic#826f8b60 offset:int length:int = MessageEntity; +messageEntityCode#28a20571 offset:int length:int = MessageEntity; +messageEntityPre#73924be0 offset:int length:int language:string = MessageEntity; +messageEntityTextUrl#76a6d327 offset:int length:int url:string = MessageEntity; + ---functions--- invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X; @@ -662,7 +672,7 @@ messages.deleteHistory#f4f8fb61 peer:InputPeer offset:int = messages.AffectedHis messages.deleteMessages#a5f18925 id:Vector = messages.AffectedMessages; messages.receivedMessages#5a954c0 max_id:int = Vector; messages.setTyping#a3825e50 peer:InputPeer action:SendMessageAction = Bool; -messages.sendMessage#fc55e6b5 flags:# peer:InputPeer reply_to_msg_id:flags.0?int message:string random_id:long reply_markup:flags.2?ReplyMarkup = messages.SentMessage; +messages.sendMessage#df12390 flags:# peer:InputPeer reply_to_msg_id:flags.0?int message:string random_id:long reply_markup:flags.2?ReplyMarkup entities:flags.3?Vector = messages.SentMessage; messages.sendMedia#c8f16791 flags:# peer:InputPeer reply_to_msg_id:flags.0?int media:InputMedia random_id:long reply_markup:flags.2?ReplyMarkup = Updates; messages.forwardMessages#55e1728d peer:InputPeer id:Vector random_id:Vector = Updates; messages.getChats#3c6aa187 id:Vector = messages.Chats; diff --git a/Telegram/SourceFiles/pspecific_wnd.cpp b/Telegram/SourceFiles/pspecific_wnd.cpp index 2d950ac48..3a5fe7594 100644 --- a/Telegram/SourceFiles/pspecific_wnd.cpp +++ b/Telegram/SourceFiles/pspecific_wnd.cpp @@ -2696,7 +2696,7 @@ QString toastImage(const StorageKey &key, PeerData *peer) { } else if (!key.first && key.second) { (peer->chat ? chatDefPhoto : userDefPhoto)(peer->colorIndex)->pix().save(v.path, "PNG"); } else { - QFile(":/gui/art/iconbig256.png").copy(v.path); + App::wnd()->iconLarge().save(v.path, "PNG"); } i = toastImages.insert(key, v); } diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index 0e5abe0cb..744911c58 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.49 + 0.8.50 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index 251f2edd5823703ad3f18e11c01306547811dae9..63fef2cd598c769457efb7a74fcae50a9064ce1a 100644 GIT binary patch delta 61 zcmZ3Yy+nIM0WY&DgTdrtUPBPQc{y)C6FZQ>pa&G(D4@GJOMr_JNkDw^5<#KGO9WW} D=4KB@ delta 61 zcmZ3Yy+nIM0WY%&gXQF6UPBPQc{y)C6FZQ>pvPb^d82^t<}3j&MkE38$x8%<7B3NG F0RZae4`u)W diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index 681fafc96..83eb18288 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -1707,7 +1707,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.49; + CURRENT_PROJECT_VERSION = 0.8.50; DEBUG_INFORMATION_FORMAT = dwarf; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -1725,7 +1725,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 0.8.49; + CURRENT_PROJECT_VERSION = 0.8.50; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = fast; GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h; @@ -1751,10 +1751,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.49; + CURRENT_PROJECT_VERSION = 0.8.50; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DYLIB_COMPATIBILITY_VERSION = 0.8; - DYLIB_CURRENT_VERSION = 0.8.49; + DYLIB_CURRENT_VERSION = 0.8.50; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -1885,10 +1885,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.49; + CURRENT_PROJECT_VERSION = 0.8.50; DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 0.8; - DYLIB_CURRENT_VERSION = 0.8.49; + DYLIB_CURRENT_VERSION = 0.8.50; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; diff --git a/Telegram/Version.sh b/Telegram/Version.sh index deafb9a75..a30d1e842 100755 --- a/Telegram/Version.sh +++ b/Telegram/Version.sh @@ -1,2 +1,2 @@ -echo 0.8 8049 0.8.49 1 +echo 0.8 8050 0.8.50 1 # AppVersionStrMajor AppVersion AppVersionStr DevChannel From 48ee79ed9d396ba93ba5e97f5830e3f1191047d5 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 14 Aug 2015 18:49:49 +0300 Subject: [PATCH 099/121] langs updated for 0.8.50.dev --- Telegram/Resources/lang.strings | 2 +- Telegram/SourceFiles/langs/lang_de.strings | 14 +++++++++++++- Telegram/SourceFiles/langs/lang_es.strings | 12 ++++++++++++ Telegram/SourceFiles/langs/lang_it.strings | 12 ++++++++++++ Telegram/SourceFiles/langs/lang_ko.strings | 12 ++++++++++++ Telegram/SourceFiles/langs/lang_nl.strings | 12 ++++++++++++ Telegram/SourceFiles/langs/lang_pt_BR.strings | 12 ++++++++++++ 7 files changed, 74 insertions(+), 2 deletions(-) diff --git a/Telegram/Resources/lang.strings b/Telegram/Resources/lang.strings index b51067d5c..eb93c89ae 100644 --- a/Telegram/Resources/lang.strings +++ b/Telegram/Resources/lang.strings @@ -641,7 +641,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop was updated to version {version}\n\n{changes}\n\nFull version history is available here:\n{link}"; "lng_new_version_minor" = "— Bug fixes and other minor improvements"; -"lng_new_version_text" = "— Search for messages in conversation\n— Clear messages history in groups\n— Contacts without messages are hidden from the conversations list"; +"lng_new_version_text" = "— Block users from their profile page\n— Added support for Windows toast notifications\n— Fixed input methods on Linux (Fcitx and IBus)"; "lng_menu_insert_unicode" = "Insert Unicode control character"; diff --git a/Telegram/SourceFiles/langs/lang_de.strings b/Telegram/SourceFiles/langs/lang_de.strings index d3e9292b6..341c4d816 100644 --- a/Telegram/SourceFiles/langs/lang_de.strings +++ b/Telegram/SourceFiles/langs/lang_de.strings @@ -69,6 +69,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_reconnecting_try_now" = "Jetzt versuchen"; "lng_status_service_notifications" = "Servicemeldungen"; +"lng_status_support" = "Support"; "lng_status_bot" = "Bot"; "lng_status_bot_reads_all" = "hat Zugriff auf Nachrichten"; "lng_status_bot_not_reads_all" = "hat keinen Zugriff auf Nachrichten"; @@ -183,8 +184,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_section_notify" = "Benachrichtigungen"; "lng_settings_desktop_notify" = "Desktopbenachrichtigungen"; -"lng_settings_show_name" = "Sendername anzeigen"; +"lng_settings_show_name" = "Absendername anzeigen"; "lng_settings_show_preview" = "Nachrichtenvorschau anzeigen"; +"lng_settings_use_windows" = "Windows Benachrichtigungen"; "lng_settings_sound_notify" = "Ton abspielen"; "lng_notification_preview" = "Du hast eine neue Nachricht"; @@ -323,6 +325,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_reset_one_sure" = "Dieses Gerät wirklich abmelden?"; "lng_settings_reset_button" = "Beenden"; "lng_settings_reset_done" = "Alle anderen Sitzungen wurden erfolgreich beendet."; +"lng_settings_ask_question" = "Eine Frage stellen"; +"lng_settings_ask_sure" = "Bedenke bitte, dass der Telegram Support von ehrenamtlichen Helfern betreut wird.\n\nKennst du schon die Telegram FAQ? Dort findest du Antworten auf die am häufigsten gestellten Fragen."; +"lng_settings_faq_button" = "FAQ öffnen"; +"lng_settings_ask_ok" = "Frage stellen"; +"lng_settings_faq" = "Telegram FAQ"; "lng_settings_logout" = "Abmelden"; "lng_sure_logout" = "Du kannst Telegram von all deinen Geräten gleichzeitig nutzen. Wirklich abmelden?"; @@ -355,6 +362,10 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_delete_conversation" = "Chat entfernen"; "lng_profile_clear_and_exit" = "Löschen und verlassen"; "lng_profile_search_messages" = "In diesem Chat suchen"; +"lng_profile_block_user" = "Blockieren"; +"lng_profile_unblock_user" = "Freigeben"; +"lng_profile_block_bot" = "Bot anhalten und blockieren"; +"lng_profile_unblock_bot" = "Bot freigeben"; "lng_profile_send_message" = "Nachricht senden"; "lng_profile_share_contact" = "Kontakt teilen"; "lng_profile_invite_to_group" = "In eine Gruppe einladen"; @@ -475,6 +486,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_message_with_from" = "[c]{from}:[/c] {message}"; "lng_from_you" = "Ich"; "lng_bot_description" = "Was kann dieser Bot?"; +"lng_unblock_button" = "Freigeben"; "lng_bot_start" = "Starten"; "lng_bot_choose_group" = "Gruppe auswählen"; diff --git a/Telegram/SourceFiles/langs/lang_es.strings b/Telegram/SourceFiles/langs/lang_es.strings index c58709f8f..e53618c1d 100644 --- a/Telegram/SourceFiles/langs/lang_es.strings +++ b/Telegram/SourceFiles/langs/lang_es.strings @@ -69,6 +69,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_reconnecting_try_now" = "Intentar ahora"; "lng_status_service_notifications" = "servicio de notificaciones"; +"lng_status_support" = "soporte"; "lng_status_bot" = "bot"; "lng_status_bot_reads_all" = "tiene acceso a los mensajes"; "lng_status_bot_not_reads_all" = "no tiene acceso a los mensajes"; @@ -185,6 +186,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_desktop_notify" = "Notificaciones de escritorio"; "lng_settings_show_name" = "Mostrar el nombre del remitente"; "lng_settings_show_preview" = "Mostrar la vista previa del mensaje"; +"lng_settings_use_windows" = "Usar notificaciones de Windows"; "lng_settings_sound_notify" = "Reproducir sonido"; "lng_notification_preview" = "Tienes un nuevo mensaje"; @@ -323,6 +325,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_reset_one_sure" = "¿Quieres cerrar esta sesión?"; "lng_settings_reset_button" = "Cerrar"; "lng_settings_reset_done" = "Se cerraron las otras sesiones"; +"lng_settings_ask_question" = "Hacer una pregunta"; +"lng_settings_ask_sure" = "Por favor, considera que el soporte de Telegram está hecho por voluntarios. Respondemos lo antes posible, pero puede tomar tiempo.\n\nSi quieres, mira las preguntas frecuentes de Telegram: tienen soluciones a problemas y respuestas para la mayoría de las preguntas."; +"lng_settings_faq_button" = "Preguntas frecuentes"; +"lng_settings_ask_ok" = "Preguntar"; +"lng_settings_faq" = "Preguntas frecuentes"; "lng_settings_logout" = "Cerrar sesión"; "lng_sure_logout" = "¿Quieres cerrar sesión?"; @@ -355,6 +362,10 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_delete_conversation" = "Eliminar chat"; "lng_profile_clear_and_exit" = "Eliminar y salir"; "lng_profile_search_messages" = "Buscar mensajes"; +"lng_profile_block_user" = "Bloquear"; +"lng_profile_unblock_user" = "Desbloquear"; +"lng_profile_block_bot" = "Detener y bloquear el bot"; +"lng_profile_unblock_bot" = "Desbloquear el bot"; "lng_profile_send_message" = "Enviar mensaje"; "lng_profile_share_contact" = "Compartir contacto"; "lng_profile_invite_to_group" = "Añadir al grupo"; @@ -475,6 +486,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_message_with_from" = "[c]{from}:[/c] {message}"; "lng_from_you" = "Tú"; "lng_bot_description" = "¿Qué puede hacer este bot?"; +"lng_unblock_button" = "Desbloquear"; "lng_bot_start" = "Iniciar"; "lng_bot_choose_group" = "Elegir grupo"; diff --git a/Telegram/SourceFiles/langs/lang_it.strings b/Telegram/SourceFiles/langs/lang_it.strings index 7b8f8ee60..3f3d2cdcd 100644 --- a/Telegram/SourceFiles/langs/lang_it.strings +++ b/Telegram/SourceFiles/langs/lang_it.strings @@ -69,6 +69,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_reconnecting_try_now" = "Prova ora"; "lng_status_service_notifications" = "notifiche di servizio"; +"lng_status_support" = "supporto"; "lng_status_bot" = "bot"; "lng_status_bot_reads_all" = "ha accesso ai messaggi"; "lng_status_bot_not_reads_all" = "non ha accesso ai messaggi"; @@ -185,6 +186,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_desktop_notify" = "Notifiche desktop"; "lng_settings_show_name" = "Mostra nome del mittente"; "lng_settings_show_preview" = "Mostra anteprima messaggio"; +"lng_settings_use_windows" = "Usa le notifiche di Windows"; "lng_settings_sound_notify" = "Riproduci suono"; "lng_notification_preview" = "Hai un nuovo messaggio"; @@ -323,6 +325,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_reset_one_sure" = "Vuoi terminare questa sessione?"; "lng_settings_reset_button" = "Chiudi"; "lng_settings_reset_done" = "Altre sessioni terminate"; +"lng_settings_ask_question" = "Fai una domanda"; +"lng_settings_ask_sure" = "Per favore, considera che il supporto su Telegram è offerto da volontari. Proveremo a risponderti il più velocemente possibile, ma potrebbe volerci un po' di tempo.\n\nDai un'occhiata alle FAQ di Telegram: potrai trovare importanti suggerimenti riguardo alcune problematiche e risposte alla maggior parte delle domande."; +"lng_settings_faq_button" = "Vai alle FAQ"; +"lng_settings_ask_ok" = "Chiedi"; +"lng_settings_faq" = "FAQ di Telegram"; "lng_settings_logout" = "Disconnetti"; "lng_sure_logout" = "Sicuro di volerti disconnettere?"; @@ -355,6 +362,10 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_delete_conversation" = "Elimina chat"; "lng_profile_clear_and_exit" = "Elimina ed esci"; "lng_profile_search_messages" = "Cerca messaggi"; +"lng_profile_block_user" = "Blocca utente"; +"lng_profile_unblock_user" = "Sblocca utente"; +"lng_profile_block_bot" = "Arresta e blocca bot"; +"lng_profile_unblock_bot" = "Sblocca bot"; "lng_profile_send_message" = "Invia messaggio"; "lng_profile_share_contact" = "Condividi contatto"; "lng_profile_invite_to_group" = "Aggiungi a un gruppo"; @@ -475,6 +486,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_message_with_from" = "[c]{from}:[/c] {message}"; "lng_from_you" = "Tu"; "lng_bot_description" = "Cosa può fare questo bot?"; +"lng_unblock_button" = "Sblocca"; "lng_bot_start" = "Avvia"; "lng_bot_choose_group" = "Scegli gruppo"; diff --git a/Telegram/SourceFiles/langs/lang_ko.strings b/Telegram/SourceFiles/langs/lang_ko.strings index 9fb577498..e869939ed 100644 --- a/Telegram/SourceFiles/langs/lang_ko.strings +++ b/Telegram/SourceFiles/langs/lang_ko.strings @@ -69,6 +69,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_reconnecting_try_now" = "다시 시도"; "lng_status_service_notifications" = "서비스 알림"; +"lng_status_support" = "support"; "lng_status_bot" = "bot"; "lng_status_bot_reads_all" = "메시지 접근 권한이 있습니다."; "lng_status_bot_not_reads_all" = "메시지 접근 권한이 없습니다."; @@ -185,6 +186,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_desktop_notify" = "데스크탑 알림"; "lng_settings_show_name" = "발신인 표시"; "lng_settings_show_preview" = "메시지 미리보기"; +"lng_settings_use_windows" = "Use Windows notifications"; "lng_settings_sound_notify" = "소리 재생"; "lng_notification_preview" = "새로운 메시지가 있습니다."; @@ -323,6 +325,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_reset_one_sure" = "해당 세션을 강제 종료 하시겠습니까?"; "lng_settings_reset_button" = "종료"; "lng_settings_reset_done" = "다른 모든 세션이 강제 종료 되었습니다."; +"lng_settings_ask_question" = "Ask a Question"; +"lng_settings_ask_sure" = "Please note that Telegram Support is done by volunteers. We try to respond as quickly as possible, but it may take a while.\n\nPlease take a look at the Telegram FAQ: it has important troubleshooting tips and answers to most questions."; +"lng_settings_faq_button" = "Go to FAQ"; +"lng_settings_ask_ok" = "Ask"; +"lng_settings_faq" = "Telegram FAQ"; "lng_settings_logout" = "로그아웃"; "lng_sure_logout" = "로그아웃을 하시겠습니까?"; @@ -355,6 +362,10 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_delete_conversation" = "대화 지우기"; "lng_profile_clear_and_exit" = "삭제 후 종료"; "lng_profile_search_messages" = "메시지 검색"; +"lng_profile_block_user" = "Block user"; +"lng_profile_unblock_user" = "Unblock user"; +"lng_profile_block_bot" = "Stop and block bot"; +"lng_profile_unblock_bot" = "Unblock bot"; "lng_profile_send_message" = "메세지 전송"; "lng_profile_share_contact" = "연락처 공유"; "lng_profile_invite_to_group" = "그룹에 추가"; @@ -475,6 +486,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_message_with_from" = "[c]{from}:[/c] {message}"; "lng_from_you" = "회원님"; "lng_bot_description" = "봇이 할 수 있는 일은 무엇일까요?"; +"lng_unblock_button" = "Unblock"; "lng_bot_start" = "시작"; "lng_bot_choose_group" = "그룹 선택"; diff --git a/Telegram/SourceFiles/langs/lang_nl.strings b/Telegram/SourceFiles/langs/lang_nl.strings index f011259f7..3257b0d34 100644 --- a/Telegram/SourceFiles/langs/lang_nl.strings +++ b/Telegram/SourceFiles/langs/lang_nl.strings @@ -69,6 +69,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_reconnecting_try_now" = "Probeer nu"; "lng_status_service_notifications" = "servicemeldingen"; +"lng_status_support" = "ondersteuning"; "lng_status_bot" = "bot"; "lng_status_bot_reads_all" = "toegang tot berichten"; "lng_status_bot_not_reads_all" = "geen toegang tot berichten"; @@ -185,6 +186,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_desktop_notify" = "Desktopmeldingen"; "lng_settings_show_name" = "Afzender weergeven"; "lng_settings_show_preview" = "Voorvertoning weergeven"; +"lng_settings_use_windows" = "Windows-berichtgeving gebruiken"; "lng_settings_sound_notify" = "Geluiden afspelen"; "lng_notification_preview" = "Je hebt een nieuw bericht"; @@ -323,6 +325,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_reset_one_sure" = "Deze sessie beëindigen?"; "lng_settings_reset_button" = "Beëindigen"; "lng_settings_reset_done" = "Alle andere sessies zijn beëindigd"; +"lng_settings_ask_question" = "Een vraag stellen"; +"lng_settings_ask_sure" = "De ondersteuning voor Telegram wordt gedaan door vrijwilligers. We proberen zo snel mogelijk te reageren maar het kan even duren. \n\nBekijk ook de veelgestelde vragen, deze bevat belangrijke tips en antwoorden op de meest gestelde vragen. "; +"lng_settings_faq_button" = "Veelgestelde vragen"; +"lng_settings_ask_ok" = "Vraag"; +"lng_settings_faq" = "Veelgestelde vragen"; "lng_settings_logout" = "Uitloggen"; "lng_sure_logout" = "Weet je zeker dat je wilt uitloggen?"; @@ -355,6 +362,10 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_delete_conversation" = "Gesprek verwijderen"; "lng_profile_clear_and_exit" = "Verwijder en verlaat"; "lng_profile_search_messages" = "Zoek berichten"; +"lng_profile_block_user" = "Blokkeer gebruiker"; +"lng_profile_unblock_user" = "Deblokkeer gebruiker"; +"lng_profile_block_bot" = "Stop en blokkeer bot"; +"lng_profile_unblock_bot" = "Deblokkeer bot"; "lng_profile_send_message" = "Bericht sturen"; "lng_profile_share_contact" = "Contact delen"; "lng_profile_invite_to_group" = "Groepslid maken"; @@ -475,6 +486,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_message_with_from" = "[c]{from}:[/c] {message}"; "lng_from_you" = "Jij"; "lng_bot_description" = "Wat kan deze bot? "; +"lng_unblock_button" = "Deblokkeer"; "lng_bot_start" = "Begin"; "lng_bot_choose_group" = "Groep kiezen"; diff --git a/Telegram/SourceFiles/langs/lang_pt_BR.strings b/Telegram/SourceFiles/langs/lang_pt_BR.strings index fcdabc5f8..72fa35287 100644 --- a/Telegram/SourceFiles/langs/lang_pt_BR.strings +++ b/Telegram/SourceFiles/langs/lang_pt_BR.strings @@ -69,6 +69,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_reconnecting_try_now" = "Tentar agora"; "lng_status_service_notifications" = "notificações de serviço"; +"lng_status_support" = "suporte"; "lng_status_bot" = "bot"; "lng_status_bot_reads_all" = "tem acesso as mensagens"; "lng_status_bot_not_reads_all" = "não tem acesso as mensagens"; @@ -185,6 +186,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_desktop_notify" = "Notificações na área de trabalho"; "lng_settings_show_name" = "Mostrar nome de quem enviou"; "lng_settings_show_preview" = "Mostrar pré-visualização da mensagem"; +"lng_settings_use_windows" = "Usar notificações do Windows"; "lng_settings_sound_notify" = "Tocar som"; "lng_notification_preview" = "Você tem uma nova mensagem"; @@ -323,6 +325,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_reset_one_sure" = "Você deseja terminar essa sessão?"; "lng_settings_reset_button" = "Encerrar"; "lng_settings_reset_done" = "Outras sessões encerradas"; +"lng_settings_ask_question" = "Fazer uma Pergunta"; +"lng_settings_ask_sure" = "Entenda que o suporte do Telegram é feito por voluntários. Tentaremos responder o mais rápido possível, mas poderemos demorar um pouco.\n\nPor favor verifique a página de Perguntas Frequentes do Telegram: há dicas e respostas para a maioria das perguntas."; +"lng_settings_faq_button" = "Perguntas Frequentes"; +"lng_settings_ask_ok" = "Perguntar"; +"lng_settings_faq" = "Perguntas Frequentes"; "lng_settings_logout" = "Sair"; "lng_sure_logout" = "Tem certeza que deseja sair?"; @@ -355,6 +362,10 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_delete_conversation" = "Apagar conversa"; "lng_profile_clear_and_exit" = "Apagar e sair"; "lng_profile_search_messages" = "Buscar mensagens"; +"lng_profile_block_user" = "Bloquear usuário"; +"lng_profile_unblock_user" = "Desbloquear usuário"; +"lng_profile_block_bot" = "Parar e bloquear o bot"; +"lng_profile_unblock_bot" = "Desbloquear bot"; "lng_profile_send_message" = "Enviar Mensagem"; "lng_profile_share_contact" = "Compartilhar"; "lng_profile_invite_to_group" = "Adicionar ao Grupo"; @@ -475,6 +486,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_message_with_from" = "[c]{from}:[/c] {message}"; "lng_from_you" = "Você"; "lng_bot_description" = "O que esse bot pode fazer?"; +"lng_unblock_button" = "Desbloquear"; "lng_bot_start" = "Iniciar"; "lng_bot_choose_group" = "Escolher Grupo"; From d32e476d96d8ef2ec2496f8929833334d4ed884a Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 14 Aug 2015 19:31:29 +0300 Subject: [PATCH 100/121] version 0.8.50.dev fixed crash in Go to FAQ --- Telegram/SourceFiles/settingswidget.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/Telegram/SourceFiles/settingswidget.cpp b/Telegram/SourceFiles/settingswidget.cpp index ae3092e76..19907ed15 100644 --- a/Telegram/SourceFiles/settingswidget.cpp +++ b/Telegram/SourceFiles/settingswidget.cpp @@ -1165,7 +1165,6 @@ void SettingsInner::onAskQuestionSure() { } void SettingsInner::onTelegramFAQ() { - App::wnd()->hideLayer(); QDesktopServices::openUrl(qsl("https://telegram.org/faq#general")); } From 82593147212e48cac6fe82336f42c964dca8c6a2 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sun, 16 Aug 2015 17:42:41 +0300 Subject: [PATCH 101/121] fixed crash in notifyShowNext(), not always enum pinned icons --- Telegram/SourceFiles/pspecific_wnd.cpp | 4 +++- Telegram/SourceFiles/settingswidget.cpp | 11 ++++++++++- Telegram/SourceFiles/window.cpp | 6 +++--- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/Telegram/SourceFiles/pspecific_wnd.cpp b/Telegram/SourceFiles/pspecific_wnd.cpp index 3a5fe7594..2ea13bc9a 100644 --- a/Telegram/SourceFiles/pspecific_wnd.cpp +++ b/Telegram/SourceFiles/pspecific_wnd.cpp @@ -2219,7 +2219,9 @@ void RegisterCustomScheme() { void psNewVersion() { RegisterCustomScheme(); - CheckPinnedAppUserModelId(); + if (Local::oldSettingsVersion() < 8050) { + CheckPinnedAppUserModelId(); + } } void psExecUpdater() { diff --git a/Telegram/SourceFiles/settingswidget.cpp b/Telegram/SourceFiles/settingswidget.cpp index 19907ed15..84b53cf38 100644 --- a/Telegram/SourceFiles/settingswidget.cpp +++ b/Telegram/SourceFiles/settingswidget.cpp @@ -1165,7 +1165,16 @@ void SettingsInner::onAskQuestionSure() { } void SettingsInner::onTelegramFAQ() { - QDesktopServices::openUrl(qsl("https://telegram.org/faq#general")); + QString url = qsl("https://telegram.org/faq"); + if (cLang() > languageDefault && cLang() < languageCount) { + const char *code = LanguageCodes[cLang()]; + if (qstr("de") == code || qstr("es") == code || qstr("it") == code || qstr("ko") == code) { + url += qsl("/") + code; + } else if (qstr("pt_BR") == code) { + url += qsl("/br"); + } + } + QDesktopServices::openUrl(url); } void SettingsInner::chooseCustomLang() { diff --git a/Telegram/SourceFiles/window.cpp b/Telegram/SourceFiles/window.cpp index 8d438d159..8f18cfda6 100644 --- a/Telegram/SourceFiles/window.cpp +++ b/Telegram/SourceFiles/window.cpp @@ -1467,8 +1467,8 @@ void Window::notifyShowNext(NotifyWindow *remove) { uint64 ms = getms(true); History *history = notifyItem->history(); NotifyWhenMaps::iterator j = notifyWhenMaps.find(history); - - if (j == notifyWhenMaps.end()) { + bool notifyWhenFound = (j != notifyWhenMaps.cend()); + if (!notifyWhenFound) { history->clearNotifications(); } else { HistoryItem *nextNotify = 0; @@ -1516,7 +1516,7 @@ void Window::notifyShowNext(NotifyWindow *remove) { if (!history->hasNotification()) { if (notifyWaiter != notifyWaiters.cend()) notifyWaiters.erase(notifyWaiter); - if (j != notifyWhenMaps.cend()) notifyWhenMaps.erase(j); + if (notifyWhenFound) notifyWhenMaps.erase(j); continue; } } From 2039cd466028c33dba4d91202f879dddc92a27a1 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sun, 16 Aug 2015 18:27:34 +0300 Subject: [PATCH 102/121] fixed win7 start --- Telegram/SourceFiles/pspecific_wnd.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/Telegram/SourceFiles/pspecific_wnd.cpp b/Telegram/SourceFiles/pspecific_wnd.cpp index 2ea13bc9a..6fbbb4105 100644 --- a/Telegram/SourceFiles/pspecific_wnd.cpp +++ b/Telegram/SourceFiles/pspecific_wnd.cpp @@ -714,13 +714,15 @@ namespace { setupUx(); setupShell(); setupWtsapi(); + setupPropSys(); setupCombase(); + + useTheme = !!setWindowTheme; } void setupUx() { HINSTANCE procId = LoadLibrary(L"UXTHEME.DLL"); - if (!loadFunction(procId, "SetWindowTheme", setWindowTheme)) return; - useTheme = true; + loadFunction(procId, "SetWindowTheme", setWindowTheme); } void setupShell() { HINSTANCE procId = LoadLibrary(L"SHELL32.DLL"); @@ -758,7 +760,12 @@ namespace { HINSTANCE procId = LoadLibrary(L"COMBASE.DLL"); setupToast(procId); } + void setupPropSys() { + HINSTANCE procId = LoadLibrary(L"PROPSYS.DLL"); + if (!loadFunction(procId, "PropVariantToString", procId)) return; + } void setupToast(HINSTANCE procId) { + if (!propVariantToString) return; if (QSysInfo::windowsVersion() < QSysInfo::WV_WINDOWS8) return; if (!loadFunction(procId, "RoGetActivationFactory", roGetActivationFactory)) return; @@ -766,9 +773,6 @@ namespace { if (!loadFunction(otherProcId, "WindowsCreateStringReference", windowsCreateStringReference)) return; if (!loadFunction(otherProcId, "WindowsDeleteString", windowsDeleteString)) return; - HINSTANCE otherOtherProcId = LoadLibrary(L"PROPSYS.DLL"); - if (!loadFunction(otherOtherProcId, "PropVariantToString", propVariantToString)) return; - useToast = true; } }; @@ -2822,6 +2826,8 @@ QString pinnedPath() { } void CheckPinnedAppUserModelId() { + if (!propVariantToString) return; + static const int maxFileLen = MAX_PATH * 10; HRESULT hr = CoInitialize(0); From 6a05924dcfbf2a9fbe7a96fcfa9f3aca2e907b08 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sun, 16 Aug 2015 19:37:56 +0300 Subject: [PATCH 103/121] version 0.8.51 prepared, with win7 and winxp fix --- Telegram/PrepareWin.bat | 10 +++--- Telegram/SourceFiles/application.cpp | 2 +- Telegram/SourceFiles/config.h | 6 ++-- Telegram/SourceFiles/dialogswidget.cpp | 36 ++++++++++---------- Telegram/SourceFiles/pspecific_wnd.cpp | 21 ++++++------ Telegram/SourceFiles/stdafx.h | 2 +- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 +++---- Telegram/Version.sh | 2 +- 10 files changed, 47 insertions(+), 46 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index 0697c6daa..2e28a555b 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,11 +1,11 @@ @echo OFF set "AppVersionStrMajor=0.8" -set "AppVersion=8050" -set "AppVersionStrSmall=0.8.50" -set "AppVersionStr=0.8.50" -set "AppVersionStrFull=0.8.50.0" -set "DevChannel=1" +set "AppVersion=8051" +set "AppVersionStrSmall=0.8.51" +set "AppVersionStr=0.8.51" +set "AppVersionStrFull=0.8.51.0" +set "DevChannel=0" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index da51a09eb..85096cf9c 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -658,7 +658,7 @@ void Application::checkMapVersion() { QString versionFeatures; if (cDevVersion() && Local::oldMapVersion() < 8050) { versionFeatures = QString::fromUtf8("\xe2\x80\x94 Bug fixes in Windows notifications\n\xe2\x80\x94 Fixed input methods on Linux (Fcitx and IBus)");// .replace('@', qsl("@") + QChar(0x200D)); - } else if (!cDevVersion() && Local::oldMapVersion() < 8048) { + } else if (!cDevVersion() && Local::oldMapVersion() < 8051) { versionFeatures = lang(lng_new_version_text).trimmed(); } if (!versionFeatures.isEmpty()) { diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 01a097edf..a2701766d 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,9 +17,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8050; -static const wchar_t *AppVersionStr = L"0.8.50"; -static const bool DevVersion = true; +static const int32 AppVersion = 8051; +static const wchar_t *AppVersionStr = L"0.8.51"; +static const bool DevVersion = false; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index 771efe276..e28b385aa 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -969,7 +969,7 @@ void DialogsListWidget::selectSkip(int32 direction) { if (!sel) { if (dialogs.list.count && direction > 0) { sel = dialogs.list.begin; - } else if (contactsNoDialogs.list.count && direction > 0) { + } else if (false && contactsNoDialogs.list.count && direction > 0) { sel = contactsNoDialogs.list.begin; } else { return; @@ -977,14 +977,14 @@ void DialogsListWidget::selectSkip(int32 direction) { } else if (direction > 0) { if (sel->next->next) { sel = sel->next; - } else if (sel->next == dialogs.list.end && contactsNoDialogs.list.count) { + } else if (false && sel->next == dialogs.list.end && contactsNoDialogs.list.count) { sel = contactsNoDialogs.list.begin; contactSel = true; } } else { if (sel->prev) { sel = sel->prev; - } else if (sel == contactsNoDialogs.list.begin && dialogs.list.count) { + } else if (false && sel == contactsNoDialogs.list.begin && dialogs.list.count) { sel = dialogs.list.end->prev; contactSel = false; } @@ -1042,7 +1042,7 @@ void DialogsListWidget::scrollToPeer(const PeerId &peer, MsgId msgId) { DialogsList::RowByPeer::const_iterator i = dialogs.list.rowByPeer.constFind(peer); if (i != dialogs.list.rowByPeer.cend()) { fromY = i.value()->pos * st::dlgHeight; - } else { + } else if (false) { i = contactsNoDialogs.list.rowByPeer.constFind(peer); if (i != contactsNoDialogs.list.rowByPeer.cend()) { fromY = (i.value()->pos + dialogs.list.count) * st::dlgHeight; @@ -1077,7 +1077,7 @@ void DialogsListWidget::selectSkipPage(int32 pixels, int32 direction) { if (!sel) { if (direction > 0 && dialogs.list.count) { sel = dialogs.list.begin; - } else if (direction > 0 && contactsNoDialogs.list.count) { + } else if (false && direction > 0 && contactsNoDialogs.list.count) { sel = contactsNoDialogs.list.begin; } else { return; @@ -1087,7 +1087,7 @@ void DialogsListWidget::selectSkipPage(int32 pixels, int32 direction) { while (toSkip-- && sel->next->next) { sel = sel->next; } - if (toSkip >= 0 && sel->next == dialogs.list.end && contactsNoDialogs.list.count) { + if (false && toSkip >= 0 && sel->next == dialogs.list.end && contactsNoDialogs.list.count) { sel = contactsNoDialogs.list.begin; while (toSkip-- && sel->next->next) { sel = sel->next; @@ -1358,17 +1358,17 @@ void DialogsListWidget::peerAfter(const PeerData *inPeer, MsgId inMsg, PeerData if (_state == DefaultState) { DialogsList::RowByPeer::const_iterator i = dialogs.list.rowByPeer.constFind(inPeer->id); if (i == dialogs.list.rowByPeer.constEnd()) { - i = contactsNoDialogs.list.rowByPeer.constFind(inPeer->id); - if (i == contactsNoDialogs.list.rowByPeer.cend()) { - outPeer = 0; - outMsg = 0; - return; - } - if (i.value()->next != contactsNoDialogs.list.end) { - outPeer = i.value()->next->history->peer; - outMsg = ShowAtUnreadMsgId; - return; - } + //i = contactsNoDialogs.list.rowByPeer.constFind(inPeer->id); + //if (i == contactsNoDialogs.list.rowByPeer.cend()) { + // outPeer = 0; + // outMsg = 0; + // return; + //} + //if (i.value()->next != contactsNoDialogs.list.end) { + // outPeer = i.value()->next->history->peer; + // outMsg = ShowAtUnreadMsgId; + // return; + //} outPeer = 0; outMsg = 0; return; @@ -1378,7 +1378,7 @@ void DialogsListWidget::peerAfter(const PeerData *inPeer, MsgId inMsg, PeerData outPeer = i.value()->next->history->peer; outMsg = ShowAtUnreadMsgId; return; - } else if (contactsNoDialogs.list.count) { + } else if (false && contactsNoDialogs.list.count) { outPeer = contactsNoDialogs.list.begin->history->peer; outMsg = ShowAtUnreadMsgId; return; diff --git a/Telegram/SourceFiles/pspecific_wnd.cpp b/Telegram/SourceFiles/pspecific_wnd.cpp index 6fbbb4105..58832dc8f 100644 --- a/Telegram/SourceFiles/pspecific_wnd.cpp +++ b/Telegram/SourceFiles/pspecific_wnd.cpp @@ -27,8 +27,14 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "passcodewidget.h" #include -#include #include + +#include +#include +#include +#include + +#include #include #include #include @@ -46,11 +52,6 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include #include -#include -#include -#include -#include - #include #define min(a, b) ((a) < (b) ? (a) : (b)) @@ -762,7 +763,7 @@ namespace { } void setupPropSys() { HINSTANCE procId = LoadLibrary(L"PROPSYS.DLL"); - if (!loadFunction(procId, "PropVariantToString", procId)) return; + if (!loadFunction(procId, "PropVariantToString", propVariantToString)) return; } void setupToast(HINSTANCE procId) { if (!propVariantToString) return; @@ -2223,7 +2224,7 @@ void RegisterCustomScheme() { void psNewVersion() { RegisterCustomScheme(); - if (Local::oldSettingsVersion() < 8050) { + if (Local::oldSettingsVersion() < 8051) { CheckPinnedAppUserModelId(); } } @@ -2835,9 +2836,9 @@ void CheckPinnedAppUserModelId() { QString path = pinnedPath(); std::wstring p = QDir::toNativeSeparators(path).toStdWString(); - + WCHAR src[MAX_PATH]; - GetModuleFileNameEx(GetCurrentProcess(), nullptr, src, MAX_PATH); + GetModuleFileName(GetModuleHandle(0), src, MAX_PATH); BY_HANDLE_FILE_INFORMATION srcinfo = { 0 }; HANDLE srcfile = CreateFile(src, 0x00, 0x00, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (srcfile == INVALID_HANDLE_VALUE) return; diff --git a/Telegram/SourceFiles/stdafx.h b/Telegram/SourceFiles/stdafx.h index bb7cc5f4b..6a17ea088 100644 --- a/Telegram/SourceFiles/stdafx.h +++ b/Telegram/SourceFiles/stdafx.h @@ -16,7 +16,7 @@ Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #define __HUGE - +#define PSAPI_VERSION 1 // fix WinXP //#define Q_NO_TEMPLATE_FRIENDS // fix some compiler difference issues #include diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index 744911c58..37e739bf7 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.50 + 0.8.51 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index 63fef2cd598c769457efb7a74fcae50a9064ce1a..c9f1d53aa3a65d3f21592d8171b3064441d1c2e1 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_R)3 diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index 83eb18288..8e0a76647 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -1707,7 +1707,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.50; + CURRENT_PROJECT_VERSION = 0.8.51; DEBUG_INFORMATION_FORMAT = dwarf; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -1725,7 +1725,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 0.8.50; + CURRENT_PROJECT_VERSION = 0.8.51; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = fast; GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h; @@ -1751,10 +1751,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.50; + CURRENT_PROJECT_VERSION = 0.8.51; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DYLIB_COMPATIBILITY_VERSION = 0.8; - DYLIB_CURRENT_VERSION = 0.8.50; + DYLIB_CURRENT_VERSION = 0.8.51; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -1885,10 +1885,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.50; + CURRENT_PROJECT_VERSION = 0.8.51; DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 0.8; - DYLIB_CURRENT_VERSION = 0.8.50; + DYLIB_CURRENT_VERSION = 0.8.51; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; diff --git a/Telegram/Version.sh b/Telegram/Version.sh index a30d1e842..497943c84 100755 --- a/Telegram/Version.sh +++ b/Telegram/Version.sh @@ -1,2 +1,2 @@ -echo 0.8 8050 0.8.50 1 +echo 0.8 8051 0.8.51 0 # AppVersionStrMajor AppVersion AppVersionStr DevChannel From 6dfa9dd3b5c39c470a3cc55fc2795b0a4d4f144e Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 17 Aug 2015 12:29:00 +0300 Subject: [PATCH 104/121] langs updated, version 0.8.51 stable --- Telegram/SourceFiles/config.h | 2 +- Telegram/SourceFiles/langs/lang_de.strings | 2 +- Telegram/SourceFiles/langs/lang_es.strings | 2 +- Telegram/SourceFiles/langs/lang_it.strings | 4 +-- Telegram/SourceFiles/langs/lang_ko.strings | 26 +++++++++---------- Telegram/SourceFiles/langs/lang_nl.strings | 2 +- Telegram/SourceFiles/langs/lang_pt_BR.strings | 2 +- 7 files changed, 20 insertions(+), 20 deletions(-) diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 01a097edf..bf312bef2 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -295,7 +295,7 @@ enum { DefaultChatBackground = 21, DialogsFirstLoad = 20, // first dialogs part size requested - DialogsPerPage = 40, // next dialogs part size + DialogsPerPage = 200, // next dialogs part size MessagesFirstLoad = 30, // first history part size requested MessagesPerPage = 50, // next history part size diff --git a/Telegram/SourceFiles/langs/lang_de.strings b/Telegram/SourceFiles/langs/lang_de.strings index 341c4d816..8b9ee477f 100644 --- a/Telegram/SourceFiles/langs/lang_de.strings +++ b/Telegram/SourceFiles/langs/lang_de.strings @@ -641,7 +641,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop wurde aktualisiert auf Version {version}\n\n{changes}\n\nGesamter Versionsverlauf:\n{link}"; "lng_new_version_minor" = "— Fehlerbehebungen und Softwareoptimierungen"; -"lng_new_version_text" = "— Direkte Suche in Chats (Chat auswählen und STRG+F drücken)\n— Verlauf in Gruppen löschen (in der Gruppe auf den Gruppennamen tippen)\n— Kontakte, mit denen du nicht chattest, werden nicht mehr in der Übersicht gezeigt"; +"lng_new_version_text" = "— Blockiere Nutzer über die Profilseite (im Chat auf den Namen oben tippen)\n— Windows 8, 8.1 und 10: Native Windowsbenachrichtigungen\n— Fehlerbehebung: Eingabemethoden unter Linux (Fcitx und iBus)"; "lng_menu_insert_unicode" = "Unicode-Steuerzeichen einfügen"; diff --git a/Telegram/SourceFiles/langs/lang_es.strings b/Telegram/SourceFiles/langs/lang_es.strings index e53618c1d..121130a6d 100644 --- a/Telegram/SourceFiles/langs/lang_es.strings +++ b/Telegram/SourceFiles/langs/lang_es.strings @@ -641,7 +641,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop fue actualizada a la versión {version}\n\n{changes}\n\nEl historial completo está disponible aquí:\n{link}"; "lng_new_version_minor" = "— Corrección de errores y otras mejoras menores"; -"lng_new_version_text" = "— Busca mensajes en un chat\n— Borra el historial de mensajes en grupos\n— Los contactos sin mensajes se ocultarán de la lista de chats"; +"lng_new_version_text" = "— Bloquea usuarios desde sus perfiles\n— Añadido el soporte para notificaciones Windows toast\n— Arreglados los métodos de entrada en Linux (Fcitx e IBus)"; "lng_menu_insert_unicode" = "Insertar caracteres de control Unicode"; diff --git a/Telegram/SourceFiles/langs/lang_it.strings b/Telegram/SourceFiles/langs/lang_it.strings index 3f3d2cdcd..f053bb974 100644 --- a/Telegram/SourceFiles/langs/lang_it.strings +++ b/Telegram/SourceFiles/langs/lang_it.strings @@ -397,7 +397,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_create_group_title" = "Nuovo gruppo"; "lng_failed_add_participant" = "Impossibile aggiungere l'utente. Riprova più tardi."; -"lng_failed_add_not_mutual" = "Se una persona lascia un gruppo,\nsolo un contatto in comune può reinvitarlo\n(devono avere il tuo numero\ndi telefono, e tu il loro)."; +"lng_failed_add_not_mutual" = "Se una persona lascia un gruppo,\nsolo un contatto in comune può reinvitarla\n(lei deve avere il tuo numero\ndi telefono, e tu il suo)."; "lng_sure_delete_contact" = "Sicuro di volere eliminare {contact} dalla tua lista dei contatti?"; "lng_sure_delete_history" = "Sicuro di voler eliminare tutta la cronologia dei messaggi con {contact}?\n\nQuesta azione non può essere annullata."; @@ -641,7 +641,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop si è aggiornato alla versione {version}\n\n{changes}\n\nLa cronologia degli update è disponibile qui:\n{link}"; "lng_new_version_minor" = "— Bug fix e altri miglioramenti minori"; -"lng_new_version_text" = "— Cerca messaggi in una chat\n— Pulisci la cronologia dei messaggi nei gruppi\n— I contatti senza messaggi sono nascosti dalla lista delle chat"; +"lng_new_version_text" = "— Blocca gli utenti dalla loro pagina profilo\n— Aggiunto il supporto per le notifiche toast di Windows\n— Risolti i problemi con alcuni metodi di input su Linux (Fcitx and IBus)"; "lng_menu_insert_unicode" = "Inserisci carattere di controllo Unicode"; diff --git a/Telegram/SourceFiles/langs/lang_ko.strings b/Telegram/SourceFiles/langs/lang_ko.strings index e869939ed..6807a4abe 100644 --- a/Telegram/SourceFiles/langs/lang_ko.strings +++ b/Telegram/SourceFiles/langs/lang_ko.strings @@ -69,7 +69,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_reconnecting_try_now" = "다시 시도"; "lng_status_service_notifications" = "서비스 알림"; -"lng_status_support" = "support"; +"lng_status_support" = "지원"; "lng_status_bot" = "bot"; "lng_status_bot_reads_all" = "메시지 접근 권한이 있습니다."; "lng_status_bot_not_reads_all" = "메시지 접근 권한이 없습니다."; @@ -186,7 +186,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_desktop_notify" = "데스크탑 알림"; "lng_settings_show_name" = "발신인 표시"; "lng_settings_show_preview" = "메시지 미리보기"; -"lng_settings_use_windows" = "Use Windows notifications"; +"lng_settings_use_windows" = "윈도우 알림 사용"; "lng_settings_sound_notify" = "소리 재생"; "lng_notification_preview" = "새로운 메시지가 있습니다."; @@ -325,11 +325,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_reset_one_sure" = "해당 세션을 강제 종료 하시겠습니까?"; "lng_settings_reset_button" = "종료"; "lng_settings_reset_done" = "다른 모든 세션이 강제 종료 되었습니다."; -"lng_settings_ask_question" = "Ask a Question"; -"lng_settings_ask_sure" = "Please note that Telegram Support is done by volunteers. We try to respond as quickly as possible, but it may take a while.\n\nPlease take a look at the Telegram FAQ: it has important troubleshooting tips and answers to most questions."; -"lng_settings_faq_button" = "Go to FAQ"; -"lng_settings_ask_ok" = "Ask"; -"lng_settings_faq" = "Telegram FAQ"; +"lng_settings_ask_question" = "질문하기"; +"lng_settings_ask_sure" = "텔레그램에 관한 질문은 자원봉사자들이 답변해 드립니다. 신속한 답변을 위해 노력하지만 답변이 다소 늦을 수 있습니다.\n\n일반적인 문제와 해결방법에 대해서는 자주 묻는 질문을 확인해 보세요."; +"lng_settings_faq_button" = "자주 묻는 질문 으로 이동"; +"lng_settings_ask_ok" = "질문하기"; +"lng_settings_faq" = "텔레그램 자주 묻는 질문"; "lng_settings_logout" = "로그아웃"; "lng_sure_logout" = "로그아웃을 하시겠습니까?"; @@ -362,10 +362,10 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_delete_conversation" = "대화 지우기"; "lng_profile_clear_and_exit" = "삭제 후 종료"; "lng_profile_search_messages" = "메시지 검색"; -"lng_profile_block_user" = "Block user"; -"lng_profile_unblock_user" = "Unblock user"; -"lng_profile_block_bot" = "Stop and block bot"; -"lng_profile_unblock_bot" = "Unblock bot"; +"lng_profile_block_user" = "차단하기"; +"lng_profile_unblock_user" = "차단해제하기"; +"lng_profile_block_bot" = "봇 중지 및 차단"; +"lng_profile_unblock_bot" = "봇 차단해제"; "lng_profile_send_message" = "메세지 전송"; "lng_profile_share_contact" = "연락처 공유"; "lng_profile_invite_to_group" = "그룹에 추가"; @@ -486,7 +486,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_message_with_from" = "[c]{from}:[/c] {message}"; "lng_from_you" = "회원님"; "lng_bot_description" = "봇이 할 수 있는 일은 무엇일까요?"; -"lng_unblock_button" = "Unblock"; +"lng_unblock_button" = "차단해제"; "lng_bot_start" = "시작"; "lng_bot_choose_group" = "그룹 선택"; @@ -641,7 +641,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "텔레그램 데스크탑은 {version} 버전으로 업데이트 되었습니다.\n\n{changes}\n\n전체 버전 히스토리는 아래에서 확인 가능합니다:\n{link}"; "lng_new_version_minor" = "— 버그 수정 및 일부 기능 향상"; -"lng_new_version_text" = "— 대화방내 검색 기능\n— 그룹방 대화내용 삭제\n— 메시지가 없는 대화방은 대화목록에서 숨겨짐"; +"lng_new_version_text" = "— 프로필 화면에서 사용자 차단\n— 윈도우 알림 지원\n— 리눅스 입력 방법 수정 (Fcitx and IBus)"; "lng_menu_insert_unicode" = "유니코드 문자를 입력하세요."; diff --git a/Telegram/SourceFiles/langs/lang_nl.strings b/Telegram/SourceFiles/langs/lang_nl.strings index 3257b0d34..a4febb0f4 100644 --- a/Telegram/SourceFiles/langs/lang_nl.strings +++ b/Telegram/SourceFiles/langs/lang_nl.strings @@ -641,7 +641,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram is bijgewerkt naar versie {version}\n\n{changes} \n\nVolledige versiegeschiedenis is hier te vinden:\n{link}"; "lng_new_version_minor" = "— Probleemoplossing en andere kleine verbeteringen"; -"lng_new_version_text" = "— Zoek berichten binnen gesprekken\n— Berichtengeschiedenis van groepen wissen\n— Contacten zonder berichten zijn verborgen in de gesprekslijst"; +"lng_new_version_text" = "— Blokkeer gebruikers vanaf de profielpagina\n— Ondersteuning voor Windows toast-meldingen\n— Problemen met invoermethodes onder Linux (Fcitx and IBus) opgelost"; "lng_menu_insert_unicode" = "Unicode-besturingsteken invoegen"; diff --git a/Telegram/SourceFiles/langs/lang_pt_BR.strings b/Telegram/SourceFiles/langs/lang_pt_BR.strings index 72fa35287..89c481fe4 100644 --- a/Telegram/SourceFiles/langs/lang_pt_BR.strings +++ b/Telegram/SourceFiles/langs/lang_pt_BR.strings @@ -641,7 +641,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop foi atualizado para a versão {version}\n\n{changes}\n\nHistórico completo de mudanças disponível aqui:\n{link}"; "lng_new_version_minor" = "— Resolução de bugs e outras menores melhorias"; -"lng_new_version_text" = "— Buscar mensagens em uma conversa\n— Limpar histórico de mensagens em grupos\n— Contatos sem mensagens estão ocultos da lista de conversas"; +"lng_new_version_text" = "— Bloqueie usuários direto da página do perfil\n— Adicionado suporte às notificações de sistema do Windows\n— Consertado métodos de entrada no Linux (Fcitx e IBus)"; "lng_menu_insert_unicode" = "Inserir caractere de controle Unicode"; From 5a1079e3676d2bf91d3f2e73f3abec01b0c6bf7a Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 19 Aug 2015 16:54:17 +0300 Subject: [PATCH 105/121] version 0.8.52 with some fixes --- Telegram/PrepareWin.bat | 8 ++++---- Telegram/SourceFiles/application.cpp | 4 ++-- Telegram/SourceFiles/config.h | 4 ++-- Telegram/SourceFiles/localstorage.cpp | 4 +++- Telegram/SourceFiles/pspecific_wnd.cpp | 6 +++++- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 ++++++------ Telegram/Version.sh | 2 +- 9 files changed, 24 insertions(+), 18 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index 2e28a555b..4a1fa200f 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,10 +1,10 @@ @echo OFF set "AppVersionStrMajor=0.8" -set "AppVersion=8051" -set "AppVersionStrSmall=0.8.51" -set "AppVersionStr=0.8.51" -set "AppVersionStrFull=0.8.51.0" +set "AppVersion=8052" +set "AppVersionStrSmall=0.8.52" +set "AppVersionStr=0.8.52" +set "AppVersionStrFull=0.8.52.0" set "DevChannel=0" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index 85096cf9c..960793b67 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -658,8 +658,8 @@ void Application::checkMapVersion() { QString versionFeatures; if (cDevVersion() && Local::oldMapVersion() < 8050) { versionFeatures = QString::fromUtf8("\xe2\x80\x94 Bug fixes in Windows notifications\n\xe2\x80\x94 Fixed input methods on Linux (Fcitx and IBus)");// .replace('@', qsl("@") + QChar(0x200D)); - } else if (!cDevVersion() && Local::oldMapVersion() < 8051) { - versionFeatures = lang(lng_new_version_text).trimmed(); + } else if (!cDevVersion() && Local::oldMapVersion() < 8052) { + versionFeatures = lang(lng_new_version_minor).trimmed(); } if (!versionFeatures.isEmpty()) { versionFeatures = lng_new_version_wrap(lt_version, QString::fromStdWString(AppVersionStr), lt_changes, versionFeatures, lt_link, qsl("https://desktop.telegram.org/#changelog")); diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 3490453cd..6b9d80a95 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,8 +17,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8051; -static const wchar_t *AppVersionStr = L"0.8.51"; +static const int32 AppVersion = 8052; +static const wchar_t *AppVersionStr = L"0.8.52"; static const bool DevVersion = false; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; diff --git a/Telegram/SourceFiles/localstorage.cpp b/Telegram/SourceFiles/localstorage.cpp index 125041324..a1eb4837a 100644 --- a/Telegram/SourceFiles/localstorage.cpp +++ b/Telegram/SourceFiles/localstorage.cpp @@ -744,7 +744,9 @@ namespace { if (!_checkStreamStatus(stream)) return false; cSetWindowsNotifications(v == 1); - cSetCustomNotifies((App::wnd() ? App::wnd()->psHasNativeNotifications() : true) && !cWindowsNotifications()); + if (cPlatform() == dbipWindows) { + cSetCustomNotifies((App::wnd() ? !App::wnd()->psHasNativeNotifications() : true) || !cWindowsNotifications()); + } } break; case dbiWorkMode: { diff --git a/Telegram/SourceFiles/pspecific_wnd.cpp b/Telegram/SourceFiles/pspecific_wnd.cpp index 58832dc8f..af60a328a 100644 --- a/Telegram/SourceFiles/pspecific_wnd.cpp +++ b/Telegram/SourceFiles/pspecific_wnd.cpp @@ -119,6 +119,7 @@ namespace { }; typedef QMap ToastImages; ToastImages toastImages; + bool toastImageSaved = false; HWND createTaskbarHider() { HINSTANCE appinst = (HINSTANCE)GetModuleHandle(0); @@ -2148,7 +2149,9 @@ void psStart() { } void psFinish() { - psDeleteDir(cWorkingDir() + qsl("tdata/temp")); + if (toastImageSaved) { + psDeleteDir(cWorkingDir() + qsl("tdata/temp")); + } } namespace { @@ -2706,6 +2709,7 @@ QString toastImage(const StorageKey &key, PeerData *peer) { App::wnd()->iconLarge().save(v.path, "PNG"); } i = toastImages.insert(key, v); + toastImageSaved = true; } return i->path; } diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index 37e739bf7..b4aada093 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.51 + 0.8.52 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index c9f1d53aa3a65d3f21592d8171b3064441d1c2e1..0473e1651598623718e07b9a955505635ca34c54 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_B Date: Thu, 20 Aug 2015 00:00:37 +0200 Subject: [PATCH 106/121] Allow to disable the updater using a marco Adding "DEFINES += TDESKTOP_DISABLE_AUTOUPDATE" to Telegram.pro would disable the updater. This eases creating packages for Linux distributions, where updates are handled by the corresponding package manager. --- Telegram/SourceFiles/application.cpp | 23 +++++++++++++++++++++-- Telegram/SourceFiles/application.h | 10 ++++++++++ Telegram/SourceFiles/autoupdater.cpp | 5 +++++ Telegram/SourceFiles/autoupdater.h | 4 ++++ Telegram/SourceFiles/intro/intro.cpp | 2 ++ Telegram/SourceFiles/main.cpp | 5 ++++- Telegram/SourceFiles/mainwidget.cpp | 2 ++ Telegram/SourceFiles/settingswidget.cpp | 25 +++++++++++++++++++++++++ Telegram/SourceFiles/settingswidget.h | 8 ++++++++ Telegram/SourceFiles/sysbuttons.cpp | 2 ++ Telegram/SourceFiles/title.cpp | 2 ++ 11 files changed, 85 insertions(+), 3 deletions(-) diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index 960793b67..684d76561 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -95,7 +95,10 @@ namespace { Application::Application(int &argc, char **argv) : PsApplication(argc, argv), serverName(psServerPrefix() + cGUIDStr()), closing(false), - updateRequestId(0), updateReply(0), updateThread(0), updateDownloader(0), _translator(0) { + #ifndef TDESKTOP_DISABLE_AUTOUPDATE + updateRequestId(0), updateReply(0), updateThread(0), updateDownloader(0), + #endif + _translator(0) { DEBUG_LOG(("Application Info: creation..")); @@ -178,9 +181,11 @@ Application::Application(int &argc, char **argv) : PsApplication(argc, argv), connect(&socket, SIGNAL(readyRead()), this, SLOT(socketReading())); connect(&server, SIGNAL(newConnection()), this, SLOT(newInstanceConnected())); connect(this, SIGNAL(aboutToQuit()), this, SLOT(closeApplication())); + #ifndef TDESKTOP_DISABLE_AUTOUPDATE connect(&updateCheckTimer, SIGNAL(timeout()), this, SLOT(startUpdateCheck())); connect(this, SIGNAL(updateFailed()), this, SLOT(onUpdateFailed())); connect(this, SIGNAL(updateReady()), this, SLOT(onUpdateReady())); + #endif connect(this, SIGNAL(applicationStateChanged(Qt::ApplicationState)), this, SLOT(onAppStateChanged(Qt::ApplicationState))); //connect(&writeUserConfigTimer, SIGNAL(timeout()), this, SLOT(onWriteUserConfig())); //writeUserConfigTimer.setSingleShot(true); @@ -195,6 +200,7 @@ Application::Application(int &argc, char **argv) : PsApplication(argc, argv), } } +#ifndef TDESKTOP_DISABLE_AUTOUPDATE void Application::updateGotCurrent() { if (!updateReply || updateThread) return; @@ -258,6 +264,7 @@ void Application::onUpdateFailed() { cSetLastUpdateCheck(unixtime()); Local::writeSettings(); } +#endif void Application::regPhotoUpdate(const PeerId &peer, MsgId msgId) { photoUpdates.insert(msgId, peer); @@ -431,11 +438,16 @@ void Application::onSwitchTestMode() { } Application::UpdatingState Application::updatingState() { + #ifndef TDESKTOP_DISABLE_AUTOUPDATE if (!updateThread) return Application::UpdatingNone; if (!updateDownloader) return Application::UpdatingReady; return Application::UpdatingDownload; + #else + return Application::UpdatingNone; + #endif } +#ifndef TDESKTOP_DISABLE_AUTOUPDATE int32 Application::updatingSize() { if (!updateDownloader) return 0; return updateDownloader->size(); @@ -445,6 +457,7 @@ int32 Application::updatingReady() { if (!updateDownloader) return 0; return updateDownloader->ready(); } +#endif FileUploader *Application::uploader() { if (!::uploader) ::uploader = new FileUploader(); @@ -488,6 +501,7 @@ void Application::uploadProfilePhoto(const QImage &tosend, const PeerId &peerId) App::uploader()->uploadMedia(newId, ready); } +#ifndef TDESKTOP_DISABLE_AUTOUPDATE void Application::stopUpdate() { if (updateReply) { updateReply->abort(); @@ -541,6 +555,7 @@ void Application::startUpdateCheck(bool forceWait) { updateCheckTimer.start((updateInSecs + 5) * 1000); } } +#endif namespace { QChar _toHex(ushort v) { @@ -643,11 +658,13 @@ void Application::socketError(QLocalSocket::LocalSocketError e) { return App::quit(); } + #ifndef TDESKTOP_DISABLE_AUTOUPDATE if (!cNoStartUpdate() && checkReadyUpdate()) { cSetRestartingUpdate(true); DEBUG_LOG(("Application Info: installing update instead of starting app..")); return App::quit(); } + #endif startApp(); } @@ -833,13 +850,15 @@ Application::~Application() { App::deinitMedia(); deinitImageLinkManager(); mainApp = 0; - delete updateReply; delete ::uploader; + #ifndef TDESKTOP_DISABLE_AUTOUPDATE + delete updateReply; updateReply = 0; if (updateDownloader) updateDownloader->deleteLater(); updateDownloader = 0; if (updateThread) updateThread->quit(); updateThread = 0; + #endif delete window; diff --git a/Telegram/SourceFiles/application.h b/Telegram/SourceFiles/application.h index 694db8850..c94ce93d9 100644 --- a/Telegram/SourceFiles/application.h +++ b/Telegram/SourceFiles/application.h @@ -49,8 +49,10 @@ public: UpdatingReady, }; UpdatingState updatingState(); + #ifndef TDESKTOP_DISABLE_AUTOUPDATE int32 updatingSize(); int32 updatingReady(); + #endif FileUploader *uploader(); void uploadProfilePhoto(const QImage &tosend, const PeerId &peerId); @@ -78,11 +80,13 @@ public: signals: + #ifndef TDESKTOP_DISABLE_AUTOUPDATE void updateChecking(); void updateLatest(); void updateDownloading(qint64 ready, qint64 total); void updateReady(); void updateFailed(); + #endif void peerPhotoDone(PeerId peer); void peerPhotoFail(PeerId peer); @@ -91,7 +95,9 @@ signals: public slots: + #ifndef TDESKTOP_DISABLE_AUTOUPDATE void startUpdateCheck(bool forceWait = false); + #endif void socketConnected(); void socketError(QLocalSocket::LocalSocketError e); void socketDisconnected(); @@ -103,11 +109,13 @@ public slots: void readClients(); void removeClients(); + #ifndef TDESKTOP_DISABLE_AUTOUPDATE void updateGotCurrent(); void updateFailedCurrent(QNetworkReply::NetworkError e); void onUpdateReady(); void onUpdateFailed(); + #endif void photoUpdated(MsgId msgId, const MTPInputFile &file); @@ -142,12 +150,14 @@ private: Window *window; + #ifndef TDESKTOP_DISABLE_AUTOUPDATE mtpRequestId updateRequestId; QNetworkAccessManager updateManager; QNetworkReply *updateReply; SingleTimer updateCheckTimer; QThread *updateThread; UpdateDownloader *updateDownloader; + #endif QTimer writeUserConfigTimer; diff --git a/Telegram/SourceFiles/autoupdater.cpp b/Telegram/SourceFiles/autoupdater.cpp index 2d4771ce2..87cdba144 100644 --- a/Telegram/SourceFiles/autoupdater.cpp +++ b/Telegram/SourceFiles/autoupdater.cpp @@ -15,6 +15,9 @@ GNU General Public License for more details. Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE Copyright (c) 2014 John Preston, https://desktop.telegram.org */ + +#ifndef TDESKTOP_DISABLE_AUTOUPDATE + #include "stdafx.h" #include "application.h" #include "pspecific.h" @@ -534,3 +537,5 @@ bool checkReadyUpdate() { #endif return true; } + +#endif diff --git a/Telegram/SourceFiles/autoupdater.h b/Telegram/SourceFiles/autoupdater.h index 097f335ad..f8580c6b3 100644 --- a/Telegram/SourceFiles/autoupdater.h +++ b/Telegram/SourceFiles/autoupdater.h @@ -17,6 +17,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once +#ifndef TDESKTOP_DISABLE_AUTOUPDATE + #include #include #include @@ -60,3 +62,5 @@ private: }; bool checkReadyUpdate(); + +#endif diff --git a/Telegram/SourceFiles/intro/intro.cpp b/Telegram/SourceFiles/intro/intro.cpp index 0a6bace09..b1bd08aab 100644 --- a/Telegram/SourceFiles/intro/intro.cpp +++ b/Telegram/SourceFiles/intro/intro.cpp @@ -43,7 +43,9 @@ namespace { countryForReg = nearest.vcountry.c_string().v.c_str(); emit signalEmitOn->countryChanged(); } + #ifndef TDESKTOP_DISABLE_AUTOUPDATE if (App::app()) App::app()->startUpdateCheck(); + #endif } } diff --git a/Telegram/SourceFiles/main.cpp b/Telegram/SourceFiles/main.cpp index 26b897b08..99c7e7787 100644 --- a/Telegram/SourceFiles/main.cpp +++ b/Telegram/SourceFiles/main.cpp @@ -81,6 +81,7 @@ int main(int argc, char *argv[]) { DEBUG_LOG(("Application Info: Telegram done, result: %1").arg(result)); + #ifndef TDESKTOP_DISABLE_AUTOUPDATE if (cRestartingUpdate()) { if (DevVersion) { LOG(("Writing 'devversion' file before launching the Updater!")); @@ -93,7 +94,9 @@ int main(int argc, char *argv[]) { DEBUG_LOG(("Application Info: executing updater to install update..")); psExecUpdater(); - } else if (cRestarting()) { + } else + #endif + if (cRestarting()) { DEBUG_LOG(("Application Info: executing Telegram, because of restart..")); psExecTelegram(); } diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 3a75d23cb..cef05220e 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -2768,7 +2768,9 @@ void MainWidget::start(const MTPUser &user) { cSetOtherOnline(0); App::feedUsers(MTP_vector(1, user)); + #ifndef TDESKTOP_DISABLE_AUTOUPDATE App::app()->startUpdateCheck(); + #endif MTP::send(MTPupdates_GetState(), rpcDone(&MainWidget::gotState)); update(); if (!cStartUrl().isEmpty()) { diff --git a/Telegram/SourceFiles/settingswidget.cpp b/Telegram/SourceFiles/settingswidget.cpp index 84b53cf38..dc5459a57 100644 --- a/Telegram/SourceFiles/settingswidget.cpp +++ b/Telegram/SourceFiles/settingswidget.cpp @@ -127,9 +127,11 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), // general _changeLanguage(this, lang(lng_settings_change_lang)), + #ifndef TDESKTOP_DISABLE_AUTOUPDATE _autoUpdate(this, lang(lng_settings_auto_update), cAutoUpdate()), _checkNow(this, lang(lng_settings_check_now)), _restartNow(this, lang(lng_settings_update_now)), + #endif _supportTray(cSupportTray()), _workmodeTray(this, lang(lng_settings_workmode_tray), (cWorkMode() == dbiwmTrayOnly || cWorkMode() == dbiwmWindowAndTray)), @@ -226,9 +228,11 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), // general connect(&_changeLanguage, SIGNAL(clicked()), this, SLOT(onChangeLanguage())); + #ifndef TDESKTOP_DISABLE_AUTOUPDATE connect(&_autoUpdate, SIGNAL(changed()), this, SLOT(onAutoUpdate())); connect(&_checkNow, SIGNAL(clicked()), this, SLOT(onCheckNow())); connect(&_restartNow, SIGNAL(clicked()), this, SLOT(onRestartNow())); + #endif connect(&_workmodeTray, SIGNAL(changed()), this, SLOT(onWorkmodeTray())); connect(&_workmodeWindow, SIGNAL(changed()), this, SLOT(onWorkmodeWindow())); @@ -246,11 +250,13 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), _newVersionText = lang(lng_settings_update_ready) + ' '; _newVersionWidth = st::linkFont->m.width(_newVersionText); + #ifndef TDESKTOP_DISABLE_AUTOUPDATE connect(App::app(), SIGNAL(updateChecking()), this, SLOT(onUpdateChecking())); connect(App::app(), SIGNAL(updateLatest()), this, SLOT(onUpdateLatest())); connect(App::app(), SIGNAL(updateDownloading(qint64,qint64)), this, SLOT(onUpdateDownloading(qint64,qint64))); connect(App::app(), SIGNAL(updateReady()), this, SLOT(onUpdateReady())); connect(App::app(), SIGNAL(updateFailed()), this, SLOT(onUpdateFailed())); + #endif // chat options connect(&_replaceEmojis, SIGNAL(changed()), this, SLOT(onReplaceEmojis())); @@ -303,6 +309,7 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), updateOnlineDisplay(); + #ifndef TDESKTOP_DISABLE_AUTOUPDATE switch (App::app()->updatingState()) { case Application::UpdatingDownload: setUpdatingState(UpdatingDownload, true); @@ -311,6 +318,9 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), case Application::UpdatingReady: setUpdatingState(UpdatingReady, true); break; default: setUpdatingState(UpdatingNone, true); break; } + #else + _updatingState = UpdatingNone; + #endif updateConnectionType(); @@ -430,6 +440,7 @@ void SettingsInner::paintEvent(QPaintEvent *e) { p.drawText(_left + st::setHeaderLeft, top + st::setHeaderTop + st::setHeaderFont->ascent, lang(lng_settings_section_general)); top += st::setHeaderSkip; + #ifndef TDESKTOP_DISABLE_AUTOUPDATE top += _autoUpdate.height(); QString textToDraw; if (cAutoUpdate()) { @@ -448,6 +459,7 @@ void SettingsInner::paintEvent(QPaintEvent *e) { p.setPen(st::setVersionColor->p); p.drawText(_left + st::setVersionLeft, top + st::setVersionTop + st::linkFont->ascent, textToDraw); top += st::setVersionHeight; + #endif if (cPlatform() == dbipWindows) { top += _workmodeTray.height() + st::setLittleSkip; @@ -656,10 +668,12 @@ void SettingsInner::resizeEvent(QResizeEvent *e) { // general top += st::setHeaderSkip; _changeLanguage.move(_left + st::setWidth - _changeLanguage.width(), top - st::setHeaderSkip + st::setHeaderTop + st::setHeaderFont->ascent - st::linkFont->ascent); + #ifndef TDESKTOP_DISABLE_AUTOUPDATE _autoUpdate.move(_left, top); _checkNow.move(_left + st::setWidth - _checkNow.width(), top + st::cbDefFlat.textTop); top += _autoUpdate.height(); _restartNow.move(_left + st::setWidth - _restartNow.width(), top + st::setVersionTop); top += st::setVersionHeight; + #endif if (cPlatform() == dbipWindows) { _workmodeTray.move(_left, top); top += _workmodeTray.height() + st::setLittleSkip; @@ -972,8 +986,10 @@ void SettingsInner::showAll() { // general _changeLanguage.show(); + #ifndef TDESKTOP_DISABLE_AUTOUPDATE _autoUpdate.show(); setUpdatingState(_updatingState, true); + #endif if (cPlatform() == dbipWindows) { _workmodeTray.show(); _workmodeWindow.show(); @@ -1219,6 +1235,7 @@ void SettingsInner::onUpdateLocalStorage() { update(); } +#ifndef TDESKTOP_DISABLE_AUTOUPDATE void SettingsInner::onAutoUpdate() { cSetAutoUpdate(!cAutoUpdate()); Local::writeSettings(); @@ -1244,8 +1261,10 @@ void SettingsInner::onCheckNow() { cSetLastUpdateCheck(0); App::app()->startUpdateCheck(); } +#endif void SettingsInner::onRestartNow() { + #ifndef TDESKTOP_DISABLE_AUTOUPDATE checkReadyUpdate(); if (_updatingState == UpdatingReady) { cSetRestartingUpdate(true); @@ -1253,6 +1272,10 @@ void SettingsInner::onRestartNow() { cSetRestarting(true); cSetRestartingToSettings(true); } + #else + cSetRestarting(true); + cSetRestartingToSettings(true); + #endif App::quit(); } @@ -1636,6 +1659,7 @@ void SettingsInner::onTempDirClearFailed(int task) { update(); } +#ifndef TDESKTOP_DISABLE_AUTOUPDATE void SettingsInner::setUpdatingState(UpdatingState state, bool force) { if (_updatingState != state || force) { _updatingState = state; @@ -1689,6 +1713,7 @@ void SettingsInner::onUpdateReady() { void SettingsInner::onUpdateFailed() { setUpdatingState(UpdatingFail); } +#endif void SettingsInner::onPhotoUpdateStart() { showAll(); diff --git a/Telegram/SourceFiles/settingswidget.h b/Telegram/SourceFiles/settingswidget.h index faf500406..38d4cb751 100644 --- a/Telegram/SourceFiles/settingswidget.h +++ b/Telegram/SourceFiles/settingswidget.h @@ -97,8 +97,10 @@ public slots: void onUpdatePhoto(); void onUpdatePhotoCancel(); + #ifndef TDESKTOP_DISABLE_AUTOUPDATE void onAutoUpdate(); void onCheckNow(); + #endif void onRestartNow(); void onPasscode(); @@ -149,11 +151,13 @@ public slots: void onLocalStorageClear(); + #ifndef TDESKTOP_DISABLE_AUTOUPDATE void onUpdateChecking(); void onUpdateLatest(); void onUpdateDownloading(qint64 ready, qint64 total); void onUpdateReady(); void onUpdateFailed(); + #endif void onShowSessions(); @@ -206,8 +210,10 @@ private: // general LinkButton _changeLanguage; + #ifndef TDESKTOP_DISABLE_AUTOUPDATE FlatCheckbox _autoUpdate; LinkButton _checkNow, _restartNow; + #endif bool _supportTray; // cSupportTray() value on settings create FlatCheckbox _workmodeTray, _workmodeWindow; FlatCheckbox _autoStart, _startMinimized, _sendToMenu; @@ -280,8 +286,10 @@ private: void offPasswordDone(const MTPBool &result); bool offPasswordFail(const RPCError &error); + #ifndef TDESKTOP_DISABLE_AUTOUPDATE void setUpdatingState(UpdatingState state, bool force = false); void setDownloadProgress(qint64 ready, qint64 total); + #endif }; diff --git a/Telegram/SourceFiles/sysbuttons.cpp b/Telegram/SourceFiles/sysbuttons.cpp index 29e11ac69..039dbb883 100644 --- a/Telegram/SourceFiles/sysbuttons.cpp +++ b/Telegram/SourceFiles/sysbuttons.cpp @@ -143,7 +143,9 @@ UpdateBtn::UpdateBtn(QWidget *parent, Window *window, const QString &text) : Sys } void UpdateBtn::onClick() { + #ifndef TDESKTOP_DISABLE_AUTOUPDATE checkReadyUpdate(); + #endif if (App::app()->updatingState() == Application::UpdatingReady) { cSetRestartingUpdate(true); } else { diff --git a/Telegram/SourceFiles/title.cpp b/Telegram/SourceFiles/title.cpp index 564b7c7a5..6de0c0424 100644 --- a/Telegram/SourceFiles/title.cpp +++ b/Telegram/SourceFiles/title.cpp @@ -80,7 +80,9 @@ TitleWidget::TitleWidget(Window *window) connect(&_contacts, SIGNAL(clicked()), this, SLOT(onContacts())); connect(&_about, SIGNAL(clicked()), this, SLOT(onAbout())); connect(wnd->windowHandle(), SIGNAL(windowStateChanged(Qt::WindowState)), this, SLOT(stateChanged(Qt::WindowState))); + #ifndef TDESKTOP_DISABLE_AUTOUPDATE connect(App::app(), SIGNAL(updateReady()), this, SLOT(showUpdateBtn())); + #endif if (cPlatform() != dbipWindows) { _minimize.hide(); From 8dff205949ee51af3e7f8c5eeda1333ea0d7bd1e Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 21 Aug 2015 14:23:44 +0300 Subject: [PATCH 107/121] links support started --- Telegram/SourceFiles/gui/text.cpp | 55 ++++++++++++++------ Telegram/SourceFiles/gui/text.h | 23 ++++++++ Telegram/SourceFiles/history.cpp | 53 +++++++++++++++---- Telegram/SourceFiles/history.h | 13 +++-- Telegram/SourceFiles/mtproto/mtpConnection.h | 1 + 5 files changed, 116 insertions(+), 29 deletions(-) diff --git a/Telegram/SourceFiles/gui/text.cpp b/Telegram/SourceFiles/gui/text.cpp index 5e7d50bdc..5bda612d5 100644 --- a/Telegram/SourceFiles/gui/text.cpp +++ b/Telegram/SourceFiles/gui/text.cpp @@ -2299,7 +2299,10 @@ void Text::setText(style::font font, const QString &text, const TextParseOptions { TextParser parser(this, text, options); } + recountNaturalSize(true, options.dir); +} +void Text::recountNaturalSize(bool initial, Qt::LayoutDirection optionsDir) { NewlineBlock *lastNewline = 0; int32 lineHeight = 0; @@ -2313,14 +2316,16 @@ void Text::setText(style::font font, const QString &text, const TextParseOptions if (_btype == TextBlockNewline) { if (!lineHeight) lineHeight = blockHeight; - Qt::LayoutDirection dir = options.dir; - if (dir == Qt::LayoutDirectionAuto) { - dir = TextParser::stringDirection(_text, lastNewlineStart, b->from()); - } - if (lastNewline) { - lastNewline->_nextDir = dir; - } else { - _startDir = dir; + if (initial) { + Qt::LayoutDirection dir = optionsDir; + if (dir == Qt::LayoutDirectionAuto) { + dir = TextParser::stringDirection(_text, lastNewlineStart, b->from()); + } + if (lastNewline) { + lastNewline->_nextDir = dir; + } else { + _startDir = dir; + } } lastNewlineStart = b->from(); lastNewline = static_cast(b); @@ -2344,14 +2349,16 @@ void Text::setText(style::font font, const QString &text, const TextParseOptions last_rPadding = b->f_rpadding(); continue; } - Qt::LayoutDirection dir = options.dir; - if (dir == Qt::LayoutDirectionAuto) { - dir = TextParser::stringDirection(_text, lastNewlineStart, _text.size()); - } - if (lastNewline) { - lastNewline->_nextDir = dir; - } else { - _startDir = dir; + if (initial) { + Qt::LayoutDirection dir = optionsDir; + if (dir == Qt::LayoutDirectionAuto) { + dir = TextParser::stringDirection(_text, lastNewlineStart, _text.size()); + } + if (lastNewline) { + lastNewline->_nextDir = dir; + } else { + _startDir = dir; + } } if (_width > 0) { if (!lineHeight) lineHeight = _blockHeight(_blocks.back(), _font); @@ -2362,6 +2369,10 @@ void Text::setText(style::font font, const QString &text, const TextParseOptions } } +void Text::setMarkedText(style::font font, const QString &text, const LinksInText &links) { + +} + void Text::setRichText(style::font font, const QString &text, TextParseOptions options, const TextCustomTagsMap &custom) { QString parsed; parsed.reserve(text.size()); @@ -2449,6 +2460,18 @@ bool Text::hasLinks() const { return !_links.isEmpty(); } +void Text::setSkipBlock(int32 width) { + +} + +void Text::removeSkipBlock() { + +} + +LinksInText Text::calcLinksInText() const { + return LinksInText(); +} + int32 Text::countHeight(int32 w) const { QFixed width = w; if (width < _minResizeWidth) width = _minResizeWidth; diff --git a/Telegram/SourceFiles/gui/text.h b/Telegram/SourceFiles/gui/text.h index 84d7da3aa..6d165bdbd 100644 --- a/Telegram/SourceFiles/gui/text.h +++ b/Telegram/SourceFiles/gui/text.h @@ -464,6 +464,23 @@ enum TextSelectType { typedef QPair TextCustomTag; // open str and close str typedef QMap TextCustomTagsMap; +enum LinkInTextType { + LinkInTextUrl, + LinkInTextCustomUrl, + LinkInTextEmail, + LinkInTextHashtag, + LinkInTextMention, + LinkInTextBotCommand, +}; +struct LinkInText { + LinkInText(LinkInTextType type, int32 offset, int32 length, const QString &text = QString()) : type(type), offset(offset), length(length), text(text) { + } + LinkInTextType type; + int32 offset, length; + QString text; +}; +typedef QList LinksInText; + class Text { public: @@ -475,6 +492,7 @@ public: int32 countHeight(int32 width) const; void setText(style::font font, const QString &text, const TextParseOptions &options = _defaultOptions); void setRichText(style::font font, const QString &text, TextParseOptions options = _defaultOptions, const TextCustomTagsMap &custom = TextCustomTagsMap()); + void setMarkedText(style::font font, const QString &text, const LinksInText &links); void setLink(uint16 lnkIndex, const TextLinkPtr &lnk); bool hasLinks() const; @@ -482,6 +500,9 @@ public: bool hasSkipBlock() const { return _blocks.isEmpty() ? false : _blocks.back()->type() == TextBlockSkip; } + void setSkipBlock(int32 width); + void removeSkipBlock(); + LinksInText calcLinksInText() const; int32 maxWidth() const { return _maxWidth.ceil().toInt(); @@ -534,6 +555,8 @@ public: private: + void recountNaturalSize(bool initial, Qt::LayoutDirection optionsDir = Qt::LayoutDirectionAuto); + QFixed _minResizeWidth, _maxWidth; int32 _minHeight; diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index a486510a7..e19699468 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -943,6 +943,15 @@ HistoryItem *History::doAddToBack(HistoryBlock *to, bool newBlock, HistoryItem * } } } + if (adding->hasTextLinks()) { + MediaOverviewType t = OverviewLinks; + if (_overviewIds[t].constFind(adding->id) == _overviewIds[t].cend()) { + _overview[t].push_back(adding->id); + _overviewIds[t].insert(adding->id, NullType()); + if (_overviewCount[t] > 0) ++_overviewCount[t]; + if (App::wnd()) App::wnd()->mediaOverviewUpdated(peer, t); + } + } if (adding->from()->id) { if (peer->chat) { QList *lastAuthors = &(peer->asChat()->lastAuthors); @@ -1098,6 +1107,14 @@ void History::addToFront(const QVector &slice) { } } } + if (item->hasTextLinks()) { + MediaOverviewType t = OverviewLinks; + if (_overviewIds[t].constFind(item->id) == _overviewIds[t].cend()) { + _overview[t].push_front(item->id); + _overviewIds[t].insert(item->id, NullType()); + mask |= (1 << t); + } + } if (item->from()->id) { if (lastAuthors) { // chats if (!lastAuthors->contains(item->from())) { @@ -1249,6 +1266,14 @@ void History::addToBack(const QVector &slice) { } } } + if (item->hasTextLinks()) { + MediaOverviewType t = OverviewLinks; + if (_overviewCount[t] != 0) { + _overview[t].push_back(item->id); + _overviewIds[t].insert(item->id, NullType()); + mask |= (1 << t); + } + } } } for (int32 t = 0; t < OverviewCount; ++t) { @@ -1760,6 +1785,9 @@ void HistoryItem::destroy() { history()->eraseFromOverview(OverviewAudioDocuments, id); } } + if (hasTextLinks()) { + history()->eraseFromOverview(OverviewLinks, id); + } delete this; } @@ -4994,13 +5022,14 @@ HistoryMessage::HistoryMessage(History *history, HistoryBlock *block, const MTPD , _textHeight(0) , _media(0) { + //if (msg.has_entities()) msg.ventities.c_vector().v.size() QString text(textClean(qs(msg.vmessage))); initTime(); initMedia(msg.vmedia, text); - initDimensions(text); + initDimensions(text, msg.has_entities() ? linksFromMTP(msg.ventities.c_vector().v) : LinksInText()); } -HistoryMessage::HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, int32 flags, QDateTime date, int32 from, const QString &msg, const MTPMessageMedia &media) : +HistoryMessage::HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, int32 flags, QDateTime date, int32 from, const QString &msg, const LinksInText &links, const MTPMessageMedia &media) : HistoryItem(history, block, msgId, flags, date, from) , _text(st::msgMinWidth) , _textWidth(0) @@ -5010,10 +5039,10 @@ HistoryItem(history, block, msgId, flags, date, from) QString text(msg); initTime(); initMedia(media, text); - initDimensions(text); + initDimensions(text, links); } -HistoryMessage::HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, int32 flags, QDateTime date, int32 from, const QString &msg, HistoryMedia *fromMedia) : +HistoryMessage::HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, int32 flags, QDateTime date, int32 from, const QString &msg, const LinksInText &links, HistoryMedia *fromMedia) : HistoryItem(history, block, msgId, flags, date, from) , _text(st::msgMinWidth) , _textWidth(0) @@ -5025,7 +5054,7 @@ HistoryItem(history, block, msgId, flags, date, from) _media = fromMedia->clone(); _media->regItem(this); } - initDimensions(msg); + initDimensions(msg, links); } HistoryMessage::HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, int32 flags, QDateTime date, int32 from, DocumentData *doc) : @@ -5037,7 +5066,7 @@ HistoryItem(history, block, msgId, flags, date, from) { initTime(); initMediaFromDocument(doc); - initDimensions(QString()); + initDimensions(QString(), LinksInText()); } void HistoryMessage::initTime() { @@ -5125,12 +5154,18 @@ void HistoryMessage::initMediaFromDocument(DocumentData *doc) { _media->regItem(this); } -void HistoryMessage::initDimensions(const QString &text) { +void HistoryMessage::initDimensions(const QString &text, const LinksInText &links) { if (!_media || !text.isEmpty()) { // !justMedia() if (_media && _media->isDisplayed()) { - _text.setText(st::msgFont, text, itemTextParseOptions(this)); + _text.setMarkedText(st::msgFont, text, links, itemTextParseOptions(this)); } else { - _text.setText(st::msgFont, text + textcmdSkipBlock(timeWidth(true), st::msgDateFont->height - st::msgDateDelta.y()), itemTextParseOptions(this)); + _text.setMarkedText(st::msgFont, text + textcmdSkipBlock(timeWidth(true), st::msgDateFont->height - st::msgDateDelta.y()), links, itemTextParseOptions(this)); + } + for (int32 i = 0, l = links.size(); i != l; ++i) { + if (links.at(i).type == LinkInTextUrl || links.at(i).type == LinkInTextCustomUrl || links.at(i).type == LinkInTextEmail) { + _flags |= MTPDmessage_flag_HAS_TEXT_LINKS; + break; + } } } } diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index 1379928b5..e07994c8e 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -107,6 +107,7 @@ enum MediaOverviewType { OverviewDocuments, OverviewAudios, OverviewAudioDocuments, + OverviewLinks, OverviewCount }; @@ -116,7 +117,7 @@ inline MediaOverviewType mediaToOverviewType(HistoryMediaType t) { case MediaTypePhoto: return OverviewPhotos; case MediaTypeVideo: return OverviewVideos; case MediaTypeDocument: return OverviewDocuments; - // case MediaTypeSticker: return OverviewDocuments; +// case MediaTypeSticker: return OverviewDocuments; case MediaTypeAudio: return OverviewAudios; } return OverviewCount; @@ -129,6 +130,7 @@ inline MTPMessagesFilter typeToMediaFilter(MediaOverviewType &type) { case OverviewDocuments: return MTP_inputMessagesFilterDocument(); case OverviewAudios: return MTP_inputMessagesFilterAudio(); case OverviewAudioDocuments: return MTP_inputMessagesFilterAudioDocuments(); + case OverviewLinks: return MTP_inputMessagesFilterUrl(); default: type = OverviewCount; break; } return MTPMessagesFilter(); @@ -723,6 +725,9 @@ public: bool hasReplyMarkup() const { return _flags & MTPDmessage::flag_reply_markup; } + bool hasTextLinks() const { + return _flags & MTPDmessage_flag_HAS_TEXT_LINKS; + } virtual bool needCheck() const { return true; } @@ -1274,8 +1279,8 @@ class HistoryMessage : public HistoryItem { public: HistoryMessage(History *history, HistoryBlock *block, const MTPDmessage &msg); - HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, int32 flags, QDateTime date, int32 from, const QString &msg, const MTPMessageMedia &media); - HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, int32 flags, QDateTime date, int32 from, const QString &msg, HistoryMedia *media); + HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, int32 flags, QDateTime date, int32 from, const QString &msg, const LinksInText &links, const MTPMessageMedia &media); + HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, int32 flags, QDateTime date, int32 from, const QString &msg, const LinksInText &links, HistoryMedia *media); HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, int32 flags, QDateTime date, int32 from, DocumentData *doc); void initTime(); @@ -1283,7 +1288,7 @@ public: void initMediaFromText(QString ¤tText); void initMediaFromDocument(DocumentData *doc); void initDimensions(const HistoryItem *parent = 0); - void initDimensions(const QString &text); + void initDimensions(const QString &text, const LinksInText &links); void fromNameUpdated() const; bool justMedia() const { diff --git a/Telegram/SourceFiles/mtproto/mtpConnection.h b/Telegram/SourceFiles/mtproto/mtpConnection.h index 2b600b60f..0ce618f1d 100644 --- a/Telegram/SourceFiles/mtproto/mtpConnection.h +++ b/Telegram/SourceFiles/mtproto/mtpConnection.h @@ -25,6 +25,7 @@ enum { MTPDmessage_flag_out = (1 << 1), MTPDmessage_flag_notify_by_from = (1 << 4), MTPDmessage_flag_media_unread = (1 << 5), + MTPDmessage_flag_HAS_TEXT_LINKS = (1 << 31), // client side flag for having links MTPmessages_SendMessage_flag_skipWebPage = (1 << 1), From 4afa1aace00968ead8fa08382354f7d11c1f7d3e Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 24 Aug 2015 13:53:04 +0300 Subject: [PATCH 108/121] serverside links parsing used --- Telegram/SourceFiles/app.cpp | 16 +++ Telegram/SourceFiles/app.h | 3 + Telegram/SourceFiles/gui/emoji_config.h | 8 +- Telegram/SourceFiles/gui/text.cpp | 176 ++++++++++++++++++------ Telegram/SourceFiles/gui/text.h | 78 +++++++---- Telegram/SourceFiles/history.cpp | 149 ++++++++++---------- Telegram/SourceFiles/history.h | 7 +- Telegram/SourceFiles/mainwidget.cpp | 59 ++++++-- 8 files changed, 345 insertions(+), 151 deletions(-) diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index 1a31593ba..b99ceee01 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -79,6 +79,9 @@ namespace { typedef QMap RandomData; RandomData randomData; + typedef QMap SentTextData; + SentTextData sentTextData; + HistoryItem *hoveredItem = 0, *pressedItem = 0, *hoveredLinkItem = 0, *pressedLinkItem = 0, *contextItem = 0, *mousedItem = 0; QPixmap *sprite = 0, *emojis = 0, *emojisLarge = 0; @@ -1681,6 +1684,7 @@ namespace App { void historyClearItems() { historyClearMsgs(); randomData.clear(); + sentTextData.clear(); mutedPeers.clear(); updatedPeers.clear(); cSetSavedPeers(SavedPeers()); @@ -1756,6 +1760,18 @@ namespace App { return 0; } + void historyRegSentText(uint64 randomId, const QString &text) { + sentTextData.insert(randomId, text); + } + + void historyUnregSentText(uint64 randomId) { + sentTextData.remove(randomId); + } + + QString histSentTextByItem(uint64 randomId) { + return sentTextData.value(randomId); + } + void prepareCorners(RoundCorners index, int32 radius, const style::color &color, const style::color *shadow = 0, QImage *cors = 0) { int32 r = radius * cIntRetinaFactor(), s = st::msgShadow * cIntRetinaFactor(); QImage rect(r * 3, r * 3 + (shadow ? s : 0), QImage::Format_ARGB32_Premultiplied), localCors[4]; diff --git a/Telegram/SourceFiles/app.h b/Telegram/SourceFiles/app.h index a68c390c3..51995a5c5 100644 --- a/Telegram/SourceFiles/app.h +++ b/Telegram/SourceFiles/app.h @@ -188,6 +188,9 @@ namespace App { void historyRegRandom(uint64 randomId, MsgId itemId); void historyUnregRandom(uint64 randomId); MsgId histItemByRandom(uint64 randomId); + void historyRegSentText(uint64 itemId, const QString &text); + void historyUnregSentText(uint64 itemId); + QString histSentTextByItem(uint64 itemId); void hoveredItem(HistoryItem *item); HistoryItem *hoveredItem(); diff --git a/Telegram/SourceFiles/gui/emoji_config.h b/Telegram/SourceFiles/gui/emoji_config.h index d66229f6a..9a7a5de94 100644 --- a/Telegram/SourceFiles/gui/emoji_config.h +++ b/Telegram/SourceFiles/gui/emoji_config.h @@ -146,8 +146,8 @@ inline bool emojiEdge(const QChar *ch) { inline QString replaceEmojis(const QString &text) { QString result; - LinkRanges lnkRanges = textParseLinks(text, TextParseLinks | TextParseMentions | TextParseHashtags); - int32 currentLink = 0, lnkCount = lnkRanges.size(); + LinksInText links = textParseLinks(text, TextParseLinks | TextParseMentions | TextParseHashtags); + int32 currentLink = 0, lnkCount = links.size(); const QChar *emojiStart = text.unicode(), *emojiEnd = emojiStart, *e = text.cend(); bool canFindEmoji = true, consumePrevious = false; for (const QChar *ch = emojiEnd; ch != e;) { @@ -157,14 +157,14 @@ inline QString replaceEmojis(const QString &text) { emojiFind(ch, e, newEmojiEnd, emojiCode); } - while (currentLink < lnkCount && ch >= lnkRanges[currentLink].from + lnkRanges[currentLink].len) { + while (currentLink < lnkCount && ch >= emojiStart + links[currentLink].offset + links[currentLink].length) { ++currentLink; } EmojiPtr emoji = emojiCode ? emojiGet(emojiCode) : 0; if (emoji && emoji != TwoSymbolEmoji && (ch == emojiStart || !ch->isLetterOrNumber() || !(ch - 1)->isLetterOrNumber()) && (newEmojiEnd == e || !newEmojiEnd->isLetterOrNumber() || newEmojiEnd == emojiStart || !(newEmojiEnd - 1)->isLetterOrNumber()) && - (currentLink >= lnkCount || (ch < lnkRanges[currentLink].from && newEmojiEnd <= lnkRanges[currentLink].from) || (ch >= lnkRanges[currentLink].from + lnkRanges[currentLink].len && newEmojiEnd > lnkRanges[currentLink].from + lnkRanges[currentLink].len)) + (currentLink >= lnkCount || (ch < emojiStart + links[currentLink].offset && newEmojiEnd <= emojiStart + links[currentLink].offset) || (ch >= emojiStart + links[currentLink].offset + links[currentLink].length && newEmojiEnd > emojiStart + links[currentLink].offset + links[currentLink].length)) ) { // if (newEmojiEnd < e && newEmojiEnd->unicode() == ' ') ++newEmojiEnd; if (result.isEmpty()) result.reserve(text.size()); diff --git a/Telegram/SourceFiles/gui/text.cpp b/Telegram/SourceFiles/gui/text.cpp index 5bda612d5..9d3e3355c 100644 --- a/Telegram/SourceFiles/gui/text.cpp +++ b/Telegram/SourceFiles/gui/text.cpp @@ -328,13 +328,13 @@ public: } bool checkWaitedLink() { - if (waitingLink == linksEnd || ptr < waitingLink->from || links.size() >= 0x7FFF) { + if (waitingLink == linksEnd || ptr < start + waitingLink->offset || links.size() >= 0x7FFF) { return true; } createBlock(); - QString lnkUrl = QString(waitingLink->from, waitingLink->len), lnkText; + QString lnkUrl = QString(start + waitingLink->offset, waitingLink->length), lnkText; int32 fullDisplayed; getLinkData(lnkUrl, lnkText, fullDisplayed); @@ -342,7 +342,7 @@ public: lnkIndex = 0x8000 + links.size(); _t->_text += lnkText; - ptr = waitingLink->from + waitingLink->len; + ptr = start + waitingLink->offset + waitingLink->length; createBlock(); ++waitingLink; @@ -519,8 +519,31 @@ public: emoji = e; } - TextParser(Text *t, const QString &text, const TextParseOptions &options) : _t(t), src(text), - rich(options.flags & TextParseRichText), multiline(options.flags & TextParseMultiline), maxLnkIndex(0), flags(0), lnkIndex(0), stopAfterWidth(QFIXED_MAX) { + TextParser(Text *t, const QString &text, const TextParseOptions &options) : _t(t), + src(text), + rich(options.flags & TextParseRichText), + multiline(options.flags & TextParseMultiline), + maxLnkIndex(0), + flags(0), + lnkIndex(0), + stopAfterWidth(QFIXED_MAX) { + if (options.flags & TextParseLinks) { + lnkRanges = textParseLinks(src, options.flags, rich); + } + parse(options); + } + TextParser(Text *t, const QString &text, const LinksInText &links, const TextParseOptions &options) : _t(t), + src(text), + rich(options.flags & TextParseRichText), + multiline(options.flags & TextParseMultiline), + maxLnkIndex(0), + flags(0), + lnkIndex(0), + stopAfterWidth(QFIXED_MAX) { + lnkRanges = links; + parse(options); + } + void parse(const TextParseOptions &options) { int flags = options.flags; if (options.maxw > 0 && options.maxh > 0) { stopAfterWidth = ((options.maxh / _t->_font->height) + 1) * options.maxw; @@ -529,10 +552,6 @@ public: start = src.constData(); end = start + src.size(); - if (options.flags & TextParseLinks) { - lnkRanges = textParseLinks(src, options.flags, rich); - } - while (start != end && chIsTrimmed(*start, rich)) { ++start; } @@ -552,8 +571,8 @@ public: ch = chInt = 0; lastSkipped = false; lastSpace = true; - waitingLink = lnkRanges.isEmpty() ? 0 : lnkRanges.constData(); - linksEnd = lnkRanges.isEmpty() ? 0 : waitingLink + lnkRanges.size(); + waitingLink = lnkRanges.cbegin(); + linksEnd = lnkRanges.cend(); for (ptr = start; ptr <= end; ++ptr) { if (!checkWaitedLink()) { break; @@ -615,8 +634,8 @@ private: const QChar *start, *end, *ptr; bool rich, multiline; - LinkRanges lnkRanges; - const LinkRange *waitingLink, *linksEnd; + LinksInText lnkRanges; + LinksInText::const_iterator waitingLink, linksEnd; struct TextLinkData { TextLinkData(const QString &url = QString(), int32 fullDisplayed = 1) : url(url), fullDisplayed(fullDisplayed) { @@ -2305,6 +2324,7 @@ void Text::setText(style::font font, const QString &text, const TextParseOptions void Text::recountNaturalSize(bool initial, Qt::LayoutDirection optionsDir) { NewlineBlock *lastNewline = 0; + _maxWidth = _minHeight = 0; int32 lineHeight = 0; int32 result = 0, lastNewlineStart = 0; QFixed _width = 0, last_rBearing = 0, last_rPadding = 0; @@ -2369,8 +2389,14 @@ void Text::recountNaturalSize(bool initial, Qt::LayoutDirection optionsDir) { } } -void Text::setMarkedText(style::font font, const QString &text, const LinksInText &links) { - +void Text::setMarkedText(style::font font, const QString &text, const LinksInText &links, const TextParseOptions &options) { + if (!_textStyle) _initDefault(); + _font = font; + clean(); + { + TextParser parser(this, text, links, options); + } + recountNaturalSize(true, options.dir); } void Text::setRichText(style::font font, const QString &text, TextParseOptions options, const TextCustomTagsMap &custom) { @@ -2460,16 +2486,80 @@ bool Text::hasLinks() const { return !_links.isEmpty(); } -void Text::setSkipBlock(int32 width) { - +void Text::setSkipBlock(int32 width, int32 height) { + if (!_blocks.isEmpty() && _blocks.back()->type() == TextBlockSkip) { + SkipBlock *block = static_cast(_blocks.back()); + if (block->width() == width && block->height() == height) return; + _text.resize(block->from()); + _blocks.pop_back(); + } + _text.push_back('_'); + _blocks.push_back(new SkipBlock(_font, _text, _text.size() - 1, width, height, 0)); + recountNaturalSize(false); } void Text::removeSkipBlock() { - + if (!_blocks.isEmpty() && _blocks.back()->type() == TextBlockSkip) { + _text.resize(_blocks.back()->from()); + _blocks.pop_back(); + recountNaturalSize(false); + } } LinksInText Text::calcLinksInText() const { - return LinksInText(); + LinksInText result; + int32 lnkFrom = 0, lnkIndex = 0, offset = 0; + for (TextBlocks::const_iterator i = _blocks.cbegin(), e = _blocks.cend(); true; ++i) { + int32 blockLnkIndex = (i == e) ? 0 : (*i)->lnkIndex(); + int32 blockFrom = (i == e) ? _text.size() : (*i)->from(); + if (blockLnkIndex != lnkIndex) { + if (lnkIndex) { // write link + const TextLinkPtr &lnk(_links.at(lnkIndex - 1)); + const QString &url(lnk ? lnk->text() : QString()); + + int32 rangeFrom = lnkFrom, rangeTo = blockFrom; + if (rangeTo > rangeFrom) { + QStringRef r = _text.midRef(rangeFrom, rangeTo - rangeFrom); + if (url.isEmpty()) { + offset += r.size(); + } else { + QUrl u(url); + if (r.size() <= 3 || _text.midRef(lnkFrom, r.size() - 3) == (u.isValid() ? u.toDisplayString() : url).midRef(0, r.size() - 3)) { // same link + if (url.at(0) == '@') { + result.push_back(LinkInText(LinkInTextMention, offset, url.size())); + } else if (url.at(0) == '#') { + result.push_back(LinkInText(LinkInTextHashtag, offset, url.size())); + } else if (url.at(0) == '/') { + result.push_back(LinkInText(LinkInTextBotCommand, offset, url.size())); + } else if (url.indexOf('@') > 0 && url.indexOf('/') <= 0) { + result.push_back(LinkInText(LinkInTextEmail, offset, url.size())); + } else { + result.push_back(LinkInText(LinkInTextUrl, offset, url.size())); + } + offset += url.size(); + } else { + result.push_back(LinkInText(LinkInTextCustomUrl, offset, r.size(), url)); + offset += r.size(); + } + } + } + } + lnkIndex = blockLnkIndex; + lnkFrom = blockFrom; + } + if (i == e) break; + + TextBlockType type = (*i)->type(); + if (type == TextBlockSkip) continue; + + if (!blockLnkIndex) { + int32 rangeFrom = (*i)->from(), rangeTo = uint16((*i)->from() + TextPainter::_blockLength(this, i, e)); + if (rangeTo > rangeFrom) { + offset += rangeTo - rangeFrom; + } + } + } + return result; } int32 Text::countHeight(int32 w) const { @@ -4058,16 +4148,16 @@ QString textSearchKey(const QString &text) { bool textSplit(QString &sendingText, QString &leftText, int32 limit) { if (leftText.isEmpty() || !limit) return false; - LinkRanges lnkRanges = textParseLinks(leftText, TextParseLinks | TextParseMentions | TextParseHashtags); - int32 currentLink = 0, lnkCount = lnkRanges.size(); + LinksInText links = textParseLinks(leftText, TextParseLinks | TextParseMentions | TextParseHashtags); + int32 currentLink = 0, lnkCount = links.size(); int32 s = 0, half = limit / 2, goodLevel = 0; for (const QChar *start = leftText.constData(), *ch = start, *end = leftText.constEnd(), *good = ch; ch != end; ++ch, ++s) { - while (currentLink < lnkCount && ch >= lnkRanges[currentLink].from + lnkRanges[currentLink].len) { + while (currentLink < lnkCount && ch >= start + links[currentLink].offset + links[currentLink].length) { ++currentLink; } - bool inLink = (currentLink < lnkCount) && (ch > lnkRanges[currentLink].from) && (ch < lnkRanges[currentLink].from + lnkRanges[currentLink].len); + bool inLink = (currentLink < lnkCount) && (ch > start + links[currentLink].offset) && (ch < start + links[currentLink].offset + links[currentLink].length); if (s > half) { if (inLink) { if (!goodLevel) good = ch; @@ -4125,8 +4215,8 @@ bool textSplit(QString &sendingText, QString &leftText, int32 limit) { return true; } -LinkRanges textParseLinks(const QString &text, int32 flags, bool rich) { // some code is duplicated in flattextarea.cpp! - LinkRanges lnkRanges; +LinksInText textParseLinks(const QString &text, int32 flags, bool rich) { // some code is duplicated in flattextarea.cpp! + LinksInText result; bool withHashtags = (flags & TextParseHashtags); bool withMentions = (flags & TextParseMentions); @@ -4149,7 +4239,8 @@ LinkRanges textParseLinks(const QString &text, int32 flags, bool rich) { // some QRegularExpressionMatch mMention = withMentions ? _reMention.match(text, qMax(mentionSkip, matchOffset)) : QRegularExpressionMatch(); QRegularExpressionMatch mBotCommand = withBotCommands ? _reBotCommand.match(text, matchOffset) : QRegularExpressionMatch(); - LinkRange link; + LinkInTextType lnkType = LinkInTextUrl; + int32 lnkOffset = 0, lnkLength = 0; int32 domainOffset = mDomain.hasMatch() ? mDomain.capturedStart() : INT_MAX, domainEnd = mDomain.hasMatch() ? mDomain.capturedEnd() : INT_MAX, explicitDomainOffset = mExplicitDomain.hasMatch() ? mExplicitDomain.capturedStart() : INT_MAX, @@ -4214,9 +4305,9 @@ LinkRanges textParseLinks(const QString &text, int32 flags, bool rich) { // some continue; } } - - link.from = start + mentionOffset; - link.len = start + mentionEnd - link.from; + lnkType = LinkInTextMention; + lnkOffset = mentionOffset; + lnkLength = mentionEnd - mentionOffset; } else if (hashtagOffset < domainOffset && hashtagOffset < botCommandOffset) { if (hashtagOffset > nextCmd) { const QChar *after = textSkipCommand(start + nextCmd, start + len); @@ -4226,8 +4317,9 @@ LinkRanges textParseLinks(const QString &text, int32 flags, bool rich) { // some } } - link.from = start + hashtagOffset; - link.len = start + hashtagEnd - link.from; + lnkType = LinkInTextHashtag; + lnkOffset = hashtagOffset; + lnkLength = hashtagEnd - hashtagOffset; } else if (botCommandOffset < domainOffset) { if (botCommandOffset > nextCmd) { const QChar *after = textSkipCommand(start + nextCmd, start + len); @@ -4237,8 +4329,9 @@ LinkRanges textParseLinks(const QString &text, int32 flags, bool rich) { // some } } - link.from = start + botCommandOffset; - link.len = start + botCommandEnd - link.from; + lnkType = LinkInTextBotCommand; + lnkOffset = botCommandOffset; + lnkLength = botCommandEnd - botCommandOffset; } else { if (domainOffset > nextCmd) { const QChar *after = textSkipCommand(start + nextCmd, start + len); @@ -4262,16 +4355,17 @@ LinkRanges textParseLinks(const QString &text, int32 flags, bool rich) { // some if (mailOffset < offset) { mailOffset = offset; } - link.from = start + mailOffset; - link.len = domainEnd - mailOffset; + lnkType = LinkInTextEmail; + lnkOffset = mailOffset; + lnkLength = domainEnd - mailOffset; } } - if (!link.from || !link.len) { + if (lnkType == LinkInTextUrl && !lnkLength) { if (!isProtocolValid || !isTopDomainValid) { matchOffset = domainEnd; continue; } - link.from = start + domainOffset; + lnkOffset = domainOffset; QStack parenth; const QChar *domainEnd = start + mDomain.capturedEnd(), *p = domainEnd; @@ -4306,15 +4400,15 @@ LinkRanges textParseLinks(const QString &text, int32 flags, bool rich) { // some continue; } } - link.len = p - link.from; + lnkLength = (p - start) - lnkOffset; } } - lnkRanges.push_back(link); + result.push_back(LinkInText(lnkType, lnkOffset, lnkLength)); - offset = matchOffset = (link.from - start) + link.len; + offset = matchOffset = lnkOffset + lnkLength; } - return lnkRanges; + return result; } void emojiDraw(QPainter &p, EmojiPtr e, int x, int y) { diff --git a/Telegram/SourceFiles/gui/text.h b/Telegram/SourceFiles/gui/text.h index 6d165bdbd..30304541c 100644 --- a/Telegram/SourceFiles/gui/text.h +++ b/Telegram/SourceFiles/gui/text.h @@ -39,14 +39,57 @@ enum { TextInstagramHashtags = 0x200, }; -struct LinkRange { - LinkRange() : from(0), len(0) { - } - const QChar *from; - int32 len; +enum LinkInTextType { + LinkInTextUrl, + LinkInTextCustomUrl, + LinkInTextEmail, + LinkInTextHashtag, + LinkInTextMention, + LinkInTextBotCommand, }; -typedef QVector LinkRanges; -LinkRanges textParseLinks(const QString &text, int32 flags, bool rich = false); +struct LinkInText { + LinkInText(LinkInTextType type, int32 offset, int32 length, const QString &text = QString()) : type(type), offset(offset), length(length), text(text) { + } + LinkInTextType type; + int32 offset, length; + QString text; +}; +typedef QList LinksInText; +inline LinksInText linksFromMTP(const QVector &entities) { + LinksInText result; + if (!entities.isEmpty()) { + result.reserve(entities.size()); + for (int32 i = 0, l = entities.size(); i != l; ++i) { + const MTPMessageEntity &e(entities.at(i)); + switch (e.type()) { + case mtpc_messageEntityUrl: { const MTPDmessageEntityUrl &d(e.c_messageEntityUrl()); result.push_back(LinkInText(LinkInTextUrl, d.voffset.v, d.vlength.v)); } break; + case mtpc_messageEntityTextUrl: { const MTPDmessageEntityTextUrl &d(e.c_messageEntityTextUrl()); result.push_back(LinkInText(LinkInTextCustomUrl, d.voffset.v, d.vlength.v, textClean(qs(d.vurl)))); } break; + case mtpc_messageEntityEmail: { const MTPDmessageEntityEmail &d(e.c_messageEntityEmail()); result.push_back(LinkInText(LinkInTextEmail, d.voffset.v, d.vlength.v)); } break; + case mtpc_messageEntityHashtag: { const MTPDmessageEntityHashtag &d(e.c_messageEntityHashtag()); result.push_back(LinkInText(LinkInTextHashtag, d.voffset.v, d.vlength.v)); } break; + case mtpc_messageEntityMention: { const MTPDmessageEntityMention &d(e.c_messageEntityMention()); result.push_back(LinkInText(LinkInTextMention, d.voffset.v, d.vlength.v)); } break; + case mtpc_messageEntityBotCommand: { const MTPDmessageEntityBotCommand &d(e.c_messageEntityBotCommand()); result.push_back(LinkInText(LinkInTextBotCommand, d.voffset.v, d.vlength.v)); } break; + } + } + } + return result; +} +inline MTPVector linksToMTP(const LinksInText &links) { + MTPVector result(MTP_vector(0)); + QVector &v(result._vector().v); + for (int32 i = 0, s = links.size(); i != s; ++i) { + const LinkInText &l(links.at(i)); + switch (l.type) { + case LinkInTextUrl: v.push_back(MTP_messageEntityUrl(MTP_int(l.offset), MTP_int(l.length))); break; + case LinkInTextCustomUrl: v.push_back(MTP_messageEntityTextUrl(MTP_int(l.offset), MTP_int(l.length), MTP_string(l.text))); break; + case LinkInTextEmail: v.push_back(MTP_messageEntityEmail(MTP_int(l.offset), MTP_int(l.length))); break; + case LinkInTextHashtag: v.push_back(MTP_messageEntityHashtag(MTP_int(l.offset), MTP_int(l.length))); break; + case LinkInTextMention: v.push_back(MTP_messageEntityMention(MTP_int(l.offset), MTP_int(l.length))); break; + case LinkInTextBotCommand: v.push_back(MTP_messageEntityBotCommand(MTP_int(l.offset), MTP_int(l.length))); break; + } + } + return result; +} +LinksInText textParseLinks(const QString &text, int32 flags, bool rich = false); #include "gui/emoji_config.h" @@ -464,23 +507,6 @@ enum TextSelectType { typedef QPair TextCustomTag; // open str and close str typedef QMap TextCustomTagsMap; -enum LinkInTextType { - LinkInTextUrl, - LinkInTextCustomUrl, - LinkInTextEmail, - LinkInTextHashtag, - LinkInTextMention, - LinkInTextBotCommand, -}; -struct LinkInText { - LinkInText(LinkInTextType type, int32 offset, int32 length, const QString &text = QString()) : type(type), offset(offset), length(length), text(text) { - } - LinkInTextType type; - int32 offset, length; - QString text; -}; -typedef QList LinksInText; - class Text { public: @@ -492,7 +518,7 @@ public: int32 countHeight(int32 width) const; void setText(style::font font, const QString &text, const TextParseOptions &options = _defaultOptions); void setRichText(style::font font, const QString &text, TextParseOptions options = _defaultOptions, const TextCustomTagsMap &custom = TextCustomTagsMap()); - void setMarkedText(style::font font, const QString &text, const LinksInText &links); + void setMarkedText(style::font font, const QString &text, const LinksInText &links, const TextParseOptions &options = _defaultOptions); void setLink(uint16 lnkIndex, const TextLinkPtr &lnk); bool hasLinks() const; @@ -500,7 +526,7 @@ public: bool hasSkipBlock() const { return _blocks.isEmpty() ? false : _blocks.back()->type() == TextBlockSkip; } - void setSkipBlock(int32 width); + void setSkipBlock(int32 width, int32 height); void removeSkipBlock(); LinksInText calcLinksInText() const; diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index e19699468..f3ae1a3c0 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -110,15 +110,17 @@ namespace { return item ? item->toHistoryForwarded() : 0; } inline const TextParseOptions &itemTextParseOptions(HistoryItem *item) { - History *h = item->history(); - UserData *f = item->from(); - if ((!h->peer->chat && h->peer->asUser()->botInfo) || (!f->chat && f->asUser()->botInfo) || (h->peer->chat && h->peer->asChat()->botStatus >= 0)) { - return _historyBotOptions; - } - return _historyTextOptions; + return itemTextParseOptions(item->history(), item->from()); } } +const TextParseOptions &itemTextParseOptions(History *h, UserData *f) { + if ((!h->peer->chat && h->peer->asUser()->botInfo) || (!f->chat && f->asUser()->botInfo) || (h->peer->chat && h->peer->asChat()->botStatus >= 0)) { + return _historyBotOptions; + } + return _historyTextOptions; +} + void historyInit() { _initTextOptions(); } @@ -1035,7 +1037,7 @@ void History::addToFront(const QVector &slice) { int32 addToH = 0, skip = 0; if (!isEmpty()) { - addToH = -front()->height; + if (width) addToH = -front()->height; pop_front(); // remove date block } HistoryItem *till = isEmpty() ? 0 : front()->front(), *prev = 0; @@ -1049,12 +1051,16 @@ void History::addToFront(const QVector &slice) { if (prev && prev->date.date() != adding->date.date()) { HistoryItem *dayItem = createDayServiceMsg(this, block, adding->date); block->push_back(dayItem); - dayItem->y = block->height; - block->height += dayItem->resize(width); + if (width) { + dayItem->y = block->height; + block->height += dayItem->resize(width); + } } block->push_back(adding); - adding->y = block->height; - block->height += adding->resize(width); + if (width) { + adding->y = block->height; + block->height += adding->resize(width); + } setMsgCount(msgCount + 1); prev = adding; } @@ -1063,8 +1069,10 @@ void History::addToFront(const QVector &slice) { if (till && prev && prev->date.date() != till->date.date()) { HistoryItem *dayItem = createDayServiceMsg(this, block, till->date); block->push_back(dayItem); - dayItem->y = block->height; - block->height += dayItem->resize(width); + if (width) { + dayItem->y = block->height; + block->height += dayItem->resize(width); + } } if (block->size()) { if (loadedAtBottom() && wasMsgCount < unreadCount && msgCount >= unreadCount) { @@ -1079,8 +1087,10 @@ void History::addToFront(const QVector &slice) { } } push_front(block); - addToH += block->height; - ++skip; + if (width) { + addToH += block->height; + ++skip; + } if (loadedAtBottom()) { // add photos to overview and authors to lastAuthors int32 mask = 0; @@ -1167,16 +1177,18 @@ void History::addToFront(const QVector &slice) { HistoryBlock *dateBlock = new HistoryBlock(this); HistoryItem *dayItem = createDayServiceMsg(this, dateBlock, front()->front()->date); dateBlock->push_back(dayItem); - int32 dh = dayItem->resize(width); - dateBlock->height = dh; - if (skip) { - front()->y += dh; + if (width) { + int32 dh = dayItem->resize(width); + dateBlock->height = dh; + if (skip) { + front()->y += dh; + } + addToH += dh; + ++skip; } push_front(dateBlock); // date block - addToH += dh; - ++skip; } - if (addToH) { + if (width && addToH) { for (iterator i = begin(), e = end(); i != e; ++i) { if (skip) { --skip; @@ -5026,7 +5038,7 @@ HistoryMessage::HistoryMessage(History *history, HistoryBlock *block, const MTPD QString text(textClean(qs(msg.vmessage))); initTime(); initMedia(msg.vmedia, text); - initDimensions(text, msg.has_entities() ? linksFromMTP(msg.ventities.c_vector().v) : LinksInText()); + setText(text, msg.has_entities() ? linksFromMTP(msg.ventities.c_vector().v) : LinksInText()); } HistoryMessage::HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, int32 flags, QDateTime date, int32 from, const QString &msg, const LinksInText &links, const MTPMessageMedia &media) : @@ -5039,7 +5051,7 @@ HistoryItem(history, block, msgId, flags, date, from) QString text(msg); initTime(); initMedia(media, text); - initDimensions(text, links); + setText(text, links); } HistoryMessage::HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, int32 flags, QDateTime date, int32 from, const QString &msg, const LinksInText &links, HistoryMedia *fromMedia) : @@ -5054,7 +5066,7 @@ HistoryItem(history, block, msgId, flags, date, from) _media = fromMedia->clone(); _media->regItem(this); } - initDimensions(msg, links); + setText(msg, links); } HistoryMessage::HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, int32 flags, QDateTime date, int32 from, DocumentData *doc) : @@ -5066,7 +5078,7 @@ HistoryItem(history, block, msgId, flags, date, from) { initTime(); initMediaFromDocument(doc); - initDimensions(QString(), LinksInText()); + setText(QString(), LinksInText()); } void HistoryMessage::initTime() { @@ -5154,22 +5166,6 @@ void HistoryMessage::initMediaFromDocument(DocumentData *doc) { _media->regItem(this); } -void HistoryMessage::initDimensions(const QString &text, const LinksInText &links) { - if (!_media || !text.isEmpty()) { // !justMedia() - if (_media && _media->isDisplayed()) { - _text.setMarkedText(st::msgFont, text, links, itemTextParseOptions(this)); - } else { - _text.setMarkedText(st::msgFont, text + textcmdSkipBlock(timeWidth(true), st::msgDateFont->height - st::msgDateDelta.y()), links, itemTextParseOptions(this)); - } - for (int32 i = 0, l = links.size(); i != l; ++i) { - if (links.at(i).type == LinkInTextUrl || links.at(i).type == LinkInTextCustomUrl || links.at(i).type == LinkInTextEmail) { - _flags |= MTPDmessage_flag_HAS_TEXT_LINKS; - break; - } - } - } -} - void HistoryMessage::initDimensions(const HistoryItem *parent) { if (justMedia()) { _media->initDimensions(this); @@ -5182,19 +5178,13 @@ void HistoryMessage::initDimensions(const HistoryItem *parent) { if (_media) { _media->initDimensions(this); if (_media->isDisplayed() && _text.hasSkipBlock()) { - QString was = HistoryMessage::selectedText(FullItemSel); - if (!was.isEmpty()) { - _text.setText(st::msgFont, was, itemTextParseOptions(this)); // without date skip - _textWidth = 0; - _textHeight = 0; - } + _text.removeSkipBlock(); + _textWidth = 0; + _textHeight = 0; } else if (!_media->isDisplayed() && !_text.hasSkipBlock()) { - QString was = HistoryMessage::selectedText(FullItemSel); - if (!was.isEmpty()) { - _text.setText(st::msgFont, was + textcmdSkipBlock(timeWidth(true), st::msgDateFont->height - st::msgDateDelta.y()), itemTextParseOptions(this)); // without date skip - _textWidth = 0; - _textHeight = 0; - } + _text.setSkipBlock(timeWidth(true), st::msgDateFont->height - st::msgDateDelta.y()); + _textWidth = 0; + _textHeight = 0; } if (_media->isDisplayed()) { int32 maxw = _media->maxWidth() + st::msgPadding.left() + st::msgPadding.right(); @@ -5226,6 +5216,10 @@ QString HistoryMessage::selectedText(uint32 selection) const { return _text.original(selectedFrom, selectedTo); } +LinksInText HistoryMessage::textLinks() const { + return _text.calcLinksInText(); +} + QString HistoryMessage::inDialogsText() const { QString result = _media ? _media->inDialogsText() : QString(); return result.isEmpty() ? _text.original(0, 0xFFFF, false) : result; @@ -5237,6 +5231,7 @@ HistoryMedia *HistoryMessage::getMedia(bool inOverview) const { void HistoryMessage::setMedia(const MTPmessageMedia &media) { if ((!_media || _media->isImageLink()) && media.type() == mtpc_messageMediaEmpty) return; + bool mediaWasDisplayed = false; if (_media) { mediaWasDisplayed = _media->isDisplayed(); @@ -5246,24 +5241,38 @@ void HistoryMessage::setMedia(const MTPmessageMedia &media) { QString t; initMedia(media, t); if (_media && _media->isDisplayed() && !mediaWasDisplayed) { - QString was = HistoryMessage::selectedText(FullItemSel); - if (!was.isEmpty()) { - _text.setText(st::msgFont, was, itemTextParseOptions(this)); // without date skip - _textWidth = 0; - _textHeight = 0; - } + _text.removeSkipBlock(); + _textWidth = 0; + _textHeight = 0; } else if (mediaWasDisplayed && (!_media || !_media->isDisplayed())) { - QString was = HistoryMessage::selectedText(FullItemSel); - if (!was.isEmpty()) { - _text.setText(st::msgFont, was + textcmdSkipBlock(timeWidth(true), st::msgDateFont->height - st::msgDateDelta.y()), itemTextParseOptions(this)); // without date skip - _textWidth = 0; - _textHeight = 0; - } + _text.setSkipBlock(timeWidth(true), st::msgDateFont->height - st::msgDateDelta.y()); + _textWidth = 0; + _textHeight = 0; } initDimensions(0); if (App::main()) App::main()->itemResized(this); } +void HistoryMessage::setText(const QString &text, const LinksInText &links) { + if (!_media || !text.isEmpty()) { // !justMedia() + if (_media && _media->isDisplayed()) { + _text.setMarkedText(st::msgFont, text, links, itemTextParseOptions(this)); + } else { + _text.setMarkedText(st::msgFont, text + textcmdSkipBlock(timeWidth(true), st::msgDateFont->height - st::msgDateDelta.y()), links, itemTextParseOptions(this)); + } + if (id > 0) { + for (int32 i = 0, l = links.size(); i != l; ++i) { + if (links.at(i).type == LinkInTextUrl || links.at(i).type == LinkInTextCustomUrl || links.at(i).type == LinkInTextEmail) { + _flags |= MTPDmessage_flag_HAS_TEXT_LINKS; + break; + } + } + } + _textWidth = 0; + _textHeight = 0; + } +} + void HistoryMessage::draw(QPainter &p, uint32 selection) const { textstyleSet(&(out() ? st::outTextStyle : st::inTextStyle)); @@ -5368,6 +5377,8 @@ void HistoryMessage::drawMessageText(QPainter &p, const QRect &trect, uint32 sel } int32 HistoryMessage::resize(int32 width, bool dontRecountText, const HistoryItem *parent) { + if (width < st::msgMinWidth) return _height; + width -= st::msgMargin.left() + st::msgMargin.right(); if (justMedia()) { _height = _media->resize(width, dontRecountText, this); @@ -5573,7 +5584,7 @@ HistoryMessage::~HistoryMessage() { } } -HistoryForwarded::HistoryForwarded(History *history, HistoryBlock *block, const MTPDmessage &msg) : HistoryMessage(history, block, msg.vid.v, msg.vflags.v, ::date(msg.vdate), msg.vfrom_id.v, textClean(qs(msg.vmessage)), msg.vmedia) +HistoryForwarded::HistoryForwarded(History *history, HistoryBlock *block, const MTPDmessage &msg) : HistoryMessage(history, block, msg.vid.v, msg.vflags.v, ::date(msg.vdate), msg.vfrom_id.v, textClean(qs(msg.vmessage)), msg.has_entities() ? linksFromMTP(msg.ventities.c_vector().v) : LinksInText(), msg.vmedia) , fwdDate(::date(msg.vfwd_date)) , fwdFrom(App::user(msg.vfwd_from_id.v)) , fwdFromVersion(fwdFrom->nameVersion) @@ -5582,7 +5593,7 @@ HistoryForwarded::HistoryForwarded(History *history, HistoryBlock *block, const fwdNameUpdated(); } -HistoryForwarded::HistoryForwarded(History *history, HistoryBlock *block, MsgId id, HistoryMessage *msg) : HistoryMessage(history, block, id, ((history->peer->input.type() != mtpc_inputPeerSelf) ? (MTPDmessage_flag_out | MTPDmessage_flag_unread) : 0) | (msg->getMedia() && (msg->getMedia()->type() == MediaTypeAudio/* || msg->getMedia()->type() == MediaTypeVideo*/) ? MTPDmessage_flag_media_unread : 0), ::date(unixtime()), MTP::authedId(), msg->justMedia() ? QString() : msg->HistoryMessage::selectedText(FullItemSel), msg->getMedia()) +HistoryForwarded::HistoryForwarded(History *history, HistoryBlock *block, MsgId id, HistoryMessage *msg) : HistoryMessage(history, block, id, ((history->peer->input.type() != mtpc_inputPeerSelf) ? (MTPDmessage_flag_out | MTPDmessage_flag_unread) : 0) | (msg->getMedia() && (msg->getMedia()->type() == MediaTypeAudio/* || msg->getMedia()->type() == MediaTypeVideo*/) ? MTPDmessage_flag_media_unread : 0), ::date(unixtime()), MTP::authedId(), msg->justMedia() ? QString() : msg->HistoryMessage::selectedText(FullItemSel), msg->HistoryMessage::textLinks(), msg->getMedia()) , fwdDate(msg->dateForwarded()) , fwdFrom(msg->fromForwarded()) , fwdFromVersion(fwdFrom->nameVersion) @@ -5769,7 +5780,7 @@ void HistoryForwarded::getSymbol(uint16 &symbol, bool &after, bool &upon, int32 return HistoryMessage::getSymbol(symbol, after, upon, x, y); } -HistoryReply::HistoryReply(History *history, HistoryBlock *block, const MTPDmessage &msg) : HistoryMessage(history, block, msg.vid.v, msg.vflags.v, ::date(msg.vdate), msg.vfrom_id.v, textClean(qs(msg.vmessage)), msg.vmedia) +HistoryReply::HistoryReply(History *history, HistoryBlock *block, const MTPDmessage &msg) : HistoryMessage(history, block, msg.vid.v, msg.vflags.v, ::date(msg.vdate), msg.vfrom_id.v, textClean(qs(msg.vmessage)), msg.has_entities() ? linksFromMTP(msg.ventities.c_vector().v) : LinksInText(), msg.vmedia) , replyToMsgId(msg.vreply_to_msg_id.v) , replyToMsg(0) , replyToVersion(0) diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index e07994c8e..bcdcc1e3b 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -780,6 +780,8 @@ public: } virtual void setMedia(const MTPmessageMedia &media) { } + virtual void setText(const QString &text, const LinksInText &links) { + } virtual QString time() const { return QString(); } @@ -1288,7 +1290,6 @@ public: void initMediaFromText(QString ¤tText); void initMediaFromDocument(DocumentData *doc); void initDimensions(const HistoryItem *parent = 0); - void initDimensions(const QString &text, const LinksInText &links); void fromNameUpdated() const; bool justMedia() const { @@ -1322,9 +1323,11 @@ public: } QString selectedText(uint32 selection) const; + LinksInText textLinks() const; QString inDialogsText() const; HistoryMedia *getMedia(bool inOverview = false) const; void setMedia(const MTPmessageMedia &media); + void setText(const QString &text, const LinksInText &links); QString time() const { return _time; @@ -1559,3 +1562,5 @@ protected: QString text; bool freezed; }; + +const TextParseOptions &itemTextParseOptions(History *h, UserData *f); diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 3a75d23cb..e9ff8f248 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -982,6 +982,12 @@ DialogsIndexed &MainWidget::dialogsList() { return dialogs.dialogsList(); } +QString cleanMessage(const QString &text) { + QString result = text.trimmed(); + // clean bad symbols + return result; +} + void MainWidget::sendPreparedText(History *hist, const QString &text, MsgId replyTo, WebPageId webPageId) { saveRecentHashtags(text); QString sendingText, leftText = text; @@ -990,7 +996,10 @@ void MainWidget::sendPreparedText(History *hist, const QString &text, MsgId repl MsgId newId = clientMsgId(); uint64 randomId = MTP::nonce(); + sendingText = cleanMessage(sendingText); + App::historyRegRandom(randomId, newId); + App::historyRegSentText(randomId, sendingText); MTPstring msgText(MTP_string(sendingText)); int32 flags = newMessageFlags(hist->peer); // unread, out @@ -1006,8 +1015,9 @@ void MainWidget::sendPreparedText(History *hist, const QString &text, MsgId repl WebPageData *page = App::webPage(webPageId); media = MTP_messageMediaWebPage(MTP_webPagePending(MTP_long(page->id), MTP_int(page->pendingTill))); } + MTPVector localEntities = linksToMTP(textParseLinks(sendingText, itemTextParseOptions(hist, App::self()).flags)); hist->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(hist->peer->id), MTPint(), MTPint(), MTP_int(replyTo), MTP_int(unixtime()), msgText, media, MTPnullMarkup, MTPnullEntities)); - hist->sendRequestId = MTP::send(MTPmessages_SendMessage(MTP_int(sendFlags), hist->peer->input, MTP_int(replyTo), msgText, MTP_long(randomId), MTPnullMarkup, MTPnullEntities), App::main()->rpcDone(&MainWidget::sentDataReceived, randomId), RPCFailHandlerPtr(), 0, 0, hist->sendRequestId); + hist->sendRequestId = MTP::send(MTPmessages_SendMessage(MTP_int(sendFlags), hist->peer->input, MTP_int(replyTo), msgText, MTP_long(randomId), MTPnullMarkup, localEntities), App::main()->rpcDone(&MainWidget::sentDataReceived, randomId), RPCFailHandlerPtr(), 0, 0, hist->sendRequestId); } finishForwarding(hist); @@ -2221,8 +2231,21 @@ void MainWidget::sentDataReceived(uint64 randomId, const MTPmessages_SentMessage switch (result.type()) { case mtpc_messages_sentMessage: { const MTPDmessages_sentMessage &d(result.c_messages_sentMessage()); - - if (randomId) feedUpdate(MTP_updateMessageID(d.vid, MTP_long(randomId))); // ignore real date + + HistoryItem *item = 0; + if (randomId) { + QString text = App::histSentTextByItem(randomId); + feedUpdate(MTP_updateMessageID(d.vid, MTP_long(randomId))); // ignore real date + LinksInText links(linksFromMTP(d.ventities.c_vector().v)); + if (!text.isEmpty() && !links.isEmpty()) { + item = App::histItemById(d.vid.v); + if (item) { + item->setText(text, links); + item->initDimensions(0); + itemResized(item); + } + } + } if (updInited) { if (!updPtsUpdated(d.vpts.v, d.vpts_count.v)) { @@ -2231,7 +2254,9 @@ void MainWidget::sentDataReceived(uint64 randomId, const MTPmessages_SentMessage } } - HistoryItem *item = App::histItemById(d.vid.v); + if (!item) { + item = App::histItemById(d.vid.v); + } if (item) { item->setMedia(d.vmedia); } @@ -2240,7 +2265,20 @@ void MainWidget::sentDataReceived(uint64 randomId, const MTPmessages_SentMessage case mtpc_messages_sentMessageLink: { const MTPDmessages_sentMessageLink &d(result.c_messages_sentMessageLink()); - if (randomId) feedUpdate(MTP_updateMessageID(d.vid, MTP_long(randomId))); // ignore real date + HistoryItem *item = 0; + if (randomId) { + //QString text = App::histSentTextByItem(randomId); + feedUpdate(MTP_updateMessageID(d.vid, MTP_long(randomId))); // ignore real date + //LinksInText links(linksFromMTP(d.ventities.c_vector().v)); + //if (!text.isEmpty() && !links.isEmpty()) { + // item = App::histItemById(d.vid.v); + // if (item) { + // item->setText(text, links); + // item->initDimensions(0); + // itemResized(item); + // } + //} + } if (updInited) { if (!updPtsUpdated(d.vpts.v, d.vpts_count.v)) { @@ -2250,11 +2288,11 @@ void MainWidget::sentDataReceived(uint64 randomId, const MTPmessages_SentMessage } App::feedUserLinks(d.vlinks); - if (d.vmedia.type() != mtpc_messageMediaEmpty) { - HistoryItem *item = App::histItemById(d.vid.v); - if (item) { - item->setMedia(d.vmedia); - } + if (!item) { + item = App::histItemById(d.vid.v); + } + if (item) { + item->setMedia(d.vmedia); } } break; }; @@ -3434,6 +3472,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { } App::historyUnregRandom(d.vrandom_id.v); } + App::historyUnregSentText(d.vrandom_id.v); } break; case mtpc_updateReadMessagesContents: { From 9a51e2c7e3c51edbc4bfc8a477ec12ae3261891a Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 28 Aug 2015 18:15:56 +0300 Subject: [PATCH 109/121] fixed mail links in Win10, include muted chats in the unread badge setting, shared links overview and search, version 0.8.53.dev --- Telegram/PrepareWin.bat | 10 +- Telegram/Resources/lang.strings | 4 + Telegram/Resources/style.txt | 16 + Telegram/SourceFiles/app.cpp | 6 + Telegram/SourceFiles/app.h | 6 + Telegram/SourceFiles/application.cpp | 4 +- Telegram/SourceFiles/art/sprite.png | Bin 171310 -> 172301 bytes Telegram/SourceFiles/art/sprite_200x.png | Bin 225082 -> 227074 bytes Telegram/SourceFiles/autoupdater.cpp | 4 +- Telegram/SourceFiles/config.h | 7 +- Telegram/SourceFiles/dialogswidget.cpp | 1 - Telegram/SourceFiles/gui/text.cpp | 11 + Telegram/SourceFiles/gui/text.h | 6 +- Telegram/SourceFiles/history.cpp | 83 +- Telegram/SourceFiles/history.h | 9 + Telegram/SourceFiles/localstorage.cpp | 11 +- Telegram/SourceFiles/mainwidget.cpp | 21 +- Telegram/SourceFiles/mainwidget.h | 1 + Telegram/SourceFiles/overviewwidget.cpp | 875 ++++++++++++++++-- Telegram/SourceFiles/overviewwidget.h | 82 +- Telegram/SourceFiles/profilewidget.cpp | 46 +- Telegram/SourceFiles/profilewidget.h | 5 +- Telegram/SourceFiles/pspecific_linux.cpp | 16 +- Telegram/SourceFiles/pspecific_mac.cpp | 10 +- Telegram/SourceFiles/pspecific_wnd.cpp | 10 +- Telegram/SourceFiles/settings.cpp | 1 + Telegram/SourceFiles/settings.h | 1 + Telegram/SourceFiles/settingswidget.cpp | 16 +- Telegram/SourceFiles/settingswidget.h | 3 +- Telegram/SourceFiles/title.cpp | 6 +- Telegram/SourceFiles/types.h | 1 + Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 +- Telegram/Version.sh | 2 +- Telegram/_qt_5_5_0_patch.diff | 16 + .../platforms/windows/qwindowsservices.cpp | 160 ++++ 37 files changed, 1253 insertions(+), 211 deletions(-) create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/windows/qwindowsservices.cpp diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index 4a1fa200f..3a4b7051c 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,11 +1,11 @@ @echo OFF set "AppVersionStrMajor=0.8" -set "AppVersion=8052" -set "AppVersionStrSmall=0.8.52" -set "AppVersionStr=0.8.52" -set "AppVersionStrFull=0.8.52.0" -set "DevChannel=0" +set "AppVersion=8053" +set "AppVersionStrSmall=0.8.53" +set "AppVersionStr=0.8.53" +set "AppVersionStrFull=0.8.53.0" +set "DevChannel=1" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/Resources/lang.strings b/Telegram/Resources/lang.strings index eb93c89ae..b145afa5f 100644 --- a/Telegram/Resources/lang.strings +++ b/Telegram/Resources/lang.strings @@ -188,6 +188,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_show_preview" = "Show message preview"; "lng_settings_use_windows" = "Use Windows notifications"; "lng_settings_sound_notify" = "Play sound"; +"lng_settings_include_muted" = "Include muted chats in the unread badge"; "lng_notification_preview" = "You have a new message"; @@ -386,6 +387,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_files_header" = "Files overview"; "lng_profile_audios" = "{count:_not_used_|# voice message|# voice messages} »"; "lng_profile_audios_header" = "Voice messages overview"; +"lng_profile_shared_links" = "{count:_not_used_|# shared link|# shared links} »"; +"lng_profile_shared_links_header" = "Shared links overview"; "lng_profile_audio_files_header" = "Playlist"; "lng_profile_show_all_types" = "Show all types"; "lng_profile_copy_phone" = "Copy phone number"; @@ -443,6 +446,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_media_type_videos" = "Video files"; "lng_media_type_files" = "Files"; "lng_media_type_audios" = "Voice messages"; +"lng_media_type_links" = "Shared links"; "lng_media_open_with" = "Open With"; "lng_media_download" = "Download"; diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index bdc6e4276..656a6e163 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -1451,6 +1451,10 @@ dropdownMediaAudios: iconedButton(dropdownMediaDocuments) { icon: sprite(62px, 348px, 24px, 24px); downIcon: sprite(62px, 348px, 24px, 24px); } +dropdownMediaLinks: iconedButton(dropdownMediaDocuments) { + icon: sprite(372px, 414px, 24px, 24px); + downIcon: sprite(62px, 348px, 24px, 24px); +} dragFont: font(28px semibold); dragSubfont: font(20px semibold); @@ -2002,3 +2006,15 @@ playerDuration: 200; playlistHoverBg: #f2f2f2; playlistPadding: 10px; + +linksSearchMargin: margins(20px, 20px, 20px, 0px); +linksMaxWidth: 520px; +linksLetterFont: font(24px); +linksMargin: 5px; +linksBorder: 1px; +linksBorderColor: #eaeaea; +linksDateColor: #000; +linksDateMargin: 15px; + +linksPhotoCheck: sprite(184px, 196px, 16px, 16px); +linksPhotoChecked: sprite(168px, 196px, 16px, 16px); diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index b99ceee01..7b36392db 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -1843,6 +1843,12 @@ namespace App { prepareCorners(BotKeyboardCorners, st::msgRadius, st::botKbBg); prepareCorners(BotKeyboardOverCorners, st::msgRadius, st::botKbOverBg); prepareCorners(BotKeyboardDownCorners, st::msgRadius, st::botKbDownBg); + prepareCorners(PhotoSelectOverlayCorners, st::msgRadius, st::overviewPhotoSelectOverlay); + + prepareCorners(DocRedCorners, st::msgRadius, st::mvDocRedColor); + prepareCorners(DocYellowCorners, st::msgRadius, st::mvDocYellowColor); + prepareCorners(DocGreenCorners, st::msgRadius, st::mvDocGreenColor); + prepareCorners(DocBlueCorners, st::msgRadius, st::mvDocBlueColor); prepareCorners(MessageInCorners, st::msgRadius, st::msgInBg, &st::msgInShadow); prepareCorners(MessageInSelectedCorners, st::msgRadius, st::msgInSelectBg, &st::msgInSelectShadow); diff --git a/Telegram/SourceFiles/app.h b/Telegram/SourceFiles/app.h index 51995a5c5..093b34395 100644 --- a/Telegram/SourceFiles/app.h +++ b/Telegram/SourceFiles/app.h @@ -58,6 +58,12 @@ enum RoundCorners { BotKeyboardCorners, BotKeyboardOverCorners, BotKeyboardDownCorners, + PhotoSelectOverlayCorners, + + DocRedCorners, + DocYellowCorners, + DocGreenCorners, + DocBlueCorners, InShadowCorners, // for photos without bg InSelectedShadowCorners, diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index 684d76561..cb1abf4df 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -673,8 +673,8 @@ void Application::checkMapVersion() { if (Local::oldMapVersion() < AppVersion) { if (Local::oldMapVersion()) { QString versionFeatures; - if (cDevVersion() && Local::oldMapVersion() < 8050) { - versionFeatures = QString::fromUtf8("\xe2\x80\x94 Bug fixes in Windows notifications\n\xe2\x80\x94 Fixed input methods on Linux (Fcitx and IBus)");// .replace('@', qsl("@") + QChar(0x200D)); + if (cDevVersion() && Local::oldMapVersion() < 8053) { + versionFeatures = QString::fromUtf8("\xe2\x80\x94 Include muted chats in the unread badge setting\n\xe2\x80\x94 Shared links overview and search in shared media");// .replace('@', qsl("@") + QChar(0x200D)); } else if (!cDevVersion() && Local::oldMapVersion() < 8052) { versionFeatures = lang(lng_new_version_minor).trimmed(); } diff --git a/Telegram/SourceFiles/art/sprite.png b/Telegram/SourceFiles/art/sprite.png index 648101a311ff6ef50e8f30d95a451a7b5e7aad05..784f8a93a26396dafc1a865c6bc7f64d2c780cd5 100644 GIT binary patch delta 51852 zcma&Nby!s27e0D`p*tM9Q@XoL8nH-$p*sX=ICM&fGzbVPAYIZ8($bxZNO!|MpYQ!W z&wcLw>kd3K=h<^+X79CEylcH{fB%6M+l5v6h=ME1#V`DdpI2N^P+UkP83!iz{~37! zlVURC7qPT76Sd+JvNGf4666)(Lx0**OnhjY;eL;$4u`~OC1$W?MM`L6!kc)ky^i=JzvJ!P}<#t#r zuj%)#d2~(p)N%&&cYDW=$Z5K4-Cl7!@E$cBy(N+yQwRi*kYS-xHb5bu0pq2Rg$FW$ zKow9_Z~g)BL2?Idfaj=dqJb2^uq>r4Mkt{^9frIY2GZKawhZ0^0A40iV#-~N58`=- zx^PqDng;DBH2sZ6l&z%E@M zKX{Rd)JWBF4YZ*i2?zGA7a_)hV&rsGQ;I+aVDq?ivxNF zY=*?Y-xJj+4yE5Q5^B6uE0V!B>BksjFM_@ZMfle^$~daNw0*KFawAd)6;J_Ou_s|N zVs)ef+^D>(#i}sM2@tSakZzc7D@Cj9zBp==C&*R|394wj`Nt5Yc=92+Z=5Gmv7ou$ zY55-=c{lVO@jbzUp_xP%E#` zzGPYfHWSf~L~a~k#s|+AoNm!+&kiw^D4iC3ehY{69`*BZ-+=204Toq9JQxXp7e)sc z(1>J1^3W9!YXOWQrvq!uS#To0&?>TybKx{is^H!2dFdfQ5akNFqXejr5J12}IG6D7 zN{6k1vn*bC1!zsFIeGf|#Wi-N`2JFW2!VHJW+bX+x5zw9%~+Bv9*isx$Xps8_MrTR#%!CNs=ct4J($EW4>PV4^VCPE_}U6JT6&E=g+h_jUnx`=&%udl*HWMOU1C@c(T zNW?HGhv($v*f=^;S2~y^OLX%twl|-TqUJ&}16xch7P?afk!@d!Dv?I@6l@2aHeCL2 zC>oCt%pUB@LgRm4Z92SnfxG?a98~f@NkyU_AqToSay)z@^Yw5vr!Omhh(O?uNMUag z#C;Y8v^yziTiAyOx}Got#tj)|G<_ZStRc~%p|Ig}K9r1%jD$f8$P83fRmnu0s6ZCY zOjr`m18<~aHAX+CNOsg9h^u!q>ilrALQN~_x@eF*=v5*M$5TPNL+S8VP=VuFj?aXj zIyfeU$Arr*vMfJyC?ZrN}^n^ zybQAf%`GM z0&`huFpzQB9%uBJTJ6GZWPS1I^m)^s_TMgn=| zD-N)VbY&h~b_VyekSg2Uo*sdpAgVLD43JMDo zGcquf2SamnA1qa??9ndTk=9CASMIMi&JTxOADrk;7?2WMnw%;JyW&jkDE@nU6T8jl zuDD!x^nY&$e^~AK!6&9C(TJJ5J^!DNBO5yf8#kgkurP!338>mJtnGK5fij#Yh+)(t zv2d%+w~cE=0ITVHid1|dL{V`u!_%jj%*@O-PEO&27QynLWZ%4jV+6}uTK*2?cl?nx zht5BbZJ^|W@svuoYWS%$o|A;_b56H!?XxZ-RrnUw_=GyZjArMl=?LxR9N-%g^MWlYvbwsnk^4oagjuzY0Z+%@9PF;noYsqa~2y?8LyTkFX^G4ZJYZaD=?o2^RR-0SQ@| z08)$6Cs@sd+DS~$bV#%b6xpV5MrSTIq?rwFb!2UY1DCt>jwpTf?7gSZ-X*yqF?%u_ zgru%4QR~APTblqRMkHwsc@BhT^*78DOVu1L>w&ScRTyABn%yMK&aMVWHj73&I*`?P zfmwO*4!$O{Rhjl|Sc$;i5u9UjN4&tlW5&}vkMFr9{?`$KT1`-JBQ8vfCK`urX(9kr zqsfykIuhpxb|fIOmUswgl>WN*e~ayWHF4V#+v!dgzlGDp2pg|Y%qfb1(r{DrDhu-H)cRV>Cp5 z*S|kr%iN!VlRq36>xB;HszO$OythBsmbtI}ldLVRx*y+CTwKhVJa|?#VRJX*AWSPr zhGRkz+ZQo3G(?O{avrUTy?8TkoyY7g{^<( zTBd^g=luueP2p6vCn=aY@Rz5S4D;A4ZP;mh&$XtGl31geR97yJl_*d~MV{ECOkGxn zPherttb_>-l|Q?RPWp!*aJ3#$`ZW3`q1ZNK*BPhVJ!|AoZwx8V%3+0Mta6PkL*m`? zvRX8_eQjL+#ut>A?^2Z!`oN@j`CTJWsQ2gftdW~$1bQ_a@^h>;VIuY`NR^qH&9>)6?faf2MMPhK^%WHs*g){Y$?WKb?q3Nf)uQfrq$Dr0`AtB?8e}yMYf$Zi-3|uWYd+I(X z=^e`!a|<33-14LUX+e z$3_2#>+Qp(I{R6qETxUICxDU;o$9Y;X&hvr$-F=A9-EYV$s3ZuLA@TxY30f9r{4;E zxo<_Hm_b%SmJgBB{L1igh}N@2zY(WHhnPjfYl_y})z!5<1fP;iNoNQ8c+1G)bW|z; zpHne!i4{yzP=qi@^?lanNo$VeaKKN#=4^D*rs5#Mlg}TGe-cC~nw(0umwf(gxmRsD zl(rmjyFbQhSnr^(t_}|A7`wv6XXo<=)7X#cY`vQYf-%y>Fr|135&N0K`&Q+A z3&Oo<-}_W*V1cmlI-|ta;No9tg%&)fcgynQTMzfuHh=5H@a6UWJ}M<3-{Wwl^)Q;_ zyQr29$@v)g;8vi*l*Dkf6-pB50b*`G)jMUt#K7fu$m}y+2czj|w?Cfd7JLcJzT?j9 z^UBI#C$n&cbp(`vAezg<#UkdS=Y7ymrBT9?G0erw636~?Y_-oPm`O}^tNxeE=kZb( zdU?L!URA$%+wDQ~u4>X0d+JZtU?Dw~+*5lh0xDM}aO?6}4TeW=>%#yZ0WOB5geZPs zo{00x2j}*C(1Tw!sc|bwJ&sD$Wi3z>zV3j>h|x8Frvl_(>@Rw*{Zi+VQYL`4J>2X@ zks5ogb3z#b87XtZ&PCZ}845$XlH;x!GH!l1s6ewN699Ss)ddT5Y47B%&zwWwAI~PWmuC#Fp%+|I z6Tf4h=mIC)@WYLpkKaG)m{lzvZ#bmg%pU7{2cC)=zhZwK^@`oUGnL@RJ{$`Yh^z&8 zd8(5u_b7aD49v~fSdT5WcndUn9d9sxGFMhPCd?9tIvDV8tuy47 zr)evR5jfg!Sk=lDupZUO-bXnm#R;5zup!gF>|SBcr_GcJjF9(FjGzse>);*M-%0h{ zo9mPS0SLC{5ueaL9HA4Bom#)f2O$W7o+DHL`nfilL$YfX1oM##zES?`B+3I>1#e@^7OC&{wKcUP~xm$n0FwrA}!Ea&%wgr{Q1Heh8@ zOD*9`K0%@b{kUlk65=XJRKFFl$x-QSY@@`2kDObMa{FUmvA;Ft&!}HiWz@rSy6riT z`~>=S>c%$*kaEtWfU-hmgzpLha>r0ii=p^>-+b7{@re!VzrFnQ>(?&@5~T^rF=8fF zB0?vT|x_$__#aWRi-&vE-^fFWG}%?-Sjtw^u7K1yd>#79*+M z0uI!4zrF%DMY(;BH+u6PHfbOKx~)E5^~)rIa315kr~R%I?5Y2pJM9+Dx9{sdh!{Fq zjFc@NoAK2wqqQEVfh)IP$BxZdW1*xibRAs}h2{&AmiF-0V6uAK)|`R1pV|frlwzc3ch6svg?o>gRk_c-snEpfZuvf8!@_Oc;-yV@ zVrFJm|K7u6W%%??7bbT$w^ipxb*ZYL&>eexeB6(&2ESO93R{YU{fdlNPkm|L}wy=kfd9nR0c=|CiEXnAP{1HSK+hps~ZUTBJ#DI&pKX@QCg;^N#1s zkZ>?CPwq7fcw2su-MEq6e@Daf;;VZn1`~F({y%Hr7hRcchH5g4<}wsmK9rSl_L)^3 z;dCECX?_}Qz!l;q<>^bcU|D!&-MO{lV(Y@tA;kd`67smASM3ftnLbSu$S3GTMI6$! z!(a6Cse6{5gLq+Y8XC$wb6XrUp-BnCP+a2x8;Vp6Gvms$vomo3#0~xuzs~4>k!k;Z zr&3AVu`aQ%UwEXO^g}>>=Ulu;#0%k>azkC!Nq3}f-V$+f@jvsPJ}*gx#_A_;9k+8< zI{O&6ADO>wT83_*EQ&Joft41al7LlLDCSGZQD{I;kNMUscf0-iPgVvLdDDrQs_78r z>zi{S+flq`rka+#cagyWC+B#9b-s|>z=vX&-Y;yN!%3ULoMP2xH<@J4?2*0iSA{oA zlu`H#cRKC<-~tCUojlXDrX#HH3meAuOA;32k(Rbg_If?b7XE_T{^t*6feI{(8JuZc zhHq?cZ?wDac0)4C@h)VbKn4}Iu+to5T&QO9lbI`(X>j!>+1S}L&o<*_)Brje8PFkN z0J-w!l}uILJO^S)a!(}~MH~lbiUkjgFY0=SpK~;IGgw3HBy}a^O`7(LwPtZ@Q5rh* ze&Nrd(@a;rDxlwBMbn>5;-ebl0iju=$%7IrL_er7ca|`4Aqz*oOCN`@m!Dp;H22Zj z+e!=czy=^2#Xc726mU*P@7UVjj<31*th5V{L5zI5;MwM}<>6S0WW`KF5s&5k5z9$p zMwCp<+{mjQ7dHPch3VE=Ipw7+jw7xc9r__$nG=Bl{>2VQ7{iV#W#K{Ee@92pO~X#m z&A9DItP$z5tCxPsVO>jTby4iXiDFAq`cyBKPD;~`)XKQ+tgO>W;*_?Y<6f^Wf3-Uci&taOf!rS+OGa-?%D>c%a1eKl?xH|oC=-?Tv zN8=(3hVeD}XCjwwHfW^t-^N36`>gczo?PIen8`C|D#sGP_K#P-`E8Vlv_E^&&7t$9 z@nL;yP!R>DdlJ3}1u>5viao_$7$Ar^82}5B9IEPY9|-!ETxb<9bQQ;rY-adOy=lVK z__#+B&2>CTxQCM%m8qyU6IU$yAk%nJ(5v8Dx{V#mcSmP~iW1@WjnKJgJWqASWWMux zI3S5u2OSHo7 zC=@jDko9rWdEs-cuD${6+nCD^!WHYHPA@J=S!5P`fp1z?&tuE{bf09BunwxP%)q1XU9=LlfQj1lLQPD;5d zmiGb0{;65Txq%U8x3R&y0oCC3KrNIQ8sZq()2P#5pBw2WDb`<+@Q{Nk9%p|w=6>18 z`g|a{8^0=I>9Bh_6}~uR@ccOeiCBqN4n?(nnMwP@T6x3DzuE6Mm#g68+ON;*_bWj> z3B7Ac;rGs2!bgo0HrbnZkby)HumEFSnXPO1_1>Z>3*m1|ZD2?2fjswOgVYEda@9(z zaYwTWgef5-1D~|<2X)XbwUJ2#E18HnWTp5qM`tr7y0b?RnM#BylpZYsHQy+mA~@!J zcb2xu_J>7xIPRUM$nw^E<;TB;@m|hFolWFaqoL~+GySeq+BzxA*L}@D-w8P<7Mbf3 z96sbwkZb&Q;>VwX$-tg!w831+W;7^2c2HDVgbIC=A5#PMoj*JLNvU5}jhHQ(c++#!tO_#TYjXZwIfc-}-Sfya_3$pw^$!!s2pDa{iqCE> zE~W4huof%02h~oYH15HUcBRde1uJfIlmV|wZ)sa^d($hIR9x)c1jZVs-VpW@Y|RL8 ztvsl!oP%RLfF8Vv+en8z8ok1N;SK{#e!51YzAv3V3=B!K5kX23L7ji~2oJKpbo7ep zr03Cxq%%ac^}q7D`(>tR;7;O&^Axd#eW-2YGN~y-xT4aX!Rgd?{U@NpNYWPL!G^)3 zJ>|5Y7{QB!64MJ64q+xUM}e&^hh%yJw8JO~=%pE%V7L$}#;!b_M{s_2+ywF$SS3n_ z_Ep^nmkt-^580hwSc0ngs{OKB#8lOGEAE#bcGf4tn1Q10DQnv=p$o$r~k zooRJ{xjZ8qU4Z7pn>FHJiypU`ke=?97LMQtGZJ!gxHPH|(bJ`~8b~f2f%8B$f{T6v zH=m}12H4dt(>oY^C75tV%M>W$NHMgClZ)jLoVy$@WoG7GqLFa|P8Mt0X9zoH+WnjQ%7Ml{ zX3Be)H)vspAXBy!q(J9%KK~~~+DUP3!5Ra}Lpgl^ezfxbGOK>I0@Y>C!}z(NVU|_r zVqb6jnn^38b@dt&m1|C&QpiLn7G@N+rq7au4tcn&SSE{jUY0 zN{^Rl{o7mMjf`@>L3pVZf)#fbTvn29$}BSajp2eHU0__qre<|}tH0P&O5NeRo`AkK z57o|En@l@{0|pISeMV9%i(5;O{9tRHklY%Ysb(B*_ufL|F9GB5x}KidQr(Isr{3t_ zkEg;b+5OSGmvO3KXz@NpZ+o^%cUJMb8oV9-sJ=9ukF7N6gAIkr)ZfZBjVB%HL;hiVTUe@PLF~$R8<+K2sNyXuqe&-X2`l?{=By)L=>8G#8|x z27QBN$&A+}GcE`51zk6KI2;z9-F_e!u)1aZV5whDOnwd~mQ3z^=grXIVoCnm+R)%x zk6%rOvZg?(-%?}Ndt$hhphR1ySJmPVO}hc`>i1ZQ5Ee5Q(w|+!n2jeEyIaB6?B>!3 ztUr2^rI3d(1%9w0Jh*Q{ai-b9C{4V4AB*P`j5ZiCf-O#0=#KbQ7YYGAVyYtggfQ#s z%E$dOeGsNb@tvod)h&g?mMpgYk1wNY5FcY1>MQn@nb)f(Rc6<3X;i{Y zT77U2!$l8}kJ|R{X8jVwPRZPaJ%8}MzhS_Qw*c4Uc-iX-1 zFrDK)2Wr8p%kfFhn5QbmC8b@4w$H!yLkLZ4L*uZh@V-?`s+vy zet=;-b8L}B87x=4`3Yk$nu{8 z1yuKXGJrfYMYl50MQz&xrA_E46Z}S?DkBjew+zSf1GyTxF&CVvX(fte#e?rR^}Bx` z3j>Jyd`eDNJ$4MYZsbgW|qgxpz>6P>0wV4@v)$$%(}%dpD%@l-SpZOvxlaR zfB*eEVHrDEy|M^wu$lGv1Ns;yG-itD40fR)8X0jbEReFPgC==NP?9&1h^YG5Y$^#h zx4E&~R(}OyYkhG&RAm0n_CeuGsjUD`2rVV9N-Q3S8wuc!s_NJuMa-J;@ngilfBy(e z^&6AI+xyWnzs|gWR4NiL=gAgY_qlDCIgmQuX}sf1$+NY=3+2qV^aJm@+dP9OxWnWL zKj!7NXVOLPvPHiTy-(pu9%NTjQn1E61Dt zn~?P0Ec(%4v33n;YiN`~;f0nD=agAixl^Xis+9iW*nQ&- z-5rp>v*q2dSBf-jAJ1A~sz5eYJRW=nqfn-Dr8P;Y}VO2>)2d<&G%LHhD ztg25M{IT-b!OvGYmhr6>lgglruXV@_D?A1jihB?gMP4dLW+eP?gUbi904Zp%Cl6ZO430bc96N9 z>t8LEtbaq)hIZ4{WquR=5dEox0n7IX*WATR^cB&SkVlR;8-2&ea~|#zYzshs2tiNJ`S*fAdP0{&A&&ov* z&uU!Ru$jG)W9a#bvB=V`)-~u7vz?Z-C|2*^oiR!vc`@R8S{yI)Jd=4rsqw=!5fz{U z#ohl_o34~-urzZH#D8B9?u_s182(vkv~^A8dC!DxZFZ#c-_IlEKasU-Bt-9^XU#+= zr49>W7l8Y%e4w6vDazxv_BBm-*3R|E$KERod;d5WACvXZZ3oZ0bcs4tnv}oP;W~dE zVf-NY%RjO2zX}f2QL|I2EJ95cn4JZ_-NGel8|d1NbJ166vC(tJ2F8Q0-?8h8~DAATcRs@+DxnF*BRkfb)7}G2OkULq_FA<#5vN z3zMP0<78EZ^N}CO^cyn@fi*okbnP5*p{-^R8w)GES11@Wvsm>5;Pp%Jr(LE8itNOf z4`RsrdR5TAg+P)0nr3Fi7XnI)0g>0NWfMB96?#>7`HoOFO^|O(A*iXqel8*MwcTR< z^`wi)I2ad-M~_MO2GrQN?nas97oN4zDf~^K6!zQE>B-C?a@X5QHi}ffXLQ&NjkGhd z4eHQph@azPEgq{oZm-gY)@xt}a!T4#yj&veqk(pG$NG3edH1|zLTAjKO;bV?> z-mQ&HQ|p@OTSBq_%!!2Dl`9CVb}6;YMstaAlx}r{fYhTt*y^KMjbET*48ar-ShAHk zglA<3ZO~+;t?@uktS<{VpwDLgxe@O5N_SPQ| z;&{V(SRFPRS8Yoo(qVA@3f*)k`pJ+Cc8Tvx+57}jvZ znPV(o4xDJGCt-HqBZ3D-N^b0kw~BDz@X1;zE=Van43TR11Ten50ygGu-e*v`)x_Wb zJ`*l-sLz4jK53!A zm%>AF4Vfzlb+R0w9wnU?(?Hp&3!)KfCeJ3%9C5m*Ao|x*WZ8Yv1Mq_QiS!lLCHbGgrGm=Q1!Qkg$3zQ z(_7zpsBHhrtjf#V!{g!|ppB_LBB7tIQM?b8Nuh=*qltxuOlwx`TTkeg%y|cC3;-tA z^YizKHPpp6L|Fm#e_*vn*q{0jlea(EKf2W8+uwe4z0or*Z$>peD|Rqdz;$YN_VNAH7oCPgrfb6> z-e7e&KtM`*DPdjh(ya3N%UKvU=?dDeF{Wn%kbs;p{}5a4PilU9XtU_~ZgKTp$zwfO z#Lb@q^k~s0I^s2eDthWuN%ise@0G0!-?!t;tzd*89dQTBD0Tt#n6etgUiV({+Fhax z1>K*x1wj7I0wn3ZVVw%Bie_2({{DVlp8v(XaH5K!3?Cn19{6zWt83za&fi>oe7&6q z%0Y_Im5j};Kj)Hbl7<^CK1Pg~dvjz3v<3)gp$Epr;Z03X%YA-ds*5Kw!J~ID)#x_*SMp><4%Pdjo;k5T=wya zx=JEbVdd`=_obH4xRz3XD)+5TMt_@%RiP783Ol49s=*=UTeQi{b*R#-Cx#`eL-YEN z$Z*}Sn{7h}sQRa4EnYnT`il9**E7`FK``Iq7-CG-FoIp0H%MZ7<1*R)Z!QqT>})B4 zD75^70%WKIXJB+RynHVlBt{=9C@;soz1Z)bt1?f_%cCXAXu~MP>;T8x9rr`#8z<3`iTK6P-oUBIO>hN6>1e4O--(1P)pl z{Lz3zM1m*8K5`m1IK6c;1I^5E1C1h-HItH+Pu!CKA5tw##0=wkO~-#s-Q=?8YPlyf zZu4V7yjsVpROgR8NY1Zby`p1fMc?d;MbVr@8X6cHQtEhdp#`=nLqX+Tvp&xn88B|b(1C>V{^dACv2N~Ge?I@LW z)N1Bi90rq^O}760`CgOQOX@-V%E4jp_2_oFVFUNa;+;~ma53>0Q3m)kP1J4=N~NXlL>8j8eAERMycUG&48X(bXlb)M$utAz5Og}Q1ojfw*$a=NL5$(i53YAJg+gmpIs4BQRpkP)MeaAW$+n&wcv?V( zJ9^Wj!Hos`3jZ;T0DxtG#FM*+|Y<8te}4RX@OHdHz_;}m&4kVRK8ZHnoa9NJiHjp zRzicoGqrKRwdH5Xk1i?0@x>E+9fhm)j@Cl(zZs3Zh9+2AM=g?pNaxvmzzGuku($`J z1S&FkFWCq}oo(C%P-og3d%?_pBL(}Mflsqg!DRlWiX#Xi($$Bs%uI?e({>TX>pnC} zI(Xalr_NklT%zx`B14w;6q9qo+=KtEfGC`>V>vS69tj@z>_@hIMOcpszCD4`7gN(9 zvL+mFHTETl=J=CF>jY!w|knUlKT>_LPhu zA0u$9$%QFq49Sm@eI2{q&Lg2aZD`VUGfmjffsrtXGaRk1t`6VI+Ise_?|z;3e3$LV zMd5!<%-Gr#kw+ktLd^dmwn~JBgoHXR_~kg^i~<5~;}x`DShswDy2R;yNt>g}d!D@% z`cP5i^6ricdR*vhY3c_bo_bQAJN)_fe)P{bh)0!TP6z{HdV?V)0c2miASx(C;hTqVb@$@pqbG z+`>C0F?l=3Ki?L6%#M>ehrXTp-17%2UC7 z{5W3A>!RUMOBTI?^YT|hRHzXMtcf0^Phx4?p6WKp=>X1dPwkVWe3S z5)+4{q@)B4lBwvGQ=`o5>fo+ned0jr^9EjZnUgi?L47n_KmwEZ=lfKPj6ooWWlHM+!$4 zm85d&G5p+Oir{@`fctudGaS*DZ+r9K-g32HEZEO_VU;{FCP#u~1-ZNg6{dj!G6Nof z8b(grky&yt^vS+;!v~NFKS4%Q{<2N|6beB2eZ9RSq%plbP$b>PKaw=zAd32f5(sg7 zd#3vEaJVACo)AUR?j4{^|}=s8(Sd&H+Neh zAhuA%!n;)&%#IE+ov*g6gJ|Tef>-P&#kM!>Kod?kl~C3Q__o?&khF_Kpn5HPw40ns zl>rLn(6flhtaDP;A>f%NmQZQXtkETA3%)sihN4vkas*z69UO-A0>b!;ve4;;5aGly zlq=pZ!JTjxGfqhi}s4Lj1JaVV-c9%40|F>jka#A;ET`B5g`?eT}? zXt+oP4k5~CL^jIt04w|yP8bFO?_FYYa>&YxaY|}x5Q3~BGn|JPCj`m{&Mq!M23FSo z5)E*TJsGdF6~r|q3gkihK=bJy1Ug;=p&LZVFpQ(9q9Udb)DrL~Po6*$MPh~5>h`}Z zohFm;C@U^vJf$qu)iu;rs{es33Rw=a{1-K>(6 zke7!K1+yPN#37(|Sz6p6pdTvFLfv%>wd#`BQgsY5=C{WJ0r>W+hDgW^@P?&F3kN$b zEfyv9YPO_NmZuCs$n@s{X+v?Q!I8*8Y$eWR$+)PpoZ$@OaP1cG_$gWL?waWLWXpNw zWYyWDe}$g2@#Fnkb3(Y=nC*FMNclB2#8FXEC~5Qa^E*>9pZY2Ex>Zer-_v%v^soT< z-I>`sfq{|TA!FZ1NC&qH6$ORj7zVC7e{gFisOAqaJwFr8&7@>5YrYipwA7gmIwLqp)rmrpV8dX*HYJFHw6-I`lNuC}zUhrwmLb9U zE!Syey}SJY|A5DKZm>%qPikQ7>ODY-C^xw`g|*wG0X%@$%tZr$L>RPt=*=%)k?+E< zI@!w*tb%!Y5pC-uX!D`%-{bf8GpvgrST!qpH^0o=rJh8MJ$!FIs3z)kqqIU%S)8Sw z+=~))umBU$?2A5QtSJd9)p=h2i(c@pbzP(1K+68+oR>^RJ4sE;$YZW2Oil+8Hj!Un zmWZ?5KG;wk3_up;s$%Ev`QND(GCk^^L>P7%OT8bUjbTAgXU0;>YNFz|HI2_hE70~= zE=t86!ITgtV3R};rDWk+D<5#WSrPDVHTpFzsD&18@j$`rz%*gTipygGJ(FY>EW~F! z8C=f3U(K`m`@9?;!=}Yq(A0-_{;mDN_cV&JgkpArWE#)jOb^|5&h_eOUAisuApte~ zDkv{VDAR_s>>>7o_h8cp0MQeyCqIO`=tHuSpfOB7`I{L#Tg_;%|d!sMzF_D0ud&hClFNEa={TER(_zH$6p)NMU)f7=i{s?zhNw&(JL zRXA@Zm!h%qhHs$&(ecd3X6Mo`&R|f1$}_q8hlFsEYJm4I%Tv!Uq0@*vYrU5?P^)t-{~(nm*EORoY3!(MW~Q62)< zy&gt8Kwj16FYCej;M>ESkQG&0_lX;K#Y7d6M$boQ&?cu}w5g=YYiLa#3JrtDYQ zlR!O>9|1&8VSP%{sCpx{=a|}K$NsYagkL@W%et&3snanAOTPzk8=%+ zE5tW7Jbr%89sl+THSzo2c@|7Nl0Y56DyC96U?{uEN_VbP2-+&c8D*j?q{$J|yZEBT`k zO{8=yq!X#wpj6WLwq@8Olj73v9fMpI#sq>T>CknmL)t!5;MJV83}!|DQCHXM<0h5?`>jbwsd}{9=iXm= z@YRR2yTg_Hq1?oimNc2ihsG~9JE?7+X7Rj^A#|4RkaayXS$^KQ`SIQ)ys&e?KQvmP9ncSP|gm?NI9wB@54` zhpcHkPvrLT;b_Tl{?j=7l9KHCM^4~!;$<}3&Zsw-e7dV%nw6S$nR>Y8m0S4qTXOMN zt+?%sLuf$Kc)2KBM6BJIkoo*8qFGt{S{-g}ONI=?Vcz2JjUiEbhOdaG8I{E5{mTSt zNy;d1@;qL$ge*CuA(SP`9Wixqj!#f?DvIfHltwkoFha!);s49fkS!%EKl31fS0BU20YiMf_<= zYRg0YQHn*Q1#nyaV;T-GNhmjL$iyg&*Q_PvsDkrCa6GMq~X+Eb-1qxx_#nS+;;7(~wsPd~6xK-VQ?VJZ=ds zR%t(Vo+l=`X{93$PY84g)L?HLndOVNAs@{X#=|a-Qwn&)4+L&{QGMSV!X{DD`3cTl zF#~V#ORUeRq*v^1!Dw=r-QI!8G^(U`JN3`foW>SUb(q3eRvwnnq$@pRED+_PH_pJ= z_qR<&s}rA$g+63tQFOXUl07&qPD6FiuA5IcLsyJ}r&{IE9R$G4ccUcmzoRsMqQXgA zQPM-jdsALU-YX>8BA)@B7g7DE^|arQY8NPkjKq)Pc|cJ^Znz1P#(C$IU}PEUsntEV zz+n@d43l zIfw3d2je=s*FMk#Og1RzZn<3XRY+^%KkW5KebrJ>UD7IDc$%n`m@WeyE)<@w<##|A z)Qrk$7j=F|4jA5qnyL0iH)NMOiM}Eqc%c^lqKQ4&DZ>#a=%j)vG z$K*rh7t66w#0q@Vbo&}>n_Loero~HSsmg9s0NRvmru;DQZKDj8ggzh(%_aG?9V@Kh zBvxdF4TBjPGJ5CnvU2MJdhAZl&ksHxb>sV~tH-pT?ZM@DKt*5Nkf9eu;IB^;dLG22CK&4vrQ<1wET`M#_8UC3ZwZv3J_j_=HLl6 zK!T!fdIaGD`amEg2loe&S4Ha@aG=AZG{POdeBR;DKBa@2x_WmKXNnF{i|--B7Snl! zF#OpOL_K|e9ou*qhJXCCkL&Nm-%)Yv-OhJo$llxq>i*I#KKJe!di+Klufm@w!V+Kb z``?VPJ&lSq4fbE=^P{7s-QY$$I)!@d!M6VtK>G4qC>O-P#y}?s4oQF|-^11tc_j#D z72K?6D7>lc&EN#G>(*I}1~z&Z%dpp3ozkay$R+y^kIoh^eYH27?c4vI<|sS&Kr?v4 zAQm@A@s)TEWvtzhEmakc{qmYF2~EjL(qoaf;u%?q8a{mwaDY^K8~2*>5QG#)Syhn` z!Yq}HBt?Xn7WD9#C>LgI!0W1&`o38==9SO`l(9c`;Sz)@^fc&Q~2%Sa84+mvAo7P(NXXB=(w$@=$Dz!%w z*0aCE?Qetkx{tz3k@kK-1~m;SN;;O8DsI=Qq|9xNvYsdneDq%WgQ@e9VS9koVGO6_ zeudX&tjJBmh;zUxW&48g&F6c1X6)IE`r6u~&!0cjsCLj+N5$TW3BtnFWXKE z*7&mPHOVNIcWu0HBhdBYCTZrtwGrBx_Wa#3UmCSD^G#!3?nR6>F?yi^x^9}^7V0;> z63KD|f-%7oZyd|q7ry9{eX(U{eG1oJ;vHhd1ViO(T>8>Lsf*v&?cfE4fnuAs&W6pU z0c`h84R2=pE_fkO*VMqE=E2|*<~BcLn$&yv_+W(w9dcf;LBOJ!3QM%|0($XxtLT>& zE)EJsP-`);e_6d{*wc9Nz4$ZK!@pb+HTt^QC2bRX8h=dkH}EIdqaWZ^iG-Ek{cr)-ru0Ag6&fVwiv-i1i zA%_=C#@_UNG4{k0uB#q2$+qEY2Reb?^Gvivo~1aMoYqd{1c;~4gmX=iOepjDoLGc! zLa<9>0=G2=k?vg0*>dr-PUufeL<8Bf5=ZhIon*nj>SU~Rq47SBVJdV}FO@IaQ4bdl z;w$S8UNanY=;a@O_nt9_%Ln>Z2g=hM3fx>H_tJ77x5lgl!W4{h3Qh$5TtLjPH37n~ z3M}568||8`Sd1qX@Q+DG(UN8i>3K5uXD<+NOo4EG4wO9|u6HzSrtLr@?Jr5RR$vVwDAXOxO&+5rjZDc+?!3^I7Fvq? zCVbSUiN|)u;$=;YZZ=LF1mxK$vnB>+7?9M-Qg<%pvzL8W_UM_8HOoNAyFO^#(NU_#oy0MK1f15!2*T;&O=~tsp@yfhAkHJ^PvH0WeUr9?hJI@_ZDr3fr_%B%7RkTT-cqGV@bQ&-JCyaJ z@#%^M=RDt5Aj!D;k5{m^C~5-3(>y^>Ubz;*{zZY!%;=NCxD>cH^j}wCcTIT-bAWQp zQXCSDR?BQHiU%ieFAx+iq^Sw3kR-_9_J`dk{`D4W9`EtX$ztdVge(UaoEkz3Ve+hD z9iGgG?4k^YUK>5T{46G>@o%A5(Qho^yAqx9M`o?u(i#s}G>dH(S+TWdv|WgTF}2AV zBL|1shLwj#<-?yTsr4fnK$%6>COtdlf`d++^ZOkOSD#iik$zD7GY(FLys3KO<@Bur zIoQVFqW9_A=-geuh41N?1@k#5WLhXe*2TpI3C6?EZy6}m-okBtUO#IYsfGVZ(XwY% zY+l&pkblz*?pI8wmlYWRv;jU2oSf>l>Cdx#^z9Or*3Ra3N>WmGO5$%1>f_NZqWBx! z%D%AfrN6>Xp4Cpru&C>t)nd*2ojUmAUwvP5VkEt}yYojo-$VmO?EX85e&8AR=jU18 z%boW(8zBKEY4HkM#Ds65^6~>smy$~3S$dJUpoEQ^Cr<|!2M#}Ae-=Wr*EXIhl9n4oT3;tG~hO_F72C2I=-AARx^HQYz=NQpZlA!Tq&P>?}d8nm*#yOG!c1u z``=9BtPa(dRtvXPGLEnz-3(s!aGCgn^S->tzh}jSHKJs1TmMj+dN%~~-8c~_gy-cK zC|o>5$IB;XDJgZo)T`x!4huLpJg9_yxHk2WB&FYe*iM=pqPlgR)qUmVPcoLV5p(fN z8tW;nc^bQBAMUpQcPkd`1)OKTIAUTTf+ajcb8Ju*N*SE;f(K+Mn8_F_S=Ek%kIz7! zkjiBgBC0&8rIA6)&Y}{ROi?vFJgV}n29h-|QmTJQCMcFi=hdB47vZzKHWHPKlNVu{ zvmRTv!tUU~7S=r$i}qkdr<%d5c#Jcr2GIAH)EIEanEuq2G$Kry;FaQsnjZ1Mkf$5 zFCuG3Nj#^SL!N6ji4&6@yLUQnC>D4TIq1l$L93OrO?5#|Z+!=Og>4*PFS@-^pg+bH8l1 zCVq-z9B8AtLS3mMrzC9PL&U&9#g0u2!-h2@NU*_fL7IcrLNST{OCOlJRAcRt(lsRgYSOQe-#Z}5#GYW^ZHQmJ5WQH`Br(Q`$Bt&Z zg@d}H#G=C*C{5vy7u5LYl6dSw1!|i&YIs>_!zpU5gzHi{v9>?47s;RG7{1UGL4@11 zItyORUi@X99W>y^e0^AVjOML244?>Ba|OI{B%6WFgDH@s1_4gB-1UC^ck7qlPaFmc zy%*DdgFSD;&tk;T?7KS(5)0yUKL!icK{DJK$ch}bCIc^=v2E0|Z9I)t{URTq^O_(C_i1|Y}E%cxbPLeJn zmD^H#Btx){i$Wn_`)af;HN!JYeDLhna_zPpKR#g~@Rh!hH_t-w%t-ATSG4Lh57m-a zvvcTC2pOW0gz(OhPQ$pvI?ATbCk_M*f_A@YXl<{~@$7BYaWfK@KecR-rnj%4^VYVb z^^in;W;B)CQ1DZ1dn#zpJ4fNA>*(sLJa#xA84MSL&>AI>v-UWOTeA6n=X9C4XM^nD zjm)@~PGNtQjn(@q2P!>wspT)$4|e;XF0*`ZB07CqZ@v#;;OkUG*}ry}MP5C;qE6uz zLh>(RmKiHM32JSmkyeOeYeTa=Xr$u}MP}dBhdH3d*cvr&5As9tEI1R6wzC&fgu?bJ zS-jCjyOJ>*Z!T>X9{yfMLyHkqe}wg3r;-)ViMbi9Ao^xjjhBht`mRD+HWgw9Sxhov zwQvV$MM|IVh@J@Xr4-OwkNdi}@rg=kJI7wfvtqV$Kz@O-}Vp6xZdyO;Lb%nB(` zo85`1alfwSjWsSb79i#b+gu8(4APW$xy@KvW@z{Nz?tOsj}>VG`ZB_L3OYuh^J<1{XKoN9E#v0?jt5wDVZR0Uj15i|=%q zJ8ngB31~V~GORmJu?qvBEcX2yBFlY_{vD7$Rd;LH_vd>9gKG=?lP)%LN=c}aN`V6Kf{)V~qY2j=p`uq6uUjkWJ)Vlz(T&-1 zV)Q!9zq?3iGA&F0O7?NEw9*!PG1dr`lrjbv<`C!v*&?jYR`mFwT;i_Z9HaSD%lrG$ z8aNab)#OjUag9$Q%6uJut|Rj{Q}zqGJmP_t?Y=G9f^Zw9=HkTopD&^VD*PE(v)c;t zIK(4Q_;mzJ%W;9XLNpsUX{iwMe|5{mZy2Nm2sA9rp3}Tpw}_B z`+&sq1zgF_kgX-n8pxDak$#QV^oU`=!M}v#q)7_$CQlchHjKbh=%XFu_nlx&?(5#N06mAvL=nC+x!ly%=7vEJflSzm-UO!9Ki~Y^1?CE1` zIX5dpBOkZ{PlMPc4tEPPvf+p(L;=2PIDSOx@s1ApgGPL|^{OtXXv{;bl2K@Dwq=8=z-4)pTgRZSzhx6uW#7NsanQBWRfFHQIoF*lFc{!ebeQh#+au z>3EG;iu!}XW4n}B?=?b7K2Ee?uK~`JUsW()r0Sf`0W=kd$KOe&C%lIg4;|9sJbuOu zmY~lgsT!WvO=V3(MqD0D-<~=5(Zm(t0YZ zsrpRbUqbeykj19*rxYT&sWbjmC15Ke2oY=8Ch{l&+g=nE;-B)}phAw68%9s1(CFUs+uiR9 z!x%Tk17{+jjY&;i9WKA-$OrV0DW&nC?(Xgy&tFhwqGeOwA~6=1PrO~A%CN5J=bd~Z zRnEppD_gBs(H|pzk5Z?pYnh}N1n62egJzuZajClOa7zIs+@98oKW~do<;+#ko7|@x zU9+VF{kG|#a1PINUWL1%7}Jmu`i8S9u>(OL7{#cm-in!lkQeUrR9Bk*LgJiPivdT` zccEpCY1PnP2=>$d@qD>%Ckmhj@dGX?YoJikyEC4jt5JFkxSsqDF%f*7!}6us5Vnkl z4$)$4>EZ8yXmxyA>o{{AO(iN6C?xI>nrP`+1m$ucxT|wx^d7zVB1pvf$^k2GVl@P2 z0Q-dv6Z+*7^7X9deHV^E`{irOm)26G6NxMW(5;u6K!ur0LTy~O5Zda~)$sSfTVn~* zNgAIm1JUTlRH>%CqGC_EZrydc88;Uf5ST?}3VWD5+~0-9#5}D{suXsl2&-|-h13jR{&+#ckU8!N1$K7j7hM5w5jwoE9!8X+e0}}NrJ0KG z9EMiD;q;QA295S zrkR%5RLQ9K>-5P4#fTrC?@kJQIA;b8Yc)pQ@ZWzs*EcriH8l}~bT%~RftTIa-u^kz z@{Em*`Q6@r1mEao*Y~c$Nw@Z0Qc~l|tabm44D=#G1F~W*`gtX>gVO89@Msm=!jjYL z^mHq5O;(7Agde}Cd z9$D0TbK#TewWFFk=NI>_53eXnZ+JgM)63KM_et4KNt$A0pSDj=PYZY+Qx|BkjEG(u zfX{re+WB;`@qKTuRLJq&JXw}a9H9jY2~RsV`wo1n4; zglbw*=|Q5WoY~-~1UJj`52l^kgKx`LW&m7^_%^|>U<|3xPB=x@>DZd~vE=91PT;Ng zw08;yYX<2itkhVeb$s{7`ZYIZOVW^uIj3Gj&Q(JY!SvP-Y>SHw!O+t!P5GEt-*z?) zC>)r3yZ7iwk`f`z!lg3hIVlZNJ`sQHw6rwGUtMs>x?oAyLE~jfS=mcxXRg}XTF1R9 z7GR?R4~z{$!@_o5p0Ww!$*C(q0w`0{uMVd$uk=D7cQp z&c#wy*VkPyOq}ZxW2wnZV|P+~VdWvf{d!GjX@hkrOy;`~62|#AP&eW5bR(q(Mg@P&1bcf=L9WqbwPVwB zInV?T1A9M)K!)ogOE8eGVIVF~zGpp*Sb{d*kCw&m#cGgYK))mjSpX4U90JK%*FX=Jz~zz)C`3!f(_>Kxz$&!&sWCEDkZW`(w87yK zP`_t34(GgsE=y>}RM>JO#;2H-5m%r##qZ$`*EP7em2i&}Ja57YwV5Av?xzWj{*aoU zFPw38FXcs6$q?jju$n4~*j6&2#f`XyM!rmsFKfPATsll?TQ@ZalBon(pY`C6+xktG zE0`D-|HN2hnJ^OTMvF%W+P@6Bqqerr&o|;Q)t)q0$Dq!E;9>gdmBp~^AHHy-XF3AL zVq6=OPHnjuA+|9zVnSHxOv544^l$@CCHwWsXGvk@yE;O=Z>=;vsJX=`$0u^3Osm$` z)*6o^!()*cmk~ka($Z284G6&9m7~VYVL3t(`ppD{D)-F7`0Q-k%UQ{PbP|by2L((^GcW zP7jdlhk#W$7*kmqC1N@X6i?3`zv28gCY6)#VaajNGI@LWsN;6bPf6pBCc@W*wVc%Y z!J00@FB&r}*m(6-F8{8R?|94iS0mknMQ8`*OA*Xr6cJ2@zfeBk{hl(Ma-A~O(!h#0 z!8fi=sm?dS7Rc(ItLKcxSgSO>F+>aK_5*1aEjKqlaHi`9HzqZdFz9&LvMt0DA{By_ zTT_GkxWQv$LgwxIy91EH2_qXthFGJ60Y`^!5zz6Pmh9Rus?xARzXvDGiuDDZmz`^3 zy;d}oU&s#y8+<=Nv=Gu^86izRHcIR4vZs*<2#%c+Wkw5N&0&fTjy?HN^)1s{Mnpt z?83zy?p@9%N230s7)fP0QTN27U@iJ@-|$C6UfM?yExhv~VIqGPOZ7P%QO2eFgu+*# zhVuQMyV7?u{({!_20eCQOoa)SAU+;%^Y`z^FN=%?QGia??xhwNN{ix&2@T+0h6I}7 zQaDYKJhKKW-?om;&xdiE_G4VxJK&r4i$k~kGxiVE)u^LRE7!*HqG2beaB*cff z^beCvFn!$ojtg3Gl~TD7!5=GY>+ZwlR)_{K%n=x5&~T2EA$ zi0{h{uL_kT?V-^4p-p@=u3`ods$sTKkw3mBi>~yU(|=<^{BV~XO;x3*@EIy=a@+4l z8yGq40~?|(vS9Eqnl~l28cmRg)1Vno7R~RC@lSz$_P-HC67k{#NOw_W*@8rqXGKQN zDx3@6!Y6kp?|;D=2>4QIyf;&y(F*f<9g-6}upU2%PD7|rQ(?!%s;@%#Oza7If41-@ zD$3c}8K-d%!eckz^78Ur3*^G&ndKqS4wq9_h6enV
    !fNv3Un6&@h&1HU35fZr7 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 MMO(Q-(LDVB11ImhK>z>% delta 50839 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 diff --git a/Telegram/SourceFiles/art/sprite_200x.png b/Telegram/SourceFiles/art/sprite_200x.png index f8d5d7f382b6b87129dd7a50c84c22eddaaa6189..7ef912b1dc20810adb20ec42b8261c2b0e73082c 100644 GIT binary patch delta 63811 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 messages:Vector< messages.messages#8c718e87 messages:Vector chats:Vector users:Vector = messages.Messages; messages.messagesSlice#b446ae3 count:int messages:Vector chats:Vector users:Vector = messages.Messages; -messages.sentMessage#8a99d8e0 id:int date:int media:MessageMedia entities:Vector pts:int pts_count:int = messages.SentMessage; - messages.chats#64ff9fd5 chats:Vector = messages.Chats; messages.chatFull#e5d7d19c full_chat:ChatFull chats:Vector users:Vector = messages.ChatFull; @@ -365,30 +361,6 @@ help.noAppUpdate#c45a6536 = help.AppUpdate; help.inviteText#18cb9f78 message:string = help.InviteText; -messages.sentMessageLink#35a1a663 id:int date:int media:MessageMedia pts:int pts_count:int links:Vector seq:int = messages.SentMessage; - -inputGeoChat#74d456fa chat_id:int access_hash:long = InputGeoChat; - -inputNotifyGeoChatPeer#4d8ddec8 peer:InputGeoChat = InputNotifyPeer; - -geoChat#75eaea5a id:int access_hash:long title:string address:string venue:string geo:GeoPoint photo:ChatPhoto participants_count:int date:int checked_in:Bool version:int = Chat; - -geoChatMessageEmpty#60311a9b chat_id:int id:int = GeoChatMessage; -geoChatMessage#4505f8e1 chat_id:int id:int from_id:int date:int message:string media:MessageMedia = GeoChatMessage; -geoChatMessageService#d34fa24e chat_id:int id:int from_id:int date:int action:MessageAction = GeoChatMessage; - -geochats.statedMessage#17b1578b message:GeoChatMessage chats:Vector users:Vector seq:int = geochats.StatedMessage; - -geochats.located#48feb267 results:Vector messages:Vector chats:Vector users:Vector = geochats.Located; - -geochats.messages#d1526db1 messages:Vector chats:Vector users:Vector = geochats.Messages; -geochats.messagesSlice#bc5863e8 count:int messages:Vector chats:Vector users:Vector = geochats.Messages; - -messageActionGeoChatCreate#6f038ebc title:string address:string = MessageAction; -messageActionGeoChatCheckin#c7d53de = MessageAction; - -updateNewGeoChatMessage#5a68e3f7 message:GeoChatMessage = Update; - wallPaperSolid#63117f24 id:int title:string bg_color:int color:int = WallPaper; updateNewEncryptedMessage#12bcbd9a message:EncryptedMessage qts:int = Update; @@ -546,7 +518,7 @@ updateWebPage#2cc36971 webpage:WebPage = Update; webPageEmpty#eb1477e8 id:long = WebPage; webPagePending#c586da1c id:long date:int = WebPage; -webPage#a31ea0b5 flags:# id:long url:string display_url:string type:flags.0?string site_name:flags.1?string title:flags.2?string description:flags.3?string photo:flags.4?Photo embed_url:flags.5?string embed_type:flags.5?string embed_width:flags.6?int embed_height:flags.6?int duration:flags.7?int author:flags.8?string = WebPage; +webPage#ca820ed7 flags:# id:long url:string display_url:string type:flags.0?string site_name:flags.1?string title:flags.2?string description:flags.3?string photo:flags.4?Photo embed_url:flags.5?string embed_type:flags.5?string embed_width:flags.6?int embed_height:flags.6?int duration:flags.7?int author:flags.8?string document:flags.9?Document = WebPage; messageMediaWebPage#a32dd600 webpage:WebPage = MessageMedia; @@ -621,6 +593,8 @@ messageEntityCode#28a20571 offset:int length:int = MessageEntity; messageEntityPre#73924be0 offset:int length:int language:string = MessageEntity; messageEntityTextUrl#76a6d327 offset:int length:int url:string = MessageEntity; +updateShortSentMessage#11f1331c flags:# id:int pts:int pts_count:int date:int media:flags.9?MessageMedia entities:flags.7?Vector = Updates; + ---functions--- invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X; @@ -672,7 +646,7 @@ messages.deleteHistory#f4f8fb61 peer:InputPeer offset:int = messages.AffectedHis messages.deleteMessages#a5f18925 id:Vector = messages.AffectedMessages; messages.receivedMessages#5a954c0 max_id:int = Vector; messages.setTyping#a3825e50 peer:InputPeer action:SendMessageAction = Bool; -messages.sendMessage#df12390 flags:# peer:InputPeer reply_to_msg_id:flags.0?int message:string random_id:long reply_markup:flags.2?ReplyMarkup entities:flags.3?Vector = messages.SentMessage; +messages.sendMessage#fa88427a flags:# peer:InputPeer reply_to_msg_id:flags.0?int message:string random_id:long reply_markup:flags.2?ReplyMarkup entities:flags.3?Vector = Updates; messages.sendMedia#c8f16791 flags:# peer:InputPeer reply_to_msg_id:flags.0?int media:InputMedia random_id:long reply_markup:flags.2?ReplyMarkup = Updates; messages.forwardMessages#55e1728d peer:InputPeer id:Vector random_id:Vector = Updates; messages.getChats#3c6aa187 id:Vector = messages.Chats; @@ -703,20 +677,6 @@ photos.getUserPhotos#91cd32a8 user_id:InputUser offset:int max_id:long limit:int messages.forwardMessage#33963bf9 peer:InputPeer id:int random_id:long = Updates; messages.sendBroadcast#bf73f4da contacts:Vector random_id:Vector message:string media:InputMedia = Updates; - -geochats.getLocated#7f192d8f geo_point:InputGeoPoint radius:int limit:int = geochats.Located; -geochats.getRecents#e1427e6f offset:int limit:int = geochats.Messages; -geochats.checkin#55b3e8fb peer:InputGeoChat = geochats.StatedMessage; -geochats.getFullChat#6722dd6f peer:InputGeoChat = messages.ChatFull; -geochats.editChatTitle#4c8e2273 peer:InputGeoChat title:string address:string = geochats.StatedMessage; -geochats.editChatPhoto#35d81a95 peer:InputGeoChat photo:InputChatPhoto = geochats.StatedMessage; -geochats.search#cfcdc44d peer:InputGeoChat q:string filter:MessagesFilter min_date:int max_date:int offset:int max_id:int limit:int = geochats.Messages; -geochats.getHistory#b53f7a68 peer:InputGeoChat offset:int max_id:int limit:int = geochats.Messages; -geochats.setTyping#8b8a729 peer:InputGeoChat typing:Bool = Bool; -geochats.sendMessage#61b0044 peer:InputGeoChat message:string random_id:long = geochats.StatedMessage; -geochats.sendMedia#b8f0deff peer:InputGeoChat media:InputMedia random_id:long = geochats.StatedMessage; -geochats.createGeoChat#e092e16 title:string geo_point:InputGeoPoint address:string venue:string = geochats.StatedMessage; - messages.getDhConfig#26cf8950 version:int random_length:int = messages.DhConfig; messages.requestEncryption#f64daf43 user_id:InputUser random_id:int g_a:bytes = EncryptedChat; messages.acceptEncryption#3dbc0415 peer:InputEncryptedChat g_b:bytes key_fingerprint:long = EncryptedChat; diff --git a/Telegram/SourceFiles/overviewwidget.cpp b/Telegram/SourceFiles/overviewwidget.cpp index 951fb8911..51ff04353 100644 --- a/Telegram/SourceFiles/overviewwidget.cpp +++ b/Telegram/SourceFiles/overviewwidget.cpp @@ -1105,6 +1105,8 @@ void OverviewInner::paintEvent(QPaintEvent *e) { pix = page->photo->thumb->pixBlurredSingle(lnk->pixw, lnk->pixh, st::dlgPhotoSize, st::dlgPhotoSize); } p.drawPixmap(0, top, pix); + } else if (page && page->doc && !page->doc->thumb->isNull()) { + p.drawPixmap(0, top, page->doc->thumb->pixSingle(lnk->pixw, lnk->pixh, st::dlgPhotoSize, st::dlgPhotoSize)); } else { int32 index = lnk->letter.isEmpty() ? 0 : (lnk->letter.at(0).unicode() % 4); switch (index) { diff --git a/Telegram/SourceFiles/structs.cpp b/Telegram/SourceFiles/structs.cpp index 86885d11e..584b3314e 100644 --- a/Telegram/SourceFiles/structs.cpp +++ b/Telegram/SourceFiles/structs.cpp @@ -774,8 +774,8 @@ QString DocumentData::already(bool check) { return location.name; } -WebPageData::WebPageData(const WebPageId &id, WebPageType type, const QString &url, const QString &displayUrl, const QString &siteName, const QString &title, const QString &description, PhotoData *photo, int32 duration, const QString &author, int32 pendingTill) : -id(id), type(type), url(url), displayUrl(displayUrl), siteName(siteName), title(title), description(description), duration(duration), author(author), photo(photo), pendingTill(pendingTill) { +WebPageData::WebPageData(const WebPageId &id, WebPageType type, const QString &url, const QString &displayUrl, const QString &siteName, const QString &title, const QString &description, PhotoData *photo, DocumentData *doc, int32 duration, const QString &author, int32 pendingTill) : +id(id), type(type), url(url), displayUrl(displayUrl), siteName(siteName), title(title), description(description), duration(duration), author(author), photo(photo), doc(doc), pendingTill(pendingTill) { } void PeerLink::onClick(Qt::MouseButton button) const { diff --git a/Telegram/SourceFiles/structs.h b/Telegram/SourceFiles/structs.h index bbc1b41b3..32efe1053 100644 --- a/Telegram/SourceFiles/structs.h +++ b/Telegram/SourceFiles/structs.h @@ -548,6 +548,19 @@ struct DocumentData { if (sticker()) sticker()->img->forget(); replyPreview->forget(); } + ImagePtr makeReplyPreview() { + if (replyPreview->isNull() && !thumb->isNull()) { + if (thumb->loaded()) { + int w = thumb->width(), h = thumb->height(); + if (w <= 0) w = 1; + if (h <= 0) h = 1; + replyPreview = ImagePtr(w > h ? thumb->pix(w * st::msgReplyBarSize.height() / h, st::msgReplyBarSize.height()) : thumb->pix(st::msgReplyBarSize.height()), "PNG"); + } else { + thumb->load(); + } + } + return replyPreview; + } void save(const QString &toFile); @@ -687,7 +700,7 @@ inline WebPageType toWebPageType(const QString &type) { } struct WebPageData { - WebPageData(const WebPageId &id, WebPageType type = WebPageArticle, const QString &url = QString(), const QString &displayUrl = QString(), const QString &siteName = QString(), const QString &title = QString(), const QString &description = QString(), PhotoData *photo = 0, int32 duration = 0, const QString &author = QString(), int32 pendingTill = -1); + WebPageData(const WebPageId &id, WebPageType type = WebPageArticle, const QString &url = QString(), const QString &displayUrl = QString(), const QString &siteName = QString(), const QString &title = QString(), const QString &description = QString(), PhotoData *photo = 0, DocumentData *doc = 0, int32 duration = 0, const QString &author = QString(), int32 pendingTill = -1); void forget() { if (photo) photo->forget(); @@ -699,6 +712,7 @@ struct WebPageData { int32 duration; QString author; PhotoData *photo; + DocumentData *doc; int32 pendingTill; }; From d840ec37db8cceca90985bde799b8a0a0a911a79 Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 31 Aug 2015 17:27:20 +0300 Subject: [PATCH 113/121] preparing new dev version, date tooltip on timestamp hover, year marks in old day labels, new auth code / sms algo --- Telegram/Resources/lang.strings | 3 + Telegram/Resources/style.txt | 4 ++ Telegram/SourceFiles/gui/text.cpp | 22 +++++- Telegram/SourceFiles/history.cpp | 81 ++++++++++++++++++++--- Telegram/SourceFiles/historywidget.cpp | 26 +++++--- Telegram/SourceFiles/intro/intro.cpp | 10 +++ Telegram/SourceFiles/intro/intro.h | 4 +- Telegram/SourceFiles/intro/introcode.cpp | 73 +++++++++++++++++--- Telegram/SourceFiles/intro/introcode.h | 9 +++ Telegram/SourceFiles/intro/introphone.cpp | 3 +- Telegram/SourceFiles/lang.h | 8 ++- Telegram/SourceFiles/mainwidget.cpp | 1 + 12 files changed, 214 insertions(+), 30 deletions(-) diff --git a/Telegram/Resources/lang.strings b/Telegram/Resources/lang.strings index f6af33095..e34d4aa03 100644 --- a/Telegram/Resources/lang.strings +++ b/Telegram/Resources/lang.strings @@ -60,6 +60,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_weekday7_full" = "Sunday"; "lng_month_day" = "{month} {day}"; +"lng_month_day_year" = "{month} {day}, {year}"; "lng_cancel" = "Cancel"; "lng_continue" = "Continue"; @@ -117,6 +118,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_code_ph" = "Your code"; "lng_code_desc" = "We have sent you a message with activation\ncode to your phone. Please enter it below."; +"lng_code_telegram" = "Please enter the code you've just\nreceived in your previous [b]Telegram[/b] app."; +"lng_code_no_telegram" = "Send code via SMS"; "lng_code_call" = "Telegram will dial your number in {minutes}:{seconds}"; "lng_code_calling" = "Requesting a call from Telegram.."; "lng_code_called" = "Telegram dialed your number"; diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index 656a6e163..c258a78cf 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -340,6 +340,10 @@ introHeaderFont: font(24px); introHeaderSkip: 14px; introIconSkip: 54px; introFont: font(16px); +introLink: linkButton(btnDefLink) { + font: introFont; + overFont: font(16px underline); +} introColor: black; introLabel: flatLabel(labelDefFlat) { font: introFont; diff --git a/Telegram/SourceFiles/gui/text.cpp b/Telegram/SourceFiles/gui/text.cpp index 78c6f2523..83f24fb4c 100644 --- a/Telegram/SourceFiles/gui/text.cpp +++ b/Telegram/SourceFiles/gui/text.cpp @@ -542,7 +542,27 @@ public: flags(0), lnkIndex(0), stopAfterWidth(QFIXED_MAX) { - lnkRanges = links; + if ((options.flags & TextParseLinks) && !links.isEmpty()) { + bool parseMentions = (options.flags & TextParseMentions); + bool parseHashtags = (options.flags & TextParseHashtags); + bool parseBotCommands = (options.flags & TextParseBotCommands); + if (parseMentions && parseHashtags && parseBotCommands) { + lnkRanges = links; + } else { + int32 i = 0, l = links.size(); + lnkRanges.reserve(l); + const QChar *p = text.constData(), s = text.size(); + for (; i < l; ++i) { + LinkInTextType t = links.at(i).type; + if ((t == LinkInTextMention && !parseMentions) || + (t == LinkInTextHashtag && !parseHashtags) || + (t == LinkInTextBotCommand && !parseBotCommands)) { + continue; + } + lnkRanges.push_back(links.at(i)); + } + } + } parse(options); } void parse(const TextParseOptions &options) { diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 1361ad544..1388c2cee 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -2015,19 +2015,37 @@ void HistoryPhoto::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x return fwd->getForwardedState(lnk, state, x - st::mediaPadding.left(), width - st::mediaPadding.left() - st::mediaPadding.right()); } } - height -= st::mediaPadding.bottom(); + height -= skipy + st::mediaPadding.bottom(); width -= st::mediaPadding.left() + st::mediaPadding.right(); if (!_caption.isEmpty()) { + int32 dateX = skipx + width + st::msgDateDelta.x() - parent->timeWidth(true) + st::msgDateSpace; + int32 dateY = _height - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgDateFont->height; + bool inDate = QRect(dateX, dateY, parent->timeWidth(true) - st::msgDateSpace, st::msgDateFont->height).contains(x, y); + if (inDate) { + state = HistoryInDateCursorState; + } + height -= _caption.countHeight(width) + st::webPagePhotoSkip; - if (x >= skipx && y >= height + st::webPagePhotoSkip && x < skipx + width && y < _height) { + if (x >= skipx && y >= skipy + height + st::webPagePhotoSkip && x < skipx + width && y < _height) { bool inText = false; - _caption.getState(lnk, inText, x - skipx, y - height - st::webPagePhotoSkip, width); - state = inText ? HistoryInTextCursorState : HistoryDefaultCursorState; + _caption.getState(lnk, inText, x - skipx, y - skipy - height - st::webPagePhotoSkip, width); + state = inDate ? HistoryInDateCursorState : (inText ? HistoryInTextCursorState : HistoryDefaultCursorState); } } } - if (x >= skipx && y >= skipy && x < skipx + width && y < height) { + if (x >= skipx && y >= skipy && x < skipx + width && y < skipy + height) { lnk = openl; + if (_caption.isEmpty()) { + int32 dateX = skipx + width - parent->timeWidth(false) - st::msgDateImgDelta - st::msgDateImgPadding.x(); + int32 dateY = skipy + height - st::msgDateFont->height - st::msgDateImgDelta - st::msgDateImgPadding.y(); + if (parent->out()) { + dateX -= st::msgCheckRect.pxWidth() + st::msgDateImgCheckSpace; + } + bool inDate = QRect(dateX, dateY, parent->timeWidth(true) - st::msgDateSpace, st::msgDateFont->height).contains(x, y); + if (inDate) { + state = HistoryInDateCursorState; + } + } return; } } @@ -2422,6 +2440,13 @@ void HistoryVideo::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x } } + int32 dateX = width - st::msgPadding.right() + st::msgDateDelta.x() - parent->timeWidth(true) + st::msgDateSpace; + int32 dateY = _height - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgDateFont->height; + bool inDate = QRect(dateX, dateY, parent->timeWidth(true) - st::msgDateSpace, st::msgDateFont->height).contains(x, y); + if (inDate) { + state = HistoryInDateCursorState; + } + int32 tw = width - st::mediaPadding.left() - st::mediaPadding.right(); if (x >= st::mediaPadding.left() && y >= skipy + st::mediaPadding.top() && x < st::mediaPadding.left() + tw && y < skipy + st::mediaPadding.top() + st::mediaThumbSize && !data->loader && data->access) { lnk = _openl; @@ -2430,7 +2455,7 @@ void HistoryVideo::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x if (!_caption.isEmpty() && x >= st::mediaPadding.left() && x < st::mediaPadding.left() + tw && y >= skipy + st::mediaPadding.top() + st::mediaThumbSize + st::webPagePhotoSkip) { bool inText = false; _caption.getState(lnk, inText, x - st::mediaPadding.left(), y - skipy - st::mediaPadding.top() - st::mediaThumbSize - st::webPagePhotoSkip, tw); - state = inText ? HistoryInTextCursorState : HistoryDefaultCursorState; + state = inDate ? HistoryInDateCursorState : (inText ? HistoryInTextCursorState : HistoryDefaultCursorState); } } @@ -2918,6 +2943,14 @@ void HistoryAudio::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x if (x >= 0 && y >= skipy && x < width && y < _height && !data->loader && data->access) { lnk = _openl; + + int32 dateX = width - st::msgPadding.right() + st::msgDateDelta.x() - parent->timeWidth(true) + st::msgDateSpace; + int32 dateY = _height - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgDateFont->height; + bool inDate = QRect(dateX, dateY, parent->timeWidth(true) - st::msgDateSpace, st::msgDateFont->height).contains(x, y); + if (inDate) { + state = HistoryInDateCursorState; + } + return; } } @@ -3430,6 +3463,14 @@ void HistoryDocument::getState(TextLinkPtr &lnk, HistoryCursorState &state, int3 if (x >= 0 && y >= skipy && x < width && y < _height && !data->loader && data->access) { lnk = _openl; + + int32 dateX = width - st::msgPadding.right() + st::msgDateDelta.x() - parent->timeWidth(true) + st::msgDateSpace; + int32 dateY = _height - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgDateFont->height; + bool inDate = QRect(dateX, dateY, parent->timeWidth(true) - st::msgDateSpace, st::msgDateFont->height).contains(x, y); + if (inDate) { + state = HistoryInDateCursorState; + } + return; } } @@ -3602,6 +3643,10 @@ void HistorySticker::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 const HistoryReply *reply = toHistoryReply(parent); if (reply) { usew -= reply->replyToWidth(); + if (parent->out()) { + usex = width - usew; + } + int32 rw = width - usew, rh = st::msgReplyPadding.top() + st::msgReplyBarSize.height() + st::msgReplyPadding.bottom(); int32 rx = parent->out() ? 0 : usew, ry = _height - rh; if (x >= rx && y >= ry && x < rx + rw && y < ry + rh) { @@ -3609,6 +3654,15 @@ void HistorySticker::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 return; } } + int32 dateX = usex + usew - parent->timeWidth(false) - st::msgDateImgDelta - st::msgDateImgPadding.x(); + int32 dateY = _height - st::msgDateFont->height - st::msgDateImgDelta - st::msgDateImgPadding.y(); + if (parent->out()) { + dateX -= st::msgCheckRect.pxWidth() + st::msgDateImgCheckSpace; + } + bool inDate = QRect(dateX, dateY, parent->timeWidth(true) - st::msgDateSpace, st::msgDateFont->height).contains(x, y); + if (inDate) { + state = HistoryInDateCursorState; + } } HistoryMedia *HistorySticker::clone() const { @@ -5159,11 +5213,22 @@ void HistoryImageLink::getState(TextLinkPtr &lnk, HistoryCursorState &state, int return fwd->getForwardedState(lnk, state, x - st::mediaPadding.left(), width - st::mediaPadding.left() - st::mediaPadding.right()); } } - height -= st::mediaPadding.bottom(); + height -= skipy + st::mediaPadding.bottom(); width -= st::mediaPadding.left() + st::mediaPadding.right(); } - if (x >= skipx && y >= skipy && x < skipx + width && y < height && data) { + if (x >= skipx && y >= skipy && x < skipx + width && y < skipy + height && data) { lnk = link; + + int32 dateX = skipx + width - parent->timeWidth(false) - st::msgDateImgDelta - st::msgDateImgPadding.x(); + int32 dateY = skipy + height - st::msgDateFont->height - st::msgDateImgDelta - st::msgDateImgPadding.y(); + if (parent->out()) { + dateX -= st::msgCheckRect.pxWidth() + st::msgDateImgCheckSpace; + } + bool inDate = QRect(dateX, dateY, parent->timeWidth(true) - st::msgDateSpace, st::msgDateFont->height).contains(x, y); + if (inDate) { + state = HistoryInDateCursorState; + } + return; } } diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 94b74db1c..c44d7798c 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -559,10 +559,10 @@ void HistoryList::onDragExec() { QDrag *drag = new QDrag(App::wnd()); QMimeData *mimeData = new QMimeData; - if (dragSticker || dragByDate) { - mimeData->setData(qsl("application/x-td-forward-pressed"), "1"); - } else { + if (lnkPhoto || lnkVideo || lnkAudio || lnkDocument || lnkContact) { mimeData->setData(qsl("application/x-td-forward-pressed-link"), "1"); + } else { + mimeData->setData(qsl("application/x-td-forward-pressed"), "1"); } if (lnkDocument) { QString already = static_cast(textlnkDown().data())->document()->already(true); @@ -1346,7 +1346,6 @@ void HistoryList::onUpdateSelected() { if (_dragItem && _dragItem->detached()) { dragActionCancel(); } - linkTipTimer.start(1000); Qt::CursorShape cur = style::cur_default; HistoryCursorState cursorState = HistoryDefaultCursorState; @@ -1383,6 +1382,12 @@ void HistoryList::onUpdateSelected() { } } } + if (lnk || cursorState == HistoryInDateCursorState) { + linkTipTimer.start(1000); + } + if (_dragCursorState == HistoryInDateCursorState && cursorState != HistoryInDateCursorState) { + QToolTip::showText(_dragPos, QString(), App::wnd()); + } if (_dragAction == NoDrag) { _dragCursorState = cursorState; @@ -1546,6 +1551,10 @@ void HistoryList::showLinkTip() { TextLinkPtr lnk = textlnkOver(); if (lnk && !lnk->fullDisplayed()) { QToolTip::showText(_dragPos, lnk->readable(), App::wnd()); + } else if (_dragCursorState == HistoryInDateCursorState && _dragAction == NoDrag) { + if (App::hoveredItem()) { + QToolTip::showText(_dragPos, App::hoveredItem()->date.toString(QLocale::system().dateTimeFormat(QLocale::LongFormat)), App::wnd()); + } } } @@ -3416,7 +3425,7 @@ void HistoryWidget::shareContact(const PeerId &peer, const QString &phone, const fastShowAtEnd(h); PeerData *p = App::peer(peer); - int32 flags = newMessageFlags(p); // unread, out + int32 flags = newMessageFlags(p) | MTPDmessage::flag_media; // unread, out bool lastKeyboardUsed = lastForceReplyReplied(replyTo); @@ -4296,14 +4305,15 @@ void HistoryWidget::confirmSendImage(const ReadyLocalMedia &img) { fastShowAtEnd(h); - int32 flags = newMessageFlags(h->peer); // unread, out + int32 flags = newMessageFlags(h->peer) | MTPDmessage::flag_media; // unread, out if (img.replyTo) flags |= MTPDmessage::flag_reply_to_msg_id; if (img.type == ToPreparePhoto) { h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(img.peer), MTPint(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaPhoto(img.photo, MTP_string("")), MTPnullMarkup, MTPnullEntities)); } else if (img.type == ToPrepareDocument) { h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(img.peer), MTPint(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaDocument(img.document), MTPnullMarkup, MTPnullEntities)); } else if (img.type == ToPrepareAudio) { - h->addToBack(MTP_message(MTP_int(flags | MTPDmessage_flag_media_unread), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(img.peer), MTPint(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaAudio(img.audio), MTPnullMarkup, MTPnullEntities)); + flags |= MTPDmessage_flag_media_unread; + h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(img.peer), MTPint(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaAudio(img.audio), MTPnullMarkup, MTPnullEntities)); } if (_peer && img.peer == _peer->id) { @@ -4902,7 +4912,7 @@ void HistoryWidget::onStickerSend(DocumentData *sticker) { bool lastKeyboardUsed = lastForceReplyReplied(); bool out = (_peer->input.type() != mtpc_inputPeerSelf), unread = (_peer->input.type() != mtpc_inputPeerSelf); - int32 flags = newMessageFlags(_peer); // unread, out + int32 flags = newMessageFlags(_peer) | MTPDmessage::flag_media; // unread, out int32 sendFlags = 0; if (replyToId()) { flags |= MTPDmessage::flag_reply_to_msg_id; diff --git a/Telegram/SourceFiles/intro/intro.cpp b/Telegram/SourceFiles/intro/intro.cpp index b1bd08aab..c71a7d5d7 100644 --- a/Telegram/SourceFiles/intro/intro.cpp +++ b/Telegram/SourceFiles/intro/intro.cpp @@ -65,6 +65,7 @@ visibilityChanging(0), _callTimeout(60), _registered(false), _hasRecovery(false), +_codeByTelegram(false), _back(this, st::setClose), _backFrom(0), _backTo(0) { setGeometry(QRect(0, st::titleHeight, wnd->width(), wnd->height() - st::titleHeight)); @@ -335,6 +336,11 @@ void IntroWidget::setPwdHint(const QString &hint) { _pwdHint = hint; } +void IntroWidget::setCodeByTelegram(bool byTelegram) { + _codeByTelegram = byTelegram; + if (code) code->updateDescText(); +} + void IntroWidget::setCallTimeout(int32 callTimeout) { _callTimeout = callTimeout; } @@ -367,6 +373,10 @@ const QString &IntroWidget::getPwdHint() const { return _pwdHint; } +bool IntroWidget::codeByTelegram() const { + return _codeByTelegram; +} + void IntroWidget::resizeEvent(QResizeEvent *e) { QRect r(innerRect()); if (steps) steps->setGeometry(r); diff --git a/Telegram/SourceFiles/intro/intro.h b/Telegram/SourceFiles/intro/intro.h index dd59066a5..af7f11d0f 100644 --- a/Telegram/SourceFiles/intro/intro.h +++ b/Telegram/SourceFiles/intro/intro.h @@ -52,6 +52,7 @@ public: void setPwdSalt(const QByteArray &salt); void setHasRecovery(bool hasRecovery); void setPwdHint(const QString &hint); + void setCodeByTelegram(bool byTelegram); const QString &getPhone() const; const QString &getPhoneHash() const; @@ -60,6 +61,7 @@ public: const QByteArray &getPwdSalt() const; bool getHasRecovery() const; const QString &getPwdHint() const; + bool codeByTelegram() const; void finish(const MTPUser &user, const QImage &photo = QImage()); @@ -114,7 +116,7 @@ private: QString _code; QByteArray _pwdSalt; - bool _hasRecovery; + bool _hasRecovery, _codeByTelegram; QString _pwdHint; QString _firstname, _lastname; diff --git a/Telegram/SourceFiles/intro/introcode.cpp b/Telegram/SourceFiles/intro/introcode.cpp index b9dc0bf57..9b8848b88 100644 --- a/Telegram/SourceFiles/intro/introcode.cpp +++ b/Telegram/SourceFiles/intro/introcode.cpp @@ -69,6 +69,9 @@ void CodeInput::correctValue(QKeyEvent *e, const QString &was) { IntroCode::IntroCode(IntroWidget *parent) : IntroStage(parent), errorAlpha(0), next(this, lang(lng_intro_next), st::btnIntroNext), + _desc(st::introTextSize.width()), + _noTelegramCode(this, lang(lng_code_no_telegram), st::introLink), + _noTelegramCodeRequestId(0), code(this, st::inpIntroCode, lang(lng_code_ph)), waitTillCall(intro()->getCallTimeout()) { setVisible(false); setGeometry(parent->innerRect()); @@ -78,6 +81,24 @@ IntroCode::IntroCode(IntroWidget *parent) : IntroStage(parent), errorAlpha(0), connect(&code, SIGNAL(changed()), this, SLOT(onInputChange())); connect(&callTimer, SIGNAL(timeout()), this, SLOT(onSendCall())); connect(&checkRequest, SIGNAL(timeout()), this, SLOT(onCheckRequest())); + connect(&_noTelegramCode, SIGNAL(clicked()), this, SLOT(onNoTelegramCode())); + + updateDescText(); +} + +void IntroCode::updateDescText() { + _desc.setRichText(st::introFont, lang(intro()->codeByTelegram() ? lng_code_telegram : lng_code_desc)); + if (intro()->codeByTelegram()) { + _noTelegramCode.show(); + callTimer.stop(); + } else { + _noTelegramCode.hide(); + waitTillCall = intro()->getCallTimeout(); + if (!callTimer.isActive()) { + callTimer.start(1000); + } + } + update(); } void IntroCode::paintEvent(QPaintEvent *e) { @@ -87,21 +108,25 @@ void IntroCode::paintEvent(QPaintEvent *e) { if (!trivial) { p.setClipRect(e->rect()); } + bool codeByTelegram = intro()->codeByTelegram(); if (trivial || e->rect().intersects(textRect)) { p.setFont(st::introHeaderFont->f); p.drawText(textRect, intro()->getPhone(), style::al_top); p.setFont(st::introFont->f); - p.drawText(textRect, lang(lng_code_desc), style::al_bottom); + _desc.draw(p, textRect.x(), textRect.y() + textRect.height() - 2 * st::introFont->height, textRect.width(), style::al_top); } - QString callText = lang(lng_code_calling); - if (waitTillCall >= 3600) { - callText = lng_code_call(lt_minutes, qsl("%1:%2").arg(waitTillCall / 3600).arg((waitTillCall / 60) % 60, 2, 10, QChar('0')), lt_seconds, qsl("%1").arg(waitTillCall % 60, 2, 10, QChar('0'))); - } else if (waitTillCall > 0) { - callText = lng_code_call(lt_minutes, QString::number(waitTillCall / 60), lt_seconds, qsl("%1").arg(waitTillCall % 60, 2, 10, QChar('0'))); - } else if (waitTillCall < 0) { - callText = lang(lng_code_called); + if (codeByTelegram) { + } else { + QString callText = lang(lng_code_calling); + if (waitTillCall >= 3600) { + callText = lng_code_call(lt_minutes, qsl("%1:%2").arg(waitTillCall / 3600).arg((waitTillCall / 60) % 60, 2, 10, QChar('0')), lt_seconds, qsl("%1").arg(waitTillCall % 60, 2, 10, QChar('0'))); + } else if (waitTillCall > 0) { + callText = lng_code_call(lt_minutes, QString::number(waitTillCall / 60), lt_seconds, qsl("%1").arg(waitTillCall % 60, 2, 10, QChar('0'))); + } else if (waitTillCall < 0) { + callText = lang(lng_code_called); + } + p.drawText(QRect(textRect.left(), code.y() + code.height() + st::introCallSkip, st::introTextSize.width(), st::introErrHeight), callText, style::al_center); } - p.drawText(QRect(textRect.left(), code.y() + code.height() + st::introCallSkip, st::introTextSize.width(), st::introErrHeight), callText, style::al_center); if (animating() || error.length()) { p.setOpacity(errorAlpha.current()); p.setFont(st::introErrFont->f); @@ -116,6 +141,7 @@ void IntroCode::resizeEvent(QResizeEvent *e) { code.move((width() - code.width()) / 2, st::introTextTop + st::introTextSize.height() + st::introCountry.top); } textRect = QRect((width() - st::introTextSize.width()) / 2, st::introTextTop, st::introTextSize.width(), st::introTextSize.height()); + _noTelegramCode.move(textRect.left() + (st::introTextSize.width() - _noTelegramCode.width()) / 2, code.y() + code.height() + st::introCallSkip + (st::introErrHeight - _noTelegramCode.height()) / 2); } void IntroCode::showError(const QString &err) { @@ -150,7 +176,9 @@ bool IntroCode::animStep(float64 ms) { void IntroCode::activate() { waitTillCall = intro()->getCallTimeout(); - callTimer.start(1000); + if (!intro()->codeByTelegram()) { + callTimer.start(1000); + } error = ""; errorAlpha = anim::fvalue(0); sentCode = QString(); @@ -300,6 +328,31 @@ void IntroCode::onSubmitCode(bool force) { sentRequest = MTP::send(MTPauth_SignIn(MTP_string(intro()->getPhone()), MTP_string(intro()->getPhoneHash()), MTP_string(sentCode)), rpcDone(&IntroCode::codeSubmitDone), rpcFail(&IntroCode::codeSubmitFail)); } +void IntroCode::onNoTelegramCode() { + if (_noTelegramCodeRequestId) return; + _noTelegramCodeRequestId = MTP::send(MTPauth_SendSms(MTP_string(intro()->getPhone()), MTP_string(intro()->getPhoneHash())), rpcDone(&IntroCode::noTelegramCodeDone), rpcFail(&IntroCode::noTelegramCodeFail)); +} + +void IntroCode::noTelegramCodeDone(const MTPBool &result) { + intro()->setCodeByTelegram(false); + updateDescText(); +} + +bool IntroCode::noTelegramCodeFail(const RPCError &error) { + if (error.type().startsWith(qsl("FLOOD_WAIT_"))) { + showError(lang(lng_flood_error)); + code.setFocus(); + return true; + } + if (cDebug()) { // internal server error + showError(error.type() + ": " + error.description()); + } else { + showError(lang(lng_server_error)); + } + code.setFocus(); + return false; +} + void IntroCode::onNext() { onSubmitCode(); } diff --git a/Telegram/SourceFiles/intro/introcode.h b/Telegram/SourceFiles/intro/introcode.h index 6e44aa827..b171d0574 100644 --- a/Telegram/SourceFiles/intro/introcode.h +++ b/Telegram/SourceFiles/intro/introcode.h @@ -64,9 +64,12 @@ public: void codeSubmitDone(const MTPauth_Authorization &result); bool codeSubmitFail(const RPCError &error); + void updateDescText(); + public slots: void onSubmitCode(bool force = false); + void onNoTelegramCode(); void onInputChange(); void onSendCall(); void onCheckRequest(); @@ -84,8 +87,14 @@ private: FlatButton next; + Text _desc; + LinkButton _noTelegramCode; + mtpRequestId _noTelegramCodeRequestId; QRect textRect; + void noTelegramCodeDone(const MTPBool &result); + bool noTelegramCodeFail(const RPCError &result); + CodeInput code; QString sentCode; mtpRequestId sentRequest; diff --git a/Telegram/SourceFiles/intro/introphone.cpp b/Telegram/SourceFiles/intro/introphone.cpp index 7c968bb3d..9c1196067 100644 --- a/Telegram/SourceFiles/intro/introphone.cpp +++ b/Telegram/SourceFiles/intro/introphone.cpp @@ -231,7 +231,7 @@ void IntroPhone::phoneCheckDone(const MTPauth_CheckedPhone &result) { checkRequest.start(1000); - sentRequest = MTP::send(MTPauth_SendCode(MTP_string(sentPhone), MTP_int(0), MTP_int(ApiId), MTP_string(ApiHash), MTP_string(Application::language())), rpcDone(&IntroPhone::phoneSubmitDone), rpcFail(&IntroPhone::phoneSubmitFail)); + sentRequest = MTP::send(MTPauth_SendCode(MTP_string(sentPhone), MTP_int(5), MTP_int(ApiId), MTP_string(ApiHash), MTP_string(Application::language())), rpcDone(&IntroPhone::phoneSubmitDone), rpcFail(&IntroPhone::phoneSubmitFail)); } else { showError(lang(lng_bad_phone_noreg), true); enableAll(true); @@ -250,6 +250,7 @@ void IntroPhone::phoneSubmitDone(const MTPauth_SentCode &result) { const MTPDauth_sentAppCode &d(result.c_auth_sentAppCode()); intro()->setPhone(sentPhone, d.vphone_code_hash.c_string().v.c_str(), d.vphone_registered.v); intro()->setCallTimeout(d.vsend_call_timeout.v); + intro()->setCodeByTelegram(true); } intro()->onIntroNext(); } diff --git a/Telegram/SourceFiles/lang.h b/Telegram/SourceFiles/lang.h index 7cb0fea1d..e99c42dca 100644 --- a/Telegram/SourceFiles/lang.h +++ b/Telegram/SourceFiles/lang.h @@ -78,7 +78,13 @@ LangString langCounted(ushort key0, ushort tag, float64 value); const char *langKeyName(LangKey key); inline LangString langDayOfMonth(const QDate &date) { - int32 month = date.month(), day = date.day(); + QDate c(QDate::currentDate()); + int32 month = date.month(), day = date.day(), year = date.year(), cyear = c.year(), cmonth = c.month(); + if (year != cyear) { + if (year > cyear + 1 || cyear > year + 1 || (year == cyear + 1 && month + 12 > cmonth + 3) || (cyear == year + 1 && cmonth + 12 > month + 3)) { + return (month > 0 && month <= 12) ? lng_month_day_year(lt_month, lang(LangKey(lng_month1 + month - 1)), lt_day, QString::number(day), lt_year, QString::number(year)) : qsl("MONTH_ERR"); + } + } return (month > 0 && month <= 12) ? lng_month_day(lt_month, lang(LangKey(lng_month1 + month - 1)), lt_day, QString::number(day)) : qsl("MONTH_ERR"); } diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 55b6d43e6..43884eeaa 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -1064,6 +1064,7 @@ void MainWidget::sendPreparedText(History *hist, const QString &text, MsgId repl } else if (webPageId) { WebPageData *page = App::webPage(webPageId); media = MTP_messageMediaWebPage(MTP_webPagePending(MTP_long(page->id), MTP_int(page->pendingTill))); + flags |= MTPDmessage::flag_media; } MTPVector localEntities = linksToMTP(textParseLinks(sendingText, itemTextParseOptions(hist, App::self()).flags)); hist->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(hist->peer->id), MTPint(), MTPint(), MTP_int(replyTo), MTP_int(unixtime()), msgText, media, MTPnullMarkup, localEntities)); From 3fe8b28a029d9712bdc1285353a889f9055a5aef Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 31 Aug 2015 18:03:25 +0300 Subject: [PATCH 114/121] langs updated --- Telegram/Resources/lang.strings | 2 +- Telegram/SourceFiles/langs/lang_de.strings | 6 +++++- Telegram/SourceFiles/langs/lang_es.strings | 6 +++++- Telegram/SourceFiles/langs/lang_it.strings | 20 +++++++++++-------- Telegram/SourceFiles/langs/lang_ko.strings | 6 +++++- Telegram/SourceFiles/langs/lang_nl.strings | 6 +++++- Telegram/SourceFiles/langs/lang_pt_BR.strings | 12 +++++++---- Telegram/UpdateLang.sh | 8 +++++--- 8 files changed, 46 insertions(+), 20 deletions(-) diff --git a/Telegram/Resources/lang.strings b/Telegram/Resources/lang.strings index f6af33095..be6be9d45 100644 --- a/Telegram/Resources/lang.strings +++ b/Telegram/Resources/lang.strings @@ -645,7 +645,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop was updated to version {version}\n\n{changes}\n\nFull version history is available here:\n{link}"; "lng_new_version_minor" = "— Bug fixes and other minor improvements"; -"lng_new_version_text" = "— Block users from their profile page\n— Added support for Windows toast notifications\n— Fixed input methods on Linux (Fcitx and IBus)"; +"lng_new_version_text" = "— Include muted chats in unread count in Settings\n— Shared links overview and search in shared media\n— Preview when sending links to GIF animations and PDF files"; "lng_menu_insert_unicode" = "Insert Unicode control character"; diff --git a/Telegram/SourceFiles/langs/lang_de.strings b/Telegram/SourceFiles/langs/lang_de.strings index 8b9ee477f..713c6e036 100644 --- a/Telegram/SourceFiles/langs/lang_de.strings +++ b/Telegram/SourceFiles/langs/lang_de.strings @@ -188,6 +188,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_show_preview" = "Nachrichtenvorschau anzeigen"; "lng_settings_use_windows" = "Windows Benachrichtigungen"; "lng_settings_sound_notify" = "Ton abspielen"; +"lng_settings_include_muted" = "Stummgeschaltete Chats mitzählen"; "lng_notification_preview" = "Du hast eine neue Nachricht"; @@ -386,6 +387,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_files_header" = "Dateiübersicht"; "lng_profile_audios" = "{count:_not_used_|# Sprachnachricht|# Sprachnachrichten} »"; "lng_profile_audios_header" = "Übersicht Sprachnachrichten"; +"lng_profile_shared_links" = "{count:_not_used_|# Link|# Links} »"; +"lng_profile_shared_links_header" = "Linkübersicht"; "lng_profile_audio_files_header" = "Wiedergabeliste"; "lng_profile_show_all_types" = "Alle Filter anzeigen"; "lng_profile_copy_phone" = "Telefonnummer kopieren"; @@ -443,6 +446,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_media_type_videos" = "Videos"; "lng_media_type_files" = "Dateien"; "lng_media_type_audios" = "Sprachnachrichten"; +"lng_media_type_links" = "Links"; "lng_media_open_with" = "Öffnen mit"; "lng_media_download" = "Download"; @@ -641,7 +645,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop wurde aktualisiert auf Version {version}\n\n{changes}\n\nGesamter Versionsverlauf:\n{link}"; "lng_new_version_minor" = "— Fehlerbehebungen und Softwareoptimierungen"; -"lng_new_version_text" = "— Blockiere Nutzer über die Profilseite (im Chat auf den Namen oben tippen)\n— Windows 8, 8.1 und 10: Native Windowsbenachrichtigungen\n— Fehlerbehebung: Eingabemethoden unter Linux (Fcitx und iBus)"; +"lng_new_version_text" = "— Stummgeschaltete Chats können ab sofort optional mitgezählt werden (Einstellungen > Stummgeschaltete Chats mitzählen)\n— Übersicht der im Chat geteilten Links im Bereich 'Geteilte Medien'\n— GIF-Vorschau und PDF-Vorschau von Direktlinks (.pdf und .gif)"; "lng_menu_insert_unicode" = "Unicode-Steuerzeichen einfügen"; diff --git a/Telegram/SourceFiles/langs/lang_es.strings b/Telegram/SourceFiles/langs/lang_es.strings index 121130a6d..a8a8364ae 100644 --- a/Telegram/SourceFiles/langs/lang_es.strings +++ b/Telegram/SourceFiles/langs/lang_es.strings @@ -188,6 +188,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_show_preview" = "Mostrar la vista previa del mensaje"; "lng_settings_use_windows" = "Usar notificaciones de Windows"; "lng_settings_sound_notify" = "Reproducir sonido"; +"lng_settings_include_muted" = "Incluir los chats silenciados en el conteo de 'no leídos'"; "lng_notification_preview" = "Tienes un nuevo mensaje"; @@ -386,6 +387,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_files_header" = "Archivos"; "lng_profile_audios" = "{count:_not_used_|# mensaje de voz|# mensajes de voz} »"; "lng_profile_audios_header" = "Mensajes de voz"; +"lng_profile_shared_links" = "{count:_not_used_|# enlace|# enlaces} »"; +"lng_profile_shared_links_header" = "Enlaces"; "lng_profile_audio_files_header" = "Lista de reproducción"; "lng_profile_show_all_types" = "Mostrar todos los tipos"; "lng_profile_copy_phone" = "Copiar número"; @@ -443,6 +446,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_media_type_videos" = "Vídeos"; "lng_media_type_files" = "Archivos"; "lng_media_type_audios" = "Mensajes de voz"; +"lng_media_type_links" = "Enlaces"; "lng_media_open_with" = "Abrir con"; "lng_media_download" = "Descargar"; @@ -641,7 +645,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop fue actualizada a la versión {version}\n\n{changes}\n\nEl historial completo está disponible aquí:\n{link}"; "lng_new_version_minor" = "— Corrección de errores y otras mejoras menores"; -"lng_new_version_text" = "— Bloquea usuarios desde sus perfiles\n— Añadido el soporte para notificaciones Windows toast\n— Arreglados los métodos de entrada en Linux (Fcitx e IBus)"; +"lng_new_version_text" = "— Incluye los chats silenciados en el conteo de 'no leídos', en Ajustes\n— Vista y búsqueda de los enlaces compartidos, en 'Todos los archivos'\n— Vista previa al enviar enlaces a GIF animados o archivos PDF"; "lng_menu_insert_unicode" = "Insertar caracteres de control Unicode"; diff --git a/Telegram/SourceFiles/langs/lang_it.strings b/Telegram/SourceFiles/langs/lang_it.strings index f053bb974..985785843 100644 --- a/Telegram/SourceFiles/langs/lang_it.strings +++ b/Telegram/SourceFiles/langs/lang_it.strings @@ -64,8 +64,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_cancel" = "Annulla"; "lng_continue" = "Continua"; "lng_close" = "Chiudi"; -"lng_connecting" = "Connessione..."; -"lng_reconnecting" = "Riconnessione {count:ora|in # s|in # s}..."; +"lng_connecting" = "Connetto..."; +"lng_reconnecting" = "Riconnetto {count:ora|in # s|in # s}..."; "lng_reconnecting_try_now" = "Prova ora"; "lng_status_service_notifications" = "notifiche di servizio"; @@ -86,7 +86,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_status_lastseen_date" = "ultimo accesso {date}"; "lng_status_lastseen_date_time" = "ultimo accesso {date} alle {time}"; "lng_status_online" = "in linea"; -"lng_status_connecting" = "connessione..."; +"lng_status_connecting" = "connetto..."; "lng_chat_status_unaccessible" = "gruppo non accessibile"; "lng_chat_status_members" = "{count:nessun membro|# membro|# membri}"; @@ -188,6 +188,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_show_preview" = "Mostra anteprima messaggio"; "lng_settings_use_windows" = "Usa le notifiche di Windows"; "lng_settings_sound_notify" = "Riproduci suono"; +"lng_settings_include_muted" = "Includi chat silenziate nel badge"; "lng_notification_preview" = "Hai un nuovo messaggio"; @@ -234,7 +235,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_download_path_clear" = "Elimina tutto"; "lng_download_path_header" = "Scegli il percorso di download"; "lng_download_path_default_radio" = "Cartella Telegram in «Download»"; -"lng_download_path_temp_radio" = "Cartella temporanea, pulita alla disconnessione"; +"lng_download_path_temp_radio" = "Cartella temporanea, pulita quando ti disconnetti"; "lng_download_path_dir_radio" = "Cartella personalizzata, pulita manualmente"; "lng_download_path_choose" = "Scegli il percorso di download"; "lng_sure_clear_downloads" = "Vuoi eliminare tutti i file scaricati nella cartella temporanea? Sarà fatto automaticamente alla disconnessione o alla disinstallazione del programma"; @@ -305,9 +306,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_cloud_password_is_same" = "La password non è stata cambiata"; "lng_connection_type" = "Tipo di connessione:"; -"lng_connection_auto_connecting" = "Default (connessione..)"; +"lng_connection_auto_connecting" = "Default (connetto..)"; "lng_connection_auto" = "Predefinito ({transport} in uso)"; -"lng_connection_proxy_connecting" = "Connessione tramite proxy.."; +"lng_connection_proxy_connecting" = "Connetto tramite proxy.."; "lng_connection_proxy" = "{transport} con proxy"; "lng_connection_header" = "Tipo di connessione"; "lng_connection_auto_rb" = "Auto (TCP se disponibile o HTTP)"; @@ -386,6 +387,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_files_header" = "Panoramica file"; "lng_profile_audios" = "{count:_not_used_|# nota vocale|# note vocali} »"; "lng_profile_audios_header" = "Panoramica note vocali"; +"lng_profile_shared_links" = "{count:_not_used_|# link condiviso|# link condivisi} »"; +"lng_profile_shared_links_header" = "Panoramica link condivisi"; "lng_profile_audio_files_header" = "Playlist"; "lng_profile_show_all_types" = "Mostra tutti i tipi"; "lng_profile_copy_phone" = "Copia numero di telefono"; @@ -397,7 +400,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_create_group_title" = "Nuovo gruppo"; "lng_failed_add_participant" = "Impossibile aggiungere l'utente. Riprova più tardi."; -"lng_failed_add_not_mutual" = "Se una persona lascia un gruppo,\nsolo un contatto in comune può reinvitarla\n(lei deve avere il tuo numero\ndi telefono, e tu il suo)."; +"lng_failed_add_not_mutual" = "Se una persona lascia un gruppo, solo\nun contatto in comune può reinvitarla\n(chi ti invita deve avere il tuo\ncontatto su Telegram, e viceversa)."; "lng_sure_delete_contact" = "Sicuro di volere eliminare {contact} dalla tua lista dei contatti?"; "lng_sure_delete_history" = "Sicuro di voler eliminare tutta la cronologia dei messaggi con {contact}?\n\nQuesta azione non può essere annullata."; @@ -443,6 +446,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_media_type_videos" = "Video"; "lng_media_type_files" = "File"; "lng_media_type_audios" = "Note vocali"; +"lng_media_type_links" = "Link condivisi"; "lng_media_open_with" = "Apri con"; "lng_media_download" = "Download"; @@ -641,7 +645,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop si è aggiornato alla versione {version}\n\n{changes}\n\nLa cronologia degli update è disponibile qui:\n{link}"; "lng_new_version_minor" = "— Bug fix e altri miglioramenti minori"; -"lng_new_version_text" = "— Blocca gli utenti dalla loro pagina profilo\n— Aggiunto il supporto per le notifiche toast di Windows\n— Risolti i problemi con alcuni metodi di input su Linux (Fcitx and IBus)"; +"lng_new_version_text" = "— Includi chat silenziate nel badge nelle Impostazioni\n— Panoramica dei link condivisi e ricerca nei media condivisi\n— Anteprima quando invii una GIF o un file PDF."; "lng_menu_insert_unicode" = "Inserisci carattere di controllo Unicode"; diff --git a/Telegram/SourceFiles/langs/lang_ko.strings b/Telegram/SourceFiles/langs/lang_ko.strings index 6807a4abe..edb4be160 100644 --- a/Telegram/SourceFiles/langs/lang_ko.strings +++ b/Telegram/SourceFiles/langs/lang_ko.strings @@ -188,6 +188,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_show_preview" = "메시지 미리보기"; "lng_settings_use_windows" = "윈도우 알림 사용"; "lng_settings_sound_notify" = "소리 재생"; +"lng_settings_include_muted" = "안 읽은 메시지에 음소거된 채팅방 포함"; "lng_notification_preview" = "새로운 메시지가 있습니다."; @@ -386,6 +387,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_files_header" = "파일 내역"; "lng_profile_audios" = "{count:_not_used_|#개의 음성 메시지|#개의 음성 메시지} »"; "lng_profile_audios_header" = "음성 메시지 내역"; +"lng_profile_shared_links" = "{count:_not_used_|# 공유된 링크|# 공유된 링크} »"; +"lng_profile_shared_links_header" = "공유된 링크 현황"; "lng_profile_audio_files_header" = "재생목록"; "lng_profile_show_all_types" = "모든 유형 보기"; "lng_profile_copy_phone" = "전화번호 복사"; @@ -443,6 +446,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_media_type_videos" = "비디오 파일"; "lng_media_type_files" = "파일"; "lng_media_type_audios" = "음성 메시지"; +"lng_media_type_links" = "공유된 링크"; "lng_media_open_with" = "다음으로 열기"; "lng_media_download" = "다운로드"; @@ -641,7 +645,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "텔레그램 데스크탑은 {version} 버전으로 업데이트 되었습니다.\n\n{changes}\n\n전체 버전 히스토리는 아래에서 확인 가능합니다:\n{link}"; "lng_new_version_minor" = "— 버그 수정 및 일부 기능 향상"; -"lng_new_version_text" = "— 프로필 화면에서 사용자 차단\n— 윈도우 알림 지원\n— 리눅스 입력 방법 수정 (Fcitx and IBus)"; +"lng_new_version_text" = "— 설정에서 안 읽은 메시지 수에 음소거된 채팅방 포함\n— 공유된 링크 현황과 공유된 미디어 검색 기능\n— GIF 링크 및 PDF 파일 전송시 프리뷰 기능"; "lng_menu_insert_unicode" = "유니코드 문자를 입력하세요."; diff --git a/Telegram/SourceFiles/langs/lang_nl.strings b/Telegram/SourceFiles/langs/lang_nl.strings index a4febb0f4..237e50fd7 100644 --- a/Telegram/SourceFiles/langs/lang_nl.strings +++ b/Telegram/SourceFiles/langs/lang_nl.strings @@ -188,6 +188,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_show_preview" = "Voorvertoning weergeven"; "lng_settings_use_windows" = "Windows-berichtgeving gebruiken"; "lng_settings_sound_notify" = "Geluiden afspelen"; +"lng_settings_include_muted" = "Stille chats meetellen in ongelezen"; "lng_notification_preview" = "Je hebt een nieuw bericht"; @@ -386,6 +387,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_files_header" = "Bestandsoverzicht"; "lng_profile_audios" = "{count:_not_used_|# spraakbericht|# spraakberichten} »"; "lng_profile_audios_header" = "Overzicht van spraakberichten"; +"lng_profile_shared_links" = "{count:_not_used_|# gedeelde link|# gedeelde links} »"; +"lng_profile_shared_links_header" = "Overzicht van gedeelde links"; "lng_profile_audio_files_header" = "Afspeellijst"; "lng_profile_show_all_types" = "Alles weergeven"; "lng_profile_copy_phone" = "Telefoonnummer kopiëren"; @@ -443,6 +446,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_media_type_videos" = "Video's"; "lng_media_type_files" = "Bestanden"; "lng_media_type_audios" = "Spraakberichten"; +"lng_media_type_links" = "Gedeelde links"; "lng_media_open_with" = "Openen met"; "lng_media_download" = "Downloaden"; @@ -641,7 +645,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram is bijgewerkt naar versie {version}\n\n{changes} \n\nVolledige versiegeschiedenis is hier te vinden:\n{link}"; "lng_new_version_minor" = "— Probleemoplossing en andere kleine verbeteringen"; -"lng_new_version_text" = "— Blokkeer gebruikers vanaf de profielpagina\n— Ondersteuning voor Windows toast-meldingen\n— Problemen met invoermethodes onder Linux (Fcitx and IBus) opgelost"; +"lng_new_version_text" = "— Stille chats meetellen in ongelezen teller via instellingen\n— Gedeelde links-overzicht en zoeken in gedeelde media\n— Voorvertoning voor links naar GIF-animaties en PDF-bestanden"; "lng_menu_insert_unicode" = "Unicode-besturingsteken invoegen"; diff --git a/Telegram/SourceFiles/langs/lang_pt_BR.strings b/Telegram/SourceFiles/langs/lang_pt_BR.strings index 89c481fe4..1a0a91080 100644 --- a/Telegram/SourceFiles/langs/lang_pt_BR.strings +++ b/Telegram/SourceFiles/langs/lang_pt_BR.strings @@ -188,6 +188,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_show_preview" = "Mostrar pré-visualização da mensagem"; "lng_settings_use_windows" = "Usar notificações do Windows"; "lng_settings_sound_notify" = "Tocar som"; +"lng_settings_include_muted" = "Incluir chats silenciados no contador de notificações"; "lng_notification_preview" = "Você tem uma nova mensagem"; @@ -380,12 +381,14 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_no_media" = "Nenhuma mídia nessa conversa."; "lng_profile_photos" = "{count:_not_used_|# foto|# fotos} »"; "lng_profile_photos_header" = "Fotos"; -"lng_profile_videos" = "{count:_not_used_|# arquivo de vídeo|# arquivo de vídeos} »"; +"lng_profile_videos" = "{count:_not_used_|# vídeo|# vídeos} »"; "lng_profile_videos_header" = "Vídeos"; "lng_profile_files" = "{count:_not_used_|# arquivo|# arquivos} »"; "lng_profile_files_header" = "Arquivos"; "lng_profile_audios" = "{count:_not_used_|# mensagem de voz|# mensagens de voz} »"; "lng_profile_audios_header" = "Mensagens de voz"; +"lng_profile_shared_links" = "{count:_not_used_|# link|# links} »"; +"lng_profile_shared_links_header" = "Links"; "lng_profile_audio_files_header" = "Reprodução"; "lng_profile_show_all_types" = "Mostrar todos os tipos"; "lng_profile_copy_phone" = "Copiar número de telefone"; @@ -440,14 +443,15 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_media_type" = "Tipo de mídia"; "lng_media_type_photos" = "Fotos"; -"lng_media_type_videos" = "Arquivos de vídeo"; +"lng_media_type_videos" = "Vídeos"; "lng_media_type_files" = "Arquivos"; "lng_media_type_audios" = "Mensagens de voz"; +"lng_media_type_links" = "Links"; "lng_media_open_with" = "Abrir Com"; "lng_media_download" = "Download"; "lng_media_cancel" = "Cancelar"; -"lng_media_video" = "Arquivo de vídeo"; +"lng_media_video" = "Vídeos"; "lng_media_audio" = "Mensagem de voz"; "lng_emoji_category0" = "Frequentemente usado"; @@ -641,7 +645,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop foi atualizado para a versão {version}\n\n{changes}\n\nHistórico completo de mudanças disponível aqui:\n{link}"; "lng_new_version_minor" = "— Resolução de bugs e outras menores melhorias"; -"lng_new_version_text" = "— Bloqueie usuários direto da página do perfil\n— Adicionado suporte às notificações de sistema do Windows\n— Consertado métodos de entrada no Linux (Fcitx e IBus)"; +"lng_new_version_text" = "— Incluir chats silenciados no contador de notificações em Configurações\n— Visão geral dos links compartilhados e busca nas mídias compartilhadas\n— Pré-visualização em links com GIF e arquivos em PDF"; "lng_menu_insert_unicode" = "Inserir caractere de controle Unicode"; diff --git a/Telegram/UpdateLang.sh b/Telegram/UpdateLang.sh index b0e114eee..5f9a11dad 100755 --- a/Telegram/UpdateLang.sh +++ b/Telegram/UpdateLang.sh @@ -2,9 +2,11 @@ cd ../../ tx pull -fa cd translations/telegram-desktop.langstrings/ for file in *.strings; do - iconv -f "UTF-16LE" -t "UTF-8" "$file" > "../../tdesktop/Telegram/SourceFiles/langs/lang_$file.tmp" - awk '{ if (NR==1) sub(/^\xef\xbb\xbf/,""); sub(/ /,""); print }' "../../tdesktop/Telegram/SourceFiles/langs/lang_$file.tmp" > "../../tdesktop/Telegram/SourceFiles/langs/lang_$file" - rm "../../tdesktop/Telegram/SourceFiles/langs/lang_$file.tmp" + if [ "$file" != "es_419.strings" ]; then + iconv -f "UTF-16LE" -t "UTF-8" "$file" > "../../tdesktop/Telegram/SourceFiles/langs/lang_$file.tmp" + awk '{ if (NR==1) sub(/^\xef\xbb\xbf/,""); sub(/ /,""); print }' "../../tdesktop/Telegram/SourceFiles/langs/lang_$file.tmp" > "../../tdesktop/Telegram/SourceFiles/langs/lang_$file" + rm "../../tdesktop/Telegram/SourceFiles/langs/lang_$file.tmp" + fi done cd ../../tdesktop/Telegram/ touch SourceFiles/telegram.qrc From 25b6740f913bbf461dd310d3271e010d8d147ebe Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 31 Aug 2015 18:05:57 +0300 Subject: [PATCH 115/121] version 0.8.54.dev prepared, two crash fixes --- Telegram/PrepareWin.bat | 8 ++++---- Telegram/SourceFiles/application.cpp | 4 ++-- Telegram/SourceFiles/config.h | 4 ++-- Telegram/SourceFiles/history.cpp | 2 +- Telegram/SourceFiles/pspecific_wnd.cpp | 3 --- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 ++++++------ Telegram/Version.sh | 2 +- 9 files changed, 17 insertions(+), 20 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index 3a4b7051c..96dd97f9b 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,10 +1,10 @@ @echo OFF set "AppVersionStrMajor=0.8" -set "AppVersion=8053" -set "AppVersionStrSmall=0.8.53" -set "AppVersionStr=0.8.53" -set "AppVersionStrFull=0.8.53.0" +set "AppVersion=8054" +set "AppVersionStrSmall=0.8.54" +set "AppVersionStr=0.8.54" +set "AppVersionStrFull=0.8.54.0" set "DevChannel=1" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index 4b736c5f5..a07696d53 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -673,8 +673,8 @@ void Application::checkMapVersion() { if (Local::oldMapVersion() < AppVersion) { if (Local::oldMapVersion()) { QString versionFeatures; - if (cDevVersion() && Local::oldMapVersion() < 8053) { - versionFeatures = QString::fromUtf8("\xe2\x80\x94 Include muted chats in unread count in Settings\n\xe2\x80\x94 Shared links overview and search in shared media");// .replace('@', qsl("@") + QChar(0x200D)); + if (cDevVersion() && Local::oldMapVersion() < 8054) { + versionFeatures = QString::fromUtf8("\xe2\x80\x94 Preview when sending links to GIF animations and PDF files\n\xe2\x80\x94 Full date and time shown when mouse over message timestamp");// .replace('@', qsl("@") + QChar(0x200D)); } else if (!cDevVersion() && Local::oldMapVersion() < 8052) { versionFeatures = lang(lng_new_version_minor).trimmed(); } diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 974c4127d..b2492e83a 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,8 +17,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8053; -static const wchar_t *AppVersionStr = L"0.8.53"; +static const int32 AppVersion = 8054; +static const wchar_t *AppVersionStr = L"0.8.54"; static const bool DevVersion = true; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 1388c2cee..e58301e7b 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -348,7 +348,7 @@ bool History::updateTyping(uint64 ms, uint32 dots, bool force) { ++i; } } - for (SendActionUsers::iterator i = sendActions.begin(), e = sendActions.end(); i != e;) { + for (SendActionUsers::iterator i = sendActions.begin(); i != sendActions.cend();) { if (ms >= i.value().until) { i = sendActions.erase(i); changed = true; diff --git a/Telegram/SourceFiles/pspecific_wnd.cpp b/Telegram/SourceFiles/pspecific_wnd.cpp index 76e48f978..3cba849fe 100644 --- a/Telegram/SourceFiles/pspecific_wnd.cpp +++ b/Telegram/SourceFiles/pspecific_wnd.cpp @@ -2809,9 +2809,6 @@ bool CreateToast(PeerData *peer, int32 msgId, bool showpix, const QString &title if (j != i->cend()) { toastNotifier->Hide(j->p.Get()); i->erase(j); - if (i->isEmpty()) { - toastNotifications.erase(i); - } } } hr = toastNotifier->Show(toast.Get()); diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index 7f3e9f0de..21b7a0cf4 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.53 + 0.8.54 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index 175bf43784430732ef122a4d7f08097a35163306..41823dcc2334b4ea61b066fe7fa61d553aba0e98 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_3 Date: Tue, 1 Sep 2015 16:50:56 +0300 Subject: [PATCH 116/121] fixed couple of crashes, webpage doc init, added tooltips to overview, fixed shared links empty url, langs updated for 0.8.55 stable version --- Telegram/SourceFiles/history.cpp | 41 +++++---- Telegram/SourceFiles/history.h | 2 +- Telegram/SourceFiles/historywidget.cpp | 40 +++++---- Telegram/SourceFiles/langs/lang_de.strings | 3 + Telegram/SourceFiles/langs/lang_es.strings | 3 + Telegram/SourceFiles/langs/lang_it.strings | 7 +- Telegram/SourceFiles/langs/lang_ko.strings | 3 + Telegram/SourceFiles/langs/lang_nl.strings | 3 + Telegram/SourceFiles/langs/lang_pt_BR.strings | 3 + Telegram/SourceFiles/mainwidget.cpp | 4 +- Telegram/SourceFiles/overviewwidget.cpp | 86 +++++++++++++++---- Telegram/SourceFiles/overviewwidget.h | 6 +- 12 files changed, 141 insertions(+), 60 deletions(-) diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index e58301e7b..ceaff4ed5 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -2441,7 +2441,7 @@ void HistoryVideo::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x } int32 dateX = width - st::msgPadding.right() + st::msgDateDelta.x() - parent->timeWidth(true) + st::msgDateSpace; - int32 dateY = _height - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgDateFont->height; + int32 dateY = height - st::msgPadding.bottom() + st::msgDateDelta.y() - st::msgDateFont->height; bool inDate = QRect(dateX, dateY, parent->timeWidth(true) - st::msgDateSpace, st::msgDateFont->height).contains(x, y); if (inDate) { state = HistoryInDateCursorState; @@ -3886,31 +3886,18 @@ void HistoryContact::updateFrom(const MTPMessageMedia &media) { HistoryWebPage::HistoryWebPage(WebPageData *data) : HistoryMedia() , data(data) -, _openl(data->url.isEmpty() ? 0 : new TextLink(data->url)) -, _attachl((data->photo && data->type != WebPageVideo) ? static_cast(new PhotoLink(data->photo)) : static_cast(data->doc ? new DocumentOpenLink(data->doc) : 0)) +, _openl(0) +, _attachl(0) , _asArticle(false) , _title(st::msgMinWidth - st::webPageLeft) , _description(st::msgMinWidth - st::webPageLeft) , _siteNameWidth(0) -, _docSize(data->doc ? (data->doc->song() ? formatDurationAndSizeText(data->doc->song()->duration, data->doc->size) : formatSizeText(data->doc->size)) : QString()) -, _docName(data->doc ? documentName(data->doc) : QString()) , _durationWidth(0) -, _docNameWidth(data->doc ? (st::mediaFont->m.width(_docName.isEmpty() ? qsl("Document") : _docName)) : 0) +, _docNameWidth(0) +, _docThumbWidth(0) , _docDownloadDone(0) , _pixw(0), _pixh(0) { - if (data->doc) { - data->doc->thumb->load(); - - int32 tw = data->doc->thumb->width(), th = data->doc->thumb->height(); - if (data->doc->thumb->isNull() || !tw || !th) { - _docThumbWidth = 0; - } else if (tw > th) { - _docThumbWidth = (tw * st::mediaThumbSize) / th; - } else { - _docThumbWidth = st::mediaThumbSize; - } - } } void HistoryWebPage::initDimensions(const HistoryItem *parent) { @@ -3924,6 +3911,7 @@ void HistoryWebPage::initDimensions(const HistoryItem *parent) { if (!_openl && !data->url.isEmpty()) _openl = TextLinkPtr(new TextLink(data->url)); if (!_attachl && data->photo && data->type != WebPageVideo) _attachl = TextLinkPtr(new PhotoLink(data->photo)); if (!_attachl && data->doc) _attachl = TextLinkPtr(new DocumentOpenLink(data->doc)); + if (data->photo && data->type != WebPagePhoto && data->type != WebPageVideo) { if (data->type == WebPageProfile) { _asArticle = true; @@ -3935,6 +3923,7 @@ void HistoryWebPage::initDimensions(const HistoryItem *parent) { } else { _asArticle = false; } + if (_asArticle) { w = st::webPagePhotoSize; _maxw = st::webPageLeft + st::webPagePhotoSize; @@ -3962,6 +3951,22 @@ void HistoryWebPage::initDimensions(const HistoryItem *parent) { _minh = qMax(thumbh, int32(st::minPhotoSize)); _minh += st::webPagePhotoSkip; } else if (data->doc) { + if (!data->doc->thumb->isNull()) { + data->doc->thumb->load(); + + int32 tw = data->doc->thumb->width(), th = data->doc->thumb->height(); + if (data->doc->thumb->isNull() || !tw || !th) { + _docThumbWidth = 0; + } else if (tw > th) { + _docThumbWidth = (tw * st::mediaThumbSize) / th; + } else { + _docThumbWidth = st::mediaThumbSize; + } + } + _docName = documentName(data->doc); + _docSize = data->doc->song() ? formatDurationAndSizeText(data->doc->song()->duration, data->doc->size) : formatSizeText(data->doc->size); + _docNameWidth = st::mediaFont->m.width(_docName.isEmpty() ? qsl("Document") : _docName); + if (parent == animated.msg) { _maxw = st::webPageLeft + (animated.w / cIntRetinaFactor()) + parent->timeWidth(true); _minh = animated.h / cIntRetinaFactor(); diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index d4a826a76..3795bb875 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -1181,7 +1181,7 @@ public: void unregItem(HistoryItem *item); bool hasReplyPreview() const { - return data->photo && !data->photo->thumb->isNull(); + return (data->photo && !data->photo->thumb->isNull()) || (data->doc && !data->doc->thumb->isNull()); } ImagePtr replyPreview(); diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index c44d7798c..614eb4d68 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -1372,7 +1372,7 @@ void HistoryList::onUpdateSelected() { } } textlnkOver(lnk); - QToolTip::showText(_dragPos, QString(), App::wnd()); + QToolTip::hideText(); App::hoveredLinkItem((lnk && !lnkInDesc) ? item : 0); if (textlnkOver()) { if (App::hoveredLinkItem()) { @@ -1386,7 +1386,7 @@ void HistoryList::onUpdateSelected() { linkTipTimer.start(1000); } if (_dragCursorState == HistoryInDateCursorState && cursorState != HistoryInDateCursorState) { - QToolTip::showText(_dragPos, QString(), App::wnd()); + QToolTip::hideText(); } if (_dragAction == NoDrag) { @@ -1549,11 +1549,14 @@ void HistoryList::applyDragSelection(SelectedItems *toItems) const { void HistoryList::showLinkTip() { TextLinkPtr lnk = textlnkOver(); + int32 dd = QApplication::startDragDistance(); + QPoint dp(mapFromGlobal(_dragPos)); + QRect r(dp.x() - dd, dp.y() - dd, 2 * dd, 2 * dd); if (lnk && !lnk->fullDisplayed()) { - QToolTip::showText(_dragPos, lnk->readable(), App::wnd()); + QToolTip::showText(_dragPos, lnk->readable(), this, r); } else if (_dragCursorState == HistoryInDateCursorState && _dragAction == NoDrag) { if (App::hoveredItem()) { - QToolTip::showText(_dragPos, App::hoveredItem()->date.toString(QLocale::system().dateTimeFormat(QLocale::LongFormat)), App::wnd()); + QToolTip::showText(_dragPos, App::hoveredItem()->date.toString(QLocale::system().dateTimeFormat(QLocale::LongFormat)), this, r); } } } @@ -1882,7 +1885,10 @@ void BotKeyboard::showCommandTip() { if (_sel >= 0) { int row = (_sel / MatrixRowShift), col = _sel % MatrixRowShift; if (!_btns.at(row).at(col).full) { - QToolTip::showText(_lastMousePos, _btns.at(row).at(col).cmd); + int32 dd = QApplication::startDragDistance(); + QPoint dp(mapFromGlobal(_lastMousePos)); + QRect r(dp.x() - dd, dp.y() - dd, 2 * dd, 2 * dd); + QToolTip::showText(_lastMousePos, _btns.at(row).at(col).cmd, this, r); } } } @@ -1908,7 +1914,7 @@ void BotKeyboard::updateSelected() { if (newSel >= 0) break; } if (newSel != _sel) { - QToolTip::showText(_lastMousePos, QString(), App::wnd()); + QToolTip::hideText(); if (newSel < 0) { setCursor(style::cur_default); } else if (_sel < 0) { @@ -2721,19 +2727,17 @@ void HistoryWidget::showPeerHistory(const PeerId &peerId, MsgId showAtMsgId) { bool canShowNow = _history->isReadyFor(showAtMsgId, true); if (!canShowNow) { delayedShowAt(showAtMsgId); - return; + } else { + clearDelayedShowAt(); + if (_replyReturn && _replyReturn->id == showAtMsgId) { + calcNextReplyReturn(); + } + + _showAtMsgId = showAtMsgId; + _histInited = false; + + historyLoaded(); } - - clearDelayedShowAt(); - if (_replyReturn && _replyReturn->id == showAtMsgId) { - calcNextReplyReturn(); - } - - _showAtMsgId = showAtMsgId; - _histInited = false; - - historyLoaded(); - emit peerShown(_peer); App::main()->topBar()->update(); update(); diff --git a/Telegram/SourceFiles/langs/lang_de.strings b/Telegram/SourceFiles/langs/lang_de.strings index 713c6e036..2bfd27567 100644 --- a/Telegram/SourceFiles/langs/lang_de.strings +++ b/Telegram/SourceFiles/langs/lang_de.strings @@ -60,6 +60,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_weekday7_full" = "Sonntag"; "lng_month_day" = "{day}. {month}"; +"lng_month_day_year" = "{day} {month}, {year}"; "lng_cancel" = "Abbrechen"; "lng_continue" = "Weiter"; @@ -117,6 +118,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_code_ph" = "Dein Code"; "lng_code_desc" = "Wir haben dir einen Aktivierungscode gesendet.\nBitte Code hier eingeben."; +"lng_code_telegram" = "Bitte den Code eingeben, den du in der\nzuvor benutzen [b]Telegram[/b]-App erhalten hast."; +"lng_code_no_telegram" = "Code per SMS senden"; "lng_code_call" = "Telegram ruft dich an in {minutes}:{seconds}"; "lng_code_calling" = "Telegram ruft dich an.."; "lng_code_called" = "Telegram ruft dich gerade an."; diff --git a/Telegram/SourceFiles/langs/lang_es.strings b/Telegram/SourceFiles/langs/lang_es.strings index a8a8364ae..47e93f526 100644 --- a/Telegram/SourceFiles/langs/lang_es.strings +++ b/Telegram/SourceFiles/langs/lang_es.strings @@ -60,6 +60,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_weekday7_full" = "domingo"; "lng_month_day" = "{day} de {month}"; +"lng_month_day_year" = "{day} de {month} de {year}"; "lng_cancel" = "Cancelar"; "lng_continue" = "Continuar"; @@ -117,6 +118,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_code_ph" = "Tu código"; "lng_code_desc" = "Hemos enviado un mensaje con un código de \nactivación a tu teléfono. Por favor, ponlo abajo."; +"lng_code_telegram" = "Por favor, pon el código que acabas\nde recibir en tu otra aplicación de [b]Telegram[/b]."; +"lng_code_no_telegram" = "Enviar el código vía SMS"; "lng_code_call" = "Telegram marcará tu número en {minutes}:{seconds}"; "lng_code_calling" = "Solicitando una llamada de Telegram..."; "lng_code_called" = "Telegram marcó tu número"; diff --git a/Telegram/SourceFiles/langs/lang_it.strings b/Telegram/SourceFiles/langs/lang_it.strings index 985785843..dfa4eff43 100644 --- a/Telegram/SourceFiles/langs/lang_it.strings +++ b/Telegram/SourceFiles/langs/lang_it.strings @@ -60,6 +60,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_weekday7_full" = "Domenica"; "lng_month_day" = "{day} {month}"; +"lng_month_day_year" = "{day} {month} {year}"; "lng_cancel" = "Annulla"; "lng_continue" = "Continua"; @@ -117,6 +118,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_code_ph" = "Codice"; "lng_code_desc" = "Abbiamo inviato un messaggio col codice\ndi attivazione al tuo telefono. Inseriscilo qui"; +"lng_code_telegram" = "Per favore inserisci il codice che hai\nappena ricevuto nell'altra app di [b]Telegram[/b]."; +"lng_code_no_telegram" = "Invia codice tramite SMS"; "lng_code_call" = "Telegram ti chiamerà tra {minutes}:{seconds}"; "lng_code_calling" = "Richiedendo una telefonata da Telegram.."; "lng_code_called" = "Telegram ti ha chiamato"; @@ -199,7 +202,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_auto_update" = "Aggiorna automaticamente"; "lng_settings_current_version" = "Versione {version}"; "lng_settings_check_now" = "Cerca aggiornamenti"; -"lng_settings_update_checking" = "Ricerca aggiornamenti.."; +"lng_settings_update_checking" = "Cerco aggiornamenti.."; "lng_settings_latest_installed" = "L'ultima versione è installata"; "lng_settings_downloading" = "Download aggiornamento {ready} / {total} MB.."; "lng_settings_update_ready" = "La nuova versione è pronta"; @@ -643,7 +646,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_authorization" = "{name},\nAbbiamo rilevato un accesso al tuo account da un nuovo dispositivo il {day}, {date} alle {time}\n\nDispositivo: {device}\nPosizione: {location}\n\nSe non sei tu, puoi andare su Impostazioni – Mostra tutte le sessioni e terminare quella sessione.\n\nSe credi che qualcuno si sia collegato al tuo account contro il tuo volere, puoi attivare la verifica in due passaggi nelle Impostazioni. \n\nGrazie, \nIl Team di Telegram"; -"lng_new_version_wrap" = "Telegram Desktop si è aggiornato alla versione {version}\n\n{changes}\n\nLa cronologia degli update è disponibile qui:\n{link}"; +"lng_new_version_wrap" = "Telegram Desktop si è aggiornato alla versione {version}\n\n{changes}\n\nLa cronologia degli aggiornamenti è disponibile qui:\n{link}"; "lng_new_version_minor" = "— Bug fix e altri miglioramenti minori"; "lng_new_version_text" = "— Includi chat silenziate nel badge nelle Impostazioni\n— Panoramica dei link condivisi e ricerca nei media condivisi\n— Anteprima quando invii una GIF o un file PDF."; diff --git a/Telegram/SourceFiles/langs/lang_ko.strings b/Telegram/SourceFiles/langs/lang_ko.strings index edb4be160..b6c0f4df1 100644 --- a/Telegram/SourceFiles/langs/lang_ko.strings +++ b/Telegram/SourceFiles/langs/lang_ko.strings @@ -60,6 +60,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_weekday7_full" = "일요일"; "lng_month_day" = "{month} {day}일"; +"lng_month_day_year" = "{month} {day}, {year}"; "lng_cancel" = "취소"; "lng_continue" = "계속"; @@ -117,6 +118,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_code_ph" = "코드번호"; "lng_code_desc" = "인증코드 메세지를 휴대폰으로 전송하였습니다.\n인증코드를 아래에 입력하여 주세요."; +"lng_code_telegram" = "[b]텔레그램[/b] 앱으로 부터 방금 수신받은,\n코드를 입력해주세요."; +"lng_code_no_telegram" = "코드를 SMS로 전송"; "lng_code_call" = "텔레그램이 {minutes}:{seconds}후에는 전화를 겁니다."; "lng_code_calling" = "텔레그램으로부터 전화 요청을 하고 있습니다.."; "lng_code_called" = "텔레그램이 회원님의 전화번호로 전화를 걸었습니다."; diff --git a/Telegram/SourceFiles/langs/lang_nl.strings b/Telegram/SourceFiles/langs/lang_nl.strings index 237e50fd7..966775c7f 100644 --- a/Telegram/SourceFiles/langs/lang_nl.strings +++ b/Telegram/SourceFiles/langs/lang_nl.strings @@ -60,6 +60,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_weekday7_full" = "zondag"; "lng_month_day" = "{day} {month}"; +"lng_month_day_year" = "{day} {month}, {year}"; "lng_cancel" = "Annuleren"; "lng_continue" = "Doorgaan"; @@ -117,6 +118,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_code_ph" = "Je code"; "lng_code_desc" = "We hebben een bericht met activatiecode\nverstuurd naar je nummer, geef deze hieronder in."; +"lng_code_telegram" = "Voer de code in die je zojuist\nhebt ontvangen in je vorige [b]Telegram[/b]-app."; +"lng_code_no_telegram" = "Verstuur code via SMS"; "lng_code_call" = "Telegram belt je over {minutes}:{seconds}"; "lng_code_calling" = "Oproepverzoek versturen naar Telegram"; "lng_code_called" = "Telegram heeft je nummer gebeld"; diff --git a/Telegram/SourceFiles/langs/lang_pt_BR.strings b/Telegram/SourceFiles/langs/lang_pt_BR.strings index 1a0a91080..b41698cc4 100644 --- a/Telegram/SourceFiles/langs/lang_pt_BR.strings +++ b/Telegram/SourceFiles/langs/lang_pt_BR.strings @@ -60,6 +60,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_weekday7_full" = "Domingo"; "lng_month_day" = "{month} {day}"; +"lng_month_day_year" = "{day} {month}, {year}"; "lng_cancel" = "Cancelar"; "lng_continue" = "Continuar"; @@ -117,6 +118,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_code_ph" = "Código"; "lng_code_desc" = "Enviamos uma SMS com um código de ativação\npara o seu telefone. Insira-o abaixo."; +"lng_code_telegram" = "Por favor insira código recebido\nem seu aplicativo prévio do [b]Telegram[/b]"; +"lng_code_no_telegram" = "Enviar código via SMS"; "lng_code_call" = "Telegram irá te ligar em {minutes}{seconds}"; "lng_code_calling" = "Aguardando a ligação do Telegram.."; "lng_code_called" = "Telegram ligou para o seu número"; diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 43884eeaa..e96f8806f 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -2559,7 +2559,9 @@ void MainWidget::onPeerShown(PeerData *peer) { _topBar.hide(); } resizeEvent(0); - if (animating()) _topBar.hide(); + if (animating()) { + _topBar.hide(); + } } void MainWidget::searchInPeer(PeerData *peer) { diff --git a/Telegram/SourceFiles/overviewwidget.cpp b/Telegram/SourceFiles/overviewwidget.cpp index 51ff04353..83ecf07e0 100644 --- a/Telegram/SourceFiles/overviewwidget.cpp +++ b/Telegram/SourceFiles/overviewwidget.cpp @@ -27,7 +27,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "application.h" #include "gui/filedialog.h" -OverviewInner::CachedLink::CachedLink(HistoryItem *item) : text(st::msgMinWidth) { +OverviewInner::CachedLink::CachedLink(HistoryItem *item) : titleWidth(0), page(0), pixw(0), pixh(0), text(st::msgMinWidth) { QString msgText; LinksInText msgLinks; item->getTextWithLinks(msgText, msgLinks); @@ -71,24 +71,31 @@ OverviewInner::CachedLink::CachedLink(HistoryItem *item) : text(st::msgMinWidth) TextParseOptions opts = { TextParseMultiline, int32(st::linksMaxWidth), 3 * st::msgFont->height, Qt::LayoutDirectionAuto }; text.setText(st::msgFont, msgText.mid(from, till - from), opts); } + int32 tw = 0, th = 0; if (page && page->photo) { if (!page->photo->full->loaded()) page->photo->medium->load(false, false); - int32 tw = convertScale(page->photo->medium->width()), th = convertScale(page->photo->medium->height()); - if (tw > st::dlgPhotoSize) { - if (th > tw) { - th = th * st::dlgPhotoSize / tw; - tw = st::dlgPhotoSize; - } else if (th > st::dlgPhotoSize) { - tw = tw * st::dlgPhotoSize / th; - th = st::dlgPhotoSize; - } - } - pixw = tw; - pixh = th; - if (pixw < 1) pixw = 1; - if (pixh < 1) pixh = 1; + tw = convertScale(page->photo->medium->width()); + th = convertScale(page->photo->medium->height()); + } else if (page && page->doc) { + if (!page->doc->thumb->loaded()) page->doc->thumb->load(false, false); + + tw = convertScale(page->doc->thumb->width()); + th = convertScale(page->doc->thumb->height()); } + if (tw > st::dlgPhotoSize) { + if (th > tw) { + th = th * st::dlgPhotoSize / tw; + tw = st::dlgPhotoSize; + } else if (th > st::dlgPhotoSize) { + tw = tw * st::dlgPhotoSize / th; + th = st::dlgPhotoSize; + } + } + pixw = tw; + pixh = th; + if (pixw < 1) pixw = 1; + if (pixh < 1) pixh = 1; if (page) { title = page->title; @@ -155,6 +162,7 @@ OverviewInner::OverviewInner(OverviewWidget *overview, ScrollArea *scroll, const , _minHeight(0) , _addToY(0) , _cursor(style::cur_default) + , _cursorState(HistoryDefaultCursorState) , _dragAction(NoDrag) , _dragItem(0), _selectedMsgId(0) , _dragItemIndex(-1) @@ -181,6 +189,8 @@ OverviewInner::OverviewInner(OverviewWidget *overview, ScrollArea *scroll, const App::contextItem(0); + _linkTipTimer.setSingleShot(true); + connect(&_linkTipTimer, SIGNAL(timeout()), this, SLOT(showLinkTip())); _touchSelectTimer.setSingleShot(true); connect(&_touchSelectTimer, SIGNAL(timeout()), this, SLOT(onTouchSelect())); @@ -348,13 +358,19 @@ OverviewInner::CachedLink *OverviewInner::cachedLink(HistoryItem *item) { return i.value(); } -QString OverviewInner::urlByIndex(MsgId msgid, int32 index, int32 lnkIndex) const { +QString OverviewInner::urlByIndex(MsgId msgid, int32 index, int32 lnkIndex, bool *fullShown) const { fixItemIndex(index, msgid); if (index < 0 || !_items[index].link) return QString(); - if (lnkIndex < 0 && _items[index].link->page) { - return _items[index].link->page->url; + if (lnkIndex < 0) { + if (fullShown) *fullShown = (_items[index].link->urls.size() == 1) && (_items[index].link->urls.at(0).width <= _linksWidth - (st::dlgPhotoSize + st::dlgPhotoPadding)); + if (_items[index].link->page) { + return _items[index].link->page->url; + } else if (!_items[index].link->urls.isEmpty()) { + return _items[index].link->urls.at(0).url; + } } else if (lnkIndex > 0 && lnkIndex <= _items[index].link->urls.size()) { + if (fullShown) *fullShown = _items[index].link->urls.at(lnkIndex - 1).width <= _linksWidth - (st::dlgPhotoSize + st::dlgPhotoPadding); return _items[index].link->urls.at(lnkIndex - 1).url; } return QString(); @@ -1254,6 +1270,7 @@ void OverviewInner::onUpdateSelected() { HistoryItem *item = 0; int32 index = -1; int32 newsel = 0; + HistoryCursorState cursorState = HistoryDefaultCursorState; if (_type == OverviewPhotos) { float64 w = (float64(_width - st::overviewPhotoSkip) / _photosInRow); int32 inRow = int32((m.x() - (st::overviewPhotoSkip / 2)) / w), vsize = (_vsize + st::overviewPhotoSkip); @@ -1402,7 +1419,6 @@ void OverviewInner::onUpdateSelected() { } left += st::msgPhotoSkip; } - HistoryCursorState cursorState = HistoryDefaultCursorState; TextLinkPtr link; media->getState(link, cursorState, m.x() - left, m.y() - y - st::msgMargin.top(), item, w); if (link) lnk = link; @@ -1427,6 +1443,7 @@ void OverviewInner::onUpdateSelected() { textlnkOver(lnk); App::hoveredLinkItem(lnk ? item : 0); updateMsg(App::hoveredLinkItem()); + QToolTip::hideText(); } else { App::mousedItem(item); } @@ -1435,6 +1452,16 @@ void OverviewInner::onUpdateSelected() { if (oldMousedItem) updateMsg(App::histItemById(oldMousedItem)); _lnkOverIndex = lnkIndex; if (item) updateMsg(item); + QToolTip::hideText(); + } + if (_cursorState == HistoryInDateCursorState && cursorState != HistoryInDateCursorState) { + QToolTip::hideText(); + } + if (cursorState != _cursorState) { + _cursorState = cursorState; + } + if (lnk || lnkIndex || cursorState == HistoryInDateCursorState) { + _linkTipTimer.start(1000); } fixItemIndex(_dragItemIndex, _dragItem); @@ -1580,6 +1607,27 @@ void OverviewInner::onUpdateSelected() { } } + +void OverviewInner::showLinkTip() { + TextLinkPtr lnk = textlnkOver(); + int32 dd = QApplication::startDragDistance(); + QPoint dp(mapFromGlobal(_dragPos)); + QRect r(dp.x() - dd, dp.y() - dd, 2 * dd, 2 * dd); + if (lnk && !lnk->fullDisplayed()) { + QToolTip::showText(_dragPos, lnk->readable(), this, r); + } else if (_lnkOverIndex) { + bool fullLink = false; + QString url = urlByIndex(_mousedItem, _mousedItemIndex, _lnkOverIndex, &fullLink); + if (!fullLink) { + QToolTip::showText(_dragPos, url, this, r); + } + } else if (_cursorState == HistoryInDateCursorState && _dragAction == NoDrag && _mousedItem) { + if (HistoryItem *item = App::histItemById(_mousedItem)) { + QToolTip::showText(_dragPos, item->date.toString(QLocale::system().dateTimeFormat(QLocale::LongFormat)), this, r); + } + } +} + void OverviewInner::updateDragSelection(MsgId dragSelFrom, int32 dragSelFromIndex, MsgId dragSelTo, int32 dragSelToIndex, bool dragSelecting) { if (_dragSelFrom != dragSelFrom || _dragSelFromIndex != dragSelFromIndex || _dragSelTo != dragSelTo || _dragSelToIndex != dragSelToIndex || _dragSelecting != dragSelecting) { _dragSelFrom = dragSelFrom; diff --git a/Telegram/SourceFiles/overviewwidget.h b/Telegram/SourceFiles/overviewwidget.h index a48367eb6..bd7e96c03 100644 --- a/Telegram/SourceFiles/overviewwidget.h +++ b/Telegram/SourceFiles/overviewwidget.h @@ -78,6 +78,7 @@ public: public slots: void onUpdateSelected(); + void showLinkTip(); void openContextUrl(); void copyContextUrl(); @@ -211,8 +212,11 @@ private: int32 _width, _height, _minHeight, _addToY; + QTimer _linkTipTimer; + // selection support, like in HistoryWidget Qt::CursorShape _cursor; + HistoryCursorState _cursorState; typedef QMap SelectedItems; SelectedItems _selected; enum DragAction { @@ -232,7 +236,7 @@ private: uint16 _dragSymbol; bool _dragWasInactive; - QString urlByIndex(MsgId msgid, int32 index, int32 lnkIndex) const; + QString urlByIndex(MsgId msgid, int32 index, int32 lnkIndex, bool *fullShown = 0) const; bool urlIsEmail(const QString &url) const; QString _contextMenuUrl; From cc4cd486bf0e978d6123324b0b8e03d2f737efa4 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 1 Sep 2015 16:53:56 +0300 Subject: [PATCH 117/121] version 0.8.55 prepared --- Telegram/PrepareWin.bat | 10 +++++----- Telegram/SourceFiles/config.h | 6 +++--- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 ++++++------ Telegram/Version.sh | 2 +- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index 96dd97f9b..7fec83b31 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,11 +1,11 @@ @echo OFF set "AppVersionStrMajor=0.8" -set "AppVersion=8054" -set "AppVersionStrSmall=0.8.54" -set "AppVersionStr=0.8.54" -set "AppVersionStrFull=0.8.54.0" -set "DevChannel=1" +set "AppVersion=8055" +set "AppVersionStrSmall=0.8.55" +set "AppVersionStr=0.8.55" +set "AppVersionStrFull=0.8.55.0" +set "DevChannel=0" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index b2492e83a..fb3462f1c 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,9 +17,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8054; -static const wchar_t *AppVersionStr = L"0.8.54"; -static const bool DevVersion = true; +static const int32 AppVersion = 8055; +static const wchar_t *AppVersionStr = L"0.8.55"; +static const bool DevVersion = false; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index 21b7a0cf4..d2f122b3b 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.54 + 0.8.55 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index 41823dcc2334b4ea61b066fe7fa61d553aba0e98..1bef961840c268f34f034910d1fefc7a0e9930ff 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_Z Date: Tue, 1 Sep 2015 17:00:32 +0300 Subject: [PATCH 118/121] changelog added to 0.8.55 --- Telegram/SourceFiles/application.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index a07696d53..efb917d1d 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -675,8 +675,8 @@ void Application::checkMapVersion() { QString versionFeatures; if (cDevVersion() && Local::oldMapVersion() < 8054) { versionFeatures = QString::fromUtf8("\xe2\x80\x94 Preview when sending links to GIF animations and PDF files\n\xe2\x80\x94 Full date and time shown when mouse over message timestamp");// .replace('@', qsl("@") + QChar(0x200D)); - } else if (!cDevVersion() && Local::oldMapVersion() < 8052) { - versionFeatures = lang(lng_new_version_minor).trimmed(); + } else if (!cDevVersion() && Local::oldMapVersion() < 8055) { + versionFeatures = lang(lng_new_version_text).trimmed(); } if (!versionFeatures.isEmpty()) { versionFeatures = lng_new_version_wrap(lt_version, QString::fromStdWString(AppVersionStr), lt_changes, versionFeatures, lt_link, qsl("https://desktop.telegram.org/#changelog")); From ad089cb8da4053b478978b5f61d751098e6e8964 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 2 Sep 2015 00:33:44 +0300 Subject: [PATCH 119/121] fixed entities update, version 0.8.55 stable --- Telegram/SourceFiles/app.cpp | 22 +++++++++++++++++++++- Telegram/SourceFiles/app.h | 1 + Telegram/SourceFiles/history.cpp | 15 ++++----------- Telegram/SourceFiles/history.h | 4 ++++ Telegram/SourceFiles/mainwidget.cpp | 12 ++++++++---- 5 files changed, 38 insertions(+), 16 deletions(-) diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index 07baf8abb..a4a79a426 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -699,13 +699,33 @@ namespace App { } } + void checkEntitiesUpdate(const MTPDmessage &m) { + if (HistoryItem *existing = App::histItemById(m.vid.v)) { + bool hasLinks = m.has_entities() && !m.ventities.c_vector().v.isEmpty(); + if ((hasLinks && !existing->hasTextLinks()) || (!hasLinks && existing->textHasLinks())) { + existing->setText(qs(m.vmessage), m.has_entities() ? linksFromMTP(m.ventities.c_vector().v) : LinksInText()); + existing->initDimensions(0); + if (App::main()) App::main()->itemResized(existing); + if (existing->hasTextLinks()) { + existing->history()->addToOverview(existing, OverviewLinks); + } + } + } + } + void feedMsgs(const MTPVector &msgs, int msgsState) { const QVector &v(msgs.c_vector().v); QMap msgsIds; for (int32 i = 0, l = v.size(); i < l; ++i) { const MTPMessage &msg(v.at(i)); switch (msg.type()) { - case mtpc_message: msgsIds.insert(msg.c_message().vid.v, i); break; + case mtpc_message: { + const MTPDmessage &d(msg.c_message()); + msgsIds.insert(d.vid.v, i); + if (msgsState == 1) { // new message, index my forwarded messages to links overview + checkEntitiesUpdate(d); + } + } break; case mtpc_messageEmpty: msgsIds.insert(msg.c_messageEmpty().vid.v, i); break; case mtpc_messageService: msgsIds.insert(msg.c_messageService().vid.v, i); break; } diff --git a/Telegram/SourceFiles/app.h b/Telegram/SourceFiles/app.h index 358622cf3..10465c71d 100644 --- a/Telegram/SourceFiles/app.h +++ b/Telegram/SourceFiles/app.h @@ -118,6 +118,7 @@ namespace App { void feedParticipants(const MTPChatParticipants &p, bool requestBotInfos, bool emitPeerUpdated = true); void feedParticipantAdd(const MTPDupdateChatParticipantAdd &d, bool emitPeerUpdated = true); void feedParticipantDelete(const MTPDupdateChatParticipantDelete &d, bool emitPeerUpdated = true); + void checkEntitiesUpdate(const MTPDmessage &m); void feedMsgs(const MTPVector &msgs, int msgsState = 0); // 2 - new read message, 1 - new unread message, 0 - not new message, -1 - searched message void feedWereRead(const QVector &msgsIds); void feedInboxRead(const PeerId &peer, int32 upTo); diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index ceaff4ed5..097d4e5dc 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -644,24 +644,14 @@ HistoryItem *History::createItem(HistoryBlock *block, const MTPmessage &msg, boo } const MTPMessageMedia *media = 0; - const QVector *entities = 0; switch (msg.type()) { case mtpc_message: media = msg.c_message().has_media() ? (&msg.c_message().vmedia) : 0; - entities = msg.c_message().has_entities() ? (&msg.c_message().ventities.c_vector().v) : 0; break; } if (media) { existing->updateMedia(*media); } - if (entities && !existing->hasTextLinks()) { // index forwarded messages to links overview - existing->setText(qs(msg.c_message().vmessage), linksFromMTP(*entities)); - existing->initDimensions(0); - if (App::main()) App::main()->itemResized(existing); - if (existing->hasTextLinks()) { - existing->history()->addToOverview(existing, OverviewLinks); - } - } return (returnExisting || regged) ? existing : 0; } @@ -5249,7 +5239,6 @@ HistoryMessage::HistoryMessage(History *history, HistoryBlock *block, const MTPD , _textHeight(0) , _media(0) { - //if (msg.has_entities()) msg.ventities.c_vector().v.size() QString text(textClean(qs(msg.vmessage))); initTime(); initMedia(msg.has_media() ? (&msg.vmedia) : 0, text); @@ -5494,6 +5483,10 @@ void HistoryMessage::getTextWithLinks(QString &text, LinksInText &links) { text = _text.original(); } +bool HistoryMessage::textHasLinks() { + return _text.hasLinks(); +} + void HistoryMessage::draw(QPainter &p, uint32 selection) const { textstyleSet(&(out() ? st::outTextStyle : st::inTextStyle)); diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index 3795bb875..e696535a4 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -786,6 +786,9 @@ public: } virtual void getTextWithLinks(QString &text, LinksInText &links) { } + virtual bool textHasLinks() { + return false; + } virtual QString time() const { return QString(); } @@ -1339,6 +1342,7 @@ public: void setMedia(const MTPMessageMedia *media); void setText(const QString &text, const LinksInText &links); void getTextWithLinks(QString &text, LinksInText &links); + bool textHasLinks(); QString time() const { return _time; diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index e96f8806f..5f9de2fc6 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -3414,14 +3414,14 @@ void MainWidget::handleUpdates(const MTPUpdates &updates, uint64 randomId) { const MTPDupdateShortSentMessage &d(updates.c_updateShortSentMessage()); HistoryItem *item = 0; if (randomId) { - QString text = d.has_entities() ? App::histSentTextByItem(randomId) : QString(); + QString text = App::histSentTextByItem(randomId); feedUpdate(MTP_updateMessageID(d.vid, MTP_long(randomId))); // ignore real date if (!text.isEmpty()) { - LinksInText links(linksFromMTP(d.ventities.c_vector().v)); + bool hasLinks = d.has_entities() && !d.ventities.c_vector().v.isEmpty(); item = App::histItemById(d.vid.v); - if (item && !links.isEmpty()) { + if (item && ((hasLinks && !item->hasTextLinks()) || (!hasLinks && item->textHasLinks()))) { bool was = item->hasTextLinks(); - item->setText(text, links); + item->setText(text, d.has_entities() ? linksFromMTP(d.ventities.c_vector().v) : LinksInText()); item->initDimensions(0); itemResized(item); if (!was && item->hasTextLinks()) { @@ -3462,6 +3462,10 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { _byPtsUpdate.insert(ptsKey(SkippedUpdate), update); return; } + if (d.vmessage.type() == mtpc_message) { // index forwarded messages to links overview + App::checkEntitiesUpdate(d.vmessage.c_message()); + } + HistoryItem *item = App::histories().addToBack(d.vmessage); if (item) { history.peerMessagesUpdated(item->history()->peer->id); From 4d7e90f7e93afcc10e92558a897924864b0b16fa Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 2 Sep 2015 13:20:33 +0300 Subject: [PATCH 120/121] fixed adding contacts from shared contacts --- Telegram/SourceFiles/app.cpp | 12 ++++++++++++ Telegram/SourceFiles/app.h | 3 +++ Telegram/SourceFiles/boxes/addcontactbox.cpp | 1 - Telegram/SourceFiles/dialogswidget.cpp | 17 ++++++----------- Telegram/SourceFiles/dialogswidget.h | 2 +- Telegram/SourceFiles/history.cpp | 8 ++------ Telegram/SourceFiles/mainwidget.cpp | 4 ++-- Telegram/SourceFiles/profilewidget.cpp | 4 ++-- 8 files changed, 28 insertions(+), 23 deletions(-) diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index a4a79a426..3c0016f48 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -70,6 +70,9 @@ namespace { typedef QMap > RepliesTo; RepliesTo repliesTo; + typedef QMap SharedContactPhones; + SharedContactPhones sharedContactPhones; + Histories histories; typedef QHash MsgsData; @@ -1725,6 +1728,7 @@ namespace App { ::audioItems.clear(); ::documentItems.clear(); ::webPageItems.clear(); + ::sharedContactPhones.clear(); ::repliesTo.clear(); lastPhotos.clear(); lastPhotosMap.clear(); @@ -2117,6 +2121,14 @@ namespace App { return ::webPageItems; } + void regSharedContactPhone(int32 userId, const QString &phone) { + ::sharedContactPhones[userId] = phone; + } + + QString phoneFromSharedContact(int32 userId) { + return ::sharedContactPhones.value(userId); + } + void regMuted(PeerData *peer, int32 changeIn) { ::mutedPeers.insert(peer, true); if (App::main()) App::main()->updateMutedIn(changeIn); diff --git a/Telegram/SourceFiles/app.h b/Telegram/SourceFiles/app.h index 10465c71d..f14f280eb 100644 --- a/Telegram/SourceFiles/app.h +++ b/Telegram/SourceFiles/app.h @@ -248,6 +248,9 @@ namespace App { void unregWebPageItem(WebPageData *data, HistoryItem *item); const WebPageItems &webPageItems(); + void regSharedContactPhone(int32 userId, const QString &phone); + QString phoneFromSharedContact(int32 userId); + void regMuted(PeerData *peer, int32 changeIn); void unregMuted(PeerData *peer); void updateMuted(); diff --git a/Telegram/SourceFiles/boxes/addcontactbox.cpp b/Telegram/SourceFiles/boxes/addcontactbox.cpp index 75353e55e..0694a143c 100644 --- a/Telegram/SourceFiles/boxes/addcontactbox.cpp +++ b/Telegram/SourceFiles/boxes/addcontactbox.cpp @@ -285,7 +285,6 @@ void AddContactBox::onImportDone(const MTPcontacts_ImportedContacts &res) { } if (uid) { App::main()->addNewContact(uid); - App::main()->choosePeer(App::peerFromUser(uid), ShowAtUnreadMsgId); App::wnd()->hideLayer(); } else { _addButton.hide(); diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index f2c626da4..58ef6fc7e 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -829,22 +829,17 @@ void DialogsListWidget::contactsReceived(const QVector &contacts) { refresh(); } -int32 DialogsListWidget::addNewContact(int32 uid, bool select) { +int32 DialogsListWidget::addNewContact(int32 uid, bool select) { // -2 - err, -1 - don't scroll, >= 0 - scroll PeerId peer = App::peerFromUser(uid); - if (!App::peerLoaded(peer)) return -1; + if (!App::peerLoaded(peer)) return -2; History *history = App::history(peer); contacts.addByName(history); DialogsList::RowByPeer::const_iterator i = dialogs.list.rowByPeer.constFind(peer); if (i == dialogs.list.rowByPeer.cend()) { DialogRow *added = contactsNoDialogs.addByName(history); - if (!added) return -1; - if (select && false) { - sel = added; - contactSel = true; - } -// if (contactsNoDialogs.list.count == 1 && !dialogs.list.count) refresh(); - return added ? ((dialogs.list.count + added->pos) * st::dlgHeight) : -1; + if (!added) return -2; + return -1; } if (select) { sel = i.value(); @@ -1842,9 +1837,9 @@ bool DialogsWidget::addNewContact(int32 uid, bool show) { _filter.setText(QString()); onFilterUpdate(); int32 to = list.addNewContact(uid, true); - if (to < 0 || !show) return false; + if (to < -1 || !show) return false; list.refresh(); - scroll.scrollToY(to); + if (to >= 0) scroll.scrollToY(to); return true; } diff --git a/Telegram/SourceFiles/dialogswidget.h b/Telegram/SourceFiles/dialogswidget.h index 036a7695a..bca348727 100644 --- a/Telegram/SourceFiles/dialogswidget.h +++ b/Telegram/SourceFiles/dialogswidget.h @@ -35,7 +35,7 @@ public: void activate(); void contactsReceived(const QVector &contacts); - int32 addNewContact(int32 uid, bool sel = false); // return y of row or -1 if failed + int32 addNewContact(int32 uid, bool sel = false); // -2 - err, -1 - don't scroll, >= 0 - scroll int32 filteredOffset() const; int32 peopleOffset() const; diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 097d4e5dc..512435906 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -3664,18 +3664,14 @@ HistoryContact::HistoryContact(int32 userId, const QString &first, const QString , phone(App::formatPhone(phone)) , contact(App::userLoaded(userId)) { + App::regSharedContactPhone(userId, phone); + _maxw = st::mediaMaxWidth; name.setText(st::mediaFont, (first + ' ' + last).trimmed(), _textNameOptions); phonew = st::mediaFont->m.width(phone); if (contact) { - if (contact->phone.isEmpty()) { - contact->setPhone(phone); - } - if (contact->contact < 0) { - contact->contact = 0; - } contact->photo->load(); } } diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 5f9de2fc6..8e273cf68 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -78,7 +78,7 @@ void TopBarWidget::onInfoClicked() { void TopBarWidget::onAddContact() { PeerData *p = App::main() ? App::main()->profilePeer() : 0; UserData *u = (p && !p->chat) ? p->asUser() : 0; - if (u) App::wnd()->showLayer(new AddContactBox(u->firstName, u->lastName, u->phone)); + if (u) App::wnd()->showLayer(new AddContactBox(u->firstName, u->lastName, u->phone.isEmpty() ? App::phoneFromSharedContact(App::userFromPeer(u->id)) : u->phone)); } void TopBarWidget::onEdit() { @@ -278,7 +278,7 @@ void TopBarWidget::showAll() { return; } PeerData *p = App::main() ? App::main()->profilePeer() : 0, *o = App::main() ? App::main()->overviewPeer() : 0; - if (p && (p->chat || p->asUser()->contact >= 0)) { + if (p && (p->chat || p->asUser()->contact >= 0 || !App::phoneFromSharedContact(App::userFromPeer(p->id)).isEmpty())) { if (p->chat) { if (p->asChat()->forbidden) { _edit.hide(); diff --git a/Telegram/SourceFiles/profilewidget.cpp b/Telegram/SourceFiles/profilewidget.cpp index 28f8f275c..023b71e40 100644 --- a/Telegram/SourceFiles/profilewidget.cpp +++ b/Telegram/SourceFiles/profilewidget.cpp @@ -82,7 +82,7 @@ ProfileInner::ProfileInner(ProfileWidget *profile, ScrollArea *scroll, const Pee if (_peerUser->blocked == UserIsBlocked) { _blockUser.setText(lang(_peerUser->botInfo ? lng_profile_unblock_bot : lng_profile_unblock_user)); } - _phoneText = App::formatPhone(_peerUser->phone); + _phoneText = App::formatPhone(_peerUser->phone.isEmpty() ? App::phoneFromSharedContact(App::userFromPeer(_peerUser->id)) : _peerUser->phone); PhotoData *userPhoto = (_peerUser->photoId && _peerUser->photoId != UnknownPeerPhotoId) ? App::photo(_peerUser->photoId) : 0; if (userPhoto && userPhoto->date) { _photoLink = TextLinkPtr(new PhotoLink(userPhoto, _peer)); @@ -434,7 +434,7 @@ void ProfileInner::peerUpdated(PeerData *data) { if (data == _peer) { PhotoData *photo = 0; if (_peerUser) { - _phoneText = App::formatPhone(_peerUser->phone); + _phoneText = App::formatPhone(_peerUser->phone.isEmpty() ? App::phoneFromSharedContact(App::userFromPeer(_peerUser->id)) : _peerUser->phone); if (_peerUser->photoId && _peerUser->photoId != UnknownPeerPhotoId) photo = App::photo(_peerUser->photoId); if (_wasBlocked != _peerUser->blocked) { _wasBlocked = _peerUser->blocked; From 42d297f1927bd9840928e2c32e97b6a24db9d6c2 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 2 Sep 2015 13:22:15 +0300 Subject: [PATCH 121/121] finally prepared 0.8.55 version --- Telegram/PrepareMac.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/Telegram/PrepareMac.sh b/Telegram/PrepareMac.sh index 584bd442e..0a12cf5aa 100755 --- a/Telegram/PrepareMac.sh +++ b/Telegram/PrepareMac.sh @@ -92,5 +92,6 @@ rm ./../Mac/Release/Telegram.app/Contents/Frameworks/Updater rm -rf ./../Mac/Release/Telegram.app/Contents/_CodeSignature mv ./../Mac/Release/tmacupd$AppVersion ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ mv ./../Mac/Release/tsetup.$AppVersionStr$DevPostfix.dmg ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.dmg + echo "Version $AppVersionStr$DevPostfix prepared!";

    HR4Y(*Ew|ocsB>{%7ILx{baW_?aMZ%= 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 delta 61723 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 diff --git a/Telegram/SourceFiles/autoupdater.cpp b/Telegram/SourceFiles/autoupdater.cpp index 87cdba144..a84b3ca54 100644 --- a/Telegram/SourceFiles/autoupdater.cpp +++ b/Telegram/SourceFiles/autoupdater.cpp @@ -16,13 +16,13 @@ Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE Copyright (c) 2014 John Preston, https://desktop.telegram.org */ -#ifndef TDESKTOP_DISABLE_AUTOUPDATE - #include "stdafx.h" #include "application.h" #include "pspecific.h" #include "autoupdater.h" +#ifndef TDESKTOP_DISABLE_AUTOUPDATE + #ifdef Q_OS_WIN typedef DWORD VerInt; typedef WCHAR VerChar; diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 6b9d80a95..974c4127d 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,9 +17,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8052; -static const wchar_t *AppVersionStr = L"0.8.52"; -static const bool DevVersion = false; +static const int32 AppVersion = 8053; +static const wchar_t *AppVersionStr = L"0.8.53"; +static const bool DevVersion = true; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; @@ -81,6 +81,7 @@ enum { AutoSearchTimeout = 900, // 0.9 secs SearchPerPage = 50, SearchManyPerPage = 100, + LinksOverviewPerPage = 12, MediaOverviewStartPerPage = 5, MediaOverviewPreloadCount = 4, diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index e28b385aa..f2c626da4 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -1700,7 +1700,6 @@ bool DialogsWidget::onSearchMessages(bool searchCache) { return false; } - void DialogsWidget::onNeedSearchMessages() { if (!onSearchMessages(true)) { _searchTimer.start(AutoSearchTimeout); diff --git a/Telegram/SourceFiles/gui/text.cpp b/Telegram/SourceFiles/gui/text.cpp index 9d3e3355c..ef42afe58 100644 --- a/Telegram/SourceFiles/gui/text.cpp +++ b/Telegram/SourceFiles/gui/text.cpp @@ -20,6 +20,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "lang.h" +#include "pspecific.h" + #include namespace { @@ -788,6 +790,15 @@ void TextLink::onClick(Qt::MouseButton button) const { } } +void EmailLink::onClick(Qt::MouseButton button) const { + if (button == Qt::LeftButton || button == Qt::MiddleButton) { + QUrl url(qstr("mailto:") + _email); + if (!QDesktopServices::openUrl(url)) { + psOpenFile(url.toString(QUrl::FullyEncoded), true); + } + } +} + void MentionLink::onClick(Qt::MouseButton button) const { if (button == Qt::LeftButton || button == Qt::MiddleButton) { App::openUserByName(_tag.mid(1), true); diff --git a/Telegram/SourceFiles/gui/text.h b/Telegram/SourceFiles/gui/text.h index 30304541c..3fd48128e 100644 --- a/Telegram/SourceFiles/gui/text.h +++ b/Telegram/SourceFiles/gui/text.h @@ -369,11 +369,7 @@ public: return _email; } - void onClick(Qt::MouseButton button) const { - if (button == Qt::LeftButton || button == Qt::MiddleButton) { - QDesktopServices::openUrl(qsl("mailto:") + _email); - } - } + void onClick(Qt::MouseButton button) const; const QString &readable() const { return _email; diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index f3ae1a3c0..26a684d24 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -644,12 +644,24 @@ HistoryItem *History::createItem(HistoryBlock *block, const MTPmessage &msg, boo } const MTPMessageMedia *media = 0; + const QVector *entities = 0; switch (msg.type()) { - case mtpc_message: media = &msg.c_message().vmedia; break; + case mtpc_message: + media = &msg.c_message().vmedia; + entities = msg.c_message().has_entities() ? (&msg.c_message().ventities.c_vector().v) : 0; + break; } if (media) { existing->updateMedia(*media); } + if (entities && !existing->hasTextLinks()) { // index forwarded messages to links overview + existing->setText(qs(msg.c_message().vmessage), linksFromMTP(*entities)); + existing->initDimensions(0); + if (App::main()) App::main()->itemResized(existing); + if (existing->hasTextLinks()) { + existing->history()->addToOverview(existing, OverviewLinks); + } + } return (returnExisting || regged) ? existing : 0; } @@ -888,6 +900,24 @@ void History::createInitialDateBlock(const QDateTime &date) { push_front(dateBlock); // date block } +void History::addToOverview(HistoryItem *item, MediaOverviewType type) { + if (_overviewIds[type].constFind(item->id) == _overviewIds[type].cend()) { + _overview[type].push_back(item->id); + _overviewIds[type].insert(item->id, NullType()); + if (_overviewCount[type] > 0) ++_overviewCount[type]; + if (App::wnd()) App::wnd()->mediaOverviewUpdated(peer, type); + } +} + +bool History::addToOverviewFront(HistoryItem *item, MediaOverviewType type) { + if (_overviewIds[type].constFind(item->id) == _overviewIds[type].cend()) { + _overview[type].push_front(item->id); + _overviewIds[type].insert(item->id, NullType()); + return true; + } + return false; +} + HistoryItem *History::doAddToBack(HistoryBlock *to, bool newBlock, HistoryItem *adding, bool newMsg) { if (!adding) { if (newBlock) delete to; @@ -928,31 +958,14 @@ HistoryItem *History::doAddToBack(HistoryBlock *to, bool newBlock, HistoryItem * HistoryMediaType mt = media->type(); MediaOverviewType t = mediaToOverviewType(mt); if (t != OverviewCount) { - if (_overviewIds[t].constFind(adding->id) == _overviewIds[t].cend()) { - _overview[t].push_back(adding->id); - _overviewIds[t].insert(adding->id, NullType()); - if (_overviewCount[t] > 0) ++_overviewCount[t]; - if (App::wnd()) App::wnd()->mediaOverviewUpdated(peer, t); - } + addToOverview(adding, t); if (mt == MediaTypeDocument && static_cast(media)->document()->song()) { - t = OverviewAudioDocuments; - if (_overviewIds[t].constFind(adding->id) == _overviewIds[t].cend()) { - _overview[t].push_back(adding->id); - _overviewIds[t].insert(adding->id, NullType()); - if (_overviewCount[t] > 0) ++_overviewCount[t]; - if (App::wnd()) App::wnd()->mediaOverviewUpdated(peer, t); - } + addToOverview(adding, OverviewAudioDocuments); } } } if (adding->hasTextLinks()) { - MediaOverviewType t = OverviewLinks; - if (_overviewIds[t].constFind(adding->id) == _overviewIds[t].cend()) { - _overview[t].push_back(adding->id); - _overviewIds[t].insert(adding->id, NullType()); - if (_overviewCount[t] > 0) ++_overviewCount[t]; - if (App::wnd()) App::wnd()->mediaOverviewUpdated(peer, t); - } + addToOverview(adding, OverviewLinks); } if (adding->from()->id) { if (peer->chat) { @@ -1102,28 +1115,14 @@ void History::addToFront(const QVector &slice) { HistoryMediaType mt = media->type(); MediaOverviewType t = mediaToOverviewType(mt); if (t != OverviewCount) { - if (_overviewIds[t].constFind(item->id) == _overviewIds[t].cend()) { - _overview[t].push_front(item->id); - _overviewIds[t].insert(item->id, NullType()); - mask |= (1 << t); - } + if (addToOverviewFront(item, t)) mask |= (1 << t); if (mt == MediaTypeDocument && static_cast(media)->document()->song()) { - t = OverviewAudioDocuments; - if (_overviewIds[t].constFind(item->id) == _overviewIds[t].cend()) { - _overview[t].push_front(item->id); - _overviewIds[t].insert(item->id, NullType()); - mask |= (1 << t); - } + if (addToOverviewFront(item, OverviewAudioDocuments)) mask |= (1 << OverviewAudioDocuments); } } } if (item->hasTextLinks()) { - MediaOverviewType t = OverviewLinks; - if (_overviewIds[t].constFind(item->id) == _overviewIds[t].cend()) { - _overview[t].push_front(item->id); - _overviewIds[t].insert(item->id, NullType()); - mask |= (1 << t); - } + if (addToOverviewFront(item, OverviewLinks)) mask |= (1 << OverviewLinks); } if (item->from()->id) { if (lastAuthors) { // chats @@ -1348,7 +1347,7 @@ void History::setUnreadCount(int32 newUnreadCount, bool psUpdate) { App::histories().unreadFull += newUnreadCount - unreadCount; if (mute) App::histories().unreadMuted += newUnreadCount - unreadCount; unreadCount = newUnreadCount; - if (psUpdate) App::wnd()->updateCounter(); + if (psUpdate && (!mute || cIncludeMuted())) App::wnd()->updateCounter(); if (unreadBar) unreadBar->setCount(unreadCount); } } @@ -5273,6 +5272,12 @@ void HistoryMessage::setText(const QString &text, const LinksInText &links) { } } +void HistoryMessage::getTextWithLinks(QString &text, LinksInText &links) { + if (_text.isEmpty()) return; + links = _text.calcLinksInText(); + text = _text.original(); +} + void HistoryMessage::draw(QPainter &p, uint32 selection) const { textstyleSet(&(out() ? st::outTextStyle : st::inTextStyle)); diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index bcdcc1e3b..3f1fe63c6 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -185,6 +185,8 @@ struct History : public QList { void addToBack(const QVector &slice); void createInitialDateBlock(const QDateTime &date); HistoryItem *doAddToBack(HistoryBlock *to, bool newBlock, HistoryItem *adding, bool newMsg); + void addToOverview(HistoryItem *item, MediaOverviewType type); + bool addToOverviewFront(HistoryItem *item, MediaOverviewType type); void newItemAdded(HistoryItem *item); void unregTyping(UserData *from); @@ -782,6 +784,8 @@ public: } virtual void setText(const QString &text, const LinksInText &links) { } + virtual void getTextWithLinks(QString &text, LinksInText &links) { + } virtual QString time() const { return QString(); } @@ -1181,6 +1185,10 @@ public: } ImagePtr replyPreview(); + WebPageData *webpage() { + return data; + } + private: WebPageData *data; TextLinkPtr _openl, _photol; @@ -1328,6 +1336,7 @@ public: HistoryMedia *getMedia(bool inOverview = false) const; void setMedia(const MTPmessageMedia &media); void setText(const QString &text, const LinksInText &links); + void getTextWithLinks(QString &text, LinksInText &links); QString time() const { return _time; diff --git a/Telegram/SourceFiles/localstorage.cpp b/Telegram/SourceFiles/localstorage.cpp index a1eb4837a..abb7952db 100644 --- a/Telegram/SourceFiles/localstorage.cpp +++ b/Telegram/SourceFiles/localstorage.cpp @@ -730,6 +730,14 @@ namespace { cSetSoundNotify(v == 1); } break; + case dbiIncludeMuted: { + qint32 v; + stream >> v; + if (!_checkStreamStatus(stream)) return false; + + cSetIncludeMuted(v == 1); + } break; + case dbiDesktopNotify: { qint32 v; stream >> v; @@ -1281,7 +1289,7 @@ namespace { _writeMap(WriteMapFast); } - uint32 size = 13 * (sizeof(quint32) + sizeof(qint32)); + uint32 size = 14 * (sizeof(quint32) + sizeof(qint32)); size += sizeof(quint32) + _stringSize(cAskDownloadPath() ? QString() : cDownloadPath()); size += sizeof(quint32) + sizeof(qint32) + (cRecentEmojisPreload().isEmpty() ? cGetRecentEmojis().size() : cRecentEmojisPreload().size()) * (sizeof(uint64) + sizeof(ushort)); size += sizeof(quint32) + sizeof(qint32) + cEmojiVariants().size() * (sizeof(uint32) + sizeof(uint64)); @@ -1295,6 +1303,7 @@ namespace { data.stream << quint32(dbiReplaceEmojis) << qint32(cReplaceEmojis() ? 1 : 0); data.stream << quint32(dbiDefaultAttach) << qint32(cDefaultAttach()); data.stream << quint32(dbiSoundNotify) << qint32(cSoundNotify()); + data.stream << quint32(dbiIncludeMuted) << qint32(cIncludeMuted()); data.stream << quint32(dbiDesktopNotify) << qint32(cDesktopNotify()); data.stream << quint32(dbiNotifyView) << qint32(cNotifyView()); data.stream << quint32(dbiWindowsNotifications) << qint32(cWindowsNotifications()); diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index cd103a019..81ed01580 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -1183,6 +1183,7 @@ void MainWidget::mediaOverviewUpdated(PeerData *peer, MediaOverviewType type) { case OverviewVideos: connect(_mediaType.addButton(new IconedButton(this, st::dropdownMediaVideos, lang(lng_media_type_videos))), SIGNAL(clicked()), this, SLOT(onVideosSelect())); break; case OverviewDocuments: connect(_mediaType.addButton(new IconedButton(this, st::dropdownMediaDocuments, lang(lng_media_type_files))), SIGNAL(clicked()), this, SLOT(onDocumentsSelect())); break; case OverviewAudios: connect(_mediaType.addButton(new IconedButton(this, st::dropdownMediaAudios, lang(lng_media_type_audios))), SIGNAL(clicked()), this, SLOT(onAudiosSelect())); break; + case OverviewLinks: connect(_mediaType.addButton(new IconedButton(this, st::dropdownMediaLinks, lang(lng_media_type_links))), SIGNAL(clicked()), this, SLOT(onLinksSelect())); break; } } } @@ -1203,6 +1204,9 @@ void MainWidget::itemRemoved(HistoryItem *item) { if (history.peer() == item->history()->peer) { history.itemRemoved(item); } + if (overview && overview->peer() == item->history()->peer) { + overview->itemRemoved(item); + } itemRemovedGif(item); if (!_toForward.isEmpty()) { SelectedItemSet::iterator i = _toForward.find(item->id); @@ -2240,9 +2244,13 @@ void MainWidget::sentDataReceived(uint64 randomId, const MTPmessages_SentMessage if (!text.isEmpty() && !links.isEmpty()) { item = App::histItemById(d.vid.v); if (item) { + bool was = item->hasTextLinks(); item->setText(text, links); item->initDimensions(0); itemResized(item); + if (!was && item->hasTextLinks()) { + item->history()->addToOverview(item, OverviewLinks); + } } } } @@ -2273,9 +2281,13 @@ void MainWidget::sentDataReceived(uint64 randomId, const MTPmessages_SentMessage //if (!text.isEmpty() && !links.isEmpty()) { // item = App::histItemById(d.vid.v); // if (item) { + // bool was = item->hasTextLinks(); // item->setText(text, links); // item->initDimensions(0); // itemResized(item); + // if (!was && item->hasTextLinks()) { + // item->history()->addToOverview(item, OverviewLinks); + // } // } //} } @@ -2544,6 +2556,11 @@ void MainWidget::onAudiosSelect() { _mediaType.hideStart(); } +void MainWidget::onLinksSelect() { + if (overview) overview->switchType(OverviewLinks); + _mediaType.hideStart(); +} + TopBarWidget *MainWidget::topBar() { return &_topBar; } @@ -3389,7 +3406,7 @@ void MainWidget::handleUpdates(const MTPUpdates &updates) { return; } bool out = (d.vflags.v & MTPDmessage_flag_out); - HistoryItem *item = App::histories().addToBack(MTP_message(d.vflags, d.vid, out ? MTP_int(MTP::authedId()) : d.vuser_id, MTP_peerUser(out ? d.vuser_id : MTP_int(MTP::authedId())), d.vfwd_from_id, d.vfwd_date, d.vreply_to_msg_id, d.vdate, d.vmessage, MTP_messageMediaEmpty(), MTPnullMarkup, MTPnullEntities)); + HistoryItem *item = App::histories().addToBack(MTP_message(d.vflags, d.vid, out ? MTP_int(MTP::authedId()) : d.vuser_id, MTP_peerUser(out ? d.vuser_id : MTP_int(MTP::authedId())), d.vfwd_from_id, d.vfwd_date, d.vreply_to_msg_id, d.vdate, d.vmessage, MTP_messageMediaEmpty(), MTPnullMarkup, d.has_entities() ? d.ventities : MTPnullEntities)); if (item) { history.peerMessagesUpdated(item->history()->peer->id); } @@ -3409,7 +3426,7 @@ void MainWidget::handleUpdates(const MTPUpdates &updates) { _byPtsUpdates.insert(ptsKey(SkippedUpdates), updates); return; } - HistoryItem *item = App::histories().addToBack(MTP_message(d.vflags, d.vid, d.vfrom_id, MTP_peerChat(d.vchat_id), d.vfwd_from_id, d.vfwd_date, d.vreply_to_msg_id, d.vdate, d.vmessage, MTP_messageMediaEmpty(), MTPnullMarkup, MTPnullEntities)); + HistoryItem *item = App::histories().addToBack(MTP_message(d.vflags, d.vid, d.vfrom_id, MTP_peerChat(d.vchat_id), d.vfwd_from_id, d.vfwd_date, d.vreply_to_msg_id, d.vdate, d.vmessage, MTP_messageMediaEmpty(), MTPnullMarkup, d.has_entities() ? d.ventities : MTPnullEntities)); if (item) { history.peerMessagesUpdated(item->history()->peer->id); } diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index 9fec76a31..73491c1c4 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -429,6 +429,7 @@ public slots: void onVideosSelect(); void onDocumentsSelect(); void onAudiosSelect(); + void onLinksSelect(); void onForwardCancel(QObject *obj = 0); diff --git a/Telegram/SourceFiles/overviewwidget.cpp b/Telegram/SourceFiles/overviewwidget.cpp index cbc3d25f9..26f0b9859 100644 --- a/Telegram/SourceFiles/overviewwidget.cpp +++ b/Telegram/SourceFiles/overviewwidget.cpp @@ -27,6 +27,103 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "application.h" #include "gui/filedialog.h" +OverviewInner::CachedLink::CachedLink(HistoryItem *item) : text(st::msgMinWidth) { + QString msgText; + LinksInText msgLinks; + item->getTextWithLinks(msgText, msgLinks); + int32 from = 0, till = msgText.size(), lnk = msgLinks.size(); + for (int32 i = 0; i < lnk; ++i) { + if (msgLinks[i].type != LinkInTextUrl && msgLinks[i].type != LinkInTextCustomUrl && msgLinks[i].type != LinkInTextEmail) { + continue; + } + QString url = msgLinks[i].text, text = msgText.mid(msgLinks[i].offset, msgLinks[i].length); + urls.push_back(Link(url.isEmpty() ? text : url, text)); + } + while (lnk > 0 && till > from) { + --lnk; + if (msgLinks[lnk].type != LinkInTextUrl && msgLinks[lnk].type != LinkInTextCustomUrl && msgLinks[lnk].type != LinkInTextEmail) { + ++lnk; + break; + } + int32 afterLinkStart = msgLinks[lnk].offset + msgLinks[lnk].length; + if (till > afterLinkStart) { + if (!QRegularExpression(qsl("^[,.\\s_=+\\-;:`'\"\\(\\)\\[\\]\\{\\}<>*&^%\\$#@!\\\\/]+$")).match(msgText.mid(afterLinkStart, till - afterLinkStart)).hasMatch()) { + ++lnk; + break; + } + } + till = msgLinks[lnk].offset; + } + if (!lnk) { + if (QRegularExpression(qsl("^[,.\\s\\-;:`'\"\\(\\)\\[\\]\\{\\}<>*&^%\\$#@!\\\\/]+$")).match(msgText.mid(from, till - from)).hasMatch()) { + till = from; + } + } + + HistoryMedia *media = item->getMedia(); + page = (media && media->type() == MediaTypeWebPage) ? static_cast(media)->webpage() : 0; + if (from >= till && page) { + msgText = page->description; + from = 0; + till = msgText.size(); + } + if (till > from) { + TextParseOptions opts = { TextParseMultiline, st::linksMaxWidth, 3 * st::msgFont->height, Qt::LayoutDirectionAuto }; + text.setText(st::msgFont, msgText.mid(from, till - from), opts); + } + if (page && page->photo) { + if (!page->photo->full->loaded()) page->photo->medium->load(false, false); + + int32 tw = convertScale(page->photo->medium->width()), th = convertScale(page->photo->medium->height()); + if (tw > st::dlgPhotoSize) { + if (th > tw) { + th = th * st::dlgPhotoSize / tw; + tw = st::dlgPhotoSize; + } else if (th > st::dlgPhotoSize) { + tw = tw * st::dlgPhotoSize / th; + th = st::dlgPhotoSize; + } + } + pixw = tw; + pixh = th; + if (pixw < 1) pixw = 1; + if (pixh < 1) pixh = 1; + } + + if (page) { + title = page->title; + } + QVector parts = (page ? page->url : (urls.isEmpty() ? QString() : urls.at(0).url)).splitRef('/'); + if (!parts.isEmpty()) { + QStringRef domain = parts.at(0); + if (parts.size() > 2 && domain.endsWith(':') && parts.at(1).isEmpty()) { // http:// and others + domain = parts.at(2); + } + + parts = domain.split('@').back().split('.'); + if (parts.size() > 1) { + letter = parts.at(parts.size() - 2).at(0).toUpper(); + if (title.isEmpty()) { + title.reserve(parts.at(parts.size() - 2).size()); + title.append(letter).append(parts.at(parts.size() - 2).mid(1)); + } + } + } + titleWidth = st::webPageTitleFont->m.width(title); +} + +int32 OverviewInner::CachedLink::countHeight(int32 w) { + int32 result = 0; + if (!title.isEmpty()) { + result += st::webPageTitleFont->height; + } + if (!text.isEmpty()) { + result += qMin(3 * st::msgFont->height, text.countHeight(w - st::dlgPhotoSize - st::dlgPhotoPadding)); + } + result += urls.size() * st::msgFont->height; + return qMax(result, int(st::dlgPhotoSize)) + st::linksMargin * 2 + st::linksBorder; +} + // flick scroll taken from http://qt-project.org/doc/qt-4.8/demos-embedded-anomaly-src-flickcharm-cpp.html OverviewInner::OverviewInner(OverviewWidget *overview, ScrollArea *scroll, const PeerData *peer, MediaOverviewType type) : QWidget(0) @@ -43,6 +140,16 @@ OverviewInner::OverviewInner(OverviewWidget *overview, ScrollArea *scroll, const , _audioLeft(st::msgMargin.left()) , _audioWidth(st::msgMinWidth) , _audioHeight(st::mediaPadding.top() + st::mediaThumbSize + st::mediaPadding.bottom()) + , _linksLeft(st::linksSearchMargin.left()) + , _linksWidth(st::msgMinWidth) + , _search(this, st::dlgFilter, lang(lng_dlg_filter)) + , _cancelSearch(this, st::btnCancelSearch) + , _itemsToBeLoaded(LinksOverviewPerPage * 2) + , _inSearch(false) + , _searchFull(false) + , _searchRequest(0) + , _lastSearchId(0) + , _searchedCount(0) , _width(st::wndMinWidth) , _height(0) , _minHeight(0) @@ -53,6 +160,8 @@ OverviewInner::OverviewInner(OverviewWidget *overview, ScrollArea *scroll, const , _dragItemIndex(-1) , _mousedItem(0) , _mousedItemIndex(-1) + , _lnkOverIndex(0) + , _lnkDownIndex(0) , _dragWasInactive(false) , _dragSelFrom(0) , _dragSelTo(0) @@ -81,8 +190,18 @@ OverviewInner::OverviewInner(OverviewWidget *overview, ScrollArea *scroll, const mediaOverviewUpdated(); setMouseTracking(true); - if (_type == OverviewAudioDocuments) { + connect(&_cancelSearch, SIGNAL(clicked()), this, SLOT(onCancelSearch())); + connect(&_search, SIGNAL(cancelled()), this, SLOT(onCancel())); + connect(&_search, SIGNAL(changed()), this, SLOT(onSearchUpdate())); + _searchTimer.setSingleShot(true); + connect(&_searchTimer, SIGNAL(timeout()), this, SLOT(onSearchMessages())); + + _cancelSearch.hide(); + if (_type == OverviewLinks) { + _search.show(); + } else { + _search.hide(); } } @@ -165,6 +284,87 @@ void OverviewInner::fixItemIndex(int32 ¤t, MsgId msgId) const { } } +void OverviewInner::searchReceived(bool fromStart, const MTPmessages_Messages &result, mtpRequestId req) { + if (fromStart && !_search.text().isEmpty()) { + SearchQueries::iterator i = _searchQueries.find(req); + if (i != _searchQueries.cend()) { + _searchCache[i.value()] = result; + _searchQueries.erase(i); + } + } + + if (_searchRequest == req) { + const QVector *messages = 0; + switch (result.type()) { + case mtpc_messages_messages: { + App::feedUsers(result.c_messages_messages().vusers); + App::feedChats(result.c_messages_messages().vchats); + messages = &result.c_messages_messages().vmessages.c_vector().v; + _searchedCount = messages->size(); + } break; + + case mtpc_messages_messagesSlice: { + App::feedUsers(result.c_messages_messagesSlice().vusers); + App::feedChats(result.c_messages_messagesSlice().vchats); + messages = &result.c_messages_messagesSlice().vmessages.c_vector().v; + _searchedCount = result.c_messages_messagesSlice().vcount.v; + } break; + } + if (messages) { + if (messages->isEmpty()) { + _searchFull = true; + } + if (fromStart) { + _searchResults.clear(); + _lastSearchId = 0; + _itemsToBeLoaded = LinksOverviewPerPage * 2; + } + for (QVector::const_iterator i = messages->cbegin(), e = messages->cend(); i != e; ++i) { + HistoryItem *item = App::histories().addToBack(*i, -1); + _searchResults.push_front(item->id); + _lastSearchId = item->id; + } + mediaOverviewUpdated(); + } + + _searchRequest = 0; + _overview->onScroll(); + } +} + +bool OverviewInner::searchFailed(const RPCError &error, mtpRequestId req) { + if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false; + + if (_searchRequest == req) { + _searchRequest = 0; + _searchFull = true; + } + return true; +} + +OverviewInner::CachedLink *OverviewInner::cachedLink(HistoryItem *item) { + CachedLinks::const_iterator i = _links.constFind(item->id); + if (i == _links.cend()) i = _links.insert(item->id, new CachedLink(item)); + return i.value(); +} + +QString OverviewInner::urlByIndex(MsgId msgid, int32 index, int32 lnkIndex) const { + fixItemIndex(index, msgid); + if (index < 0 || !_items[index].link) return QString(); + + if (lnkIndex < 0 && _items[index].link->page) { + return _items[index].link->page->url; + } else if (lnkIndex > 0 && lnkIndex <= _items[index].link->urls.size()) { + return _items[index].link->urls.at(lnkIndex - 1).url; + } + return QString(); +} + +bool OverviewInner::urlIsEmail(const QString &url) const { + int32 at = url.indexOf('@'), slash = url.indexOf('/'); + return (at > 0) && (slash < 0 || slash > at); +} + bool OverviewInner::itemHasPoint(MsgId msgId, int32 index, int32 x, int32 y) const { fixItemIndex(index, msgId); if (index < 0) return false; @@ -177,6 +377,10 @@ bool OverviewInner::itemHasPoint(MsgId msgId, int32 index, int32 x, int32 y) con if (x >= _audioLeft && x < _audioLeft + _audioWidth && y >= 0 && y < _audioHeight) { return true; } + } else if (_type == OverviewLinks) { + if (x >= _linksLeft && x < _linksLeft + _linksWidth && y >= 0 && y < itemHeight(msgId, index)) { + return true; + } } else { HistoryItem *item = App::histItemById(msgId); HistoryMedia *media = item ? item->getMedia(true) : 0; @@ -201,6 +405,9 @@ int32 OverviewInner::itemHeight(MsgId msgId, int32 index) const { } fixItemIndex(index, msgId); + if (_type == OverviewLinks) { + return (index < 0) ? 0 : ((index + 1 < _items.size() ? _items[index + 1].y : (_height - _addToY)) - _items[index].y); + } return (index < 0) ? 0 : (_items[index].y - (index > 0 ? _items[index - 1].y : 0)); } @@ -249,11 +456,10 @@ void OverviewInner::updateMsg(MsgId itemId, int32 itemIndex) { update(int32(col * w), _addToY + int32(row * vsize), qCeil(w), vsize); } else if (_type == OverviewAudioDocuments) { update(_audioLeft, _addToY + int32(itemIndex * _audioHeight), _audioWidth, _audioHeight); + } else if (_type == OverviewLinks) { + update(_linksLeft, _addToY + _items[itemIndex].y, _linksWidth, itemHeight(itemId, itemIndex)); } else { - HistoryItem *item = App::histItemById(itemId); - HistoryMedia *media = item ? item->getMedia(true) : 0; - int32 w = _width - st::msgMargin.left() - st::msgMargin.right(); - if (media) update(0, _addToY + _height - _items[itemIndex].y, _width, media->countHeight(item, w) + st::msgMargin.top() + st::msgMargin.bottom()); + update(0, _addToY + _height - _items[itemIndex].y, _width, itemHeight(itemId, itemIndex)); } } } @@ -377,6 +583,11 @@ void OverviewInner::dragActionStart(const QPoint &screenPos, Qt::MouseButton but App::pressedLinkItem(App::hoveredLinkItem()); updateMsg(App::pressedLinkItem()); } + if (_lnkDownIndex != _lnkOverIndex) { + if (_dragItem) updateMsg(_dragItem, _dragItemIndex); + _lnkDownIndex = _lnkOverIndex; + if (_mousedItem) updateMsg(_mousedItem, _mousedItemIndex); + } _dragAction = NoDrag; _dragItem = _mousedItem; @@ -384,11 +595,11 @@ void OverviewInner::dragActionStart(const QPoint &screenPos, Qt::MouseButton but _dragStartPos = mapMouseToItem(mapFromGlobal(screenPos), _dragItem, _dragItemIndex); _dragWasInactive = App::wnd()->inactivePress(); if (_dragWasInactive) App::wnd()->inactivePress(false); - if (textlnkDown() && _selected.isEmpty()) { + if ((textlnkDown() || _lnkDownIndex) && _selected.isEmpty()) { _dragAction = PrepareDrag; } else if (!_selected.isEmpty()) { if (_selected.cbegin().value() == FullItemSel) { - if (_selected.constFind(_dragItem) != _selected.cend() && textlnkDown()) { + if (_selected.constFind(_dragItem) != _selected.cend() && (textlnkDown() || _lnkDownIndex)) { _dragAction = PrepareDrag; // start items drag } else { _dragAction = PrepareSelect; // start items select @@ -399,7 +610,7 @@ void OverviewInner::dragActionStart(const QPoint &screenPos, Qt::MouseButton but bool afterDragSymbol = false , uponSymbol = false; uint16 symbol = 0; if (!_dragWasInactive) { - if (textlnkDown()) { + if (textlnkDown() || _lnkDownIndex) { _dragSymbol = symbol; uint32 selStatus = (_dragSymbol << 16) | _dragSymbol; if (selStatus != FullItemSel && (_selected.isEmpty() || _selected.cbegin().value() != FullItemSel)) { @@ -439,6 +650,7 @@ void OverviewInner::dragActionCancel() { void OverviewInner::dragActionFinish(const QPoint &screenPos, Qt::MouseButton button) { TextLinkPtr needClick; + int32 needClickIndex = 0; dragActionUpdate(screenPos); @@ -447,6 +659,11 @@ void OverviewInner::dragActionFinish(const QPoint &screenPos, Qt::MouseButton bu needClick = textlnkDown(); } } + if (_lnkOverIndex) { + if (_lnkDownIndex == _lnkOverIndex && _dragAction != Dragging && !_selMode) { + needClickIndex = _lnkDownIndex; + } + } if (textlnkDown()) { updateMsg(App::pressedLinkItem()); textlnkDown(TextLinkPtr()); @@ -456,11 +673,29 @@ void OverviewInner::dragActionFinish(const QPoint &screenPos, Qt::MouseButton bu setCursor(_cursor); } } + if (_lnkDownIndex) { + updateMsg(_dragItem, _dragItemIndex); + _lnkDownIndex = 0; + if (!_lnkOverIndex && _cursor != style::cur_default) { + _cursor = style::cur_default; + setCursor(_cursor); + } + } if (needClick) { needClick->onClick(button); dragActionCancel(); return; } + if (needClickIndex) { + QString url = urlByIndex(_dragItem, _dragItemIndex, needClickIndex); + if (urlIsEmail(url)) { + EmailLink(url).onClick(button); + } else { + TextLink(url).onClick(button); + } + dragActionCancel(); + return; + } if (_dragAction == PrepareSelect && !needClick && !_dragWasInactive && !_selected.isEmpty() && _selected.cbegin().value() == FullItemSel) { SelectedItems::iterator i = _selected.find(_dragItem); if (i == _selected.cend() && _dragItem > 0) { @@ -525,6 +760,16 @@ void OverviewInner::onDragExec() { } else if (textlnkDown()) { sel = textlnkDown()->encoded(); if (!sel.isEmpty() && sel.at(0) != '/' && sel.at(0) != '@' && sel.at(0) != '#') { +// urls.push_back(QUrl::fromEncoded(sel.toUtf8())); // Google Chrome crashes in Mac OS X O_o + } + } else if (_lnkDownIndex) { + QString url = urlByIndex(_dragItem, _dragItemIndex, _lnkDownIndex); + if (urlIsEmail(url)) { + sel = EmailLink(url).encoded(); + } else { + sel = TextLink(url).encoded(); + } + if (!sel.isEmpty() && sel.at(0) != '/' && sel.at(0) != '@' && sel.at(0) != '#') { // urls.push_back(QUrl::fromEncoded(sel.toUtf8())); // Google Chrome crashes in Mac OS X O_o } } @@ -542,6 +787,7 @@ void OverviewInner::onDragExec() { } drag->setMimeData(mimeData); drag->exec(Qt::CopyAction); + dragActionUpdate(QCursor::pos()); return; } else { HistoryItem *pressedLnkItem = App::pressedLinkItem(), *pressedItem = App::pressedItem(); @@ -566,6 +812,7 @@ void OverviewInner::onDragExec() { drag->setMimeData(mimeData); drag->exec(Qt::CopyAction); + dragActionUpdate(QCursor::pos()); return; } } @@ -629,12 +876,22 @@ QPoint OverviewInner::mapMouseToItem(QPoint p, MsgId itemId, int32 itemIndex) { p.setY(p.y() - _addToY - row * (_vsize + st::overviewPhotoSkip) - st::overviewPhotoSkip); } else if (_type == OverviewAudioDocuments) { p.setY(p.y() - _addToY - itemIndex * _audioHeight); + } else if (_type == OverviewLinks) { + p.setY(p.y() - _addToY - _items[itemIndex].y); } else { p.setY(p.y() - _addToY - (_height - _items[itemIndex].y)); } return p; } +void OverviewInner::activate() { + if (_type == OverviewLinks) { + _search.setFocus(); + } else { + setFocus(); + } +} + void OverviewInner::clear() { _cached.clear(); } @@ -649,6 +906,27 @@ int32 OverviewInner::itemTop(MsgId msgId) const { return -1; } +void OverviewInner::preloadMore() { + if (_inSearch) { + if (!_searchRequest && !_searchFull) { + _searchRequest = MTP::send(MTPmessages_Search(_hist->peer->input, MTP_string(_searchQuery), MTP_inputMessagesFilterUrl(), MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(_lastSearchId), MTP_int(SearchPerPage)), rpcDone(&OverviewInner::searchReceived, !_lastSearchId), rpcFail(&OverviewInner::searchFailed)); + if (!_lastSearchId) { + _searchQueries.insert(_searchRequest, _searchQuery); + } + } + } else if (App::main()) { + App::main()->loadMediaBack(_hist->peer, _type, _type != OverviewLinks); + } +} + +bool OverviewInner::preloadLocal() { + if (_type != OverviewLinks) return false; + if (_itemsToBeLoaded >= _hist->_overview[_type].size()) return false; + _itemsToBeLoaded += LinksOverviewPerPage; + mediaOverviewUpdated(); + return true; +} + QPixmap OverviewInner::genPix(PhotoData *photo, int32 size) { size *= cIntRetinaFactor(); QImage img = (photo->full->loaded() ? photo->full : (photo->medium->loaded() ? photo->medium : photo->thumb))->pix().toImage(); @@ -680,6 +958,11 @@ void OverviewInner::paintEvent(QPaintEvent *e) { QPoint dogPos((_width - st::msgDogImg.pxWidth()) / 2, ((height() - st::msgDogImg.pxHeight()) * 4) / 9); p.drawPixmap(dogPos, *cChatDogImage()); return; + } else if (_inSearch && _searchResults.isEmpty() && _searchFull && !_searchTimer.isActive()) { + p.setFont(st::noContactsFont->f); + p.setPen(st::noContactsColor->p); + p.drawText(QRect(_linksLeft, _addToY, _linksWidth, _addToY), lng_search_found_results(lt_count, 0), style::al_center); + return; } int32 selfrom = -1, selto = -1; @@ -766,9 +1049,9 @@ void OverviewInner::paintEvent(QPaintEvent *e) { } if (sel == FullItemSel) { p.fillRect(QRect(pos.x(), pos.y(), _vsize, _vsize), st::overviewPhotoSelectOverlay->b); - p.drawPixmap(QPoint(pos.x() + _vsize - st::overviewPhotoChecked.pxWidth(), pos.y() + _vsize - st::overviewPhotoChecked.pxHeight()), App::sprite(), st::overviewPhotoChecked); + p.drawPixmap(QPoint(pos.x() + _vsize - st::overviewPhotoCheck.pxWidth(), pos.y() + _vsize - st::overviewPhotoCheck.pxHeight()), App::sprite(), st::overviewPhotoChecked); } else if (_selMode/* || (selfrom < count && selfrom <= selto && 0 <= selto)*/) { - p.drawPixmap(QPoint(pos.x() + _vsize - st::overviewPhotoChecked.pxWidth(), pos.y() + _vsize - st::overviewPhotoChecked.pxHeight()), App::sprite(), st::overviewPhotoCheck); + p.drawPixmap(QPoint(pos.x() + _vsize - st::overviewPhotoCheck.pxWidth(), pos.y() + _vsize - st::overviewPhotoCheck.pxHeight()), App::sprite(), st::overviewPhotoCheck); } } break; } @@ -800,6 +1083,95 @@ void OverviewInner::paintEvent(QPaintEvent *e) { static_cast(m)->drawInPlaylist(p, item, (sel == FullItemSel), ((_menu ? (App::contextItem() ? App::contextItem()->id : 0) : _selectedMsgId) == item->id), _audioWidth); p.translate(0, _audioHeight); } + } else if (_type == OverviewLinks) { + p.translate(_linksLeft, _addToY); + int32 y = 0, w = _linksWidth; + for (int32 i = 0, l = _items.size(); i < l; ++i) { + if (i + 1 == l || _addToY + _items[i + 1].y > r.top()) { + int32 left = st::dlgPhotoSize + st::dlgPhotoPadding, top = st::linksMargin + st::linksBorder, curY = _items[i].y; + if (_addToY + curY >= r.bottom()) break; + + p.translate(0, curY - y); + if (_items[i].msgid) { // draw item + CachedLink *lnk = _items[i].link; + WebPageData *page = lnk->page; + if (page && page->photo) { + QPixmap pix; + if (page->photo->full->loaded()) { + pix = page->photo->full->pixSingle(lnk->pixw, lnk->pixh, st::dlgPhotoSize, st::dlgPhotoSize); + } else if (page->photo->medium->loaded()) { + pix = page->photo->medium->pixSingle(lnk->pixw, lnk->pixh, st::dlgPhotoSize, st::dlgPhotoSize); + } else { + pix = page->photo->thumb->pixBlurredSingle(lnk->pixw, lnk->pixh, st::dlgPhotoSize, st::dlgPhotoSize); + } + p.drawPixmap(0, top, pix); + } else { + int32 index = lnk->letter.isEmpty() ? 0 : (lnk->letter.at(0).unicode() % 4); + switch (index) { + case 0: App::roundRect(p, QRect(0, top, st::dlgPhotoSize, st::dlgPhotoSize), st::mvDocRedColor, DocRedCorners); break; + case 1: App::roundRect(p, QRect(0, top, st::dlgPhotoSize, st::dlgPhotoSize), st::mvDocYellowColor, DocYellowCorners); break; + case 2: App::roundRect(p, QRect(0, top, st::dlgPhotoSize, st::dlgPhotoSize), st::mvDocGreenColor, DocGreenCorners); break; + case 3: App::roundRect(p, QRect(0, top, st::dlgPhotoSize, st::dlgPhotoSize), st::mvDocBlueColor, DocBlueCorners); break; + } + + if (!lnk->letter.isEmpty()) { + p.setFont(st::linksLetterFont->f); + p.setPen(st::white->p); + p.drawText(QRect(0, top, st::dlgPhotoSize, st::dlgPhotoSize), lnk->letter, style::al_center); + } + } + + uint32 sel = 0; + if (i >= selfrom && i <= selto) { + sel = (_dragSelecting && _items[i].msgid > 0) ? FullItemSel : 0; + } else if (hasSel) { + SelectedItems::const_iterator j = _selected.constFind(_items[i].msgid); + if (j != selEnd) { + sel = j.value(); + } + } + if (sel == FullItemSel) { + App::roundRect(p, QRect(0, top, st::dlgPhotoSize, st::dlgPhotoSize), st::overviewPhotoSelectOverlay, PhotoSelectOverlayCorners); + p.drawPixmap(QPoint(st::dlgPhotoSize - st::linksPhotoCheck.pxWidth(), top + st::dlgPhotoSize - st::linksPhotoCheck.pxHeight()), App::sprite(), st::linksPhotoChecked); + } else if (_selMode/* || (selfrom < count && selfrom <= selto && 0 <= selto)*/) { + p.drawPixmap(QPoint(st::dlgPhotoSize - st::linksPhotoCheck.pxWidth(), top + st::dlgPhotoSize - st::linksPhotoCheck.pxHeight()), App::sprite(), st::linksPhotoCheck); + } + + if (!lnk->title.isEmpty() && lnk->text.isEmpty() && lnk->urls.size() == 1) { + top += (st::dlgPhotoSize - st::webPageTitleFont->height - st::msgFont->height) / 2; + } + + p.setPen(st::black->p); + p.setFont(st::webPageTitleFont->f); + if (!lnk->title.isEmpty()) { + p.drawText(left, top + st::webPageTitleFont->ascent, (_linksWidth - left < lnk->titleWidth) ? st::webPageTitleFont->m.elidedText(lnk->title, Qt::ElideRight, _linksWidth - left) : lnk->title); + top += st::webPageTitleFont->height; + } + p.setFont(st::msgFont->f); + if (!lnk->text.isEmpty()) { + lnk->text.drawElided(p, left, top, _linksWidth - left, 3); + top += qMin(st::msgFont->height * 3, lnk->text.countHeight(_linksWidth - left)); + } + + p.setPen(st::btnYesColor->p); + for (int32 j = 0, c = lnk->urls.size(); j < c; ++j) { + bool sel = (_mousedItem == _items[i].msgid && j + 1 == _lnkOverIndex); + if (sel) p.setFont(st::msgFont->underline()->f); + p.drawText(left, top + st::msgFont->ascent, (_linksWidth - left < lnk->urls[j].width) ? st::msgFont->m.elidedText(lnk->urls[j].text, Qt::ElideRight, _linksWidth - left) : lnk->urls[j].text); + if (sel) p.setFont(st::msgFont->f); + top += st::msgFont->height; + } + p.fillRect(left, _items[i].y - curY, _linksWidth - left, st::linksBorder, st::linksBorderColor->b); + } else { + QString str = langDayOfMonth(_items[i].date); + + p.setPen(st::linksDateColor->p); + p.setFont(st::msgFont->f); + p.drawText(0, st::linksDateMargin + st::msgFont->ascent, str); + } + y = curY; + } + } } else { p.translate(0, st::msgMargin.top() + _addToY); int32 y = 0, w = _width - st::msgMargin.left() - st::msgMargin.right(); @@ -876,6 +1248,7 @@ void OverviewInner::onUpdateSelected() { QPoint m(_overview->clampMousePosition(mousePos)); TextLinkPtr lnk; + int32 lnkIndex = 0; // for OverviewLinks HistoryItem *item = 0; int32 index = -1; int32 newsel = 0; @@ -888,8 +1261,6 @@ void OverviewInner::onUpdateSelected() { bool upon = true; int32 i = row * _photosInRow + inRow - _photosToAdd, count = _hist->_overview[_type].size(); - if (!count) return; - if (i < 0) { i = 0; upon = false; @@ -898,25 +1269,24 @@ void OverviewInner::onUpdateSelected() { i = count - 1; upon = false; } - MsgId msgid = _hist->_overview[_type][i]; - HistoryItem *histItem = App::histItemById(msgid); - if (histItem) { - item = histItem; - index = i; - if (upon && m.x() >= inRow * w + st::overviewPhotoSkip && m.x() < inRow * w + st::overviewPhotoSkip + _vsize) { - if (m.y() >= _addToY + row * vsize + st::overviewPhotoSkip && m.y() < _addToY + (row + 1) * vsize + st::overviewPhotoSkip) { - HistoryMedia *media = item->getMedia(true); - if (media && media->type() == MediaTypePhoto) { - lnk = static_cast(media)->lnk(); + if (i >= 0) { + MsgId msgid = _hist->_overview[_type][i]; + HistoryItem *histItem = App::histItemById(msgid); + if (histItem) { + item = histItem; + index = i; + if (upon && m.x() >= inRow * w + st::overviewPhotoSkip && m.x() < inRow * w + st::overviewPhotoSkip + _vsize) { + if (m.y() >= _addToY + row * vsize + st::overviewPhotoSkip && m.y() < _addToY + (row + 1) * vsize + st::overviewPhotoSkip) { + HistoryMedia *media = item->getMedia(true); + if (media && media->type() == MediaTypePhoto) { + lnk = static_cast(media)->lnk(); + } } } } - } else { - return; } } else if (_type == OverviewAudioDocuments) { int32 i = int32((m.y() - _addToY) / _audioHeight), count = _hist->_overview[_type].size(); - if (!count) return; bool upon = true; if (m.y() < _addToY) { @@ -927,42 +1297,82 @@ void OverviewInner::onUpdateSelected() { i = count - 1; upon = false; } - MsgId msgid = _hist->_overview[_type][i]; - HistoryItem *histItem = App::histItemById(msgid); - if (histItem) { - item = histItem; - index = i; - if (upon && m.x() >= _audioLeft && m.x() < _audioLeft + _audioWidth) { - HistoryMedia *media = item->getMedia(true); - if (media && media->type() == MediaTypeDocument) { - lnk = static_cast(media)->linkInPlaylist(); - newsel = item->id; + if (i >= 0) { + MsgId msgid = _hist->_overview[_type][i]; + HistoryItem *histItem = App::histItemById(msgid); + if (histItem) { + item = histItem; + index = i; + if (upon && m.x() >= _audioLeft && m.x() < _audioLeft + _audioWidth) { + HistoryMedia *media = item->getMedia(true); + if (media && media->type() == MediaTypeDocument) { + lnk = static_cast(media)->linkInPlaylist(); + newsel = item->id; + } } } - if (newsel != _selectedMsgId) { - updateMsg(App::histItemById(_selectedMsgId)); - _selectedMsgId = newsel; - updateMsg(item); + } + if (newsel != _selectedMsgId) { + if (_selectedMsgId) updateMsg(App::histItemById(_selectedMsgId)); + _selectedMsgId = newsel; + updateMsg(item); + } + } else if (_type == OverviewLinks) { + int32 w = _width - st::msgMargin.left() - st::msgMargin.right(); + for (int32 i = 0, l = _items.size(); i < l; ++i) { + if ((i + 1 == l) || (_addToY + _items[i + 1].y > m.y())) { + int32 left = st::dlgPhotoSize + st::dlgPhotoPadding, y = _addToY + _items[i].y; + if (!_items[i].msgid) { // day item + int32 h = 2 * st::linksDateMargin + st::msgFont->height;// itemHeight(_items[i].msgid, i); + if (i > 0 && ((y + h / 2) >= m.y() || i == _items.size() - 1)) { + --i; + if (!_items[i].msgid) break; // wtf + y = _addToY + _items[i].y; + } else if (i < _items.size() - 1 && ((y + h / 2) < m.y() || !i)) { + ++i; + if (!_items[i].msgid) break; // wtf + y = _addToY + _items[i].y; + } else { + break; // wtf + } + } + + HistoryItem *histItem = App::histItemById(_items[i].msgid); + if (histItem) { + item = histItem; + index = i; + + int32 top = y + st::linksMargin + st::linksBorder, left = _linksLeft + st::dlgPhotoSize + st::dlgPhotoPadding, w = _linksWidth - st::dlgPhotoSize - st::dlgPhotoPadding; + if (!_items[i].link->title.isEmpty() && _items[i].link->text.isEmpty() && _items[i].link->urls.size() == 1) { + top += (st::dlgPhotoSize - st::webPageTitleFont->height - st::msgFont->height) / 2; + } + if (QRect(_linksLeft, y + st::linksMargin + st::linksBorder, st::dlgPhotoSize, st::dlgPhotoSize).contains(m)) { + lnkIndex = -1; + } else if (!_items[i].link->title.isEmpty() && QRect(left, top, qMin(w, _items[i].link->titleWidth), st::webPageTitleFont->height).contains(m)) { + lnkIndex = -1; + } else { + if (!_items[i].link->title.isEmpty()) top += st::webPageTitleFont->height; + if (!_items[i].link->text.isEmpty()) top += qMin(st::msgFont->height * 3, _items[i].link->text.countHeight(w)); + for (int32 j = 0, c = _items[i].link->urls.size(); j < c; ++j) { + if (QRect(left, top, qMin(w, _items[i].link->urls[j].width), st::msgFont->height).contains(m)) { + lnkIndex = j + 1; + break; + } + top += st::msgFont->height; + } + } + } + break; } - } else { - if (newsel != _selectedMsgId) { - updateMsg(App::histItemById(_selectedMsgId)); - _selectedMsgId = newsel; - } - return; } } else { int32 w = _width - st::msgMargin.left() - st::msgMargin.right(); - if (_items.isEmpty()) return; - for (int32 i = _items.size(); i > 0;) { --i; if (!i || (_addToY + _height - _items[i - 1].y > m.y())) { int32 y = _addToY + _height - _items[i].y; - if (item) break; - if (!_items[i].msgid) { // day item - int32 h = itemHeight(_items[i].msgid, i); + int32 h = st::msgServiceFont->height + st::msgServicePadding.top() + st::msgServicePadding.bottom() + st::msgServiceMargin.top() + st::msgServiceMargin.bottom(); // itemHeight(_items[i].msgid, i); if (i > 0 && ((y + h / 2) < m.y() || i == _items.size() - 1)) { --i; if (!_items[i].msgid) break; // wtf @@ -995,13 +1405,14 @@ void OverviewInner::onUpdateSelected() { media->getState(link, cursorState, m.x() - left, m.y() - y - st::msgMargin.top(), item, w); if (link) lnk = link; } - } else { - return; } + break; } } } + MsgId oldMousedItem = _mousedItem; + int32 oldMousedItemIndex = _mousedItemIndex; _mousedItem = item ? item->id : 0; _mousedItemIndex = index; m = mapMouseToItem(m, _mousedItem, _mousedItemIndex); @@ -1017,11 +1428,17 @@ void OverviewInner::onUpdateSelected() { } else { App::mousedItem(item); } + if (lnkIndex != _lnkOverIndex || _mousedItem != oldMousedItem) { + lnkChanged = true; + if (oldMousedItem) updateMsg(App::histItemById(oldMousedItem)); + _lnkOverIndex = lnkIndex; + if (item) updateMsg(item); + } fixItemIndex(_dragItemIndex, _dragItem); fixItemIndex(_mousedItemIndex, _mousedItem); if (_dragAction == NoDrag) { - if (lnk) { + if (lnk || lnkIndex) { cur = style::cur_pointer; } } else { @@ -1037,15 +1454,15 @@ void OverviewInner::onUpdateSelected() { _dragAction = Selecting; } } - cur = textlnkDown() ? style::cur_pointer : style::cur_default; + cur = (textlnkDown() || _lnkDownIndex) ? style::cur_pointer : style::cur_default; if (_dragAction == Selecting) { - if (_mousedItem == _dragItem && lnk && !_selected.isEmpty() && _selected.cbegin().value() != FullItemSel) { + if (_mousedItem == _dragItem && (lnk || lnkIndex) && !_selected.isEmpty() && _selected.cbegin().value() != FullItemSel) { bool afterSymbol = false, uponSymbol = false; uint16 second = 0; _selected[_dragItem] = 0; updateDragSelection(0, -1, 0, -1, false); } else { - bool selectingDown = ((_type == OverviewPhotos || _type == OverviewAudioDocuments) ? (_mousedItemIndex > _dragItemIndex) : (_mousedItemIndex < _dragItemIndex)) || (_mousedItemIndex == _dragItemIndex && (_type == OverviewPhotos ? (_dragStartPos.x() < m.x()) : (_dragStartPos.y() < m.y()))); + bool selectingDown = ((_type == OverviewPhotos || _type == OverviewAudioDocuments || _type == OverviewLinks) ? (_mousedItemIndex > _dragItemIndex) : (_mousedItemIndex < _dragItemIndex)) || (_mousedItemIndex == _dragItemIndex && (_type == OverviewPhotos ? (_dragStartPos.x() < m.x()) : (_dragStartPos.y() < m.y()))); MsgId dragSelFrom = _dragItem, dragSelTo = _mousedItem; int32 dragSelFromIndex = _dragItemIndex, dragSelToIndex = _mousedItemIndex; if (!itemHasPoint(dragSelFrom, dragSelFromIndex, _dragStartPos.x(), _dragStartPos.y())) { // maybe exclude dragSelFrom @@ -1058,6 +1475,10 @@ void OverviewInner::onUpdateSelected() { if (_dragStartPos.y() >= itemHeight(dragSelFrom, dragSelFromIndex) || ((_mousedItem == dragSelFrom) && (m.y() < _dragStartPos.y() + QApplication::startDragDistance()))) { moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, 1); } + } else if (_type == OverviewLinks) { + if (_dragStartPos.y() >= itemHeight(dragSelFrom, dragSelFromIndex) || ((_mousedItem == dragSelFrom) && (m.y() < _dragStartPos.y() + QApplication::startDragDistance()))) { + moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, 1); + } } else { if (_dragStartPos.y() >= (itemHeight(dragSelFrom, dragSelFromIndex) - st::msgMargin.bottom()) || ((_mousedItem == dragSelFrom) && (m.y() < _dragStartPos.y() + QApplication::startDragDistance()))) { moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, -1); @@ -1072,6 +1493,10 @@ void OverviewInner::onUpdateSelected() { if (_dragStartPos.y() < 0 || ((_mousedItem == dragSelFrom) && (m.y() >= _dragStartPos.y() - QApplication::startDragDistance()))) { moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, -1); } + } else if (_type == OverviewLinks) { + if (_dragStartPos.y() < 0 || ((_mousedItem == dragSelFrom) && (m.y() >= _dragStartPos.y() - QApplication::startDragDistance()))) { + moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, -1); + } } else { if (_dragStartPos.y() < st::msgMargin.top() || ((_mousedItem == dragSelFrom) && (m.y() >= _dragStartPos.y() - QApplication::startDragDistance()))) { moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, 1); @@ -1089,6 +1514,10 @@ void OverviewInner::onUpdateSelected() { if (m.y() < 0) { moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, 1); } + } else if (_type == OverviewLinks) { + if (m.y() < 0) { + moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, -1); + } } else { if (m.y() < st::msgMargin.top()) { moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, 1); @@ -1100,6 +1529,10 @@ void OverviewInner::onUpdateSelected() { moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, 1); } } else if (_type == OverviewAudioDocuments) { + if (m.y() >= itemHeight(dragSelTo, dragSelToIndex)) { + moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, -1); + } + } else if (_type == OverviewLinks) { if (m.y() >= itemHeight(dragSelTo, dragSelToIndex)) { moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, 1); } @@ -1125,7 +1558,7 @@ void OverviewInner::onUpdateSelected() { } else if (_dragAction == Dragging) { } - if (textlnkDown()) { + if (textlnkDown() || _lnkDownIndex) { cur = style::cur_pointer; } else if (_dragAction == Selecting && !_selected.isEmpty() && _selected.cbegin().value() != FullItemSel) { if (!_dragSelFrom || !_dragSelTo) { @@ -1176,12 +1609,12 @@ void OverviewInner::mouseReleaseEvent(QMouseEvent *e) { } void OverviewInner::keyPressEvent(QKeyEvent *e) { - if (e->key() == Qt::Key_Escape || e->key() == Qt::Key_Back) { - if (_selected.isEmpty() || e->key() == Qt::Key_Back) { - App::main()->showBackFromStack(); - } else { - _overview->onClearSelected(); - } + if ((_search.isHidden() || !_search.hasFocus()) && !_overview->isHidden() && e->key() == Qt::Key_Escape) { + onCancel(); + } else if (e->key() == Qt::Key_Back) { + App::main()->showBackFromStack(); + } else if (e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter) { + onSearchMessages(); } } @@ -1210,6 +1643,10 @@ void OverviewInner::resizeEvent(QResizeEvent *e) { _width = width(); _audioWidth = qMin(_width - st::profilePadding.left() - st::profilePadding.right(), int(st::profileMaxWidth)); _audioLeft = (_width - _audioWidth) / 2; + _linksWidth = qMin(_width - st::linksSearchMargin.left() - st::linksSearchMargin.right(), int(st::linksMaxWidth)); + _linksLeft = (_width - _linksWidth) / 2; + _search.setGeometry(_linksLeft, st::linksSearchMargin.top(), _linksWidth, _search.height()); + _cancelSearch.move(_linksLeft + _linksWidth - _cancelSearch.width(), _search.y()); showAll(true); onUpdateSelected(); update(); @@ -1226,13 +1663,21 @@ void OverviewInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { dragActionUpdate(e->globalPos()); } + bool ignoreMousedItem = false; + if (_mousedItem > 0) { + QPoint m = mapMouseToItem(mapFromGlobal(e->globalPos()), _mousedItem, _mousedItemIndex); + if (m.y() < 0 || m.y() >= itemHeight(_mousedItem, _mousedItemIndex)) { + ignoreMousedItem = true; + } + } + // -2 - has full selected items, but not over, 0 - no selection, 2 - over full selected items int32 isUponSelected = 0, hasSelected = 0; if (!_selected.isEmpty()) { isUponSelected = -1; if (_selected.cbegin().value() == FullItemSel) { hasSelected = 2; - if (App::hoveredLinkItem() && _selected.constFind(App::hoveredLinkItem()->id) != _selected.cend()) { + if (!ignoreMousedItem && App::mousedItem() && _selected.constFind(App::mousedItem()->id) != _selected.cend()) { isUponSelected = 2; } else { isUponSelected = -2; @@ -1282,8 +1727,23 @@ void OverviewInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { App::contextItem(App::hoveredLinkItem()); updateMsg(App::contextItem()); if (_selectedMsgId > 0) updateMsg(App::histItemById(_selectedMsgId)); - } else if (App::mousedItem() && App::mousedItem()->id == _mousedItem) { + } else if (!ignoreMousedItem && App::mousedItem() && App::mousedItem()->id == _mousedItem) { + _contextMenuUrl = _lnkOverIndex ? urlByIndex(_mousedItem, _mousedItemIndex, _lnkOverIndex) : QString(); _menu = new ContextMenu(_overview); + if ((_contextMenuLnk && dynamic_cast(_contextMenuLnk.data())) || (!_contextMenuUrl.isEmpty() && !urlIsEmail(_contextMenuUrl))) { + _menu->addAction(lang(lng_context_open_link), this, SLOT(openContextUrl()))->setEnabled(true); + _menu->addAction(lang(lng_context_copy_link), this, SLOT(copyContextUrl()))->setEnabled(true); + } else if ((_contextMenuLnk && dynamic_cast(_contextMenuLnk.data())) || (!_contextMenuUrl.isEmpty() && urlIsEmail(_contextMenuUrl))) { + _menu->addAction(lang(lng_context_open_email), this, SLOT(openContextUrl()))->setEnabled(true); + _menu->addAction(lang(lng_context_copy_email), this, SLOT(copyContextUrl()))->setEnabled(true); + } else if (_contextMenuLnk && dynamic_cast(_contextMenuLnk.data())) { + _menu->addAction(lang(lng_context_open_mention), this, SLOT(openContextUrl()))->setEnabled(true); + _menu->addAction(lang(lng_context_copy_mention), this, SLOT(copyContextUrl()))->setEnabled(true); + } else if (_contextMenuLnk && dynamic_cast(_contextMenuLnk.data())) { + _menu->addAction(lang(lng_context_open_hashtag), this, SLOT(openContextUrl()))->setEnabled(true); + _menu->addAction(lang(lng_context_copy_hashtag), this, SLOT(copyContextUrl()))->setEnabled(true); + } else { + } _menu->addAction(lang(lng_context_to_msg), this, SLOT(goToMessage()))->setEnabled(true); if (isUponSelected > 1) { _menu->addAction(lang(lng_context_forward_selected), _overview, SLOT(onForwardSelected())); @@ -1313,7 +1773,13 @@ void OverviewInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { int32 OverviewInner::resizeToWidth(int32 nwidth, int32 scrollTop, int32 minHeight) { if (width() == nwidth && minHeight == _minHeight) return scrollTop; _minHeight = minHeight; - _addToY = (_type == OverviewAudioDocuments) ? st::playlistPadding : ((_height < _minHeight) ? (_minHeight - _height) : 0); + if (_type == OverviewAudioDocuments) { + _addToY = st::playlistPadding; + } else if (_type == OverviewLinks) { + _addToY = st::linksSearchMargin.top() + _search.height() + st::linksSearchMargin.bottom(); + } else { + _addToY = (_height < _minHeight) ? (_minHeight - _height) : 0; + } if (_type == OverviewPhotos && _resizeIndex < 0) { _resizeIndex = _photosInRow * ((scrollTop + minHeight) / int32(_vsize + st::overviewPhotoSkip)) + _photosInRow - 1; _resizeSkip = (scrollTop + minHeight) - ((scrollTop + minHeight) / int32(_vsize + st::overviewPhotoSkip)) * int32(_vsize + st::overviewPhotoSkip); @@ -1344,9 +1810,16 @@ void OverviewInner::switchType(MediaOverviewType type) { _selected.clear(); _dragItemIndex = _mousedItemIndex = _dragSelFromIndex = _dragSelToIndex = -1; _dragItem = _mousedItem = _dragSelFrom = _dragSelTo = 0; + _lnkOverIndex = _lnkDownIndex = 0; _items.clear(); _cached.clear(); _type = type; + if (_type == OverviewLinks) { + _search.show(); + } else { + _search.hide(); + } + _cancelSearch.hide(); } mediaOverviewUpdated(); if (App::wnd()) App::wnd()->update(); @@ -1357,10 +1830,23 @@ void OverviewInner::setSelectMode(bool enabled) { } void OverviewInner::openContextUrl() { - HistoryItem *was = App::hoveredLinkItem(); - App::hoveredLinkItem(App::contextItem()); - _contextMenuLnk->onClick(Qt::LeftButton); - App::hoveredLinkItem(was); + if (_contextMenuLnk) { + HistoryItem *was = App::hoveredLinkItem(); + App::hoveredLinkItem(App::contextItem()); + _contextMenuLnk->onClick(Qt::LeftButton); + App::hoveredLinkItem(was); + } else if (urlIsEmail(_contextMenuUrl)) { + EmailLink(_contextMenuUrl).onClick(Qt::LeftButton); + } else { + TextLink(_contextMenuUrl).onClick(Qt::LeftButton); + } +} + +void OverviewInner::copyContextUrl() { + QString enc = _contextMenuLnk ? _contextMenuLnk->encoded() : _contextMenuUrl; + if (!enc.isEmpty()) { + QApplication::clipboard()->setText(enc); + } } void OverviewInner::goToMessage() { @@ -1433,9 +1919,88 @@ void OverviewInner::openContextFile() { if (lnkDocument) DocumentOpenLink(lnkDocument->document()).onClick(Qt::LeftButton); } +bool OverviewInner::onSearchMessages(bool searchCache) { + QString q = _search.text().trimmed(); + if (q.isEmpty()) { + if (_searchRequest) { + _searchRequest = 0; + } + return true; + } + if (searchCache) { + SearchCache::const_iterator i = _searchCache.constFind(q); + if (i != _searchCache.cend()) { + _searchQuery = q; + _searchFull = false; + _searchRequest = 0; + searchReceived(true, i.value(), 0); + return true; + } + } else if (_searchQuery != q) { + _searchQuery = q; + _searchFull = false; + _searchRequest = MTP::send(MTPmessages_Search(_hist->peer->input, MTP_string(_searchQuery), MTP_inputMessagesFilterUrl(), MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(SearchPerPage)), rpcDone(&OverviewInner::searchReceived, true), rpcFail(&OverviewInner::searchFailed)); + _searchQueries.insert(_searchRequest, _searchQuery); + } + return false; +} + +void OverviewInner::onNeedSearchMessages() { + if (!onSearchMessages(true)) { + _searchTimer.start(AutoSearchTimeout); + if (_inSearch && _searchFull && _searchResults.isEmpty()) { + parentWidget()->update(); + } + } +} + +void OverviewInner::onSearchUpdate() { + QString filterText = _search.text().trimmed(); + bool inSearch = !filterText.isEmpty(), changed = (inSearch != _inSearch); + _inSearch = inSearch; + + onNeedSearchMessages(); + + if (filterText.isEmpty()) { + _searchCache.clear(); + _searchQueries.clear(); + _searchQuery = QString(); + _searchResults.clear(); + _cancelSearch.hide(); + } else if (_cancelSearch.isHidden()) { + _cancelSearch.show(); + } + + if (changed) { + _itemsToBeLoaded = LinksOverviewPerPage * 2; + mediaOverviewUpdated(); + } + _overview->scrollReset(); +} + +void OverviewInner::onCancel() { + if (_selected.isEmpty()) { + if (onCancelSearch()) return; + App::main()->showBackFromStack(); + } else { + _overview->onClearSelected(); + } +} + +bool OverviewInner::onCancelSearch() { + if (_search.isHidden()) return false; + bool clearing = !_search.text().isEmpty(); + _cancelSearch.hide(); + _search.clear(); + _search.updatePlaceholder(); + onSearchUpdate(); + return clearing; +} + void OverviewInner::onMenuDestroy(QObject *obj) { if (_menu == obj) { _menu = 0; + dragActionUpdate(QCursor::pos()); updateMsg(App::contextItem()); if (_selectedMsgId > 0) updateMsg(App::histItemById(_selectedMsgId)); } @@ -1503,7 +2068,85 @@ void OverviewInner::onTouchScrollTimer() { void OverviewInner::mediaOverviewUpdated(bool fromResize) { int32 oldHeight = _height; - if (_type != OverviewPhotos && _type != OverviewAudioDocuments) { + if (_type == OverviewLinks) { + History::MediaOverview &o(_inSearch ? _searchResults : _hist->_overview[_type]); + int32 l = o.size(), tocheck = qMin(l, _itemsToBeLoaded); + _items.reserve(2 * l); // day items + + int32 y = 0, in = 0; + bool allGood = true; + QDate prevDate; + for (int32 i = 0; i < tocheck; ++i) { + MsgId msgid = o.at(l - i - 1); + if (allGood) { + if (_items.size() > in && _items.at(in).msgid == msgid) { + prevDate = _items.at(in).date; + if (fromResize) { + _items[in].y = y; + y += _items[in].link->countHeight(_linksWidth); + } else { + y = (in + 1 < _items.size()) ? _items.at(in + 1).y : _height; + } + ++in; + continue; + } + if (_items.size() > in + 1 && !_items.at(in).msgid && _items.at(in + 1).msgid == msgid) { // day item + if (fromResize) { + _items[in].y = y; + y += st::msgFont->height + st::linksDateMargin * 2 + st::linksBorder; + } + ++in; + prevDate = _items.at(in).date; + if (fromResize) { + _items[in].y = y; + y += _items[in].link->countHeight(_linksWidth); + } else { + y = (in + 1 < _items.size()) ? _items.at(in + 1).y : _height; + } + ++in; + continue; + } + allGood = false; + } + HistoryItem *item = App::histItemById(msgid); + + QDate date = item->date.date(); + if (!in || (in > 0 && date != prevDate)) { + if (_items.size() > in) { + _items[in].msgid = 0; + _items[in].date = date; + _items[in].y = y; + } else { + _items.push_back(CachedItem(0, date, y)); + } + y += st::msgFont->height + st::linksDateMargin * 2 + st::linksBorder; + ++in; + prevDate = date; + } + + if (_items.size() > in) { + _items[in] = CachedItem(item->id, item->date.date(), y); + _items[in].link = cachedLink(item); + y += _items[in].link->countHeight(_linksWidth); + } else { + _items.push_back(CachedItem(item->id, item->date.date(), y)); + _items.back().link = cachedLink(item); + y += _items.back().link->countHeight(_linksWidth); + } + ++in; + } + if (_items.size() != in) { + _items.resize(in); + } + if (_height != _addToY + y + st::linksSearchMargin.top()) { + _height = _addToY + y + st::linksSearchMargin.top(); + if (!fromResize) { + resize(width(), _minHeight > _height ? _minHeight : _height); + } + } + dragActionUpdate(QCursor::pos()); + update(); + } else if (_type != OverviewPhotos && _type != OverviewAudioDocuments) { History::MediaOverview &o(_hist->_overview[_type]); int32 l = o.size(); _items.reserve(2 * l); // day items @@ -1598,7 +2241,7 @@ void OverviewInner::mediaOverviewUpdated(bool fromResize) { if (_height != y) { _height = y; if (!fromResize) { - _addToY = (_type == OverviewAudioDocuments) ? st::playlistPadding : ((_height < _minHeight) ? (_minHeight - _height) : 0); + _addToY = (_height < _minHeight) ? (_minHeight - _height) : 0; resize(width(), _minHeight > _height ? _minHeight : _height); } } @@ -1611,7 +2254,7 @@ void OverviewInner::mediaOverviewUpdated(bool fromResize) { if (!fromResize) { resizeEvent(0); - if (_height != oldHeight) { + if (_height != oldHeight && _type != OverviewLinks) { _overview->scrollBy(_height - oldHeight); } } @@ -1630,6 +2273,19 @@ void OverviewInner::changingMsgId(HistoryItem *row, MsgId newId) { break; } } + if (_links.contains(row->id) && row->id != newId) { + if (_links.contains(newId)) { + for (CachedItems::iterator i = _items.begin(), e = _items.end(); i != e; ++i) { + if (i->msgid == newId && i->link) { + i->link = _links[row->id]; + break; + } + } + } + _links[newId] = _links[row->id]; + delete _links[row->id]; + _links.remove(row->id); + } for (CachedItems::iterator i = _items.begin(), e = _items.end(); i != e; ++i) { if (i->msgid == row->id) { i->msgid = newId; @@ -1665,7 +2321,7 @@ void OverviewInner::itemRemoved(HistoryItem *item) { } void OverviewInner::itemResized(HistoryItem *item, bool scrollToIt) { - if (_type != OverviewPhotos && _type != OverviewAudioDocuments) { + if (_type != OverviewPhotos && _type != OverviewAudioDocuments && _type != OverviewLinks) { HistoryMedia *media = item ? item->getMedia(true) : 0; if (!media) return; @@ -1683,7 +2339,7 @@ void OverviewInner::itemResized(HistoryItem *item, bool scrollToIt) { _items[j].y += newh; } _height = _items[l - 1].y; - _addToY = (_type == OverviewAudioDocuments) ? st::playlistPadding : ((_height < _minHeight) ? (_minHeight - _height) : 0); + _addToY = (_height < _minHeight) ? (_minHeight - _height) : 0; resize(width(), _minHeight > _height ? _minHeight : _height); if (scrollToIt) { if (_addToY + _height - from > _scroll->scrollTop() + _scroll->height()) { @@ -1718,12 +2374,17 @@ void OverviewInner::msgUpdated(const HistoryItem *msg) { if (index >= 0) { update(_audioLeft, _addToY + int32(index * _audioHeight), _audioWidth, _audioHeight); } + } else if (_type == OverviewLinks) { + for (int32 i = 0, l = _items.size(); i != l; ++i) { + if (_items[i].msgid == msgid) { + update(_linksLeft, _addToY + _items[i].y, _linksWidth, itemHeight(msgid, i)); + break; + } + } } else { for (int32 i = 0, l = _items.size(); i != l; ++i) { if (_items[i].msgid == msgid) { - HistoryMedia *media = msg->getMedia(true); - int32 w = _width - st::msgMargin.left() - st::msgMargin.right(); - if (media) update(0, _addToY + _height - _items[i].y, _width, media->countHeight(msg, w) + st::msgMargin.top() + st::msgMargin.bottom()); + update(0, _addToY + _height - _items[i].y, _width, itemHeight(msgid, i)); break; } } @@ -1746,16 +2407,24 @@ void OverviewInner::showAll(bool recountHeights) { } int32 rows = ((_photosToAdd + count) / _photosInRow) + (((_photosToAdd + count) % _photosInRow) ? 1 : 0); newHeight = _height = (_vsize + st::overviewPhotoSkip) * rows + st::overviewPhotoSkip; + _addToY = (_height < _minHeight) ? (_minHeight - _height) : 0; } else if (_type == OverviewAudioDocuments) { int32 count = _hist->_overview[_type].size(), fullCount = _hist->_overviewCount[_type]; newHeight = _height = count * _audioHeight + 2 * st::playlistPadding; + _addToY = st::playlistPadding; + } else if (_type == OverviewLinks) { + if (recountHeights) { // recount heights because of texts + mediaOverviewUpdated(true); + } + newHeight = _height; + _addToY = st::linksSearchMargin.top() + _search.height() + st::linksSearchMargin.bottom(); } else { if (recountHeights && _type == OverviewVideos) { // recount heights because of captions mediaOverviewUpdated(true); } newHeight = _height; + _addToY = (_height < _minHeight) ? (_minHeight - _height) : 0; } - _addToY = (_type == OverviewAudioDocuments) ? st::playlistPadding : ((_height < _minHeight) ? (_minHeight - _height) : 0); if (newHeight < _minHeight) { newHeight = _minHeight; } @@ -1766,6 +2435,10 @@ void OverviewInner::showAll(bool recountHeights) { OverviewInner::~OverviewInner() { _dragAction = NoDrag; + for (CachedLinks::const_iterator i = _links.cbegin(), e = _links.cend(); i != e; ++i) { + delete i.value(); + } + _links.clear(); } OverviewWidget::OverviewWidget(QWidget *parent, const PeerData *peer, MediaOverviewType type) : QWidget(parent) @@ -1801,10 +2474,16 @@ void OverviewWidget::clear() { void OverviewWidget::onScroll() { MTP::clearLoaderPriorities(); - if (_scroll.scrollTop() < _scroll.height() * 5) { - if (App::main()) { - App::main()->loadMediaBack(peer(), type(), true); + int32 preloadThreshold = _scroll.height() * 5; + bool needToPreload = false; + do { + needToPreload = (type() == OverviewLinks) ? (_scroll.scrollTop() + preloadThreshold > _scroll.scrollTopMax()) : (_scroll.scrollTop() < preloadThreshold); + if (!needToPreload || !_inner.preloadLocal()) { + break; } + } while (true); + if (needToPreload) { + _inner.preloadMore(); } if (!_noDropResizeIndex) { _inner.dropResizeIndex(); @@ -1836,7 +2515,7 @@ void OverviewWidget::paintEvent(QPaintEvent *e) { } QRect r(e->rect()); - if (type() == OverviewPhotos || type() == OverviewAudioDocuments) { + if (type() == OverviewPhotos || type() == OverviewAudioDocuments || type() == OverviewLinks) { p.fillRect(r, st::white->b); } else { bool hasTopBar = !App::main()->topBar()->isHidden(), hasPlayer = !App::main()->player()->isHidden(); @@ -1883,6 +2562,10 @@ void OverviewWidget::scrollBy(int32 add) { } } +void OverviewWidget::scrollReset() { + _scroll.scrollToY((type() == OverviewLinks) ? 0 : _scroll.scrollTopMax()); +} + void OverviewWidget::paintTopBar(QPainter &p, float64 over, int32 decreaseWidth) { if (animating() && _showing) { p.setOpacity(a_bgAlpha.current()); @@ -1919,6 +2602,10 @@ MediaOverviewType OverviewWidget::type() const { void OverviewWidget::switchType(MediaOverviewType type) { _selCount = 0; + + disconnect(&_scroll, SIGNAL(scrolled()), &_inner, SLOT(onUpdateSelected())); + disconnect(&_scroll, SIGNAL(scrolled()), this, SLOT(onScroll())); + _inner.setSelectMode(false); _inner.switchType(type); switch (type) { @@ -1927,12 +2614,18 @@ void OverviewWidget::switchType(MediaOverviewType type) { case OverviewDocuments: _header = lang(lng_profile_files_header); break; case OverviewAudios: _header = lang(lng_profile_audios_header); break; case OverviewAudioDocuments: _header = lang(lng_profile_audio_files_header); break; + case OverviewLinks: _header = lang(lng_profile_shared_links_header); break; } noSelectingScroll(); App::main()->topBar()->showSelected(0); updateTopBarSelection(); - _scroll.scrollToY(_scroll.scrollTopMax()); + scrollReset(); + + connect(&_scroll, SIGNAL(scrolled()), &_inner, SLOT(onUpdateSelected())); + connect(&_scroll, SIGNAL(scrolled()), this, SLOT(onScroll())); + onScroll(); + activate(); } void OverviewWidget::updateTopBarSelection() { @@ -1945,7 +2638,7 @@ void OverviewWidget::updateTopBarSelection() { App::main()->topBar()->update(); } if (App::wnd() && !App::wnd()->layerShown()) { - _inner.setFocus(); + _inner.activate(); } update(); } @@ -1969,6 +2662,8 @@ int32 OverviewWidget::countBestScroll() const { return snap(top - int(_scroll.height() - (st::mediaPadding.top() + st::mediaThumbSize + st::mediaPadding.bottom())) / 2, 0, _scroll.scrollTopMax()); } } + } else if (type() == OverviewLinks) { + return 0; } return _scroll.scrollTopMax(); } @@ -1978,7 +2673,7 @@ void OverviewWidget::fastShow(bool back, int32 lastScrollTop) { resizeEvent(0); _scrollSetAfterShow = (lastScrollTop < 0 ? countBestScroll() : lastScrollTop); show(); - _inner.setFocus(); + _inner.activate(); doneShow(); } @@ -2001,7 +2696,7 @@ void OverviewWidget::animShow(const QPixmap &bgAnimCache, const QPixmap &bgAnimT anim::start(this); _showing = true; show(); - _inner.setFocus(); + _inner.activate(); App::main()->topBar()->update(); } @@ -2057,9 +2752,7 @@ void OverviewWidget::msgUpdated(PeerId p, const HistoryItem *msg) { } void OverviewWidget::itemRemoved(HistoryItem *row) { - if (row->history()->peer == peer()) { - _inner.itemRemoved(row); - } + _inner.itemRemoved(row); } void OverviewWidget::itemResized(HistoryItem *row, bool scrollToIt) { @@ -2083,7 +2776,7 @@ OverviewWidget::~OverviewWidget() { } void OverviewWidget::activate() { - _inner.setFocus(); + _inner.activate(); } QPoint OverviewWidget::clampMousePosition(QPoint point) { diff --git a/Telegram/SourceFiles/overviewwidget.h b/Telegram/SourceFiles/overviewwidget.h index 6c08d903b..a48367eb6 100644 --- a/Telegram/SourceFiles/overviewwidget.h +++ b/Telegram/SourceFiles/overviewwidget.h @@ -25,9 +25,14 @@ public: OverviewInner(OverviewWidget *overview, ScrollArea *scroll, const PeerData *peer, MediaOverviewType type); + void activate(); + void clear(); int32 itemTop(MsgId msgId) const; + bool preloadLocal(); + void preloadMore(); + bool event(QEvent *e); void touchEvent(QTouchEvent *e); void paintEvent(QPaintEvent *e); @@ -75,6 +80,7 @@ public slots: void onUpdateSelected(); void openContextUrl(); + void copyContextUrl(); void cancelContextDownload(); void showContextInFolder(); void saveContextFile(); @@ -85,12 +91,19 @@ public slots: void forwardMessage(); void selectMessage(); + void onSearchUpdate(); + void onCancel(); + bool onCancelSearch(); + void onMenuDestroy(QObject *obj); void onTouchSelect(); void onTouchScrollTimer(); void onDragExec(); + bool onSearchMessages(bool searchCache = false); + void onNeedSearchMessages(); + private: void fixItemIndex(int32 ¤t, MsgId msgId) const; @@ -122,11 +135,11 @@ private: // photos int32 _photosInRow, _photosToAdd, _vsize; - typedef struct { + struct CachedSize { int32 vsize; bool medium; QPixmap pix; - } CachedSize; + }; typedef QMap CachedSizes; CachedSizes _cached; bool _selMode; @@ -134,16 +147,65 @@ private: // audio documents int32 _audioLeft, _audioWidth, _audioHeight; - // other - typedef struct _CachedItem { - _CachedItem() : msgid(0), y(0) { + // shared links + int32 _linksLeft, _linksWidth; + struct Link { + Link() : width(0) { } - _CachedItem(MsgId msgid, const QDate &date, int32 y) : msgid(msgid), date(date), y(y) { + Link(const QString &url, const QString &text) : url(url), text(text), width(st::msgFont->m.width(text)) { + } + QString url, text; + int32 width; + }; + struct CachedLink { + CachedLink() : titleWidth(0), page(0), pixw(0), pixh(0), text(st::msgMinWidth) { + } + CachedLink(HistoryItem *item); + int32 countHeight(int32 w); + + QString title, letter; + int32 titleWidth; + WebPageData *page; + int32 pixw, pixh; + Text text; + QVector urls; + }; + typedef QMap CachedLinks; + CachedLinks _links; + FlatInput _search; + IconedButton _cancelSearch; + QVector _results; + int32 _itemsToBeLoaded; + + QTimer _searchTimer; + QString _searchQuery; + bool _inSearch, _searchFull; + mtpRequestId _searchRequest; + History::MediaOverview _searchResults; + MsgId _lastSearchId; + int32 _searchedCount; + void searchReceived(bool fromStart, const MTPmessages_Messages &result, mtpRequestId req); + bool searchFailed(const RPCError &error, mtpRequestId req); + + typedef QMap SearchCache; + SearchCache _searchCache; + + typedef QMap SearchQueries; + SearchQueries _searchQueries; + + CachedLink *cachedLink(HistoryItem *item); + + // other + struct CachedItem { + CachedItem() : msgid(0), y(0) { + } + CachedItem(MsgId msgid, const QDate &date, int32 y) : msgid(msgid), date(date), y(y) { } MsgId msgid; QDate date; int32 y; - } CachedItem; + CachedLink *link; + }; typedef QVector CachedItems; CachedItems _items; @@ -166,9 +228,14 @@ private: int32 _dragItemIndex; MsgId _mousedItem; int32 _mousedItemIndex; + int32 _lnkOverIndex, _lnkDownIndex; // for OverviewLinks, 0 - none, -1 - photo or title, > 0 - lnk index uint16 _dragSymbol; bool _dragWasInactive; + QString urlByIndex(MsgId msgid, int32 index, int32 lnkIndex) const; + bool urlIsEmail(const QString &url) const; + + QString _contextMenuUrl; TextLinkPtr _contextMenuLnk; MsgId _dragSelFrom, _dragSelTo; @@ -202,6 +269,7 @@ public: void contextMenuEvent(QContextMenuEvent *e); void scrollBy(int32 add); + void scrollReset(); void paintTopBar(QPainter &p, float64 over, int32 decreaseWidth); void topBarShadowParams(int32 &x, float64 &o); diff --git a/Telegram/SourceFiles/profilewidget.cpp b/Telegram/SourceFiles/profilewidget.cpp index d5ee5fcaf..28f8f275c 100644 --- a/Telegram/SourceFiles/profilewidget.cpp +++ b/Telegram/SourceFiles/profilewidget.cpp @@ -59,10 +59,6 @@ ProfileInner::ProfileInner(ProfileWidget *profile, ScrollArea *scroll, const Pee // shared media _allMediaTypes(false), _mediaShowAll(this, lang(lng_profile_show_all_types)), - _mediaPhotos(this, QString()), - _mediaVideos(this, QString()), - _mediaDocuments(this, QString()), - _mediaAudios(this, QString()), // actions _searchInPeer(this, lang(lng_profile_search_messages)), @@ -161,14 +157,11 @@ ProfileInner::ProfileInner(ProfileWidget *profile, ScrollArea *scroll, const Pee // shared media connect(&_mediaShowAll, SIGNAL(clicked()), this, SLOT(onMediaShowAll())); - connect(&_mediaPhotos, SIGNAL(clicked()), this, SLOT(onMediaPhotos())); - connect(&_mediaVideos, SIGNAL(clicked()), this, SLOT(onMediaVideos())); - connect(&_mediaDocuments, SIGNAL(clicked()), this, SLOT(onMediaDocuments())); - connect(&_mediaAudios, SIGNAL(clicked()), this, SLOT(onMediaAudios())); - _mediaLinks[OverviewPhotos] = &_mediaPhotos; - _mediaLinks[OverviewVideos] = &_mediaVideos; - _mediaLinks[OverviewDocuments] = &_mediaDocuments; - _mediaLinks[OverviewAudios] = &_mediaAudios; + connect((_mediaButtons[OverviewPhotos] = new LinkButton(this, QString())), SIGNAL(clicked()), this, SLOT(onMediaPhotos())); + connect((_mediaButtons[OverviewVideos] = new LinkButton(this, QString())), SIGNAL(clicked()), this, SLOT(onMediaVideos())); + connect((_mediaButtons[OverviewDocuments] = new LinkButton(this, QString())), SIGNAL(clicked()), this, SLOT(onMediaDocuments())); + connect((_mediaButtons[OverviewAudios] = new LinkButton(this, QString())), SIGNAL(clicked()), this, SLOT(onMediaAudios())); + connect((_mediaButtons[OverviewLinks] = new LinkButton(this, QString())), SIGNAL(clicked()), this, SLOT(onMediaLinks())); App::main()->preloadOverviews(_peer); // actions @@ -216,7 +209,7 @@ void ProfileInner::loadProfilePhotos(int32 yFrom) { int32 yTo = yFrom + (parentWidget() ? parentWidget()->height() : App::wnd()->height()) * 5; MTP::clearLoaderPriorities(); - int32 partfrom = _mediaAudios.y() + _mediaAudios.height() + st::profileHeaderSkip; + int32 partfrom = _mediaButtons[OverviewAudios]->y() + _mediaButtons[OverviewAudios]->height() + st::profileHeaderSkip; yFrom -= partfrom; yTo -= partfrom; @@ -361,6 +354,10 @@ void ProfileInner::onMediaAudios() { App::main()->showMediaOverview(_peer, OverviewAudios); } +void ProfileInner::onMediaLinks() { + App::main()->showMediaOverview(_peer, OverviewLinks); +} + void ProfileInner::onInvitationLink() { QApplication::clipboard()->setText(_peerChat->invitationUrl); App::wnd()->showLayer(new ConfirmBox(lang(lng_group_invite_copied), true)); @@ -652,7 +649,7 @@ void ProfileInner::paintEvent(QPaintEvent *e) { if (!_allMediaTypes) { break; } - top += _mediaLinks[i]->height() + st::setLittleSkip; + top += _mediaButtons[i]->height() + st::setLittleSkip; } } if (_allMediaTypes) { @@ -660,13 +657,13 @@ void ProfileInner::paintEvent(QPaintEvent *e) { top -= st::setLittleSkip; } else { p.drawText(_left, top + st::linkFont->ascent, lang(oneState < 0 ? lng_profile_loading : lng_profile_no_media)); - top += _mediaLinks[OverviewPhotos]->height(); + top += _mediaButtons[OverviewPhotos]->height(); } } else { if (!oneState) { p.drawText(_left, top + st::linkFont->ascent, lang(lng_profile_no_media)); } - top += _mediaLinks[OverviewPhotos]->height(); + top += _mediaButtons[OverviewPhotos]->height(); } // actions @@ -934,13 +931,13 @@ void ProfileInner::resizeEvent(QResizeEvent *e) { if (_allMediaTypes) { int32 count = (_hist->_overviewCount[i] > 0) ? _hist->_overviewCount[i] : (_hist->_overviewCount[i] == 0 ? _hist->_overview[i].size() : -1); if (count > 0) { - if (wasCount) top += _mediaLinks[i]->height() + st::setLittleSkip; + if (wasCount) top += _mediaButtons[i]->height() + st::setLittleSkip; wasCount = count; } } - _mediaLinks[i]->move(_left, top); + _mediaButtons[i]->move(_left, top); } - top += _mediaLinks[OverviewPhotos]->height(); + top += _mediaButtons[OverviewPhotos]->height(); // actions top += st::profileHeaderSkip; @@ -1131,17 +1128,17 @@ void ProfileInner::showAll() { if (count > 0 || count < 0) { first = true; } else if (!_allMediaTypes) { - _mediaLinks[i]->hide(); + _mediaButtons[i]->hide(); continue; } if (count > 0) { - _mediaLinks[i]->setText(overviewLinkText(i, count)); - _mediaLinks[i]->show(); + _mediaButtons[i]->setText(overviewLinkText(i, count)); + _mediaButtons[i]->show(); } else { - _mediaLinks[i]->hide(); + _mediaButtons[i]->hide(); } } else { - _mediaLinks[i]->hide(); + _mediaButtons[i]->hide(); } } if (_allMediaTypes || !manyCounts) { @@ -1208,6 +1205,7 @@ QString ProfileInner::overviewLinkText(int32 type, int32 count) { case OverviewVideos: return lng_profile_videos(lt_count, count); case OverviewDocuments: return lng_profile_files(lt_count, count); case OverviewAudios: return lng_profile_audios(lt_count, count); + case OverviewLinks: return lng_profile_shared_links(lt_count, count); } return QString(); } diff --git a/Telegram/SourceFiles/profilewidget.h b/Telegram/SourceFiles/profilewidget.h index 5c742d31f..4c2d2ef18 100644 --- a/Telegram/SourceFiles/profilewidget.h +++ b/Telegram/SourceFiles/profilewidget.h @@ -92,6 +92,7 @@ public slots: void onMediaVideos(); void onMediaDocuments(); void onMediaAudios(); + void onMediaLinks(); void onMenuDestroy(QObject *obj); void onCopyPhone(); @@ -149,8 +150,8 @@ private: // shared media bool _allMediaTypes; - LinkButton _mediaShowAll, _mediaPhotos, _mediaVideos, _mediaDocuments, _mediaAudios; - LinkButton *_mediaLinks[OverviewCount]; + LinkButton _mediaShowAll; + LinkButton *_mediaButtons[OverviewCount]; QString overviewLinkText(int32 type, int32 count); // actions diff --git a/Telegram/SourceFiles/pspecific_linux.cpp b/Telegram/SourceFiles/pspecific_linux.cpp index 3c96e062b..2859c9067 100644 --- a/Telegram/SourceFiles/pspecific_linux.cpp +++ b/Telegram/SourceFiles/pspecific_linux.cpp @@ -252,8 +252,8 @@ namespace { #define GTK_ALPHA 3 QImage _trayIconImageGen() { - int32 counter = App::histories().unreadFull, counterSlice = (counter >= 1000) ? (1000 + (counter % 100)) : counter; - bool muted = (App::histories().unreadMuted >= counter); + int32 counter = App::histories().unreadFull - (cIncludeMuted() ? 0 : App::histories().unreadMuted), counterSlice = (counter >= 1000) ? (1000 + (counter % 100)) : counter; + bool muted = cIncludeMuted() ? (App::histories().unreadMuted >= counter) : false; if (_trayIconImage.isNull() || _trayIconImage.width() != _trayIconSize || muted != _trayIconMuted || counterSlice != _trayIconCount) { if (_trayIconImageBack.isNull() || _trayIconImageBack.width() != _trayIconSize) { _trayIconImageBack = App::wnd()->iconLarge().scaled(_trayIconSize, _trayIconSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); @@ -288,8 +288,8 @@ namespace { } QString _trayIconImageFile() { - int32 counter = App::histories().unreadFull, counterSlice = (counter >= 1000) ? (1000 + (counter % 100)) : counter; - bool muted = (App::histories().unreadMuted >= counter); + int32 counter = App::histories().unreadFull - (cIncludeMuted() ? 0 : App::histories().unreadMuted), counterSlice = (counter >= 1000) ? (1000 + (counter % 100)) : counter; + bool muted = cIncludeMuted() ? (App::histories().unreadMuted >= counter) : false; QString name = cWorkingDir() + qsl("tdata/ticons/ico%1_%2_%3.png").arg(muted ? "mute" : "").arg(_trayIconSize).arg(counterSlice); QFileInfo info(name); @@ -641,7 +641,7 @@ void PsMainWindow::psUpdateIndicator() { void PsMainWindow::psUpdateCounter() { setWindowIcon(wndIcon); - int32 counter = App::histories().unreadFull; + int32 counter = App::histories().unreadFull - (cIncludeMuted() ? 0 : App::histories().unreadMuted); setWindowTitle((counter > 0) ? qsl("Telegram (%1)").arg(counter) : qsl("Telegram")); if (_psUnityLauncherEntry) { @@ -665,8 +665,10 @@ void PsMainWindow::psUpdateCounter() { ps_gtk_status_icon_set_from_pixbuf(_trayIcon, _trayPixbuf); } } else if (trayIcon) { - int32 counter = App::histories().unreadFull; - style::color bg = (App::histories().unreadMuted < counter) ? st::counterBG : st::counterMuteBG; + int32 counter = App::histories().unreadFull - (cIncludeMuted() ? 0 : App::histories().unreadMuted); + bool muted = cIncludeMuted() ? (App::histories().unreadMuted >= counter) : false; + + style::color bg = muted ? st::counterMuteBG : st::counterBG; QIcon iconSmall; iconSmall.addPixmap(QPixmap::fromImage(iconWithCounter(16, counter, bg, true), Qt::ColorOnly)); iconSmall.addPixmap(QPixmap::fromImage(iconWithCounter(32, counter, bg, true), Qt::ColorOnly)); diff --git a/Telegram/SourceFiles/pspecific_mac.cpp b/Telegram/SourceFiles/pspecific_mac.cpp index 0cac59f75..68e982f3b 100644 --- a/Telegram/SourceFiles/pspecific_mac.cpp +++ b/Telegram/SourceFiles/pspecific_mac.cpp @@ -174,7 +174,7 @@ void _placeCounter(QImage &img, int size, int count, style::color bg, style::col } void PsMainWindow::psUpdateCounter() { - int32 counter = App::histories().unreadFull; + int32 counter = App::histories().unreadFull - (cIncludeMuted() ? 0 : App::histories().unreadMuted); setWindowTitle((counter > 0) ? qsl("Telegram (%1)").arg(counter) : qsl("Telegram")); setWindowIcon(wndIcon); @@ -183,14 +183,16 @@ void PsMainWindow::psUpdateCounter() { _private.setWindowBadge(counter ? cnt : QString()); if (trayIcon) { - bool dm = objc_darkMode(), important = (App::histories().unreadMuted < counter); - style::color bg = important ? st::counterBG : st::counterMuteBG; + bool muted = cIncludeMuted() ? (App::histories().unreadMuted >= counter) : false; + bool dm = objc_darkMode(); + + style::color bg = muted ? st::counterMuteBG : st::counterBG; QIcon icon; QImage img(psTrayIcon(dm)), imgsel(psTrayIcon(true)); img.detach(); imgsel.detach(); int32 size = cRetina() ? 44 : 22; - _placeCounter(img, size, counter, bg, (dm && !important) ? st::counterMacInvColor : st::counterColor); + _placeCounter(img, size, counter, bg, (dm && muted) ? st::counterMacInvColor : st::counterColor); _placeCounter(imgsel, size, counter, st::white, st::counterMacInvColor); icon.addPixmap(QPixmap::fromImage(img, Qt::ColorOnly)); icon.addPixmap(QPixmap::fromImage(imgsel, Qt::ColorOnly), QIcon::Selected); diff --git a/Telegram/SourceFiles/pspecific_wnd.cpp b/Telegram/SourceFiles/pspecific_wnd.cpp index af60a328a..76e48f978 100644 --- a/Telegram/SourceFiles/pspecific_wnd.cpp +++ b/Telegram/SourceFiles/pspecific_wnd.cpp @@ -1117,8 +1117,10 @@ static HICON _qt_createHIcon(const QIcon &icon, int xSize, int ySize) { } void PsMainWindow::psUpdateCounter() { - int32 counter = App::histories().unreadFull; - style::color bg = (App::histories().unreadMuted < counter) ? st::counterBG : st::counterMuteBG; + int32 counter = App::histories().unreadFull - (cIncludeMuted() ? 0 : App::histories().unreadMuted); + bool muted = cIncludeMuted() ? (App::histories().unreadMuted >= counter) : false; + + style::color bg = muted ? st::counterMuteBG : st::counterBG; QIcon iconSmall, iconBig; iconSmall.addPixmap(QPixmap::fromImage(iconWithCounter(16, counter, bg, true), Qt::ColorOnly)); iconSmall.addPixmap(QPixmap::fromImage(iconWithCounter(32, counter, bg, true), Qt::ColorOnly)); @@ -2123,12 +2125,14 @@ bool psShowOpenWithMenu(int x, int y, const QString &file) { } void psOpenFile(const QString &name, bool openWith) { - std::wstring wname = QDir::toNativeSeparators(name).toStdWString(); + bool mailtoScheme = name.startsWith(qstr("mailto:")); + std::wstring wname = mailtoScheme ? name.toStdWString() : QDir::toNativeSeparators(name).toStdWString(); if (openWith && useOpenAs) { if (shOpenWithDialog) { OPENASINFO info; info.oaifInFlags = OAIF_ALLOW_REGISTRATION | OAIF_REGISTER_EXT | OAIF_EXEC; + if (mailtoScheme) info.oaifInFlags |= OAIF_FILE_IS_URI | OAIF_URL_PROTOCOL; info.pcszClass = NULL; info.pcszFile = wname.c_str(); shOpenWithDialog(0, &info); diff --git a/Telegram/SourceFiles/settings.cpp b/Telegram/SourceFiles/settings.cpp index da839b676..78790d5f0 100644 --- a/Telegram/SourceFiles/settings.cpp +++ b/Telegram/SourceFiles/settings.cpp @@ -40,6 +40,7 @@ QString gLangErrors; QString gDialogLastPath, gDialogHelperPath; // optimize QFileDialog bool gSoundNotify = true; +bool gIncludeMuted = true; bool gDesktopNotify = true; DBINotifyView gNotifyView = dbinvShowPreview; bool gWindowsNotifications = true; diff --git a/Telegram/SourceFiles/settings.h b/Telegram/SourceFiles/settings.h index 47c9a3610..ad36a2b1b 100644 --- a/Telegram/SourceFiles/settings.h +++ b/Telegram/SourceFiles/settings.h @@ -96,6 +96,7 @@ DeclareSetting(QPixmapPointer, ChatDogImage); DeclareSetting(bool, TileBackground); DeclareSetting(bool, SoundNotify); +DeclareSetting(bool, IncludeMuted); DeclareSetting(bool, NeedConfigResave); DeclareSetting(bool, DesktopNotify); DeclareSetting(DBINotifyView, NotifyView); diff --git a/Telegram/SourceFiles/settingswidget.cpp b/Telegram/SourceFiles/settingswidget.cpp index dc5459a57..41a1ed9a6 100644 --- a/Telegram/SourceFiles/settingswidget.cpp +++ b/Telegram/SourceFiles/settingswidget.cpp @@ -124,6 +124,7 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), _messagePreview(this, lang(lng_settings_show_preview), cNotifyView() <= dbinvShowPreview), _windowsNotifications(this, lang(lng_settings_use_windows), cWindowsNotifications()), _soundNotify(this, lang(lng_settings_sound_notify), cSoundNotify()), + _includeMuted(this, lang(lng_settings_include_muted), cIncludeMuted()), // general _changeLanguage(this, lang(lng_settings_change_lang)), @@ -225,6 +226,7 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), connect(&_messagePreview, SIGNAL(changed()), this, SLOT(onMessagePreview())); connect(&_windowsNotifications, SIGNAL(changed()), this, SLOT(onWindowsNotifications())); connect(&_soundNotify, SIGNAL(changed()), this, SLOT(onSoundNotify())); + connect(&_includeMuted, SIGNAL(changed()), this, SLOT(onIncludeMuted())); // general connect(&_changeLanguage, SIGNAL(clicked()), this, SLOT(onChangeLanguage())); @@ -431,7 +433,8 @@ void SettingsInner::paintEvent(QPaintEvent *e) { if (App::wnd()->psHasNativeNotifications() && cPlatform() == dbipWindows) { top += _windowsNotifications.height() + st::setSectionSkip; } - top += _soundNotify.height(); + top += _soundNotify.height() + st::setSectionSkip; + top += _includeMuted.height(); } // general @@ -662,7 +665,8 @@ void SettingsInner::resizeEvent(QResizeEvent *e) { if (App::wnd()->psHasNativeNotifications() && cPlatform() == dbipWindows) { _windowsNotifications.move(_left, top); top += _windowsNotifications.height() + st::setSectionSkip; } - _soundNotify.move(_left, top); top += _soundNotify.height(); + _soundNotify.move(_left, top); top += _soundNotify.height() + st::setSectionSkip; + _includeMuted.move(_left, top); top += _includeMuted.height(); } // general @@ -976,12 +980,14 @@ void SettingsInner::showAll() { _windowsNotifications.hide(); } _soundNotify.show(); + _includeMuted.show(); } else { _desktopNotify.hide(); _senderName.hide(); _messagePreview.hide(); _windowsNotifications.hide(); _soundNotify.hide(); + _includeMuted.hide(); } // general @@ -1443,6 +1449,12 @@ void SettingsInner::onSoundNotify() { Local::writeUserSettings(); } +void SettingsInner::onIncludeMuted() { + cSetIncludeMuted(_includeMuted.checked()); + if (App::wnd()) App::wnd()->updateCounter(); + Local::writeUserSettings(); +} + void SettingsInner::onWindowsNotifications() { cSetWindowsNotifications(!cWindowsNotifications()); App::wnd()->notifyClearFast(); diff --git a/Telegram/SourceFiles/settingswidget.h b/Telegram/SourceFiles/settingswidget.h index 38d4cb751..81de3b926 100644 --- a/Telegram/SourceFiles/settingswidget.h +++ b/Telegram/SourceFiles/settingswidget.h @@ -125,6 +125,7 @@ public slots: void onScaleChange(); void onSoundNotify(); + void onIncludeMuted(); void onDesktopNotify(); void onSenderName(); void onMessagePreview(); @@ -206,7 +207,7 @@ private: LinkButton _chooseUsername; // notifications - FlatCheckbox _desktopNotify, _senderName, _messagePreview, _windowsNotifications, _soundNotify; + FlatCheckbox _desktopNotify, _senderName, _messagePreview, _windowsNotifications, _soundNotify, _includeMuted; // general LinkButton _changeLanguage; diff --git a/Telegram/SourceFiles/title.cpp b/Telegram/SourceFiles/title.cpp index 6de0c0424..bea4b9b56 100644 --- a/Telegram/SourceFiles/title.cpp +++ b/Telegram/SourceFiles/title.cpp @@ -258,8 +258,10 @@ void TitleWidget::updateWideMode() { void TitleWidget::updateCounter() { if (cWideMode() || !MTP::authedId()) return; - int32 counter = App::histories().unreadFull; - style::color bg = (App::histories().unreadMuted < counter) ? st::counterBG : st::counterMuteBG; + int32 counter = App::histories().unreadFull - (cIncludeMuted() ? 0 : App::histories().unreadMuted); + bool muted = cIncludeMuted() ? (App::histories().unreadMuted >= counter) : false; + + style::color bg = muted ? st::counterMuteBG : st::counterBG; if (counter > 0) { int32 size = cRetina() ? -32 : -16; diff --git a/Telegram/SourceFiles/types.h b/Telegram/SourceFiles/types.h index 976f40085..377f92238 100644 --- a/Telegram/SourceFiles/types.h +++ b/Telegram/SourceFiles/types.h @@ -275,6 +275,7 @@ enum DataBlockId { dbiTryIPv6 = 0x28, dbiSongVolume = 0x29, dbiWindowsNotifications = 0x30, + dbiIncludeMuted = 0x31, dbiEncryptedWithSalt = 333, dbiEncrypted = 444, diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index b4aada093..7f3e9f0de 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.52 + 0.8.53 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index 0473e1651598623718e07b9a955505635ca34c54..175bf43784430732ef122a4d7f08097a35163306 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_h +#include +#include + +#include +#ifndef Q_OS_WINCE +# include +#endif + +QT_BEGIN_NAMESPACE + +enum { debug = 0 }; + +static inline bool shellExecute(const QUrl &url) +{ +#ifndef Q_OS_WINCE + const QString nativeFilePath = + url.isLocalFile() ? QDir::toNativeSeparators(url.toLocalFile()) : url.toString(QUrl::FullyEncoded); + const quintptr result = (quintptr)ShellExecute(0, 0, (wchar_t*)nativeFilePath.utf16(), 0, 0, SW_SHOWNORMAL); + // ShellExecute returns a value greater than 32 if successful + if (result <= 32) { + qWarning("ShellExecute '%s' failed (error %s).", qPrintable(url.toString()), qPrintable(QString::number(result))); + return false; + } + return true; +#else + Q_UNUSED(url); + return false; +#endif +} + +// Retrieve the commandline for the default mail client. It contains a +// placeholder %1 for the URL. The default key used below is the +// command line for the mailto: shell command. +static inline QString mailCommand() +{ + enum { BufferSize = sizeof(wchar_t) * MAX_PATH }; + + const wchar_t mailUserKey[] = L"Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\mailto\\UserChoice"; + + wchar_t command[MAX_PATH] = {0}; + // Check if user has set preference, otherwise use default. + HKEY handle; + QString keyName; + if (!RegOpenKeyEx(HKEY_CURRENT_USER, mailUserKey, 0, KEY_READ, &handle)) { + DWORD bufferSize = BufferSize; + if (!RegQueryValueEx(handle, L"Progid", 0, 0, reinterpret_cast(command), &bufferSize)) + keyName = QString::fromWCharArray(command); + RegCloseKey(handle); + } + if (keyName.isEmpty()) + keyName = QStringLiteral("mailto"); + keyName += QStringLiteral("\\Shell\\Open\\Command"); + if (debug) + qDebug() << __FUNCTION__ << "keyName=" << keyName; + command[0] = 0; + if (!RegOpenKeyExW(HKEY_CLASSES_ROOT, (const wchar_t*)keyName.utf16(), 0, KEY_READ, &handle)) { + DWORD bufferSize = BufferSize; + RegQueryValueEx(handle, L"", 0, 0, reinterpret_cast(command), &bufferSize); + RegCloseKey(handle); + } + if (!command[0]) + return QString(); +#ifndef Q_OS_WINCE + wchar_t expandedCommand[MAX_PATH] = {0}; + return ExpandEnvironmentStrings(command, expandedCommand, MAX_PATH) ? + QString::fromWCharArray(expandedCommand) : QString::fromWCharArray(command); +#else + return QString(); +#endif +} + +static inline bool launchMail(const QUrl &url) +{ + QString command = mailCommand(); + if (command.isEmpty()) { + qWarning("Cannot launch '%s': There is no mail program installed.", qPrintable(url.toString())); + return false; + } + //Make sure the path for the process is in quotes + const QChar doubleQuote = QLatin1Char('"'); + if (!command.startsWith(doubleQuote)) { + const int exeIndex = command.indexOf(QStringLiteral(".exe "), 0, Qt::CaseInsensitive); + if (exeIndex != -1) { + command.insert(exeIndex + 4, doubleQuote); + command.prepend(doubleQuote); + } + } + // Pass the url as the parameter. Should use QProcess::startDetached(), + // but that cannot handle a Windows command line [yet]. + if (command.indexOf(QStringLiteral("%1")) < 0) return false; + command.replace(QStringLiteral("%1"), url.toString(QUrl::FullyEncoded)); + if (debug) + qDebug() << __FUNCTION__ << "Launching" << command; + //start the process + PROCESS_INFORMATION pi; + ZeroMemory(&pi, sizeof(pi)); + STARTUPINFO si; + ZeroMemory(&si, sizeof(si)); + si.cb = sizeof(si); + if (!CreateProcess(NULL, (wchar_t*)command.utf16(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { + qErrnoWarning("Unable to launch '%s'", qPrintable(command)); + return false; + } + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + return true; +} + +bool QWindowsServices::openUrl(const QUrl &url) +{ + const QString scheme = url.scheme(); + if (scheme == QLatin1String("mailto") && launchMail(url)) + return true; + return shellExecute(url); +} + +bool QWindowsServices::openDocument(const QUrl &url) +{ + return shellExecute(url); +} + +QT_END_NAMESPACE From 9ac90115d87ffc3ec31db7bf0f740a390e87062c Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 28 Aug 2015 18:59:43 +0300 Subject: [PATCH 110/121] fix for os x build, 0.8.53.dev --- Telegram/SourceFiles/overviewwidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Telegram/SourceFiles/overviewwidget.cpp b/Telegram/SourceFiles/overviewwidget.cpp index 26f0b9859..951fb8911 100644 --- a/Telegram/SourceFiles/overviewwidget.cpp +++ b/Telegram/SourceFiles/overviewwidget.cpp @@ -68,7 +68,7 @@ OverviewInner::CachedLink::CachedLink(HistoryItem *item) : text(st::msgMinWidth) till = msgText.size(); } if (till > from) { - TextParseOptions opts = { TextParseMultiline, st::linksMaxWidth, 3 * st::msgFont->height, Qt::LayoutDirectionAuto }; + TextParseOptions opts = { TextParseMultiline, int32(st::linksMaxWidth), 3 * st::msgFont->height, Qt::LayoutDirectionAuto }; text.setText(st::msgFont, msgText.mid(from, till - from), opts); } if (page && page->photo) { From 77b0ca2220948d0051facdeecd9b36adf889a70a Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 28 Aug 2015 19:30:32 +0300 Subject: [PATCH 111/121] fixed entities, version 0.8.53.dev --- Telegram/Resources/lang.strings | 2 +- Telegram/SourceFiles/application.cpp | 2 +- Telegram/SourceFiles/gui/text.cpp | 11 ++++++----- Telegram/SourceFiles/mainwidget.cpp | 9 +++++---- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/Telegram/Resources/lang.strings b/Telegram/Resources/lang.strings index b145afa5f..f6af33095 100644 --- a/Telegram/Resources/lang.strings +++ b/Telegram/Resources/lang.strings @@ -188,7 +188,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_show_preview" = "Show message preview"; "lng_settings_use_windows" = "Use Windows notifications"; "lng_settings_sound_notify" = "Play sound"; -"lng_settings_include_muted" = "Include muted chats in the unread badge"; +"lng_settings_include_muted" = "Include muted chats in unread count"; "lng_notification_preview" = "You have a new message"; diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index cb1abf4df..4b736c5f5 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -674,7 +674,7 @@ void Application::checkMapVersion() { if (Local::oldMapVersion()) { QString versionFeatures; if (cDevVersion() && Local::oldMapVersion() < 8053) { - versionFeatures = QString::fromUtf8("\xe2\x80\x94 Include muted chats in the unread badge setting\n\xe2\x80\x94 Shared links overview and search in shared media");// .replace('@', qsl("@") + QChar(0x200D)); + versionFeatures = QString::fromUtf8("\xe2\x80\x94 Include muted chats in unread count in Settings\n\xe2\x80\x94 Shared links overview and search in shared media");// .replace('@', qsl("@") + QChar(0x200D)); } else if (!cDevVersion() && Local::oldMapVersion() < 8052) { versionFeatures = lang(lng_new_version_minor).trimmed(); } diff --git a/Telegram/SourceFiles/gui/text.cpp b/Telegram/SourceFiles/gui/text.cpp index ef42afe58..78c6f2523 100644 --- a/Telegram/SourceFiles/gui/text.cpp +++ b/Telegram/SourceFiles/gui/text.cpp @@ -554,15 +554,16 @@ public: start = src.constData(); end = start + src.size(); - while (start != end && chIsTrimmed(*start, rich)) { - ++start; + ptr = start; + while (ptr != end && chIsTrimmed(*ptr, rich)) { + ++ptr; } - while (start != end && chIsTrimmed(*(end - 1), rich)) { + while (ptr != end && chIsTrimmed(*(end - 1), rich)) { --end; } _t->_text.resize(0); - _t->_text.reserve(end - start); + _t->_text.reserve(end - ptr); diacs = 0; sumWidth = 0; @@ -575,7 +576,7 @@ public: lastSpace = true; waitingLink = lnkRanges.cbegin(); linksEnd = lnkRanges.cend(); - for (ptr = start; ptr <= end; ++ptr) { + for (; ptr <= end; ++ptr) { if (!checkWaitedLink()) { break; } diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 81ed01580..4e30f83c0 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -1002,7 +1002,7 @@ void MainWidget::sendPreparedText(History *hist, const QString &text, MsgId repl App::historyRegSentText(randomId, sendingText); MTPstring msgText(MTP_string(sendingText)); - int32 flags = newMessageFlags(hist->peer); // unread, out + int32 flags = newMessageFlags(hist->peer) | MTPDmessage::flag_entities; // unread, out int32 sendFlags = 0; if (replyTo) { flags |= MTPDmessage::flag_reply_to_msg_id; @@ -1016,7 +1016,7 @@ void MainWidget::sendPreparedText(History *hist, const QString &text, MsgId repl media = MTP_messageMediaWebPage(MTP_webPagePending(MTP_long(page->id), MTP_int(page->pendingTill))); } MTPVector localEntities = linksToMTP(textParseLinks(sendingText, itemTextParseOptions(hist, App::self()).flags)); - hist->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(hist->peer->id), MTPint(), MTPint(), MTP_int(replyTo), MTP_int(unixtime()), msgText, media, MTPnullMarkup, MTPnullEntities)); + hist->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(hist->peer->id), MTPint(), MTPint(), MTP_int(replyTo), MTP_int(unixtime()), msgText, media, MTPnullMarkup, localEntities)); hist->sendRequestId = MTP::send(MTPmessages_SendMessage(MTP_int(sendFlags), hist->peer->input, MTP_int(replyTo), msgText, MTP_long(randomId), MTPnullMarkup, localEntities), App::main()->rpcDone(&MainWidget::sentDataReceived, randomId), RPCFailHandlerPtr(), 0, 0, hist->sendRequestId); } @@ -1744,11 +1744,12 @@ void MainWidget::dialogsCancelled() { } void MainWidget::serviceNotification(const QString &msg, const MTPMessageMedia &media, bool unread) { - int32 flags = unread ? MTPDmessage_flag_unread : 0; + int32 flags = (unread ? MTPDmessage_flag_unread : 0) | MTPDmessage::flag_entities; QString sendingText, leftText = msg; HistoryItem *item = 0; while (textSplit(sendingText, leftText, MaxMessageSize)) { - item = App::histories().addToBack(MTP_message(MTP_int(flags), MTP_int(clientMsgId()), MTP_int(ServiceUserId), MTP_peerUser(MTP_int(MTP::authedId())), MTPint(), MTPint(), MTPint(), MTP_int(unixtime()), MTP_string(sendingText), media, MTPnullMarkup, MTPnullEntities), unread ? 1 : 2); + MTPVector localEntities = linksToMTP(textParseLinks(sendingText, _historyTextOptions.flags)); + item = App::histories().addToBack(MTP_message(MTP_int(flags), MTP_int(clientMsgId()), MTP_int(ServiceUserId), MTP_peerUser(MTP_int(MTP::authedId())), MTPint(), MTPint(), MTPint(), MTP_int(unixtime()), MTP_string(sendingText), media, MTPnullMarkup, localEntities), unread ? 1 : 2); } if (item) { history.peerMessagesUpdated(item->history()->peer->id); From 84436a34b02a0c9453a86d2b4fc5f81f77b27dc6 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sun, 30 Aug 2015 17:57:21 +0300 Subject: [PATCH 112/121] gifs and pdfs attached by link, prepare for 0.8.54 stable version --- Telegram/SourceFiles/app.cpp | 30 +- Telegram/SourceFiles/app.h | 2 +- Telegram/SourceFiles/boxes/contactsbox.cpp | 2 + Telegram/SourceFiles/gui/flattextarea.cpp | 11 +- Telegram/SourceFiles/gui/flattextarea.h | 3 +- Telegram/SourceFiles/gui/text.h | 2 +- Telegram/SourceFiles/history.cpp | 260 ++- Telegram/SourceFiles/history.h | 18 +- Telegram/SourceFiles/historywidget.cpp | 19 +- Telegram/SourceFiles/mainwidget.cpp | 187 +- Telegram/SourceFiles/mainwidget.h | 12 +- .../SourceFiles/mtproto/mtpConnection.cpp | 2 +- Telegram/SourceFiles/mtproto/mtpCoreTypes.h | 2 +- Telegram/SourceFiles/mtproto/mtpScheme.cpp | 452 +---- Telegram/SourceFiles/mtproto/mtpScheme.h | 1766 +---------------- Telegram/SourceFiles/mtproto/scheme.tl | 54 +- Telegram/SourceFiles/overviewwidget.cpp | 2 + Telegram/SourceFiles/structs.cpp | 4 +- Telegram/SourceFiles/structs.h | 16 +- 19 files changed, 510 insertions(+), 2334 deletions(-) diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index 7b36392db..07baf8abb 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -526,26 +526,6 @@ namespace App { data->left = false; data->forbidden = true; } break; - case mtpc_geoChat: { - const MTPDgeoChat &d(chat.c_geoChat()); - data = 0; -/* title = qs(d.vtitle); - - PeerId peer(peerFromChat(d.vid.v)); - data = App::chat(peer); - data->input = MTP_inputPeerChat(d.vid); - data->setPhoto(d.vphoto); - data->date = d.vdate.v; - data->count = d.vparticipants_count.v; - data->left = false; - data->forbidden = false; - data->access = d.vaccess_hash.v; - if (data->version < d.vversion.v) { - data->version = d.vversion.v; - data->participants = ChatData::Participants(); - data->botStatus = 0; - }/**/ - } break; } if (!data) continue; @@ -1075,11 +1055,11 @@ namespace App { } WebPageData *feedWebPage(const MTPDwebPage &webpage, WebPageData *convert) { - return App::webPageSet(webpage.vid.v, convert, webpage.has_type() ? qs(webpage.vtype) : qsl("article"), qs(webpage.vurl), qs(webpage.vdisplay_url), webpage.has_site_name() ? qs(webpage.vsite_name) : QString(), webpage.has_title() ? qs(webpage.vtitle) : QString(), webpage.has_description() ? qs(webpage.vdescription) : QString(), webpage.has_photo() ? App::feedPhoto(webpage.vphoto) : 0, webpage.has_duration() ? webpage.vduration.v : 0, webpage.has_author() ? qs(webpage.vauthor) : QString(), 0); + return App::webPageSet(webpage.vid.v, convert, webpage.has_type() ? qs(webpage.vtype) : qsl("article"), qs(webpage.vurl), qs(webpage.vdisplay_url), webpage.has_site_name() ? qs(webpage.vsite_name) : QString(), webpage.has_title() ? qs(webpage.vtitle) : QString(), webpage.has_description() ? qs(webpage.vdescription) : QString(), webpage.has_photo() ? App::feedPhoto(webpage.vphoto) : 0, webpage.has_document() ? App::feedDocument(webpage.vdocument) : 0, webpage.has_duration() ? webpage.vduration.v : 0, webpage.has_author() ? qs(webpage.vauthor) : QString(), 0); } WebPageData *feedWebPage(const MTPDwebPagePending &webpage, WebPageData *convert) { - return App::webPageSet(webpage.vid.v, convert, QString(), QString(), QString(), QString(), QString(), QString(), 0, 0, QString(), webpage.vdate.v); + return App::webPageSet(webpage.vid.v, convert, QString(), QString(), QString(), QString(), QString(), QString(), 0, 0, 0, QString(), webpage.vdate.v); } WebPageData *feedWebPage(const MTPWebPage &webpage) { @@ -1433,7 +1413,7 @@ namespace App { return i.value(); } - WebPageData *webPageSet(const WebPageId &webPage, WebPageData *convert, const QString &type, const QString &url, const QString &displayUrl, const QString &siteName, const QString &title, const QString &description, PhotoData *photo, int32 duration, const QString &author, int32 pendingTill) { + WebPageData *webPageSet(const WebPageId &webPage, WebPageData *convert, const QString &type, const QString &url, const QString &displayUrl, const QString &siteName, const QString &title, const QString &description, PhotoData *photo, DocumentData *doc, int32 duration, const QString &author, int32 pendingTill) { if (convert) { if (convert->id != webPage) { WebPagesData::iterator i = webPagesData.find(convert->id); @@ -1450,6 +1430,7 @@ namespace App { convert->title = title; convert->description = description; convert->photo = photo; + convert->doc = doc; convert->duration = duration; convert->author = author; if (convert->pendingTill > 0 && pendingTill <= 0 && api()) api()->clearWebPageRequest(convert); @@ -1463,7 +1444,7 @@ namespace App { if (convert) { result = convert; } else { - result = new WebPageData(webPage, toWebPageType(type), url, displayUrl, siteName, title, description, photo, duration, author, (pendingTill >= -1) ? pendingTill : -1); + result = new WebPageData(webPage, toWebPageType(type), url, displayUrl, siteName, title, description, photo, doc, duration, author, (pendingTill >= -1) ? pendingTill : -1); if (pendingTill > 0 && api()) { api()->requestWebPageDelayed(result); } @@ -1480,6 +1461,7 @@ namespace App { result->title = title; result->description = description; result->photo = photo; + result->doc = doc; result->duration = duration; result->author = author; if (result->pendingTill > 0 && pendingTill <= 0 && api()) api()->clearWebPageRequest(result); diff --git a/Telegram/SourceFiles/app.h b/Telegram/SourceFiles/app.h index 093b34395..358622cf3 100644 --- a/Telegram/SourceFiles/app.h +++ b/Telegram/SourceFiles/app.h @@ -172,7 +172,7 @@ namespace App { DocumentData *document(const DocumentId &document); DocumentData *documentSet(const DocumentId &document, DocumentData *convert, const uint64 &access, int32 date, const QVector &attributes, const QString &mime, const ImagePtr &thumb, int32 dc, int32 size, const StorageImageLocation &thumbLocation); WebPageData *webPage(const WebPageId &webPage); - WebPageData *webPageSet(const WebPageId &webPage, WebPageData *convert, const QString &, const QString &url, const QString &displayUrl, const QString &siteName, const QString &title, const QString &description, PhotoData *photo, int32 duration, const QString &author, int32 pendingTill); + WebPageData *webPageSet(const WebPageId &webPage, WebPageData *convert, const QString &, const QString &url, const QString &displayUrl, const QString &siteName, const QString &title, const QString &description, PhotoData *photo, DocumentData *doc, int32 duration, const QString &author, int32 pendingTill); ImageLinkData *imageLink(const QString &imageLink); ImageLinkData *imageLinkSet(const QString &imageLink, ImageLinkType type, const QString &url); void forgetMedia(); diff --git a/Telegram/SourceFiles/boxes/contactsbox.cpp b/Telegram/SourceFiles/boxes/contactsbox.cpp index c5cec8baa..00933bcb2 100644 --- a/Telegram/SourceFiles/boxes/contactsbox.cpp +++ b/Telegram/SourceFiles/boxes/contactsbox.cpp @@ -1271,6 +1271,8 @@ void CreateGroupBox::created(const MTPUpdates &updates) { } break; case mtpc_updateShortChatMessage: { } break; + case mtpc_updateShortSentMessage: { + } break; case mtpc_updatesTooLong: { } break; } diff --git a/Telegram/SourceFiles/gui/flattextarea.cpp b/Telegram/SourceFiles/gui/flattextarea.cpp index 741a69901..0e3a6a72d 100644 --- a/Telegram/SourceFiles/gui/flattextarea.cpp +++ b/Telegram/SourceFiles/gui/flattextarea.cpp @@ -24,7 +24,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org FlatTextarea::FlatTextarea(QWidget *parent, const style::flatTextarea &st, const QString &pholder, const QString &v) : QTextEdit(v, parent), _ph(pholder), _oldtext(v), _phVisible(!v.length()), a_phLeft(_phVisible ? 0 : st.phShift), a_phAlpha(_phVisible ? 1 : 0), a_phColor(st.phColor->c), - _st(st), _undoAvailable(false), _redoAvailable(false), _fakeMargin(0), + _st(st), _undoAvailable(false), _redoAvailable(false), _inDrop(false), _fakeMargin(0), _touchPress(false), _touchRightButton(false), _touchMove(false), _replacingEmojis(false) { setAcceptRichText(false); resize(_st.width, _st.font->height); @@ -530,7 +530,7 @@ QStringList FlatTextarea::linksList() const { void FlatTextarea::insertFromMimeData(const QMimeData *source) { QTextEdit::insertFromMimeData(source); - emit spacedReturnedPasted(); + if (!_inDrop) emit spacedReturnedPasted(); } void FlatTextarea::insertEmoji(EmojiPtr emoji, QTextCursor c) { @@ -818,3 +818,10 @@ void FlatTextarea::resizeEvent(QResizeEvent *e) { void FlatTextarea::mousePressEvent(QMouseEvent *e) { QTextEdit::mousePressEvent(e); } + +void FlatTextarea::dropEvent(QDropEvent *e) { + _inDrop = true; + QTextEdit::dropEvent(e); + _inDrop = false; + emit spacedReturnedPasted(); +} diff --git a/Telegram/SourceFiles/gui/flattextarea.h b/Telegram/SourceFiles/gui/flattextarea.h index 0173e284b..3bdc42dc3 100644 --- a/Telegram/SourceFiles/gui/flattextarea.h +++ b/Telegram/SourceFiles/gui/flattextarea.h @@ -36,6 +36,7 @@ public: void keyPressEvent(QKeyEvent *e); void resizeEvent(QResizeEvent *e); void mousePressEvent(QMouseEvent *e); + void dropEvent(QDropEvent *e); const QString &getLastText() const; void updatePlaceholder(); @@ -119,7 +120,7 @@ private: anim::cvalue a_phColor; style::flatTextarea _st; - bool _undoAvailable, _redoAvailable; + bool _undoAvailable, _redoAvailable, _inDrop; int32 _fakeMargin; diff --git a/Telegram/SourceFiles/gui/text.h b/Telegram/SourceFiles/gui/text.h index 3fd48128e..bfc3749f0 100644 --- a/Telegram/SourceFiles/gui/text.h +++ b/Telegram/SourceFiles/gui/text.h @@ -636,7 +636,7 @@ inline bool chIsSpace(QChar ch, bool rich = false) { return ch.isSpace() || (ch < 32 && !(rich && ch == TextCommand)) || (ch == QChar::ParagraphSeparator) || (ch == QChar::LineSeparator) || (ch == QChar::ObjectReplacementCharacter) || (ch == QChar::SoftHyphen) || (ch == QChar::CarriageReturn) || (ch == QChar::Tabulation); } inline bool chIsBad(QChar ch) { - return (ch == 0) || (ch >= 8232 && ch < 8239) || (ch >= 65024 && ch < 65040 && ch != 65039) || (ch >= 127 && ch < 160 && ch != 156); + return (ch == 0) || (ch >= 8232 && ch < 8237) || (ch >= 65024 && ch < 65040 && ch != 65039) || (ch >= 127 && ch < 160 && ch != 156); } inline bool chIsTrimmed(QChar ch, bool rich = false) { return (!rich || ch != TextCommand) && (chIsSpace(ch) || chIsBad(ch)); diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 26a684d24..1361ad544 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -647,7 +647,7 @@ HistoryItem *History::createItem(HistoryBlock *block, const MTPmessage &msg, boo const QVector *entities = 0; switch (msg.type()) { case mtpc_message: - media = &msg.c_message().vmedia; + media = msg.c_message().has_media() ? (&msg.c_message().vmedia) : 0; entities = msg.c_message().has_entities() ? (&msg.c_message().ventities.c_vector().v) : 0; break; } @@ -673,7 +673,7 @@ HistoryItem *History::createItem(HistoryBlock *block, const MTPmessage &msg, boo case mtpc_message: { const MTPDmessage m(msg.c_message()); int badMedia = 0; // 1 - unsupported, 2 - empty - switch (m.vmedia.type()) { + if (m.has_media()) switch (m.vmedia.type()) { case mtpc_messageMediaEmpty: case mtpc_messageMediaContact: break; case mtpc_messageMediaGeo: @@ -2269,15 +2269,11 @@ HistoryVideo::HistoryVideo(const MTPDvideo &video, const QString &caption, Histo int32 tw = data->thumb->width(), th = data->thumb->height(); if (data->thumb->isNull() || !tw || !th) { - _thumbw = _thumbx = _thumby = 0; + _thumbw = 0; } else if (tw > th) { _thumbw = (tw * st::mediaThumbSize) / th; - _thumbx = (_thumbw - st::mediaThumbSize) / 2; - _thumby = 0; } else { _thumbw = st::mediaThumbSize; - _thumbx = 0; - _thumby = ((th * _thumbw) / tw - st::mediaThumbSize) / 2; } } @@ -2964,15 +2960,11 @@ HistoryDocument::HistoryDocument(DocumentData *document) : HistoryMedia() int32 tw = data->thumb->width(), th = data->thumb->height(); if (data->thumb->isNull() || !tw || !th) { - _thumbw = _thumbx = _thumby = 0; + _thumbw = 0; } else if (tw > th) { _thumbw = (tw * st::mediaThumbSize) / th; - _thumbx = (_thumbw - st::mediaThumbSize) / 2; - _thumby = 0; } else { _thumbw = st::mediaThumbSize; - _thumbx = 0; - _thumby = ((th * _thumbw) / tw - st::mediaThumbSize) / 2; } } @@ -3447,17 +3439,7 @@ HistoryMedia *HistoryDocument::clone() const { } ImagePtr HistoryDocument::replyPreview() { - if (data->replyPreview->isNull() && !data->thumb->isNull()) { - if (data->thumb->loaded()) { - int w = data->thumb->width(), h = data->thumb->height(); - if (w <= 0) w = 1; - if (h <= 0) h = 1; - data->replyPreview = ImagePtr(w > h ? data->thumb->pix(w * st::msgReplyBarSize.height() / h, st::msgReplyBarSize.height()) : data->thumb->pix(st::msgReplyBarSize.height()), "PNG"); - } else { - data->thumb->load(); - } - } - return data->replyPreview; + return data->makeReplyPreview(); } HistorySticker::HistorySticker(DocumentData *document) : HistoryMedia() @@ -3851,14 +3833,30 @@ void HistoryContact::updateFrom(const MTPMessageMedia &media) { HistoryWebPage::HistoryWebPage(WebPageData *data) : HistoryMedia() , data(data) , _openl(data->url.isEmpty() ? 0 : new TextLink(data->url)) -, _photol((data->photo && data->type != WebPageVideo) ? new PhotoLink(data->photo) : 0) +, _attachl((data->photo && data->type != WebPageVideo) ? static_cast(new PhotoLink(data->photo)) : static_cast(data->doc ? new DocumentOpenLink(data->doc) : 0)) , _asArticle(false) , _title(st::msgMinWidth - st::webPageLeft) , _description(st::msgMinWidth - st::webPageLeft) , _siteNameWidth(0) +, _docSize(data->doc ? (data->doc->song() ? formatDurationAndSizeText(data->doc->song()->duration, data->doc->size) : formatSizeText(data->doc->size)) : QString()) +, _docName(data->doc ? documentName(data->doc) : QString()) , _durationWidth(0) +, _docNameWidth(data->doc ? (st::mediaFont->m.width(_docName.isEmpty() ? qsl("Document") : _docName)) : 0) +, _docDownloadDone(0) , _pixw(0), _pixh(0) { + if (data->doc) { + data->doc->thumb->load(); + + int32 tw = data->doc->thumb->width(), th = data->doc->thumb->height(); + if (data->doc->thumb->isNull() || !tw || !th) { + _docThumbWidth = 0; + } else if (tw > th) { + _docThumbWidth = (tw * st::mediaThumbSize) / th; + } else { + _docThumbWidth = st::mediaThumbSize; + } + } } void HistoryWebPage::initDimensions(const HistoryItem *parent) { @@ -3870,7 +3868,8 @@ void HistoryWebPage::initDimensions(const HistoryItem *parent) { return; } if (!_openl && !data->url.isEmpty()) _openl = TextLinkPtr(new TextLink(data->url)); - if (!_photol && data->photo && data->type != WebPageVideo) _photol = TextLinkPtr(new PhotoLink(data->photo)); + if (!_attachl && data->photo && data->type != WebPageVideo) _attachl = TextLinkPtr(new PhotoLink(data->photo)); + if (!_attachl && data->doc) _attachl = TextLinkPtr(new DocumentOpenLink(data->doc)); if (data->photo && data->type != WebPagePhoto && data->type != WebPageVideo) { if (data->type == WebPageProfile) { _asArticle = true; @@ -3908,6 +3907,15 @@ void HistoryWebPage::initDimensions(const HistoryItem *parent) { _maxw = st::webPageLeft + qMax(thumbh, qMax(w, int32(st::minPhotoSize))) + parent->timeWidth(true); _minh = qMax(thumbh, int32(st::minPhotoSize)); _minh += st::webPagePhotoSkip; + } else if (data->doc) { + if (parent == animated.msg) { + _maxw = st::webPageLeft + (animated.w / cIntRetinaFactor()) + parent->timeWidth(true); + _minh = animated.h / cIntRetinaFactor(); + _minh += st::webPagePhotoSkip; + } else { + _maxw = qMax(st::webPageLeft + st::mediaThumbSize + st::mediaPadding.right() + _docNameWidth + st::mediaPadding.right(), st::mediaMaxWidth); + _minh = st::mediaThumbSize; + } } else { _maxw = st::webPageLeft; _minh = 0; @@ -3951,7 +3959,7 @@ void HistoryWebPage::initDimensions(const HistoryItem *parent) { _minh += qMin(_description.minHeight(), 3 * st::webPageTitleFont->height); } } - if (!_asArticle && data->photo && (_siteNameWidth || !_title.isEmpty() || !_description.isEmpty())) { + if (!_asArticle && (data->photo || data->doc) && (_siteNameWidth || !_title.isEmpty() || !_description.isEmpty())) { _minh += st::webPagePhotoSkip; } if (data->type == WebPageVideo && data->duration) { @@ -3965,15 +3973,29 @@ void HistoryWebPage::draw(QPainter &p, const HistoryItem *parent, bool selected, if (width < 0) width = w; if (width < 1 || data->pendingTill) return; - int32 bottomSkip = 0; - //if (!data->pendingTill) { - if (data->photo) { - bottomSkip += st::webPagePhotoSkip; - if (_asArticle || (st::webPageLeft + qMax(_pixw, int16(st::minPhotoSize)) + parent->timeWidth(true) > width)) { - bottomSkip += (st::msgDateFont->height - st::msgDateDelta.y()); - } + int16 animw = 0, animh = 0; + if (data->doc && animated.msg == parent) { + animw = animated.w / cIntRetinaFactor(); + animh = animated.h / cIntRetinaFactor(); + if (width - st::webPageLeft < animw) { + animw = width - st::webPageLeft; + animh = (animw * animated.h / animated.w); + if (animh < 1) animh = 1; } - //} + } + + int32 bottomSkip = 0; + if (data->photo) { + bottomSkip += st::webPagePhotoSkip; + if (_asArticle || (st::webPageLeft + qMax(_pixw, int16(st::minPhotoSize)) + parent->timeWidth(true) > width)) { + bottomSkip += (st::msgDateFont->height - st::msgDateDelta.y()); + } + } else if (data->doc && animated.msg == parent) { + bottomSkip += st::webPagePhotoSkip; + if (st::webPageLeft + qMax(animw, int16(st::minPhotoSize)) + parent->timeWidth(true) > width) { + bottomSkip += (st::msgDateFont->height - st::msgDateDelta.y()); + } + } style::color bar = (selected ? (parent->out() ? st::msgOutReplyBarSelColor : st::msgInReplyBarSelColor) : (parent->out() ? st::msgOutReplyBarColor : st::msgInReplyBarColor)); style::color semibold = (selected ? (parent->out() ? st::msgOutServiceSelColor : st::msgInServiceSelColor) : (parent->out() ? st::msgOutServiceColor : st::msgInServiceColor)); @@ -4115,6 +4137,100 @@ void HistoryWebPage::draw(QPainter &p, const HistoryItem *parent, bool selected, } p.translate(0, pixheight); + } else if (!_asArticle && data->doc) { + if (_siteNameWidth || !_title.isEmpty() || !_description.isEmpty()) { + p.translate(0, st::webPagePhotoSkip); + } + + if (parent == animated.msg) { + p.drawPixmap(0, 0, animated.current(animw * cIntRetinaFactor(), animh * cIntRetinaFactor(), true)); + if (selected) { + App::roundRect(p, 0, 0, animw, animh, textstyleCurrent()->selectOverlay, SelectedOverlayCorners); + } + } else { + QString statusText; + if (data->doc->song()) { + SongMsgId playing; + AudioPlayerState playingState = AudioPlayerStopped; + int64 playingPosition = 0, playingDuration = 0; + int32 playingFrequency = 0; + if (audioPlayer()) { + audioPlayer()->currentState(&playing, &playingState, &playingPosition, &playingDuration, &playingFrequency); + } + + bool already = !data->doc->already().isEmpty(), hasdata = !data->doc->data.isEmpty(); + QRect img; + if (data->doc->status == FileFailed) { + statusText = lang(lng_attach_failed); + img = parent->out() ? st::mediaMusicOutImg : st::mediaMusicInImg; + } else if (already || hasdata) { + bool showPause = false; + if (playing.msgId == parent->id && !(playingState & AudioPlayerStoppedMask) && playingState != AudioPlayerFinishing) { + statusText = formatDurationText(playingPosition / (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency)) + qsl(" / ") + formatDurationText(playingDuration / (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency)); + showPause = (playingState == AudioPlayerPlaying || playingState == AudioPlayerResuming || playingState == AudioPlayerStarting); + } else { + statusText = formatDurationText(data->doc->song()->duration); + } + if (!showPause && playing.msgId == parent->id && App::main() && App::main()->player()->seekingSong(playing)) showPause = true; + img = parent->out() ? (showPause ? st::mediaPauseOutImg : st::mediaPlayOutImg) : (showPause ? st::mediaPauseInImg : st::mediaPlayInImg); + } else { + if (data->doc->loader) { + int32 offset = data->doc->loader->currentOffset(); + if (_docDownloadTextCache.isEmpty() || _docDownloadDone != offset) { + _docDownloadDone = offset; + _docDownloadTextCache = formatDownloadText(_docDownloadDone, data->doc->size); + } + statusText = _docDownloadTextCache; + } else { + statusText = _docSize; + } + img = parent->out() ? st::mediaMusicOutImg : st::mediaMusicInImg; + } + + p.drawPixmap(QPoint(0, 0), App::sprite(), img); + } else { + if (data->doc->status == FileFailed) { + statusText = lang(lng_attach_failed); + } else if (data->doc->loader) { + int32 offset = data->doc->loader->currentOffset(); + if (_docDownloadTextCache.isEmpty() || _docDownloadDone != offset) { + _docDownloadDone = offset; + _docDownloadTextCache = formatDownloadText(_docDownloadDone, data->doc->size); + } + statusText = _docDownloadTextCache; + } else { + statusText = _docSize; + } + + if (_docThumbWidth) { + data->doc->thumb->checkload(); + p.drawPixmap(QPoint(0, 0), data->doc->thumb->pixSingle(_docThumbWidth, 0, st::mediaThumbSize, st::mediaThumbSize)); + } else { + p.drawPixmap(QPoint(0, 0), App::sprite(), (parent->out() ? st::mediaDocOutImg : st::mediaDocInImg)); + } + } + if (selected) { + App::roundRect(p, 0, 0, st::mediaThumbSize, st::mediaThumbSize, textstyleCurrent()->selectOverlay, SelectedOverlayCorners); + } + + int32 tleft = st::mediaPadding.left() + st::mediaThumbSize + st::mediaPadding.right(); + int32 twidth = width - tleft - st::mediaPadding.right(); + int32 fullTimeWidth = parent->timeWidth(true) + st::msgPadding.right(); + int32 secondwidth = width - tleft - fullTimeWidth; + + p.setFont(st::mediaFont->f); + p.setPen(st::black->c); + if (twidth < _docNameWidth) { + p.drawText(tleft, st::mediaNameTop + st::mediaFont->ascent, st::mediaFont->m.elidedText(_docName, Qt::ElideRight, twidth)); + } else { + p.drawText(tleft, st::mediaNameTop + st::mediaFont->ascent, _docName); + } + + style::color status(selected ? (parent->out() ? st::mediaOutSelectColor : st::mediaInSelectColor) : (parent->out() ? st::mediaOutColor : st::mediaInColor)); + p.setPen(status->p); + + p.drawText(tleft, st::mediaThumbSize - st::mediaDetailsShift - st::mediaFont->descent, statusText); + } } p.restore(); @@ -4147,7 +4263,7 @@ int32 HistoryWebPage::resize(int32 width, bool dontRecountText, const HistoryIte _height = st::webPagePhotoSize; _height += st::webPagePhotoSkip + (st::msgDateFont->height - st::msgDateDelta.y()); } else if (data->photo) { - _pixw = qMin(width, int32(_maxw - st::webPageLeft)); + _pixw = qMin(width, int32(_maxw - st::webPageLeft - parent->timeWidth(true))); int32 tw = convertScale(data->photo->full->width()), th = convertScale(data->photo->full->height()); if (tw > st::maxMediaSize) { @@ -4175,6 +4291,24 @@ int32 HistoryWebPage::resize(int32 width, bool dontRecountText, const HistoryIte if (qMax(_pixw, int16(st::minPhotoSize)) + parent->timeWidth(true) > width) { _height += (st::msgDateFont->height - st::msgDateDelta.y()); } + } else if (data->doc) { + if (parent == animated.msg) { + int32 w = qMin(width, int32(animated.w / cIntRetinaFactor())); + if (w > st::maxMediaSize) { + w = st::maxMediaSize; + } + _height = animated.h / cIntRetinaFactor(); + if (animated.w / cIntRetinaFactor() > w) { + _height = (w * _height / (animated.w / cIntRetinaFactor())); + if (_height <= 0) _height = 1; + } + _height += st::webPagePhotoSkip; + if (w + parent->timeWidth(true) > width) { + _height += (st::msgDateFont->height - st::msgDateDelta.y()); + } + } else { + _height = st::mediaThumbSize; + } } else { _height = 0; } @@ -4189,7 +4323,7 @@ int32 HistoryWebPage::resize(int32 width, bool dontRecountText, const HistoryIte if (!_description.isEmpty()) { _height += qMin(_description.countHeight(width), st::webPageDescriptionFont->height * 3); } - if (data->photo && (_siteNameWidth || !_title.isEmpty() || !_description.isEmpty())) { + if ((data->photo || data->doc) && (_siteNameWidth || !_title.isEmpty() || !_description.isEmpty())) { _height += st::webPagePhotoSkip; } } @@ -4199,10 +4333,12 @@ int32 HistoryWebPage::resize(int32 width, bool dontRecountText, const HistoryIte void HistoryWebPage::regItem(HistoryItem *item) { App::regWebPageItem(data, item); + if (data->doc) App::regDocumentItem(data->doc, item); } void HistoryWebPage::unregItem(HistoryItem *item) { App::unregWebPageItem(data, item); + if (data->doc) App::unregDocumentItem(data->doc, item); } const QString HistoryWebPage::inDialogsText() const { @@ -4274,10 +4410,20 @@ void HistoryWebPage::getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 y -= st::webPagePhotoSkip; } if (!_asArticle) { - int32 pixwidth = qMax(_pixw, int16(st::minPhotoSize)), pixheight = qMax(_pixh, int16(st::minPhotoSize)); - if (x >= 0 && y >= 0 && x < pixwidth && y < pixheight) { - lnk = _photol ? _photol : _openl; - return; + if (data->doc && parent == animated.msg) { + int32 h = (width == w) ? _height : (width * animated.h / animated.w); + if (h < 1) h = 1; + if (x >= 0 && y >= 0 && x < width && y < h) { + lnk = _attachl; + return; + } + } else { + int32 attachwidth = data->doc ? (width - st::mediaPadding.right()) : qMax(_pixw, int16(st::minPhotoSize)); + int32 attachheight = data->doc ? st::mediaThumbSize : qMax(_pixh, int16(st::minPhotoSize)); + if (x >= 0 && y >= 0 && x < attachwidth && y < attachheight) { + lnk = _attachl ? _attachl : _openl; + return; + } } } } @@ -4287,7 +4433,7 @@ HistoryMedia *HistoryWebPage::clone() const { } ImagePtr HistoryWebPage::replyPreview() { - return data->photo ? data->photo->makeReplyPreview() : ImagePtr(); + return data->photo ? data->photo->makeReplyPreview() : (data->doc ? data->doc->makeReplyPreview() : ImagePtr()); } namespace { @@ -5036,11 +5182,11 @@ HistoryMessage::HistoryMessage(History *history, HistoryBlock *block, const MTPD //if (msg.has_entities()) msg.ventities.c_vector().v.size() QString text(textClean(qs(msg.vmessage))); initTime(); - initMedia(msg.vmedia, text); + initMedia(msg.has_media() ? (&msg.vmedia) : 0, text); setText(text, msg.has_entities() ? linksFromMTP(msg.ventities.c_vector().v) : LinksInText()); } -HistoryMessage::HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, int32 flags, QDateTime date, int32 from, const QString &msg, const LinksInText &links, const MTPMessageMedia &media) : +HistoryMessage::HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, int32 flags, QDateTime date, int32 from, const QString &msg, const LinksInText &links, const MTPMessageMedia *media) : HistoryItem(history, block, msgId, flags, date, from) , _text(st::msgMinWidth) , _textWidth(0) @@ -5085,53 +5231,53 @@ void HistoryMessage::initTime() { _timeWidth = st::msgDateFont->m.width(_time); } -void HistoryMessage::initMedia(const MTPMessageMedia &media, QString ¤tText) { - switch (media.type()) { +void HistoryMessage::initMedia(const MTPMessageMedia *media, QString ¤tText) { + switch (media ? media->type() : mtpc_messageMediaEmpty) { case mtpc_messageMediaContact: { - const MTPDmessageMediaContact &d(media.c_messageMediaContact()); + const MTPDmessageMediaContact &d(media->c_messageMediaContact()); _media = new HistoryContact(d.vuser_id.v, qs(d.vfirst_name), qs(d.vlast_name), qs(d.vphone_number)); } break; case mtpc_messageMediaGeo: { - const MTPGeoPoint &point(media.c_messageMediaGeo().vgeo); + const MTPGeoPoint &point(media->c_messageMediaGeo().vgeo); if (point.type() == mtpc_geoPoint) { const MTPDgeoPoint &d(point.c_geoPoint()); _media = new HistoryImageLink(qsl("location:%1,%2").arg(d.vlat.v).arg(d.vlong.v)); } } break; case mtpc_messageMediaVenue: { - const MTPDmessageMediaVenue &d(media.c_messageMediaVenue()); + const MTPDmessageMediaVenue &d(media->c_messageMediaVenue()); if (d.vgeo.type() == mtpc_geoPoint) { const MTPDgeoPoint &g(d.vgeo.c_geoPoint()); _media = new HistoryImageLink(qsl("location:%1,%2").arg(g.vlat.v).arg(g.vlong.v), qs(d.vtitle), qs(d.vaddress)); } } break; case mtpc_messageMediaPhoto: { - const MTPDmessageMediaPhoto &photo(media.c_messageMediaPhoto()); + const MTPDmessageMediaPhoto &photo(media->c_messageMediaPhoto()); if (photo.vphoto.type() == mtpc_photo) { _media = new HistoryPhoto(photo.vphoto.c_photo(), qs(photo.vcaption), this); } } break; case mtpc_messageMediaVideo: { - const MTPDmessageMediaVideo &video(media.c_messageMediaVideo()); + const MTPDmessageMediaVideo &video(media->c_messageMediaVideo()); if (video.vvideo.type() == mtpc_video) { _media = new HistoryVideo(video.vvideo.c_video(), qs(video.vcaption), this); } } break; case mtpc_messageMediaAudio: { - const MTPAudio &audio(media.c_messageMediaAudio().vaudio); + const MTPAudio &audio(media->c_messageMediaAudio().vaudio); if (audio.type() == mtpc_audio) { _media = new HistoryAudio(audio.c_audio()); } } break; case mtpc_messageMediaDocument: { - const MTPDocument &document(media.c_messageMediaDocument().vdocument); + const MTPDocument &document(media->c_messageMediaDocument().vdocument); if (document.type() == mtpc_document) { DocumentData *doc = App::feedDocument(document); return initMediaFromDocument(doc); } } break; case mtpc_messageMediaWebPage: { - const MTPWebPage &d(media.c_messageMediaWebPage().vwebpage); + const MTPWebPage &d(media->c_messageMediaWebPage().vwebpage); switch (d.type()) { case mtpc_webPageEmpty: initMediaFromText(currentText); break; case mtpc_webPagePending: { @@ -5228,8 +5374,8 @@ HistoryMedia *HistoryMessage::getMedia(bool inOverview) const { return _media; } -void HistoryMessage::setMedia(const MTPmessageMedia &media) { - if ((!_media || _media->isImageLink()) && media.type() == mtpc_messageMediaEmpty) return; +void HistoryMessage::setMedia(const MTPMessageMedia *media) { + if ((!_media || _media->isImageLink()) && (!media || media->type() == mtpc_messageMediaEmpty)) return; bool mediaWasDisplayed = false; if (_media) { @@ -5589,7 +5735,7 @@ HistoryMessage::~HistoryMessage() { } } -HistoryForwarded::HistoryForwarded(History *history, HistoryBlock *block, const MTPDmessage &msg) : HistoryMessage(history, block, msg.vid.v, msg.vflags.v, ::date(msg.vdate), msg.vfrom_id.v, textClean(qs(msg.vmessage)), msg.has_entities() ? linksFromMTP(msg.ventities.c_vector().v) : LinksInText(), msg.vmedia) +HistoryForwarded::HistoryForwarded(History *history, HistoryBlock *block, const MTPDmessage &msg) : HistoryMessage(history, block, msg.vid.v, msg.vflags.v, ::date(msg.vdate), msg.vfrom_id.v, textClean(qs(msg.vmessage)), msg.has_entities() ? linksFromMTP(msg.ventities.c_vector().v) : LinksInText(), msg.has_media() ? (&msg.vmedia) : 0) , fwdDate(::date(msg.vfwd_date)) , fwdFrom(App::user(msg.vfwd_from_id.v)) , fwdFromVersion(fwdFrom->nameVersion) @@ -5785,7 +5931,7 @@ void HistoryForwarded::getSymbol(uint16 &symbol, bool &after, bool &upon, int32 return HistoryMessage::getSymbol(symbol, after, upon, x, y); } -HistoryReply::HistoryReply(History *history, HistoryBlock *block, const MTPDmessage &msg) : HistoryMessage(history, block, msg.vid.v, msg.vflags.v, ::date(msg.vdate), msg.vfrom_id.v, textClean(qs(msg.vmessage)), msg.has_entities() ? linksFromMTP(msg.ventities.c_vector().v) : LinksInText(), msg.vmedia) +HistoryReply::HistoryReply(History *history, HistoryBlock *block, const MTPDmessage &msg) : HistoryMessage(history, block, msg.vid.v, msg.vflags.v, ::date(msg.vdate), msg.vfrom_id.v, textClean(qs(msg.vmessage)), msg.has_entities() ? linksFromMTP(msg.ventities.c_vector().v) : LinksInText(), msg.has_media() ? (&msg.vmedia) : 0) , replyToMsgId(msg.vreply_to_msg_id.v) , replyToMsg(0) , replyToVersion(0) diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index 3f1fe63c6..d4a826a76 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -780,7 +780,7 @@ public: virtual HistoryMedia *getMedia(bool inOverview = false) const { return 0; } - virtual void setMedia(const MTPmessageMedia &media) { + virtual void setMedia(const MTPMessageMedia *media) { } virtual void setText(const QString &text, const LinksInText &links) { } @@ -1000,7 +1000,7 @@ private: Text _caption; QString _size; - int32 _thumbw, _thumbx, _thumby; + int32 _thumbw; mutable QString _dldTextCache, _uplTextCache; mutable int32 _dldDone, _uplDone; @@ -1191,14 +1191,16 @@ public: private: WebPageData *data; - TextLinkPtr _openl, _photol; + TextLinkPtr _openl, _attachl; bool _asArticle; Text _title, _description; int32 _siteNameWidth; - QString _duration; - int32 _durationWidth; + QString _duration, _docName, _docSize; + int32 _durationWidth, _docNameWidth, _docThumbWidth; + mutable QString _docDownloadTextCache; + mutable int32 _docDownloadDone; int16 _pixw, _pixh; }; @@ -1289,12 +1291,12 @@ class HistoryMessage : public HistoryItem { public: HistoryMessage(History *history, HistoryBlock *block, const MTPDmessage &msg); - HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, int32 flags, QDateTime date, int32 from, const QString &msg, const LinksInText &links, const MTPMessageMedia &media); + HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, int32 flags, QDateTime date, int32 from, const QString &msg, const LinksInText &links, const MTPMessageMedia *media); HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, int32 flags, QDateTime date, int32 from, const QString &msg, const LinksInText &links, HistoryMedia *media); HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, int32 flags, QDateTime date, int32 from, DocumentData *doc); void initTime(); - void initMedia(const MTPMessageMedia &media, QString ¤tText); + void initMedia(const MTPMessageMedia *media, QString ¤tText); void initMediaFromText(QString ¤tText); void initMediaFromDocument(DocumentData *doc); void initDimensions(const HistoryItem *parent = 0); @@ -1334,7 +1336,7 @@ public: LinksInText textLinks() const; QString inDialogsText() const; HistoryMedia *getMedia(bool inOverview = false) const; - void setMedia(const MTPmessageMedia &media); + void setMedia(const MTPMessageMedia *media); void setText(const QString &text, const LinksInText &links); void getTextWithLinks(QString &text, LinksInText &links); diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 2398b60bf..94b74db1c 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -5114,18 +5114,25 @@ void HistoryWidget::updatePreview() { if (_previewData->title.isEmpty()) { if (_previewData->description.isEmpty()) { title = _previewData->author; - desc = _previewData->url; + desc = ((_previewData->doc && !_previewData->doc->name.isEmpty()) ? _previewData->doc->name : _previewData->url); } else { title = _previewData->description; - desc = _previewData->author.isEmpty() ? _previewData->url : _previewData->author; + desc = _previewData->author.isEmpty() ? ((_previewData->doc && !_previewData->doc->name.isEmpty()) ? _previewData->doc->name : _previewData->url) : _previewData->author; } } else { title = _previewData->title; - desc = _previewData->description.isEmpty() ? (_previewData->author.isEmpty() ? _previewData->url : _previewData->author) : _previewData->description; + desc = _previewData->description.isEmpty() ? (_previewData->author.isEmpty() ? ((_previewData->doc && !_previewData->doc->name.isEmpty()) ? _previewData->doc->name : _previewData->url) : _previewData->author) : _previewData->description; } } else { title = _previewData->siteName; - desc = _previewData->title.isEmpty() ? (_previewData->description.isEmpty() ? (_previewData->author.isEmpty() ? _previewData->url : _previewData->author) : _previewData->description) : _previewData->title; + desc = _previewData->title.isEmpty() ? (_previewData->description.isEmpty() ? (_previewData->author.isEmpty() ? ((_previewData->doc && !_previewData->doc->name.isEmpty()) ? _previewData->doc->name : _previewData->url) : _previewData->author) : _previewData->description) : _previewData->title; + } + if (title.isEmpty()) { + if (_previewData->photo) { + title = lang(lng_attach_photo); + } else if (_previewData->doc) { + title = lang(lng_attach_file); + } } _previewTitle.setText(st::msgServiceNameFont, title, _textNameOptions); _previewDescription.setText(st::msgFont, desc, _textDlgOptions); @@ -5407,8 +5414,8 @@ void HistoryWidget::drawField(Painter &p) { if (drawPreview) { int32 previewLeft = st::replySkip + st::webPageLeft; p.fillRect(st::replySkip, backy + st::msgReplyPadding.top(), st::webPageBar, st::msgReplyBarSize.height(), st::msgInReplyBarColor->b); - if (_previewData->photo && !_previewData->photo->thumb->isNull()) { - ImagePtr replyPreview = _previewData->photo->makeReplyPreview(); + if ((_previewData->photo && !_previewData->photo->thumb->isNull()) || (_previewData->doc && !_previewData->doc->thumb->isNull())) { + ImagePtr replyPreview = _previewData->photo ? _previewData->photo->makeReplyPreview() : _previewData->doc->makeReplyPreview(); if (!replyPreview->isNull()) { QRect to(previewLeft, backy + st::msgReplyPadding.top(), st::msgReplyBarSize.height(), st::msgReplyBarSize.height()); if (replyPreview->width() == replyPreview->height()) { diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 4e30f83c0..55b6d43e6 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -982,9 +982,59 @@ DialogsIndexed &MainWidget::dialogsList() { return dialogs.dialogsList(); } +inline bool replaceCharBySpace(ushort code) { + // \xe2\x80[\xa8 - \xac\xad] // 8232 - 8237 + // QString from1 = QString::fromUtf8("\xe2\x80\xa8"), to1 = QString::fromUtf8("\xe2\x80\xad"); + // \xcc[\xb3\xbf\x8a] // 819, 831, 778 + // QString bad1 = QString::fromUtf8("\xcc\xb3"), bad2 = QString::fromUtf8("\xcc\xbf"), bad3 = QString::fromUtf8("\xcc\x8a"); + // [\x00\x01\x02\x07\x08\x0b-\x1f] // '\t' = 0x09 + return (code >= 0x00 && code <= 0x02) || (code >= 0x07 && code <= 0x09) || (code >= 0x0b && code <= 0x1f) || + (code == 819) || (code == 831) || (code == 778) || (code >= 8232 && code <= 8237); +} + QString cleanMessage(const QString &text) { - QString result = text.trimmed(); - // clean bad symbols + QString result = text; + QChar *_start = result.data(), *_end = _start + result.size(), *start = _start, *end = _end, *ch = start, *copy = 0; + for (; ch != end; ++ch) { + if (ch->unicode() == '\r') { + copy = ch + 1; + break; + } else if (replaceCharBySpace(ch->unicode())) { + *ch = ' '; + } + } + if (copy) { + for (; copy != end; ++copy) { + if (copy->unicode() == '\r') { + continue; + } else if (replaceCharBySpace(copy->unicode())) { + *ch++ = ' '; + } else { + *ch++ = *copy; + } + } + end = ch; + } + + // PHP trim() removes [ \t\n\r\x00\x0b], we have removed [\t\r\x00\x0b] before, so + for (; start != end; ++start) { + if (start->unicode() != ' ' && start->unicode() != '\n') { + break; + } + } + for (QChar *e = end - 1; start != end; end = e) { + if (e->unicode() != ' ' && e->unicode() != '\n') { + break; + } + --e; + } + if (start == end) { + return QString(); + } else if (start > _start) { + return QString(start, end - start); + } else if (end < _end) { + result.resize(end - start); + } return result; } @@ -1017,7 +1067,7 @@ void MainWidget::sendPreparedText(History *hist, const QString &text, MsgId repl } MTPVector localEntities = linksToMTP(textParseLinks(sendingText, itemTextParseOptions(hist, App::self()).flags)); hist->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(hist->peer->id), MTPint(), MTPint(), MTP_int(replyTo), MTP_int(unixtime()), msgText, media, MTPnullMarkup, localEntities)); - hist->sendRequestId = MTP::send(MTPmessages_SendMessage(MTP_int(sendFlags), hist->peer->input, MTP_int(replyTo), msgText, MTP_long(randomId), MTPnullMarkup, localEntities), App::main()->rpcDone(&MainWidget::sentDataReceived, randomId), RPCFailHandlerPtr(), 0, 0, hist->sendRequestId); + hist->sendRequestId = MTP::send(MTPmessages_SendMessage(MTP_int(sendFlags), hist->peer->input, MTP_int(replyTo), msgText, MTP_long(randomId), MTPnullMarkup, localEntities), App::main()->rpcDone(&MainWidget::sentUpdatesReceived, randomId), RPCFailHandlerPtr(), 0, 0, hist->sendRequestId); } finishForwarding(hist); @@ -2232,87 +2282,8 @@ void MainWidget::windowShown() { history.windowShown(); } -void MainWidget::sentDataReceived(uint64 randomId, const MTPmessages_SentMessage &result) { - switch (result.type()) { - case mtpc_messages_sentMessage: { - const MTPDmessages_sentMessage &d(result.c_messages_sentMessage()); - - HistoryItem *item = 0; - if (randomId) { - QString text = App::histSentTextByItem(randomId); - feedUpdate(MTP_updateMessageID(d.vid, MTP_long(randomId))); // ignore real date - LinksInText links(linksFromMTP(d.ventities.c_vector().v)); - if (!text.isEmpty() && !links.isEmpty()) { - item = App::histItemById(d.vid.v); - if (item) { - bool was = item->hasTextLinks(); - item->setText(text, links); - item->initDimensions(0); - itemResized(item); - if (!was && item->hasTextLinks()) { - item->history()->addToOverview(item, OverviewLinks); - } - } - } - } - - if (updInited) { - if (!updPtsUpdated(d.vpts.v, d.vpts_count.v)) { - _byPtsSentMessage.insert(ptsKey(SkippedSentMessage), result); - return; - } - } - - if (!item) { - item = App::histItemById(d.vid.v); - } - if (item) { - item->setMedia(d.vmedia); - } - } break; - - case mtpc_messages_sentMessageLink: { - const MTPDmessages_sentMessageLink &d(result.c_messages_sentMessageLink()); - - HistoryItem *item = 0; - if (randomId) { - //QString text = App::histSentTextByItem(randomId); - feedUpdate(MTP_updateMessageID(d.vid, MTP_long(randomId))); // ignore real date - //LinksInText links(linksFromMTP(d.ventities.c_vector().v)); - //if (!text.isEmpty() && !links.isEmpty()) { - // item = App::histItemById(d.vid.v); - // if (item) { - // bool was = item->hasTextLinks(); - // item->setText(text, links); - // item->initDimensions(0); - // itemResized(item); - // if (!was && item->hasTextLinks()) { - // item->history()->addToOverview(item, OverviewLinks); - // } - // } - //} - } - - if (updInited) { - if (!updPtsUpdated(d.vpts.v, d.vpts_count.v)) { - _byPtsSentMessage.insert(ptsKey(SkippedSentMessage), result); - return; - } - } - App::feedUserLinks(d.vlinks); - - if (!item) { - item = App::histItemById(d.vid.v); - } - if (item) { - item->setMedia(d.vmedia); - } - } break; - }; -} - -void MainWidget::sentUpdatesReceived(const MTPUpdates &result) { - handleUpdates(result); +void MainWidget::sentUpdatesReceived(uint64 randomId, const MTPUpdates &result) { + handleUpdates(result, randomId); App::emitPeerUpdated(); } @@ -2728,7 +2699,7 @@ void MainWidget::applySkippedPtsUpdates() { switch (i.value()) { case SkippedUpdate: feedUpdate(_byPtsUpdate.value(i.key())); break; case SkippedUpdates: handleUpdates(_byPtsUpdates.value(i.key())); break; - case SkippedSentMessage: sentDataReceived(0, _byPtsSentMessage.value(i.key())); break; +// case SkippedSentMessage: sentDataReceived(0, _byPtsSentMessage.value(i.key())); break; } } --updSkipPtsUpdateLevel; @@ -2740,7 +2711,7 @@ void MainWidget::clearSkippedPtsUpdates() { _byPtsQueue.clear(); _byPtsUpdate.clear(); _byPtsUpdates.clear(); - _byPtsSentMessage.clear(); +// _byPtsSentMessage.clear(); updSkipPtsUpdateLevel = 0; } @@ -2999,6 +2970,8 @@ void MainWidget::inviteImportDone(const MTPUpdates &updates) { } break; case mtpc_updateShortChatMessage: { } break; + case mtpc_updateShortSentMessage: { + } break; case mtpc_updatesTooLong: { } break; } @@ -3093,7 +3066,6 @@ void MainWidget::gotNotifySetting(MTPInputNotifyPeer peer, const MTPPeerNotifySe case mtpc_inputNotifyAll: applyNotifySetting(MTP_notifyAll(), settings); break; case mtpc_inputNotifyUsers: applyNotifySetting(MTP_notifyUsers(), settings); break; case mtpc_inputNotifyChats: applyNotifySetting(MTP_notifyChats(), settings); break; - case mtpc_inputNotifyGeoChatPeer: break; // no MTP_peerGeoChat case mtpc_inputNotifyPeer: switch (peer.c_inputNotifyPeer().vpeer.type()) { case mtpc_inputPeerEmpty: applyNotifySetting(MTP_notifyPeer(MTP_peerUser(MTP_int(0))), settings); break; @@ -3352,7 +3324,7 @@ void MainWidget::updateReceived(const mtpPrime *from, const mtpPrime *end) { update(); } -void MainWidget::handleUpdates(const MTPUpdates &updates) { +void MainWidget::handleUpdates(const MTPUpdates &updates, uint64 randomId) { switch (updates.type()) { case mtpc_updates: { const MTPDupdates &d(updates.c_updates()); @@ -3435,6 +3407,41 @@ void MainWidget::handleUpdates(const MTPUpdates &updates) { updSetState(0, d.vdate.v, updQts, updSeq); } break; + case mtpc_updateShortSentMessage: { + const MTPDupdateShortSentMessage &d(updates.c_updateShortSentMessage()); + HistoryItem *item = 0; + if (randomId) { + QString text = d.has_entities() ? App::histSentTextByItem(randomId) : QString(); + feedUpdate(MTP_updateMessageID(d.vid, MTP_long(randomId))); // ignore real date + if (!text.isEmpty()) { + LinksInText links(linksFromMTP(d.ventities.c_vector().v)); + item = App::histItemById(d.vid.v); + if (item && !links.isEmpty()) { + bool was = item->hasTextLinks(); + item->setText(text, links); + item->initDimensions(0); + itemResized(item); + if (!was && item->hasTextLinks()) { + item->history()->addToOverview(item, OverviewLinks); + } + } + } + } + + if (!updPtsUpdated(d.vpts.v, d.vpts_count.v)) { + _byPtsUpdates.insert(ptsKey(SkippedUpdates), updates); + return; + } + if (!item) { + item = App::histItemById(d.vid.v); + } + if (item) { + item->setMedia(d.has_media() ? (&d.vmedia) : 0); + } + + updSetState(0, d.vdate.v, updQts, updSeq); + } break; + case mtpc_updatesTooLong: { MTP_LOG(0, ("getDifference { good - updatesTooLong received }%1").arg(cTestMode() ? " TESTMODE" : "")); return getDifference(); @@ -3686,10 +3693,6 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { } } break; - case mtpc_updateNewGeoChatMessage: { - const MTPDupdateNewGeoChatMessage &d(update.c_updateNewGeoChatMessage()); - } break; - case mtpc_updateNewEncryptedMessage: { const MTPDupdateNewEncryptedMessage &d(update.c_updateNewEncryptedMessage()); } break; diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index 73491c1c4..8279caf12 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -222,8 +222,10 @@ public: void windowShown(); - void sentDataReceived(uint64 randomId, const MTPmessages_SentMessage &data); - void sentUpdatesReceived(const MTPUpdates &updates); + void sentUpdatesReceived(uint64 randomId, const MTPUpdates &updates); + void sentUpdatesReceived(const MTPUpdates &updates) { + return sentUpdatesReceived(0, updates); + } void msgUpdated(PeerId peer, const HistoryItem *msg); void historyToDown(History *hist); void dialogsToUp(); @@ -478,7 +480,7 @@ private: void feedUpdate(const MTPUpdate &update); void updateReceived(const mtpPrime *from, const mtpPrime *end); - void handleUpdates(const MTPUpdates &updates); + void handleUpdates(const MTPUpdates &updates, uint64 randomId = 0); bool updateFail(const RPCError &e); void usernameResolveDone(QPair toProfileStartToken, const MTPUser &result); @@ -544,7 +546,7 @@ private: enum PtsSkippedQueue { SkippedUpdate, SkippedUpdates, - SkippedSentMessage, +// SkippedSentMessage, SkippedStatedMessage, SkippedStatedMessages }; @@ -555,7 +557,7 @@ private: QMap _byPtsQueue; QMap _byPtsUpdate; QMap _byPtsUpdates; - QMap _byPtsSentMessage; +// QMap _byPtsSentMessage; SingleTimer _byPtsTimer; QMap _bySeqUpdates; diff --git a/Telegram/SourceFiles/mtproto/mtpConnection.cpp b/Telegram/SourceFiles/mtproto/mtpConnection.cpp index 1a8e0b0f8..58b0e7745 100644 --- a/Telegram/SourceFiles/mtproto/mtpConnection.cpp +++ b/Telegram/SourceFiles/mtproto/mtpConnection.cpp @@ -2812,7 +2812,7 @@ int32 MTProtoConnectionPrivate::handleOneReceived(const mtpPrime *from, const mt mtpRequestId fakeRequestId = sessionData->nextFakeRequestId(); haveReceived.insert(fakeRequestId, mtpResponse(update)); // notify main process about new updates - if (cons != mtpc_updatesTooLong && cons != mtpc_updateShortMessage && cons != mtpc_updateShortChatMessage && cons != mtpc_updateShort && cons != mtpc_updatesCombined && cons != mtpc_updates) { + if (cons != mtpc_updatesTooLong && cons != mtpc_updateShortMessage && cons != mtpc_updateShortChatMessage && cons != mtpc_updateShortSentMessage && cons != mtpc_updateShort && cons != mtpc_updatesCombined && cons != mtpc_updates) { LOG(("Message Error: unknown constructor %1").arg(cons)); // maybe new api?.. } diff --git a/Telegram/SourceFiles/mtproto/mtpCoreTypes.h b/Telegram/SourceFiles/mtproto/mtpCoreTypes.h index e9e479134..682073f14 100644 --- a/Telegram/SourceFiles/mtproto/mtpCoreTypes.h +++ b/Telegram/SourceFiles/mtproto/mtpCoreTypes.h @@ -366,7 +366,7 @@ static const mtpTypeId mtpLayers[] = { mtpc_invokeWithLayer17, mtpc_invokeWithLayer18, }, mtpLayerMaxSingle = sizeof(mtpLayers) / sizeof(mtpLayers[0]); -static const mtpPrime mtpCurrentLayer = 34; +static const mtpPrime mtpCurrentLayer = 36; template class MTPBoxed : public bareT { diff --git a/Telegram/SourceFiles/mtproto/mtpScheme.cpp b/Telegram/SourceFiles/mtproto/mtpScheme.cpp index 48cf2b3f0..d6bd9b55d 100644 --- a/Telegram/SourceFiles/mtproto/mtpScheme.cpp +++ b/Telegram/SourceFiles/mtproto/mtpScheme.cpp @@ -655,7 +655,8 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP case 1: to.add(" duration: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 2: to.add(" w: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 3: to.add(" h: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 4: to.add(" caption: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 4: to.add(" mime_type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 5: to.add(" caption: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; @@ -673,7 +674,8 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP case 2: to.add(" duration: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 3: to.add(" w: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 4: to.add(" h: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 5: to.add(" caption: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 5: to.add(" mime_type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 6: to.add(" caption: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; @@ -1213,29 +1215,6 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; - case mtpc_geoChat: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geoChat"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 3: to.add(" address: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 4: to.add(" venue: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 5: to.add(" geo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 6: to.add(" photo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 7: to.add(" participants_count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 8: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 9: to.add(" checked_in: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 10: to.add(" version: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - case mtpc_chatFull: if (stage) { to.add(",\n").addSpaces(lev); @@ -1346,7 +1325,7 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP case 6: to.add(" reply_to_msg_id: "); ++stages.back(); if (flag & MTPDmessage::flag_reply_to_msg_id) { types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 3 IN FIELD flags ]"); } break; case 7: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 8: to.add(" message: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 9: to.add(" media: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 9: to.add(" media: "); ++stages.back(); if (flag & MTPDmessage::flag_media) { types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 9 IN FIELD flags ]"); } break; case 10: to.add(" reply_markup: "); ++stages.back(); if (flag & MTPDmessage::flag_reply_markup) { types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 6 IN FIELD flags ]"); } break; case 11: to.add(" entities: "); ++stages.back(); if (flag & MTPDmessage::flag_entities) { types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 7 IN FIELD flags ]"); } break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; @@ -1566,24 +1545,6 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; - case mtpc_messageActionGeoChatCreate: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messageActionGeoChatCreate"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" address: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - - case mtpc_messageActionGeoChatCheckin: - to.add("{ messageActionGeoChatCheckin }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); - break; - case mtpc_messageActionChatJoinedByLink: if (stage) { to.add(",\n").addSpaces(lev); @@ -1840,19 +1801,6 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP to.add("{ inputNotifyAll }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - case mtpc_inputNotifyGeoChatPeer: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputNotifyGeoChatPeer"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - case mtpc_inputPeerNotifyEventsEmpty: to.add("{ inputPeerNotifyEventsEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; @@ -2025,20 +1973,6 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; - case mtpc_chatLocated: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ chatLocated"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" distance: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - case mtpc_contacts_link: if (stage) { to.add(",\n").addSpaces(lev); @@ -2194,43 +2128,6 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; - case mtpc_messages_sentMessage: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_sentMessage"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" media: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 3: to.add(" entities: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 4: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 5: to.add(" pts_count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - - case mtpc_messages_sentMessageLink: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_sentMessageLink"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" media: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 3: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 4: to.add(" pts_count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 5: to.add(" links: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 6: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - case mtpc_messages_chats: if (stage) { to.add(",\n").addSpaces(lev); @@ -2487,19 +2384,6 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; - case mtpc_updateNewGeoChatMessage: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ updateNewGeoChatMessage"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" message: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - case mtpc_updateNewEncryptedMessage: if (stage) { to.add(",\n").addSpaces(lev); @@ -2899,6 +2783,25 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; + case mtpc_updateShortSentMessage: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ updateShortSentMessage"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" flags: "); ++stages.back(); if (start >= end) throw Exception("start >= end in flags"); else flags.back() = *start; types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 2: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 3: to.add(" pts_count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 4: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 5: to.add(" media: "); ++stages.back(); if (flag & MTPDupdateShortSentMessage::flag_media) { types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 9 IN FIELD flags ]"); } break; + case 6: to.add(" entities: "); ++stages.back(); if (flag & MTPDupdateShortSentMessage::flag_entities) { types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 7 IN FIELD flags ]"); } break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + case mtpc_photos_photos: if (stage) { to.add(",\n").addSpaces(lev); @@ -3051,132 +2954,6 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; - case mtpc_inputGeoChat: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputGeoChat"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - - case mtpc_geoChatMessageEmpty: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geoChatMessageEmpty"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - - case mtpc_geoChatMessage: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geoChatMessage"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" from_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 3: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 4: to.add(" message: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 5: to.add(" media: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - - case mtpc_geoChatMessageService: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geoChatMessageService"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" from_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 3: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 4: to.add(" action: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - - case mtpc_geochats_statedMessage: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geochats_statedMessage"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" message: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 3: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - - case mtpc_geochats_located: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geochats_located"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" results: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 3: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - - case mtpc_geochats_messages: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geochats_messages"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - - case mtpc_geochats_messagesSlice: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geochats_messagesSlice"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 3: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - case mtpc_encryptedChatEmpty: if (stage) { to.add(",\n").addSpaces(lev); @@ -4025,6 +3802,7 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP case 12: to.add(" embed_height: "); ++stages.back(); if (flag & MTPDwebPage::flag_embed_height) { types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 6 IN FIELD flags ]"); } break; case 13: to.add(" duration: "); ++stages.back(); if (flag & MTPDwebPage::flag_duration) { types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 7 IN FIELD flags ]"); } break; case 14: to.add(" author: "); ++stages.back(); if (flag & MTPDwebPage::flag_author) { types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 8 IN FIELD flags ]"); } break; + case 15: to.add(" document: "); ++stages.back(); if (flag & MTPDwebPage::flag_document) { types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 9 IN FIELD flags ]"); } break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; @@ -4863,20 +4641,6 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; - case mtpc_geochats_setTyping: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geochats_setTyping"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" typing: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - case mtpc_messages_discardEncryption: if (stage) { to.add(",\n").addSpaces(lev); @@ -5785,19 +5549,6 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; - case mtpc_geochats_getFullChat: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geochats_getFullChat"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - case mtpc_updates_getState: to.add("{ updates_getState }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; @@ -5941,159 +5692,6 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; - case mtpc_geochats_getLocated: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geochats_getLocated"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" geo_point: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" radius: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - - case mtpc_geochats_getRecents: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geochats_getRecents"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - - case mtpc_geochats_search: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geochats_search"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" q: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" filter: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 3: to.add(" min_date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 4: to.add(" max_date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 5: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 6: to.add(" max_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 7: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - - case mtpc_geochats_getHistory: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geochats_getHistory"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" max_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 3: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - - case mtpc_geochats_checkin: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geochats_checkin"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - - case mtpc_geochats_editChatTitle: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geochats_editChatTitle"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" address: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - - case mtpc_geochats_editChatPhoto: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geochats_editChatPhoto"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" photo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - - case mtpc_geochats_sendMessage: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geochats_sendMessage"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" message: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" random_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - - case mtpc_geochats_sendMedia: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geochats_sendMedia"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" media: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" random_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - - case mtpc_geochats_createGeoChat: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geochats_createGeoChat"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" geo_point: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" address: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 3: to.add(" venue: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - case mtpc_messages_getDhConfig: if (stage) { to.add(",\n").addSpaces(lev); diff --git a/Telegram/SourceFiles/mtproto/mtpScheme.h b/Telegram/SourceFiles/mtproto/mtpScheme.h index 6ee83d88c..82b548bb1 100644 --- a/Telegram/SourceFiles/mtproto/mtpScheme.h +++ b/Telegram/SourceFiles/mtproto/mtpScheme.h @@ -77,8 +77,8 @@ enum { mtpc_inputMediaPhoto = 0xe9bfb4f3, mtpc_inputMediaGeoPoint = 0xf9c44144, mtpc_inputMediaContact = 0xa6e45987, - mtpc_inputMediaUploadedVideo = 0xe13fd4bc, - mtpc_inputMediaUploadedThumbVideo = 0x96fb97dc, + mtpc_inputMediaUploadedVideo = 0x82713fdf, + mtpc_inputMediaUploadedThumbVideo = 0x7780ddf9, mtpc_inputMediaVideo = 0x936a4ebd, mtpc_inputChatPhotoEmpty = 0x1ca48f57, mtpc_inputChatUploadedPhoto = 0x94254732, @@ -124,7 +124,7 @@ enum { mtpc_chatPhotoEmpty = 0x37c1011c, mtpc_chatPhoto = 0x6153276a, mtpc_messageEmpty = 0x83e5de54, - mtpc_message = 0xf07814c8, + mtpc_message = 0x2bebfa86, mtpc_messageService = 0x1d86f70e, mtpc_messageMediaEmpty = 0x3ded6320, mtpc_messageMediaPhoto = 0x3d8ce53d, @@ -171,7 +171,6 @@ enum { mtpc_contactBlocked = 0x561bc879, mtpc_contactSuggested = 0x3de191a1, mtpc_contactStatus = 0xd3680c61, - mtpc_chatLocated = 0x3631cf4c, mtpc_contacts_link = 0x3ace484c, mtpc_contacts_contactsNotModified = 0xb74ba9d2, mtpc_contacts_contacts = 0x6f8b8cb2, @@ -183,7 +182,6 @@ enum { mtpc_messages_dialogsSlice = 0x71e094f3, mtpc_messages_messages = 0x8c718e87, mtpc_messages_messagesSlice = 0xb446ae3, - mtpc_messages_sentMessage = 0x8a99d8e0, mtpc_messages_chats = 0x64ff9fd5, mtpc_messages_chatFull = 0xe5d7d19c, mtpc_messages_affectedHistory = 0xb45c69d1, @@ -228,20 +226,6 @@ enum { mtpc_help_appUpdate = 0x8987f311, mtpc_help_noAppUpdate = 0xc45a6536, mtpc_help_inviteText = 0x18cb9f78, - mtpc_messages_sentMessageLink = 0x35a1a663, - mtpc_inputGeoChat = 0x74d456fa, - mtpc_inputNotifyGeoChatPeer = 0x4d8ddec8, - mtpc_geoChat = 0x75eaea5a, - mtpc_geoChatMessageEmpty = 0x60311a9b, - mtpc_geoChatMessage = 0x4505f8e1, - mtpc_geoChatMessageService = 0xd34fa24e, - mtpc_geochats_statedMessage = 0x17b1578b, - mtpc_geochats_located = 0x48feb267, - mtpc_geochats_messages = 0xd1526db1, - mtpc_geochats_messagesSlice = 0xbc5863e8, - mtpc_messageActionGeoChatCreate = 0x6f038ebc, - mtpc_messageActionGeoChatCheckin = 0xc7d53de, - mtpc_updateNewGeoChatMessage = 0x5a68e3f7, mtpc_wallPaperSolid = 0x63117f24, mtpc_updateNewEncryptedMessage = 0x12bcbd9a, mtpc_updateEncryptedChatTyping = 0x1710f156, @@ -352,7 +336,7 @@ enum { mtpc_updateWebPage = 0x2cc36971, mtpc_webPageEmpty = 0xeb1477e8, mtpc_webPagePending = 0xc586da1c, - mtpc_webPage = 0xa31ea0b5, + mtpc_webPage = 0xca820ed7, mtpc_messageMediaWebPage = 0xa32dd600, mtpc_authorization = 0x7bf2e6f6, mtpc_account_authorizations = 0x1250abde, @@ -399,6 +383,7 @@ enum { mtpc_messageEntityCode = 0x28a20571, mtpc_messageEntityPre = 0x73924be0, mtpc_messageEntityTextUrl = 0x76a6d327, + mtpc_updateShortSentMessage = 0x11f1331c, mtpc_invokeAfterMsg = 0xcb9f372d, mtpc_invokeAfterMsgs = 0x3dc4b4f0, mtpc_auth_checkPhone = 0x6fe51dfb, @@ -442,7 +427,7 @@ enum { mtpc_messages_deleteMessages = 0xa5f18925, mtpc_messages_receivedMessages = 0x5a954c0, mtpc_messages_setTyping = 0xa3825e50, - mtpc_messages_sendMessage = 0xdf12390, + mtpc_messages_sendMessage = 0xfa88427a, mtpc_messages_sendMedia = 0xc8f16791, mtpc_messages_forwardMessages = 0x55e1728d, mtpc_messages_getChats = 0x3c6aa187, @@ -467,18 +452,6 @@ enum { mtpc_photos_getUserPhotos = 0x91cd32a8, mtpc_messages_forwardMessage = 0x33963bf9, mtpc_messages_sendBroadcast = 0xbf73f4da, - mtpc_geochats_getLocated = 0x7f192d8f, - mtpc_geochats_getRecents = 0xe1427e6f, - mtpc_geochats_checkin = 0x55b3e8fb, - mtpc_geochats_getFullChat = 0x6722dd6f, - mtpc_geochats_editChatTitle = 0x4c8e2273, - mtpc_geochats_editChatPhoto = 0x35d81a95, - mtpc_geochats_search = 0xcfcdc44d, - mtpc_geochats_getHistory = 0xb53f7a68, - mtpc_geochats_setTyping = 0x8b8a729, - mtpc_geochats_sendMessage = 0x61b0044, - mtpc_geochats_sendMedia = 0xb8f0deff, - mtpc_geochats_createGeoChat = 0xe092e16, mtpc_messages_getDhConfig = 0x26cf8950, mtpc_messages_requestEncryption = 0xf64daf43, mtpc_messages_acceptEncryption = 0x3dbc0415, @@ -685,7 +658,6 @@ class MTPchat; class MTPDchatEmpty; class MTPDchat; class MTPDchatForbidden; -class MTPDgeoChat; class MTPchatFull; class MTPDchatFull; @@ -721,7 +693,6 @@ class MTPDmessageActionChatEditTitle; class MTPDmessageActionChatEditPhoto; class MTPDmessageActionChatAddUser; class MTPDmessageActionChatDeleteUser; -class MTPDmessageActionGeoChatCreate; class MTPDmessageActionChatJoinedByLink; class MTPdialog; @@ -758,7 +729,6 @@ class MTPDauth_exportedAuthorization; class MTPinputNotifyPeer; class MTPDinputNotifyPeer; -class MTPDinputNotifyGeoChatPeer; class MTPinputPeerNotifyEvents; @@ -792,9 +762,6 @@ class MTPDcontactSuggested; class MTPcontactStatus; class MTPDcontactStatus; -class MTPchatLocated; -class MTPDchatLocated; - class MTPcontacts_link; class MTPDcontacts_link; @@ -819,10 +786,6 @@ class MTPmessages_messages; class MTPDmessages_messages; class MTPDmessages_messagesSlice; -class MTPmessages_sentMessage; -class MTPDmessages_sentMessage; -class MTPDmessages_sentMessageLink; - class MTPmessages_chats; class MTPDmessages_chats; @@ -847,7 +810,6 @@ class MTPDupdateUserPhoto; class MTPDupdateContactRegistered; class MTPDupdateContactLink; class MTPDupdateNewAuthorization; -class MTPDupdateNewGeoChatMessage; class MTPDupdateNewEncryptedMessage; class MTPDupdateEncryptedChatTyping; class MTPDupdateEncryption; @@ -879,6 +841,7 @@ class MTPDupdateShortChatMessage; class MTPDupdateShort; class MTPDupdatesCombined; class MTPDupdates; +class MTPDupdateShortSentMessage; class MTPphotos_photos; class MTPDphotos_photos; @@ -905,24 +868,6 @@ class MTPDhelp_appUpdate; class MTPhelp_inviteText; class MTPDhelp_inviteText; -class MTPinputGeoChat; -class MTPDinputGeoChat; - -class MTPgeoChatMessage; -class MTPDgeoChatMessageEmpty; -class MTPDgeoChatMessage; -class MTPDgeoChatMessageService; - -class MTPgeochats_statedMessage; -class MTPDgeochats_statedMessage; - -class MTPgeochats_located; -class MTPDgeochats_located; - -class MTPgeochats_messages; -class MTPDgeochats_messages; -class MTPDgeochats_messagesSlice; - class MTPencryptedChat; class MTPDencryptedChatEmpty; class MTPDencryptedChatWaiting; @@ -1179,7 +1124,6 @@ typedef MTPBoxed MTPImportedContact; typedef MTPBoxed MTPContactBlocked; typedef MTPBoxed MTPContactSuggested; typedef MTPBoxed MTPContactStatus; -typedef MTPBoxed MTPChatLocated; typedef MTPBoxed MTPcontacts_Link; typedef MTPBoxed MTPcontacts_Contacts; typedef MTPBoxed MTPcontacts_ImportedContacts; @@ -1187,7 +1131,6 @@ typedef MTPBoxed MTPcontacts_Blocked; typedef MTPBoxed MTPcontacts_Suggested; typedef MTPBoxed MTPmessages_Dialogs; typedef MTPBoxed MTPmessages_Messages; -typedef MTPBoxed MTPmessages_SentMessage; typedef MTPBoxed MTPmessages_Chats; typedef MTPBoxed MTPmessages_ChatFull; typedef MTPBoxed MTPmessages_AffectedHistory; @@ -1204,11 +1147,6 @@ typedef MTPBoxed MTPConfig; typedef MTPBoxed MTPNearestDc; typedef MTPBoxed MTPhelp_AppUpdate; typedef MTPBoxed MTPhelp_InviteText; -typedef MTPBoxed MTPInputGeoChat; -typedef MTPBoxed MTPGeoChatMessage; -typedef MTPBoxed MTPgeochats_StatedMessage; -typedef MTPBoxed MTPgeochats_Located; -typedef MTPBoxed MTPgeochats_Messages; typedef MTPBoxed MTPEncryptedChat; typedef MTPBoxed MTPInputEncryptedChat; typedef MTPBoxed MTPEncryptedFile; @@ -2453,8 +2391,8 @@ private: friend MTPinputMedia MTP_inputMediaPhoto(const MTPInputPhoto &_id, const MTPstring &_caption); friend MTPinputMedia MTP_inputMediaGeoPoint(const MTPInputGeoPoint &_geo_point); friend MTPinputMedia MTP_inputMediaContact(const MTPstring &_phone_number, const MTPstring &_first_name, const MTPstring &_last_name); - friend MTPinputMedia MTP_inputMediaUploadedVideo(const MTPInputFile &_file, MTPint _duration, MTPint _w, MTPint _h, const MTPstring &_caption); - friend MTPinputMedia MTP_inputMediaUploadedThumbVideo(const MTPInputFile &_file, const MTPInputFile &_thumb, MTPint _duration, MTPint _w, MTPint _h, const MTPstring &_caption); + friend MTPinputMedia MTP_inputMediaUploadedVideo(const MTPInputFile &_file, MTPint _duration, MTPint _w, MTPint _h, const MTPstring &_mime_type, const MTPstring &_caption); + friend MTPinputMedia MTP_inputMediaUploadedThumbVideo(const MTPInputFile &_file, const MTPInputFile &_thumb, MTPint _duration, MTPint _w, MTPint _h, const MTPstring &_mime_type, const MTPstring &_caption); friend MTPinputMedia MTP_inputMediaVideo(const MTPInputVideo &_id, const MTPstring &_caption); friend MTPinputMedia MTP_inputMediaUploadedAudio(const MTPInputFile &_file, MTPint _duration, const MTPstring &_mime_type); friend MTPinputMedia MTP_inputMediaAudio(const MTPInputAudio &_id); @@ -3118,18 +3056,6 @@ public: return *(const MTPDchatForbidden*)data; } - MTPDgeoChat &_geoChat() { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_geoChat) throw mtpErrorWrongTypeId(_type, mtpc_geoChat); - split(); - return *(MTPDgeoChat*)data; - } - const MTPDgeoChat &c_geoChat() const { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_geoChat) throw mtpErrorWrongTypeId(_type, mtpc_geoChat); - return *(const MTPDgeoChat*)data; - } - uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); @@ -3142,12 +3068,10 @@ private: explicit MTPchat(MTPDchatEmpty *_data); explicit MTPchat(MTPDchat *_data); explicit MTPchat(MTPDchatForbidden *_data); - explicit MTPchat(MTPDgeoChat *_data); friend MTPchat MTP_chatEmpty(MTPint _id); friend MTPchat MTP_chat(MTPint _id, const MTPstring &_title, const MTPChatPhoto &_photo, MTPint _participants_count, MTPint _date, MTPBool _left, MTPint _version); friend MTPchat MTP_chatForbidden(MTPint _id, const MTPstring &_title, MTPint _date); - friend MTPchat MTP_geoChat(MTPint _id, const MTPlong &_access_hash, const MTPstring &_title, const MTPstring &_address, const MTPstring &_venue, const MTPGeoPoint &_geo, const MTPChatPhoto &_photo, MTPint _participants_count, MTPint _date, MTPBool _checked_in, MTPint _version); mtpTypeId _type; }; @@ -3574,18 +3498,6 @@ public: return *(const MTPDmessageActionChatDeleteUser*)data; } - MTPDmessageActionGeoChatCreate &_messageActionGeoChatCreate() { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_messageActionGeoChatCreate) throw mtpErrorWrongTypeId(_type, mtpc_messageActionGeoChatCreate); - split(); - return *(MTPDmessageActionGeoChatCreate*)data; - } - const MTPDmessageActionGeoChatCreate &c_messageActionGeoChatCreate() const { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_messageActionGeoChatCreate) throw mtpErrorWrongTypeId(_type, mtpc_messageActionGeoChatCreate); - return *(const MTPDmessageActionGeoChatCreate*)data; - } - MTPDmessageActionChatJoinedByLink &_messageActionChatJoinedByLink() { if (!data) throw mtpErrorUninitialized(); if (_type != mtpc_messageActionChatJoinedByLink) throw mtpErrorWrongTypeId(_type, mtpc_messageActionChatJoinedByLink); @@ -3612,7 +3524,6 @@ private: explicit MTPmessageAction(MTPDmessageActionChatEditPhoto *_data); explicit MTPmessageAction(MTPDmessageActionChatAddUser *_data); explicit MTPmessageAction(MTPDmessageActionChatDeleteUser *_data); - explicit MTPmessageAction(MTPDmessageActionGeoChatCreate *_data); explicit MTPmessageAction(MTPDmessageActionChatJoinedByLink *_data); friend MTPmessageAction MTP_messageActionEmpty(); @@ -3622,8 +3533,6 @@ private: friend MTPmessageAction MTP_messageActionChatDeletePhoto(); friend MTPmessageAction MTP_messageActionChatAddUser(MTPint _user_id); friend MTPmessageAction MTP_messageActionChatDeleteUser(MTPint _user_id); - friend MTPmessageAction MTP_messageActionGeoChatCreate(const MTPstring &_title, const MTPstring &_address); - friend MTPmessageAction MTP_messageActionGeoChatCheckin(); friend MTPmessageAction MTP_messageActionChatJoinedByLink(MTPint _inviter_id); mtpTypeId _type; @@ -4030,18 +3939,6 @@ public: return *(const MTPDinputNotifyPeer*)data; } - MTPDinputNotifyGeoChatPeer &_inputNotifyGeoChatPeer() { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_inputNotifyGeoChatPeer) throw mtpErrorWrongTypeId(_type, mtpc_inputNotifyGeoChatPeer); - split(); - return *(MTPDinputNotifyGeoChatPeer*)data; - } - const MTPDinputNotifyGeoChatPeer &c_inputNotifyGeoChatPeer() const { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_inputNotifyGeoChatPeer) throw mtpErrorWrongTypeId(_type, mtpc_inputNotifyGeoChatPeer); - return *(const MTPDinputNotifyGeoChatPeer*)data; - } - uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); @@ -4052,13 +3949,11 @@ public: private: explicit MTPinputNotifyPeer(mtpTypeId type); explicit MTPinputNotifyPeer(MTPDinputNotifyPeer *_data); - explicit MTPinputNotifyPeer(MTPDinputNotifyGeoChatPeer *_data); friend MTPinputNotifyPeer MTP_inputNotifyPeer(const MTPInputPeer &_peer); friend MTPinputNotifyPeer MTP_inputNotifyUsers(); friend MTPinputNotifyPeer MTP_inputNotifyChats(); friend MTPinputNotifyPeer MTP_inputNotifyAll(); - friend MTPinputNotifyPeer MTP_inputNotifyGeoChatPeer(const MTPInputGeoChat &_peer); mtpTypeId _type; }; @@ -4420,37 +4315,6 @@ private: }; typedef MTPBoxed MTPContactStatus; -class MTPchatLocated : private mtpDataOwner { -public: - MTPchatLocated(); - MTPchatLocated(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_chatLocated) : mtpDataOwner(0) { - read(from, end, cons); - } - - MTPDchatLocated &_chatLocated() { - if (!data) throw mtpErrorUninitialized(); - split(); - return *(MTPDchatLocated*)data; - } - const MTPDchatLocated &c_chatLocated() const { - if (!data) throw mtpErrorUninitialized(); - return *(const MTPDchatLocated*)data; - } - - uint32 innerLength() const; - mtpTypeId type() const; - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_chatLocated); - void write(mtpBuffer &to) const; - - typedef void ResponseType; - -private: - explicit MTPchatLocated(MTPDchatLocated *_data); - - friend MTPchatLocated MTP_chatLocated(MTPint _chat_id, MTPint _distance); -}; -typedef MTPBoxed MTPChatLocated; - class MTPcontacts_link : private mtpDataOwner { public: MTPcontacts_link(); @@ -4735,57 +4599,6 @@ private: }; typedef MTPBoxed MTPmessages_Messages; -class MTPmessages_sentMessage : private mtpDataOwner { -public: - MTPmessages_sentMessage() : mtpDataOwner(0), _type(0) { - } - MTPmessages_sentMessage(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) : mtpDataOwner(0), _type(0) { - read(from, end, cons); - } - - MTPDmessages_sentMessage &_messages_sentMessage() { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_messages_sentMessage) throw mtpErrorWrongTypeId(_type, mtpc_messages_sentMessage); - split(); - return *(MTPDmessages_sentMessage*)data; - } - const MTPDmessages_sentMessage &c_messages_sentMessage() const { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_messages_sentMessage) throw mtpErrorWrongTypeId(_type, mtpc_messages_sentMessage); - return *(const MTPDmessages_sentMessage*)data; - } - - MTPDmessages_sentMessageLink &_messages_sentMessageLink() { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_messages_sentMessageLink) throw mtpErrorWrongTypeId(_type, mtpc_messages_sentMessageLink); - split(); - return *(MTPDmessages_sentMessageLink*)data; - } - const MTPDmessages_sentMessageLink &c_messages_sentMessageLink() const { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_messages_sentMessageLink) throw mtpErrorWrongTypeId(_type, mtpc_messages_sentMessageLink); - return *(const MTPDmessages_sentMessageLink*)data; - } - - uint32 innerLength() const; - mtpTypeId type() const; - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); - void write(mtpBuffer &to) const; - - typedef void ResponseType; - -private: - explicit MTPmessages_sentMessage(mtpTypeId type); - explicit MTPmessages_sentMessage(MTPDmessages_sentMessage *_data); - explicit MTPmessages_sentMessage(MTPDmessages_sentMessageLink *_data); - - friend MTPmessages_sentMessage MTP_messages_sentMessage(MTPint _id, MTPint _date, const MTPMessageMedia &_media, const MTPVector &_entities, MTPint _pts, MTPint _pts_count); - friend MTPmessages_sentMessage MTP_messages_sentMessageLink(MTPint _id, MTPint _date, const MTPMessageMedia &_media, MTPint _pts, MTPint _pts_count, const MTPVector &_links, MTPint _seq); - - mtpTypeId _type; -}; -typedef MTPBoxed MTPmessages_SentMessage; - class MTPmessages_chats : private mtpDataOwner { public: MTPmessages_chats(); @@ -5063,18 +4876,6 @@ public: return *(const MTPDupdateNewAuthorization*)data; } - MTPDupdateNewGeoChatMessage &_updateNewGeoChatMessage() { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_updateNewGeoChatMessage) throw mtpErrorWrongTypeId(_type, mtpc_updateNewGeoChatMessage); - split(); - return *(MTPDupdateNewGeoChatMessage*)data; - } - const MTPDupdateNewGeoChatMessage &c_updateNewGeoChatMessage() const { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_updateNewGeoChatMessage) throw mtpErrorWrongTypeId(_type, mtpc_updateNewGeoChatMessage); - return *(const MTPDupdateNewGeoChatMessage*)data; - } - MTPDupdateNewEncryptedMessage &_updateNewEncryptedMessage() { if (!data) throw mtpErrorUninitialized(); if (_type != mtpc_updateNewEncryptedMessage) throw mtpErrorWrongTypeId(_type, mtpc_updateNewEncryptedMessage); @@ -5288,7 +5089,6 @@ private: explicit MTPupdate(MTPDupdateContactRegistered *_data); explicit MTPupdate(MTPDupdateContactLink *_data); explicit MTPupdate(MTPDupdateNewAuthorization *_data); - explicit MTPupdate(MTPDupdateNewGeoChatMessage *_data); explicit MTPupdate(MTPDupdateNewEncryptedMessage *_data); explicit MTPupdate(MTPDupdateEncryptedChatTyping *_data); explicit MTPupdate(MTPDupdateEncryption *_data); @@ -5318,7 +5118,6 @@ private: friend MTPupdate MTP_updateContactRegistered(MTPint _user_id, MTPint _date); friend MTPupdate MTP_updateContactLink(MTPint _user_id, const MTPContactLink &_my_link, const MTPContactLink &_foreign_link); friend MTPupdate MTP_updateNewAuthorization(const MTPlong &_auth_key_id, MTPint _date, const MTPstring &_device, const MTPstring &_location); - friend MTPupdate MTP_updateNewGeoChatMessage(const MTPGeoChatMessage &_message); friend MTPupdate MTP_updateNewEncryptedMessage(const MTPEncryptedMessage &_message, MTPint _qts); friend MTPupdate MTP_updateEncryptedChatTyping(MTPint _chat_id); friend MTPupdate MTP_updateEncryption(const MTPEncryptedChat &_chat, MTPint _date); @@ -5504,6 +5303,18 @@ public: return *(const MTPDupdates*)data; } + MTPDupdateShortSentMessage &_updateShortSentMessage() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_updateShortSentMessage) throw mtpErrorWrongTypeId(_type, mtpc_updateShortSentMessage); + split(); + return *(MTPDupdateShortSentMessage*)data; + } + const MTPDupdateShortSentMessage &c_updateShortSentMessage() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_updateShortSentMessage) throw mtpErrorWrongTypeId(_type, mtpc_updateShortSentMessage); + return *(const MTPDupdateShortSentMessage*)data; + } + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); @@ -5518,6 +5329,7 @@ private: explicit MTPupdates(MTPDupdateShort *_data); explicit MTPupdates(MTPDupdatesCombined *_data); explicit MTPupdates(MTPDupdates *_data); + explicit MTPupdates(MTPDupdateShortSentMessage *_data); friend MTPupdates MTP_updatesTooLong(); friend MTPupdates MTP_updateShortMessage(MTPint _flags, MTPint _id, MTPint _user_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, const MTPVector &_entities); @@ -5525,6 +5337,7 @@ private: friend MTPupdates MTP_updateShort(const MTPUpdate &_update, MTPint _date); friend MTPupdates MTP_updatesCombined(const MTPVector &_updates, const MTPVector &_users, const MTPVector &_chats, MTPint _date, MTPint _seq_start, MTPint _seq); friend MTPupdates MTP_updates(const MTPVector &_updates, const MTPVector &_users, const MTPVector &_chats, MTPint _date, MTPint _seq); + friend MTPupdates MTP_updateShortSentMessage(MTPint _flags, MTPint _id, MTPint _pts, MTPint _pts_count, MTPint _date, const MTPMessageMedia &_media, const MTPVector &_entities); mtpTypeId _type; }; @@ -5805,215 +5618,6 @@ private: }; typedef MTPBoxed MTPhelp_InviteText; -class MTPinputGeoChat : private mtpDataOwner { -public: - MTPinputGeoChat(); - MTPinputGeoChat(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_inputGeoChat) : mtpDataOwner(0) { - read(from, end, cons); - } - - MTPDinputGeoChat &_inputGeoChat() { - if (!data) throw mtpErrorUninitialized(); - split(); - return *(MTPDinputGeoChat*)data; - } - const MTPDinputGeoChat &c_inputGeoChat() const { - if (!data) throw mtpErrorUninitialized(); - return *(const MTPDinputGeoChat*)data; - } - - uint32 innerLength() const; - mtpTypeId type() const; - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_inputGeoChat); - void write(mtpBuffer &to) const; - - typedef void ResponseType; - -private: - explicit MTPinputGeoChat(MTPDinputGeoChat *_data); - - friend MTPinputGeoChat MTP_inputGeoChat(MTPint _chat_id, const MTPlong &_access_hash); -}; -typedef MTPBoxed MTPInputGeoChat; - -class MTPgeoChatMessage : private mtpDataOwner { -public: - MTPgeoChatMessage() : mtpDataOwner(0), _type(0) { - } - MTPgeoChatMessage(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) : mtpDataOwner(0), _type(0) { - read(from, end, cons); - } - - MTPDgeoChatMessageEmpty &_geoChatMessageEmpty() { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_geoChatMessageEmpty) throw mtpErrorWrongTypeId(_type, mtpc_geoChatMessageEmpty); - split(); - return *(MTPDgeoChatMessageEmpty*)data; - } - const MTPDgeoChatMessageEmpty &c_geoChatMessageEmpty() const { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_geoChatMessageEmpty) throw mtpErrorWrongTypeId(_type, mtpc_geoChatMessageEmpty); - return *(const MTPDgeoChatMessageEmpty*)data; - } - - MTPDgeoChatMessage &_geoChatMessage() { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_geoChatMessage) throw mtpErrorWrongTypeId(_type, mtpc_geoChatMessage); - split(); - return *(MTPDgeoChatMessage*)data; - } - const MTPDgeoChatMessage &c_geoChatMessage() const { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_geoChatMessage) throw mtpErrorWrongTypeId(_type, mtpc_geoChatMessage); - return *(const MTPDgeoChatMessage*)data; - } - - MTPDgeoChatMessageService &_geoChatMessageService() { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_geoChatMessageService) throw mtpErrorWrongTypeId(_type, mtpc_geoChatMessageService); - split(); - return *(MTPDgeoChatMessageService*)data; - } - const MTPDgeoChatMessageService &c_geoChatMessageService() const { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_geoChatMessageService) throw mtpErrorWrongTypeId(_type, mtpc_geoChatMessageService); - return *(const MTPDgeoChatMessageService*)data; - } - - uint32 innerLength() const; - mtpTypeId type() const; - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); - void write(mtpBuffer &to) const; - - typedef void ResponseType; - -private: - explicit MTPgeoChatMessage(mtpTypeId type); - explicit MTPgeoChatMessage(MTPDgeoChatMessageEmpty *_data); - explicit MTPgeoChatMessage(MTPDgeoChatMessage *_data); - explicit MTPgeoChatMessage(MTPDgeoChatMessageService *_data); - - friend MTPgeoChatMessage MTP_geoChatMessageEmpty(MTPint _chat_id, MTPint _id); - friend MTPgeoChatMessage MTP_geoChatMessage(MTPint _chat_id, MTPint _id, MTPint _from_id, MTPint _date, const MTPstring &_message, const MTPMessageMedia &_media); - friend MTPgeoChatMessage MTP_geoChatMessageService(MTPint _chat_id, MTPint _id, MTPint _from_id, MTPint _date, const MTPMessageAction &_action); - - mtpTypeId _type; -}; -typedef MTPBoxed MTPGeoChatMessage; - -class MTPgeochats_statedMessage : private mtpDataOwner { -public: - MTPgeochats_statedMessage(); - MTPgeochats_statedMessage(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_statedMessage) : mtpDataOwner(0) { - read(from, end, cons); - } - - MTPDgeochats_statedMessage &_geochats_statedMessage() { - if (!data) throw mtpErrorUninitialized(); - split(); - return *(MTPDgeochats_statedMessage*)data; - } - const MTPDgeochats_statedMessage &c_geochats_statedMessage() const { - if (!data) throw mtpErrorUninitialized(); - return *(const MTPDgeochats_statedMessage*)data; - } - - uint32 innerLength() const; - mtpTypeId type() const; - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_statedMessage); - void write(mtpBuffer &to) const; - - typedef void ResponseType; - -private: - explicit MTPgeochats_statedMessage(MTPDgeochats_statedMessage *_data); - - friend MTPgeochats_statedMessage MTP_geochats_statedMessage(const MTPGeoChatMessage &_message, const MTPVector &_chats, const MTPVector &_users, MTPint _seq); -}; -typedef MTPBoxed MTPgeochats_StatedMessage; - -class MTPgeochats_located : private mtpDataOwner { -public: - MTPgeochats_located(); - MTPgeochats_located(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_located) : mtpDataOwner(0) { - read(from, end, cons); - } - - MTPDgeochats_located &_geochats_located() { - if (!data) throw mtpErrorUninitialized(); - split(); - return *(MTPDgeochats_located*)data; - } - const MTPDgeochats_located &c_geochats_located() const { - if (!data) throw mtpErrorUninitialized(); - return *(const MTPDgeochats_located*)data; - } - - uint32 innerLength() const; - mtpTypeId type() const; - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_located); - void write(mtpBuffer &to) const; - - typedef void ResponseType; - -private: - explicit MTPgeochats_located(MTPDgeochats_located *_data); - - friend MTPgeochats_located MTP_geochats_located(const MTPVector &_results, const MTPVector &_messages, const MTPVector &_chats, const MTPVector &_users); -}; -typedef MTPBoxed MTPgeochats_Located; - -class MTPgeochats_messages : private mtpDataOwner { -public: - MTPgeochats_messages() : mtpDataOwner(0), _type(0) { - } - MTPgeochats_messages(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) : mtpDataOwner(0), _type(0) { - read(from, end, cons); - } - - MTPDgeochats_messages &_geochats_messages() { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_geochats_messages) throw mtpErrorWrongTypeId(_type, mtpc_geochats_messages); - split(); - return *(MTPDgeochats_messages*)data; - } - const MTPDgeochats_messages &c_geochats_messages() const { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_geochats_messages) throw mtpErrorWrongTypeId(_type, mtpc_geochats_messages); - return *(const MTPDgeochats_messages*)data; - } - - MTPDgeochats_messagesSlice &_geochats_messagesSlice() { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_geochats_messagesSlice) throw mtpErrorWrongTypeId(_type, mtpc_geochats_messagesSlice); - split(); - return *(MTPDgeochats_messagesSlice*)data; - } - const MTPDgeochats_messagesSlice &c_geochats_messagesSlice() const { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_geochats_messagesSlice) throw mtpErrorWrongTypeId(_type, mtpc_geochats_messagesSlice); - return *(const MTPDgeochats_messagesSlice*)data; - } - - uint32 innerLength() const; - mtpTypeId type() const; - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); - void write(mtpBuffer &to) const; - - typedef void ResponseType; - -private: - explicit MTPgeochats_messages(mtpTypeId type); - explicit MTPgeochats_messages(MTPDgeochats_messages *_data); - explicit MTPgeochats_messages(MTPDgeochats_messagesSlice *_data); - - friend MTPgeochats_messages MTP_geochats_messages(const MTPVector &_messages, const MTPVector &_chats, const MTPVector &_users); - friend MTPgeochats_messages MTP_geochats_messagesSlice(MTPint _count, const MTPVector &_messages, const MTPVector &_chats, const MTPVector &_users); - - mtpTypeId _type; -}; -typedef MTPBoxed MTPgeochats_Messages; - class MTPencryptedChat : private mtpDataOwner { public: MTPencryptedChat() : mtpDataOwner(0), _type(0) { @@ -7385,7 +6989,7 @@ private: friend MTPwebPage MTP_webPageEmpty(const MTPlong &_id); friend MTPwebPage MTP_webPagePending(const MTPlong &_id, MTPint _date); - friend MTPwebPage MTP_webPage(MTPint _flags, const MTPlong &_id, const MTPstring &_url, const MTPstring &_display_url, const MTPstring &_type, const MTPstring &_site_name, const MTPstring &_title, const MTPstring &_description, const MTPPhoto &_photo, const MTPstring &_embed_url, const MTPstring &_embed_type, MTPint _embed_width, MTPint _embed_height, MTPint _duration, const MTPstring &_author); + friend MTPwebPage MTP_webPage(MTPint _flags, const MTPlong &_id, const MTPstring &_url, const MTPstring &_display_url, const MTPstring &_type, const MTPstring &_site_name, const MTPstring &_title, const MTPstring &_description, const MTPPhoto &_photo, const MTPstring &_embed_url, const MTPstring &_embed_type, MTPint _embed_width, MTPint _embed_height, MTPint _duration, const MTPstring &_author, const MTPDocument &_document); mtpTypeId _type; }; @@ -8693,13 +8297,14 @@ class MTPDinputMediaUploadedVideo : public mtpDataImpl { -public: - MTPDgeoChat() { - } - MTPDgeoChat(MTPint _id, const MTPlong &_access_hash, const MTPstring &_title, const MTPstring &_address, const MTPstring &_venue, const MTPGeoPoint &_geo, const MTPChatPhoto &_photo, MTPint _participants_count, MTPint _date, MTPBool _checked_in, MTPint _version) : vid(_id), vaccess_hash(_access_hash), vtitle(_title), vaddress(_address), vvenue(_venue), vgeo(_geo), vphoto(_photo), vparticipants_count(_participants_count), vdate(_date), vchecked_in(_checked_in), vversion(_version) { - } - - MTPint vid; - MTPlong vaccess_hash; - MTPstring vtitle; - MTPstring vaddress; - MTPstring vvenue; - MTPGeoPoint vgeo; - MTPChatPhoto vphoto; - MTPint vparticipants_count; - MTPint vdate; - MTPBool vchecked_in; - MTPint vversion; -}; - class MTPDchatFull : public mtpDataImpl { public: MTPDchatFull() { @@ -9215,6 +8801,7 @@ public: flag_fwd_from_id = (1 << 2), flag_fwd_date = (1 << 2), flag_reply_to_msg_id = (1 << 3), + flag_media = (1 << 9), flag_reply_markup = (1 << 6), flag_entities = (1 << 7), }; @@ -9222,6 +8809,7 @@ public: bool has_fwd_from_id() const { return vflags.v & flag_fwd_from_id; } bool has_fwd_date() const { return vflags.v & flag_fwd_date; } bool has_reply_to_msg_id() const { return vflags.v & flag_reply_to_msg_id; } + bool has_media() const { return vflags.v & flag_media; } bool has_reply_markup() const { return vflags.v & flag_reply_markup; } bool has_entities() const { return vflags.v & flag_entities; } }; @@ -9381,17 +8969,6 @@ public: MTPint vuser_id; }; -class MTPDmessageActionGeoChatCreate : public mtpDataImpl { -public: - MTPDmessageActionGeoChatCreate() { - } - MTPDmessageActionGeoChatCreate(const MTPstring &_title, const MTPstring &_address) : vtitle(_title), vaddress(_address) { - } - - MTPstring vtitle; - MTPstring vaddress; -}; - class MTPDmessageActionChatJoinedByLink : public mtpDataImpl { public: MTPDmessageActionChatJoinedByLink() { @@ -9584,16 +9161,6 @@ public: MTPInputPeer vpeer; }; -class MTPDinputNotifyGeoChatPeer : public mtpDataImpl { -public: - MTPDinputNotifyGeoChatPeer() { - } - MTPDinputNotifyGeoChatPeer(const MTPInputGeoChat &_peer) : vpeer(_peer) { - } - - MTPInputGeoChat vpeer; -}; - class MTPDinputPeerNotifySettings : public mtpDataImpl { public: MTPDinputPeerNotifySettings() { @@ -9716,17 +9283,6 @@ public: MTPUserStatus vstatus; }; -class MTPDchatLocated : public mtpDataImpl { -public: - MTPDchatLocated() { - } - MTPDchatLocated(MTPint _chat_id, MTPint _distance) : vchat_id(_chat_id), vdistance(_distance) { - } - - MTPint vchat_id; - MTPint vdistance; -}; - class MTPDcontacts_link : public mtpDataImpl { public: MTPDcontacts_link() { @@ -9848,37 +9404,6 @@ public: MTPVector vusers; }; -class MTPDmessages_sentMessage : public mtpDataImpl { -public: - MTPDmessages_sentMessage() { - } - MTPDmessages_sentMessage(MTPint _id, MTPint _date, const MTPMessageMedia &_media, const MTPVector &_entities, MTPint _pts, MTPint _pts_count) : vid(_id), vdate(_date), vmedia(_media), ventities(_entities), vpts(_pts), vpts_count(_pts_count) { - } - - MTPint vid; - MTPint vdate; - MTPMessageMedia vmedia; - MTPVector ventities; - MTPint vpts; - MTPint vpts_count; -}; - -class MTPDmessages_sentMessageLink : public mtpDataImpl { -public: - MTPDmessages_sentMessageLink() { - } - MTPDmessages_sentMessageLink(MTPint _id, MTPint _date, const MTPMessageMedia &_media, MTPint _pts, MTPint _pts_count, const MTPVector &_links, MTPint _seq) : vid(_id), vdate(_date), vmedia(_media), vpts(_pts), vpts_count(_pts_count), vlinks(_links), vseq(_seq) { - } - - MTPint vid; - MTPint vdate; - MTPMessageMedia vmedia; - MTPint vpts; - MTPint vpts_count; - MTPVector vlinks; - MTPint vseq; -}; - class MTPDmessages_chats : public mtpDataImpl { public: MTPDmessages_chats() { @@ -10054,16 +9579,6 @@ public: MTPstring vlocation; }; -class MTPDupdateNewGeoChatMessage : public mtpDataImpl { -public: - MTPDupdateNewGeoChatMessage() { - } - MTPDupdateNewGeoChatMessage(const MTPGeoChatMessage &_message) : vmessage(_message) { - } - - MTPGeoChatMessage vmessage; -}; - class MTPDupdateNewEncryptedMessage : public mtpDataImpl { public: MTPDupdateNewEncryptedMessage() { @@ -10408,6 +9923,30 @@ public: MTPint vseq; }; +class MTPDupdateShortSentMessage : public mtpDataImpl { +public: + MTPDupdateShortSentMessage() { + } + MTPDupdateShortSentMessage(MTPint _flags, MTPint _id, MTPint _pts, MTPint _pts_count, MTPint _date, const MTPMessageMedia &_media, const MTPVector &_entities) : vflags(_flags), vid(_id), vpts(_pts), vpts_count(_pts_count), vdate(_date), vmedia(_media), ventities(_entities) { + } + + MTPint vflags; + MTPint vid; + MTPint vpts; + MTPint vpts_count; + MTPint vdate; + MTPMessageMedia vmedia; + MTPVector ventities; + + enum { + flag_media = (1 << 9), + flag_entities = (1 << 7), + }; + + bool has_media() const { return vflags.v & flag_media; } + bool has_entities() const { return vflags.v & flag_entities; } +}; + class MTPDphotos_photos : public mtpDataImpl { public: MTPDphotos_photos() { @@ -10529,108 +10068,6 @@ public: MTPstring vmessage; }; -class MTPDinputGeoChat : public mtpDataImpl { -public: - MTPDinputGeoChat() { - } - MTPDinputGeoChat(MTPint _chat_id, const MTPlong &_access_hash) : vchat_id(_chat_id), vaccess_hash(_access_hash) { - } - - MTPint vchat_id; - MTPlong vaccess_hash; -}; - -class MTPDgeoChatMessageEmpty : public mtpDataImpl { -public: - MTPDgeoChatMessageEmpty() { - } - MTPDgeoChatMessageEmpty(MTPint _chat_id, MTPint _id) : vchat_id(_chat_id), vid(_id) { - } - - MTPint vchat_id; - MTPint vid; -}; - -class MTPDgeoChatMessage : public mtpDataImpl { -public: - MTPDgeoChatMessage() { - } - MTPDgeoChatMessage(MTPint _chat_id, MTPint _id, MTPint _from_id, MTPint _date, const MTPstring &_message, const MTPMessageMedia &_media) : vchat_id(_chat_id), vid(_id), vfrom_id(_from_id), vdate(_date), vmessage(_message), vmedia(_media) { - } - - MTPint vchat_id; - MTPint vid; - MTPint vfrom_id; - MTPint vdate; - MTPstring vmessage; - MTPMessageMedia vmedia; -}; - -class MTPDgeoChatMessageService : public mtpDataImpl { -public: - MTPDgeoChatMessageService() { - } - MTPDgeoChatMessageService(MTPint _chat_id, MTPint _id, MTPint _from_id, MTPint _date, const MTPMessageAction &_action) : vchat_id(_chat_id), vid(_id), vfrom_id(_from_id), vdate(_date), vaction(_action) { - } - - MTPint vchat_id; - MTPint vid; - MTPint vfrom_id; - MTPint vdate; - MTPMessageAction vaction; -}; - -class MTPDgeochats_statedMessage : public mtpDataImpl { -public: - MTPDgeochats_statedMessage() { - } - MTPDgeochats_statedMessage(const MTPGeoChatMessage &_message, const MTPVector &_chats, const MTPVector &_users, MTPint _seq) : vmessage(_message), vchats(_chats), vusers(_users), vseq(_seq) { - } - - MTPGeoChatMessage vmessage; - MTPVector vchats; - MTPVector vusers; - MTPint vseq; -}; - -class MTPDgeochats_located : public mtpDataImpl { -public: - MTPDgeochats_located() { - } - MTPDgeochats_located(const MTPVector &_results, const MTPVector &_messages, const MTPVector &_chats, const MTPVector &_users) : vresults(_results), vmessages(_messages), vchats(_chats), vusers(_users) { - } - - MTPVector vresults; - MTPVector vmessages; - MTPVector vchats; - MTPVector vusers; -}; - -class MTPDgeochats_messages : public mtpDataImpl { -public: - MTPDgeochats_messages() { - } - MTPDgeochats_messages(const MTPVector &_messages, const MTPVector &_chats, const MTPVector &_users) : vmessages(_messages), vchats(_chats), vusers(_users) { - } - - MTPVector vmessages; - MTPVector vchats; - MTPVector vusers; -}; - -class MTPDgeochats_messagesSlice : public mtpDataImpl { -public: - MTPDgeochats_messagesSlice() { - } - MTPDgeochats_messagesSlice(MTPint _count, const MTPVector &_messages, const MTPVector &_chats, const MTPVector &_users) : vcount(_count), vmessages(_messages), vchats(_chats), vusers(_users) { - } - - MTPint vcount; - MTPVector vmessages; - MTPVector vchats; - MTPVector vusers; -}; - class MTPDencryptedChatEmpty : public mtpDataImpl { public: MTPDencryptedChatEmpty() { @@ -11193,7 +10630,7 @@ class MTPDwebPage : public mtpDataImpl { public: MTPDwebPage() { } - MTPDwebPage(MTPint _flags, const MTPlong &_id, const MTPstring &_url, const MTPstring &_display_url, const MTPstring &_type, const MTPstring &_site_name, const MTPstring &_title, const MTPstring &_description, const MTPPhoto &_photo, const MTPstring &_embed_url, const MTPstring &_embed_type, MTPint _embed_width, MTPint _embed_height, MTPint _duration, const MTPstring &_author) : vflags(_flags), vid(_id), vurl(_url), vdisplay_url(_display_url), vtype(_type), vsite_name(_site_name), vtitle(_title), vdescription(_description), vphoto(_photo), vembed_url(_embed_url), vembed_type(_embed_type), vembed_width(_embed_width), vembed_height(_embed_height), vduration(_duration), vauthor(_author) { + MTPDwebPage(MTPint _flags, const MTPlong &_id, const MTPstring &_url, const MTPstring &_display_url, const MTPstring &_type, const MTPstring &_site_name, const MTPstring &_title, const MTPstring &_description, const MTPPhoto &_photo, const MTPstring &_embed_url, const MTPstring &_embed_type, MTPint _embed_width, MTPint _embed_height, MTPint _duration, const MTPstring &_author, const MTPDocument &_document) : vflags(_flags), vid(_id), vurl(_url), vdisplay_url(_display_url), vtype(_type), vsite_name(_site_name), vtitle(_title), vdescription(_description), vphoto(_photo), vembed_url(_embed_url), vembed_type(_embed_type), vembed_width(_embed_width), vembed_height(_embed_height), vduration(_duration), vauthor(_author), vdocument(_document) { } MTPint vflags; @@ -11211,6 +10648,7 @@ public: MTPint vembed_height; MTPint vduration; MTPstring vauthor; + MTPDocument vdocument; enum { flag_type = (1 << 0), @@ -11224,6 +10662,7 @@ public: flag_embed_height = (1 << 6), flag_duration = (1 << 7), flag_author = (1 << 8), + flag_document = (1 << 9), }; bool has_type() const { return vflags.v & flag_type; } @@ -11237,6 +10676,7 @@ public: bool has_embed_height() const { return vflags.v & flag_embed_height; } bool has_duration() const { return vflags.v & flag_duration; } bool has_author() const { return vflags.v & flag_author; } + bool has_document() const { return vflags.v & flag_document; } }; class MTPDauthorization : public mtpDataImpl { @@ -13847,7 +13287,7 @@ public: if (has_entities()) ventities.write(to); } - typedef MTPmessages_SentMessage ResponseType; + typedef MTPUpdates ResponseType; }; class MTPmessages_SendMessage : public MTPBoxed { public: @@ -14883,546 +14323,6 @@ public: } }; -class MTPgeochats_getLocated { // RPC method 'geochats.getLocated' -public: - MTPInputGeoPoint vgeo_point; - MTPint vradius; - MTPint vlimit; - - MTPgeochats_getLocated() { - } - MTPgeochats_getLocated(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_getLocated) { - read(from, end, cons); - } - MTPgeochats_getLocated(const MTPInputGeoPoint &_geo_point, MTPint _radius, MTPint _limit) : vgeo_point(_geo_point), vradius(_radius), vlimit(_limit) { - } - - uint32 innerLength() const { - return vgeo_point.innerLength() + vradius.innerLength() + vlimit.innerLength(); - } - mtpTypeId type() const { - return mtpc_geochats_getLocated; - } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_getLocated) { - vgeo_point.read(from, end); - vradius.read(from, end); - vlimit.read(from, end); - } - void write(mtpBuffer &to) const { - vgeo_point.write(to); - vradius.write(to); - vlimit.write(to); - } - - typedef MTPgeochats_Located ResponseType; -}; -class MTPgeochats_GetLocated : public MTPBoxed { -public: - MTPgeochats_GetLocated() { - } - MTPgeochats_GetLocated(const MTPgeochats_getLocated &v) : MTPBoxed(v) { - } - MTPgeochats_GetLocated(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed(from, end, cons) { - } - MTPgeochats_GetLocated(const MTPInputGeoPoint &_geo_point, MTPint _radius, MTPint _limit) : MTPBoxed(MTPgeochats_getLocated(_geo_point, _radius, _limit)) { - } -}; - -class MTPgeochats_getRecents { // RPC method 'geochats.getRecents' -public: - MTPint voffset; - MTPint vlimit; - - MTPgeochats_getRecents() { - } - MTPgeochats_getRecents(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_getRecents) { - read(from, end, cons); - } - MTPgeochats_getRecents(MTPint _offset, MTPint _limit) : voffset(_offset), vlimit(_limit) { - } - - uint32 innerLength() const { - return voffset.innerLength() + vlimit.innerLength(); - } - mtpTypeId type() const { - return mtpc_geochats_getRecents; - } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_getRecents) { - voffset.read(from, end); - vlimit.read(from, end); - } - void write(mtpBuffer &to) const { - voffset.write(to); - vlimit.write(to); - } - - typedef MTPgeochats_Messages ResponseType; -}; -class MTPgeochats_GetRecents : public MTPBoxed { -public: - MTPgeochats_GetRecents() { - } - MTPgeochats_GetRecents(const MTPgeochats_getRecents &v) : MTPBoxed(v) { - } - MTPgeochats_GetRecents(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed(from, end, cons) { - } - MTPgeochats_GetRecents(MTPint _offset, MTPint _limit) : MTPBoxed(MTPgeochats_getRecents(_offset, _limit)) { - } -}; - -class MTPgeochats_checkin { // RPC method 'geochats.checkin' -public: - MTPInputGeoChat vpeer; - - MTPgeochats_checkin() { - } - MTPgeochats_checkin(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_checkin) { - read(from, end, cons); - } - MTPgeochats_checkin(const MTPInputGeoChat &_peer) : vpeer(_peer) { - } - - uint32 innerLength() const { - return vpeer.innerLength(); - } - mtpTypeId type() const { - return mtpc_geochats_checkin; - } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_checkin) { - vpeer.read(from, end); - } - void write(mtpBuffer &to) const { - vpeer.write(to); - } - - typedef MTPgeochats_StatedMessage ResponseType; -}; -class MTPgeochats_Checkin : public MTPBoxed { -public: - MTPgeochats_Checkin() { - } - MTPgeochats_Checkin(const MTPgeochats_checkin &v) : MTPBoxed(v) { - } - MTPgeochats_Checkin(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed(from, end, cons) { - } - MTPgeochats_Checkin(const MTPInputGeoChat &_peer) : MTPBoxed(MTPgeochats_checkin(_peer)) { - } -}; - -class MTPgeochats_getFullChat { // RPC method 'geochats.getFullChat' -public: - MTPInputGeoChat vpeer; - - MTPgeochats_getFullChat() { - } - MTPgeochats_getFullChat(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_getFullChat) { - read(from, end, cons); - } - MTPgeochats_getFullChat(const MTPInputGeoChat &_peer) : vpeer(_peer) { - } - - uint32 innerLength() const { - return vpeer.innerLength(); - } - mtpTypeId type() const { - return mtpc_geochats_getFullChat; - } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_getFullChat) { - vpeer.read(from, end); - } - void write(mtpBuffer &to) const { - vpeer.write(to); - } - - typedef MTPmessages_ChatFull ResponseType; -}; -class MTPgeochats_GetFullChat : public MTPBoxed { -public: - MTPgeochats_GetFullChat() { - } - MTPgeochats_GetFullChat(const MTPgeochats_getFullChat &v) : MTPBoxed(v) { - } - MTPgeochats_GetFullChat(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed(from, end, cons) { - } - MTPgeochats_GetFullChat(const MTPInputGeoChat &_peer) : MTPBoxed(MTPgeochats_getFullChat(_peer)) { - } -}; - -class MTPgeochats_editChatTitle { // RPC method 'geochats.editChatTitle' -public: - MTPInputGeoChat vpeer; - MTPstring vtitle; - MTPstring vaddress; - - MTPgeochats_editChatTitle() { - } - MTPgeochats_editChatTitle(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_editChatTitle) { - read(from, end, cons); - } - MTPgeochats_editChatTitle(const MTPInputGeoChat &_peer, const MTPstring &_title, const MTPstring &_address) : vpeer(_peer), vtitle(_title), vaddress(_address) { - } - - uint32 innerLength() const { - return vpeer.innerLength() + vtitle.innerLength() + vaddress.innerLength(); - } - mtpTypeId type() const { - return mtpc_geochats_editChatTitle; - } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_editChatTitle) { - vpeer.read(from, end); - vtitle.read(from, end); - vaddress.read(from, end); - } - void write(mtpBuffer &to) const { - vpeer.write(to); - vtitle.write(to); - vaddress.write(to); - } - - typedef MTPgeochats_StatedMessage ResponseType; -}; -class MTPgeochats_EditChatTitle : public MTPBoxed { -public: - MTPgeochats_EditChatTitle() { - } - MTPgeochats_EditChatTitle(const MTPgeochats_editChatTitle &v) : MTPBoxed(v) { - } - MTPgeochats_EditChatTitle(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed(from, end, cons) { - } - MTPgeochats_EditChatTitle(const MTPInputGeoChat &_peer, const MTPstring &_title, const MTPstring &_address) : MTPBoxed(MTPgeochats_editChatTitle(_peer, _title, _address)) { - } -}; - -class MTPgeochats_editChatPhoto { // RPC method 'geochats.editChatPhoto' -public: - MTPInputGeoChat vpeer; - MTPInputChatPhoto vphoto; - - MTPgeochats_editChatPhoto() { - } - MTPgeochats_editChatPhoto(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_editChatPhoto) { - read(from, end, cons); - } - MTPgeochats_editChatPhoto(const MTPInputGeoChat &_peer, const MTPInputChatPhoto &_photo) : vpeer(_peer), vphoto(_photo) { - } - - uint32 innerLength() const { - return vpeer.innerLength() + vphoto.innerLength(); - } - mtpTypeId type() const { - return mtpc_geochats_editChatPhoto; - } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_editChatPhoto) { - vpeer.read(from, end); - vphoto.read(from, end); - } - void write(mtpBuffer &to) const { - vpeer.write(to); - vphoto.write(to); - } - - typedef MTPgeochats_StatedMessage ResponseType; -}; -class MTPgeochats_EditChatPhoto : public MTPBoxed { -public: - MTPgeochats_EditChatPhoto() { - } - MTPgeochats_EditChatPhoto(const MTPgeochats_editChatPhoto &v) : MTPBoxed(v) { - } - MTPgeochats_EditChatPhoto(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed(from, end, cons) { - } - MTPgeochats_EditChatPhoto(const MTPInputGeoChat &_peer, const MTPInputChatPhoto &_photo) : MTPBoxed(MTPgeochats_editChatPhoto(_peer, _photo)) { - } -}; - -class MTPgeochats_search { // RPC method 'geochats.search' -public: - MTPInputGeoChat vpeer; - MTPstring vq; - MTPMessagesFilter vfilter; - MTPint vmin_date; - MTPint vmax_date; - MTPint voffset; - MTPint vmax_id; - MTPint vlimit; - - MTPgeochats_search() { - } - MTPgeochats_search(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_search) { - read(from, end, cons); - } - MTPgeochats_search(const MTPInputGeoChat &_peer, const MTPstring &_q, const MTPMessagesFilter &_filter, MTPint _min_date, MTPint _max_date, MTPint _offset, MTPint _max_id, MTPint _limit) : vpeer(_peer), vq(_q), vfilter(_filter), vmin_date(_min_date), vmax_date(_max_date), voffset(_offset), vmax_id(_max_id), vlimit(_limit) { - } - - uint32 innerLength() const { - return vpeer.innerLength() + vq.innerLength() + vfilter.innerLength() + vmin_date.innerLength() + vmax_date.innerLength() + voffset.innerLength() + vmax_id.innerLength() + vlimit.innerLength(); - } - mtpTypeId type() const { - return mtpc_geochats_search; - } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_search) { - vpeer.read(from, end); - vq.read(from, end); - vfilter.read(from, end); - vmin_date.read(from, end); - vmax_date.read(from, end); - voffset.read(from, end); - vmax_id.read(from, end); - vlimit.read(from, end); - } - void write(mtpBuffer &to) const { - vpeer.write(to); - vq.write(to); - vfilter.write(to); - vmin_date.write(to); - vmax_date.write(to); - voffset.write(to); - vmax_id.write(to); - vlimit.write(to); - } - - typedef MTPgeochats_Messages ResponseType; -}; -class MTPgeochats_Search : public MTPBoxed { -public: - MTPgeochats_Search() { - } - MTPgeochats_Search(const MTPgeochats_search &v) : MTPBoxed(v) { - } - MTPgeochats_Search(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed(from, end, cons) { - } - MTPgeochats_Search(const MTPInputGeoChat &_peer, const MTPstring &_q, const MTPMessagesFilter &_filter, MTPint _min_date, MTPint _max_date, MTPint _offset, MTPint _max_id, MTPint _limit) : MTPBoxed(MTPgeochats_search(_peer, _q, _filter, _min_date, _max_date, _offset, _max_id, _limit)) { - } -}; - -class MTPgeochats_getHistory { // RPC method 'geochats.getHistory' -public: - MTPInputGeoChat vpeer; - MTPint voffset; - MTPint vmax_id; - MTPint vlimit; - - MTPgeochats_getHistory() { - } - MTPgeochats_getHistory(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_getHistory) { - read(from, end, cons); - } - MTPgeochats_getHistory(const MTPInputGeoChat &_peer, MTPint _offset, MTPint _max_id, MTPint _limit) : vpeer(_peer), voffset(_offset), vmax_id(_max_id), vlimit(_limit) { - } - - uint32 innerLength() const { - return vpeer.innerLength() + voffset.innerLength() + vmax_id.innerLength() + vlimit.innerLength(); - } - mtpTypeId type() const { - return mtpc_geochats_getHistory; - } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_getHistory) { - vpeer.read(from, end); - voffset.read(from, end); - vmax_id.read(from, end); - vlimit.read(from, end); - } - void write(mtpBuffer &to) const { - vpeer.write(to); - voffset.write(to); - vmax_id.write(to); - vlimit.write(to); - } - - typedef MTPgeochats_Messages ResponseType; -}; -class MTPgeochats_GetHistory : public MTPBoxed { -public: - MTPgeochats_GetHistory() { - } - MTPgeochats_GetHistory(const MTPgeochats_getHistory &v) : MTPBoxed(v) { - } - MTPgeochats_GetHistory(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed(from, end, cons) { - } - MTPgeochats_GetHistory(const MTPInputGeoChat &_peer, MTPint _offset, MTPint _max_id, MTPint _limit) : MTPBoxed(MTPgeochats_getHistory(_peer, _offset, _max_id, _limit)) { - } -}; - -class MTPgeochats_setTyping { // RPC method 'geochats.setTyping' -public: - MTPInputGeoChat vpeer; - MTPBool vtyping; - - MTPgeochats_setTyping() { - } - MTPgeochats_setTyping(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_setTyping) { - read(from, end, cons); - } - MTPgeochats_setTyping(const MTPInputGeoChat &_peer, MTPBool _typing) : vpeer(_peer), vtyping(_typing) { - } - - uint32 innerLength() const { - return vpeer.innerLength() + vtyping.innerLength(); - } - mtpTypeId type() const { - return mtpc_geochats_setTyping; - } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_setTyping) { - vpeer.read(from, end); - vtyping.read(from, end); - } - void write(mtpBuffer &to) const { - vpeer.write(to); - vtyping.write(to); - } - - typedef MTPBool ResponseType; -}; -class MTPgeochats_SetTyping : public MTPBoxed { -public: - MTPgeochats_SetTyping() { - } - MTPgeochats_SetTyping(const MTPgeochats_setTyping &v) : MTPBoxed(v) { - } - MTPgeochats_SetTyping(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed(from, end, cons) { - } - MTPgeochats_SetTyping(const MTPInputGeoChat &_peer, MTPBool _typing) : MTPBoxed(MTPgeochats_setTyping(_peer, _typing)) { - } -}; - -class MTPgeochats_sendMessage { // RPC method 'geochats.sendMessage' -public: - MTPInputGeoChat vpeer; - MTPstring vmessage; - MTPlong vrandom_id; - - MTPgeochats_sendMessage() { - } - MTPgeochats_sendMessage(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_sendMessage) { - read(from, end, cons); - } - MTPgeochats_sendMessage(const MTPInputGeoChat &_peer, const MTPstring &_message, const MTPlong &_random_id) : vpeer(_peer), vmessage(_message), vrandom_id(_random_id) { - } - - uint32 innerLength() const { - return vpeer.innerLength() + vmessage.innerLength() + vrandom_id.innerLength(); - } - mtpTypeId type() const { - return mtpc_geochats_sendMessage; - } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_sendMessage) { - vpeer.read(from, end); - vmessage.read(from, end); - vrandom_id.read(from, end); - } - void write(mtpBuffer &to) const { - vpeer.write(to); - vmessage.write(to); - vrandom_id.write(to); - } - - typedef MTPgeochats_StatedMessage ResponseType; -}; -class MTPgeochats_SendMessage : public MTPBoxed { -public: - MTPgeochats_SendMessage() { - } - MTPgeochats_SendMessage(const MTPgeochats_sendMessage &v) : MTPBoxed(v) { - } - MTPgeochats_SendMessage(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed(from, end, cons) { - } - MTPgeochats_SendMessage(const MTPInputGeoChat &_peer, const MTPstring &_message, const MTPlong &_random_id) : MTPBoxed(MTPgeochats_sendMessage(_peer, _message, _random_id)) { - } -}; - -class MTPgeochats_sendMedia { // RPC method 'geochats.sendMedia' -public: - MTPInputGeoChat vpeer; - MTPInputMedia vmedia; - MTPlong vrandom_id; - - MTPgeochats_sendMedia() { - } - MTPgeochats_sendMedia(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_sendMedia) { - read(from, end, cons); - } - MTPgeochats_sendMedia(const MTPInputGeoChat &_peer, const MTPInputMedia &_media, const MTPlong &_random_id) : vpeer(_peer), vmedia(_media), vrandom_id(_random_id) { - } - - uint32 innerLength() const { - return vpeer.innerLength() + vmedia.innerLength() + vrandom_id.innerLength(); - } - mtpTypeId type() const { - return mtpc_geochats_sendMedia; - } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_sendMedia) { - vpeer.read(from, end); - vmedia.read(from, end); - vrandom_id.read(from, end); - } - void write(mtpBuffer &to) const { - vpeer.write(to); - vmedia.write(to); - vrandom_id.write(to); - } - - typedef MTPgeochats_StatedMessage ResponseType; -}; -class MTPgeochats_SendMedia : public MTPBoxed { -public: - MTPgeochats_SendMedia() { - } - MTPgeochats_SendMedia(const MTPgeochats_sendMedia &v) : MTPBoxed(v) { - } - MTPgeochats_SendMedia(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed(from, end, cons) { - } - MTPgeochats_SendMedia(const MTPInputGeoChat &_peer, const MTPInputMedia &_media, const MTPlong &_random_id) : MTPBoxed(MTPgeochats_sendMedia(_peer, _media, _random_id)) { - } -}; - -class MTPgeochats_createGeoChat { // RPC method 'geochats.createGeoChat' -public: - MTPstring vtitle; - MTPInputGeoPoint vgeo_point; - MTPstring vaddress; - MTPstring vvenue; - - MTPgeochats_createGeoChat() { - } - MTPgeochats_createGeoChat(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_createGeoChat) { - read(from, end, cons); - } - MTPgeochats_createGeoChat(const MTPstring &_title, const MTPInputGeoPoint &_geo_point, const MTPstring &_address, const MTPstring &_venue) : vtitle(_title), vgeo_point(_geo_point), vaddress(_address), vvenue(_venue) { - } - - uint32 innerLength() const { - return vtitle.innerLength() + vgeo_point.innerLength() + vaddress.innerLength() + vvenue.innerLength(); - } - mtpTypeId type() const { - return mtpc_geochats_createGeoChat; - } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_createGeoChat) { - vtitle.read(from, end); - vgeo_point.read(from, end); - vaddress.read(from, end); - vvenue.read(from, end); - } - void write(mtpBuffer &to) const { - vtitle.write(to); - vgeo_point.write(to); - vaddress.write(to); - vvenue.write(to); - } - - typedef MTPgeochats_StatedMessage ResponseType; -}; -class MTPgeochats_CreateGeoChat : public MTPBoxed { -public: - MTPgeochats_CreateGeoChat() { - } - MTPgeochats_CreateGeoChat(const MTPgeochats_createGeoChat &v) : MTPBoxed(v) { - } - MTPgeochats_CreateGeoChat(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed(from, end, cons) { - } - MTPgeochats_CreateGeoChat(const MTPstring &_title, const MTPInputGeoPoint &_geo_point, const MTPstring &_address, const MTPstring &_venue) : MTPBoxed(MTPgeochats_createGeoChat(_title, _geo_point, _address, _venue)) { - } -}; - class MTPmessages_getDhConfig { // RPC method 'messages.getDhConfig' public: MTPint vversion; @@ -18609,11 +17509,11 @@ inline uint32 MTPinputMedia::innerLength() const { } case mtpc_inputMediaUploadedVideo: { const MTPDinputMediaUploadedVideo &v(c_inputMediaUploadedVideo()); - return v.vfile.innerLength() + v.vduration.innerLength() + v.vw.innerLength() + v.vh.innerLength() + v.vcaption.innerLength(); + return v.vfile.innerLength() + v.vduration.innerLength() + v.vw.innerLength() + v.vh.innerLength() + v.vmime_type.innerLength() + v.vcaption.innerLength(); } case mtpc_inputMediaUploadedThumbVideo: { const MTPDinputMediaUploadedThumbVideo &v(c_inputMediaUploadedThumbVideo()); - return v.vfile.innerLength() + v.vthumb.innerLength() + v.vduration.innerLength() + v.vw.innerLength() + v.vh.innerLength() + v.vcaption.innerLength(); + return v.vfile.innerLength() + v.vthumb.innerLength() + v.vduration.innerLength() + v.vw.innerLength() + v.vh.innerLength() + v.vmime_type.innerLength() + v.vcaption.innerLength(); } case mtpc_inputMediaVideo: { const MTPDinputMediaVideo &v(c_inputMediaVideo()); @@ -18685,6 +17585,7 @@ inline void MTPinputMedia::read(const mtpPrime *&from, const mtpPrime *end, mtpT v.vduration.read(from, end); v.vw.read(from, end); v.vh.read(from, end); + v.vmime_type.read(from, end); v.vcaption.read(from, end); } break; case mtpc_inputMediaUploadedThumbVideo: _type = cons; { @@ -18695,6 +17596,7 @@ inline void MTPinputMedia::read(const mtpPrime *&from, const mtpPrime *end, mtpT v.vduration.read(from, end); v.vw.read(from, end); v.vh.read(from, end); + v.vmime_type.read(from, end); v.vcaption.read(from, end); } break; case mtpc_inputMediaVideo: _type = cons; { @@ -18775,6 +17677,7 @@ inline void MTPinputMedia::write(mtpBuffer &to) const { v.vduration.write(to); v.vw.write(to); v.vh.write(to); + v.vmime_type.write(to); v.vcaption.write(to); } break; case mtpc_inputMediaUploadedThumbVideo: { @@ -18784,6 +17687,7 @@ inline void MTPinputMedia::write(mtpBuffer &to) const { v.vduration.write(to); v.vw.write(to); v.vh.write(to); + v.vmime_type.write(to); v.vcaption.write(to); } break; case mtpc_inputMediaVideo: { @@ -18888,11 +17792,11 @@ inline MTPinputMedia MTP_inputMediaGeoPoint(const MTPInputGeoPoint &_geo_point) inline MTPinputMedia MTP_inputMediaContact(const MTPstring &_phone_number, const MTPstring &_first_name, const MTPstring &_last_name) { return MTPinputMedia(new MTPDinputMediaContact(_phone_number, _first_name, _last_name)); } -inline MTPinputMedia MTP_inputMediaUploadedVideo(const MTPInputFile &_file, MTPint _duration, MTPint _w, MTPint _h, const MTPstring &_caption) { - return MTPinputMedia(new MTPDinputMediaUploadedVideo(_file, _duration, _w, _h, _caption)); +inline MTPinputMedia MTP_inputMediaUploadedVideo(const MTPInputFile &_file, MTPint _duration, MTPint _w, MTPint _h, const MTPstring &_mime_type, const MTPstring &_caption) { + return MTPinputMedia(new MTPDinputMediaUploadedVideo(_file, _duration, _w, _h, _mime_type, _caption)); } -inline MTPinputMedia MTP_inputMediaUploadedThumbVideo(const MTPInputFile &_file, const MTPInputFile &_thumb, MTPint _duration, MTPint _w, MTPint _h, const MTPstring &_caption) { - return MTPinputMedia(new MTPDinputMediaUploadedThumbVideo(_file, _thumb, _duration, _w, _h, _caption)); +inline MTPinputMedia MTP_inputMediaUploadedThumbVideo(const MTPInputFile &_file, const MTPInputFile &_thumb, MTPint _duration, MTPint _w, MTPint _h, const MTPstring &_mime_type, const MTPstring &_caption) { + return MTPinputMedia(new MTPDinputMediaUploadedThumbVideo(_file, _thumb, _duration, _w, _h, _mime_type, _caption)); } inline MTPinputMedia MTP_inputMediaVideo(const MTPInputVideo &_id, const MTPstring &_caption) { return MTPinputMedia(new MTPDinputMediaVideo(_id, _caption)); @@ -19798,10 +18702,6 @@ inline uint32 MTPchat::innerLength() const { const MTPDchatForbidden &v(c_chatForbidden()); return v.vid.innerLength() + v.vtitle.innerLength() + v.vdate.innerLength(); } - case mtpc_geoChat: { - const MTPDgeoChat &v(c_geoChat()); - return v.vid.innerLength() + v.vaccess_hash.innerLength() + v.vtitle.innerLength() + v.vaddress.innerLength() + v.vvenue.innerLength() + v.vgeo.innerLength() + v.vphoto.innerLength() + v.vparticipants_count.innerLength() + v.vdate.innerLength() + v.vchecked_in.innerLength() + v.vversion.innerLength(); - } } return 0; } @@ -19835,21 +18735,6 @@ inline void MTPchat::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId v.vtitle.read(from, end); v.vdate.read(from, end); } break; - case mtpc_geoChat: _type = cons; { - if (!data) setData(new MTPDgeoChat()); - MTPDgeoChat &v(_geoChat()); - v.vid.read(from, end); - v.vaccess_hash.read(from, end); - v.vtitle.read(from, end); - v.vaddress.read(from, end); - v.vvenue.read(from, end); - v.vgeo.read(from, end); - v.vphoto.read(from, end); - v.vparticipants_count.read(from, end); - v.vdate.read(from, end); - v.vchecked_in.read(from, end); - v.vversion.read(from, end); - } break; default: throw mtpErrorUnexpected(cons, "MTPchat"); } } @@ -19875,20 +18760,6 @@ inline void MTPchat::write(mtpBuffer &to) const { v.vtitle.write(to); v.vdate.write(to); } break; - case mtpc_geoChat: { - const MTPDgeoChat &v(c_geoChat()); - v.vid.write(to); - v.vaccess_hash.write(to); - v.vtitle.write(to); - v.vaddress.write(to); - v.vvenue.write(to); - v.vgeo.write(to); - v.vphoto.write(to); - v.vparticipants_count.write(to); - v.vdate.write(to); - v.vchecked_in.write(to); - v.vversion.write(to); - } break; } } inline MTPchat::MTPchat(mtpTypeId type) : mtpDataOwner(0), _type(type) { @@ -19896,7 +18767,6 @@ inline MTPchat::MTPchat(mtpTypeId type) : mtpDataOwner(0), _type(type) { case mtpc_chatEmpty: setData(new MTPDchatEmpty()); break; case mtpc_chat: setData(new MTPDchat()); break; case mtpc_chatForbidden: setData(new MTPDchatForbidden()); break; - case mtpc_geoChat: setData(new MTPDgeoChat()); break; default: throw mtpErrorBadTypeId(type, "MTPchat"); } } @@ -19906,8 +18776,6 @@ inline MTPchat::MTPchat(MTPDchat *_data) : mtpDataOwner(_data), _type(mtpc_chat) } inline MTPchat::MTPchat(MTPDchatForbidden *_data) : mtpDataOwner(_data), _type(mtpc_chatForbidden) { } -inline MTPchat::MTPchat(MTPDgeoChat *_data) : mtpDataOwner(_data), _type(mtpc_geoChat) { -} inline MTPchat MTP_chatEmpty(MTPint _id) { return MTPchat(new MTPDchatEmpty(_id)); } @@ -19917,9 +18785,6 @@ inline MTPchat MTP_chat(MTPint _id, const MTPstring &_title, const MTPChatPhoto inline MTPchat MTP_chatForbidden(MTPint _id, const MTPstring &_title, MTPint _date) { return MTPchat(new MTPDchatForbidden(_id, _title, _date)); } -inline MTPchat MTP_geoChat(MTPint _id, const MTPlong &_access_hash, const MTPstring &_title, const MTPstring &_address, const MTPstring &_venue, const MTPGeoPoint &_geo, const MTPChatPhoto &_photo, MTPint _participants_count, MTPint _date, MTPBool _checked_in, MTPint _version) { - return MTPchat(new MTPDgeoChat(_id, _access_hash, _title, _address, _venue, _geo, _photo, _participants_count, _date, _checked_in, _version)); -} inline MTPchatFull::MTPchatFull() : mtpDataOwner(new MTPDchatFull()) { } @@ -20117,7 +18982,7 @@ inline uint32 MTPmessage::innerLength() const { } case mtpc_message: { const MTPDmessage &v(c_message()); - return v.vflags.innerLength() + v.vid.innerLength() + v.vfrom_id.innerLength() + v.vto_id.innerLength() + (v.has_fwd_from_id() ? v.vfwd_from_id.innerLength() : 0) + (v.has_fwd_date() ? v.vfwd_date.innerLength() : 0) + (v.has_reply_to_msg_id() ? v.vreply_to_msg_id.innerLength() : 0) + v.vdate.innerLength() + v.vmessage.innerLength() + v.vmedia.innerLength() + (v.has_reply_markup() ? v.vreply_markup.innerLength() : 0) + (v.has_entities() ? v.ventities.innerLength() : 0); + return v.vflags.innerLength() + v.vid.innerLength() + v.vfrom_id.innerLength() + v.vto_id.innerLength() + (v.has_fwd_from_id() ? v.vfwd_from_id.innerLength() : 0) + (v.has_fwd_date() ? v.vfwd_date.innerLength() : 0) + (v.has_reply_to_msg_id() ? v.vreply_to_msg_id.innerLength() : 0) + v.vdate.innerLength() + v.vmessage.innerLength() + (v.has_media() ? v.vmedia.innerLength() : 0) + (v.has_reply_markup() ? v.vreply_markup.innerLength() : 0) + (v.has_entities() ? v.ventities.innerLength() : 0); } case mtpc_messageService: { const MTPDmessageService &v(c_messageService()); @@ -20150,7 +19015,7 @@ inline void MTPmessage::read(const mtpPrime *&from, const mtpPrime *end, mtpType if (v.has_reply_to_msg_id()) { v.vreply_to_msg_id.read(from, end); } else { v.vreply_to_msg_id = MTPint(); } v.vdate.read(from, end); v.vmessage.read(from, end); - v.vmedia.read(from, end); + if (v.has_media()) { v.vmedia.read(from, end); } else { v.vmedia = MTPMessageMedia(); } if (v.has_reply_markup()) { v.vreply_markup.read(from, end); } else { v.vreply_markup = MTPReplyMarkup(); } if (v.has_entities()) { v.ventities.read(from, end); } else { v.ventities = MTPVector(); } } break; @@ -20184,7 +19049,7 @@ inline void MTPmessage::write(mtpBuffer &to) const { if (v.has_reply_to_msg_id()) v.vreply_to_msg_id.write(to); v.vdate.write(to); v.vmessage.write(to); - v.vmedia.write(to); + if (v.has_media()) v.vmedia.write(to); if (v.has_reply_markup()) v.vreply_markup.write(to); if (v.has_entities()) v.ventities.write(to); } break; @@ -20450,10 +19315,6 @@ inline uint32 MTPmessageAction::innerLength() const { const MTPDmessageActionChatDeleteUser &v(c_messageActionChatDeleteUser()); return v.vuser_id.innerLength(); } - case mtpc_messageActionGeoChatCreate: { - const MTPDmessageActionGeoChatCreate &v(c_messageActionGeoChatCreate()); - return v.vtitle.innerLength() + v.vaddress.innerLength(); - } case mtpc_messageActionChatJoinedByLink: { const MTPDmessageActionChatJoinedByLink &v(c_messageActionChatJoinedByLink()); return v.vinviter_id.innerLength(); @@ -20496,13 +19357,6 @@ inline void MTPmessageAction::read(const mtpPrime *&from, const mtpPrime *end, m MTPDmessageActionChatDeleteUser &v(_messageActionChatDeleteUser()); v.vuser_id.read(from, end); } break; - case mtpc_messageActionGeoChatCreate: _type = cons; { - if (!data) setData(new MTPDmessageActionGeoChatCreate()); - MTPDmessageActionGeoChatCreate &v(_messageActionGeoChatCreate()); - v.vtitle.read(from, end); - v.vaddress.read(from, end); - } break; - case mtpc_messageActionGeoChatCheckin: _type = cons; break; case mtpc_messageActionChatJoinedByLink: _type = cons; { if (!data) setData(new MTPDmessageActionChatJoinedByLink()); MTPDmessageActionChatJoinedByLink &v(_messageActionChatJoinedByLink()); @@ -20534,11 +19388,6 @@ inline void MTPmessageAction::write(mtpBuffer &to) const { const MTPDmessageActionChatDeleteUser &v(c_messageActionChatDeleteUser()); v.vuser_id.write(to); } break; - case mtpc_messageActionGeoChatCreate: { - const MTPDmessageActionGeoChatCreate &v(c_messageActionGeoChatCreate()); - v.vtitle.write(to); - v.vaddress.write(to); - } break; case mtpc_messageActionChatJoinedByLink: { const MTPDmessageActionChatJoinedByLink &v(c_messageActionChatJoinedByLink()); v.vinviter_id.write(to); @@ -20554,8 +19403,6 @@ inline MTPmessageAction::MTPmessageAction(mtpTypeId type) : mtpDataOwner(0), _ty case mtpc_messageActionChatDeletePhoto: break; case mtpc_messageActionChatAddUser: setData(new MTPDmessageActionChatAddUser()); break; case mtpc_messageActionChatDeleteUser: setData(new MTPDmessageActionChatDeleteUser()); break; - case mtpc_messageActionGeoChatCreate: setData(new MTPDmessageActionGeoChatCreate()); break; - case mtpc_messageActionGeoChatCheckin: break; case mtpc_messageActionChatJoinedByLink: setData(new MTPDmessageActionChatJoinedByLink()); break; default: throw mtpErrorBadTypeId(type, "MTPmessageAction"); } @@ -20570,8 +19417,6 @@ inline MTPmessageAction::MTPmessageAction(MTPDmessageActionChatAddUser *_data) : } inline MTPmessageAction::MTPmessageAction(MTPDmessageActionChatDeleteUser *_data) : mtpDataOwner(_data), _type(mtpc_messageActionChatDeleteUser) { } -inline MTPmessageAction::MTPmessageAction(MTPDmessageActionGeoChatCreate *_data) : mtpDataOwner(_data), _type(mtpc_messageActionGeoChatCreate) { -} inline MTPmessageAction::MTPmessageAction(MTPDmessageActionChatJoinedByLink *_data) : mtpDataOwner(_data), _type(mtpc_messageActionChatJoinedByLink) { } inline MTPmessageAction MTP_messageActionEmpty() { @@ -20595,12 +19440,6 @@ inline MTPmessageAction MTP_messageActionChatAddUser(MTPint _user_id) { inline MTPmessageAction MTP_messageActionChatDeleteUser(MTPint _user_id) { return MTPmessageAction(new MTPDmessageActionChatDeleteUser(_user_id)); } -inline MTPmessageAction MTP_messageActionGeoChatCreate(const MTPstring &_title, const MTPstring &_address) { - return MTPmessageAction(new MTPDmessageActionGeoChatCreate(_title, _address)); -} -inline MTPmessageAction MTP_messageActionGeoChatCheckin() { - return MTPmessageAction(mtpc_messageActionGeoChatCheckin); -} inline MTPmessageAction MTP_messageActionChatJoinedByLink(MTPint _inviter_id) { return MTPmessageAction(new MTPDmessageActionChatJoinedByLink(_inviter_id)); } @@ -21103,10 +19942,6 @@ inline uint32 MTPinputNotifyPeer::innerLength() const { const MTPDinputNotifyPeer &v(c_inputNotifyPeer()); return v.vpeer.innerLength(); } - case mtpc_inputNotifyGeoChatPeer: { - const MTPDinputNotifyGeoChatPeer &v(c_inputNotifyGeoChatPeer()); - return v.vpeer.innerLength(); - } } return 0; } @@ -21125,11 +19960,6 @@ inline void MTPinputNotifyPeer::read(const mtpPrime *&from, const mtpPrime *end, case mtpc_inputNotifyUsers: _type = cons; break; case mtpc_inputNotifyChats: _type = cons; break; case mtpc_inputNotifyAll: _type = cons; break; - case mtpc_inputNotifyGeoChatPeer: _type = cons; { - if (!data) setData(new MTPDinputNotifyGeoChatPeer()); - MTPDinputNotifyGeoChatPeer &v(_inputNotifyGeoChatPeer()); - v.vpeer.read(from, end); - } break; default: throw mtpErrorUnexpected(cons, "MTPinputNotifyPeer"); } } @@ -21139,10 +19969,6 @@ inline void MTPinputNotifyPeer::write(mtpBuffer &to) const { const MTPDinputNotifyPeer &v(c_inputNotifyPeer()); v.vpeer.write(to); } break; - case mtpc_inputNotifyGeoChatPeer: { - const MTPDinputNotifyGeoChatPeer &v(c_inputNotifyGeoChatPeer()); - v.vpeer.write(to); - } break; } } inline MTPinputNotifyPeer::MTPinputNotifyPeer(mtpTypeId type) : mtpDataOwner(0), _type(type) { @@ -21151,14 +19977,11 @@ inline MTPinputNotifyPeer::MTPinputNotifyPeer(mtpTypeId type) : mtpDataOwner(0), case mtpc_inputNotifyUsers: break; case mtpc_inputNotifyChats: break; case mtpc_inputNotifyAll: break; - case mtpc_inputNotifyGeoChatPeer: setData(new MTPDinputNotifyGeoChatPeer()); break; default: throw mtpErrorBadTypeId(type, "MTPinputNotifyPeer"); } } inline MTPinputNotifyPeer::MTPinputNotifyPeer(MTPDinputNotifyPeer *_data) : mtpDataOwner(_data), _type(mtpc_inputNotifyPeer) { } -inline MTPinputNotifyPeer::MTPinputNotifyPeer(MTPDinputNotifyGeoChatPeer *_data) : mtpDataOwner(_data), _type(mtpc_inputNotifyGeoChatPeer) { -} inline MTPinputNotifyPeer MTP_inputNotifyPeer(const MTPInputPeer &_peer) { return MTPinputNotifyPeer(new MTPDinputNotifyPeer(_peer)); } @@ -21171,9 +19994,6 @@ inline MTPinputNotifyPeer MTP_inputNotifyChats() { inline MTPinputNotifyPeer MTP_inputNotifyAll() { return MTPinputNotifyPeer(mtpc_inputNotifyAll); } -inline MTPinputNotifyPeer MTP_inputNotifyGeoChatPeer(const MTPInputGeoChat &_peer) { - return MTPinputNotifyPeer(new MTPDinputNotifyGeoChatPeer(_peer)); -} inline uint32 MTPinputPeerNotifyEvents::innerLength() const { return 0; @@ -21584,35 +20404,6 @@ inline MTPcontactStatus MTP_contactStatus(MTPint _user_id, const MTPUserStatus & return MTPcontactStatus(new MTPDcontactStatus(_user_id, _status)); } -inline MTPchatLocated::MTPchatLocated() : mtpDataOwner(new MTPDchatLocated()) { -} - -inline uint32 MTPchatLocated::innerLength() const { - const MTPDchatLocated &v(c_chatLocated()); - return v.vchat_id.innerLength() + v.vdistance.innerLength(); -} -inline mtpTypeId MTPchatLocated::type() const { - return mtpc_chatLocated; -} -inline void MTPchatLocated::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) { - if (cons != mtpc_chatLocated) throw mtpErrorUnexpected(cons, "MTPchatLocated"); - - if (!data) setData(new MTPDchatLocated()); - MTPDchatLocated &v(_chatLocated()); - v.vchat_id.read(from, end); - v.vdistance.read(from, end); -} -inline void MTPchatLocated::write(mtpBuffer &to) const { - const MTPDchatLocated &v(c_chatLocated()); - v.vchat_id.write(to); - v.vdistance.write(to); -} -inline MTPchatLocated::MTPchatLocated(MTPDchatLocated *_data) : mtpDataOwner(_data) { -} -inline MTPchatLocated MTP_chatLocated(MTPint _chat_id, MTPint _distance) { - return MTPchatLocated(new MTPDchatLocated(_chat_id, _distance)); -} - inline MTPcontacts_link::MTPcontacts_link() : mtpDataOwner(new MTPDcontacts_link()) { } @@ -21974,91 +20765,6 @@ inline MTPmessages_messages MTP_messages_messagesSlice(MTPint _count, const MTPV return MTPmessages_messages(new MTPDmessages_messagesSlice(_count, _messages, _chats, _users)); } -inline uint32 MTPmessages_sentMessage::innerLength() const { - switch (_type) { - case mtpc_messages_sentMessage: { - const MTPDmessages_sentMessage &v(c_messages_sentMessage()); - return v.vid.innerLength() + v.vdate.innerLength() + v.vmedia.innerLength() + v.ventities.innerLength() + v.vpts.innerLength() + v.vpts_count.innerLength(); - } - case mtpc_messages_sentMessageLink: { - const MTPDmessages_sentMessageLink &v(c_messages_sentMessageLink()); - return v.vid.innerLength() + v.vdate.innerLength() + v.vmedia.innerLength() + v.vpts.innerLength() + v.vpts_count.innerLength() + v.vlinks.innerLength() + v.vseq.innerLength(); - } - } - return 0; -} -inline mtpTypeId MTPmessages_sentMessage::type() const { - if (!_type) throw mtpErrorUninitialized(); - return _type; -} -inline void MTPmessages_sentMessage::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) { - if (cons != _type) setData(0); - switch (cons) { - case mtpc_messages_sentMessage: _type = cons; { - if (!data) setData(new MTPDmessages_sentMessage()); - MTPDmessages_sentMessage &v(_messages_sentMessage()); - v.vid.read(from, end); - v.vdate.read(from, end); - v.vmedia.read(from, end); - v.ventities.read(from, end); - v.vpts.read(from, end); - v.vpts_count.read(from, end); - } break; - case mtpc_messages_sentMessageLink: _type = cons; { - if (!data) setData(new MTPDmessages_sentMessageLink()); - MTPDmessages_sentMessageLink &v(_messages_sentMessageLink()); - v.vid.read(from, end); - v.vdate.read(from, end); - v.vmedia.read(from, end); - v.vpts.read(from, end); - v.vpts_count.read(from, end); - v.vlinks.read(from, end); - v.vseq.read(from, end); - } break; - default: throw mtpErrorUnexpected(cons, "MTPmessages_sentMessage"); - } -} -inline void MTPmessages_sentMessage::write(mtpBuffer &to) const { - switch (_type) { - case mtpc_messages_sentMessage: { - const MTPDmessages_sentMessage &v(c_messages_sentMessage()); - v.vid.write(to); - v.vdate.write(to); - v.vmedia.write(to); - v.ventities.write(to); - v.vpts.write(to); - v.vpts_count.write(to); - } break; - case mtpc_messages_sentMessageLink: { - const MTPDmessages_sentMessageLink &v(c_messages_sentMessageLink()); - v.vid.write(to); - v.vdate.write(to); - v.vmedia.write(to); - v.vpts.write(to); - v.vpts_count.write(to); - v.vlinks.write(to); - v.vseq.write(to); - } break; - } -} -inline MTPmessages_sentMessage::MTPmessages_sentMessage(mtpTypeId type) : mtpDataOwner(0), _type(type) { - switch (type) { - case mtpc_messages_sentMessage: setData(new MTPDmessages_sentMessage()); break; - case mtpc_messages_sentMessageLink: setData(new MTPDmessages_sentMessageLink()); break; - default: throw mtpErrorBadTypeId(type, "MTPmessages_sentMessage"); - } -} -inline MTPmessages_sentMessage::MTPmessages_sentMessage(MTPDmessages_sentMessage *_data) : mtpDataOwner(_data), _type(mtpc_messages_sentMessage) { -} -inline MTPmessages_sentMessage::MTPmessages_sentMessage(MTPDmessages_sentMessageLink *_data) : mtpDataOwner(_data), _type(mtpc_messages_sentMessageLink) { -} -inline MTPmessages_sentMessage MTP_messages_sentMessage(MTPint _id, MTPint _date, const MTPMessageMedia &_media, const MTPVector &_entities, MTPint _pts, MTPint _pts_count) { - return MTPmessages_sentMessage(new MTPDmessages_sentMessage(_id, _date, _media, _entities, _pts, _pts_count)); -} -inline MTPmessages_sentMessage MTP_messages_sentMessageLink(MTPint _id, MTPint _date, const MTPMessageMedia &_media, MTPint _pts, MTPint _pts_count, const MTPVector &_links, MTPint _seq) { - return MTPmessages_sentMessage(new MTPDmessages_sentMessageLink(_id, _date, _media, _pts, _pts_count, _links, _seq)); -} - inline MTPmessages_chats::MTPmessages_chats() : mtpDataOwner(new MTPDmessages_chats()) { } @@ -22265,10 +20971,6 @@ inline uint32 MTPupdate::innerLength() const { const MTPDupdateNewAuthorization &v(c_updateNewAuthorization()); return v.vauth_key_id.innerLength() + v.vdate.innerLength() + v.vdevice.innerLength() + v.vlocation.innerLength(); } - case mtpc_updateNewGeoChatMessage: { - const MTPDupdateNewGeoChatMessage &v(c_updateNewGeoChatMessage()); - return v.vmessage.innerLength(); - } case mtpc_updateNewEncryptedMessage: { const MTPDupdateNewEncryptedMessage &v(c_updateNewEncryptedMessage()); return v.vmessage.innerLength() + v.vqts.innerLength(); @@ -22424,11 +21126,6 @@ inline void MTPupdate::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeI v.vdevice.read(from, end); v.vlocation.read(from, end); } break; - case mtpc_updateNewGeoChatMessage: _type = cons; { - if (!data) setData(new MTPDupdateNewGeoChatMessage()); - MTPDupdateNewGeoChatMessage &v(_updateNewGeoChatMessage()); - v.vmessage.read(from, end); - } break; case mtpc_updateNewEncryptedMessage: _type = cons; { if (!data) setData(new MTPDupdateNewEncryptedMessage()); MTPDupdateNewEncryptedMessage &v(_updateNewEncryptedMessage()); @@ -22607,10 +21304,6 @@ inline void MTPupdate::write(mtpBuffer &to) const { v.vdevice.write(to); v.vlocation.write(to); } break; - case mtpc_updateNewGeoChatMessage: { - const MTPDupdateNewGeoChatMessage &v(c_updateNewGeoChatMessage()); - v.vmessage.write(to); - } break; case mtpc_updateNewEncryptedMessage: { const MTPDupdateNewEncryptedMessage &v(c_updateNewEncryptedMessage()); v.vmessage.write(to); @@ -22715,7 +21408,6 @@ inline MTPupdate::MTPupdate(mtpTypeId type) : mtpDataOwner(0), _type(type) { case mtpc_updateContactRegistered: setData(new MTPDupdateContactRegistered()); break; case mtpc_updateContactLink: setData(new MTPDupdateContactLink()); break; case mtpc_updateNewAuthorization: setData(new MTPDupdateNewAuthorization()); break; - case mtpc_updateNewGeoChatMessage: setData(new MTPDupdateNewGeoChatMessage()); break; case mtpc_updateNewEncryptedMessage: setData(new MTPDupdateNewEncryptedMessage()); break; case mtpc_updateEncryptedChatTyping: setData(new MTPDupdateEncryptedChatTyping()); break; case mtpc_updateEncryption: setData(new MTPDupdateEncryption()); break; @@ -22759,8 +21451,6 @@ inline MTPupdate::MTPupdate(MTPDupdateContactLink *_data) : mtpDataOwner(_data), } inline MTPupdate::MTPupdate(MTPDupdateNewAuthorization *_data) : mtpDataOwner(_data), _type(mtpc_updateNewAuthorization) { } -inline MTPupdate::MTPupdate(MTPDupdateNewGeoChatMessage *_data) : mtpDataOwner(_data), _type(mtpc_updateNewGeoChatMessage) { -} inline MTPupdate::MTPupdate(MTPDupdateNewEncryptedMessage *_data) : mtpDataOwner(_data), _type(mtpc_updateNewEncryptedMessage) { } inline MTPupdate::MTPupdate(MTPDupdateEncryptedChatTyping *_data) : mtpDataOwner(_data), _type(mtpc_updateEncryptedChatTyping) { @@ -22829,9 +21519,6 @@ inline MTPupdate MTP_updateContactLink(MTPint _user_id, const MTPContactLink &_m inline MTPupdate MTP_updateNewAuthorization(const MTPlong &_auth_key_id, MTPint _date, const MTPstring &_device, const MTPstring &_location) { return MTPupdate(new MTPDupdateNewAuthorization(_auth_key_id, _date, _device, _location)); } -inline MTPupdate MTP_updateNewGeoChatMessage(const MTPGeoChatMessage &_message) { - return MTPupdate(new MTPDupdateNewGeoChatMessage(_message)); -} inline MTPupdate MTP_updateNewEncryptedMessage(const MTPEncryptedMessage &_message, MTPint _qts) { return MTPupdate(new MTPDupdateNewEncryptedMessage(_message, _qts)); } @@ -23042,6 +21729,10 @@ inline uint32 MTPupdates::innerLength() const { const MTPDupdates &v(c_updates()); return v.vupdates.innerLength() + v.vusers.innerLength() + v.vchats.innerLength() + v.vdate.innerLength() + v.vseq.innerLength(); } + case mtpc_updateShortSentMessage: { + const MTPDupdateShortSentMessage &v(c_updateShortSentMessage()); + return v.vflags.innerLength() + v.vid.innerLength() + v.vpts.innerLength() + v.vpts_count.innerLength() + v.vdate.innerLength() + (v.has_media() ? v.vmedia.innerLength() : 0) + (v.has_entities() ? v.ventities.innerLength() : 0); + } } return 0; } @@ -23109,6 +21800,17 @@ inline void MTPupdates::read(const mtpPrime *&from, const mtpPrime *end, mtpType v.vdate.read(from, end); v.vseq.read(from, end); } break; + case mtpc_updateShortSentMessage: _type = cons; { + if (!data) setData(new MTPDupdateShortSentMessage()); + MTPDupdateShortSentMessage &v(_updateShortSentMessage()); + v.vflags.read(from, end); + v.vid.read(from, end); + v.vpts.read(from, end); + v.vpts_count.read(from, end); + v.vdate.read(from, end); + if (v.has_media()) { v.vmedia.read(from, end); } else { v.vmedia = MTPMessageMedia(); } + if (v.has_entities()) { v.ventities.read(from, end); } else { v.ventities = MTPVector(); } + } break; default: throw mtpErrorUnexpected(cons, "MTPupdates"); } } @@ -23165,6 +21867,16 @@ inline void MTPupdates::write(mtpBuffer &to) const { v.vdate.write(to); v.vseq.write(to); } break; + case mtpc_updateShortSentMessage: { + const MTPDupdateShortSentMessage &v(c_updateShortSentMessage()); + v.vflags.write(to); + v.vid.write(to); + v.vpts.write(to); + v.vpts_count.write(to); + v.vdate.write(to); + if (v.has_media()) v.vmedia.write(to); + if (v.has_entities()) v.ventities.write(to); + } break; } } inline MTPupdates::MTPupdates(mtpTypeId type) : mtpDataOwner(0), _type(type) { @@ -23175,6 +21887,7 @@ inline MTPupdates::MTPupdates(mtpTypeId type) : mtpDataOwner(0), _type(type) { case mtpc_updateShort: setData(new MTPDupdateShort()); break; case mtpc_updatesCombined: setData(new MTPDupdatesCombined()); break; case mtpc_updates: setData(new MTPDupdates()); break; + case mtpc_updateShortSentMessage: setData(new MTPDupdateShortSentMessage()); break; default: throw mtpErrorBadTypeId(type, "MTPupdates"); } } @@ -23188,6 +21901,8 @@ inline MTPupdates::MTPupdates(MTPDupdatesCombined *_data) : mtpDataOwner(_data), } inline MTPupdates::MTPupdates(MTPDupdates *_data) : mtpDataOwner(_data), _type(mtpc_updates) { } +inline MTPupdates::MTPupdates(MTPDupdateShortSentMessage *_data) : mtpDataOwner(_data), _type(mtpc_updateShortSentMessage) { +} inline MTPupdates MTP_updatesTooLong() { return MTPupdates(mtpc_updatesTooLong); } @@ -23206,6 +21921,9 @@ inline MTPupdates MTP_updatesCombined(const MTPVector &_updates, cons inline MTPupdates MTP_updates(const MTPVector &_updates, const MTPVector &_users, const MTPVector &_chats, MTPint _date, MTPint _seq) { return MTPupdates(new MTPDupdates(_updates, _users, _chats, _date, _seq)); } +inline MTPupdates MTP_updateShortSentMessage(MTPint _flags, MTPint _id, MTPint _pts, MTPint _pts_count, MTPint _date, const MTPMessageMedia &_media, const MTPVector &_entities) { + return MTPupdates(new MTPDupdateShortSentMessage(_flags, _id, _pts, _pts_count, _date, _media, _entities)); +} inline uint32 MTPphotos_photos::innerLength() const { switch (_type) { @@ -23543,276 +22261,6 @@ inline MTPhelp_inviteText MTP_help_inviteText(const MTPstring &_message) { return MTPhelp_inviteText(new MTPDhelp_inviteText(_message)); } -inline MTPinputGeoChat::MTPinputGeoChat() : mtpDataOwner(new MTPDinputGeoChat()) { -} - -inline uint32 MTPinputGeoChat::innerLength() const { - const MTPDinputGeoChat &v(c_inputGeoChat()); - return v.vchat_id.innerLength() + v.vaccess_hash.innerLength(); -} -inline mtpTypeId MTPinputGeoChat::type() const { - return mtpc_inputGeoChat; -} -inline void MTPinputGeoChat::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) { - if (cons != mtpc_inputGeoChat) throw mtpErrorUnexpected(cons, "MTPinputGeoChat"); - - if (!data) setData(new MTPDinputGeoChat()); - MTPDinputGeoChat &v(_inputGeoChat()); - v.vchat_id.read(from, end); - v.vaccess_hash.read(from, end); -} -inline void MTPinputGeoChat::write(mtpBuffer &to) const { - const MTPDinputGeoChat &v(c_inputGeoChat()); - v.vchat_id.write(to); - v.vaccess_hash.write(to); -} -inline MTPinputGeoChat::MTPinputGeoChat(MTPDinputGeoChat *_data) : mtpDataOwner(_data) { -} -inline MTPinputGeoChat MTP_inputGeoChat(MTPint _chat_id, const MTPlong &_access_hash) { - return MTPinputGeoChat(new MTPDinputGeoChat(_chat_id, _access_hash)); -} - -inline uint32 MTPgeoChatMessage::innerLength() const { - switch (_type) { - case mtpc_geoChatMessageEmpty: { - const MTPDgeoChatMessageEmpty &v(c_geoChatMessageEmpty()); - return v.vchat_id.innerLength() + v.vid.innerLength(); - } - case mtpc_geoChatMessage: { - const MTPDgeoChatMessage &v(c_geoChatMessage()); - return v.vchat_id.innerLength() + v.vid.innerLength() + v.vfrom_id.innerLength() + v.vdate.innerLength() + v.vmessage.innerLength() + v.vmedia.innerLength(); - } - case mtpc_geoChatMessageService: { - const MTPDgeoChatMessageService &v(c_geoChatMessageService()); - return v.vchat_id.innerLength() + v.vid.innerLength() + v.vfrom_id.innerLength() + v.vdate.innerLength() + v.vaction.innerLength(); - } - } - return 0; -} -inline mtpTypeId MTPgeoChatMessage::type() const { - if (!_type) throw mtpErrorUninitialized(); - return _type; -} -inline void MTPgeoChatMessage::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) { - if (cons != _type) setData(0); - switch (cons) { - case mtpc_geoChatMessageEmpty: _type = cons; { - if (!data) setData(new MTPDgeoChatMessageEmpty()); - MTPDgeoChatMessageEmpty &v(_geoChatMessageEmpty()); - v.vchat_id.read(from, end); - v.vid.read(from, end); - } break; - case mtpc_geoChatMessage: _type = cons; { - if (!data) setData(new MTPDgeoChatMessage()); - MTPDgeoChatMessage &v(_geoChatMessage()); - v.vchat_id.read(from, end); - v.vid.read(from, end); - v.vfrom_id.read(from, end); - v.vdate.read(from, end); - v.vmessage.read(from, end); - v.vmedia.read(from, end); - } break; - case mtpc_geoChatMessageService: _type = cons; { - if (!data) setData(new MTPDgeoChatMessageService()); - MTPDgeoChatMessageService &v(_geoChatMessageService()); - v.vchat_id.read(from, end); - v.vid.read(from, end); - v.vfrom_id.read(from, end); - v.vdate.read(from, end); - v.vaction.read(from, end); - } break; - default: throw mtpErrorUnexpected(cons, "MTPgeoChatMessage"); - } -} -inline void MTPgeoChatMessage::write(mtpBuffer &to) const { - switch (_type) { - case mtpc_geoChatMessageEmpty: { - const MTPDgeoChatMessageEmpty &v(c_geoChatMessageEmpty()); - v.vchat_id.write(to); - v.vid.write(to); - } break; - case mtpc_geoChatMessage: { - const MTPDgeoChatMessage &v(c_geoChatMessage()); - v.vchat_id.write(to); - v.vid.write(to); - v.vfrom_id.write(to); - v.vdate.write(to); - v.vmessage.write(to); - v.vmedia.write(to); - } break; - case mtpc_geoChatMessageService: { - const MTPDgeoChatMessageService &v(c_geoChatMessageService()); - v.vchat_id.write(to); - v.vid.write(to); - v.vfrom_id.write(to); - v.vdate.write(to); - v.vaction.write(to); - } break; - } -} -inline MTPgeoChatMessage::MTPgeoChatMessage(mtpTypeId type) : mtpDataOwner(0), _type(type) { - switch (type) { - case mtpc_geoChatMessageEmpty: setData(new MTPDgeoChatMessageEmpty()); break; - case mtpc_geoChatMessage: setData(new MTPDgeoChatMessage()); break; - case mtpc_geoChatMessageService: setData(new MTPDgeoChatMessageService()); break; - default: throw mtpErrorBadTypeId(type, "MTPgeoChatMessage"); - } -} -inline MTPgeoChatMessage::MTPgeoChatMessage(MTPDgeoChatMessageEmpty *_data) : mtpDataOwner(_data), _type(mtpc_geoChatMessageEmpty) { -} -inline MTPgeoChatMessage::MTPgeoChatMessage(MTPDgeoChatMessage *_data) : mtpDataOwner(_data), _type(mtpc_geoChatMessage) { -} -inline MTPgeoChatMessage::MTPgeoChatMessage(MTPDgeoChatMessageService *_data) : mtpDataOwner(_data), _type(mtpc_geoChatMessageService) { -} -inline MTPgeoChatMessage MTP_geoChatMessageEmpty(MTPint _chat_id, MTPint _id) { - return MTPgeoChatMessage(new MTPDgeoChatMessageEmpty(_chat_id, _id)); -} -inline MTPgeoChatMessage MTP_geoChatMessage(MTPint _chat_id, MTPint _id, MTPint _from_id, MTPint _date, const MTPstring &_message, const MTPMessageMedia &_media) { - return MTPgeoChatMessage(new MTPDgeoChatMessage(_chat_id, _id, _from_id, _date, _message, _media)); -} -inline MTPgeoChatMessage MTP_geoChatMessageService(MTPint _chat_id, MTPint _id, MTPint _from_id, MTPint _date, const MTPMessageAction &_action) { - return MTPgeoChatMessage(new MTPDgeoChatMessageService(_chat_id, _id, _from_id, _date, _action)); -} - -inline MTPgeochats_statedMessage::MTPgeochats_statedMessage() : mtpDataOwner(new MTPDgeochats_statedMessage()) { -} - -inline uint32 MTPgeochats_statedMessage::innerLength() const { - const MTPDgeochats_statedMessage &v(c_geochats_statedMessage()); - return v.vmessage.innerLength() + v.vchats.innerLength() + v.vusers.innerLength() + v.vseq.innerLength(); -} -inline mtpTypeId MTPgeochats_statedMessage::type() const { - return mtpc_geochats_statedMessage; -} -inline void MTPgeochats_statedMessage::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) { - if (cons != mtpc_geochats_statedMessage) throw mtpErrorUnexpected(cons, "MTPgeochats_statedMessage"); - - if (!data) setData(new MTPDgeochats_statedMessage()); - MTPDgeochats_statedMessage &v(_geochats_statedMessage()); - v.vmessage.read(from, end); - v.vchats.read(from, end); - v.vusers.read(from, end); - v.vseq.read(from, end); -} -inline void MTPgeochats_statedMessage::write(mtpBuffer &to) const { - const MTPDgeochats_statedMessage &v(c_geochats_statedMessage()); - v.vmessage.write(to); - v.vchats.write(to); - v.vusers.write(to); - v.vseq.write(to); -} -inline MTPgeochats_statedMessage::MTPgeochats_statedMessage(MTPDgeochats_statedMessage *_data) : mtpDataOwner(_data) { -} -inline MTPgeochats_statedMessage MTP_geochats_statedMessage(const MTPGeoChatMessage &_message, const MTPVector &_chats, const MTPVector &_users, MTPint _seq) { - return MTPgeochats_statedMessage(new MTPDgeochats_statedMessage(_message, _chats, _users, _seq)); -} - -inline MTPgeochats_located::MTPgeochats_located() : mtpDataOwner(new MTPDgeochats_located()) { -} - -inline uint32 MTPgeochats_located::innerLength() const { - const MTPDgeochats_located &v(c_geochats_located()); - return v.vresults.innerLength() + v.vmessages.innerLength() + v.vchats.innerLength() + v.vusers.innerLength(); -} -inline mtpTypeId MTPgeochats_located::type() const { - return mtpc_geochats_located; -} -inline void MTPgeochats_located::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) { - if (cons != mtpc_geochats_located) throw mtpErrorUnexpected(cons, "MTPgeochats_located"); - - if (!data) setData(new MTPDgeochats_located()); - MTPDgeochats_located &v(_geochats_located()); - v.vresults.read(from, end); - v.vmessages.read(from, end); - v.vchats.read(from, end); - v.vusers.read(from, end); -} -inline void MTPgeochats_located::write(mtpBuffer &to) const { - const MTPDgeochats_located &v(c_geochats_located()); - v.vresults.write(to); - v.vmessages.write(to); - v.vchats.write(to); - v.vusers.write(to); -} -inline MTPgeochats_located::MTPgeochats_located(MTPDgeochats_located *_data) : mtpDataOwner(_data) { -} -inline MTPgeochats_located MTP_geochats_located(const MTPVector &_results, const MTPVector &_messages, const MTPVector &_chats, const MTPVector &_users) { - return MTPgeochats_located(new MTPDgeochats_located(_results, _messages, _chats, _users)); -} - -inline uint32 MTPgeochats_messages::innerLength() const { - switch (_type) { - case mtpc_geochats_messages: { - const MTPDgeochats_messages &v(c_geochats_messages()); - return v.vmessages.innerLength() + v.vchats.innerLength() + v.vusers.innerLength(); - } - case mtpc_geochats_messagesSlice: { - const MTPDgeochats_messagesSlice &v(c_geochats_messagesSlice()); - return v.vcount.innerLength() + v.vmessages.innerLength() + v.vchats.innerLength() + v.vusers.innerLength(); - } - } - return 0; -} -inline mtpTypeId MTPgeochats_messages::type() const { - if (!_type) throw mtpErrorUninitialized(); - return _type; -} -inline void MTPgeochats_messages::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) { - if (cons != _type) setData(0); - switch (cons) { - case mtpc_geochats_messages: _type = cons; { - if (!data) setData(new MTPDgeochats_messages()); - MTPDgeochats_messages &v(_geochats_messages()); - v.vmessages.read(from, end); - v.vchats.read(from, end); - v.vusers.read(from, end); - } break; - case mtpc_geochats_messagesSlice: _type = cons; { - if (!data) setData(new MTPDgeochats_messagesSlice()); - MTPDgeochats_messagesSlice &v(_geochats_messagesSlice()); - v.vcount.read(from, end); - v.vmessages.read(from, end); - v.vchats.read(from, end); - v.vusers.read(from, end); - } break; - default: throw mtpErrorUnexpected(cons, "MTPgeochats_messages"); - } -} -inline void MTPgeochats_messages::write(mtpBuffer &to) const { - switch (_type) { - case mtpc_geochats_messages: { - const MTPDgeochats_messages &v(c_geochats_messages()); - v.vmessages.write(to); - v.vchats.write(to); - v.vusers.write(to); - } break; - case mtpc_geochats_messagesSlice: { - const MTPDgeochats_messagesSlice &v(c_geochats_messagesSlice()); - v.vcount.write(to); - v.vmessages.write(to); - v.vchats.write(to); - v.vusers.write(to); - } break; - } -} -inline MTPgeochats_messages::MTPgeochats_messages(mtpTypeId type) : mtpDataOwner(0), _type(type) { - switch (type) { - case mtpc_geochats_messages: setData(new MTPDgeochats_messages()); break; - case mtpc_geochats_messagesSlice: setData(new MTPDgeochats_messagesSlice()); break; - default: throw mtpErrorBadTypeId(type, "MTPgeochats_messages"); - } -} -inline MTPgeochats_messages::MTPgeochats_messages(MTPDgeochats_messages *_data) : mtpDataOwner(_data), _type(mtpc_geochats_messages) { -} -inline MTPgeochats_messages::MTPgeochats_messages(MTPDgeochats_messagesSlice *_data) : mtpDataOwner(_data), _type(mtpc_geochats_messagesSlice) { -} -inline MTPgeochats_messages MTP_geochats_messages(const MTPVector &_messages, const MTPVector &_chats, const MTPVector &_users) { - return MTPgeochats_messages(new MTPDgeochats_messages(_messages, _chats, _users)); -} -inline MTPgeochats_messages MTP_geochats_messagesSlice(MTPint _count, const MTPVector &_messages, const MTPVector &_chats, const MTPVector &_users) { - return MTPgeochats_messages(new MTPDgeochats_messagesSlice(_count, _messages, _chats, _users)); -} - inline uint32 MTPencryptedChat::innerLength() const { switch (_type) { case mtpc_encryptedChatEmpty: { @@ -25547,7 +23995,7 @@ inline uint32 MTPwebPage::innerLength() const { } case mtpc_webPage: { const MTPDwebPage &v(c_webPage()); - return v.vflags.innerLength() + v.vid.innerLength() + v.vurl.innerLength() + v.vdisplay_url.innerLength() + (v.has_type() ? v.vtype.innerLength() : 0) + (v.has_site_name() ? v.vsite_name.innerLength() : 0) + (v.has_title() ? v.vtitle.innerLength() : 0) + (v.has_description() ? v.vdescription.innerLength() : 0) + (v.has_photo() ? v.vphoto.innerLength() : 0) + (v.has_embed_url() ? v.vembed_url.innerLength() : 0) + (v.has_embed_type() ? v.vembed_type.innerLength() : 0) + (v.has_embed_width() ? v.vembed_width.innerLength() : 0) + (v.has_embed_height() ? v.vembed_height.innerLength() : 0) + (v.has_duration() ? v.vduration.innerLength() : 0) + (v.has_author() ? v.vauthor.innerLength() : 0); + return v.vflags.innerLength() + v.vid.innerLength() + v.vurl.innerLength() + v.vdisplay_url.innerLength() + (v.has_type() ? v.vtype.innerLength() : 0) + (v.has_site_name() ? v.vsite_name.innerLength() : 0) + (v.has_title() ? v.vtitle.innerLength() : 0) + (v.has_description() ? v.vdescription.innerLength() : 0) + (v.has_photo() ? v.vphoto.innerLength() : 0) + (v.has_embed_url() ? v.vembed_url.innerLength() : 0) + (v.has_embed_type() ? v.vembed_type.innerLength() : 0) + (v.has_embed_width() ? v.vembed_width.innerLength() : 0) + (v.has_embed_height() ? v.vembed_height.innerLength() : 0) + (v.has_duration() ? v.vduration.innerLength() : 0) + (v.has_author() ? v.vauthor.innerLength() : 0) + (v.has_document() ? v.vdocument.innerLength() : 0); } } return 0; @@ -25588,6 +24036,7 @@ inline void MTPwebPage::read(const mtpPrime *&from, const mtpPrime *end, mtpType if (v.has_embed_height()) { v.vembed_height.read(from, end); } else { v.vembed_height = MTPint(); } if (v.has_duration()) { v.vduration.read(from, end); } else { v.vduration = MTPint(); } if (v.has_author()) { v.vauthor.read(from, end); } else { v.vauthor = MTPstring(); } + if (v.has_document()) { v.vdocument.read(from, end); } else { v.vdocument = MTPDocument(); } } break; default: throw mtpErrorUnexpected(cons, "MTPwebPage"); } @@ -25620,6 +24069,7 @@ inline void MTPwebPage::write(mtpBuffer &to) const { if (v.has_embed_height()) v.vembed_height.write(to); if (v.has_duration()) v.vduration.write(to); if (v.has_author()) v.vauthor.write(to); + if (v.has_document()) v.vdocument.write(to); } break; } } @@ -25643,8 +24093,8 @@ inline MTPwebPage MTP_webPageEmpty(const MTPlong &_id) { inline MTPwebPage MTP_webPagePending(const MTPlong &_id, MTPint _date) { return MTPwebPage(new MTPDwebPagePending(_id, _date)); } -inline MTPwebPage MTP_webPage(MTPint _flags, const MTPlong &_id, const MTPstring &_url, const MTPstring &_display_url, const MTPstring &_type, const MTPstring &_site_name, const MTPstring &_title, const MTPstring &_description, const MTPPhoto &_photo, const MTPstring &_embed_url, const MTPstring &_embed_type, MTPint _embed_width, MTPint _embed_height, MTPint _duration, const MTPstring &_author) { - return MTPwebPage(new MTPDwebPage(_flags, _id, _url, _display_url, _type, _site_name, _title, _description, _photo, _embed_url, _embed_type, _embed_width, _embed_height, _duration, _author)); +inline MTPwebPage MTP_webPage(MTPint _flags, const MTPlong &_id, const MTPstring &_url, const MTPstring &_display_url, const MTPstring &_type, const MTPstring &_site_name, const MTPstring &_title, const MTPstring &_description, const MTPPhoto &_photo, const MTPstring &_embed_url, const MTPstring &_embed_type, MTPint _embed_width, MTPint _embed_height, MTPint _duration, const MTPstring &_author, const MTPDocument &_document) { + return MTPwebPage(new MTPDwebPage(_flags, _id, _url, _display_url, _type, _site_name, _title, _description, _photo, _embed_url, _embed_type, _embed_width, _embed_height, _duration, _author, _document)); } inline MTPauthorization::MTPauthorization() : mtpDataOwner(new MTPDauthorization()) { diff --git a/Telegram/SourceFiles/mtproto/scheme.tl b/Telegram/SourceFiles/mtproto/scheme.tl index 440d0eb3f..66803e904 100644 --- a/Telegram/SourceFiles/mtproto/scheme.tl +++ b/Telegram/SourceFiles/mtproto/scheme.tl @@ -146,8 +146,8 @@ inputMediaUploadedPhoto#f7aff1c0 file:InputFile caption:string = InputMedia; inputMediaPhoto#e9bfb4f3 id:InputPhoto caption:string = InputMedia; inputMediaGeoPoint#f9c44144 geo_point:InputGeoPoint = InputMedia; inputMediaContact#a6e45987 phone_number:string first_name:string last_name:string = InputMedia; -inputMediaUploadedVideo#e13fd4bc file:InputFile duration:int w:int h:int caption:string = InputMedia; -inputMediaUploadedThumbVideo#96fb97dc file:InputFile thumb:InputFile duration:int w:int h:int caption:string = InputMedia; +inputMediaUploadedVideo#82713fdf file:InputFile duration:int w:int h:int mime_type:string caption:string = InputMedia; +inputMediaUploadedThumbVideo#7780ddf9 file:InputFile thumb:InputFile duration:int w:int h:int mime_type:string caption:string = InputMedia; inputMediaVideo#936a4ebd id:InputVideo caption:string = InputMedia; inputChatPhotoEmpty#1ca48f57 = InputChatPhoto; @@ -212,7 +212,7 @@ chatPhotoEmpty#37c1011c = ChatPhoto; chatPhoto#6153276a photo_small:FileLocation photo_big:FileLocation = ChatPhoto; messageEmpty#83e5de54 id:int = Message; -message#f07814c8 flags:# id:int from_id:int to_id:Peer fwd_from_id:flags.2?int fwd_date:flags.2?int reply_to_msg_id:flags.3?int date:int message:string media:MessageMedia reply_markup:flags.6?ReplyMarkup entities:flags.7?Vector = Message; +message#2bebfa86 flags:# id:int from_id:int to_id:Peer fwd_from_id:flags.2?int fwd_date:flags.2?int reply_to_msg_id:flags.3?int date:int message:string media:flags.9?MessageMedia reply_markup:flags.6?ReplyMarkup entities:flags.7?Vector = Message; messageService#1d86f70e flags:int id:int from_id:int to_id:Peer date:int action:MessageAction = Message; messageMediaEmpty#3ded6320 = MessageMedia; @@ -283,8 +283,6 @@ contactSuggested#3de191a1 user_id:int mutual_contacts:int = ContactSuggested; contactStatus#d3680c61 user_id:int status:UserStatus = ContactStatus; -chatLocated#3631cf4c chat_id:int distance:int = ChatLocated; - contacts.link#3ace484c my_link:ContactLink foreign_link:ContactLink user:User = contacts.Link; contacts.contactsNotModified#b74ba9d2 = contacts.Contacts; @@ -303,8 +301,6 @@ messages.dialogsSlice#71e094f3 count:int dialogs:Vector

    -*$tGwtgiMns(y|6vonRqp9KSU0`!hT4L7EBPlt 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 DW{T8? diff --git a/Telegram/SourceFiles/audio.cpp b/Telegram/SourceFiles/audio.cpp index 831b41f88..ac7988a17 100644 --- a/Telegram/SourceFiles/audio.cpp +++ b/Telegram/SourceFiles/audio.cpp @@ -1010,7 +1010,7 @@ public: virtual int64 duration() = 0; virtual int32 frequency() = 0; virtual int32 format() = 0; - virtual bool readMore(QByteArray &result, int64 &samplesAdded) = 0; + virtual int readMore(QByteArray &result, int64 &samplesAdded) = 0; // < 0 - error, 0 - nothing read, > 0 - read something protected: @@ -1189,14 +1189,14 @@ public: return fmt; } - bool readMore(QByteArray &result, int64 &samplesAdded) { + int readMore(QByteArray &result, int64 &samplesAdded) { int res; if ((res = av_read_frame(fmtContext, &avpkt)) < 0) { if (res != AVERROR_EOF) { char err[AV_ERROR_MAX_STRING_SIZE] = { 0 }; LOG(("Audio Error: Unable to av_read_frame() file '%1', data size '%2', error %3, %4").arg(fname).arg(data.size()).arg(res).arg(av_make_error_string(err, sizeof(err), res))); } - return false; + return -1; } if (avpkt.stream_index == streamId) { av_frame_unref(frame); @@ -1204,7 +1204,10 @@ public: if ((res = avcodec_decode_audio4(codecContext, frame, &got_frame, &avpkt)) < 0) { char err[AV_ERROR_MAX_STRING_SIZE] = { 0 }; LOG(("Audio Error: Unable to avcodec_decode_audio4() file '%1', data size '%2', error %3, %4").arg(fname).arg(data.size()).arg(res).arg(av_make_error_string(err, sizeof(err), res))); - return false; + + av_free_packet(&avpkt); + if (res == AVERROR_INVALIDDATA) return 0; // try to skip bad packet + return -1; } if (got_frame) { @@ -1218,13 +1221,17 @@ public: dstSamplesData[0] = 0; char err[AV_ERROR_MAX_STRING_SIZE] = { 0 }; LOG(("Audio Error: Unable to av_samples_alloc for file '%1', data size '%2', error %3, %4").arg(fname).arg(data.size()).arg(res).arg(av_make_error_string(err, sizeof(err), res))); - return false; + + av_free_packet(&avpkt); + return -1; } } if ((res = swr_convert(swrContext, dstSamplesData, dstSamples, (const uint8_t**)frame->extended_data, frame->nb_samples)) < 0) { char err[AV_ERROR_MAX_STRING_SIZE] = { 0 }; LOG(("Audio Error: Unable to swr_convert for file '%1', data size '%2', error %3, %4").arg(fname).arg(data.size()).arg(res).arg(av_make_error_string(err, sizeof(err), res))); - return false; + + av_free_packet(&avpkt); + return -1; } int32 resultLen = av_samples_get_buffer_size(0, _toChannels, res, _toFormat, 1); result.append((const char*)dstSamplesData[0], resultLen); @@ -1236,7 +1243,7 @@ public: } } av_free_packet(&avpkt); - return true; + return 1; } ~FFMpegLoader() { @@ -1427,7 +1434,8 @@ void AudioPlayerLoaders::loadData(MediaOverviewType type, const void *objId, qin QByteArray result; int64 samplesAdded = 0, frequency = l->frequency(), format = l->format(); while (result.size() < AudioVoiceMsgBufferSize) { - if (!l->readMore(result, samplesAdded)) { + int res = l->readMore(result, samplesAdded); + if (res < 0) { if (errAtStart) { { QMutexLocker lock(&playerMutex); @@ -1440,7 +1448,7 @@ void AudioPlayerLoaders::loadData(MediaOverviewType type, const void *objId, qin finished = true; break; } - errAtStart = false; + if (res > 0) errAtStart = false; QMutexLocker lock(&playerMutex); if (!checkLoader(type)) { @@ -2309,9 +2317,9 @@ public: return _coverFormat; } - bool readMore(QByteArray &result, int64 &samplesAdded) { + int readMore(QByteArray &result, int64 &samplesAdded) { DEBUG_LOG(("Audio Read Error: should not call this")); - return false; + return -1; } ~FFMpegAttributesReader() { diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 724f702b8..336274926 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,9 +17,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8038; -static const wchar_t *AppVersionStr = L"0.8.38"; -static const bool DevChannel = false; +static const int32 AppVersion = 8039; +static const wchar_t *AppVersionStr = L"0.8.39"; +static const bool DevChannel = true; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; diff --git a/Telegram/SourceFiles/playerwidget.cpp b/Telegram/SourceFiles/playerwidget.cpp index c0676ff70..317ac2e85 100644 --- a/Telegram/SourceFiles/playerwidget.cpp +++ b/Telegram/SourceFiles/playerwidget.cpp @@ -33,7 +33,7 @@ PlayerWidget::PlayerWidget(QWidget *parent) : TWidget(parent), _prevAvailable(false), _nextAvailable(false), _fullAvailable(false), _over(OverNone), _down(OverNone), _downCoord(0), _downFrequency(AudioVoiceMsgFrequency), _downProgress(0.), _stateAnim(animFunc(this, &PlayerWidget::stateStep)), -_index(-1), _history(0), _showPause(false), _position(0), _duration(0), _loaded(0), +_index(-1), _history(0), _timeWidth(0), _repeat(false), _showPause(false), _position(0), _duration(0), _loaded(0), a_progress(0., 0.), a_loadProgress(0., 0.), _progressAnim(animFunc(this, &PlayerWidget::progressStep)) { resize(st::wndMinWidth, st::playerHeight); setMouseTracking(true); @@ -108,6 +108,11 @@ void PlayerWidget::paintEvent(QPaintEvent *e) { p.setOpacity(o * 1. + (1. - o) * st::playerInactiveOpacity); p.drawSpriteCenterLeft(_fullRect, width(), st::playerFull); } + if (checkr.intersects(_repeatRect)) { + float64 o = _stateHovers[OverRepeat]; + p.setOpacity(_repeat ? 1. : (o * st::playerInactiveOpacity + (1. - o) * st::playerUnavailableOpacity)); + p.drawSpriteCenterLeft(_repeatRect, width(), st::playerRepeat); + } p.setOpacity(1.); p.setPen(st::playerTimeFg->p); @@ -185,6 +190,9 @@ void PlayerWidget::mousePressEvent(QMouseEvent *e) { if (HistoryItem *item = App::histItemById(_song.msgId)) { App::main()->showMediaOverview(item->history()->peer, OverviewAudioDocuments); } + } else if (_over == OverRepeat) { + _repeat = !_repeat; + updateOverRect(OverRepeat); } } } @@ -230,6 +238,7 @@ void PlayerWidget::updateOverRect(OverState state) { case OverClose: rtlupdate(_closeRect); break; case OverVolume: rtlupdate(_volumeRect); break; case OverFull: rtlupdate(_fullRect); break; + case OverRepeat: rtlupdate(_repeatRect); break; case OverPlayback: rtlupdate(_playbackRect); break; } } @@ -365,6 +374,8 @@ void PlayerWidget::updateSelected() { updateOverState(OverClose); } else if (_volumeRect.contains(pos)) { updateOverState(OverVolume); + } else if (_repeatRect.contains(pos)) { + updateOverState(OverRepeat); } else if (_duration && _playbackRect.contains(pos)) { updateOverState(OverPlayback); } else if (_fullAvailable && inInfo) { @@ -446,7 +457,7 @@ void PlayerWidget::playPausePressed() { } void PlayerWidget::prevPressed() { - if (isHidden() || !_prevAvailable) return; + if (isHidden()) return; const History::MediaOverview *o = _history ? &_history->_overview[OverviewAudioDocuments] : 0; if (audioPlayer() && o && _index > 0 && _index <= o->size() && !o->isEmpty()) { @@ -455,7 +466,7 @@ void PlayerWidget::prevPressed() { } void PlayerWidget::nextPressed() { - if (isHidden() || !_nextAvailable) return; + if (isHidden()) return; const History::MediaOverview *o = _history ? &_history->_overview[OverviewAudioDocuments] : 0; if (audioPlayer() && o && _index >= 0 && _index < o->size() - 1) { @@ -480,10 +491,11 @@ void PlayerWidget::resizeEvent(QResizeEvent *e) { _closeRect = QRect(width() - st::playerSkip / 2 - st::playerClose.pxWidth() - st::playerSkip, ct, st::playerClose.pxWidth() + st::playerSkip, ch); _volumeRect = QRect(_closeRect.x() - st::playerVolume.pxWidth() - st::playerSkip, ct, st::playerVolume.pxWidth() + st::playerSkip, ch); - _fullRect = _fullAvailable ? QRect(_volumeRect.x() - st::playerFull.pxWidth() - st::playerSkip, ct, st::playerFull.pxWidth() + st::playerSkip, ch) : QRect(); + _repeatRect = QRect(_volumeRect.x() - st::playerRepeat.pxWidth() - st::playerSkip, ct, st::playerRepeat.pxWidth() + st::playerSkip, ch); + _fullRect = _fullAvailable ? QRect(_repeatRect.x() - st::playerFull.pxWidth() - st::playerSkip, ct, st::playerFull.pxWidth() + st::playerSkip, ch) : QRect(); int32 infoLeft = (_fullAvailable ? (_nextRect.x() + _nextRect.width()) : (_playRect.x() + _playRect.width())); - _infoRect = QRect(infoLeft + st::playerSkip / 2, 0, (_fullAvailable ? _fullRect.x() : _volumeRect.x()) - infoLeft - st::playerSkip, availh); + _infoRect = QRect(infoLeft + st::playerSkip / 2, 0, (_fullAvailable ? _fullRect.x() : _repeatRect.x()) - infoLeft - st::playerSkip, availh); update(); } @@ -600,9 +612,10 @@ void PlayerWidget::updateState(SongMsgId playing, AudioPlayerState playingState, } if (wasPlaying && playingState == AudioPlayerStoppedAtEnd) { - const History::MediaOverview *o = _history ? &_history->_overview[OverviewAudioDocuments] : 0; - if (audioPlayer() && o && _index >= 0 && _index < o->size() - 1) { - startPlay(o->at(_index + 1)); + if (_repeat) { + startPlay(_song.msgId); + } else { + nextPressed(); } } diff --git a/Telegram/SourceFiles/playerwidget.h b/Telegram/SourceFiles/playerwidget.h index f7ca31696..7e6095287 100644 --- a/Telegram/SourceFiles/playerwidget.h +++ b/Telegram/SourceFiles/playerwidget.h @@ -65,6 +65,7 @@ private: OverClose, OverVolume, OverFull, + OverRepeat, OverPlayback, OverStateCount @@ -97,8 +98,9 @@ private: int32 _index; History *_history; QRect _playRect, _prevRect, _nextRect, _playbackRect; - QRect _closeRect, _volumeRect, _fullRect, _infoRect; + QRect _closeRect, _volumeRect, _fullRect, _repeatRect, _infoRect; int32 _timeWidth; + bool _repeat; QString _time; Text _name; bool _showPause; diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index f3626d369..939c89ea4 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.38 + 0.8.39 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index 2f08b76ab0028b72e2cb37615d1bb6888d133a06..f7b4fba3dd00abc8e486487617843ec75577422e 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_V diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index dfaa734e7..3469c0314 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -1711,7 +1711,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.38; + CURRENT_PROJECT_VERSION = 0.8.39; DEBUG_INFORMATION_FORMAT = dwarf; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -1729,7 +1729,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 0.8.38; + CURRENT_PROJECT_VERSION = 0.8.39; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = fast; GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h; @@ -1755,10 +1755,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.38; + CURRENT_PROJECT_VERSION = 0.8.39; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DYLIB_COMPATIBILITY_VERSION = 0.8; - DYLIB_CURRENT_VERSION = 0.8.38; + DYLIB_CURRENT_VERSION = 0.8.39; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -1898,10 +1898,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.38; + CURRENT_PROJECT_VERSION = 0.8.39; DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 0.8; - DYLIB_CURRENT_VERSION = 0.8.38; + DYLIB_CURRENT_VERSION = 0.8.39; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; diff --git a/Telegram/Version.sh b/Telegram/Version.sh index 6058fe1f6..6f9f1534a 100755 --- a/Telegram/Version.sh +++ b/Telegram/Version.sh @@ -1,2 +1,2 @@ -echo 0.8 8038 0.8.38 0 +echo 0.8 8039 0.8.39 1 # AppVersionStrMajor AppVersion AppVersionStr DevChannel From e193a86eaafce8b20a1790f106155f1b25ea093e Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 15 Jul 2015 14:23:59 +0300 Subject: [PATCH 048/121] fixed Qt 5.5 image scale crash, fixed empty photo in mediaview crash --- Telegram/Resources/lang.strings | 3 +- Telegram/SourceFiles/history.cpp | 89 ++- Telegram/SourceFiles/history.h | 2 +- Telegram/SourceFiles/mediaview.cpp | 90 ++- Telegram/_qt_5_5_0_patch.diff | 16 + .../qtbase/src/gui/painting/qimagescale.cpp | 748 ++++++++++++++++++ 6 files changed, 895 insertions(+), 53 deletions(-) create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/gui/painting/qimagescale.cpp diff --git a/Telegram/Resources/lang.strings b/Telegram/Resources/lang.strings index 9ac49a605..2a1e9f8fc 100644 --- a/Telegram/Resources/lang.strings +++ b/Telegram/Resources/lang.strings @@ -385,7 +385,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_sure_delete_and_exit" = "Are you sure, you want to delete all message history and leave «{group}»?\n\nThis action cannot be undone."; -"lng_message_empty" = "(empty)"; +"lng_message_empty" = "Empty Message"; +"lng_media_unsupported" = "Media Unsupported"; "lng_action_add_user" = "{from} added {user}"; "lng_action_kick_user" = "{from} kicked {user}"; diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 8b5a23d89..09d8c204a 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -622,18 +622,79 @@ HistoryItem *History::createItem(HistoryBlock *block, const MTPmessage &msg, boo result = new HistoryServiceMsg(this, block, msg.c_messageEmpty().vid.v, date(), lang(lng_message_empty)); break; - case mtpc_message: - if ((msg.c_message().has_fwd_date() && msg.c_message().vfwd_date.v > 0) || (msg.c_message().has_fwd_from_id() && msg.c_message().vfwd_from_id.v != 0)) { - result = new HistoryForwarded(this, block, msg.c_message()); - } else if (msg.c_message().has_reply_to_msg_id() && msg.c_message().vreply_to_msg_id.v > 0) { - result = new HistoryReply(this, block, msg.c_message()); + case mtpc_message: { + const MTPDmessage m(msg.c_message()); + int badMedia = 0; // 1 - unsupported, 2 - empty + switch (m.vmedia.type()) { + case mtpc_messageMediaEmpty: break; + case mtpc_messageMediaGeo: + switch (m.vmedia.c_messageMediaGeo().vgeo.type()) { + case mtpc_geoPoint: break; + case mtpc_geoPointEmpty: badMedia = 2; break; + default: badMedia = 1; break; + } + break; + case mtpc_messageMediaVenue: + switch (m.vmedia.c_messageMediaVenue().vgeo.type()) { + case mtpc_geoPoint: break; + case mtpc_geoPointEmpty: badMedia = 2; break; + default: badMedia = 1; break; + } + break; + case mtpc_messageMediaPhoto: + switch (m.vmedia.c_messageMediaPhoto().vphoto.type()) { + case mtpc_photo: break; + case mtpc_photoEmpty: badMedia = 2; break; + default: badMedia = 1; break; + } + break; + case mtpc_messageMediaVideo: + switch (m.vmedia.c_messageMediaVideo().vvideo.type()) { + case mtpc_video: break; + case mtpc_videoEmpty: badMedia = 2; break; + default: badMedia = 1; break; + } + break; + case mtpc_messageMediaAudio: + switch (m.vmedia.c_messageMediaAudio().vaudio.type()) { + case mtpc_audio: break; + case mtpc_audioEmpty: badMedia = 2; break; + default: badMedia = 1; break; + } + break; + case mtpc_messageMediaDocument: + switch (m.vmedia.c_messageMediaDocument().vdocument.type()) { + case mtpc_document: break; + case mtpc_documentEmpty: badMedia = 2; break; + default: badMedia = 1; break; + } + break; + case mtpc_messageMediaWebPage: + switch (m.vmedia.c_messageMediaWebPage().vwebpage.type()) { + case mtpc_webPage: + case mtpc_webPageEmpty: + case mtpc_webPagePending: break; + default: badMedia = 1; break; + } + break; + case mtpc_messageMediaUnsupported: + default: badMedia = 1; break; + } + if (badMedia) { + result = new HistoryServiceMsg(this, block, m.vid.v, date(m.vdate), lang((badMedia == 2) ? lng_message_empty : lng_media_unsupported), m.vflags.v, 0, m.vfrom_id.v); } else { - result = new HistoryMessage(this, block, msg.c_message()); + if ((m.has_fwd_date() && m.vfwd_date.v > 0) || (m.has_fwd_from_id() && m.vfwd_from_id.v != 0)) { + result = new HistoryForwarded(this, block, m); + } else if (m.has_reply_to_msg_id() && m.vreply_to_msg_id.v > 0) { + result = new HistoryReply(this, block, m); + } else { + result = new HistoryMessage(this, block, m); + } + if (m.has_reply_markup()) { + App::feedReplyMarkup(msgId, m.vreply_markup); + } } - if (msg.c_message().has_reply_markup()) { - App::feedReplyMarkup(msgId, msg.c_message().vreply_markup); - } - break; + } break; case mtpc_messageService: { const MTPDmessageService &d(msg.c_messageService()); @@ -4938,7 +4999,6 @@ void HistoryMessage::initTime() { void HistoryMessage::initMedia(const MTPMessageMedia &media, QString ¤tText) { switch (media.type()) { - case mtpc_messageMediaEmpty: initMediaFromText(currentText); break; case mtpc_messageMediaContact: { const MTPDmessageMediaContact &d(media.c_messageMediaContact()); _media = new HistoryContact(d.vuser_id.v, qs(d.vfirst_name), qs(d.vlast_name), qs(d.vphone_number)); @@ -4995,8 +5055,7 @@ void HistoryMessage::initMedia(const MTPMessageMedia &media, QString ¤tTex } break; } } break; - case mtpc_messageMediaUnsupported: - default: currentText += " (unsupported media)"; break; + default: initMediaFromText(currentText); break; }; if (_media) _media->regItem(this); } @@ -6020,8 +6079,8 @@ HistoryServiceMsg::HistoryServiceMsg(History *history, HistoryBlock *block, cons setMessageByAction(msg.vaction); } -HistoryServiceMsg::HistoryServiceMsg(History *history, HistoryBlock *block, MsgId msgId, QDateTime date, const QString &msg, int32 flags, HistoryMedia *media) : - HistoryItem(history, block, msgId, flags, date, 0) +HistoryServiceMsg::HistoryServiceMsg(History *history, HistoryBlock *block, MsgId msgId, QDateTime date, const QString &msg, int32 flags, HistoryMedia *media, int32 from) : + HistoryItem(history, block, msgId, flags, date, from) , _text(st::msgServiceFont, msg, _historySrvOptions, st::dlgMinWidth) , _media(media) { diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index 50888bdb9..ae6c04193 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -1439,7 +1439,7 @@ class HistoryServiceMsg : public HistoryItem { public: HistoryServiceMsg(History *history, HistoryBlock *block, const MTPDmessageService &msg); - HistoryServiceMsg(History *history, HistoryBlock *block, MsgId msgId, QDateTime date, const QString &msg, int32 flags = 0, HistoryMedia *media = 0); + HistoryServiceMsg(History *history, HistoryBlock *block, MsgId msgId, QDateTime date, const QString &msg, int32 flags = 0, HistoryMedia *media = 0, int32 from = 0); void initDimensions(const HistoryItem *parent = 0); diff --git a/Telegram/SourceFiles/mediaview.cpp b/Telegram/SourceFiles/mediaview.cpp index 2036a644f..d49a10105 100644 --- a/Telegram/SourceFiles/mediaview.cpp +++ b/Telegram/SourceFiles/mediaview.cpp @@ -225,8 +225,6 @@ void MediaView::updateDocSize() { } void MediaView::updateControls() { - if (!_photo && !_doc) return; - if (_doc && _current.isNull() && _currentGif.isNull()) { if (_doc->loader) { _docDownload.hide(); @@ -257,13 +255,20 @@ void MediaView::updateControls() { _docCancel.hide(); } - _saveVisible = ((_photo && _photo->full->loaded()) || (_doc && (!_doc->already(true).isEmpty() || (_current.isNull() && _currentGif.isNull())))); + _saveVisible = ((_photo && _photo->full->loaded()) || (_doc && (!_doc->already(true).isEmpty() || (_current.isNull() && _currentGif.isNull() && (_photo || _doc))))); _saveNav = myrtlrect(width() - st::mvIconSize.width() * 2, height() - st::mvIconSize.height(), st::mvIconSize.width(), st::mvIconSize.height()); _saveNavIcon = centersprite(_saveNav, st::mvSave); _moreNav = myrtlrect(width() - st::mvIconSize.width(), height() - st::mvIconSize.height(), st::mvIconSize.width(), st::mvIconSize.height()); _moreNavIcon = centersprite(_moreNav, st::mvMore); - QDateTime d(date(_photo ? _photo->date : _doc->date)), dNow(date(unixtime())); + QDateTime d, dNow(date(unixtime())); + if (_photo) { + d = date(_photo->date); + } else if (_doc) { + d = date(_doc->date); + } else if (HistoryItem *item = App::histItemById(_msgid)) { + d = item->date; + } if (d.date() == dNow.date()) { _dateText = lng_mediaview_today(lt_time, d.time().toString(cTimeFormat())); } else if (d.date().addDays(1) == dNow.date()) { @@ -280,12 +285,12 @@ void MediaView::updateControls() { _dateNav = myrtlrect(st::mvTextLeft, height() - st::mvTextTop, st::mvFont->m.width(_dateText), st::mvFont->height); } updateHeader(); - if (_photo) { + if (_photo || (_history && _overview == OverviewPhotos)) { _leftNavVisible = (_index > 0) || (_index == 0 && _history && _history->_overview[_overview].size() < _history->_overviewCount[_overview]); _rightNavVisible = (_index >= 0) && ( (_history && _index + 1 < _history->_overview[_overview].size()) || (_user && (_index + 1 < _user->photos.size() || _index + 1 < _user->photosCount))); - } else if (_doc) { + } else if (_history && _overview == OverviewDocuments) { _leftNavVisible = (_index > 0) || (_index == 0 && _history && _history->_overview[_overview].size() < _history->_overviewCount[_overview]); _rightNavVisible = (_index >= 0) && _history && (_index + 1 < _history->_overview[_overview].size()); } else { @@ -792,24 +797,30 @@ void MediaView::displayPhoto(PhotoData *photo, HistoryItem *item) { } } -void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { +void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { // empty messages shown as docs: doc can be NULL _doc = doc; + _photo = 0; _caption = Text(); - QString already = _doc->already(true); - if (_doc->sticker() && !_doc->sticker()->img->isNull() && _doc->sticker()->img->loaded()) { - _currentGif.stop(); - _current = _doc->sticker()->img->pix(); - } else if (!already.isEmpty()) { - QImageReader reader(already); - if (reader.canRead()) { - if (reader.supportsAnimation() && reader.imageCount() > 1) { - _currentGif.start(0, already); - _current = QPixmap(); + if (_doc) { + QString already = _doc->already(true); + if (_doc->sticker() && !_doc->sticker()->img->isNull() && _doc->sticker()->img->loaded()) { + _currentGif.stop(); + _current = _doc->sticker()->img->pix(); + } else if (!already.isEmpty()) { + QImageReader reader(already); + if (reader.canRead()) { + if (reader.supportsAnimation() && reader.imageCount() > 1) { + _currentGif.start(0, already); + _current = QPixmap(); + } else { + _currentGif.stop(); + QPixmap pix = QPixmap::fromImage(App::readImage(already, 0, false), Qt::ColorOnly); + _current = pix; + } } else { _currentGif.stop(); - QPixmap pix = QPixmap::fromImage(App::readImage(already, 0, false), Qt::ColorOnly); - _current = pix; + _current = QPixmap(); } } else { _currentGif.stop(); @@ -821,10 +832,10 @@ void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { } if (_current.isNull() && _currentGif.isNull()) { - if (_doc->thumb->isNull()) { + if (!_doc || _doc->thumb->isNull()) { style::sprite thumbs[] = { st::mvDocBlue, st::mvDocGreen, st::mvDocRed, st::mvDocYellow }; style::color colors[] = { st::mvDocBlueColor, st::mvDocGreenColor, st::mvDocRedColor, st::mvDocYellowColor }; - QString name = _doc->name.toLower(), mime = _doc->mime.toLower(); + QString name = _doc ? _doc->name.toLower() : QString(), mime = _doc ? _doc->mime.toLower() : QString(); if (name.endsWith(qstr(".doc")) || name.endsWith(qstr(".txt")) || name.endsWith(qstr(".psd")) || @@ -879,9 +890,9 @@ void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { int32 maxw = st::mvDocSize.width() - st::mvDocBlue.pxWidth() - st::mvDocPadding * 3; - _docName = _doc->name.isEmpty() ? lang(_doc->type == StickerDocument ? lng_in_dlg_sticker : lng_mediaview_doc_image) : _doc->name; + _docName = (!_doc || _doc->name.isEmpty()) ? lang(_doc ? (_doc->type == StickerDocument ? lng_in_dlg_sticker : lng_mediaview_doc_image) : lng_message_empty) : _doc->name; int32 lastDot = _docName.lastIndexOf('.'); - _docExt = (lastDot < 0 || lastDot + 2 > _docName.size()) ? _docName : _docName.mid(lastDot + 1); + _docExt = _doc ? ((lastDot < 0 || lastDot + 2 > _docName.size()) ? _docName : _docName.mid(lastDot + 1)) : QString(); _docNameWidth = st::mvDocNameFont->m.width(_docName); if (_docNameWidth > maxw) { _docName = st::mvDocNameFont->m.elidedText(_docName, Qt::ElideMiddle, maxw); @@ -898,7 +909,7 @@ void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { _docRadialFirst = _docRadialLast = _docRadialStart = 0; - float64 prg = _doc->loader ? _doc->loader->currentProgress() : 0; + float64 prg = (_doc && _doc->loader) ? _doc->loader->currentProgress() : 0; a_docRadial = anim::fvalue(prg, qMax(prg, 0.0001)); // _docSize is updated in updateControls() @@ -1073,17 +1084,19 @@ void MediaView::paintEvent(QPaintEvent *e) { } } } - } else if (_doc) { + } else { if (_docRect.intersects(r)) { p.fillRect(_docRect, st::mvDocBg->b); if (_docIconRect.intersects(r)) { icon = true; - if (_doc->thumb->isNull()) { - if (!_doc->already().isEmpty() && (!_docRadialStart || _docRadialOpacity < 1)) { + if (!_doc || _doc->thumb->isNull()) { + if ((!_doc || !_doc->already().isEmpty()) && (!_docRadialStart || _docRadialOpacity < 1)) { p.drawPixmap(_docIconRect.topLeft(), App::sprite(), _docIcon); p.setPen(st::mvDocExtColor->p); p.setFont(st::mvDocExtFont->f); - p.drawText(_docIconRect.x() + (_docIconRect.width() - _docExtWidth) / 2, _docIconRect.y() + st::mvDocExtTop + st::mvDocExtFont->ascent, _docExt); + if (!_docExt.isEmpty()) { + p.drawText(_docIconRect.x() + (_docIconRect.width() - _docExtWidth) / 2, _docIconRect.y() + st::mvDocExtTop + st::mvDocExtFont->ascent, _docExt); + } } else { p.fillRect(_docIconRect, _docIconColor->b); } @@ -1093,7 +1106,7 @@ void MediaView::paintEvent(QPaintEvent *e) { } float64 o = overLevel(OverIcon); - if (_docRadialStart > 0) { + if (_doc && _docRadialStart > 0) { if (_doc->already().isEmpty() && _docRadialOpacity < 1) { p.setOpacity((o * 1. + (1 - o) * st::radialDownloadOpacity) * (1 - _docRadialOpacity)); p.drawSpriteCenter(_docIconRect, st::radialDownload); @@ -1120,7 +1133,7 @@ void MediaView::paintEvent(QPaintEvent *e) { p.setOpacity(1); p.setRenderHint(QPainter::HighQualityAntialiasing, false); - } else if (_doc->already().isEmpty()) { + } else if (_doc && _doc->already().isEmpty()) { p.setOpacity((o * 1. + (1 - o) * st::radialDownloadOpacity)); p.drawSpriteCenter(_docIconRect, st::radialDownload); } @@ -1190,7 +1203,7 @@ void MediaView::paintEvent(QPaintEvent *e) { } // save button - if (_saveNavIcon.intersects(r)) { + if (_saveVisible && _saveNavIcon.intersects(r)) { float64 o = overLevel(OverSave); p.setOpacity((o * st::mvIconOverOpacity + (1 - o) * st::mvIconOpacity) * co); p.drawPixmap(_saveNavIcon.topLeft(), App::sprite(), st::mvSave); @@ -1364,7 +1377,7 @@ void MediaView::keyPressEvent(QKeyEvent *e) { } void MediaView::moveToNext(int32 delta) { - if (_index < 0 || (!_photo && !_doc) || (_overview == OverviewCount && !_user)) return; + if (_index < 0 || (_history && _overview != OverviewPhotos && _overview != OverviewDocuments) || (_overview == OverviewCount && !_user)) return; int32 newIndex = _index + delta; if (_history && _overview != OverviewCount) { @@ -1372,10 +1385,15 @@ void MediaView::moveToNext(int32 delta) { _index = newIndex; if (HistoryItem *item = App::histItemById(_history->_overview[_overview][_index])) { _msgid = item->id; - switch (item->getMedia()->type()) { - case MediaTypePhoto: displayPhoto(static_cast(item->getMedia())->photo(), item); preloadData(delta); break; - case MediaTypeDocument: displayDocument(static_cast(item->getMedia())->document(), item); preloadData(delta); break; - case MediaTypeSticker: displayDocument(static_cast(item->getMedia())->document(), item); preloadData(delta); break; + if (item->getMedia()) { + switch (item->getMedia()->type()) { + case MediaTypePhoto: displayPhoto(static_cast(item->getMedia())->photo(), item); preloadData(delta); break; + case MediaTypeDocument: displayDocument(static_cast(item->getMedia())->document(), item); preloadData(delta); break; + case MediaTypeSticker: displayDocument(static_cast(item->getMedia())->document(), item); preloadData(delta); break; + } + } else { + displayDocument(0, item); + preloadData(delta); } } } diff --git a/Telegram/_qt_5_5_0_patch.diff b/Telegram/_qt_5_5_0_patch.diff index edce3fe02..ea73098ad 100644 --- a/Telegram/_qt_5_5_0_patch.diff +++ b/Telegram/_qt_5_5_0_patch.diff @@ -126,6 +126,22 @@ index 8b2b988..2d1cdd9 100644 virtual void setFilter() = 0; virtual void selectNameFilter(const QString &filter) = 0; virtual QString selectedNameFilter() const = 0; +diff --git a/qtbase/src/gui/painting/qimagescale.cpp b/qtbase/src/gui/painting/qimagescale.cpp +index 9b4eabc..a3e0e04 100644 +--- a/qtbase/src/gui/painting/qimagescale.cpp ++++ b/qtbase/src/gui/painting/qimagescale.cpp +@@ -313,7 +313,10 @@ static void qt_qimageScaleAARGBA_up_xy(QImageScaleInfo *isi, unsigned int *dest, + for (int x = dxx; x < end; x++) { + const unsigned int *pix = sptr + xpoints[x]; + const int xap = xapoints[x]; +- *dptr = INTERPOLATE_PIXEL_256(pix[0], 256 - xap, pix[1], xap); ++ if (xap > 0) ++ *dptr = INTERPOLATE_PIXEL_256(pix[0], 256 - xap, pix[1], xap); ++ else ++ *dptr = pix[0]; + dptr++; + } + } diff --git a/qtbase/src/gui/painting/qpaintengine_p.h b/qtbase/src/gui/painting/qpaintengine_p.h index c58662e..468d671 100644 --- a/qtbase/src/gui/painting/qpaintengine_p.h diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/gui/painting/qimagescale.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/gui/painting/qimagescale.cpp new file mode 100644 index 000000000..a3e0e04c9 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/gui/painting/qimagescale.cpp @@ -0,0 +1,748 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include +#include + +#include "qimage.h" +#include "qcolor.h" + +QT_BEGIN_NAMESPACE + +/* + * Copyright (C) 2004, 2005 Daniel M. Duley + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* OTHER CREDITS: + * + * This is the normal smoothscale method, based on Imlib2's smoothscale. + * + * Originally I took the algorithm used in NetPBM and Qt and added MMX/3dnow + * optimizations. It ran in about 1/2 the time as Qt. Then I ported Imlib's + * C algorithm and it ran at about the same speed as my MMX optimized one... + * Finally I ported Imlib's MMX version and it ran in less than half the + * time as my MMX algorithm, (taking only a quarter of the time Qt does). + * After further optimization it seems to run at around 1/6th. + * + * Changes include formatting, namespaces and other C++'ings, removal of old + * #ifdef'ed code, and removal of unneeded border calculation code. + * + * Imlib2 is (C) Carsten Haitzler and various contributors. The MMX code + * is by Willem Monsuwe . All other modifications are + * (C) Daniel M. Duley. + */ + + +namespace QImageScale { + const unsigned int** qimageCalcYPoints(const unsigned int *src, int sw, int sh, int dh); + int* qimageCalcXPoints(int sw, int dw); + int* qimageCalcApoints(int s, int d, int up); + QImageScaleInfo* qimageFreeScaleInfo(QImageScaleInfo *isi); + QImageScaleInfo *qimageCalcScaleInfo(const QImage &img, int sw, int sh, + int dw, int dh, char aa); +} + +using namespace QImageScale; + +// +// Code ported from Imlib... +// + +const unsigned int** QImageScale::qimageCalcYPoints(const unsigned int *src, + int sw, int sh, int dh) +{ + const unsigned int **p; + int j = 0, rv = 0; + qint64 val, inc; + + if(dh < 0){ + dh = -dh; + rv = 1; + } + p = new const unsigned int* [dh+1]; + + int up = qAbs(dh) >= sh; + val = up ? 0x8000 * sh / dh - 0x8000 : 0; + inc = (((qint64)sh) << 16) / dh; + for (int i = 0; i < dh; i++) { + p[j++] = src + qMax(0LL, val >> 16) * sw; + val += inc; + } + if (rv) { + for (int i = dh / 2; --i >= 0; ) { + const unsigned int *tmp = p[i]; + p[i] = p[dh - i - 1]; + p[dh - i - 1] = tmp; + } + } + return(p); +} + +int* QImageScale::qimageCalcXPoints(int sw, int dw) +{ + int *p, j = 0, rv = 0; + qint64 val, inc; + + if(dw < 0){ + dw = -dw; + rv = 1; + } + p = new int[dw+1]; + + int up = qAbs(dw) >= sw; + val = up ? 0x8000 * sw / dw - 0x8000 : 0; + inc = (((qint64)sw) << 16) / dw; + for (int i = 0; i < dw; i++) { + p[j++] = qMax(0LL, val >> 16); + val += inc; + } + + if (rv) { + for (int i = dw / 2; --i >= 0; ) { + int tmp = p[i]; + p[i] = p[dw - i - 1]; + p[dw - i - 1] = tmp; + } + } + return(p); +} + +int* QImageScale::qimageCalcApoints(int s, int d, int up) +{ + int *p, j = 0, rv = 0; + + if(d < 0){ + rv = 1; + d = -d; + } + p = new int[d]; + + /* scaling up */ + if(up){ + qint64 val, inc; + + val = 0x8000 * s / d - 0x8000; + inc = (((qint64)s) << 16) / d; + for (int i = 0; i < d; i++) { + int pos = val >> 16; + if (pos < 0) + p[j++] = 0; + else if (pos >= (s - 1)) + p[j++] = 0; + else + p[j++] = (val >> 8) - ((val >> 8) & 0xffffff00); + val += inc; + } + } + /* scaling down */ + else { + qint64 val = 0; + qint64 inc = (((qint64)s) << 16) / d; + int Cp = (((d << 14) + s - 1) / s); + for (int i = 0; i < d; i++) { + int ap = ((0x10000 - (val & 0xffff)) * Cp) >> 16; + p[j] = ap | (Cp << 16); + j++; + val += inc; + } + } + if(rv){ + int tmp; + for (int i = d / 2; --i >= 0; ) { + tmp = p[i]; + p[i] = p[d - i - 1]; + p[d - i - 1] = tmp; + } + } + return p; +} + +QImageScaleInfo* QImageScale::qimageFreeScaleInfo(QImageScaleInfo *isi) +{ + if(isi){ + delete[] isi->xpoints; + delete[] isi->ypoints; + delete[] isi->xapoints; + delete[] isi->yapoints; + delete isi; + } + return 0; +} + +QImageScaleInfo* QImageScale::qimageCalcScaleInfo(const QImage &img, + int sw, int sh, + int dw, int dh, char aa) +{ + QImageScaleInfo *isi; + int scw, sch; + + scw = dw * qlonglong(img.width()) / sw; + sch = dh * qlonglong(img.height()) / sh; + + isi = new QImageScaleInfo; + if(!isi) + return 0; + memset(isi, 0, sizeof(QImageScaleInfo)); + + isi->xup_yup = (qAbs(dw) >= sw) + ((qAbs(dh) >= sh) << 1); + + isi->xpoints = qimageCalcXPoints(img.width(), scw); + if(!isi->xpoints) + return(qimageFreeScaleInfo(isi)); + isi->ypoints = qimageCalcYPoints((const unsigned int *)img.scanLine(0), + img.bytesPerLine() / 4, img.height(), sch); + if (!isi->ypoints) + return(qimageFreeScaleInfo(isi)); + if(aa) { + isi->xapoints = qimageCalcApoints(img.width(), scw, isi->xup_yup & 1); + if(!isi->xapoints) + return(qimageFreeScaleInfo(isi)); + isi->yapoints = qimageCalcApoints(img.height(), sch, isi->xup_yup & 2); + if(!isi->yapoints) + return(qimageFreeScaleInfo(isi)); + } + return(isi); +} + + +static void qt_qimageScaleAARGBA_up_x_down_y(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, + int dw, int dh, int dow, int sow); + +static void qt_qimageScaleAARGBA_down_x_up_y(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, + int dw, int dh, int dow, int sow); + +static void qt_qimageScaleAARGBA_down_xy(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, int dw, + int dh, int dow, int sow); + +#if defined(QT_COMPILER_SUPPORTS_SSE4_1) +template +void qt_qimageScaleAARGBA_up_x_down_y_sse4(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, + int dw, int dh, int dow, int sow); +template +void qt_qimageScaleAARGBA_down_x_up_y_sse4(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, + int dw, int dh, int dow, int sow); +template +void qt_qimageScaleAARGBA_down_xy_sse4(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, + int dw, int dh, int dow, int sow); +#endif + +static void qt_qimageScaleAARGBA_up_xy(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, + int dw, int dh, int dow, int sow) +{ + const unsigned int **ypoints = isi->ypoints; + int *xpoints = isi->xpoints; + int *xapoints = isi->xapoints; + int *yapoints = isi->yapoints; + + int end = dxx + dw; + /* go through every scanline in the output buffer */ + for (int y = 0; y < dh; y++) { + /* calculate the source line we'll scan from */ + const unsigned int *sptr = ypoints[dyy + y]; + unsigned int *dptr = dest + dx + ((y + dy) * dow); + const int yap = yapoints[dyy + y]; + if (yap > 0) { + for (int x = dxx; x < end; x++) { + const unsigned int *pix = sptr + xpoints[x]; + const int xap = xapoints[x]; + if (xap > 0) + *dptr = interpolate_4_pixels(pix[0], pix[1], pix[sow], pix[sow + 1], xap, yap); + else + *dptr = INTERPOLATE_PIXEL_256(pix[0], 256 - yap, pix[sow], yap); + dptr++; + } + } else { + for (int x = dxx; x < end; x++) { + const unsigned int *pix = sptr + xpoints[x]; + const int xap = xapoints[x]; + if (xap > 0) + *dptr = INTERPOLATE_PIXEL_256(pix[0], 256 - xap, pix[1], xap); + else + *dptr = pix[0]; + dptr++; + } + } + } +} + +/* scale by area sampling */ +static void qt_qimageScaleAARGBA(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, int dw, + int dh, int dow, int sow) +{ + /* scaling up both ways */ + if (isi->xup_yup == 3){ + qt_qimageScaleAARGBA_up_xy(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + } + /* if we're scaling down vertically */ + else if (isi->xup_yup == 1) { +#ifdef QT_COMPILER_SUPPORTS_SSE4_1 + if (qCpuHasFeature(SSE4_1)) + qt_qimageScaleAARGBA_up_x_down_y_sse4(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + else +#endif + qt_qimageScaleAARGBA_up_x_down_y(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + } + /* if we're scaling down horizontally */ + else if (isi->xup_yup == 2) { +#ifdef QT_COMPILER_SUPPORTS_SSE4_1 + if (qCpuHasFeature(SSE4_1)) + qt_qimageScaleAARGBA_down_x_up_y_sse4(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + else +#endif + qt_qimageScaleAARGBA_down_x_up_y(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + } + /* if we're scaling down horizontally & vertically */ + else { +#ifdef QT_COMPILER_SUPPORTS_SSE4_1 + if (qCpuHasFeature(SSE4_1)) + qt_qimageScaleAARGBA_down_xy_sse4(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + else +#endif + qt_qimageScaleAARGBA_down_xy(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + } +} + +inline static void qt_qimageScaleAARGBA_helper(const unsigned int *pix, int xyap, int Cxy, int step, int &r, int &g, int &b, int &a) +{ + r = qRed(*pix) * xyap; + g = qGreen(*pix) * xyap; + b = qBlue(*pix) * xyap; + a = qAlpha(*pix) * xyap; + int j; + for (j = (1 << 14) - xyap; j > Cxy; j -= Cxy) { + pix += step; + r += qRed(*pix) * Cxy; + g += qGreen(*pix) * Cxy; + b += qBlue(*pix) * Cxy; + a += qAlpha(*pix) * Cxy; + } + pix += step; + r += qRed(*pix) * j; + g += qGreen(*pix) * j; + b += qBlue(*pix) * j; + a += qAlpha(*pix) * j; +} + +static void qt_qimageScaleAARGBA_up_x_down_y(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, + int dw, int dh, int dow, int sow) +{ + const unsigned int **ypoints = isi->ypoints; + int *xpoints = isi->xpoints; + int *xapoints = isi->xapoints; + int *yapoints = isi->yapoints; + + int end = dxx + dw; + + /* go through every scanline in the output buffer */ + for (int y = 0; y < dh; y++) { + int Cy = (yapoints[dyy + y]) >> 16; + int yap = (yapoints[dyy + y]) & 0xffff; + + unsigned int *dptr = dest + dx + ((y + dy) * dow); + for (int x = dxx; x < end; x++) { + const unsigned int *sptr = ypoints[dyy + y] + xpoints[x]; + int r, g, b, a; + qt_qimageScaleAARGBA_helper(sptr, yap, Cy, sow, r, g, b, a); + + int xap = xapoints[x]; + if (xap > 0) { + int rr, gg, bb, aa; + qt_qimageScaleAARGBA_helper(sptr + 1, yap, Cy, sow, rr, gg, bb, aa); + + r = r * (256 - xap); + g = g * (256 - xap); + b = b * (256 - xap); + a = a * (256 - xap); + r = (r + (rr * xap)) >> 8; + g = (g + (gg * xap)) >> 8; + b = (b + (bb * xap)) >> 8; + a = (a + (aa * xap)) >> 8; + } + *dptr++ = qRgba(r >> 14, g >> 14, b >> 14, a >> 14); + } + } +} + +static void qt_qimageScaleAARGBA_down_x_up_y(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, + int dw, int dh, int dow, int sow) +{ + const unsigned int **ypoints = isi->ypoints; + int *xpoints = isi->xpoints; + int *xapoints = isi->xapoints; + int *yapoints = isi->yapoints; + + int end = dxx + dw; + + /* go through every scanline in the output buffer */ + for (int y = 0; y < dh; y++) { + unsigned int *dptr = dest + dx + ((y + dy) * dow); + for (int x = dxx; x < end; x++) { + int Cx = xapoints[x] >> 16; + int xap = xapoints[x] & 0xffff; + + const unsigned int *sptr = ypoints[dyy + y] + xpoints[x]; + int r, g, b, a; + qt_qimageScaleAARGBA_helper(sptr, xap, Cx, 1, r, g, b, a); + + int yap = yapoints[dyy + y]; + if (yap > 0) { + int rr, gg, bb, aa; + qt_qimageScaleAARGBA_helper(sptr + sow, xap, Cx, 1, rr, gg, bb, aa); + + r = r * (256 - yap); + g = g * (256 - yap); + b = b * (256 - yap); + a = a * (256 - yap); + r = (r + (rr * yap)) >> 8; + g = (g + (gg * yap)) >> 8; + b = (b + (bb * yap)) >> 8; + a = (a + (aa * yap)) >> 8; + } + *dptr = qRgba(r >> 14, g >> 14, b >> 14, a >> 14); + dptr++; + } + } +} + +static void qt_qimageScaleAARGBA_down_xy(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, int dw, + int dh, int dow, int sow) +{ + const unsigned int **ypoints = isi->ypoints; + int *xpoints = isi->xpoints; + int *xapoints = isi->xapoints; + int *yapoints = isi->yapoints; + + int end = dxx + dw; + + for (int y = 0; y < dh; y++) { + int Cy = (yapoints[dyy + y]) >> 16; + int yap = (yapoints[dyy + y]) & 0xffff; + + unsigned int *dptr = dest + dx + ((y + dy) * dow); + for (int x = dxx; x < end; x++) { + int Cx = xapoints[x] >> 16; + int xap = xapoints[x] & 0xffff; + + const unsigned int *sptr = ypoints[dyy + y] + xpoints[x]; + int rx, gx, bx, ax; + qt_qimageScaleAARGBA_helper(sptr, xap, Cx, 1, rx, gx, bx, ax); + + int r = ((rx>>4) * yap); + int g = ((gx>>4) * yap); + int b = ((bx>>4) * yap); + int a = ((ax>>4) * yap); + + int j; + for (j = (1 << 14) - yap; j > Cy; j -= Cy) { + sptr += sow; + qt_qimageScaleAARGBA_helper(sptr, xap, Cx, 1, rx, gx, bx, ax); + r += ((rx>>4) * Cy); + g += ((gx>>4) * Cy); + b += ((bx>>4) * Cy); + a += ((ax>>4) * Cy); + } + sptr += sow; + qt_qimageScaleAARGBA_helper(sptr, xap, Cx, 1, rx, gx, bx, ax); + + r += ((rx>>4) * j); + g += ((gx>>4) * j); + b += ((bx>>4) * j); + a += ((ax>>4) * j); + + *dptr = qRgba(r >> 24, g >> 24, b >> 24, a >> 24); + dptr++; + } + } +} + +static void qt_qimageScaleAARGB_up_x_down_y(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, int dw, + int dh, int dow, int sow); + +static void qt_qimageScaleAARGB_down_x_up_y(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, int dw, + int dh, int dow, int sow); + +static void qt_qimageScaleAARGB_down_xy(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, int dw, + int dh, int dow, int sow); + +/* scale by area sampling - IGNORE the ALPHA byte*/ +static void qt_qimageScaleAARGB(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, + int dw, int dh, int dow, int sow) +{ + /* scaling up both ways */ + if (isi->xup_yup == 3) { + qt_qimageScaleAARGBA_up_xy(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + } + /* if we're scaling down vertically */ + else if (isi->xup_yup == 1) { +#ifdef QT_COMPILER_SUPPORTS_SSE4_1 + if (qCpuHasFeature(SSE4_1)) + qt_qimageScaleAARGBA_up_x_down_y_sse4(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + else +#endif + qt_qimageScaleAARGB_up_x_down_y(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + } + /* if we're scaling down horizontally */ + else if (isi->xup_yup == 2) { +#ifdef QT_COMPILER_SUPPORTS_SSE4_1 + if (qCpuHasFeature(SSE4_1)) + qt_qimageScaleAARGBA_down_x_up_y_sse4(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + else +#endif + qt_qimageScaleAARGB_down_x_up_y(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + } + /* if we're scaling down horizontally & vertically */ + else { +#ifdef QT_COMPILER_SUPPORTS_SSE4_1 + if (qCpuHasFeature(SSE4_1)) + qt_qimageScaleAARGBA_down_xy_sse4(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + else +#endif + qt_qimageScaleAARGB_down_xy(isi, dest, dxx, dyy, dx, dy, dw, dh, dow, sow); + } +} + + +inline static void qt_qimageScaleAARGB_helper(const unsigned int *pix, int xyap, int Cxy, int step, int &r, int &g, int &b) +{ + r = qRed(*pix) * xyap; + g = qGreen(*pix) * xyap; + b = qBlue(*pix) * xyap; + int j; + for (j = (1 << 14) - xyap; j > Cxy; j -= Cxy) { + pix += step; + r += qRed(*pix) * Cxy; + g += qGreen(*pix) * Cxy; + b += qBlue(*pix) * Cxy; + } + pix += step; + r += qRed(*pix) * j; + g += qGreen(*pix) * j; + b += qBlue(*pix) * j; +} + +static void qt_qimageScaleAARGB_up_x_down_y(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, int dw, + int dh, int dow, int sow) +{ + const unsigned int **ypoints = isi->ypoints; + int *xpoints = isi->xpoints; + int *xapoints = isi->xapoints; + int *yapoints = isi->yapoints; + + int end = dxx + dw; + + /* go through every scanline in the output buffer */ + for (int y = 0; y < dh; y++) { + int Cy = (yapoints[dyy + y]) >> 16; + int yap = (yapoints[dyy + y]) & 0xffff; + + unsigned int *dptr = dest + dx + ((y + dy) * dow); + for (int x = dxx; x < end; x++) { + const unsigned int *sptr = ypoints[dyy + y] + xpoints[x]; + int r, g, b; + qt_qimageScaleAARGB_helper(sptr, yap, Cy, sow, r, g, b); + + int xap = xapoints[x]; + if (xap > 0) { + int rr, bb, gg; + qt_qimageScaleAARGB_helper(sptr + 1, yap, Cy, sow, rr, gg, bb); + + r = r * (256 - xap); + g = g * (256 - xap); + b = b * (256 - xap); + r = (r + (rr * xap)) >> 8; + g = (g + (gg * xap)) >> 8; + b = (b + (bb * xap)) >> 8; + } + *dptr++ = qRgb(r >> 14, g >> 14, b >> 14); + } + } +} + +static void qt_qimageScaleAARGB_down_x_up_y(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, int dw, + int dh, int dow, int sow) +{ + const unsigned int **ypoints = isi->ypoints; + int *xpoints = isi->xpoints; + int *xapoints = isi->xapoints; + int *yapoints = isi->yapoints; + + int end = dxx + dw; + + /* go through every scanline in the output buffer */ + for (int y = 0; y < dh; y++) { + unsigned int *dptr = dest + dx + ((y + dy) * dow); + for (int x = dxx; x < end; x++) { + int Cx = xapoints[x] >> 16; + int xap = xapoints[x] & 0xffff; + + const unsigned int *sptr = ypoints[dyy + y] + xpoints[x]; + int r, g, b; + qt_qimageScaleAARGB_helper(sptr, xap, Cx, 1, r, g, b); + + int yap = yapoints[dyy + y]; + if (yap > 0) { + int rr, bb, gg; + qt_qimageScaleAARGB_helper(sptr + sow, xap, Cx, 1, rr, gg, bb); + + r = r * (256 - yap); + g = g * (256 - yap); + b = b * (256 - yap); + r = (r + (rr * yap)) >> 8; + g = (g + (gg * yap)) >> 8; + b = (b + (bb * yap)) >> 8; + } + *dptr++ = qRgb(r >> 14, g >> 14, b >> 14); + } + } +} + +static void qt_qimageScaleAARGB_down_xy(QImageScaleInfo *isi, unsigned int *dest, + int dxx, int dyy, int dx, int dy, int dw, + int dh, int dow, int sow) +{ + const unsigned int **ypoints = isi->ypoints; + int *xpoints = isi->xpoints; + int *xapoints = isi->xapoints; + int *yapoints = isi->yapoints; + + int end = dxx + dw; + + for (int y = 0; y < dh; y++) { + int Cy = (yapoints[dyy + y]) >> 16; + int yap = (yapoints[dyy + y]) & 0xffff; + + unsigned int *dptr = dest + dx + ((y + dy) * dow); + for (int x = dxx; x < end; x++) { + int Cx = xapoints[x] >> 16; + int xap = xapoints[x] & 0xffff; + + const unsigned int *sptr = ypoints[dyy + y] + xpoints[x]; + int rx, gx, bx; + qt_qimageScaleAARGB_helper(sptr, xap, Cx, 1, rx, gx, bx); + + int r = (rx >> 4) * yap; + int g = (gx >> 4) * yap; + int b = (bx >> 4) * yap; + + int j; + for (j = (1 << 14) - yap; j > Cy; j -= Cy) { + sptr += sow; + qt_qimageScaleAARGB_helper(sptr, xap, Cx, 1, rx, gx, bx); + + r += (rx >> 4) * Cy; + g += (gx >> 4) * Cy; + b += (bx >> 4) * Cy; + } + sptr += sow; + qt_qimageScaleAARGB_helper(sptr, xap, Cx, 1, rx, gx, bx); + + r += (rx >> 4) * j; + g += (gx >> 4) * j; + b += (bx >> 4) * j; + + *dptr = qRgb(r >> 24, g >> 24, b >> 24); + dptr++; + } + } +} + +QImage qSmoothScaleImage(const QImage &src, int dw, int dh) +{ + QImage buffer; + if (src.isNull() || dw <= 0 || dh <= 0) + return buffer; + + int w = src.width(); + int h = src.height(); + QImageScaleInfo *scaleinfo = + qimageCalcScaleInfo(src, w, h, dw, dh, true); + if (!scaleinfo) + return buffer; + + buffer = QImage(dw, dh, src.format()); + if (buffer.isNull()) { + qWarning("QImage: out of memory, returning null"); + qimageFreeScaleInfo(scaleinfo); + return QImage(); + } + + if (src.hasAlphaChannel()) + qt_qimageScaleAARGBA(scaleinfo, (unsigned int *)buffer.scanLine(0), + 0, 0, 0, 0, dw, dh, dw, src.bytesPerLine() / 4); + else + qt_qimageScaleAARGB(scaleinfo, (unsigned int *)buffer.scanLine(0), + 0, 0, 0, 0, dw, dh, dw, src.bytesPerLine() / 4); + + qimageFreeScaleInfo(scaleinfo); + return buffer; +} + +QT_END_NAMESPACE From c786a2bf9cf8277a1418c11f6e429b6cd7365d06 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 17 Jul 2015 22:17:37 +0300 Subject: [PATCH 049/121] new history loading (one-request loading always), fixed audio unlistened status on media send, fixed flac playing, fixed os x crashes, version 0.8.40.dev --- MSVC.md | 2 +- QTCREATOR.md | 2 +- Telegram/PrepareWin.bat | 8 +- Telegram/SourceFiles/application.cpp | 4 +- Telegram/SourceFiles/audio.cpp | 2 + Telegram/SourceFiles/boxes/addcontactbox.cpp | 2 +- Telegram/SourceFiles/boxes/contactsbox.cpp | 8 +- Telegram/SourceFiles/config.h | 4 +- Telegram/SourceFiles/dialogswidget.cpp | 36 +- Telegram/SourceFiles/dialogswidget.h | 2 - Telegram/SourceFiles/gui/scrollarea.cpp | 27 +- Telegram/SourceFiles/gui/scrollarea.h | 1 + Telegram/SourceFiles/gui/twidget.cpp | 12 +- Telegram/SourceFiles/gui/twidget.h | 1 + Telegram/SourceFiles/history.cpp | 116 +- Telegram/SourceFiles/history.h | 8 +- Telegram/SourceFiles/historywidget.cpp | 1393 ++++++++---------- Telegram/SourceFiles/historywidget.h | 64 +- Telegram/SourceFiles/mainwidget.cpp | 351 ++--- Telegram/SourceFiles/mainwidget.h | 27 +- Telegram/SourceFiles/mediaview.cpp | 2 +- Telegram/SourceFiles/overviewwidget.cpp | 2 +- Telegram/SourceFiles/profilewidget.cpp | 10 +- Telegram/SourceFiles/pspecific_mac.cpp | 2 +- Telegram/SourceFiles/structs.cpp | 2 +- Telegram/SourceFiles/structs.h | 3 + Telegram/SourceFiles/window.cpp | 2 +- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 +- Telegram/Version.sh | 2 +- XCODE.md | 2 +- 32 files changed, 1014 insertions(+), 1097 deletions(-) diff --git a/MSVC.md b/MSVC.md index d73c9e671..395c4ebdf 100644 --- a/MSVC.md +++ b/MSVC.md @@ -134,7 +134,7 @@ Open **VS2013 x86 Native Tools Command Prompt.bat** (should be in **\\Program Fi PKG_CONFIG_PATH="/mingw64/lib/pkgconfig:$PKG_CONFIG_PATH" - ./configure --toolchain=msvc --disable-programs --disable-everything --enable-libopus --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=aasc --enable-decoder=mp1 --enable-decoder=mp1float --enable-decoder=mp2 --enable-decoder=mp2float --enable-decoder=mp3 --enable-decoder=mp3adu --enable-decoder=mp3adufloat --enable-decoder=mp3float --enable-decoder=mp3on4 --enable-decoder=mp3on4float --enable-decoder=wavpack --enable-decoder=opus --enable-decoder=vorbis --enable-decoder=wmalossless --enable-decoder=wmapro --enable-decoder=wmav1 --enable-decoder=wmav2 --enable-decoder=wmavoice --enable-encoder=libopus --enable-parser=aac --enable-parser=aac_latm --enable-parser=mpegaudio --enable-parser=opus --enable-parser=vorbis --enable-demuxer=aac --enable-demuxer=wav --enable-demuxer=mp3 --enable-demuxer=ogg --enable-demuxer=mov --enable-muxer=ogg --enable-muxer=opus --extra-ldflags="-libpath:/d/TBuild/Libraries/opus/win32/VS2010/Win32/Release celt.lib silk_common.lib silk_float.lib" + ./configure --toolchain=msvc --disable-programs --disable-everything --enable-libopus --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=aasc --enable-decoder=mp1 --enable-decoder=mp1float --enable-decoder=mp2 --enable-decoder=mp2float --enable-decoder=mp3 --enable-decoder=mp3adu --enable-decoder=mp3adufloat --enable-decoder=mp3float --enable-decoder=mp3on4 --enable-decoder=mp3on4float --enable-decoder=wavpack --enable-decoder=opus --enable-decoder=vorbis --enable-decoder=wmalossless --enable-decoder=wmapro --enable-decoder=wmav1 --enable-decoder=wmav2 --enable-decoder=wmavoice --enable-decoder=flac --enable-encoder=libopus --enable-parser=aac --enable-parser=aac_latm --enable-parser=mpegaudio --enable-parser=opus --enable-parser=vorbis --enable-parser=flac --enable-demuxer=aac --enable-demuxer=wav --enable-demuxer=mp3 --enable-demuxer=ogg --enable-demuxer=mov --enable-demuxer=flac --enable-muxer=ogg --enable-muxer=opus --extra-ldflags="-libpath:/d/TBuild/Libraries/opus/win32/VS2010/Win32/Release celt.lib silk_common.lib silk_float.lib" make make install diff --git a/QTCREATOR.md b/QTCREATOR.md index dc15b0cf5..20d7a9fb0 100644 --- a/QTCREATOR.md +++ b/QTCREATOR.md @@ -50,7 +50,7 @@ Download sources [ffmpeg-2.6.3.tar.bz2](http://ffmpeg.org/releases/ffmpeg-2.6.3. sudo apt-get -y --force-yes install autoconf automake build-essential libass-dev libfreetype6-dev libgpac-dev libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texi2html zlib1g-dev sudo apt-get install yasm - ./configure --prefix=/usr/local --disable-programs --disable-everything --enable-libopus --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=aasc --enable-decoder=mp1 --enable-decoder=mp1float --enable-decoder=mp2 --enable-decoder=mp2float --enable-decoder=mp3 --enable-decoder=mp3adu --enable-decoder=mp3adufloat --enable-decoder=mp3float --enable-decoder=mp3on4 --enable-decoder=mp3on4float --enable-decoder=wavpack --enable-decoder=opus --enable-decoder=vorbis --enable-decoder=wmalossless --enable-decoder=wmapro --enable-decoder=wmav1 --enable-decoder=wmav2 --enable-decoder=wmavoice --enable-encoder=libopus --enable-parser=aac --enable-parser=aac_latm --enable-parser=mpegaudio --enable-parser=opus --enable-parser=vorbis --enable-demuxer=aac --enable-demuxer=wav --enable-demuxer=mp3 --enable-demuxer=ogg --enable-demuxer=mov --enable-muxer=ogg --enable-muxer=opus + ./configure --prefix=/usr/local --disable-programs --disable-everything --enable-libopus --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=aasc --enable-decoder=mp1 --enable-decoder=mp1float --enable-decoder=mp2 --enable-decoder=mp2float --enable-decoder=mp3 --enable-decoder=mp3adu --enable-decoder=mp3adufloat --enable-decoder=mp3float --enable-decoder=mp3on4 --enable-decoder=mp3on4float --enable-decoder=wavpack --enable-decoder=opus --enable-decoder=vorbis --enable-decoder=wmalossless --enable-decoder=wmapro --enable-decoder=wmav1 --enable-decoder=wmav2 --enable-decoder=wmavoice --enable-decoder=flac --enable-encoder=libopus --enable-parser=aac --enable-parser=aac_latm --enable-parser=mpegaudio --enable-parser=opus --enable-parser=vorbis --enable-parser=flac --enable-demuxer=aac --enable-demuxer=wav --enable-demuxer=mp3 --enable-demuxer=ogg --enable-demuxer=mov --enable-demuxer=flac --enable-muxer=ogg --enable-muxer=opus make sudo make install diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index b0eee4e0f..1ea544eb8 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,10 +1,10 @@ @echo OFF set "AppVersionStrMajor=0.8" -set "AppVersion=8039" -set "AppVersionStrSmall=0.8.39" -set "AppVersionStr=0.8.39" -set "AppVersionStrFull=0.8.39.0" +set "AppVersion=8040" +set "AppVersionStrSmall=0.8.40" +set "AppVersionStr=0.8.40" +set "AppVersionStrFull=0.8.40.0" set "DevChannel=1" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index 76e8a4bc1..e6665a0b8 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -654,8 +654,8 @@ void Application::checkMapVersion() { psRegisterCustomScheme(); if (Local::oldMapVersion()) { QString versionFeatures; - if (DevChannel && Local::oldMapVersion() < 8039) { - versionFeatures = QString::fromUtf8("\xe2\x80\x94 Moved to Qt 5.5\n\xe2\x80\x94 Some bugfixes and optimizations\n\xe2\x80\x94 In OS X 10.10.3 location marks sent from mobile should be displayed now");// .replace('@', qsl("@") + QChar(0x200D)); + if (DevChannel && Local::oldMapVersion() < 8040) { + versionFeatures = QString::fromUtf8("\xe2\x80\x94 Fixed critical Qt bug in image scale\n\xe2\x80\x94 Huge amount of unread messages are loaded much faster\n\xe2\x80\x94 Flac audio files are played in-app\n\xe2\x80\x94 Some bugfixes and optimizations");// .replace('@', qsl("@") + QChar(0x200D)); } else if (!DevChannel && Local::oldMapVersion() < 8038) { versionFeatures = lang(lng_new_version_text).trimmed(); } diff --git a/Telegram/SourceFiles/audio.cpp b/Telegram/SourceFiles/audio.cpp index ac7988a17..407d3a1af 100644 --- a/Telegram/SourceFiles/audio.cpp +++ b/Telegram/SourceFiles/audio.cpp @@ -1072,6 +1072,8 @@ public: int res = 0; char err[AV_ERROR_MAX_STRING_SIZE] = { 0 }; if ((res = avformat_open_input(&fmtContext, 0, 0, 0)) < 0) { + ioBuffer = 0; + LOG(("Audio Error: Unable to avformat_open_input for file '%1', data size '%2', error %3, %4").arg(fname).arg(data.size()).arg(res).arg(av_make_error_string(err, sizeof(err), res))); return false; } diff --git a/Telegram/SourceFiles/boxes/addcontactbox.cpp b/Telegram/SourceFiles/boxes/addcontactbox.cpp index 7f65d428b..75353e55e 100644 --- a/Telegram/SourceFiles/boxes/addcontactbox.cpp +++ b/Telegram/SourceFiles/boxes/addcontactbox.cpp @@ -285,7 +285,7 @@ void AddContactBox::onImportDone(const MTPcontacts_ImportedContacts &res) { } if (uid) { App::main()->addNewContact(uid); - App::main()->showPeer(App::peerFromUser(uid)); + App::main()->choosePeer(App::peerFromUser(uid), ShowAtUnreadMsgId); App::wnd()->hideLayer(); } else { _addButton.hide(); diff --git a/Telegram/SourceFiles/boxes/contactsbox.cpp b/Telegram/SourceFiles/boxes/contactsbox.cpp index 4ade8efa1..311b26b6b 100644 --- a/Telegram/SourceFiles/boxes/contactsbox.cpp +++ b/Telegram/SourceFiles/boxes/contactsbox.cpp @@ -96,7 +96,7 @@ void ContactsInner::onAddBot() { MTP::send(MTPmessages_StartBot(_bot->inputUser, MTP_int(App::chatFromPeer(_addToChat->id)), MTP_long(randomId), MTP_string(_bot->botInfo->startGroupToken)), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), App::main()->rpcFail(&MainWidget::addParticipantFail, _bot)); App::wnd()->hideLayer(); - App::main()->showPeer(_addToChat->id, 0, false); + App::main()->showPeerHistory(_addToChat->id, ShowAtUnreadMsgId); } else { App::main()->addParticipants(_addToChat, QVector(1, _bot)); } @@ -461,7 +461,7 @@ void ContactsInner::chooseParticipant() { App::wnd()->replaceLayer(box); } else { App::wnd()->hideSettings(true); - App::main()->showPeer(peer->id, 0, false, true); + App::main()->choosePeer(peer->id, ShowAtUnreadMsgId); App::wnd()->hideLayer(); } } @@ -1149,7 +1149,7 @@ void ContactsBox::onNext() { _filter.setFocus(); _filter.notaBene(); } else if (v.size() == 1) { - App::main()->showPeer(_inner.selectedUser()->id); + App::main()->showPeerHistory(_inner.selectedUser()->id, ShowAtUnreadMsgId); } else { App::wnd()->replaceLayer(new CreateGroupBox(users)); } @@ -1258,7 +1258,7 @@ void CreateGroupBox::created(const MTPUpdates &updates) { } break; } if (v && !v->isEmpty() && v->front().type() == mtpc_chat) { - App::main()->showPeer(App::peerFromChat(v->front().c_chat().vid.v)); + App::main()->choosePeer(App::peerFromChat(v->front().c_chat().vid.v), ShowAtUnreadMsgId); } } diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 336274926..98268bf6d 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,8 +17,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8039; -static const wchar_t *AppVersionStr = L"0.8.39"; +static const int32 AppVersion = 8040; +static const wchar_t *AppVersionStr = L"0.8.40"; static const bool DevChannel = true; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index b346267d1..8ae54f92e 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -1094,7 +1094,7 @@ void DialogsListWidget::loadPeerPhotos(int32 yFrom) { bool DialogsListWidget::choosePeer() { History *history = 0; - MsgId msgId = 0; + MsgId msgId = ShowAtUnreadMsgId; if (_state == DefaultState) { if (sel) history = sel->history; } else if (_state == FilteredState || _state == SearchedState) { @@ -1133,11 +1133,11 @@ bool DialogsListWidget::choosePeer() { } } if (history) { - if (msgId) { + if (msgId > 0) { saveRecentHashtags(filter); } bool chosen = (!App::main()->selectingPeer(true) && (_state == FilteredState || _state == SearchedState) && filteredSel >= 0 && filteredSel < filterResults.size()); - App::main()->showPeer(history->peer->id, msgId); + App::main()->choosePeer(history->peer->id, msgId); if (chosen) { emit searchResultChosen(); } @@ -1204,11 +1204,11 @@ void DialogsListWidget::peerBefore(const PeerData *inPeer, MsgId inMsg, PeerData } if (i.value()->prev) { outPeer = i.value()->prev->history->peer; - outMsg = 0; + outMsg = ShowAtUnreadMsgId; return; } else if (dialogs.list.count) { outPeer = dialogs.list.end->prev->history->peer; - outMsg = 0; + outMsg = ShowAtUnreadMsgId; return; } outPeer = 0; @@ -1217,7 +1217,7 @@ void DialogsListWidget::peerBefore(const PeerData *inPeer, MsgId inMsg, PeerData } if (i.value()->prev) { outPeer = i.value()->prev->history->peer; - outMsg = 0; + outMsg = ShowAtUnreadMsgId; return; } } else if (_state == FilteredState || _state == SearchedState) { @@ -1231,7 +1231,7 @@ void DialogsListWidget::peerBefore(const PeerData *inPeer, MsgId inMsg, PeerData } } if (searchResults.at(0)->_item->history()->peer == inPeer && searchResults.at(0)->_item->id == inMsg) { - outMsg = 0; + outMsg = ShowAtUnreadMsgId; if (peopleResults.isEmpty()) { if (filterResults.isEmpty()) { outPeer = 0; @@ -1246,14 +1246,14 @@ void DialogsListWidget::peerBefore(const PeerData *inPeer, MsgId inMsg, PeerData } if (!peopleResults.isEmpty() && peopleResults.at(0) == inPeer) { outPeer = filterResults.isEmpty() ? 0 : filterResults.back()->history->peer; - outMsg = 0; + outMsg = ShowAtUnreadMsgId; return; } if (!peopleResults.isEmpty()) { for (PeopleResults::const_iterator b = peopleResults.cbegin(), i = b + 1, e = peopleResults.cend(); i != e; ++i) { if ((*i) == inPeer) { outPeer = (*(i - 1)); - outMsg = 0; + outMsg = ShowAtUnreadMsgId; return; } } @@ -1267,7 +1267,7 @@ void DialogsListWidget::peerBefore(const PeerData *inPeer, MsgId inMsg, PeerData for (FilteredDialogs::const_iterator b = filterResults.cbegin(), i = b + 1, e = filterResults.cend(); i != e; ++i) { if ((*i)->history->peer == inPeer) { outPeer = (*(i - 1))->history->peer; - outMsg = 0; + outMsg = ShowAtUnreadMsgId; return; } } @@ -1288,7 +1288,7 @@ void DialogsListWidget::peerAfter(const PeerData *inPeer, MsgId inMsg, PeerData } if (i.value()->next != contactsNoDialogs.list.end) { outPeer = i.value()->next->history->peer; - outMsg = 0; + outMsg = ShowAtUnreadMsgId; return; } outPeer = 0; @@ -1298,11 +1298,11 @@ void DialogsListWidget::peerAfter(const PeerData *inPeer, MsgId inMsg, PeerData if (i.value()->next != dialogs.list.end) { outPeer = i.value()->next->history->peer; - outMsg = 0; + outMsg = ShowAtUnreadMsgId; return; } else if (contactsNoDialogs.list.count) { outPeer = contactsNoDialogs.list.begin->history->peer; - outMsg = 0; + outMsg = ShowAtUnreadMsgId; return; } } else if (_state == FilteredState || _state == SearchedState) { @@ -1324,7 +1324,7 @@ void DialogsListWidget::peerAfter(const PeerData *inPeer, MsgId inMsg, PeerData outMsg = searchResults.front()->_item->id; } else { outPeer = (i == e) ? 0 : (*i); - outMsg = 0; + outMsg = ShowAtUnreadMsgId; } return; } @@ -1334,13 +1334,13 @@ void DialogsListWidget::peerAfter(const PeerData *inPeer, MsgId inMsg, PeerData ++i; if (i == e && !peopleResults.isEmpty()) { outPeer = peopleResults.front(); - outMsg = 0; + outMsg = ShowAtUnreadMsgId; } else if (i == e && !searchResults.isEmpty()) { outPeer = searchResults.front()->_item->history()->peer; outMsg = searchResults.front()->_item->id; } else { outPeer = (i == e) ? 0 : (*i)->history->peer; - outMsg = 0; + outMsg = ShowAtUnreadMsgId; } return; } @@ -1454,10 +1454,6 @@ void DialogsWidget::dialogsToUp() { } } -void DialogsWidget::setInnerFocus() { - _filter.setFocus(); -} - void DialogsWidget::animShow(const QPixmap &bgAnimCache) { _bgAnimCache = bgAnimCache; _animCache = myGrab(this, rect()); diff --git a/Telegram/SourceFiles/dialogswidget.h b/Telegram/SourceFiles/dialogswidget.h index 1d1cf6661..922f2a813 100644 --- a/Telegram/SourceFiles/dialogswidget.h +++ b/Telegram/SourceFiles/dialogswidget.h @@ -193,8 +193,6 @@ public: void animShow(const QPixmap &bgAnimCache); bool animStep(float64 ms); - void setInnerFocus(); - void destroyData(); void peerBefore(const PeerData *inPeer, MsgId inMsg, PeerData *&outPeer, MsgId &outMsg) const; diff --git a/Telegram/SourceFiles/gui/scrollarea.cpp b/Telegram/SourceFiles/gui/scrollarea.cpp index d7ecbceec..dbca10ff9 100644 --- a/Telegram/SourceFiles/gui/scrollarea.cpp +++ b/Telegram/SourceFiles/gui/scrollarea.cpp @@ -47,7 +47,7 @@ ScrollBar::ScrollBar(ScrollArea *parent, bool vert, const style::flatScroll *st) _hideTimer.setSingleShot(true); connect(&_hideTimer, SIGNAL(timeout()), this, SLOT(onHideTimer())); - connect(_connected, SIGNAL(valueChanged(int)), this, SLOT(updateBar())); + connect(_connected, SIGNAL(valueChanged(int)), this, SLOT(onValueChanged())); connect(_connected, SIGNAL(rangeChanged(int, int)), this, SLOT(updateBar())); updateBar(); @@ -57,6 +57,11 @@ void ScrollBar::recountSize() { setGeometry(_vertical ? QRect(rtl() ? 0 : (_area->width() - _st->width), _st->deltat, _st->width, _area->height() - _st->deltat - _st->deltab) : QRect(_st->deltat, _area->height() - _st->width, _area->width() - _st->deltat - _st->deltab, _st->width)); } +void ScrollBar::onValueChanged() { + _area->onScrolled(); + updateBar(); +} + void ScrollBar::updateBar(bool force) { QRect newBar; if (_connected->maximum() != _scrollMax) { @@ -266,8 +271,6 @@ _touchScrollState(TouchScrollManual), _touchPrevPosValid(false), _touchWaitingAc _touchSpeedTime(0), _touchAccelerationTime(0), _touchTime(0), _widgetAcceptsTouch(false) { setLayoutDirection(cLangDir()); - connect(horizontalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(onScrolled())); - connect(verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(onScrolled())); connect(&vert, SIGNAL(topShadowVisibility(bool)), &topSh, SLOT(changeVisibility(bool))); connect(&vert, SIGNAL(bottomShadowVisibility(bool)), &bottomSh, SLOT(changeVisibility(bool))); vert.updateBar(true); @@ -297,6 +300,8 @@ void ScrollArea::touchDeaccelerate(int32 elapsed) { } void ScrollArea::onScrolled() { + myEnsureResized(widget()); + bool em = false; int32 horValue = horizontalScrollBar()->value(), vertValue = verticalScrollBar()->value(); if (_horValue != horValue) { @@ -325,27 +330,29 @@ void ScrollArea::onScrolled() { } int ScrollArea::scrollWidth() const { - return scrollLeftMax() + width(); + QWidget *w(widget()); + return w ? qMax(w->width(), width()) : width(); } int ScrollArea::scrollHeight() const { - return scrollTopMax() + height(); + QWidget *w(widget()); + return w ? qMax(w->height(), height()) : height(); } int ScrollArea::scrollLeftMax() const { - return horizontalScrollBar()->maximum(); + return scrollWidth() - width(); } int ScrollArea::scrollTopMax() const { - return verticalScrollBar()->maximum(); + return scrollHeight() - height(); } int ScrollArea::scrollLeft() const { - return horizontalScrollBar()->value(); + return _horValue; } int ScrollArea::scrollTop() const { - return verticalScrollBar()->value(); + return _vertValue; } void ScrollArea::onTouchTimer() { @@ -612,6 +619,8 @@ void ScrollArea::leaveEvent(QEvent *e) { } void ScrollArea::scrollToY(int toTop, int toBottom) { + myEnsureResized(widget()); + int toMin = 0, toMax = scrollTopMax(); if (toTop < toMin) { toTop = toMin; diff --git a/Telegram/SourceFiles/gui/scrollarea.h b/Telegram/SourceFiles/gui/scrollarea.h index 5408d52a5..e88f5e9b1 100644 --- a/Telegram/SourceFiles/gui/scrollarea.h +++ b/Telegram/SourceFiles/gui/scrollarea.h @@ -70,6 +70,7 @@ public: public slots: + void onValueChanged(); void updateBar(bool force = false); void onHideTimer(); diff --git a/Telegram/SourceFiles/gui/twidget.cpp b/Telegram/SourceFiles/gui/twidget.cpp index 7cbcf90d1..8583ccba6 100644 --- a/Telegram/SourceFiles/gui/twidget.cpp +++ b/Telegram/SourceFiles/gui/twidget.cpp @@ -34,12 +34,16 @@ namespace { } } +void myEnsureResized(QWidget *target) { + if (target && (target->testAttribute(Qt::WA_PendingResizeEvent) || !target->testAttribute(Qt::WA_WState_Created))) { + _sendResizeEvents(target); + } +} + QPixmap myGrab(QWidget *target, const QRect &rect) { if (!cRetina()) return target->grab(rect); - - if (target->testAttribute(Qt::WA_PendingResizeEvent) || !target->testAttribute(Qt::WA_WState_Created)) { - _sendResizeEvents(target); - } + + myEnsureResized(target); qreal dpr = App::app()->devicePixelRatio(); QPixmap result(rect.size() * dpr); diff --git a/Telegram/SourceFiles/gui/twidget.h b/Telegram/SourceFiles/gui/twidget.h index 36da53381..b79f824e4 100644 --- a/Telegram/SourceFiles/gui/twidget.h +++ b/Telegram/SourceFiles/gui/twidget.h @@ -174,4 +174,5 @@ private: }; +void myEnsureResized(QWidget *target); QPixmap myGrab(QWidget *target, const QRect &rect); diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 09d8c204a..1157f1391 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -305,10 +305,10 @@ History::History(const PeerId &peerId) : width(0), height(0) , oldLoaded(false) , newLoaded(true) , lastMsg(0) -, activeMsgId(0) , draftToId(0) , lastWidth(0) , lastScrollTop(History::ScrollMax) +, lastShowAtMsgId(ShowAtUnreadMsgId) , mute(isNotifyMuted(peer->notify)) , lastKeyboardInited(false) , lastKeyboardUsed(false) @@ -1010,7 +1010,7 @@ void History::addToFront(const QVector &slice) { block->height += dayItem->resize(width); } if (block->size()) { - if (wasMsgCount < unreadCount && msgCount >= unreadCount && !activeMsgId) { + if (loadedAtBottom() && wasMsgCount < unreadCount && msgCount >= unreadCount) { for (int32 i = block->size(); i > 0; --i) { if ((*block)[i - 1]->itemType() == HistoryItem::MsgType) { ++wasMsgCount; @@ -1233,6 +1233,7 @@ void History::inboxRead(int32 upTo) { if (!dialogs.isEmpty()) { if (App::main()) App::main()->dlgUpdated(dialogs[0]); } + showFrom = 0; App::wnd()->notifyClear(this); clearNotifications(); } @@ -1254,7 +1255,7 @@ void History::outboxRead(HistoryItem *wasRead) { void History::setUnreadCount(int32 newUnreadCount, bool psUpdate) { if (unreadCount != newUnreadCount) { - if (!unreadCount && newUnreadCount == 1 && loadedAtBottom()) { + if (newUnreadCount == 1 && loadedAtBottom()) { showFrom = isEmpty() ? 0 : back()->back(); } else if (!newUnreadCount) { showFrom = 0; @@ -1283,10 +1284,6 @@ void History::setMsgCount(int32 newMsgCount) { } void History::getNextShowFrom(HistoryBlock *block, int32 i) { - if (!loadedAtBottom()) { - showFrom = 0; - return; - } if (i >= 0) { int32 l = block->size(); for (++i; i < l; ++i) { @@ -1313,7 +1310,7 @@ void History::getNextShowFrom(HistoryBlock *block, int32 i) { } void History::addUnreadBar() { - if (unreadBar || !showFrom || !unreadCount || !loadedAtBottom()) return; + if (unreadBar || !showFrom || showFrom->detached() || !unreadCount) return; HistoryBlock *block = showFrom->block(); int32 i = block->indexOf(showFrom); @@ -1341,10 +1338,6 @@ void History::clearNotifications() { notifies.clear(); } -bool History::readyForWork() const { - return activeMsgId ? !isEmpty() : (unreadCount <= msgCount); -} - bool History::loadedAtBottom() const { return newLoaded; } @@ -1353,6 +1346,28 @@ bool History::loadedAtTop() const { return oldLoaded; } +bool History::isReadyFor(MsgId msgId, bool check) const { + if (msgId == ShowAtTheEndMsgId) { + return loadedAtBottom(); + } else if (msgId == ShowAtUnreadMsgId) { + return check ? (loadedAtBottom() && (msgCount >= unreadCount)) : !isEmpty(); + } else if (check) { + HistoryItem *item = App::histItemById(msgId); + return item && item->history() == this && !item->detached(); + } + return !isEmpty(); +} + +void History::getReadyFor(MsgId msgId) { + if (!isReadyFor(msgId, true)) { + clear(true); + newLoaded = (msgId == ShowAtTheEndMsgId) || (lastMsg && !lastMsg->detached()); + oldLoaded = false; + lastWidth = 0; + lastShowAtMsgId = msgId; + } +} + void History::fixLastMessage(bool wasAtBottom) { if (wasAtBottom && isEmpty()) { wasAtBottom = false; @@ -1367,37 +1382,6 @@ void History::fixLastMessage(bool wasAtBottom) { } } -void History::loadAround(MsgId msgId) { - if (activeMsgId != msgId) { - activeMsgId = msgId; - lastWidth = 0; - if (activeMsgId) { - HistoryItem *item = App::histItemById(activeMsgId); - if (!item || !item->block()) { - clear(true); - } - newLoaded = lastMsg && !lastMsg->detached(); - } else { - if (!loadedAtBottom()) { - clear(true); - } - newLoaded = isEmpty() || (lastMsg && !lastMsg->detached()); - } - } -} - -bool History::canShowAround(MsgId msgId) const { - if (activeMsgId != msgId) { - if (msgId) { - HistoryItem *item = App::histItemById(msgId); - return item && item->block(); - } else { - return loadedAtBottom(); - } - } - return true; -} - MsgId History::minMsgId() const { for (const_iterator i = cbegin(), e = cend(); i != e; ++i) { for (HistoryBlock::const_iterator j = (*i)->cbegin(), en = (*i)->cend(); j != en; ++j) { @@ -5184,18 +5168,16 @@ void HistoryMessage::setMedia(const MTPmessageMedia &media) { void HistoryMessage::draw(QPainter &p, uint32 selection) const { textstyleSet(&(out() ? st::outTextStyle : st::inTextStyle)); - if (id == _history->activeMsgId) { - uint64 ms = App::main() ? App::main()->animActiveTime() : 0; - if (ms) { - if (ms > st::activeFadeInDuration + st::activeFadeOutDuration) { - App::main()->stopAnimActive(); - } else { - float64 dt = (ms > st::activeFadeInDuration) ? (1 - (ms - st::activeFadeInDuration) / float64(st::activeFadeOutDuration)) : (ms / float64(st::activeFadeInDuration)); - float64 o = p.opacity(); - p.setOpacity(o * dt); - p.fillRect(0, 0, _history->width, _height, textstyleCurrent()->selectOverlay->b); - p.setOpacity(o); - } + uint64 ms = App::main() ? App::main()->animActiveTime(id) : 0; + if (ms) { + if (ms > st::activeFadeInDuration + st::activeFadeOutDuration) { + App::main()->stopAnimActive(); + } else { + float64 dt = (ms > st::activeFadeInDuration) ? (1 - (ms - st::activeFadeInDuration) / float64(st::activeFadeOutDuration)) : (ms / float64(st::activeFadeInDuration)); + float64 o = p.opacity(); + p.setOpacity(o * dt); + p.fillRect(0, 0, _history->width, _height, textstyleCurrent()->selectOverlay->b); + p.setOpacity(o); } } @@ -6108,19 +6090,17 @@ QString HistoryServiceMsg::inReplyText() const { } void HistoryServiceMsg::draw(QPainter &p, uint32 selection) const { - if (id == _history->activeMsgId) { - uint64 ms = App::main() ? App::main()->animActiveTime() : 0; - if (ms) { - if (ms > st::activeFadeInDuration + st::activeFadeOutDuration) { - App::main()->stopAnimActive(); - } else { - textstyleSet(&st::inTextStyle); - float64 dt = (ms > st::activeFadeInDuration) ? (1 - (ms - st::activeFadeInDuration) / float64(st::activeFadeOutDuration)) : (ms / float64(st::activeFadeInDuration)); - float64 o = p.opacity(); - p.setOpacity(o * dt); - p.fillRect(0, 0, _history->width, _height, textstyleCurrent()->selectOverlay->b); - p.setOpacity(o); - } + uint64 ms = App::main() ? App::main()->animActiveTime(id) : 0; + if (ms) { + if (ms > st::activeFadeInDuration + st::activeFadeOutDuration) { + App::main()->stopAnimActive(); + } else { + textstyleSet(&st::inTextStyle); + float64 dt = (ms > st::activeFadeInDuration) ? (1 - (ms - st::activeFadeInDuration) / float64(st::activeFadeOutDuration)) : (ms / float64(st::activeFadeInDuration)); + float64 o = p.opacity(); + p.setOpacity(o * dt); + p.fillRect(0, 0, _history->width, _height, textstyleCurrent()->selectOverlay->b); + p.setOpacity(o); } } diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index ae6c04193..0c92dcc6f 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -180,15 +180,13 @@ struct History : public QList { void addUnreadBar(); void clearNotifications(); - bool readyForWork() const; // all unread loaded or loaded around activeMsgId bool loadedAtBottom() const; // last message is in the list bool loadedAtTop() const; // nothing was added after loading history back + bool isReadyFor(MsgId msgId, bool check = false) const; // has messages for showing history at msgId + void getReadyFor(MsgId msgId); void fixLastMessage(bool wasAtBottom); - void loadAround(MsgId msgId); - bool canShowAround(MsgId msgId) const; - MsgId minMsgId() const; MsgId maxMsgId() const; @@ -201,7 +199,6 @@ struct History : public QList { PeerData *peer; bool oldLoaded, newLoaded; HistoryItem *lastMsg; - MsgId activeMsgId; typedef QList NotifyQueue; NotifyQueue notifies; @@ -251,6 +248,7 @@ struct History : public QList { MessageCursor draftCursor; bool draftPreviewCancelled; int32 lastWidth, lastScrollTop; + MsgId lastShowAtMsgId; bool mute; bool lastKeyboardInited, lastKeyboardUsed; diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 349054189..0b987b752 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -43,6 +43,7 @@ HistoryList::HistoryList(HistoryWidget *historyWidget, ScrollArea *scroll, Histo , scrollArea(scroll) , currentBlock(0) , currentItem(0) + , _firstLoading(false) , _cursor(style::cur_default) , _dragAction(NoDrag) , _dragSelType(TextSelectLetters) @@ -101,7 +102,7 @@ void HistoryList::paintEvent(QPaintEvent *e) { p.setClipRect(r); } - if (botInfo && !botInfo->text.isEmpty() && botDescHeight > 0) { + if (!_firstLoading && botInfo && !botInfo->text.isEmpty() && botDescHeight > 0) { if (r.top() < botDescRect.y() + botDescRect.height() && r.bottom() > botDescRect.y()) { textstyleSet(&st::inTextStyle); App::roundRect(p, botDescRect, st::msgInBg, MessageInCorners, &st::msgInShadow); @@ -114,11 +115,11 @@ void HistoryList::paintEvent(QPaintEvent *e) { textstyleRestore(); } - } else if (hist->isEmpty()) { + } else if (_firstLoading || hist->isEmpty()) { QPoint dogPos((width() - st::msgDogImg.pxWidth()) / 2, ((height() - st::msgDogImg.pxHeight()) * 4) / 9); p.drawPixmap(dogPos, *cChatDogImage()); } - if (!hist->isEmpty()) { + if (!_firstLoading && !hist->isEmpty()) { adjustCurrent(r.top()); HistoryBlock *block = (*hist)[currentBlock]; HistoryItem *item = (*block)[currentItem]; @@ -1060,6 +1061,14 @@ void HistoryList::keyPressEvent(QKeyEvent *e) { int32 HistoryList::recountHeight(bool dontRecountText) { int32 st = hist->lastScrollTop; + + int32 ph = scrollArea->height(), minadd = 0; + int32 wasYSkip = ph - (hist->height + st::historyPadding); + if (botInfo && !botInfo->text.isEmpty()) { + minadd = st::msgMargin.top() + st::msgMargin.bottom() + st::msgPadding.top() + st::msgPadding.bottom() + st::msgNameFont->height + st::botDescSkip + botDescHeight; + } + if (wasYSkip < minadd) wasYSkip = minadd; + hist->geomResize(scrollArea->width(), &st, dontRecountText); updateBotInfo(false); if (botInfo && !botInfo->text.isEmpty()) { @@ -1081,7 +1090,14 @@ int32 HistoryList::recountHeight(bool dontRecountText) { botDescWidth = botDescHeight = 0; botDescRect = QRect(); } - return st; + + int32 newYSkip = ph - (hist->height + st::historyPadding); + if (botInfo && !botInfo->text.isEmpty()) { + minadd = st::msgMargin.top() + st::msgMargin.bottom() + st::msgPadding.top() + st::msgPadding.bottom() + st::msgNameFont->height + st::botDescSkip + botDescHeight; + } + if (newYSkip < minadd) newYSkip = minadd; + + return st + (newYSkip - wasYSkip); } void HistoryList::updateBotInfo(bool recount) { @@ -1125,22 +1141,30 @@ bool HistoryList::wasSelectedText() const { return _wasSelectedText; } +void HistoryList::setFirstLoading(bool loading) { + _firstLoading = loading; + update(); +} + void HistoryList::updateSize() { int32 ph = scrollArea->height(), minadd = 0; - ySkip = ph - (hist->height + st::historyPadding); + int32 newYSkip = ph - (hist->height + st::historyPadding); if (botInfo && !botInfo->text.isEmpty()) { minadd = st::msgMargin.top() + st::msgMargin.bottom() + st::msgPadding.top() + st::msgPadding.bottom() + st::msgNameFont->height + st::botDescSkip + botDescHeight; } - if (ySkip < minadd) ySkip = minadd; + if (newYSkip < minadd) newYSkip = minadd; if (botDescHeight > 0) { int32 descH = st::msgMargin.top() + st::msgPadding.top() + st::msgNameFont->height + st::botDescSkip + botDescHeight + st::msgPadding.bottom() + st::msgMargin.bottom(); int32 descAtX = (scrollArea->width() - botDescWidth) / 2 - st::msgPadding.left(); - int32 descAtY = qMin(ySkip - descH, (scrollArea->height() - descH) / 2) + st::msgMargin.top(); + int32 descAtY = qMin(newYSkip - descH, (scrollArea->height() - descH) / 2) + st::msgMargin.top(); botDescRect = QRect(descAtX, descAtY, botDescWidth + st::msgPadding.left() + st::msgPadding.right(), descH - st::msgMargin.top() - st::msgMargin.bottom()); } + int32 yAdded = newYSkip - ySkip; + ySkip = newYSkip; + int32 nh = hist->height + st::historyPadding + ySkip; if (width() != scrollArea->width() || height() != nh) { resize(scrollArea->width(), nh); @@ -2161,17 +2185,16 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) , _replyForwardPressed(false) , _replyReturn(0) , _stickersUpdateRequest(0) -, _loadingMessages(false) -, histRequestsCount(0) -, histPeer(0) -, _activeHist(0) -, histPreloading(0) -, _loadingAroundId(-1) -, _loadingAroundRequest(0) +, _peer(0) +, _showAtMsgId(0) +, _preloadRequest(0), _preloadDownRequest(0) +, _delayedShowAtMsgId(-1) +, _delayedShowAtRequest(0) +, _activeAnimMsgId(0) , _scroll(this, st::historyScroll, false) , _list(0) -, hist(0) -, _histInited(false), _histNeedUpdate(false) +, _history(0) +, _histInited(false) , _toHistoryEnd(this, st::historyToEnd) , _attachMention(this) , _send(this, lang(lng_send_button), st::btnSend) @@ -2200,13 +2223,12 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) , _attachDrag(DragStateNone) , _attachDragDocument(this) , _attachDragPhoto(this) -, imageLoader(this) +, _imageLoader(this) , _synthedTextUpdate(false) -, serviceImageCacheSize(0) -, confirmImageId(0) -, confirmWithText(false) -, titlePeerTextWidth(0) -, hiderOffered(false) +, _serviceImageCacheSize(0) +, _confirmImageId(0) +, _confirmWithText(false) +, _titlePeerTextWidth(0) , _showAnim(animFunc(this, &HistoryWidget::showStep)) , _scrollDelta(0) , _typingRequest(0) @@ -2228,8 +2250,8 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) connect(&_field, SIGNAL(tabbed()), this, SLOT(onFieldTabbed())); connect(&_field, SIGNAL(resized()), this, SLOT(onFieldResize())); connect(&_field, SIGNAL(focused()), this, SLOT(onFieldFocused())); - connect(&imageLoader, SIGNAL(imageReady()), this, SLOT(onPhotoReady())); - connect(&imageLoader, SIGNAL(imageFailed(quint64)), this, SLOT(onPhotoFailed(quint64))); + connect(&_imageLoader, SIGNAL(imageReady()), this, SLOT(onPhotoReady())); + connect(&_imageLoader, SIGNAL(imageFailed(quint64)), this, SLOT(onPhotoFailed(quint64))); connect(&_field, SIGNAL(changed()), this, SLOT(onTextChange())); connect(&_field, SIGNAL(spacedReturnedPasted()), this, SLOT(onPreviewParse())); connect(&_field, SIGNAL(linksChanged()), this, SLOT(onPreviewCheck())); @@ -2349,21 +2371,21 @@ void HistoryWidget::onTextChange() { update(); } - if (!hist || _synthedTextUpdate) return; + if (!_history || _synthedTextUpdate) return; _saveDraftText = true; onDraftSave(true); } void HistoryWidget::onDraftSaveDelayed() { - if (!hist || _synthedTextUpdate) return; + if (!_history || _synthedTextUpdate) return; if (!_field.textCursor().anchor() && !_field.textCursor().position() && !_field.verticalScrollBar()->value()) { - if (!Local::hasDraftPositions(hist->peer->id)) return; + if (!Local::hasDraftPositions(_history->peer->id)) return; } onDraftSave(true); } void HistoryWidget::onDraftSave(bool delayed) { - if (!hist) return; + if (!_history) return; if (delayed) { uint64 ms = getms(); if (!_saveDraftStart) { @@ -2377,14 +2399,14 @@ void HistoryWidget::onDraftSave(bool delayed) { } void HistoryWidget::writeDraft(MsgId *replyTo, const QString *text, const MessageCursor *cursor, bool *previewCancelled) { - bool save = hist && (_saveDraftStart > 0); + bool save = _history && (_saveDraftStart > 0); _saveDraftStart = 0; _saveDraftTimer.stop(); if (_saveDraftText) { - if (save) Local::writeDraft(hist->peer->id, Local::MessageDraft(replyTo ? (*replyTo) : _replyToId, text ? (*text) : _field.getLastText(), previewCancelled ? (*previewCancelled) : _previewCancelled)); + if (save) Local::writeDraft(_history->peer->id, Local::MessageDraft(replyTo ? (*replyTo) : _replyToId, text ? (*text) : _field.getLastText(), previewCancelled ? (*previewCancelled) : _previewCancelled)); _saveDraftText = false; } - if (save) Local::writeDraftPositions(hist->peer->id, cursor ? (*cursor) : MessageCursor(_field)); + if (save) Local::writeDraftPositions(_history->peer->id, cursor ? (*cursor) : MessageCursor(_field)); } void HistoryWidget::cancelTyping() { @@ -2396,12 +2418,12 @@ void HistoryWidget::cancelTyping() { void HistoryWidget::updateTyping(bool typing) { uint64 ms = getms(true) + 10000; - if (_synthedTextUpdate || !hist || (typing && (hist->myTyping + 5000 > ms)) || (!typing && (hist->myTyping + 5000 <= ms))) return; + if (_synthedTextUpdate || !_history || (typing && (_history->myTyping + 5000 > ms)) || (!typing && (_history->myTyping + 5000 <= ms))) return; - hist->myTyping = typing ? ms : 0; + _history->myTyping = typing ? ms : 0; cancelTyping(); if (typing) { - _typingRequest = MTP::send(MTPmessages_SetTyping(histPeer->input, typing ? MTP_sendMessageTypingAction() : MTP_sendMessageCancelAction()), rpcDone(&HistoryWidget::typingDone)); + _typingRequest = MTP::send(MTPmessages_SetTyping(_peer->input, typing ? MTP_sendMessageTypingAction() : MTP_sendMessageCancelAction()), rpcDone(&HistoryWidget::typingDone)); _typingStopTimer.start(5000); } } @@ -2421,19 +2443,7 @@ void HistoryWidget::typingDone(const MTPBool &result, mtpRequestId req) { } void HistoryWidget::activate() { - if (hist) { - if (!_histInited) checkUnreadLoaded(); - if (_histNeedUpdate) updateListSize(); - } - if (App::main()->selectingPeer()) { - if (hiderOffered) { - App::main()->focusPeerSelect(); - return; - } else { - App::main()->dialogsActivate(); - return; - } - } + if (_history) updateListSize(0, true); if (_list) { if (_selCount || (_list && _list->wasSelectedText()) || _recording || isBotStart()) { _list->setFocus(); @@ -2450,7 +2460,7 @@ void HistoryWidget::onRecordError() { void HistoryWidget::onRecordDone(QByteArray result, qint32 samples) { App::wnd()->activateWindow(); int32 duration = samples / AudioVoiceMsgFrequency; - imageLoader.append(result, duration, histPeer->id, replyToId(), ToPrepareAudio); + _imageLoader.append(result, duration, _peer->id, replyToId(), ToPrepareAudio); cancelReply(lastForceReplyReplied()); } @@ -2476,7 +2486,7 @@ void HistoryWidget::updateStickers() { } void HistoryWidget::botCommandsChanged(UserData *user) { - if (histPeer && (histPeer == user || histPeer->chat)) { + if (_peer && (_peer == user || _peer->chat)) { if (_attachMention.clearFilteredCommands()) { checkMentionDropdown(); } @@ -2568,14 +2578,6 @@ bool HistoryWidget::stickersFailed(const RPCError &error) { return true; } -void HistoryWidget::clearLoadingAround() { - _loadingAroundId = -1; - if (_loadingAroundRequest) { - MTP::cancel(_loadingAroundRequest); - _loadingAroundRequest = 0; - } -} - void HistoryWidget::clearReplyReturns() { _replyReturns.clear(); _replyReturn = 0; @@ -2593,7 +2595,8 @@ QList HistoryWidget::replyReturns() { } void HistoryWidget::setReplyReturns(PeerId peer, const QList &replyReturns) { - if (!histPeer || histPeer->id != peer) return; + if (!_peer || _peer->id != peer) return; + _replyReturns = replyReturns; _replyReturn = _replyReturns.isEmpty() ? 0 : App::histItemById(_replyReturns.back()); while (!_replyReturns.isEmpty() && !_replyReturn) { @@ -2637,73 +2640,74 @@ void HistoryWidget::setKbWasHidden() { update(); } -void HistoryWidget::showPeer(const PeerId &peer, MsgId msgId, bool force, bool leaveActive) { - if (App::main()->selectingPeer() && !force) { - hiderOffered = true; - App::main()->offerPeer(peer); - return; +void HistoryWidget::fastShowAtEnd(History *h) { + h->getReadyFor(ShowAtTheEndMsgId); + + if (_history != h) return; + + clearAllLoadRequests(); + + _showAtMsgId = ShowAtTheEndMsgId; + _histInited = false; + + if (h->isReadyFor(_showAtMsgId)) { + historyLoaded(); + } else { + firstLoadMessages(); + doneShow(); } - if (hist) { - if (histPeer->id == peer) { - if (msgId != hist->activeMsgId) { - bool canShowNow = hist->canShowAround(msgId); - if (!force && !canShowNow) { - if (_loadingAroundId != msgId) { - clearLoadingAround(); - _loadingAroundId = msgId; - loadMessagesAround(); - } - return; - } - hist->loadAround(msgId); - if (!canShowNow) { - histPreload.clear(); - histPreloadDown.clear(); - if (histPreloading) MTP::cancel(histPreloading); - if (histPreloadingDown) MTP::cancel(histPreloadingDown); - histPreloading = histPreloadingDown = 0; - } +} + +void HistoryWidget::showPeerHistory(const PeerId &peerId, MsgId showAtMsgId) { + if (_history) { + if (_peer->id == peerId) { + _history->lastWidth = 0; + + bool canShowNow = _history->isReadyFor(showAtMsgId, true); + if (!canShowNow) { + delayedShowAt(showAtMsgId); + return; } - if (_replyReturn && _replyReturn->id == msgId) calcNextReplyReturn(); - if (hist->unreadBar) hist->unreadBar->destroy(); - checkUnreadLoaded(); + clearDelayedShowAt(); + if (_replyReturn && _replyReturn->id == showAtMsgId) { + calcNextReplyReturn(); + } - clearLoadingAround(); - emit peerShown(histPeer); - return App::wnd()->setInnerFocus(); + _showAtMsgId = showAtMsgId; + _histInited = false; + + historyLoaded(); + return; } updateTyping(false); } + stopGif(); - clearLoadingAround(); clearReplyReturns(); - if (_list) { - if (!histPreload.isEmpty()) { - _list->messagesReceived(histPreload); - updateBotKeyboard(); - histPreload.clear(); - } - if (!histPreloadDown.isEmpty()) { - _list->messagesReceivedDown(histPreloadDown); - histPreloadDown.clear(); - } - } - if (hist) { - hist->draft = _field.getLastText(); - hist->draftCursor.fillFrom(_field); - hist->draftToId = _replyToId; - hist->draftPreviewCancelled = _previewCancelled; - writeDraft(&hist->draftToId, &hist->draft, &hist->draftCursor, &hist->draftPreviewCancelled); + clearAllLoadRequests(); - if (hist->readyForWork() && _scroll.scrollTop() + 1 <= _scroll.scrollTopMax()) { - hist->lastWidth = _list->width(); + if (_history) { + _history->draft = _field.getLastText(); + _history->draftCursor.fillFrom(_field); + _history->draftToId = _replyToId; + _history->draftPreviewCancelled = _previewCancelled; + + writeDraft(&_history->draftToId, &_history->draft, &_history->draftCursor, &_history->draftPreviewCancelled); + + if (_scroll.scrollTop() + 1 <= _scroll.scrollTopMax()) { + _history->lastWidth = _list->width(); + _history->lastShowAtMsgId = _showAtMsgId; } else { - hist->lastWidth = 0; + _history->lastWidth = 0; + _history->lastShowAtMsgId = ShowAtUnreadMsgId; } - hist->lastScrollTop = _scroll.scrollTop(); - if (hist->unreadBar) hist->unreadBar->destroy(); + _history->lastScrollTop = _scroll.scrollTop(); + if (_history->unreadBar) { + _history->unreadBar->destroy(); + } + _history = 0; } if (_replyToId) { @@ -2721,35 +2725,17 @@ void HistoryWidget::showPeer(const PeerId &peer, MsgId msgId, bool force, bool l _list = 0; updateTopBarSelection(); - if (_activeHist && _activeHist->peer->id != peer && (!leaveActive || _activeHist != hist)) { - if (!_activeHist->peer->chat && _activeHist->peer->asUser()->botInfo) { - _activeHist->peer->asUser()->botInfo->startToken = QString(); - } + _showAtMsgId = showAtMsgId; + _histInited = false; + if (_history) { + App::main()->dlgUpdated(_history); } - if (leaveActive && hist) { - _activeHist = hist; - } else { - if (!leaveActive) { - _activeHist = 0; - } - if (hist) { - App::main()->dlgUpdated(hist); - if (!hist->peer->chat && hist->peer->asUser()->botInfo) { - hist->peer->asUser()->botInfo->startToken = QString(); - } - } - } - histPeer = peer ? App::peer(peer) : 0; - titlePeerText = QString(); - titlePeerTextWidth = 0; - histRequestsCount = 0; - histPreload.clear(); - histPreloadDown.clear(); - if (histPreloading) MTP::cancel(histPreloading); - if (histPreloadingDown) MTP::cancel(histPreloadingDown); - histPreloading = histPreloadingDown = 0; - hist = 0; - _histInited = _histNeedUpdate = false; + + _peer = peerId ? App::peer(peerId) : 0; + + _titlePeerText = QString(); + _titlePeerTextWidth = 0; + noSelectingScroll(); _selCount = 0; App::main()->topBar()->showSelected(0); @@ -2763,52 +2749,55 @@ void HistoryWidget::showPeer(const PeerId &peer, MsgId msgId, bool force, bool l _kbWasHidden = false; - if (peer) { + if (_peer) { App::forgetMedia(); - serviceImageCacheSize = imageCacheSize(); + _serviceImageCacheSize = imageCacheSize(); MTP::clearLoaderPriorities(); - histInputPeer = histPeer->input; - if (histInputPeer.type() == mtpc_inputPeerEmpty) { // maybe should load user - } - Histories::iterator i = App::histories().find(peer); - if (i == App::histories().end()) { - hist = new History(peer); - i = App::histories().insert(peer, hist); - } else { - hist = i.value(); - } - if (hist->readyForWork()) { - _scroll.show(); - } - if (hist) { - App::main()->dlgUpdated(hist); - } - _list = new HistoryList(this, &_scroll, hist); - hist->loadAround(msgId); + if (_peer->input.type() == mtpc_inputPeerEmpty) { // maybe should load user + } + _history = App::history(_peer->id); + + if (_showAtMsgId == ShowAtUnreadMsgId) { + if (_history->lastWidth) { + _showAtMsgId = _history->lastShowAtMsgId; + } + } else { + _history->lastWidth = 0; + } + + _list = new HistoryList(this, &_scroll, _history); _list->hide(); + _scroll.hide(); _scroll.setWidget(_list); _list->show(); - updateBotKeyboard(); - checkUnreadLoaded(); + if (_history->lastWidth || _history->isReadyFor(_showAtMsgId, true)) { + historyLoaded(); + } else { + firstLoadMessages(); + doneShow(); + } + if (_history) { + App::main()->dlgUpdated(_history); + } - App::main()->peerUpdated(histPeer); + App::main()->peerUpdated(_peer); - if (hist->draftToId > 0 || !hist->draft.isEmpty()) { - setFieldText(hist->draft); + if (_history->draftToId > 0 || !_history->draft.isEmpty()) { + setFieldText(_history->draft); _field.setFocus(); - hist->draftCursor.applyTo(_field, &_synthedTextUpdate); - _replyToId = App::main()->hasForwardingItems() ? 0 : hist->draftToId; - if (hist->draftPreviewCancelled) { + _history->draftCursor.applyTo(_field, &_synthedTextUpdate); + _replyToId = App::main()->hasForwardingItems() ? 0 : _history->draftToId; + if (_history->draftPreviewCancelled) { _previewCancelled = true; } } else { - Local::MessageDraft draft = Local::readDraft(hist->peer->id); + Local::MessageDraft draft = Local::readDraft(_peer->id); setFieldText(draft.text); _field.setFocus(); if (!draft.text.isEmpty()) { - MessageCursor cur = Local::readDraftPositions(hist->peer->id); + MessageCursor cur = Local::readDraftPositions(_peer->id); cur.applyTo(_field, &_synthedTextUpdate); } _replyToId = App::main()->hasForwardingItems() ? 0 : draft.replyTo; @@ -2828,42 +2817,32 @@ void HistoryWidget::showPeer(const PeerId &peer, MsgId msgId, bool force, bool l connect(&_scroll, SIGNAL(geometryChanged()), _list, SLOT(onParentGeometryChanged())); connect(&_scroll, SIGNAL(scrolled()), _list, SLOT(onUpdateSelected())); } else { - updateBotKeyboard(); - updateControlsVisibility(); + doneShow(); } - emit peerShown(histPeer); + emit peerShown(_peer); App::main()->topBar()->update(); update(); } -void HistoryWidget::checkUnreadLoaded(bool checkOnlyShow) { - if (!hist) return; - if (hist->readyForWork()) { - if (checkOnlyShow && !_scroll.isHidden()) return; - if (!_showAnim.animating()) { - if (_scroll.isHidden()) { - _scroll.show(); - if (!_field.isHidden()) update(); - } - } - updateBotKeyboard(); - } else if (checkOnlyShow) { - return; - } - updateListSize(0, true); - if (!_showAnim.animating()) updateControlsVisibility(); - if (hist->readyForWork()) { - if (!_scroll.isHidden() && !_list->isHidden()) { - onListScroll(); - } - } else { - loadMessages(); +void HistoryWidget::clearDelayedShowAt() { + _delayedShowAtMsgId = -1; + if (_delayedShowAtRequest) { + MTP::cancel(_delayedShowAtRequest); + _delayedShowAtRequest = 0; } } +void HistoryWidget::clearAllLoadRequests() { + clearDelayedShowAt(); + if (_firstLoadRequest) MTP::cancel(_firstLoadRequest); + if (_preloadRequest) MTP::cancel(_preloadRequest); + if (_preloadDownRequest) MTP::cancel(_preloadDownRequest); + _preloadRequest = _preloadDownRequest = _firstLoadRequest = 0; +} + void HistoryWidget::updateControlsVisibility() { - if (!hist || _showAnim.animating()) { + if (!_history || _showAnim.animating()) { _scroll.hide(); _kbScroll.hide(); _send.hide(); @@ -2884,16 +2863,43 @@ void HistoryWidget::updateControlsVisibility() { } updateToEndVisibility(); - if (hist->readyForWork()) { - if (!histPeer->chat || !histPeer->asChat()->forbidden) { - checkMentionDropdown(); - if (isBotStart()) { - if (_botStart.isHidden()) { - _botStart.clearState(); - _botStart.show(); - _kbShown = false; - } + if (_firstLoadRequest) { + _scroll.hide(); + } else { + _scroll.show(); + } + if (!_peer->chat || !_peer->asChat()->forbidden) { + checkMentionDropdown(); + if (isBotStart()) { + if (_botStart.isHidden()) { + _botStart.clearState(); + _botStart.show(); + _kbShown = false; + } + _send.hide(); + _field.hide(); + _attachEmoji.hide(); + _kbShow.hide(); + _kbHide.hide(); + _cmdStart.hide(); + _attachDocument.hide(); + _attachPhoto.hide(); + _kbScroll.hide(); + _replyForwardPreviewCancel.hide(); + } else { + _botStart.hide(); + if (cHasAudioCapture() && _field.getLastText().isEmpty() && !App::main()->hasForwardingItems()) { _send.hide(); + setMouseTracking(true); + mouseMoveEvent(0); + } else { + _send.show(); + setMouseTracking(false); + _recordAnim.stop(); + _inRecord = _inField = false; + a_recordOver = anim::fvalue(0, 0); + } + if (_recording) { _field.hide(); _attachEmoji.hide(); _kbShow.hide(); @@ -2901,167 +2907,114 @@ void HistoryWidget::updateControlsVisibility() { _cmdStart.hide(); _attachDocument.hide(); _attachPhoto.hide(); - _kbScroll.hide(); - _replyForwardPreviewCancel.hide(); - } else { - _botStart.hide(); - if (cHasAudioCapture() && _field.getLastText().isEmpty() && !App::main()->hasForwardingItems()) { - _send.hide(); - setMouseTracking(true); - mouseMoveEvent(0); + if (_kbShown) { + _kbScroll.show(); } else { - _send.show(); - setMouseTracking(false); - _recordAnim.stop(); - _inRecord = _inField = false; - a_recordOver = anim::fvalue(0, 0); + _kbScroll.hide(); } - if (_recording) { - _field.hide(); + } else { + _field.show(); + if (_kbShown) { + _kbScroll.show(); _attachEmoji.hide(); + _kbHide.show(); + _kbShow.hide(); + _cmdStart.hide(); + } else if (_kbReplyTo) { + _kbScroll.hide(); + _attachEmoji.show(); + _kbHide.hide(); _kbShow.hide(); - _kbHide.hide(); _cmdStart.hide(); - _attachDocument.hide(); - _attachPhoto.hide(); - if (_kbShown) { - _kbScroll.show(); - } else { - _kbScroll.hide(); - } } else { - _field.show(); - if (_kbShown) { - _kbScroll.show(); - _attachEmoji.hide(); - _kbHide.show(); - _kbShow.hide(); - _cmdStart.hide(); - } else if (_kbReplyTo) { - _kbScroll.hide(); - _attachEmoji.show(); - _kbHide.hide(); - _kbShow.hide(); + _kbScroll.hide(); + _attachEmoji.show(); + _kbHide.hide(); + if (_keyboard.hasMarkup()) { + _kbShow.show(); _cmdStart.hide(); } else { - _kbScroll.hide(); - _attachEmoji.show(); - _kbHide.hide(); - if (_keyboard.hasMarkup()) { - _kbShow.show(); - _cmdStart.hide(); + _kbShow.hide(); + if (_cmdStartShown) { + _cmdStart.show(); } else { - _kbShow.hide(); - if (_cmdStartShown) { - _cmdStart.show(); - } else { - _cmdStart.hide(); - } + _cmdStart.hide(); } } - if (cDefaultAttach() == dbidaPhoto) { - _attachDocument.hide(); - _attachPhoto.show(); - } else { - _attachDocument.show(); - _attachPhoto.hide(); - } } - if (_replyToId || App::main()->hasForwardingItems() || (_previewData && _previewData->pendingTill >= 0) || _kbReplyTo) { - if (_replyForwardPreviewCancel.isHidden()) { - _replyForwardPreviewCancel.show(); - resizeEvent(0); - update(); - } + if (cDefaultAttach() == dbidaPhoto) { + _attachDocument.hide(); + _attachPhoto.show(); } else { - _replyForwardPreviewCancel.hide(); + _attachDocument.show(); + _attachPhoto.hide(); } } - } else { - _attachMention.hide(); - _send.hide(); - _botStart.hide(); - _attachDocument.hide(); - _attachPhoto.hide(); - _attachEmoji.hide(); - _kbShow.hide(); - _kbHide.hide(); - _cmdStart.hide(); - _attachType.hide(); - _emojiPan.hide(); - if (!_field.isHidden()) { - _field.hide(); - resizeEvent(0); - update(); + if (_replyToId || App::main()->hasForwardingItems() || (_previewData && _previewData->pendingTill >= 0) || _kbReplyTo) { + if (_replyForwardPreviewCancel.isHidden()) { + _replyForwardPreviewCancel.show(); + resizeEvent(0); + update(); + } + } else { + _replyForwardPreviewCancel.hide(); } } - - if (hist->unreadCount && App::wnd()->historyIsActive()) { - historyWasRead(); - } } else { - loadMessages(); - if (!hist->readyForWork()) { - _scroll.hide(); - _kbScroll.hide(); - _attachMention.hide(); - _send.hide(); - _botStart.hide(); - _attachDocument.hide(); - _attachPhoto.hide(); - _attachEmoji.hide(); - _kbShow.hide(); - _kbHide.hide(); - _cmdStart.hide(); - _attachType.hide(); - _emojiPan.hide(); - _replyForwardPreviewCancel.hide(); - if (!_field.isHidden()) { - _field.hide(); - update(); - } + _attachMention.hide(); + _send.hide(); + _botStart.hide(); + _attachDocument.hide(); + _attachPhoto.hide(); + _attachEmoji.hide(); + _kbShow.hide(); + _kbHide.hide(); + _cmdStart.hide(); + _attachType.hide(); + _emojiPan.hide(); + if (!_field.isHidden()) { + _field.hide(); + resizeEvent(0); + update(); } } } void HistoryWidget::newUnreadMsg(History *history, HistoryItem *item) { if (App::wnd()->historyIsActive()) { - if (hist == history && hist->readyForWork()) { + if (_history == history) { historyWasRead(); if (_scroll.scrollTop() + 1 > _scroll.scrollTopMax()) { if (history->unreadBar) history->unreadBar->destroy(); } } else { - if (hist != history) { - App::wnd()->notifySchedule(history, item); - } + App::wnd()->notifySchedule(history, item); history->setUnreadCount(history->unreadCount + 1); } } else { - if (hist == history && hist->readyForWork()) { + if (_history == history) { if (_scroll.scrollTop() + 1 > _scroll.scrollTopMax()) { if (history->unreadBar) history->unreadBar->destroy(); } } App::wnd()->notifySchedule(history, item); history->setUnreadCount(history->unreadCount + 1); - history->lastWidth = 0; } } void HistoryWidget::historyToDown(History *history) { history->lastScrollTop = History::ScrollMax; - if (history == hist) { + if (history == _history) { _scroll.scrollToY(_scroll.scrollTopMax()); } } void HistoryWidget::historyWasRead(bool force) { - App::main()->readServerHistory(hist, force); + App::main()->readServerHistory(_history, force); } void HistoryWidget::historyCleared(History *history) { - if (history == hist) { + if (history == _history) { _list->dragActionCancel(); } } @@ -3070,25 +3023,25 @@ bool HistoryWidget::messagesFailed(const RPCError &error, mtpRequestId requestId if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false; LOG(("RPC Error: %1 %2: %3").arg(error.code()).arg(error.type()).arg(error.description())); - if (histPreloading == requestId) { - histPreloading = 0; - } else if (histPreloadingDown == requestId) { - histPreloadingDown = 0; - } else if (_loadingAroundRequest == requestId) { - _loadingAroundRequest = 0; + if (_preloadRequest == requestId) { + _preloadRequest = 0; + } else if (_preloadDownRequest == requestId) { + _preloadDownRequest = 0; + } else if (_firstLoadRequest == requestId) { + _firstLoadRequest = 0; + App::main()->showDialogs(); + } else if (_delayedShowAtRequest == requestId) { + _delayedShowAtRequest = 0; } return true; } void HistoryWidget::messagesReceived(const MTPmessages_Messages &messages, mtpRequestId requestId) { - if (!hist) { - histPreloading = histPreloadingDown = _loadingAroundRequest = 0; - histPreload.clear(); - histPreloadDown.clear(); + if (!_history) { + _preloadRequest = _preloadDownRequest = _firstLoadRequest = _delayedShowAtRequest = 0; return; } - PeerId peer = 0; int32 count = 0; const QVector *histList = 0; switch (messages.type()) { @@ -3107,214 +3060,158 @@ void HistoryWidget::messagesReceived(const MTPmessages_Messages &messages, mtpRe count = data.vcount.v; } break; } - if (histList && !histList->isEmpty()) { - const MTPmessage &msg(histList->front()); - PeerId from_id(0), to_id(0); - switch (msg.type()) { - case mtpc_message: - from_id = App::peerFromUser(msg.c_message().vfrom_id); - to_id = App::peerFromMTP(msg.c_message().vto_id); - break; - case mtpc_messageService: - from_id = App::peerFromUser(msg.c_messageService().vfrom_id); - to_id = App::peerFromMTP(msg.c_messageService().vto_id); - break; - } - peer = (to_id == App::peerFromUser(MTP::authedId())) ? from_id : to_id; - } - - bool down = false; - if (histPreloading == requestId) { - histPreloading = 0; - } else if (histPreloadingDown == requestId) { - histPreloadingDown = 0; - down = true; - } else { - if (_loadingAroundRequest == requestId) { - _loadingAroundRequest = 0; - hist->loadAround(_loadingAroundId); - if (hist->isEmpty()) { - histPreload.clear(); - histPreloadDown.clear(); - if (histPreloading) MTP::cancel(histPreloading); - if (histPreloadingDown) MTP::cancel(histPreloadingDown); - histPreloading = histPreloadingDown = 0; - addMessagesToFront(*histList); - } - showPeer(hist->peer->id, _loadingAroundId, true); - } - return; - } - - if (peer && peer != histPeer->id) return; - - if (histList) { - if (!hist->minMsgId() || histList->isEmpty()) { - if (down) { - addMessagesToBack(*histList); - histPreloadDown.clear(); - } else { - addMessagesToFront(*histList); - histPreload.clear(); - } - } else { - if (down) { - histPreloadDown = *histList; - } else { - histPreload = *histList; - } - } - } else { - if (down) { - addMessagesToBack(QVector()); - } else { - addMessagesToFront(QVector()); - } - if (!hist->readyForWork()) { - if (hist->activeMsgId) { - hist->activeMsgId = 0; - } - if (!hist->readyForWork()) { - hist->setUnreadCount(hist->msgCount); - } - } - checkUnreadLoaded(true); - return; - } - - if (down && hist->loadedAtBottom() && histPreloadDown.size()) { - addMessagesToBack(histPreloadDown); - histPreloadDown.clear(); - loadMessagesDown(); - } else if (!down && hist->loadedAtTop() && histPreload.size()) { - addMessagesToFront(histPreload); - histPreload.clear(); - loadMessages(); - } else if ((down && histPreloadDown.size()) || (!down && histPreload.size())) { + + if (_preloadRequest == requestId) { + addMessagesToFront(*histList); + _preloadRequest = 0; onListScroll(); - } else if (down) { - loadMessagesDown(); - } else { - loadMessages(); + } else if (_preloadDownRequest == requestId) { + addMessagesToBack(*histList); + _preloadDownRequest = 0; + onListScroll(); + if (_history->loadedAtBottom() && App::wnd()) App::wnd()->checkHistoryActivation(); + } else if (_firstLoadRequest == requestId) { + addMessagesToFront(*histList); + _firstLoadRequest = 0; + if (_history->loadedAtTop()) { + if (_history->unreadCount > count) { + _history->setUnreadCount(count); + } + if (_history->isEmpty() && count > 0) { + firstLoadMessages(); + return; + } + } + + historyLoaded(); + } else if (_delayedShowAtRequest == requestId) { + _delayedShowAtRequest = 0; + _history->getReadyFor(_delayedShowAtMsgId); + if (_history->isEmpty()) { + if (_preloadRequest) MTP::cancel(_preloadRequest); + if (_preloadDownRequest) MTP::cancel(_preloadDownRequest); + if (_firstLoadRequest) MTP::cancel(_firstLoadRequest); + _preloadRequest = _preloadDownRequest = 0; + _firstLoadRequest = -1; // hack - don't updateListSize yet + addMessagesToFront(*histList); + _firstLoadRequest = 0; + if (_history->loadedAtTop()) { + if (_history->unreadCount > count) { + _history->setUnreadCount(count); + } + if (_history->isEmpty() && count > 0) { + firstLoadMessages(); + return; + } + } + } + if (_replyReturn && _replyReturn->id == _delayedShowAtMsgId) { + calcNextReplyReturn(); + } + + _showAtMsgId = _delayedShowAtMsgId; + _histInited = false; + + historyLoaded(); } } -void HistoryWidget::windowShown() { - if (hist) { - if (!_histInited) checkUnreadLoaded(); - if (_histNeedUpdate) updateListSize(); +void HistoryWidget::historyLoaded() { + countHistoryShowFrom(); + if (_history->unreadBar) { + _history->unreadBar->destroy(); } + doneShow(); +} + +void HistoryWidget::windowShown() { resizeEvent(0); } bool HistoryWidget::isActive() const { - return !hist || hist->loadedAtBottom(); + if (!_history) return true; + if (_firstLoadRequest || _showAnim.animating()) return false; + if (_history->loadedAtBottom()) return true; + if (_history->showFrom && !_history->showFrom->detached() && _history->unreadBar) return true; + return false; +} + +void HistoryWidget::firstLoadMessages() { + if (!_history || _firstLoadRequest) return; + + int32 from = 0, offset = 0, loadCount = MessagesPerPage; + if (_showAtMsgId == ShowAtUnreadMsgId) { + if (_history->unreadCount > loadCount) { + _history->getReadyFor(_showAtMsgId); + offset = _history->unreadCount - loadCount / 2; + } else { + _history->getReadyFor(ShowAtTheEndMsgId); + } + } else if (_showAtMsgId == ShowAtTheEndMsgId) { + _history->getReadyFor(_showAtMsgId); + loadCount = MessagesFirstLoad; + } else if (_showAtMsgId > 0) { + _history->getReadyFor(_showAtMsgId); + offset = -loadCount / 2; + from = _showAtMsgId; + } + _firstLoadRequest = MTP::send(MTPmessages_GetHistory(_peer->input, MTP_int(offset), MTP_int(from), MTP_int(loadCount)), rpcDone(&HistoryWidget::messagesReceived), rpcFail(&HistoryWidget::messagesFailed)); } void HistoryWidget::loadMessages() { - if (!hist || _loadingMessages) return; - if (hist->loadedAtTop()) { - if (!hist->readyForWork()) { - if (hist->activeMsgId) { - hist->activeMsgId = 0; - } - if (!hist->readyForWork()) { - hist->setUnreadCount(hist->msgCount); - } - } - checkUnreadLoaded(true); - return; - } + if (!_history || _history->loadedAtTop() || _preloadRequest) return; - _loadingMessages = true; - if (histPreload.size()) { - bool loaded = hist->readyForWork(); - addMessagesToFront(histPreload); - histPreload.clear(); - checkUnreadLoaded(true); - if (!loaded && hist->readyForWork()) { - _loadingMessages = false; - return; - } - } - if (!histPreloading && (!hist->readyForWork() || _scroll.scrollTop() < PreloadHeightsCount * _scroll.height())) { - MsgId min = hist->minMsgId(); - int32 offset = 0, loadCount = min ? MessagesPerPage : MessagesFirstLoad; - if (!min && hist->activeMsgId) { - min = hist->activeMsgId; - offset = -loadCount / 2; - } - histPreloading = MTP::send(MTPmessages_GetHistory(histInputPeer, MTP_int(offset), MTP_int(min), MTP_int(loadCount)), rpcDone(&HistoryWidget::messagesReceived), rpcFail(&HistoryWidget::messagesFailed)); - ++histRequestsCount; - if (!hist->readyForWork()) update(); - } else { - checkUnreadLoaded(true); - } - _loadingMessages = false; + MsgId min = _history->minMsgId(); + int32 offset = 0, loadCount = min ? MessagesPerPage : MessagesFirstLoad; + _preloadRequest = MTP::send(MTPmessages_GetHistory(_peer->input, MTP_int(offset), MTP_int(min), MTP_int(loadCount)), rpcDone(&HistoryWidget::messagesReceived), rpcFail(&HistoryWidget::messagesFailed)); } void HistoryWidget::loadMessagesDown() { - if (!hist) return; - if (hist->loadedAtBottom()) { - return; - } + if (!_history || _history->loadedAtBottom() || _preloadDownRequest) return; - int32 dh = 0; - if (histPreloadDown.size()) { - bool loaded = hist->readyForWork(); - addMessagesToBack(histPreloadDown); - histPreloadDown.clear(); - checkUnreadLoaded(true); - if (!loaded && hist->readyForWork()) { - return; - } - } - if (!histPreloadingDown && hist->readyForWork() && (_scroll.scrollTop() + PreloadHeightsCount * _scroll.height() > _scroll.scrollTopMax())) { - MsgId max = hist->maxMsgId(); - if (max) { - int32 loadCount = MessagesPerPage, offset = -loadCount; - histPreloadingDown = MTP::send(MTPmessages_GetHistory(histInputPeer, MTP_int(offset), MTP_int(max + 1), MTP_int(loadCount)), rpcDone(&HistoryWidget::messagesReceived), rpcFail(&HistoryWidget::messagesFailed)); - ++histRequestsCount; - if (!hist->readyForWork()) update(); - } - } else { - checkUnreadLoaded(true); - } + MsgId max = _history->maxMsgId(); + if (!max) return; + + int32 loadCount = MessagesPerPage, offset = -loadCount - 1; + _preloadDownRequest = MTP::send(MTPmessages_GetHistory(_peer->input, MTP_int(offset), MTP_int(max + 1), MTP_int(loadCount)), rpcDone(&HistoryWidget::messagesReceived), rpcFail(&HistoryWidget::messagesFailed)); } -void HistoryWidget::loadMessagesAround() { - if (!hist || _loadingAroundRequest || _loadingAroundId < 0) return; +void HistoryWidget::delayedShowAt(MsgId showAtMsgId) { + if (!_history || (_delayedShowAtRequest && _delayedShowAtMsgId == showAtMsgId)) return; - int32 offset = 0, loadCount = MessagesPerPage; - if (_loadingAroundId) { + clearDelayedShowAt(); + _delayedShowAtMsgId = showAtMsgId; + + int32 from = _delayedShowAtMsgId, offset = 0, loadCount = MessagesPerPage; + if (_delayedShowAtMsgId == ShowAtUnreadMsgId) { + offset = qMax(_history->unreadCount - loadCount / 2, 0); + from = 0; + } else if (_delayedShowAtMsgId == ShowAtTheEndMsgId) { + loadCount = MessagesFirstLoad; + from = 0; + } else if (_delayedShowAtMsgId > 0) { offset = -loadCount / 2; } - _loadingAroundRequest = MTP::send(MTPmessages_GetHistory(histInputPeer, MTP_int(offset), MTP_int(_loadingAroundId), MTP_int(loadCount)), rpcDone(&HistoryWidget::messagesReceived), rpcFail(&HistoryWidget::messagesFailed)); + _delayedShowAtRequest = MTP::send(MTPmessages_GetHistory(_peer->input, MTP_int(offset), MTP_int(from), MTP_int(loadCount)), rpcDone(&HistoryWidget::messagesReceived), rpcFail(&HistoryWidget::messagesFailed)); } void HistoryWidget::onListScroll() { App::checkImageCacheSize(); - - if (histPreloading || !hist || ((_list->isHidden() || _scroll.isHidden() || _showAnim.animating() || !App::wnd()->windowHandle()->isVisible()) && hist->readyForWork())) { - checkUnreadLoaded(true); - return; - } + if (_firstLoadRequest || _scroll.isHidden()) return; updateToEndVisibility(); int st = _scroll.scrollTop(), stm = _scroll.scrollTopMax(), sh = _scroll.height(); - if (hist->readyForWork() && (st + PreloadHeightsCount * sh > stm)) { + if (st + PreloadHeightsCount * sh > stm) { loadMessagesDown(); } - if (!hist->readyForWork() || st < PreloadHeightsCount * sh) { + if (st < PreloadHeightsCount * sh) { loadMessages(); - } else { - checkUnreadLoaded(true); } while (_replyReturn) { - bool below = (_replyReturn->detached() && !hist->isEmpty() && _replyReturn->id < hist->back()->back()->id); + bool below = (_replyReturn->detached() && !_history->isEmpty() && _replyReturn->id < _history->back()->back()->id); if (!below && !_replyReturn->detached()) below = (st >= stm) || (_replyReturn->y + _replyReturn->block()->y < st + sh / 2); if (below) { calcNextReplyReturn(); @@ -3341,23 +3238,23 @@ QString HistoryWidget::prepareMessage(QString result) { void HistoryWidget::onHistoryToEnd() { if (_replyReturn) { - showPeer(histPeer->id, _replyReturn->id); - } else if (hist) { - showPeer(histPeer->id, 0); + showPeerHistory(_peer->id, _replyReturn->id); + } else if (_peer) { + showPeerHistory(_peer->id, ShowAtUnreadMsgId); } } void HistoryWidget::onSend(bool ctrlShiftEnter, MsgId replyTo) { - if (!hist) return; + if (!_history) return; bool lastKeyboardUsed = lastForceReplyReplied(replyTo); QString text = prepareMessage(_field.getLastText()); if (!text.isEmpty()) { - App::main()->readServerHistory(hist, false); - hist->loadAround(0); + App::main()->readServerHistory(_history, false); + fastShowAtEnd(_history); WebPageId webPageId = _previewCancelled ? 0xFFFFFFFFFFFFFFFFULL : ((_previewData && _previewData->pendingTill >= 0) ? _previewData->id : 0); - App::main()->sendPreparedText(hist, text, replyTo, webPageId); + App::main()->sendPreparedText(_history, text, replyTo, webPageId); setFieldText(QString()); _saveDraftText = true; @@ -3369,10 +3266,9 @@ void HistoryWidget::onSend(bool ctrlShiftEnter, MsgId replyTo) { if (!_emojiPan.isHidden()) _emojiPan.hideStart(); } else if (App::main()->hasForwardingItems()) { - App::main()->readServerHistory(hist, false); - hist->loadAround(0); - - App::main()->finishForwarding(hist); + App::main()->readServerHistory(_history, false); + fastShowAtEnd(_history); + App::main()->finishForwarding(_history); } if (replyTo < 0) cancelReply(lastKeyboardUsed); if (_previewData && _previewData->pendingTill) previewCancel(); @@ -3382,20 +3278,23 @@ void HistoryWidget::onSend(bool ctrlShiftEnter, MsgId replyTo) { } void HistoryWidget::onBotStart() { - if (histPeer->chat || !histPeer->asUser()->botInfo) { + if (!_peer || _peer->chat || !_peer->asUser()->botInfo) { updateControlsVisibility(); return; } - QString token = histPeer->asUser()->botInfo->startToken; + + QString token = _peer->asUser()->botInfo->startToken; if (token.isEmpty()) { sendBotCommand(qsl("/start"), 0); } else { uint64 randomId = MTP::nonce(); - MTP::send(MTPmessages_StartBot(histPeer->asUser()->inputUser, MTP_int(0), MTP_long(randomId), MTP_string(token)), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), App::main()->rpcFail(&MainWidget::addParticipantFail, histPeer->asUser())); + MTP::send(MTPmessages_StartBot(_peer->asUser()->inputUser, MTP_int(0), MTP_long(randomId), MTP_string(token)), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), App::main()->rpcFail(&MainWidget::addParticipantFail, _peer->asUser())); - histPeer->asUser()->botInfo->startToken = QString(); + _peer->asUser()->botInfo->startToken = QString(); if (_keyboard.hasMarkup()) { - if (_keyboard.singleUse() && _keyboard.forMsgId() == hist->lastKeyboardId && hist->lastKeyboardUsed) _kbWasHidden = true; + if (_keyboard.singleUse() && _keyboard.forMsgId() == _history->lastKeyboardId && _history->lastKeyboardUsed) { + _kbWasHidden = true; + } if (!_kbWasHidden) _kbShown = _keyboard.hasMarkup(); } } @@ -3406,20 +3305,20 @@ void HistoryWidget::onBotStart() { void HistoryWidget::onShareContact(const PeerId &peer, UserData *contact) { if (!contact || contact->phone.isEmpty()) return; - App::main()->showPeer(peer, 0, false, true); - if (!hist) return; + App::main()->showPeerHistory(peer, ShowAtTheEndMsgId); + if (!_history) return; shareContact(peer, contact->phone, contact->firstName, contact->lastName, replyToId(), int32(contact->id & 0xFFFFFFFF)); } void HistoryWidget::shareContact(const PeerId &peer, const QString &phone, const QString &fname, const QString &lname, MsgId replyTo, int32 userId) { History *h = App::history(peer); - App::main()->readServerHistory(h, false); uint64 randomId = MTP::nonce(); MsgId newId = clientMsgId(); - h->loadAround(0); + App::main()->readServerHistory(h, false); + fastShowAtEnd(h); PeerData *p = App::peer(peer); int32 flags = newMessageFlags(p); // unread, out @@ -3432,7 +3331,7 @@ void HistoryWidget::shareContact(const PeerId &peer, const QString &phone, const sendFlags |= MTPmessages_SendMedia::flag_reply_to_msg_id; } h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(peer), MTPint(), MTPint(), MTP_int(replyToId()), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaContact(MTP_string(phone), MTP_string(fname), MTP_string(lname), MTP_int(userId)), MTPnullMarkup)); - h->sendRequestId = MTP::send(MTPmessages_SendMedia(MTP_int(sendFlags), p->input, MTP_int(replyTo), MTP_inputMediaContact(MTP_string(phone), MTP_string(fname), MTP_string(lname)), MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), RPCFailHandlerPtr(), 0, 0, hist->sendRequestId); + h->sendRequestId = MTP::send(MTPmessages_SendMedia(MTP_int(sendFlags), p->input, MTP_int(replyTo), MTP_inputMediaContact(MTP_string(phone), MTP_string(fname), MTP_string(lname)), MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), RPCFailHandlerPtr(), 0, 0, h->sendRequestId); App::historyRegRandom(randomId, newId); @@ -3441,30 +3340,18 @@ void HistoryWidget::shareContact(const PeerId &peer, const QString &phone, const } void HistoryWidget::onSendPaths(const PeerId &peer) { - App::main()->showPeer(peer, 0, false, true); - if (!hist) return; + App::main()->showPeerHistory(peer, ShowAtTheEndMsgId); + if (!_history) return; uploadMedias(cSendPaths(), ToPrepareDocument); } PeerData *HistoryWidget::peer() const { - return histPeer; + return _peer; } -PeerData *HistoryWidget::activePeer() const { - return histPeer ? histPeer : (_activeHist ? _activeHist->peer : 0); -} - -MsgId HistoryWidget::activeMsgId() const { - return (_loadingAroundId >= 0) ? _loadingAroundId : (hist ? hist->activeMsgId : (_activeHist ? _activeHist->activeMsgId : 0)); -} - -int32 HistoryWidget::lastWidth() const { - return width(); -} - -int32 HistoryWidget::lastScrollTop() const { - return _scroll.scrollTop(); +MsgId HistoryWidget::msgId() const { + return _showAtMsgId; } void HistoryWidget::animShow(const QPixmap &bgAnimCache, const QPixmap &bgAnimTopBarCache, bool back) { @@ -3523,19 +3410,11 @@ bool HistoryWidget::showStep(float64 ms) { } void HistoryWidget::doneShow() { - if (hist && hist->readyForWork()) { - _scroll.show(); - if (hist->lastScrollTop == History::ScrollMax) { - _scroll.scrollToY(hist->lastScrollTop); - } - - onListScroll(); - } - if (hist) { - if (!_histInited) checkUnreadLoaded(); - if (_histNeedUpdate) updateListSize(); - } + updateBotKeyboard(); updateControlsVisibility(); + updateListSize(0, true); + onListScroll(); + if (App::wnd()) App::wnd()->checkHistoryActivation(); App::wnd()->setInnerFocus(); } @@ -3579,7 +3458,7 @@ bool HistoryWidget::recordingStep(float64 ms) { } void HistoryWidget::onPhotoSelect() { - if (!hist) return; + if (!_history) return; _attachDocument.clearState(); _attachDocument.hide(); @@ -3607,7 +3486,7 @@ void HistoryWidget::onPhotoSelect() { } void HistoryWidget::onDocumentSelect() { - if (!hist) return; + if (!_history) return; _attachPhoto.clearState(); _attachPhoto.hide(); @@ -3636,7 +3515,7 @@ void HistoryWidget::onDocumentSelect() { void HistoryWidget::dragEnterEvent(QDragEnterEvent *e) { - if (!hist) return; + if (!_history) return; _attachDrag = getDragState(e->mimeData()); updateDragAreas(); @@ -3727,27 +3606,27 @@ void HistoryWidget::stopRecording(bool send) { } void HistoryWidget::sendBotCommand(const QString &cmd, MsgId replyTo) { // replyTo != 0 from ReplyKeyboardMarkup, == 0 from cmd links - if (!hist) return; + if (!_history) return; - App::main()->readServerHistory(hist, false); - hist->loadAround(0); + App::main()->readServerHistory(_history, false); + fastShowAtEnd(_history); - bool lastKeyboardUsed = (_keyboard.forMsgId() == hist->lastKeyboardId) && (_keyboard.forMsgId() == replyTo); + bool lastKeyboardUsed = (_keyboard.forMsgId() == _history->lastKeyboardId) && (_keyboard.forMsgId() == replyTo); QString toSend = cmd; - UserData *bot = histPeer->chat ? (App::hoveredLinkItem() ? (App::hoveredLinkItem()->toHistoryForwarded() ? App::hoveredLinkItem()->toHistoryForwarded()->fromForwarded() : App::hoveredLinkItem()->from()) : 0) : histPeer->asUser(); + UserData *bot = _peer->chat ? (App::hoveredLinkItem() ? (App::hoveredLinkItem()->toHistoryForwarded() ? App::hoveredLinkItem()->toHistoryForwarded()->fromForwarded() : App::hoveredLinkItem()->from()) : 0) : _peer->asUser(); QString username = (bot && bot->botInfo) ? bot->username : QString(); - if (!replyTo && toSend.indexOf('@') < 2 && histPeer->chat && !username.isEmpty() && (histPeer->asChat()->botStatus == 0 || histPeer->asChat()->botStatus == 2)) { + if (!replyTo && toSend.indexOf('@') < 2 && _peer->chat && !username.isEmpty() && (_peer->asChat()->botStatus == 0 || _peer->asChat()->botStatus == 2)) { toSend += '@' + username; } - int32 botStatus = histPeer->chat ? histPeer->asChat()->botStatus : -1; - App::main()->sendPreparedText(hist, toSend, replyTo ? ((histPeer->chat/* && (botStatus == 0 || botStatus == 2)*/) ? replyTo : -1) : 0); + int32 botStatus = _peer->chat ? _peer->asChat()->botStatus : -1; + App::main()->sendPreparedText(_history, toSend, replyTo ? ((_peer->chat/* && (botStatus == 0 || botStatus == 2)*/) ? replyTo : -1) : 0); if (replyTo) { cancelReply(); if (_keyboard.singleUse() && _keyboard.hasMarkup() && lastKeyboardUsed) { if (_kbShown) onKbToggle(false); - hist->lastKeyboardUsed = true; + _history->lastKeyboardUsed = true; } } @@ -3755,12 +3634,12 @@ void HistoryWidget::sendBotCommand(const QString &cmd, MsgId replyTo) { // reply } void HistoryWidget::insertBotCommand(const QString &cmd) { - if (!hist) return; + if (!_history) return; QString toInsert = cmd; - UserData *bot = histPeer->chat ? (App::hoveredLinkItem() ? (App::hoveredLinkItem()->toHistoryForwarded() ? App::hoveredLinkItem()->toHistoryForwarded()->fromForwarded() : App::hoveredLinkItem()->from()) : 0) : histPeer->asUser(); + UserData *bot = _peer->chat ? (App::hoveredLinkItem() ? (App::hoveredLinkItem()->toHistoryForwarded() ? App::hoveredLinkItem()->toHistoryForwarded()->fromForwarded() : App::hoveredLinkItem()->from()) : 0) : _peer->asUser(); QString username = (bot && bot->botInfo) ? bot->username : QString(); - if (toInsert.indexOf('@') < 2 && histPeer->chat && !username.isEmpty() && (histPeer->asChat()->botStatus == 0 || histPeer->asChat()->botStatus == 2)) { + if (toInsert.indexOf('@') < 2 && _peer->chat && !username.isEmpty() && (_peer->asChat()->botStatus == 0 || _peer->asChat()->botStatus == 2)) { toInsert += '@' + username; } toInsert += ' '; @@ -3858,13 +3737,13 @@ void HistoryWidget::updateDragAreas() { } bool HistoryWidget::isBotStart() const { - if (!hist || !histPeer || histPeer->chat || !histPeer->asUser()->botInfo) return false; - return !histPeer->asUser()->botInfo->startToken.isEmpty() || (hist->isEmpty() && !hist->lastMsg); + if (!_peer || _peer->chat || !_peer->asUser()->botInfo) return false; + return !_peer->asUser()->botInfo->startToken.isEmpty() || (_history->isEmpty() && !_history->lastMsg); } bool HistoryWidget::updateCmdStartShown() { bool cmdStartShown = false; - if (hist && histPeer && ((histPeer->chat && histPeer->asChat()->botStatus > 0) || (!histPeer->chat && histPeer->asUser()->botInfo))) { + if (_history && _peer && ((_peer->chat && _peer->asChat()->botStatus > 0) || (!_peer->chat && _peer->asUser()->botInfo))) { if (!isBotStart() && !_keyboard.hasMarkup() && !_keyboard.forceReply()) { if (_field.getLastText().isEmpty()) { cmdStartShown = true; @@ -3885,7 +3764,7 @@ void HistoryWidget::dropEvent(QDropEvent *e) { } void HistoryWidget::onPhotoDrop(const QMimeData *data) { - if (!hist) return; + if (!_history) return; if (data->hasImage()) { QImage image = qvariant_cast(data->imageData()); @@ -3901,7 +3780,7 @@ void HistoryWidget::onPhotoDrop(const QMimeData *data) { } void HistoryWidget::onDocumentDrop(const QMimeData *data) { - if (!hist) return; + if (!_history) return; QStringList files = getMediasFromMime(data); if (files.isEmpty()) return; @@ -3940,8 +3819,8 @@ void HistoryWidget::onKbToggle(bool manual) { _replyForwardPreviewCancel.hide(); } } else { - if (hist) { - hist->clearLastKeyboard(); + if (_history) { + _history->clearLastKeyboard(); } updateBotKeyboard(); } @@ -3954,7 +3833,7 @@ void HistoryWidget::onKbToggle(bool manual) { _field.setMaxHeight(st::maxFieldHeight); - _kbReplyTo = (hist->peer->chat || _keyboard.forceReply()) ? App::histItemById(_keyboard.forMsgId()) : 0; + _kbReplyTo = (_history->peer->chat || _keyboard.forceReply()) ? App::histItemById(_keyboard.forMsgId()) : 0; if (_kbReplyTo && !_replyToId) { updateReplyToName(); _replyToText.setText(st::msgFont, _kbReplyTo->inDialogsText(), _textDlgOptions); @@ -3970,7 +3849,7 @@ void HistoryWidget::onKbToggle(bool manual) { int32 maxh = qMin(_keyboard.height(), int(st::maxFieldHeight) - (int(st::maxFieldHeight) / 2)); _field.setMaxHeight(st::maxFieldHeight - maxh); - _kbReplyTo = (hist->peer->chat || _keyboard.forceReply()) ? App::histItemById(_keyboard.forMsgId()) : 0; + _kbReplyTo = (_history->peer->chat || _keyboard.forceReply()) ? App::histItemById(_keyboard.forMsgId()) : 0; if (_kbReplyTo && !_replyToId) { updateReplyToName(); _replyToText.setText(st::msgFont, _kbReplyTo->inDialogsText(), _textDlgOptions); @@ -4029,22 +3908,22 @@ void HistoryWidget::paintTopBar(QPainter &p, float64 over, int32 decreaseWidth) return; } - if (!hist) return; + if (!_history) return; int32 increaseLeft = cWideMode() ? 0 : (st::topBarForwardPadding.right() - st::topBarForwardPadding.left()); decreaseWidth += increaseLeft; QRect rectForName(st::topBarForwardPadding.left() + increaseLeft, st::topBarForwardPadding.top(), width() - decreaseWidth - st::topBarForwardPadding.left() - st::topBarForwardPadding.right(), st::msgNameFont->height); p.setFont(st::dlgHistFont->f); - if (hist->typing.isEmpty()) { + if (_history->typing.isEmpty()) { p.setPen(st::titleStatusColor->p); - p.drawText(rectForName.x(), st::topBarHeight - st::topBarForwardPadding.bottom() - st::dlgHistFont->height + st::dlgHistFont->ascent, titlePeerText); + p.drawText(rectForName.x(), st::topBarHeight - st::topBarForwardPadding.bottom() - st::dlgHistFont->height + st::dlgHistFont->ascent, _titlePeerText); } else { p.setPen(st::titleTypingColor->p); - hist->typingText.drawElided(p, rectForName.x(), st::topBarHeight - st::topBarForwardPadding.bottom() - st::dlgHistFont->height, rectForName.width()); + _history->typingText.drawElided(p, rectForName.x(), st::topBarHeight - st::topBarForwardPadding.bottom() - st::dlgHistFont->height, rectForName.width()); } p.setPen(st::dlgNameColor->p); - hist->nameText.drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); + _history->nameText.drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); if (cWideMode()) { p.setOpacity(st::topBarForwardAlpha + (1 - st::topBarForwardAlpha) * over); @@ -4064,23 +3943,23 @@ void HistoryWidget::topBarShadowParams(int32 &x, float64 &o) { void HistoryWidget::topBarClick() { if (cWideMode()) { - if (hist) App::main()->showPeerProfile(histPeer); + if (_history) App::main()->showPeerProfile(_peer); } else { - App::main()->onShowDialogs(); + App::main()->showDialogs(); } } void HistoryWidget::updateOnlineDisplay(int32 x, int32 w) { - if (!hist) return; + if (!_history) return; QString text; int32 t = unixtime(); - if (histPeer->chat) { - ChatData *chat = histPeer->asChat(); + if (_peer->chat) { + ChatData *chat = _peer->asChat(); if (chat->forbidden) { text = lang(lng_chat_status_unaccessible); } else if (chat->participants.isEmpty()) { - text = titlePeerText.isEmpty() ? lng_chat_status_members(lt_count, chat->count < 0 ? 0 : chat->count) : titlePeerText; + text = _titlePeerText.isEmpty() ? lng_chat_status_members(lt_count, chat->count < 0 ? 0 : chat->count) : _titlePeerText; } else { int32 onlineCount = 0; bool onlyMe = true; @@ -4097,11 +3976,11 @@ void HistoryWidget::updateOnlineDisplay(int32 x, int32 w) { } } } else { - text = App::onlineText(histPeer->asUser(), t); + text = App::onlineText(_peer->asUser(), t); } - if (titlePeerText != text) { - titlePeerText = text; - titlePeerTextWidth = st::dlgHistFont->m.width(titlePeerText); + if (_titlePeerText != text) { + _titlePeerText = text; + _titlePeerTextWidth = st::dlgHistFont->m.width(_titlePeerText); if (App::main()) { App::main()->topBar()->update(); } @@ -4110,11 +3989,11 @@ void HistoryWidget::updateOnlineDisplay(int32 x, int32 w) { } void HistoryWidget::updateOnlineDisplayTimer() { - if (!hist) return; + if (!_history) return; int32 t = unixtime(), minIn = 86400; - if (histPeer->chat) { - ChatData *chat = histPeer->asChat(); + if (_peer->chat) { + ChatData *chat = _peer->asChat(); if (chat->participants.isEmpty()) return; for (ChatData::Participants::const_iterator i = chat->participants.cbegin(), e = chat->participants.cend(); i != e; ++i) { @@ -4124,7 +4003,7 @@ void HistoryWidget::updateOnlineDisplayTimer() { } } } else { - minIn = App::onlineWillChangeIn(histPeer->asUser(), t); + minIn = App::onlineWillChangeIn(_peer->asUser(), t); } App::main()->updateOnlineDisplayIn(minIn * 1000); } @@ -4162,15 +4041,15 @@ void HistoryWidget::onFieldFocused() { } void HistoryWidget::checkMentionDropdown() { - if (!hist || _showAnim.animating()) return; + if (!_history || _showAnim.animating()) return; QString start; _field.getMentionHashtagBotCommandStart(start); if (!start.isEmpty()) { if (start.at(0) == '#' && cRecentWriteHashtags().isEmpty() && cRecentSearchHashtags().isEmpty()) Local::readRecentHashtags(); - if (start.at(0) == '@' && !hist->peer->chat) return; - if (start.at(0) == '/' && !hist->peer->chat && !hist->peer->asUser()->botInfo) return; - _attachMention.showFiltered(hist->peer, start); + if (start.at(0) == '@' && !_history->peer->chat) return; + if (start.at(0) == '/' && !_history->peer->chat && !_history->peer->asUser()->botInfo) return; + _attachMention.showFiltered(_history->peer, start); } else if (!_attachMention.isHidden()) { _attachMention.hideStart(); } @@ -4182,70 +4061,70 @@ void HistoryWidget::onFieldCursorChanged() { } void HistoryWidget::uploadImage(const QImage &img, bool withText, const QString &source) { - if (!hist || confirmImageId) return; + if (!_history || _confirmImageId) return; App::wnd()->activateWindow(); - confirmImage = img; - confirmWithText = withText; - confirmSource = source; - confirmImageId = imageLoader.append(img, histPeer->id, replyToId(), ToPreparePhoto); + _confirmImage = img; + _confirmWithText = withText; + _confirmSource = source; + _confirmImageId = _imageLoader.append(img, _peer->id, replyToId(), ToPreparePhoto); } void HistoryWidget::uploadFile(const QString &file, bool withText) { - if (!hist || confirmImageId) return; + if (!_history || _confirmImageId) return; App::wnd()->activateWindow(); - confirmWithText = withText; - confirmImageId = imageLoader.append(file, histPeer->id, replyToId(), ToPrepareDocument); + _confirmWithText = withText; + _confirmImageId = _imageLoader.append(file, _peer->id, replyToId(), ToPrepareDocument); } void HistoryWidget::shareContactConfirmation(const QString &phone, const QString &fname, const QString &lname, MsgId replyTo, bool withText) { - if (!hist || confirmImageId) return; + if (!_history || _confirmImageId) return; App::wnd()->activateWindow(); - confirmWithText = withText; - confirmImageId = 0xFFFFFFFFFFFFFFFFL; + _confirmWithText = withText; + _confirmImageId = 0xFFFFFFFFFFFFFFFFL; App::wnd()->showLayer(new PhotoSendBox(phone, fname, lname, replyTo)); } void HistoryWidget::uploadConfirmImageUncompressed(bool ctrlShiftEnter, MsgId replyTo) { - if (!hist || !confirmImageId || confirmImage.isNull()) return; + if (!_history || !_confirmImageId || _confirmImage.isNull()) return; App::wnd()->activateWindow(); - PeerId peerId = histPeer->id; - if (confirmWithText) { + PeerId peerId = _peer->id; + if (_confirmWithText) { onSend(ctrlShiftEnter, replyTo); } bool lastKeyboardUsed = lastForceReplyReplied(replyTo); - imageLoader.append(confirmImage, peerId, replyTo, ToPrepareDocument, ctrlShiftEnter); - confirmImageId = 0; - confirmWithText = false; - confirmImage = QImage(); + _imageLoader.append(_confirmImage, peerId, replyTo, ToPrepareDocument, ctrlShiftEnter); + _confirmImageId = 0; + _confirmWithText = false; + _confirmImage = QImage(); cancelReply(lastKeyboardUsed); } void HistoryWidget::uploadMedias(const QStringList &files, ToPrepareMediaType type) { - if (!hist) return; + if (!_history) return; App::wnd()->activateWindow(); - imageLoader.append(files, histPeer->id, replyToId(), type); + _imageLoader.append(files, _peer->id, replyToId(), type); cancelReply(lastForceReplyReplied()); } void HistoryWidget::uploadMedia(const QByteArray &fileContent, ToPrepareMediaType type, PeerId peer) { - if (!peer && !hist) return; + if (!peer && !_history) return; App::wnd()->activateWindow(); - imageLoader.append(fileContent, peer ? peer : histPeer->id, replyToId(), type); + _imageLoader.append(fileContent, peer ? peer : _peer->id, replyToId(), type); cancelReply(lastForceReplyReplied()); } void HistoryWidget::onPhotoReady() { - QMutexLocker lock(imageLoader.readyMutex()); - ReadyLocalMedias &list(imageLoader.readyList()); + QMutexLocker lock(_imageLoader.readyMutex()); + ReadyLocalMedias &list(_imageLoader.readyList()); for (ReadyLocalMedias::const_iterator i = list.cbegin(), e = list.cend(); i != e; ++i) { - if (i->id == confirmImageId) { + if (i->id == _confirmImageId) { PhotoSendBox *box = new PhotoSendBox(*i); connect(box, SIGNAL(confirmed()), this, SLOT(onSendConfirmed())); connect(box, SIGNAL(destroyed(QObject*)), this, SLOT(onSendCancelled())); @@ -4258,13 +4137,13 @@ void HistoryWidget::onPhotoReady() { } void HistoryWidget::onSendConfirmed() { - if (!confirmSource.isEmpty()) confirmSource = QString(); + if (!_confirmSource.isEmpty()) _confirmSource = QString(); } void HistoryWidget::onSendCancelled() { - if (!confirmSource.isEmpty()) { - _field.textCursor().insertText(confirmSource); - confirmSource = QString(); + if (!_confirmSource.isEmpty()) { + _field.textCursor().insertText(_confirmSource); + _confirmSource = QString(); } } @@ -4272,28 +4151,28 @@ void HistoryWidget::onPhotoFailed(quint64 id) { } void HistoryWidget::confirmShareContact(bool ctrlShiftEnter, const QString &phone, const QString &fname, const QString &lname, MsgId replyTo) { - if (!histPeer) return; + if (!_peer) return; - PeerId peerId = histPeer->id; - if (0xFFFFFFFFFFFFFFFFL == confirmImageId) { - if (confirmWithText) { + PeerId peerId = _peer->id; + if (0xFFFFFFFFFFFFFFFFL == _confirmImageId) { + if (_confirmWithText) { onSend(ctrlShiftEnter, replyTo); } - confirmImageId = 0; - confirmWithText = false; - confirmImage = QImage(); + _confirmImageId = 0; + _confirmWithText = false; + _confirmImage = QImage(); } shareContact(peerId, phone, fname, lname, replyTo); } void HistoryWidget::confirmSendImage(const ReadyLocalMedia &img) { - if (img.id == confirmImageId) { - if (confirmWithText) { + if (img.id == _confirmImageId) { + if (_confirmWithText) { onSend(img.ctrlShiftEnter, img.replyTo); } - confirmImageId = 0; - confirmWithText = false; - confirmImage = QImage(); + _confirmImageId = 0; + _confirmWithText = false; + _confirmImage = QImage(); } MsgId newId = clientMsgId(); @@ -4311,7 +4190,9 @@ void HistoryWidget::confirmSendImage(const ReadyLocalMedia &img) { App::uploader()->uploadMedia(newId, img); History *h = App::history(img.peer); - h->loadAround(0); + + fastShowAtEnd(h); + int32 flags = newMessageFlags(h->peer); // unread, out if (img.replyTo) flags |= MTPDmessage::flag_reply_to_msg_id; if (img.type == ToPreparePhoto) { @@ -4319,29 +4200,27 @@ void HistoryWidget::confirmSendImage(const ReadyLocalMedia &img) { } else if (img.type == ToPrepareDocument) { h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(img.peer), MTPint(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaDocument(img.document), MTPnullMarkup)); } else if (img.type == ToPrepareAudio) { - h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(img.peer), MTPint(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaAudio(img.audio), MTPnullMarkup)); + h->addToBack(MTP_message(MTP_int(flags | MTPDmessage_flag_media_unread), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(img.peer), MTPint(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaAudio(img.audio), MTPnullMarkup)); } - if (hist && histPeer && img.peer == histPeer->id) { - App::main()->historyToDown(hist); + if (_peer && img.peer == _peer->id) { + App::main()->historyToDown(_history); } App::main()->dialogsToUp(); peerMessagesUpdated(img.peer); } void HistoryWidget::cancelSendImage() { - if (confirmImageId && confirmWithText) setFieldText(QString()); - confirmImageId = 0; - confirmWithText = false; - confirmImage = QImage(); + if (_confirmImageId && _confirmWithText) setFieldText(QString()); + _confirmImageId = 0; + _confirmWithText = false; + _confirmImage = QImage(); } void HistoryWidget::onPhotoUploaded(MsgId newId, const MTPInputFile &file) { if (!MTP::authedId()) return; HistoryItem *item = App::histItemById(newId); if (item) { - //App::main()->readServerHistory(item->history(), false); - uint64 randomId = MTP::nonce(); App::historyRegRandom(randomId, newId); History *hist = item->history(); @@ -4382,8 +4261,6 @@ void HistoryWidget::onDocumentUploaded(MsgId newId, const MTPInputFile &file) { document = media->document(); } if (document) { - //App::main()->readServerHistory(item->history(), false); - uint64 randomId = MTP::nonce(); App::historyRegRandom(randomId, newId); History *hist = item->history(); @@ -4408,8 +4285,6 @@ void HistoryWidget::onThumbDocumentUploaded(MsgId newId, const MTPInputFile &fil document = media->document(); } if (document) { - //App::main()->readServerHistory(item->history(), false); - uint64 randomId = MTP::nonce(); App::historyRegRandom(randomId, newId); History *hist = item->history(); @@ -4432,8 +4307,6 @@ void HistoryWidget::onAudioUploaded(MsgId newId, const MTPInputFile &file) { audio = media->audio(); } if (audio) { - //App::main()->readServerHistory(item->history(), false); - uint64 randomId = MTP::nonce(); App::historyRegRandom(randomId, newId); History *hist = item->history(); @@ -4480,7 +4353,7 @@ void HistoryWidget::onAudioFailed(MsgId newId) { } void HistoryWidget::peerMessagesUpdated(PeerId peer) { - if (histPeer && _list && peer == histPeer->id) { + if (_peer && _list && peer == _peer->id) { updateListSize(); updateBotKeyboard(); if (!_scroll.isHidden() && _botStart.isHidden() == isBotStart()) { @@ -4491,11 +4364,11 @@ void HistoryWidget::peerMessagesUpdated(PeerId peer) { } void HistoryWidget::peerMessagesUpdated() { - if (_list) updateListSize(); + if (_list) peerMessagesUpdated(_peer->id); } void HistoryWidget::msgUpdated(PeerId peer, const HistoryItem *msg) { - if (histPeer && _list && peer == histPeer->id) { + if (_peer && _list && peer == _peer->id) { _list->updateMsg(msg); } } @@ -4517,7 +4390,7 @@ void HistoryWidget::resizeEvent(QResizeEvent *e) { _replyForwardPreviewCancel.move(width() - _replyForwardPreviewCancel.width(), _field.y() - st::sendPadding - _replyForwardPreviewCancel.height()); updateListSize(App::main() ? App::main()->contentScrollAddToY() : 0); - bool kbShowShown = hist && !_kbShown && _keyboard.hasMarkup(); + bool kbShowShown = _history && !_kbShown && _keyboard.hasMarkup(); _field.resize(width() - _send.width() - _attachDocument.width() - _attachEmoji.width() - (kbShowShown ? _kbShow.width() : 0) - (_cmdStartShown ? _cmdStart.width() : 0), _field.height()); _toHistoryEnd.move((width() - _toHistoryEnd.width()) / 2, _scroll.y() + _scroll.height() - _toHistoryEnd.height() - st::historyToEndSkip); @@ -4586,14 +4459,8 @@ MsgId HistoryWidget::replyToId() const { } void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown, HistoryItem *resizedItem, bool scrollToIt) { - if (!hist || (!_histInited && !initial)) return; - - if (!isVisible() || _showAnim.animating()) { - if (initial) { - _histInited = false; - } else { - _histNeedUpdate = true; - } + if (!_history || (initial && _histInited) || (!initial && !_histInited)) return; + if (_firstLoadRequest) { if (resizedItem) _list->recountHeight(true); return; // scrollTopMax etc are not working after recountHeight() } @@ -4602,7 +4469,7 @@ void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown, if (isBotStart()) { newScrollHeight -= _botStart.height(); } else { - if (hist->readyForWork() && (!histPeer->chat || !histPeer->asChat()->forbidden)) { + if (!_peer->chat || !_peer->asChat()->forbidden) { newScrollHeight -= (_field.height() + 2 * st::sendPadding); } if (replyToId() || App::main()->hasForwardingItems() || (_previewData && _previewData->pendingTill >= 0)) { @@ -4620,7 +4487,7 @@ void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown, } if (!initial) { - hist->lastScrollTop = _scroll.scrollTop(); + _history->lastScrollTop = _scroll.scrollTop(); } int32 newSt = _list->recountHeight(!!resizedItem); bool washidden = _scroll.isHidden(); @@ -4628,8 +4495,8 @@ void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown, _scroll.show(); } _list->updateSize(); + int32 firstItemY = _list->height() - _history->height - st::historyPadding; if (resizedItem && !resizedItem->detached() && scrollToIt) { - int32 firstItemY = _list->height() - hist->height - st::historyPadding; if (newSt + _scroll.height() < firstItemY + resizedItem->block()->y + resizedItem->y + resizedItem->height()) { newSt = firstItemY + resizedItem->block()->y + resizedItem->y + resizedItem->height() - _scroll.height(); } @@ -4641,7 +4508,6 @@ void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown, if (washidden) { _scroll.hide(); } - if (!hist->readyForWork()) return; if ((!initial && !wasAtBottom) || loadedDown) { _scroll.scrollToY(newSt + addToY); @@ -4651,69 +4517,94 @@ void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown, if (initial) { _histInited = true; } - _histNeedUpdate = false; int32 toY = History::ScrollMax; - if (initial && hist->activeMsgId && !hist->lastWidth) { - HistoryItem *item = App::histItemById(hist->activeMsgId); + if (initial && _history->lastWidth) { + toY = newSt; + _history->lastWidth = 0; + } else if (initial && _showAtMsgId > 0) { + HistoryItem *item = App::histItemById(_showAtMsgId); if (!item || item->detached()) { - hist->activeMsgId = 0; + _showAtMsgId = 0; + _histInited = false; return updateListSize(addToY, initial); } else { - toY = (_scroll.height() > item->height()) ? qMax(item->y + item->block()->y - (_scroll.height() - item->height()) / 2, 0) : (item->y + item->block()->y); + toY = (_scroll.height() > item->height()) ? qMax(firstItemY + item->y + item->block()->y - (_scroll.height() - item->height()) / 2, 0) : (firstItemY + item->y + item->block()->y); _animActiveStart = getms(); _animActiveTimer.start(AnimationTimerDelta); + _activeAnimMsgId = _showAtMsgId; } - } else if (initial && hist->unreadBar) { - toY = hist->unreadBar->y + hist->unreadBar->block()->y; - } else if (hist->showFrom) { - toY = hist->showFrom->y + hist->showFrom->block()->y; + } else if (initial && _history->unreadBar) { + toY = firstItemY + _history->unreadBar->y + _history->unreadBar->block()->y; + } else if (_history->showFrom) { + toY = firstItemY + _history->showFrom->y + _history->showFrom->block()->y; if (toY < _scroll.scrollTopMax() + st::unreadBarHeight) { - hist->addUnreadBar(); - if (hist->unreadBar) { - hist->activeMsgId = 0; + _history->addUnreadBar(); + if (_history->unreadBar) { + _showAtMsgId = ShowAtUnreadMsgId; + _histInited = false; return updateListSize(0, true); } } - } else if (initial && hist->lastWidth) { - toY = newSt; - hist->lastWidth = 0; } else { } _scroll.scrollToY(toY); } void HistoryWidget::addMessagesToFront(const QVector &messages) { - int32 oldH = hist->height; + int32 oldH = _history->height; _list->messagesReceived(messages); - updateListSize(hist->height - oldH); - updateBotKeyboard(); - checkUnreadLoaded(true); + if (!_firstLoadRequest) { + updateListSize(_history->height - oldH); + updateBotKeyboard(); + } } void HistoryWidget::addMessagesToBack(const QVector &messages) { - int32 sliceFrom = 0; _list->messagesReceivedDown(messages); - updateListSize(0, false, true); - checkUnreadLoaded(true); + if (!_firstLoadRequest) { + updateListSize(0, false, true); + } +} + +void HistoryWidget::countHistoryShowFrom() { + if (_showAtMsgId != ShowAtUnreadMsgId || !_history->unreadCount) { + _history->showFrom = 0; + return; + } + if (_history->showFrom) return; + + int32 skip = qMin(MessagesPerPage / 2, _history->unreadCount); + for (History::const_iterator i = _history->cend(); i != _history->cbegin();) { + --i; + for (HistoryBlock::const_iterator j = (*i)->cend(); j != (*i)->cbegin();) { + --j; + if ((*j)->itemType() == HistoryItem::MsgType) { + if (!--skip) { + _history->showFrom = *j; + return; + } + } + } + } } void HistoryWidget::updateBotKeyboard() { bool changed = false; bool wasVisible = _kbShown || _kbReplyTo; - if ((_replyToId && !_replyTo) || !hist) { + if ((_replyToId && !_replyTo) || !_history) { changed = _keyboard.updateMarkup(0); } else if (_replyTo) { changed = _keyboard.updateMarkup(_replyTo); } else { - changed = _keyboard.updateMarkup(hist->lastKeyboardId ? App::histItemById(hist->lastKeyboardId) : 0); + changed = _keyboard.updateMarkup(_history->lastKeyboardId ? App::histItemById(_history->lastKeyboardId) : 0); } updateCmdStartShown(); if (!changed) return; bool hasMarkup = _keyboard.hasMarkup(), forceReply = _keyboard.forceReply() && !_replyTo; if (hasMarkup || forceReply) { - if (_keyboard.singleUse() && _keyboard.hasMarkup() && _keyboard.forMsgId() == hist->lastKeyboardId && hist->lastKeyboardUsed) _kbWasHidden = true; + if (_keyboard.singleUse() && _keyboard.hasMarkup() && _keyboard.forMsgId() == _history->lastKeyboardId && _history->lastKeyboardUsed) _kbWasHidden = true; if (!isBotStart() && (wasVisible || _replyTo || (_field.getLastText().isEmpty() && !_kbWasHidden))) { if (!_showAnim.animating()) { if (hasMarkup) { @@ -4731,7 +4622,7 @@ void HistoryWidget::updateBotKeyboard() { int32 maxh = hasMarkup ? qMin(_keyboard.height(), int(st::maxFieldHeight) - (int(st::maxFieldHeight) / 2)) : 0; _field.setMaxHeight(st::maxFieldHeight - maxh); _kbShown = hasMarkup; - _kbReplyTo = (hist->peer->chat || _keyboard.forceReply()) ? App::histItemById(_keyboard.forMsgId()) : 0; + _kbReplyTo = (_history->peer->chat || _keyboard.forceReply()) ? App::histItemById(_keyboard.forMsgId()) : 0; if (_kbReplyTo && !_replyToId) { updateReplyToName(); _replyToText.setText(st::msgFont, _kbReplyTo->inDialogsText(), _textDlgOptions); @@ -4772,7 +4663,7 @@ void HistoryWidget::updateBotKeyboard() { } void HistoryWidget::updateToEndVisibility() { - bool toEndVisible = !_showAnim.animating() && hist && hist->readyForWork() && (!hist->loadedAtBottom() || _replyReturn || _scroll.scrollTop() + st::wndMinHeight < _scroll.scrollTopMax()); + bool toEndVisible = !_showAnim.animating() && _history && !_firstLoadRequest && (!_history->loadedAtBottom() || _replyReturn || _scroll.scrollTop() + st::wndMinHeight < _scroll.scrollTopMax()); if (toEndVisible && _toHistoryEnd.isHidden()) { _toHistoryEnd.show(); } else if (!toEndVisible && !_toHistoryEnd.isHidden()) { @@ -4797,13 +4688,14 @@ void HistoryWidget::mousePressEvent(QMouseEvent *e) { a_recordOver.restart(); _recordAnim.start(); } else if (_inReply) { - App::main()->showPeer(histPeer->id, replyToId()); + App::main()->showPeerHistory(_peer->id, replyToId()); } } void HistoryWidget::keyPressEvent(QKeyEvent *e) { - if (!hist) return; + if (!_history) return; + MsgId msgid = qMax(_showAtMsgId, 0); if (e->key() == Qt::Key_Escape) { e->ignore(); } else if (e->key() == Qt::Key_Back) { @@ -4812,8 +4704,8 @@ void HistoryWidget::keyPressEvent(QKeyEvent *e) { if ((e->modifiers() & Qt::ControlModifier) || (e->modifiers() & Qt::MetaModifier)) { PeerData *after = 0; MsgId afterMsgId = 0; - App::main()->peerAfter(histPeer, hist ? hist->activeMsgId : 0, after, afterMsgId); - if (after) App::main()->showPeer(after->id, afterMsgId); + App::main()->peerAfter(_peer, msgid, after, afterMsgId); + if (after) App::main()->showPeerHistory(after->id, afterMsgId); } else { _scroll.keyPressEvent(e); } @@ -4821,8 +4713,8 @@ void HistoryWidget::keyPressEvent(QKeyEvent *e) { if ((e->modifiers() & Qt::ControlModifier) || (e->modifiers() & Qt::MetaModifier)) { PeerData *before = 0; MsgId beforeMsgId = 0; - App::main()->peerBefore(histPeer, hist ? hist->activeMsgId : 0, before, beforeMsgId); - if (before) App::main()->showPeer(before->id, beforeMsgId); + App::main()->peerBefore(_peer, msgid, before, beforeMsgId); + if (before) App::main()->showPeerHistory(before->id, beforeMsgId); } else { _scroll.keyPressEvent(e); } @@ -4830,8 +4722,8 @@ void HistoryWidget::keyPressEvent(QKeyEvent *e) { if (e->modifiers() & Qt::AltModifier) { PeerData *after = 0; MsgId afterMsgId = 0; - App::main()->peerAfter(histPeer, hist ? hist->activeMsgId : 0, after, afterMsgId); - if (after) App::main()->showPeer(after->id, afterMsgId); + App::main()->peerAfter(_peer, msgid, after, afterMsgId); + if (after) App::main()->showPeerHistory(after->id, afterMsgId); } else if (!(e->modifiers() & (Qt::ShiftModifier | Qt::MetaModifier | Qt::ControlModifier))) { _scroll.keyPressEvent(e); } @@ -4839,8 +4731,8 @@ void HistoryWidget::keyPressEvent(QKeyEvent *e) { if (e->modifiers() & Qt::AltModifier) { PeerData *before = 0; MsgId beforeMsgId = 0; - App::main()->peerBefore(histPeer, hist ? hist->activeMsgId : 0, before, beforeMsgId); - if (before) App::main()->showPeer(before->id, beforeMsgId); + App::main()->peerBefore(_peer, msgid, before, beforeMsgId); + if (before) App::main()->showPeerHistory(before->id, beforeMsgId); } else if (!(e->modifiers() & (Qt::ShiftModifier | Qt::MetaModifier | Qt::ControlModifier))) { _scroll.keyPressEvent(e); } @@ -4848,11 +4740,11 @@ void HistoryWidget::keyPressEvent(QKeyEvent *e) { PeerData *p = 0; MsgId m = 0; if ((e->modifiers() & Qt::ShiftModifier) || e->key() == Qt::Key_Backtab) { - App::main()->peerBefore(histPeer, hist ? hist->activeMsgId : 0, p, m); + App::main()->peerBefore(_peer, msgid, p, m); } else { - App::main()->peerAfter(histPeer, hist ? hist->activeMsgId : 0, p, m); + App::main()->peerAfter(_peer, msgid, p, m); } - if (p) App::main()->showPeer(p->id, m); + if (p) App::main()->showPeerHistory(p->id, m); } else { e->ignore(); } @@ -4866,37 +4758,36 @@ void HistoryWidget::onFieldTabbed() { } void HistoryWidget::onStickerSend(DocumentData *sticker) { - if (!hist || !sticker) return; + if (!_history || !sticker) return; - App::main()->readServerHistory(hist, false); + App::main()->readServerHistory(_history, false); + fastShowAtEnd(_history); uint64 randomId = MTP::nonce(); MsgId newId = clientMsgId(); - hist->loadAround(0); - bool lastKeyboardUsed = lastForceReplyReplied(); - bool out = (histPeer->input.type() != mtpc_inputPeerSelf), unread = (histPeer->input.type() != mtpc_inputPeerSelf); - int32 flags = newMessageFlags(histPeer); // unread, out + bool out = (_peer->input.type() != mtpc_inputPeerSelf), unread = (_peer->input.type() != mtpc_inputPeerSelf); + int32 flags = newMessageFlags(_peer); // unread, out int32 sendFlags = 0; if (replyToId()) { flags |= MTPDmessage::flag_reply_to_msg_id; sendFlags |= MTPmessages_SendMedia::flag_reply_to_msg_id; } - hist->addToBackDocument(newId, flags, replyToId(), date(MTP_int(unixtime())), MTP::authedId(), sticker); + _history->addToBackDocument(newId, flags, replyToId(), date(MTP_int(unixtime())), MTP::authedId(), sticker); - hist->sendRequestId = MTP::send(MTPmessages_SendMedia(MTP_int(sendFlags), histPeer->input, MTP_int(replyToId()), MTP_inputMediaDocument(MTP_inputDocument(MTP_long(sticker->id), MTP_long(sticker->access))), MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), RPCFailHandlerPtr(), 0, 0, hist->sendRequestId); - App::main()->finishForwarding(hist); + _history->sendRequestId = MTP::send(MTPmessages_SendMedia(MTP_int(sendFlags), _peer->input, MTP_int(replyToId()), MTP_inputMediaDocument(MTP_inputDocument(MTP_long(sticker->id), MTP_long(sticker->access))), MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), RPCFailHandlerPtr(), 0, 0, _history->sendRequestId); + App::main()->finishForwarding(_history); cancelReply(lastKeyboardUsed); if (sticker->sticker()) App::main()->incrementSticker(sticker); App::historyRegRandom(randomId, newId); - App::main()->historyToDown(hist); + App::main()->historyToDown(_history); App::main()->dialogsToUp(); - peerMessagesUpdated(histPeer->id); + peerMessagesUpdated(_peer->id); if (!_attachMention.isHidden()) _attachMention.hideStart(); if (!_attachType.isHidden()) _attachType.hideStart(); @@ -4944,7 +4835,7 @@ void HistoryWidget::onReplyToMessage() { } bool HistoryWidget::lastForceReplyReplied(MsgId replyTo) const { - return _keyboard.forceReply() && _keyboard.forMsgId() == hist->lastKeyboardId && _keyboard.forMsgId() == (replyTo < 0 ? replyToId() : replyTo); + return _keyboard.forceReply() && _keyboard.forMsgId() == _history->lastKeyboardId && _keyboard.forMsgId() == (replyTo < 0 ? replyToId() : replyTo); } void HistoryWidget::cancelReply(bool lastKeyboardUsed) { @@ -5114,24 +5005,34 @@ void HistoryWidget::updatePreview() { } void HistoryWidget::onCancel() { - if (App::main()) App::main()->showPeer(0); + if (App::main()) App::main()->showDialogs(); emit cancelled(); } void HistoryWidget::onFullPeerUpdated(PeerData *data) { - if (_list && data == histPeer) { + int32 newScrollTop = _scroll.scrollTop(); + if (_list && data == _peer) { checkMentionDropdown(); + int32 lh = _list->height(), st = _scroll.scrollTop(); _list->updateBotInfo(); + newScrollTop = st + _list->height() - lh; } if (updateCmdStartShown()) { updateControlsVisibility(); resizeEvent(0); update(); } + if (newScrollTop != _scroll.scrollTop()) { + if (_scroll.isVisible()) { + _scroll.scrollToY(newScrollTop); + } else { + _history->lastScrollTop = newScrollTop; + } + } } void HistoryWidget::peerUpdated(PeerData *data) { - if (data && data == histPeer) { + if (data && data == _peer) { updateListSize(); if (!_showAnim.animating()) updateControlsVisibility(); if (data->chat && data->asChat()->count > 0 && data->asChat()->participants.isEmpty()) { @@ -5213,19 +5114,25 @@ void HistoryWidget::onClearSelected() { } void HistoryWidget::onAnimActiveStep() { - if (!hist || !hist->activeMsgId) return _animActiveTimer.stop(); - HistoryItem *item = App::histItemById(hist->activeMsgId); + if (!_history || _activeAnimMsgId <= 0) return _animActiveTimer.stop(); + + HistoryItem *item = App::histItemById(_activeAnimMsgId); if (!item || item->detached()) return _animActiveTimer.stop(); - App::main()->msgUpdated(histPeer->id, item); + if (getms() - _animActiveStart > st::activeFadeInDuration + st::activeFadeOutDuration) { + stopAnimActive(); + } else { + App::main()->msgUpdated(_peer->id, item); + } } -uint64 HistoryWidget::animActiveTime() const { - return _animActiveTimer.isActive() ? (getms() - _animActiveStart) : 0; +uint64 HistoryWidget::animActiveTime(MsgId id) const { + return (id == _activeAnimMsgId && _animActiveTimer.isActive()) ? (getms() - _animActiveStart) : 0; } void HistoryWidget::stopAnimActive() { _animActiveTimer.stop(); + _activeAnimMsgId = 0; } void HistoryWidget::fillSelectedItems(SelectedItemSet &sel, bool forDelete) { @@ -5458,32 +5365,16 @@ void HistoryWidget::paintEvent(QPaintEvent *e) { } if (_list) { - if (!_scroll.isHidden()) { - if (!_field.isHidden() || _recording) { - drawField(p); - if (_send.isHidden()) { - drawRecordButton(p); - if (_recording) drawRecording(p); - } + if (!_field.isHidden() || _recording) { + drawField(p); + if (_send.isHidden()) { + drawRecordButton(p); + if (_recording) drawRecording(p); } - } else { + } + if (_scroll.isHidden()) { QPoint dogPos((width() - st::msgDogImg.pxWidth()) / 2, ((height() - _field.height() - 2 * st::sendPadding - st::msgDogImg.pxHeight()) * 4) / 9); p.drawPixmap(dogPos, *cChatDogImage()); - - int32 pointsCount = 8, w = pointsCount * (st::introPointWidth + 2 * st::introPointDelta), h = st::introPointHeight; - int32 pointsLeft = (width() - w) / 2 + st::introPointDelta - st::introPointLeft, pointsTop = dogPos.y() + (st::msgDogImg.pxHeight() * 6) / 5; - - int32 curPoint = histRequestsCount % pointsCount; - - p.fillRect(pointsLeft + curPoint * (st::introPointWidth + 2 * st::introPointDelta), pointsTop, st::introPointHoverWidth, st::introPointHoverHeight, App::introPointHoverColor()->b); - - // points - p.setOpacity(st::introPointAlpha); - int32 x = pointsLeft + st::introPointLeft; - for (int32 i = 0; i < pointsCount; ++i) { - p.fillRect(x, pointsTop + st::introPointTop, st::introPointWidth, st::introPointHeight, st::introPointColor->b); - x += (st::introPointWidth + 2 * st::introPointDelta); - } } } else { style::font font(st::msgServiceFont); @@ -5502,7 +5393,7 @@ QRect HistoryWidget::historyRect() const { } void HistoryWidget::destroyData() { - showPeer(0); + showPeerHistory(0, 0); } QStringList HistoryWidget::getMediasFromMime(const QMimeData *d) { diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index 099271162..32cab7e05 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -82,6 +82,7 @@ public: void updateBotInfo(bool recount = true); bool wasSelectedText() const; + void setFirstLoading(bool loading); ~HistoryList(); @@ -130,6 +131,8 @@ private: ScrollArea *scrollArea; int32 currentBlock, currentItem; + bool _firstLoading; + QTimer linkTipTimer; Qt::CursorShape _cursor; @@ -343,6 +346,7 @@ public: void start(); void messagesReceived(const MTPmessages_Messages &messages, mtpRequestId requestId); + void historyLoaded(); void windowShown(); bool isActive() const; @@ -369,7 +373,8 @@ public: void loadMessages(); void loadMessagesDown(); - void loadMessagesAround(); + void firstLoadMessages(); + void delayedShowAt(MsgId showAtMsgId); void peerMessagesUpdated(PeerId peer); void peerMessagesUpdated(); @@ -397,7 +402,6 @@ public: void confirmSendImage(const ReadyLocalMedia &img); void cancelSendImage(); - void checkUnreadLoaded(bool checkOnlyShow = false); void updateControlsVisibility(); void updateOnlineDisplay(int32 x, int32 w); void updateOnlineDisplayTimer(); @@ -408,10 +412,7 @@ public: void shareContact(const PeerId &peer, const QString &phone, const QString &fname, const QString &lname, MsgId replyTo, int32 userId = 0); PeerData *peer() const; - PeerData *activePeer() const; - MsgId activeMsgId() const; - int32 lastWidth() const; - int32 lastScrollTop() const; + MsgId msgId() const; void animShow(const QPixmap &bgAnimCache, const QPixmap &bgAnimTopBarCache, bool back = false); bool showStep(float64 ms); @@ -427,7 +428,7 @@ public: QString prepareMessage(QString text); - uint64 animActiveTime() const; + uint64 animActiveTime(MsgId id) const; void stopAnimActive(); void fillSelectedItems(SelectedItemSet &sel, bool forDelete = true); @@ -470,6 +471,11 @@ public: DragState getDragState(const QMimeData *d); + void fastShowAtEnd(History *h); + void showPeerHistory(const PeerId &peer, MsgId showAtMsgId); + void clearDelayedShowAt(); + void clearAllLoadRequests(); + ~HistoryWidget(); signals: @@ -523,8 +529,7 @@ public slots: void onSendConfirmed(); void onSendCancelled(); void onPhotoFailed(quint64 id); - void showPeer(const PeerId &peer, MsgId msgId = 0, bool force = false, bool leaveActive = false); - void clearLoadingAround(); + void activate(); void onMentionHashtagOrBotCommandInsert(QString str); void onTextChange(); @@ -595,6 +600,8 @@ private: void addMessagesToFront(const QVector &messages); void addMessagesToBack(const QVector &messages); + void countHistoryShowFrom(); + void updateToEndVisibility(); void stickersGot(const MTPmessages_AllStickers &stickers); @@ -609,21 +616,20 @@ private: void updateDragAreas(); - bool _loadingMessages; - int32 histRequestsCount; - PeerData *histPeer; - History *_activeHist; - MTPinputPeer histInputPeer; - mtpRequestId histPreloading, histPreloadingDown; - QVector histPreload, histPreloadDown; + PeerData *_peer; + MsgId _showAtMsgId; - int32 _loadingAroundId; - mtpRequestId _loadingAroundRequest; + mtpRequestId _firstLoadRequest, _preloadRequest, _preloadDownRequest; + + MsgId _delayedShowAtMsgId; + mtpRequestId _delayedShowAtRequest; + + MsgId _activeAnimMsgId; ScrollArea _scroll; HistoryList *_list; - History *hist; - bool _histInited, _histNeedUpdate; // initial updateListSize() called + History *_history; + bool _histInited; // initial updateListSize() called IconedButton _toHistoryEnd; @@ -656,19 +662,17 @@ private: int32 _selCount; // < 0 - text selected, focus list, not _field - LocalImageLoader imageLoader; + LocalImageLoader _imageLoader; bool _synthedTextUpdate; - int64 serviceImageCacheSize; - QImage confirmImage; - PhotoId confirmImageId; - bool confirmWithText; - QString confirmSource; + int64 _serviceImageCacheSize; + QImage _confirmImage; + PhotoId _confirmImageId; + bool _confirmWithText; + QString _confirmSource; - QString titlePeerText; - int32 titlePeerTextWidth; - - bool hiderOffered; + QString _titlePeerText; + int32 _titlePeerTextWidth; Animation _showAnim; QPixmap _animCache, _bgAnimCache, _animTopBarCache, _bgAnimTopBarCache; diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 4ee53656a..f92f163fd 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -100,7 +100,7 @@ void TopBarWidget::onDeleteContactSure() { PeerData *p = App::main() ? App::main()->profilePeer() : 0; UserData *u = (p && !p->chat) ? p->asUser() : 0; if (u) { - App::main()->showPeer(0, 0, true); + App::main()->showDialogs(); App::wnd()->hideLayer(); MTP::send(MTPcontacts_DeleteContact(u->inputUser), App::main()->rpcDone(&MainWidget::deletedContact, u)); } @@ -120,7 +120,7 @@ void TopBarWidget::onDeleteAndExitSure() { PeerData *p = App::main() ? App::main()->profilePeer() : 0; ChatData *c = (p && p->chat) ? p->asChat() : 0; if (c) { - App::main()->showPeer(0, 0, true); + App::main()->showDialogs(); App::wnd()->hideLayer(); MTP::send(MTPmessages_DeleteChatUser(MTP_int(p->id & 0xFFFFFFFF), App::self()->inputUser), App::main()->rpcDone(&MainWidget::deleteHistory, p), App::main()->rpcFail(&MainWidget::leaveChatFailed, p)); } @@ -353,7 +353,8 @@ MainWidget *TopBarWidget::main() { MainWidget::MainWidget(Window *window) : QWidget(window), _started(0), failedObjId(0), _toForwardNameVersion(0), _dialogsWidth(st::dlgMinWidth), dialogs(this), history(this), profile(0), overview(0), _player(this), _topBar(this), -_forwardConfirm(0), hider(0), _playerHeight(0), _contentScrollAddToY(0), _mediaType(this), _mediaTypeMask(0), +_forwardConfirm(0), _hider(0), _peerInStack(0), _msgIdInStack(0), +_playerHeight(0), _contentScrollAddToY(0), _mediaType(this), _mediaTypeMask(0), updGoodPts(0), updLastPts(0), updPtsCount(0), updDate(0), updQts(-1), updSeq(0), updInited(false), updSkipPtsUpdateLevel(0), _onlineRequest(0), _lastWasOnline(false), _lastSetOnline(0), _isIdle(false), _failDifferenceTimeout(1), _lastUpdateTime(0), _cachedX(0), _cachedY(0), _background(0), _api(new ApiWrap(this)) { @@ -377,7 +378,7 @@ _failDifferenceTimeout(1), _lastUpdateTime(0), _cachedX(0), _cachedY(0), _backgr connect(&_topBar, SIGNAL(clicked()), this, SLOT(onTopBarClick())); connect(&history, SIGNAL(peerShown(PeerData*)), this, SLOT(onPeerShown(PeerData*))); connect(&updateNotifySettingTimer, SIGNAL(timeout()), this, SLOT(onUpdateNotifySettings())); - connect(this, SIGNAL(showPeerAsync(quint64,qint32,bool,bool)), this, SLOT(showPeer(quint64,qint32,bool,bool)), Qt::QueuedConnection); + connect(this, SIGNAL(showPeerAsync(quint64,qint32)), this, SLOT(showPeerHistory(quint64,qint32)), Qt::QueuedConnection); if (audioPlayer()) { connect(audioPlayer(), SIGNAL(updated(const AudioMsgId&)), this, SLOT(audioPlayProgress(const AudioMsgId&))); connect(audioPlayer(), SIGNAL(stopped(const AudioMsgId&)), this, SLOT(audioPlayProgress(const AudioMsgId&))); @@ -402,10 +403,7 @@ _failDifferenceTimeout(1), _lastUpdateTime(0), _cachedX(0), _cachedY(0), _backgr _player.hide(); - _topBar.raise(); - _player.raise(); - dialogs.raise(); - _mediaType.raise(); + orderWidgets(); MTP::setGlobalFailHandler(rpcFail(&MainWidget::updateFail)); @@ -441,7 +439,7 @@ void MainWidget::onForward(const PeerId &peer, ForwardWhatMessages what) { } } updateForwardingTexts(); - showPeer(peer, 0, false, true); + showPeerHistory(peer, ShowAtUnreadMsgId); history.onClearSelected(); history.updateForwarding(); } @@ -602,14 +600,14 @@ void MainWidget::onFilesOrForwardDrop(const PeerId &peer, const QMimeData *data) } else if (data->hasFormat(qsl("application/x-td-forward-pressed"))) { onForward(peer, ForwardPressedMessage); } else { - showPeer(peer, 0, false, true); + showPeerHistory(peer, ShowAtTheEndMsgId); history.onFilesDrop(data); } } void MainWidget::noHider(HistoryHider *destroyed) { - if (hider == destroyed) { - hider = 0; + if (_hider == destroyed) { + _hider = 0; if (cWideMode()) { if (_forwardConfirm) { _forwardConfirm->deleteLater(); @@ -650,16 +648,16 @@ void MainWidget::hiderLayer(HistoryHider *h) { return; } - hider = h; - connect(hider, SIGNAL(forwarded()), &dialogs, SLOT(onCancelSearch())); + _hider = h; + connect(_hider, SIGNAL(forwarded()), &dialogs, SLOT(onCancelSearch())); if (cWideMode()) { - hider->show(); + _hider->show(); resizeEvent(0); dialogs.activate(); } else { dialogsToUp(); - hider->hide(); + _hider->hide(); dialogs.enableShadow(false); QPixmap animCache = myGrab(this, QRect(0, _playerHeight, _dialogsWidth, height() - _playerHeight)); dialogs.enableShadow(); @@ -700,13 +698,14 @@ void MainWidget::shareContactLayer(UserData *contact) { } bool MainWidget::selectingPeer(bool withConfirm) { - return hider ? (withConfirm ? hider->withConfirm() : true) : false; + return _hider ? (withConfirm ? _hider->withConfirm() : true) : false; } void MainWidget::offerPeer(PeerId peer) { - if (hider->offerPeer(peer) && !cWideMode()) { - _forwardConfirm = new ConfirmBox(hider->offeredText(), lang(lng_forward)); - connect(_forwardConfirm, SIGNAL(confirmed()), hider, SLOT(forward())); + App::wnd()->hideLayer(); + if (_hider->offerPeer(peer) && !cWideMode()) { + _forwardConfirm = new ConfirmBox(_hider->offeredText(), lang(lng_forward)); + connect(_forwardConfirm, SIGNAL(confirmed()), _hider, SLOT(forward())); connect(_forwardConfirm, SIGNAL(cancelled()), this, SLOT(onForwardCancel())); connect(_forwardConfirm, SIGNAL(destroyed(QObject*)), this, SLOT(onForwardCancel(QObject*))); App::wnd()->showLayer(_forwardConfirm); @@ -719,14 +718,10 @@ void MainWidget::onForwardCancel(QObject *obj) { if (!obj) _forwardConfirm->startHide(); _forwardConfirm = 0; } - if (hider) hider->offerPeer(0); + if (_hider) _hider->offerPeer(0); } } -void MainWidget::focusPeerSelect() { - hider->setFocus(); -} - void MainWidget::dialogsActivate() { dialogs.activate(); } @@ -740,7 +735,7 @@ bool MainWidget::leaveChatFailed(PeerData *peer, const RPCError &error) { if (error.type() == "CHAT_ID_INVALID") { // left this chat already if ((profile && profile->peer() == peer) || (overview && overview->peer() == peer) || _stack.contains(peer) || history.peer() == peer) { - showPeer(0, 0, false, true); + showDialogs(); } dialogs.removePeer(peer); App::histories().remove(peer->id); @@ -753,7 +748,7 @@ bool MainWidget::leaveChatFailed(PeerData *peer, const RPCError &error) { void MainWidget::deleteHistory(PeerData *peer, const MTPUpdates &updates) { sentUpdatesReceived(updates); if ((profile && profile->peer() == peer) || (overview && overview->peer() == peer) || _stack.contains(peer) || history.peer() == peer) { - showPeer(0, 0, false, true); + showDialogs(); } dialogs.removePeer(peer); App::histories().remove(peer->id); @@ -788,7 +783,7 @@ void MainWidget::deleteHistoryAndContact(UserData *user, const MTPcontacts_Link App::emitPeerUpdated(); if ((profile && profile->peer() == user) || (overview && overview->peer() == user) || _stack.contains(user) || history.peer() == user) { - showPeer(0); + showDialogs(); } dialogs.removePeer(user); MTP::send(MTPmessages_DeleteHistory(user->input, MTP_int(0)), rpcDone(&MainWidget::deleteHistoryPart, (PeerData*)user)); @@ -813,7 +808,7 @@ void MainWidget::addParticipants(ChatData *chat, const QVector &users MTP::send(MTPmessages_AddChatUser(MTP_int(chat->id & 0xFFFFFFFF), (*i)->inputUser, MTP_int(ForwardOnAdd)), rpcDone(&MainWidget::sentUpdatesReceived), rpcFail(&MainWidget::addParticipantFail, *i), 0, 5); } App::wnd()->hideLayer(); - showPeer(chat->id, 0, false); + showPeerHistory(chat->id, ShowAtTheEndMsgId); } bool MainWidget::addParticipantFail(UserData *user, const RPCError &error) { @@ -831,7 +826,7 @@ bool MainWidget::addParticipantFail(UserData *user, const RPCError &error) { void MainWidget::kickParticipant(ChatData *chat, UserData *user) { MTP::send(MTPmessages_DeleteChatUser(MTP_int(chat->id & 0xFFFFFFFF), user->inputUser), rpcDone(&MainWidget::sentUpdatesReceived), rpcFail(&MainWidget::kickParticipantFail, chat)); App::wnd()->hideLayer(); - showPeer(chat->id, 0, false); + showPeerHistory(chat->id, ShowAtTheEndMsgId); } bool MainWidget::kickParticipantFail(ChatData *chat, const RPCError &error) { @@ -862,7 +857,7 @@ void MainWidget::checkedHistory(PeerData *peer, const MTPmessages_Messages &resu if (v->isEmpty()) { if ((profile && profile->peer() == peer) || (overview && overview->peer() == peer) || _stack.contains(peer) || history.peer() == peer) { - showPeer(0); + showDialogs(); } dialogs.removePeer(peer); } else { @@ -1015,9 +1010,8 @@ void MainWidget::sendPreparedText(History *hist, const QString &text, MsgId repl } void MainWidget::sendMessage(History *hist, const QString &text, MsgId replyTo) { + hist->getReadyFor(ShowAtTheEndMsgId); readServerHistory(hist, false); - hist->loadAround(0); - if (history.peer()) sendPreparedText(hist, history.prepareMessage(text), replyTo); } @@ -1050,7 +1044,7 @@ void MainWidget::saveRecentHashtags(const QString &text) { } void MainWidget::readServerHistory(History *hist, bool force) { - if (!hist || (!force && (!hist->unreadCount || !hist->readyForWork()))) return; + if (!hist || (!force && !hist->unreadCount)) return; ReadRequests::const_iterator i = _readRequests.constFind(hist->peer); if (i == _readRequests.cend()) { @@ -1059,8 +1053,8 @@ void MainWidget::readServerHistory(History *hist, bool force) { } } -uint64 MainWidget::animActiveTime() const { - return history.animActiveTime(); +uint64 MainWidget::animActiveTime(MsgId id) const { + return history.animActiveTime(id); } void MainWidget::stopAnimActive() { @@ -1078,7 +1072,7 @@ void MainWidget::insertBotCommand(const QString &cmd) { void MainWidget::searchMessages(const QString &query) { App::wnd()->hideMediaview(); dialogs.searchMessages(query); - if (!cWideMode()) onShowDialogs(); + if (!cWideMode()) showDialogs(); } void MainWidget::preloadOverviews(PeerData *peer) { @@ -1724,13 +1718,11 @@ void MainWidget::cancelSendImage() { } void MainWidget::dialogsCancelled() { - if (hider) { - hider->startHide(); - noHider(hider); - history.activate(); - } else { - history.activate(); + if (_hider) { + _hider->startHide(); + noHider(_hider); } + history.activate(); } void MainWidget::serviceNotification(const QString &msg, const MTPMessageMedia &media, bool unread) { @@ -1870,15 +1862,15 @@ void MainWidget::pushReplyReturn(HistoryItem *item) { } void MainWidget::setInnerFocus() { - if (hider || !history.peer()) { - if (hider && hider->wasOffered()) { - hider->setFocus(); + if (_hider || !history.peer()) { + if (_hider && _hider->wasOffered()) { + _hider->setFocus(); } else if (overview) { overview->activate(); } else if (profile) { profile->activate(); } else { - dialogs.setInnerFocus(); + dialogsActivate(); } } else if (profile) { profile->setFocus(); @@ -1891,88 +1883,104 @@ void MainWidget::createDialogAtTop(History *history, int32 unreadCount) { dialogs.createDialogAtTop(history, unreadCount); } -void MainWidget::showPeer(quint64 peerId, qint32 msgId, bool back, bool force) { - if (!back && _stack.size() == 1 && _stack[0]->type() == HistoryStackItem && _stack[0]->peer->id == peerId) { - if (cWideMode() || !selectingPeer()) { - back = true; - } +void MainWidget::choosePeer(PeerId peerId, MsgId showAtMsgId) { + if (selectingPeer()) { + offerPeer(peerId); + } else { + showPeerHistory(peerId, showAtMsgId); } +} + +void MainWidget::clearBotStartToken(PeerData *peer) { + if (peer && !peer->chat && peer->asUser()->botInfo) { + peer->asUser()->botInfo->startToken = QString(); + } +} + +void MainWidget::showPeerHistory(quint64 peerId, qint32 showAtMsgId, bool back) { + if (!back && (!peerId || (_stack.size() == 1 && _stack[0]->type() == HistoryStackItem && _stack[0]->peer->id == peerId))) { + back = true; + } + App::wnd()->hideLayer(); + if (_hider) { + _hider->startHide(); + _hider = 0; + } + QPixmap animCache, animTopBarCache; - if (force && hider) { - hider->startHide(); - hider = 0; - } - if (force || !selectingPeer()) { - if (!animating() && ((history.isHidden() && history.activePeer() && (profile || overview)) || (!cWideMode() && (history.isHidden() || !peerId)))) { - dialogs.enableShadow(false); - if (peerId) { - _topBar.enableShadow(false); - if (cWideMode()) { - animCache = myGrab(this, QRect(_dialogsWidth, _playerHeight + st::topBarHeight, width() - _dialogsWidth, height() - _playerHeight - st::topBarHeight)); - } else { - animCache = myGrab(this, QRect(0, _playerHeight + st::topBarHeight, _dialogsWidth, height() - _playerHeight - st::topBarHeight)); - } - } else if (cWideMode()) { - animCache = myGrab(this, QRect(_dialogsWidth, _playerHeight, width() - _dialogsWidth, height() - _playerHeight)); + if (!animating() && ((history.isHidden() && (profile || overview)) || (!cWideMode() && (history.isHidden() || !peerId)))) { + dialogs.enableShadow(false); + if (peerId) { + _topBar.enableShadow(false); + if (cWideMode()) { + animCache = myGrab(this, QRect(_dialogsWidth, _playerHeight + st::topBarHeight, width() - _dialogsWidth, height() - _playerHeight - st::topBarHeight)); } else { - animCache = myGrab(this, QRect(0, _playerHeight, _dialogsWidth, height() - _playerHeight)); - } - if (peerId || cWideMode()) { - animTopBarCache = myGrab(this, QRect(_topBar.x(), _topBar.y(), _topBar.width(), st::topBarHeight)); - } - dialogs.enableShadow(); - _topBar.enableShadow(); - history.show(); - } - } - history.showPeer(peerId, msgId, force); - if (force || !selectingPeer()) { - bool noPeer = (!history.peer() || !history.peer()->id), onlyDialogs = noPeer && !cWideMode(); - if (profile || overview) { - if (profile) { - profile->hide(); - profile->clear(); - profile->deleteLater(); - profile->rpcInvalidate(); - profile = 0; - } - if (overview) { - overview->hide(); - overview->clear(); - overview->deleteLater(); - overview->rpcInvalidate(); - overview = 0; - } - _stack.clear(); - } - if (onlyDialogs) { - _topBar.hide(); - history.hide(); - if (!animating()) { - dialogs.show(); - if (!animCache.isNull()) { - dialogs.animShow(animCache); - } + animCache = myGrab(this, QRect(0, _playerHeight + st::topBarHeight, _dialogsWidth, height() - _playerHeight - st::topBarHeight)); } + } else if (cWideMode()) { + animCache = myGrab(this, QRect(_dialogsWidth, _playerHeight, width() - _dialogsWidth, height() - _playerHeight)); } else { - if (noPeer) { - _topBar.hide(); - resizeEvent(0); + animCache = myGrab(this, QRect(0, _playerHeight, _dialogsWidth, height() - _playerHeight)); + } + if (peerId || cWideMode()) { + animTopBarCache = myGrab(this, QRect(_topBar.x(), _topBar.y(), _topBar.width(), st::topBarHeight)); + } + dialogs.enableShadow(); + _topBar.enableShadow(); + history.show(); + } + if (history.peer() && history.peer()->id != peerId) clearBotStartToken(history.peer()); + history.showPeerHistory(peerId, showAtMsgId); + + bool noPeer = (!history.peer() || !history.peer()->id), onlyDialogs = noPeer && !cWideMode(); + if (profile || overview) { + if (profile) { + profile->hide(); + profile->clear(); + profile->deleteLater(); + profile->rpcInvalidate(); + profile = 0; + } + if (overview) { + overview->hide(); + overview->clear(); + overview->deleteLater(); + overview->rpcInvalidate(); + overview = 0; + } + clearBotStartToken(_peerInStack); + _peerInStack = 0; + _msgIdInStack = 0; + _stack.clear(); + } + if (onlyDialogs) { + _topBar.hide(); + history.hide(); + if (!animating()) { + dialogs.show(); + if (!animCache.isNull()) { + dialogs.animShow(animCache); } - if (!cWideMode()) dialogs.hide(); - if (!animating()) { - history.show(); - if (!animCache.isNull()) { - history.animShow(animCache, animTopBarCache, back); - } else { - QTimer::singleShot(0, this, SLOT(setInnerFocus())); - } + } + } else { + if (noPeer) { + _topBar.hide(); + resizeEvent(0); + } + if (!cWideMode() && !dialogs.isHidden()) dialogs.hide(); + if (!animating()) { + if (history.isHidden()) history.show(); + if (!animCache.isNull()) { + history.animShow(animCache, animTopBarCache, back); + } else { + QTimer::singleShot(0, this, SLOT(setInnerFocus())); } } } + if (!dialogs.isHidden()) { - dialogs.scrollToPeer(peerId, msgId); + dialogs.scrollToPeer(peerId, showAtMsgId); dialogs.update(); } App::wnd()->getTitle()->updateBackButton(); @@ -2005,11 +2013,11 @@ PeerData *MainWidget::peer() { } PeerData *MainWidget::activePeer() { - return history.activePeer(); + return history.peer() ? history.peer() : _peerInStack; } MsgId MainWidget::activeMsgId() { - return history.activeMsgId(); + return history.peer() ? history.msgId() : _msgIdInStack; } PeerData *MainWidget::profilePeer() { @@ -2059,7 +2067,9 @@ void MainWidget::showMediaOverview(PeerData *peer, MediaOverviewType type, bool } else if (profile) { _stack.push_back(new StackItemProfile(profile->peer(), profile->lastScrollTop(), profile->allMediaShown())); } else if (history.peer()) { - _stack.push_back(new StackItemHistory(history.peer(), history.lastWidth(), history.lastScrollTop(), history.replyReturns(), history.kbWasHidden())); + _peerInStack = history.peer(); + _msgIdInStack = history.msgId(); + _stack.push_back(new StackItemHistory(_peerInStack, _msgIdInStack, history.replyReturns(), history.kbWasHidden())); } } if (overview) { @@ -2086,14 +2096,13 @@ void MainWidget::showMediaOverview(PeerData *peer, MediaOverviewType type, bool overview->fastShow(); } history.animStop(); - history.showPeer(0, 0, false, true); + if (back) clearBotStartToken(history.peer()); + history.showPeerHistory(0, 0); history.hide(); if (!cWideMode()) dialogs.hide(); - _topBar.raise(); - _player.raise(); - dialogs.raise(); - _mediaType.raise(); - if (hider) hider->raise(); + + orderWidgets(); + App::wnd()->getTitle()->updateBackButton(); } @@ -2112,7 +2121,9 @@ void MainWidget::showPeerProfile(PeerData *peer, bool back, int32 lastScrollTop, } else if (profile) { _stack.push_back(new StackItemProfile(profile->peer(), profile->lastScrollTop(), profile->allMediaShown())); } else { - _stack.push_back(new StackItemHistory(history.peer(), history.lastWidth(), history.lastScrollTop(), history.replyReturns(), history.kbWasHidden())); + _peerInStack = history.peer(); + _msgIdInStack = history.msgId(); + _stack.push_back(new StackItemHistory(_peerInStack, _msgIdInStack, history.replyReturns(), history.kbWasHidden())); } } if (overview) { @@ -2133,32 +2144,36 @@ void MainWidget::showPeerProfile(PeerData *peer, bool back, int32 lastScrollTop, resizeEvent(0); profile->animShow(animCache, animTopBarCache, back, lastScrollTop, allMediaShown); history.animStop(); - history.showPeer(0, 0, false, true); + if (back) clearBotStartToken(history.peer()); + history.showPeerHistory(0, 0); history.hide(); - _topBar.raise(); - _player.raise(); - dialogs.raise(); - _mediaType.raise(); - if (hider) hider->raise(); + + orderWidgets(); + App::wnd()->getTitle()->updateBackButton(); } void MainWidget::showBackFromStack() { if (selectingPeer()) return; if (_stack.isEmpty()) { - if (cWideMode()) { - showPeer(0, 0, false, true); - QTimer::singleShot(0, this, SLOT(setInnerFocus())); - } else { - onShowDialogs(); - } + showDialogs(); + QTimer::singleShot(0, this, SLOT(setInnerFocus())); return; } StackItem *item = _stack.back(); _stack.pop_back(); if (item->type() == HistoryStackItem) { + _peerInStack = 0; + _msgIdInStack = 0; + for (int32 i = _stack.size(); i > 0;) { + if (_stack.at(--i)->type() == HistoryStackItem) { + _peerInStack = static_cast(_stack.at(i))->peer; + _msgIdInStack = static_cast(_stack.at(i))->msgId; + break; + } + } StackItemHistory *histItem = static_cast(item); - showPeer(histItem->peer->id, App::main()->activeMsgId(), true); + showPeerHistory(histItem->peer->id, App::main()->activeMsgId(), true); history.setReplyReturns(histItem->peer->id, histItem->replyReturns); if (histItem->kbWasHidden) history.setKbWasHidden(); } else if (item->type() == ProfileStackItem) { @@ -2171,6 +2186,14 @@ void MainWidget::showBackFromStack() { delete item; } +void MainWidget::orderWidgets() { + _topBar.raise(); + _player.raise(); + dialogs.raise(); + _mediaType.raise(); + if (_hider) _hider->raise(); +} + QRect MainWidget::historyRect() const { QRect r(history.historyRect()); r.moveLeft(r.left() + history.x()); @@ -2340,8 +2363,8 @@ void MainWidget::showAll() { App::wnd()->showLayer(new ConfirmBox(lang(lng_signin_password_removed), true, lang(lng_continue))); } if (cWideMode()) { - if (hider) { - hider->show(); + if (_hider) { + _hider->show(); if (_forwardConfirm) { App::wnd()->hideLayer(true); _forwardConfirm = 0; @@ -2360,11 +2383,11 @@ void MainWidget::showAll() { _topBar.show(); } } else { - if (hider) { - hider->hide(); - if (!_forwardConfirm && hider->wasOffered()) { - _forwardConfirm = new ConfirmBox(hider->offeredText(), lang(lng_forward)); - connect(_forwardConfirm, SIGNAL(confirmed()), hider, SLOT(forward())); + if (_hider) { + _hider->hide(); + if (!_forwardConfirm && _hider->wasOffered()) { + _forwardConfirm = new ConfirmBox(_hider->offeredText(), lang(lng_forward)); + connect(_forwardConfirm, SIGNAL(confirmed()), _hider, SLOT(forward())); connect(_forwardConfirm, SIGNAL(cancelled()), this, SLOT(onForwardCancel())); App::wnd()->showLayer(_forwardConfirm, true); } @@ -2402,14 +2425,14 @@ void MainWidget::resizeEvent(QResizeEvent *e) { _player.setGeometry(_dialogsWidth, 0, width() - _dialogsWidth, _player.height()); _topBar.setGeometry(_dialogsWidth, _playerHeight, width() - _dialogsWidth, st::topBarHeight + st::titleShadow); history.setGeometry(_dialogsWidth, _playerHeight + tbh, width() - _dialogsWidth, height() - _playerHeight - tbh); - if (hider) hider->setGeometry(QRect(_dialogsWidth, 0, width() - _dialogsWidth, height())); + if (_hider) _hider->setGeometry(QRect(_dialogsWidth, 0, width() - _dialogsWidth, height())); } else { _dialogsWidth = width(); _player.setGeometry(0, 0, _dialogsWidth, _player.height()); dialogs.setGeometry(0, _playerHeight, _dialogsWidth + st::dlgShadow, height() - _playerHeight); _topBar.setGeometry(0, _playerHeight, _dialogsWidth, st::topBarHeight + st::titleShadow); history.setGeometry(0, _playerHeight + tbh, _dialogsWidth, height() - _playerHeight - tbh); - if (hider) hider->setGeometry(QRect(0, 0, _dialogsWidth, height())); + if (_hider) _hider->setGeometry(QRect(0, 0, _dialogsWidth, height())); } _mediaType.move(width() - _mediaType.width(), _playerHeight + st::topBarHeight); if (profile) profile->setGeometry(history.geometry()); @@ -2433,8 +2456,8 @@ bool MainWidget::needBackButton() { return overview || profile || (history.peer() && history.peer()->id); } -void MainWidget::onShowDialogs() { - showPeer(0, 0, false, true); +void MainWidget::showDialogs() { + showPeerHistory(0, 0); } void MainWidget::paintTopBar(QPainter &p, float64 over, int32 decreaseWidth) { @@ -2450,9 +2473,9 @@ void MainWidget::paintTopBar(QPainter &p, float64 over, int32 decreaseWidth) { void MainWidget::topBarShadowParams(int32 &x, float64 &o) { if (!cWideMode() && dialogs.isHidden()) { if (profile) { - if (!history.activePeer()) profile->topBarShadowParams(x, o); + if (!_peerInStack) profile->topBarShadowParams(x, o); } else if (overview) { - if (!history.activePeer()) overview->topBarShadowParams(x, o); + if (!_peerInStack) overview->topBarShadowParams(x, o); } else { history.topBarShadowParams(x, o); } @@ -2787,7 +2810,7 @@ void MainWidget::openUserByName(const QString &username, bool toProfile, const Q history.resizeEvent(0); } } - emit showPeerAsync(user->id, 0, false, true); + emit showPeerAsync(user->id, 0); } } else { MTP::send(MTPcontacts_ResolveUsername(MTP_string(username)), rpcDone(&MainWidget::usernameResolveDone, qMakePair(toProfile, startToken)), rpcFail(&MainWidget::usernameResolveFail, username)); @@ -2829,7 +2852,7 @@ void MainWidget::usernameResolveDone(QPair toProfileStartToken, c history.resizeEvent(0); } } - showPeer(user->id, 0, false, true); + showPeerHistory(user->id, ShowAtUnreadMsgId); } } @@ -2862,7 +2885,7 @@ void MainWidget::inviteCheckDone(QString hash, const MTPChatInvite &invite) { connect(box, SIGNAL(confirmed()), this, SLOT(onInviteImport())); App::wnd()->showLayer(box); } else { - showPeer(chat->id, 0, false, true); + showPeerHistory(chat->id, ShowAtUnreadMsgId); } } } break; @@ -2906,7 +2929,7 @@ void MainWidget::inviteImportDone(const MTPUpdates &updates) { } break; } if (v && !v->isEmpty() && v->front().type() == mtpc_chat) { - App::main()->showPeer(App::peerFromChat(v->front().c_chat().vid.v)); + App::main()->showPeerHistory(App::peerFromChat(v->front().c_chat().vid.v), ShowAtTheEndMsgId); } } @@ -3114,9 +3137,9 @@ void MainWidget::incrementSticker(DocumentData *sticker) { void MainWidget::activate() { if (!profile && !overview) { - if (hider) { - if (hider->wasOffered()) { - hider->setFocus(); + if (_hider) { + if (_hider->wasOffered()) { + _hider->setFocus(); } else { dialogs.activate(); } @@ -3144,7 +3167,7 @@ void MainWidget::updateOnlineDisplayIn(int32 msecs) { void MainWidget::addNewContact(int32 uid, bool show) { if (dialogs.addNewContact(uid, show)) { - showPeer(App::peerFromUser(uid)); + showPeerHistory(App::peerFromUser(uid), ShowAtTheEndMsgId); } } @@ -3169,11 +3192,11 @@ int32 MainWidget::dlgsWidth() const { } MainWidget::~MainWidget() { - if (App::main() == this) history.showPeer(0, 0, true); + if (App::main() == this) history.showPeerHistory(0, 0); delete _background; - delete hider; + delete _hider; MTP::clearGlobalHandlers(); delete _api; if (App::wnd()) App::wnd()->noMain(this); diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index ab2a4ef03..c0503be5e 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -111,13 +111,14 @@ public: class StackItemHistory : public StackItem { public: - StackItemHistory(PeerData *peer, int32 lastWidth, int32 lastScrollTop, QList replyReturns, bool kbWasHidden) : StackItem(peer), replyReturns(replyReturns), lastWidth(lastWidth), lastScrollTop(lastScrollTop), kbWasHidden(kbWasHidden) { + StackItemHistory(PeerData *peer, MsgId msgId, QList replyReturns, bool kbWasHidden) : StackItem(peer), +msgId(msgId), replyReturns(replyReturns), kbWasHidden(kbWasHidden) { } StackItemType type() const { return HistoryStackItem; } + MsgId msgId; QList replyReturns; - int32 lastWidth, lastScrollTop; bool kbWasHidden; }; @@ -184,7 +185,7 @@ public: void updateWideMode(); bool needBackButton(); - void onShowDialogs(); + void showDialogs(); void paintTopBar(QPainter &p, float64 over, int32 decreaseWidth); void topBarShadowParams(int32 &x, float64 &o); @@ -234,14 +235,17 @@ public: void peerAfter(const PeerData *inPeer, MsgId inMsg, PeerData *&outPeer, MsgId &outMsg); PeerData *historyPeer(); PeerData *peer(); + PeerData *activePeer(); MsgId activeMsgId(); + PeerData *profilePeer(); PeerData *overviewPeer(); bool mediaTypeSwitch(); void showPeerProfile(PeerData *peer, bool back = false, int32 lastScrollTop = -1, bool allMediaShown = false); void showMediaOverview(PeerData *peer, MediaOverviewType type, bool back = false, int32 lastScrollTop = -1); void showBackFromStack(); + void orderWidgets(); QRect historyRect() const; void confirmShareContact(bool ctrlShiftEnter, const QString &phone, const QString &fname, const QString &lname, MsgId replyTo); @@ -272,7 +276,6 @@ public: void onFilesOrForwardDrop(const PeerId &peer, const QMimeData *data); bool selectingPeer(bool withConfirm = false); void offerPeer(PeerId peer); - void focusPeerSelect(); void dialogsActivate(); DragState getDragState(const QMimeData *mime); @@ -310,7 +313,7 @@ public: void readServerHistory(History *history, bool force = true); - uint64 animActiveTime() const; + uint64 animActiveTime(MsgId id) const; void stopAnimActive(); void sendBotCommand(const QString &cmd, MsgId msgId); @@ -369,6 +372,9 @@ public: void updateStickers(); void botCommandsChanged(UserData *bot); + void choosePeer(PeerId peerId, MsgId showAtMsgId); // does offerPeer or showPeerHistory + void clearBotStartToken(PeerData *peer); + ~MainWidget(); signals: @@ -379,7 +385,7 @@ signals: void dialogRowReplaced(DialogRow *oldRow, DialogRow *newRow); void dialogToTop(const History::DialogLinks &links); void dialogsUpdated(); - void showPeerAsync(quint64 peer, qint32 msgId, bool back, bool force); + void showPeerAsync(quint64 peerId, qint32 showAtMsgId); void stickersUpdated(); public slots: @@ -411,7 +417,7 @@ public slots: void checkIdleFinish(); void updateOnlineDisplay(); - void showPeer(quint64 peer, qint32 msgId = 0, bool back = false, bool force = false); // PeerId, MsgId + void showPeerHistory(quint64 peer, qint32 msgId, bool back = false); void onTopBarClick(); void onPeerShown(PeerData *peer); @@ -500,10 +506,11 @@ private: PlayerWidget _player; TopBarWidget _topBar; ConfirmBox *_forwardConfirm; // for narrow mode - HistoryHider *hider; + HistoryHider *_hider; StackItems _stack; - QPixmap profileAnimCache; - + PeerData *_peerInStack; + MsgId _msgIdInStack; + int32 _playerHeight; int32 _contentScrollAddToY; diff --git a/Telegram/SourceFiles/mediaview.cpp b/Telegram/SourceFiles/mediaview.cpp index d49a10105..66c3118f7 100644 --- a/Telegram/SourceFiles/mediaview.cpp +++ b/Telegram/SourceFiles/mediaview.cpp @@ -446,7 +446,7 @@ void MediaView::onToMessage() { if (HistoryItem *item = _msgid ? App::histItemById(_msgid) : 0) { if (App::wnd()) { close(); - if (App::main()) App::main()->showPeer(item->history()->peer->id, _msgid, false, true); + if (App::main()) App::main()->showPeerHistory(item->history()->peer->id, _msgid); } } } diff --git a/Telegram/SourceFiles/overviewwidget.cpp b/Telegram/SourceFiles/overviewwidget.cpp index 5610dd1d1..cbc3d25f9 100644 --- a/Telegram/SourceFiles/overviewwidget.cpp +++ b/Telegram/SourceFiles/overviewwidget.cpp @@ -1367,7 +1367,7 @@ void OverviewInner::goToMessage() { HistoryItem *item = App::contextItem(); if (!item) return; - App::main()->showPeer(item->history()->peer->id, item->id, true, true); + App::main()->showPeerHistory(item->history()->peer->id, item->id); } void OverviewInner::forwardMessage() { diff --git a/Telegram/SourceFiles/profilewidget.cpp b/Telegram/SourceFiles/profilewidget.cpp index a0221743b..f75e0b914 100644 --- a/Telegram/SourceFiles/profilewidget.cpp +++ b/Telegram/SourceFiles/profilewidget.cpp @@ -178,7 +178,7 @@ void ProfileInner::onInviteToGroup() { } void ProfileInner::onSendMessage() { - App::main()->showPeer(_peer->id); + App::main()->showPeerHistory(_peer->id, ShowAtUnreadMsgId); } void ProfileInner::onEnableNotifications() { @@ -250,7 +250,7 @@ void ProfileInner::onClearHistory() { } void ProfileInner::onClearHistorySure() { - App::main()->showPeer(0, 0, true); + App::main()->showDialogs(); App::wnd()->hideLayer(); App::main()->clearHistory(_peer); } @@ -358,7 +358,7 @@ void ProfileInner::onBotSettings() { for (int32 i = 0, l = _peerUser->botInfo->commands.size(); i != l; ++i) { QString cmd = _peerUser->botInfo->commands.at(i).command; if (!cmd.compare(qsl("settings"), Qt::CaseInsensitive)) { - App::main()->showPeer(_peer->id); + App::main()->showPeerHistory(_peer->id, ShowAtTheEndMsgId); App::main()->sendBotCommand('/' + cmd, 0); return; } @@ -370,7 +370,7 @@ void ProfileInner::onBotHelp() { for (int32 i = 0, l = _peerUser->botInfo->commands.size(); i != l; ++i) { QString cmd = _peerUser->botInfo->commands.at(i).command; if (!cmd.compare(qsl("help"), Qt::CaseInsensitive)) { - App::main()->showPeer(_peer->id); + App::main()->showPeerHistory(_peer->id, ShowAtTheEndMsgId); App::main()->sendBotCommand('/' + cmd, 0); return; } @@ -766,7 +766,7 @@ void ProfileInner::mouseReleaseEvent(QMouseEvent *e) { textlnkDown(TextLinkPtr()); if (lnk == textlnkOver()) { if (reBotCommand().match(lnk->encoded()).hasMatch()) { - App::main()->showPeer(_peer->id); + App::main()->showPeerHistory(_peer->id, ShowAtTheEndMsgId); } lnk->onClick(e->button()); } diff --git a/Telegram/SourceFiles/pspecific_mac.cpp b/Telegram/SourceFiles/pspecific_mac.cpp index b7fc57214..c782e6687 100644 --- a/Telegram/SourceFiles/pspecific_mac.cpp +++ b/Telegram/SourceFiles/pspecific_mac.cpp @@ -76,7 +76,7 @@ void MacPrivate::notifyClicked(unsigned long long peer, int msgid) { tomsg = false; } } - App::main()->showPeer(history->peer->id, tomsg ? msgid : 0, false, true); + App::main()->showPeerHistory(history->peer->id, tomsg ? msgid : ShowAtUnreadMsgId); App::wnd()->notifyClear(history); } } diff --git a/Telegram/SourceFiles/structs.cpp b/Telegram/SourceFiles/structs.cpp index bc8228867..d60be556e 100644 --- a/Telegram/SourceFiles/structs.cpp +++ b/Telegram/SourceFiles/structs.cpp @@ -775,7 +775,7 @@ void MessageLink::onClick(Qt::MouseButton button) const { if (current && current->history()->peer->id == peer()) { App::main()->pushReplyReturn(current); } - App::main()->showPeer(peer(), msgid()); + App::main()->showPeerHistory(peer(), msgid()); } } diff --git a/Telegram/SourceFiles/structs.h b/Telegram/SourceFiles/structs.h index f218adc24..4a9a9555d 100644 --- a/Telegram/SourceFiles/structs.h +++ b/Telegram/SourceFiles/structs.h @@ -25,6 +25,9 @@ typedef uint64 DocumentId; typedef uint64 WebPageId; typedef int32 MsgId; +static const MsgId ShowAtTheEndMsgId = -0x40000000; +static const MsgId ShowAtUnreadMsgId = 0; + struct NotifySettings { NotifySettings() : mute(0), sound("default"), previews(true), events(1) { } diff --git a/Telegram/SourceFiles/window.cpp b/Telegram/SourceFiles/window.cpp index ffdab7f45..c42a73ccd 100644 --- a/Telegram/SourceFiles/window.cpp +++ b/Telegram/SourceFiles/window.cpp @@ -287,7 +287,7 @@ void NotifyWindow::mousePressEvent(QMouseEvent *e) { App::wnd()->notifyClear(); } else { App::wnd()->hideSettings(); - App::main()->showPeer(peer, (history->peer->chat && item && item->notifyByFrom() && item->id > 0) ? item->id : 0, false, true); + App::main()->showPeerHistory(peer, (history->peer->chat && item && item->notifyByFrom() && item->id > 0) ? item->id : ShowAtUnreadMsgId); } e->ignore(); } diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index 939c89ea4..ec2de66d7 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.39 + 0.8.40 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index f7b4fba3dd00abc8e486487617843ec75577422e..804a6f3acfd6e026cb66eb52329eda538a477a60 100644 GIT binary patch delta 61 zcmZ3Yy+nIM0WY%&gTdrtUPBPQc{y)C6FZQ>pa&G(D4@GJOMr_JNkDw^5<#KGO9WW} D<;@R5 delta 61 zcmZ3Yy+nIM0WY&LgXQF6UPBPQc{y)C6FZQ>pvPb^d82^t<}3j&MkE38$x8%<7B3NG F0RZYv4`KiS diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index 8defca432..7b06d0e49 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -1705,7 +1705,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.39; + CURRENT_PROJECT_VERSION = 0.8.40; DEBUG_INFORMATION_FORMAT = dwarf; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -1723,7 +1723,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 0.8.39; + CURRENT_PROJECT_VERSION = 0.8.40; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = fast; GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h; @@ -1749,10 +1749,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.39; + CURRENT_PROJECT_VERSION = 0.8.40; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DYLIB_COMPATIBILITY_VERSION = 0.8; - DYLIB_CURRENT_VERSION = 0.8.39; + DYLIB_CURRENT_VERSION = 0.8.40; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -1886,10 +1886,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.39; + CURRENT_PROJECT_VERSION = 0.8.40; DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 0.8; - DYLIB_CURRENT_VERSION = 0.8.39; + DYLIB_CURRENT_VERSION = 0.8.40; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; diff --git a/Telegram/Version.sh b/Telegram/Version.sh index 6f9f1534a..e6f3290b4 100755 --- a/Telegram/Version.sh +++ b/Telegram/Version.sh @@ -1,2 +1,2 @@ -echo 0.8 8039 0.8.39 1 +echo 0.8 8040 0.8.40 1 # AppVersionStrMajor AppVersion AppVersionStr DevChannel diff --git a/XCODE.md b/XCODE.md index a7db5bee2..d68c98408 100644 --- a/XCODE.md +++ b/XCODE.md @@ -131,7 +131,7 @@ Then in Terminal go to **/Users/user/TBuild/Libraries/ffmpeg-2.6.3** and run LDFLAGS=`freetype-config --libs` PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig:/usr/X11/lib/pkgconfig - ./configure --prefix=/usr/local --disable-programs --disable-everything --enable-libopus --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=aasc --enable-decoder=mp1 --enable-decoder=mp1float --enable-decoder=mp2 --enable-decoder=mp2float --enable-decoder=mp3 --enable-decoder=mp3adu --enable-decoder=mp3adufloat --enable-decoder=mp3float --enable-decoder=mp3on4 --enable-decoder=mp3on4float --enable-decoder=wavpack --enable-decoder=opus --enable-decoder=vorbis --enable-decoder=wmalossless --enable-decoder=wmapro --enable-decoder=wmav1 --enable-decoder=wmav2 --enable-decoder=wmavoice --enable-encoder=libopus --enable-parser=aac --enable-parser=aac_latm --enable-parser=mpegaudio --enable-parser=opus --enable-parser=vorbis --enable-demuxer=aac --enable-demuxer=wav --enable-demuxer=mp3 --enable-demuxer=ogg --enable-demuxer=mov --enable-muxer=ogg --enable-muxer=opus --extra-cflags="-mmacosx-version-min=10.7" --extra-cxxflags="-mmacosx-version-min=10.7" --extra-ldflags="-mmacosx-version-min=10.7" + ./configure --prefix=/usr/local --disable-programs --disable-everything --enable-libopus --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=aasc --enable-decoder=mp1 --enable-decoder=mp1float --enable-decoder=mp2 --enable-decoder=mp2float --enable-decoder=mp3 --enable-decoder=mp3adu --enable-decoder=mp3adufloat --enable-decoder=mp3float --enable-decoder=mp3on4 --enable-decoder=mp3on4float --enable-decoder=wavpack --enable-decoder=opus --enable-decoder=vorbis --enable-decoder=wmalossless --enable-decoder=wmapro --enable-decoder=wmav1 --enable-decoder=wmav2 --enable-decoder=wmavoice --enable-decoder=flac --enable-encoder=libopus --enable-parser=aac --enable-parser=aac_latm --enable-parser=mpegaudio --enable-parser=opus --enable-parser=vorbis --enable-parser=flac --enable-demuxer=aac --enable-demuxer=wav --enable-demuxer=mp3 --enable-demuxer=ogg --enable-demuxer=mov --enable-demuxer=flac --enable-muxer=ogg --enable-muxer=opus --extra-cflags="-mmacosx-version-min=10.7" --extra-cxxflags="-mmacosx-version-min=10.7" --extra-ldflags="-mmacosx-version-min=10.7" make sudo make install From c553ed6775c20e84be2dbd97c316bbec9f1c9f94 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 17 Jul 2015 22:30:24 +0300 Subject: [PATCH 050/121] added flac mime type when sending files, version 0.8.40.dev --- Telegram/SourceFiles/localimageloader.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/localimageloader.cpp b/Telegram/SourceFiles/localimageloader.cpp index d929e5d8b..2e212aec6 100644 --- a/Telegram/SourceFiles/localimageloader.cpp +++ b/Telegram/SourceFiles/localimageloader.cpp @@ -168,9 +168,10 @@ void LocalImageLoaderPrivate::prepareImages() { bool isSong = false; QByteArray jpeg; if (type == ToPrepareDocument) { - if (mime == qstr("audio/mp3") || mime == qstr("audio/m4a") || mime == qstr("audio/aac") || mime == qstr("audio/ogg") || + if (mime == qstr("audio/mp3") || mime == qstr("audio/m4a") || mime == qstr("audio/aac") || mime == qstr("audio/ogg") || mime == qstr("audio/flac") || filename.endsWith(qstr(".mp3"), Qt::CaseInsensitive) || filename.endsWith(qstr(".m4a"), Qt::CaseInsensitive) || - filename.endsWith(qstr(".aac"), Qt::CaseInsensitive) || filename.endsWith(qstr(".ogg"), Qt::CaseInsensitive)) { + filename.endsWith(qstr(".aac"), Qt::CaseInsensitive) || filename.endsWith(qstr(".ogg"), Qt::CaseInsensitive) || + filename.endsWith(qstr(".flac"), Qt::CaseInsensitive)) { QImage cover; QByteArray coverBytes, coverFormat; From f0f0be945242f10c37816a30326a09cb244b80f5 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 21 Jul 2015 15:29:38 +0200 Subject: [PATCH 051/121] fixed Qt tray icon for KDE, using Qt tray icon for all graphic envs, testing --- Telegram/SourceFiles/pspecific_linux.cpp | 17 ++++++++++++----- Telegram/SourceFiles/window.cpp | 15 +++++++-------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/Telegram/SourceFiles/pspecific_linux.cpp b/Telegram/SourceFiles/pspecific_linux.cpp index 73b656e08..a59e15b8a 100644 --- a/Telegram/SourceFiles/pspecific_linux.cpp +++ b/Telegram/SourceFiles/pspecific_linux.cpp @@ -68,7 +68,7 @@ namespace { bool frameless = true; bool finished = true; - bool noQtTrayIcon = false; + bool noQtTrayIcon = false, noTryUnity = false; bool useGtkBase = false, useAppIndicator = false, useStatusIcon = false, trayIconChecked = false, useUnityCount = false; AppIndicator *_trayIndicator = 0; @@ -351,10 +351,16 @@ namespace { class _PsInitializer { public: _PsInitializer() { + static bool inited = false; + if (inited) return; + inited = true; + QString cdesktop = QString(getenv("XDG_CURRENT_DESKTOP")).toLower(); - noQtTrayIcon = (cdesktop == qstr("unity")) || (cdesktop == qstr("pantheon")) || (cdesktop == qstr("gnome")); + noQtTrayIcon = false;//(cdesktop == qstr("pantheon")) || (cdesktop == qstr("gnome")); + noTryUnity = (cdesktop != qstr("unity")); if (noQtTrayIcon) cSetSupportTray(false); + std::cout << "libs init..\n"; setupGtk(); setupUnity(); @@ -458,9 +464,9 @@ namespace { } void setupUnity() { - if (!useGtkBase || !noQtTrayIcon) return; + if (noTryUnity) return; - QLibrary lib_unity(qstr("unity"), 9, 0); + QLibrary lib_unity(qstr("unity"), 9, 0); if (!loadLibrary(lib_unity, "unity", 9)) return; if (!loadFunction(lib_unity, "unity_launcher_entry_get_for_desktop_id", ps_unity_launcher_entry_get_for_desktop_id)) return; @@ -470,7 +476,6 @@ namespace { std::cout << "unity count api loaded\n"; } }; - _PsInitializer _psInitializer; class _PsEventFilter : public QAbstractNativeEventFilter { public: @@ -933,6 +938,8 @@ void PsMainWindow::psPlatformNotify(HistoryItem *item, int32 fwdCount) { } PsApplication::PsApplication(int &argc, char **argv) : QApplication(argc, argv) { + _PsInitializer _psInitializer; + Q_UNUSED(_psInitializer); } void PsApplication::psInstallEventFilter() { diff --git a/Telegram/SourceFiles/window.cpp b/Telegram/SourceFiles/window.cpp index c42a73ccd..c83df1509 100644 --- a/Telegram/SourceFiles/window.cpp +++ b/Telegram/SourceFiles/window.cpp @@ -429,16 +429,11 @@ void Window::init() { title = new TitleWidget(this); - psInitSize(); - psUpdateWorkmode(); -} - -void Window::firstShow() { #ifdef Q_OS_WIN trayIconMenu = new ContextMenu(this); #else - trayIconMenu = new QMenu(this); - trayIconMenu->setFont(QFont("Tahoma")); + trayIconMenu = new QMenu(this); + trayIconMenu->setFont(QFont("Tahoma")); #endif if (cPlatform() == dbipWindows || cPlatform() == dbipMac) { trayIconMenu->addAction(lang(lng_minimize_to_tray), this, SLOT(minimizeToTray()))->setEnabled(true); @@ -449,8 +444,12 @@ void Window::firstShow() { trayIconMenu->addAction(lang(lng_quit_from_tray), this, SLOT(quitFromTray()))->setEnabled(true); } - psFirstShow(); + psInitSize(); + psUpdateWorkmode(); +} +void Window::firstShow() { + psFirstShow(); updateTrayMenu(); } From ff0f8c254fe9f0635bb13c2c9fd2e29966fde310 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 21 Jul 2015 16:55:23 +0200 Subject: [PATCH 052/121] new dev version 0.8.41 with pretty number formatting, Qt tray icon for all linux systems and more --- Telegram/PrepareWin.bat | 8 +- Telegram/Resources/numbers.txt | 231 ++++++++++++++++++++ Telegram/SourceFiles/_other/genstyles.cpp | 152 +++++++++++++ Telegram/SourceFiles/app.cpp | 115 ++++++++-- Telegram/SourceFiles/app.h | 15 +- Telegram/SourceFiles/application.cpp | 4 +- Telegram/SourceFiles/config.h | 4 +- Telegram/SourceFiles/gui/flatinput.cpp | 52 ++++- Telegram/SourceFiles/gui/flatinput.h | 11 + Telegram/SourceFiles/gui/phoneinput.cpp | 93 +++++++- Telegram/SourceFiles/gui/phoneinput.h | 9 +- Telegram/SourceFiles/history.cpp | 11 +- Telegram/SourceFiles/historywidget.cpp | 2 +- Telegram/SourceFiles/intro/introphone.cpp | 4 +- Telegram/SourceFiles/mainwidget.cpp | 2 +- Telegram/SourceFiles/numbers.h | 21 ++ Telegram/SourceFiles/profilewidget.cpp | 4 +- Telegram/SourceFiles/structs.h | 2 +- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.vcxproj | 7 + Telegram/Telegram.vcxproj.filters | 7 + Telegram/Telegram.xcodeproj/project.pbxproj | 12 +- Telegram/Version.sh | 2 +- 24 files changed, 697 insertions(+), 73 deletions(-) create mode 100644 Telegram/Resources/numbers.txt create mode 100644 Telegram/SourceFiles/numbers.h diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index 1ea544eb8..a47c2894d 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,10 +1,10 @@ @echo OFF set "AppVersionStrMajor=0.8" -set "AppVersion=8040" -set "AppVersionStrSmall=0.8.40" -set "AppVersionStr=0.8.40" -set "AppVersionStrFull=0.8.40.0" +set "AppVersion=8041" +set "AppVersionStrSmall=0.8.41" +set "AppVersionStr=0.8.41" +set "AppVersionStrFull=0.8.41.0" set "DevChannel=1" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/Resources/numbers.txt b/Telegram/Resources/numbers.txt new file mode 100644 index 000000000..2cc6c13a9 --- /dev/null +++ b/Telegram/Resources/numbers.txt @@ -0,0 +1,231 @@ +1876;JM;Jamaica;1876 XXX XXXX;11; +1869;KN;Saint Kitts & Nevis;1869 XXX XXXX;11; +1868;TT;Trinidad & Tobago;1868 XXX XXXX;11; +1784;VC;Saint Vincent & the Grenadines;1784 XXX XXXX;11; +1767;DM;Dominica;1767 XXX XXXX;11; +1758;LC;Saint Lucia;1758 XXX XXXX;11; +1721;SX;Sint Maarten;1721 XXX XXXX;11; +1684;AS;American Samoa;1684 XXX XXXX;11; +1671;GU;Guam;1671 XXX XXXX;11; +1670;MP;Northern Mariana Islands;1670 XXX XXXX;11; +1664;MS;Montserrat;1664 XXX XXXX;11; +1649;TC;Turks & Caicos Islands;1649 XXX XXXX;11; +1473;GD;Grenada;1473 XXX XXXX;11; +1441;BM;Bermuda;1441 XXX XXXX;11; +1345;KY;Cayman Islands;1345 XXX XXXX;11; +1340;VI;US Virgin Islands;1340 XXX XXXX;11; +1284;VG;British Virgin Islands;1284 XXX XXXX;11; +1268;AG;Antigua & Barbuda;1268 XXX XXXX;11; +1264;AI;Anguilla;1264 XXX XXXX;11; +1246;BB;Barbados;1246 XXX XXXX;11; +1242;BS;Bahamas;1242 XXX XXXX;11; +998;UZ;Uzbekistan;998 XX XXXXXXX;12; +996;KG;Kyrgyzstan +995;GE;Georgia +994;AZ;Azerbaijan;994 XX XXX XX XX;12; +993;TM;Turkmenistan;993 XX XXXXXX;11; +992;TJ;Tajikistan +977;NP;Nepal +976;MN;Mongolia +975;BT;Bhutan +974;QA;Qatar +973;BH;Bahrain;973 XXXX XXXX;11; +972;IL;Israel;972 XX XXX XXXX;12; +971;AE;United Arab Emirates;971 XX XXX XXXX;12; +970;PS;Palestine;970 XXX XX XXXX;12; +968;OM;Oman;968 XXXX XXXX;11; +967;YE;Yemen;967 XXX XXX XXX;12; +966;SA;Saudi Arabia; +965;KW;Kuwait;965 XXXX XXXX;11; +964;IQ;Iraq;964 XXX XXX XXXX;13; +963;SY;Syria +962;JO;Jordan;962 X XXXX XXXX;12; +961;LB;Lebanon +960;MV;Maldives +886;TW;Taiwan +880;BD;Bangladesh +856;LA;Laos +855;KH;Cambodia +853;MO;Macau +852;HK;Hong Kong +850;KP;North Korea +692;MH;Marshall Islands +691;FM;Micronesia +690;TK;Tokelau +689;PF;French Polynesia +688;TV;Tuvalu +687;NC;New Caledonia +686;KI;Kiribati +685;WS;Samoa +683;NU;Niue +682;CK;Cook Islands +681;WF;Wallis & Futuna +680;PW;Palau +679;FJ;Fiji +678;VU;Vanuatu +677;SB;Solomon Islands +676;TO;Tonga +675;PG;Papua New Guinea +674;NR;Nauru +673;BN;Brunei Darussalam;673 XXX XXXX;10; +672;NF;Norfolk Island +670;TL;Timor-Leste +599;BQ;Bonaire, Sint Eustatius & Saba +599;CW;Curaçao +598;UY;Uruguay;598 XXXX XXXX;11; +597;SR;Suriname;597 XXX XXXX;10; +596;MQ;Martinique +595;PY;Paraguay;595 XXX XXX XXX;12; +594;GF;French Guiana +593;EC;Ecuador +592;GY;Guyana +591;BO;Bolivia;591 X XXX XXXX;11; +590;GP;Guadeloupe +509;HT;Haiti +508;PM;Saint Pierre & Miquelon +507;PA;Panama;507 XXXX XXXX;11; +506;CR;Costa Rica +505;NI;Nicaragua;505 XXXX XXXX;11; +504;HN;Honduras;504 XXXX XXXX;11; +503;SV;El Salvador;503 XXXX XXXX;11; +502;GT;Guatemala;502 X XXX XXXX;11; +501;BZ;Belize +500;FK;Falkland Islands +423;LI;Liechtenstein +421;SK;Slovakia +420;CZ;Czech Republic +389;MK;Macedonia +387;BA;Bosnia & Herzegovina +386;SI;Slovenia +385;HR;Croatia +382;ME;Montenegro +381;RS;Serbia;381 XX XXX XXXX;12; +380;UA;Ukraine;380 XX XXX XX XX;12; +378;SM;San Marino;378 XXX XXX XXXX;13; +377;MC;Monaco;377 XXXX XXXX;11; +376;AD;Andorra;376 XX XX XX;9; +375;BY;Belarus;375 XX XXX XXXX;12; +374;AM;Armenia;374 XX XXX XXX;11; +373;MD;Moldova;373 XX XXX XXX;11; +372;EE;Estonia; +371;LV;Latvia;371 XXX XXXXX;11; +370;LT;Lithuania;370 XXX XXXXX;11; +359;BG;Bulgaria; +358;FI;Finland; +357;CY;Cyprus;357 XXXX XXXX;11; +356;MT;Malta;356 XX XX XX XX;11; +355;AL;Albania;355 XX XXX XXXX;12; +354;IS;Iceland;354 XXX XXXX;10; +353;IE;Ireland;353 XX XXX XXXX;12; +352;LU;Luxembourg +351;PT;Portugal;351 X XXXX XXXX;12; +350;GI;Gibraltar;350 XXXX XXXX;11; +299;GL;Greenland;299 XXX XXX;9; +298;FO;Faroe Islands;298 XXX XXX;9; +297;AW;Aruba;297 XXX XXXX;10; +291;ER;Eritrea;291 X XXX XXX;10; +290;SH;Saint Helena;290 XX XXX;8; +269;KM;Comoros;269 XXX XXXX;10; +268;SZ;Swaziland;268 XXXX XXXX;11; +267;BW;Botswana;267 XX XXX XXX;11; +266;LS;Lesotho;266 XX XXX XXX;11; +265;MW;Malawi +264;NA;Namibia;264 XX XXX XXXX;12; +263;ZW;Zimbabwe;263 XX XXX XXXX;12; +262;RE;Réunion;262 XXX XXX XXX;12; +261;MG;Madagascar;261 XX XX XXX XX;12; +260;ZM;Zambia;260 XX XXX XXXX;12; +258;MZ;Mozambique;258 XX XXX XXXX;12; +257;BI;Burundi;257 XX XX XXXX;11; +256;UG;Uganda;256 XX XXX XXXX;12; +255;TZ;Tanzania;255 XX XXX XXXX;12; +254;KE;Kenya;254 XXX XXX XXX;12; +253;DJ;Djibouti;253 XX XX XX XX;11; +252;SO;Somalia;252 XX XXX XXX;11; +251;ET;Ethiopia;251 XX XXX XXXX;12; +250;RW;Rwanda;250 XXX XXX XXX;12; +249;SD;Sudan;249 XX XXX XXXX;12; +248;SC;Seychelles;248 X XX XX XX;10; +247;SH;Saint Helena;247 XXXX;7; +246;IO;Diego Garcia;246 XXX XXXX;10; +245;GW;Guinea-Bissau;245 XXX XXXX;10; +244;AO;Angola;244 XXX XXX XXX;12; +243;CD;Congo (Dem. Rep.);243 XX XXX XXXX;12; +242;CG;Congo (Rep.);242 XX XXX XXXX;12; +241;GA;Gabon;241 X XX XX XX;10; +240;GQ;Equatorial Guinea;240 XXX XXX XXX;12; +239;ST;São Tomé & Príncipe;239 XX XXXXX;10; +238;CV;Cape Verde;238 XXX XXXX;10; +237;CM;Cameroon;237 XXXX XXXX;11; +236;CF;Central African Rep.;236 XX XX XX XX;11; +235;TD;Chad;235 XX XX XX XX;11; +234;NG;Nigeria +233;GH;Ghana +232;SL;Sierra Leone;232 XX XXX XXX;11; +231;LR;Liberia; +230;MU;Mauritius; +229;BJ;Benin;229 XX XXX XXX;11; +228;TG;Togo;228 XX XXX XXX;11; +227;NE;Niger;227 XX XX XX XX;11; +226;BF;Burkina Faso;226 XX XX XX XX;11; +225;CI;Côte d`Ivoire;225 XX XXX XXX;11; +224;GN;Guinea;224 XXX XXX XXX;12; +223;ML;Mali;223 XXXX XXXX;11; +222;MR;Mauritania;222 XXXX XXXX;11; +221;SN;Senegal;221 XX XXX XXXX;12; +220;GM;Gambia;220 XXX XXXX;10; +218;LY;Libya;218 XX XXX XXXX;12; +216;TN;Tunisia;216 XX XXX XXX;11; +213;DZ;Algeria;213 XXX XX XX XX;12; +212;MA;Morocco;212 XX XXX XXXX;12; +211;SS;South Sudan;211 XX XXX XXXX;12; +98;IR;Iran;98 XXX XXX XXXX;12; +95;MM;Myanmar; +94;LK;Sri Lanka;94 XX XXX XXXX;11; +93;AF;Afghanistan;93 XXX XXX XXX;11; +92;PK;Pakistan;92 XXX XXX XXXX;12; +91;IN;India;91 XXXXX XXXXX;12; +90;TR;Turkey;90 XXX XXX XXXX;12 +86;CN;China;86 XXX XXXX XXXX;13; +84;VN;Vietnam; +82;KR;South Korea; +81;JP;Japan;81 XX XXXX XXXX;12; +66;TH;Thailand;66 X XXXX XXXX;11; +65;SG;Singapore;65 XXXX XXXX;10; +64;NZ;New Zealand; +63;PH;Philippines;63 XXX XXX XXXX;12; +62;ID;Indonesia; +61;AU;Australia;61 XXX XXX XXX;11; +60;MY;Malaysia; +58;VE;Venezuela;58 XXX XXX XXXX;12; +57;CO;Colombia;57 XXX XXX XXXX;12; +56;CL;Chile;56 X XXXX XXXX;11; +55;BR;Brazil;55 XX XXXXX XXXX;13; +54;AR;Argentina; +53;CU;Cuba;53 XXXX XXXX;10; +52;MX;Mexico; +51;PE;Peru;51 XXX XXX XXX;11; +49;DE;Germany;49 XXX XXXXXXXX;13; +48;PL;Poland;48 XX XXX XXXX;11; +47;NO;Norway;47 XXXX XXXX;10; +46;SE;Sweden;46 XX XXX XXXX;11; +45;DK;Denmark;45 XXXX XXXX;10; +44;GB;United Kingdom;44 XXXX XXXXXX;12; +43;AT;Austria; +41;CH;Switzerland;41 XX XXX XXXX;11; +40;RO;Romania;40 XXX XXX XXX;11; +39;IT;Italy;39 XXX XXX XXXX;12; +36;HU;Hungary;36 XX XXX XXXX;11; +34;ES;Spain;34 XXX XXX XXX;11; +33;FR;France;33 X XX XX XX XX;11; +32;BE;Belgium;32 XXX XX XX XX;11; +31;NL;Netherlands;31 X XX XX XX XX;11; +30;GR;Greece;30 XX XXXX XXXX;12; +27;ZA;South Africa;27 XX XXX XXXX;11; +20;EG;Egypt;20 XX XXX XXXX;11; +7;RU;Russian Federation;7 XXX XXX XX XX;11; +7;KZ;Kazakhstan;7 XXX XXX XX XX;11 +1;US;USA;1 XXX XXX XXXX;11; +1;PR;Puerto Rico;1 XXX XXX XXXX;11; +1;DO;Dominican Rep.;1 XXX XXX XXXX;11; +1;CA;Canada;1 XXX XXX XXXX;11; \ No newline at end of file diff --git a/Telegram/SourceFiles/_other/genstyles.cpp b/Telegram/SourceFiles/_other/genstyles.cpp index f4797d0a8..5f705afb5 100644 --- a/Telegram/SourceFiles/_other/genstyles.cpp +++ b/Telegram/SourceFiles/_other/genstyles.cpp @@ -18,6 +18,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "genstyles.h" #include +#include #ifdef Q_OS_WIN Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin) @@ -1345,6 +1346,12 @@ bool genStyles(const QString &classes_in, const QString &classes_out, const QStr QCoreApplication::exit(1); return false; } + QString numbers_cpp = QString(styles_cpp).replace("style_auto.cpp", "numbers.cpp"); + if (numbers_cpp == styles_cpp) { + cout << "Bad output file name '" << numbers_cpp.toUtf8().constData() << "'!\n"; + QCoreApplication::exit(1); + return false; + } QFile f(styles_in); if (!f.open(QIODevice::ReadOnly)) { @@ -1353,6 +1360,20 @@ bool genStyles(const QString &classes_in, const QString &classes_out, const QStr return false; } + QString numbers_in = QString(styles_in).replace("style.txt", "numbers.txt"); + if (numbers_in == styles_in) { + cout << "Bad input file name '" << numbers_in.toUtf8().constData() << "'!\n"; + QCoreApplication::exit(1); + return false; + } + + QFile fnum(numbers_in); + if (!fnum.open(QIODevice::ReadOnly)) { + cout << "Could not open numbers input file '" << numbers_in.toUtf8().constData() << "'!\n"; + QCoreApplication::exit(1); + return false; + } + QImage sprites[variantsCount]; int widths[variantsCount] = { 0 }; variantSprites = sprites; @@ -1854,6 +1875,137 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org\n\ if (!cpp.open(QIODevice::WriteOnly)) throw Exception("Could not open style_auto.cpp for writing!"); if (cpp.write(cppText) != cppText.size()) throw Exception("Could not open style_auto.cpp for writing!"); } + + QMap > numberRules; + QList numlines = fnum.readAll().split('\n'); + for (int i = 0, l = numlines.size(); i < l; ++i) { + QList strs = numlines.at(i).split(';'); + if (strs.isEmpty()) continue; + + QString code = QString::fromLatin1(strs.at(0)).trimmed(); + if (code.isEmpty() || QRegularExpression("[^0-9]").match(code).hasMatch()) { + throw Exception("Bad string in number.txt: " + numlines.at(i)); + } + + if (strs.size() < 5) { + numberRules.insert(code, QVector()); + } else { + QString lenstr = QString::fromLatin1(strs.at(4)).trimmed(), pattern = QString::fromLatin1(strs.at(3)).trimmed(); + if (QRegularExpression("[^0-9]").match(lenstr).hasMatch() || !pattern.startsWith(code + ' ')) { + throw Exception("Bad string in number.txt: " + numlines.at(i)); + } + QStringList lst = pattern.mid(code.size() + 1).split(' '); + int len = lenstr.toInt(), sum = code.size(); + QVector result; + for (int j = 0, c = lst.size(); j < c; ++j) { + if (lst.at(j).isEmpty()) continue; + if (QRegularExpression("[^X]").match(lst.at(j)).hasMatch()) { + throw Exception("Bad string in number.txt: " + numlines.at(i)); + } + result.push_back(lst.at(j).size()); + sum += lst.at(j).size(); + } + if (sum != len) { + throw Exception("Bad length in number.txt: " + numlines.at(i)); + } + numberRules.insert(code, result); + } + } + + QByteArray numText; + { + QTextStream tnum(&numText); + tnum << "\ +/*\n\ +Created from \'/Resources/style.txt\' by \'/MetaStyle\' project\n\ +\n\ +WARNING! All changes made in this file will be lost!\n\ +\n\ +This file is part of Telegram Desktop,\n\ +the official desktop version of Telegram messaging app, see https://telegram.org\n\ +\n\ +Telegram Desktop is free software: you can redistribute it and/or modify\n\ +it under the terms of the GNU General Public License as published by\n\ +the Free Software Foundation, either version 3 of the License, or\n\ +(at your option) any later version.\n\ +\n\ +It is distributed in the hope that it will be useful,\n\ +but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ +GNU General Public License for more details.\n\ +\n\ +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE\n\ +Copyright (c) 2014 John Preston, https://desktop.telegram.org\n\ +*/\n"; + tnum << "#include \"stdafx.h\"\n#include \"numbers.h\"\n\n"; + tnum << "QVector phoneNumberParse(const QString &number) {\n"; + tnum << "\tQVector result;\n\n"; + tnum << "\tint32 len = number.size();\n"; + tnum << "\tif (len > 0) switch (number.at(0).unicode()) {\n"; + QString already; + for (QMap >::const_iterator i = numberRules.cend(), e = numberRules.cbegin(); i != e;) { + --i; + QString k = i.key(); + bool onlyLastChanged = true; + while (!already.isEmpty() && (already.size() > k.size() || !already.endsWith(k.at(already.size() - 1)))) { + if (!onlyLastChanged) { + tnum << QString("\t").repeated(1 + already.size()) << "}\n"; + tnum << QString("\t").repeated(1 + already.size()) << "return result;\n"; + } + already = already.mid(0, already.size() - 1); + onlyLastChanged = false; + } + if (already == k) { + tnum << QString("\t").repeated(1 + already.size()) << "}\n"; + } else { + bool onlyFirstCheck = true; + while (already.size() < k.size()) { + if (!onlyFirstCheck) tnum << QString("\t").repeated(1 + already.size()) << "if (len > " << already.size() << ") switch (number.at(" << already.size() << ").unicode()) {\n"; + tnum << QString("\t").repeated(1 + already.size()) << "case '" << k.at(already.size()).toLatin1() << "':\n"; + already.push_back(k.at(already.size())); + onlyFirstCheck = false; + } + } + if (i.value().isEmpty()) { + tnum << QString("\t").repeated(1 + already.size()) << "return QVector(1, " << k.size() << ");\n"; + } else { + tnum << QString("\t").repeated(1 + already.size()) << "result.reserve(" << (i.value().size() + 1) << ");\n"; + tnum << QString("\t").repeated(1 + already.size()) << "result.push_back(" << k.size() << ");\n"; + for (int j = 0, l = i.value().size(); j < l; ++j) { + tnum << QString("\t").repeated(1 + already.size()) << "result.push_back(" << i.value().at(j) << ");\n"; + } + tnum << QString("\t").repeated(1 + already.size()) << "return result;\n"; + } + } + bool onlyLastChanged = true; + while (!already.isEmpty()) { + if (!onlyLastChanged) { + tnum << QString("\t").repeated(1 + already.size()) << "}\n"; +// tnum << QString("\t").repeated(1 + already.size()) << "\return result;\n"; + } + already = already.mid(0, already.size() - 1); + onlyLastChanged = false; + } + tnum << "\t}\n\n"; + tnum << "\treturn result;\n"; + tnum << "}\n"; + } + QFile num(numbers_cpp); + bool write_num = true; + if (num.open(QIODevice::ReadOnly)) { + QByteArray wasNum = num.readAll(); + if (wasNum.size() == numText.size()) { + if (!memcmp(wasNum.constData(), numText.constData(), numText.size())) { + write_num = false; + } + } + num.close(); + } + if (write_num) { + cout << "Numbers compiled, writing..\n"; + if (!num.open(QIODevice::WriteOnly)) throw Exception("Could not open numbers.cpp for writing!"); + if (num.write(numText) != numText.size()) throw Exception("Could not open numbers.cpp for writing!"); + } } catch (exception &e) { cout << e.what() << "\n"; QCoreApplication::exit(1); diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index ee59eb84e..a5b5659a2 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -26,6 +26,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "localstorage.h" +#include "numbers.h" + namespace { bool quiting = false; @@ -107,7 +109,27 @@ namespace { namespace App { QString formatPhone(QString phone) { - return '+' + phone.replace(QRegularExpression(qsl("[^\\d]")), QString()); + if (phone.isEmpty()) return QString(); + QString number = phone; + for (const QChar *ch = phone.constData(), *e = ch + phone.size(); ch != e; ++ch) { + if (ch->unicode() < '0' || ch->unicode() > '9') { + number = phone.replace(QRegularExpression(qsl("[^\\d]")), QString()); + } + } + QVector groups = phoneNumberParse(number); + if (groups.isEmpty()) return '+' + number; + + QString result; + result.reserve(number.size() + groups.size() + 1); + result.append('+'); + int32 sum = 0; + for (int32 i = 0, l = groups.size(); i < l; ++i) { + result.append(number.midRef(sum, groups.at(i))); + sum += groups.at(i); + if (sum < number.size()) result.append(' '); + } + if (sum < number.size()) result.append(number.midRef(sum)); + return result; } Application *app() { @@ -381,13 +403,22 @@ namespace App { data->access = UserNoAccess; status = &emptyStatus; } else { - data->setPhone(d.has_phone() ? qs(d.vphone) : QString()); + QString phone = d.has_phone() ? qs(d.vphone) : QString(); QString fname = d.has_first_name() ? textOneLine(qs(d.vfirst_name)) : QString(); QString lname = d.has_last_name() ? textOneLine(qs(d.vlast_name)) : QString(); QString uname = d.has_username() ? textOneLine(qs(d.vusername)) : QString(); + + bool phoneChanged = (data->phone != phone); + if (phoneChanged) data->setPhone(phone); + + bool nameChanged = (data->firstName != fname) || (data->lastName != lname); + bool showPhone = !isServiceUser(data->id) && !(flags & (MTPDuser_flag_self | MTPDuser_flag_contact | MTPDuser_flag_mutual_contact)); - QString pname = (showPhone && !data->phone.isEmpty()) ? formatPhone(data->phone) : QString(); - data->setName(fname, lname, QString(), uname); + bool showPhoneChanged = !isServiceUser(data->id) && !(flags & (MTPDuser_flag_self)) && ((showPhone && data->contact) || (!showPhone && !data->contact)); + + QString pname = (showPhoneChanged || phoneChanged || nameChanged) ? ((showPhone && !phone.isEmpty()) ? formatPhone(phone) : QString()) : data->nameOrPhone; + + data->setName(fname, lname, pname, uname); if (d.has_photo()) { data->setPhoto(d.vphoto); } else { @@ -825,6 +856,7 @@ namespace App { UserData *user = userLoaded(userId.v); if (user) { bool wasContact = (user->contact > 0); + bool wasShowPhone = !user->contact; switch (myLink.type()) { case mtpc_contactLinkContact: user->contact = 1; @@ -855,7 +887,12 @@ namespace App { App::main()->removeContact(user); } } - user->setName(textOneLine(user->firstName), textOneLine(user->lastName), (user->contact || isServiceUser(user->id) || user->phone.isEmpty()) ? QString() : App::formatPhone(user->phone), textOneLine(user->username)); + + bool showPhone = !isServiceUser(user->id) && (user->input.type() != mtpc_inputPeerSelf) && !user->contact; + bool showPhoneChanged = !isServiceUser(user->id) && (user->input.type() != mtpc_inputPeerSelf) && ((showPhone && !wasShowPhone) || (!showPhone && wasShowPhone)); + if (showPhoneChanged) { + user->setName(textOneLine(user->firstName), textOneLine(user->lastName), showPhone ? App::formatPhone(user->phone) : QString(), textOneLine(user->username)); + } if (App::main()) { if (emitPeerUpdated) { App::main()->peerUpdated(user); @@ -891,7 +928,7 @@ namespace App { return feedPhoto(photo.c_photo(), convert); } break; case mtpc_photoEmpty: { - return App::photo(photo.c_photoEmpty().vid.v, convert); + return App::photoSet(photo.c_photoEmpty().vid.v, convert, 0, 0, 0, ImagePtr(), ImagePtr(), ImagePtr()); } break; } return App::photo(0); @@ -935,7 +972,7 @@ namespace App { switch (photo.type()) { case mtpc_photo: { const MTPDphoto &ph(photo.c_photo()); - return App::photo(ph.vid.v, 0, ph.vaccess_hash.v, ph.vuser_id.v, ph.vdate.v, ImagePtr(*thumb, "JPG"), ImagePtr(*medium, "JPG"), ImagePtr(*full, "JPG")); + return App::photoSet(ph.vid.v, 0, ph.vaccess_hash.v, ph.vuser_id.v, ph.vdate.v, ImagePtr(*thumb, "JPG"), ImagePtr(*medium, "JPG"), ImagePtr(*full, "JPG")); } break; case mtpc_photoEmpty: return App::photo(photo.c_photoEmpty().vid.v); } @@ -990,13 +1027,13 @@ namespace App { } } if (thumb && medium && full) { - return App::photo(photo.vid.v, convert, photo.vaccess_hash.v, photo.vuser_id.v, photo.vdate.v, App::image(*thumb), App::image(*medium), App::image(*full)); + return App::photoSet(photo.vid.v, convert, photo.vaccess_hash.v, photo.vuser_id.v, photo.vdate.v, App::image(*thumb), App::image(*medium), App::image(*full)); } - return App::photo(photo.vid.v, convert); + return App::photoSet(photo.vid.v, convert, 0, 0, 0, ImagePtr(), ImagePtr(), ImagePtr()); } VideoData *feedVideo(const MTPDvideo &video, VideoData *convert) { - return App::video(video.vid.v, convert, video.vaccess_hash.v, video.vuser_id.v, video.vdate.v, video.vduration.v, video.vw.v, video.vh.v, App::image(video.vthumb), video.vdc_id.v, video.vsize.v); + return App::videoSet(video.vid.v, convert, video.vaccess_hash.v, video.vuser_id.v, video.vdate.v, video.vduration.v, video.vw.v, video.vh.v, App::image(video.vthumb), video.vdc_id.v, video.vsize.v); } AudioData *feedAudio(const MTPaudio &audio, AudioData *convert) { @@ -1005,14 +1042,14 @@ namespace App { return feedAudio(audio.c_audio(), convert); } break; case mtpc_audioEmpty: { - return App::audio(audio.c_audioEmpty().vid.v, convert); + return App::audioSet(audio.c_audioEmpty().vid.v, convert, 0, 0, 0, QString(), 0, 0, 0); } break; } return App::audio(0); } AudioData *feedAudio(const MTPDaudio &audio, AudioData *convert) { - return App::audio(audio.vid.v, convert, audio.vaccess_hash.v, audio.vuser_id.v, audio.vdate.v, qs(audio.vmime_type), audio.vduration.v, audio.vdc_id.v, audio.vsize.v); + return App::audioSet(audio.vid.v, convert, audio.vaccess_hash.v, audio.vuser_id.v, audio.vdate.v, qs(audio.vmime_type), audio.vduration.v, audio.vdc_id.v, audio.vsize.v); } DocumentData *feedDocument(const MTPdocument &document, const QPixmap &thumb) { @@ -1043,11 +1080,11 @@ namespace App { } WebPageData *feedWebPage(const MTPDwebPage &webpage, WebPageData *convert) { - return App::webPage(webpage.vid.v, convert, webpage.has_type() ? qs(webpage.vtype) : qsl("article"), qs(webpage.vurl), qs(webpage.vdisplay_url), webpage.has_site_name() ? qs(webpage.vsite_name) : QString(), webpage.has_title() ? qs(webpage.vtitle) : QString(), webpage.has_description() ? qs(webpage.vdescription) : QString(), webpage.has_photo() ? App::feedPhoto(webpage.vphoto) : 0, webpage.has_duration() ? webpage.vduration.v : 0, webpage.has_author() ? qs(webpage.vauthor) : QString(), 0); + return App::webPageSet(webpage.vid.v, convert, webpage.has_type() ? qs(webpage.vtype) : qsl("article"), qs(webpage.vurl), qs(webpage.vdisplay_url), webpage.has_site_name() ? qs(webpage.vsite_name) : QString(), webpage.has_title() ? qs(webpage.vtitle) : QString(), webpage.has_description() ? qs(webpage.vdescription) : QString(), webpage.has_photo() ? App::feedPhoto(webpage.vphoto) : 0, webpage.has_duration() ? webpage.vduration.v : 0, webpage.has_author() ? qs(webpage.vauthor) : QString(), 0); } WebPageData *feedWebPage(const MTPDwebPagePending &webpage, WebPageData *convert) { - return App::webPage(webpage.vid.v, convert, QString(), QString(), QString(), QString(), QString(), QString(), 0, 0, QString(), webpage.vdate.v); + return App::webPageSet(webpage.vid.v, convert, QString(), QString(), QString(), QString(), QString(), QString(), 0, 0, QString(), webpage.vdate.v); } WebPageData *feedWebPage(const MTPWebPage &webpage) { @@ -1131,7 +1168,15 @@ namespace App { return App::peer(App::peerFromChat(chat))->asChat(); } - PhotoData *photo(const PhotoId &photo, PhotoData *convert, const uint64 &access, int32 user, int32 date, const ImagePtr &thumb, const ImagePtr &medium, const ImagePtr &full) { + PhotoData *photo(const PhotoId &photo) { + PhotosData::const_iterator i = photosData.constFind(photo); + if (i == photosData.cend()) { + i = photosData.insert(photo, new PhotoData(photo)); + } + return i.value(); + } + + PhotoData *photoSet(const PhotoId &photo, PhotoData *convert, const uint64 &access, int32 user, int32 date, const ImagePtr &thumb, const ImagePtr &medium, const ImagePtr &full) { if (convert) { if (convert->id != photo) { PhotosData::iterator i = photosData.find(convert->id); @@ -1185,7 +1230,15 @@ namespace App { return result; } - VideoData *video(const VideoId &video, VideoData *convert, const uint64 &access, int32 user, int32 date, int32 duration, int32 w, int32 h, const ImagePtr &thumb, int32 dc, int32 size) { + VideoData *video(const VideoId &video) { + VideosData::const_iterator i = videosData.constFind(video); + if (i == videosData.cend()) { + i = videosData.insert(video, new VideoData(video)); + } + return i.value(); + } + + VideoData *videoSet(const VideoId &video, VideoData *convert, const uint64 &access, int32 user, int32 date, int32 duration, int32 w, int32 h, const ImagePtr &thumb, int32 dc, int32 size) { if (convert) { if (convert->id != video) { VideosData::iterator i = videosData.find(convert->id); @@ -1233,7 +1286,15 @@ namespace App { return result; } - AudioData *audio(const AudioId &audio, AudioData *convert, const uint64 &access, int32 user, int32 date, const QString &mime, int32 duration, int32 dc, int32 size) { + AudioData *audio(const AudioId &audio) { + AudiosData::const_iterator i = audiosData.constFind(audio); + if (i == audiosData.cend()) { + i = audiosData.insert(audio, new AudioData(audio)); + } + return i.value(); + } + + AudioData *audioSet(const AudioId &audio, AudioData *convert, const uint64 &access, int32 user, int32 date, const QString &mime, int32 duration, int32 dc, int32 size) { if (convert) { if (convert->id != audio) { AudiosData::iterator i = audiosData.find(convert->id); @@ -1375,7 +1436,15 @@ namespace App { return result; } - WebPageData *webPage(const WebPageId &webPage, WebPageData *convert, const QString &type, const QString &url, const QString &displayUrl, const QString &siteName, const QString &title, const QString &description, PhotoData *photo, int32 duration, const QString &author, int32 pendingTill) { + WebPageData *webPage(const WebPageId &webPage) { + WebPagesData::const_iterator i = webPagesData.constFind(webPage); + if (i == webPagesData.cend()) { + i = webPagesData.insert(webPage, new WebPageData(webPage)); + } + return i.value(); + } + + WebPageData *webPageSet(const WebPageId &webPage, WebPageData *convert, const QString &type, const QString &url, const QString &displayUrl, const QString &siteName, const QString &title, const QString &description, PhotoData *photo, int32 duration, const QString &author, int32 pendingTill) { if (convert) { if (convert->id != webPage) { WebPagesData::iterator i = webPagesData.find(convert->id); @@ -1433,7 +1502,15 @@ namespace App { return result; } - ImageLinkData *imageLink(const QString &imageLink, ImageLinkType type, const QString &url) { + ImageLinkData *imageLink(const QString &imageLink) { + ImageLinksData::const_iterator i = imageLinksData.constFind(imageLink); + if (i == imageLinksData.cend()) { + i = imageLinksData.insert(imageLink, new ImageLinkData(imageLink)); + } + return i.value(); + } + + ImageLinkData *imageLinkSet(const QString &imageLink, ImageLinkType type, const QString &url) { ImageLinksData::const_iterator i = imageLinksData.constFind(imageLink); ImageLinkData *result; if (i == imageLinksData.cend()) { diff --git a/Telegram/SourceFiles/app.h b/Telegram/SourceFiles/app.h index ea91a47e2..5a91cba2a 100644 --- a/Telegram/SourceFiles/app.h +++ b/Telegram/SourceFiles/app.h @@ -156,13 +156,18 @@ namespace App { ChatData *chat(const PeerId &peer); ChatData *chat(int32 chat); QString peerName(const PeerData *peer, bool forDialogs = false); - PhotoData *photo(const PhotoId &photo, PhotoData *convert = 0, const uint64 &access = 0, int32 user = 0, int32 date = 0, const ImagePtr &thumb = ImagePtr(), const ImagePtr &medium = ImagePtr(), const ImagePtr &full = ImagePtr()); - VideoData *video(const VideoId &video, VideoData *convert = 0, const uint64 &access = 0, int32 user = 0, int32 date = 0, int32 duration = 0, int32 w = 0, int32 h = 0, const ImagePtr &thumb = ImagePtr(), int32 dc = 0, int32 size = 0); - AudioData *audio(const AudioId &audio, AudioData *convert = 0, const uint64 &access = 0, int32 user = 0, int32 date = 0, const QString &mime = QString(), int32 duration = 0, int32 dc = 0, int32 size = 0); + PhotoData *photo(const PhotoId &photo); + PhotoData *photoSet(const PhotoId &photo, PhotoData *convert, const uint64 &access, int32 user, int32 date, const ImagePtr &thumb, const ImagePtr &medium, const ImagePtr &full); + VideoData *video(const VideoId &video); + VideoData *videoSet(const VideoId &video, VideoData *convert, const uint64 &access, int32 user, int32 date, int32 duration, int32 w, int32 h, const ImagePtr &thumb, int32 dc, int32 size); + AudioData *audio(const AudioId &audio); + AudioData *audioSet(const AudioId &audio, AudioData *convert, const uint64 &access, int32 user, int32 date, const QString &mime, int32 duration, int32 dc, int32 size); DocumentData *document(const DocumentId &document); DocumentData *documentSet(const DocumentId &document, DocumentData *convert, const uint64 &access, int32 date, const QVector &attributes, const QString &mime, const ImagePtr &thumb, int32 dc, int32 size, const StorageImageLocation &thumbLocation); - WebPageData *webPage(const WebPageId &webPage, WebPageData *convert = 0, const QString &type = QString(), const QString &url = QString(), const QString &displayUrl = QString(), const QString &siteName = QString(), const QString &title = QString(), const QString &description = QString(), PhotoData *photo = 0, int32 duration = 0, const QString &author = QString(), int32 pendingTill = -2); - ImageLinkData *imageLink(const QString &imageLink, ImageLinkType type = InvalidImageLink, const QString &url = QString()); + WebPageData *webPage(const WebPageId &webPage); + WebPageData *webPageSet(const WebPageId &webPage, WebPageData *convert, const QString &, const QString &url, const QString &displayUrl, const QString &siteName, const QString &title, const QString &description, PhotoData *photo, int32 duration, const QString &author, int32 pendingTill); + ImageLinkData *imageLink(const QString &imageLink); + ImageLinkData *imageLinkSet(const QString &imageLink, ImageLinkType type, const QString &url); void forgetMedia(); MTPPhoto photoFromUserPhoto(MTPint userId, MTPint date, const MTPUserProfilePhoto &photo); diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index e6665a0b8..ffea005cf 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -654,8 +654,8 @@ void Application::checkMapVersion() { psRegisterCustomScheme(); if (Local::oldMapVersion()) { QString versionFeatures; - if (DevChannel && Local::oldMapVersion() < 8040) { - versionFeatures = QString::fromUtf8("\xe2\x80\x94 Fixed critical Qt bug in image scale\n\xe2\x80\x94 Huge amount of unread messages are loaded much faster\n\xe2\x80\x94 Flac audio files are played in-app\n\xe2\x80\x94 Some bugfixes and optimizations");// .replace('@', qsl("@") + QChar(0x200D)); + if (DevChannel && Local::oldMapVersion() < 8041) { + versionFeatures = QString::fromUtf8("\xe2\x80\x94 Pretty phone number formatting\n\xe2\x80\x94 Fixed shared contacts display\n\xe2\x80\x94 Fix KDE crash, use Qt tray icon in all Linux systems");// .replace('@', qsl("@") + QChar(0x200D)); } else if (!DevChannel && Local::oldMapVersion() < 8038) { versionFeatures = lang(lng_new_version_text).trimmed(); } diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 98268bf6d..4e4f1ccaa 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,8 +17,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8040; -static const wchar_t *AppVersionStr = L"0.8.40"; +static const int32 AppVersion = 8041; +static const wchar_t *AppVersionStr = L"0.8.41"; static const bool DevChannel = true; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; diff --git a/Telegram/SourceFiles/gui/flatinput.cpp b/Telegram/SourceFiles/gui/flatinput.cpp index e2432d844..ef8e91d0c 100644 --- a/Telegram/SourceFiles/gui/flatinput.cpp +++ b/Telegram/SourceFiles/gui/flatinput.cpp @@ -42,7 +42,8 @@ namespace { FlatInputStyle _flatInputStyle; } -FlatInput::FlatInput(QWidget *parent, const style::flatInput &st, const QString &pholder, const QString &v) : QLineEdit(v, parent), _fullph(pholder), _oldtext(v), _kev(0), _customUpDown(false), _phVisible(!v.length()), +FlatInput::FlatInput(QWidget *parent, const style::flatInput &st, const QString &pholder, const QString &v) : QLineEdit(v, parent), +_fullph(pholder), _fastph(false), _oldtext(v), _kev(0), _customUpDown(false), _phVisible(!v.length()), a_phLeft(_phVisible ? 0 : st.phShift), a_phAlpha(_phVisible ? 1 : 0), a_phColor(st.phColor->c), a_borderColor(st.borderColor->c), a_bgColor(st.bgColor->c), _notingBene(0), _st(st) { resize(_st.width, _st.height); @@ -130,7 +131,7 @@ QRect FlatInput::getTextRect() const { } void FlatInput::paintEvent(QPaintEvent *e) { - QPainter p(this); + Painter p(this); p.fillRect(rect(), a_bgColor.current()); if (_st.borderWidth) { QBrush b(a_borderColor.current()); @@ -151,9 +152,9 @@ void FlatInput::paintEvent(QPaintEvent *e) { if (phDraw) { p.save(); p.setClipRect(rect()); - QRect phRect(_st.textMrg.left() + _st.phPos.x() + a_phLeft.current(), _st.textMrg.top() + _st.phPos.y(), width() - _st.textMrg.left() - _st.textMrg.right(), height() - _st.textMrg.top() - _st.textMrg.bottom()); - p.setFont(_st.font->f); - p.setPen(a_phColor.current()); + QRect phRect(placeholderRect()); + phRect.moveLeft(phRect.left() + a_phLeft.current()); + phPrepare(p); p.drawText(phRect, _ph, QTextOption(_st.phAlign)); p.restore(); } @@ -228,20 +229,53 @@ bool FlatInput::animStep(float64 ms) { return res; } +void FlatInput::setPlaceholder(const QString &ph) { + _fullph = ph; + resizeEvent(0); + update(); +} + +void FlatInput::setPlaceholderFast(bool fast) { + _fastph = fast; + if (_fastph) { + a_phLeft = anim::ivalue(_phVisible ? 0 : _st.phShift, _phVisible ? 0 : _st.phShift); + a_phAlpha = anim::fvalue(_phVisible ? 1 : 0, _phVisible ? 1 : 0); + update(); + } +} + void FlatInput::updatePlaceholder() { bool vis = !text().length(); if (vis == _phVisible) return; - a_phLeft.start(vis ? 0 : _st.phShift); - a_phAlpha.start(vis ? 1 : 0); - anim::start(this); - + if (_fastph) { + a_phLeft = anim::ivalue(vis ? 0 : _st.phShift, vis ? 0 : _st.phShift); + a_phAlpha = anim::fvalue(vis ? 1 : 0, vis ? 1 : 0); + update(); + } else { + a_phLeft.start(vis ? 0 : _st.phShift); + a_phAlpha.start(vis ? 1 : 0); + anim::start(this); + } _phVisible = vis; } +const QString &FlatInput::placeholder() const { + return _fullph; +} + +QRect FlatInput::placeholderRect() const { + return QRect(_st.textMrg.left() + _st.phPos.x(), _st.textMrg.top() + _st.phPos.y(), width() - _st.textMrg.left() - _st.textMrg.right(), height() - _st.textMrg.top() - _st.textMrg.bottom()); +} + void FlatInput::correctValue(QKeyEvent *e, const QString &was) { } +void FlatInput::phPrepare(Painter &p) { + p.setFont(_st.font->f); + p.setPen(a_phColor.current()); +} + void FlatInput::keyPressEvent(QKeyEvent *e) { QString was(text()); _kev = e; diff --git a/Telegram/SourceFiles/gui/flatinput.h b/Telegram/SourceFiles/gui/flatinput.h index b0502c7a1..b9028355f 100644 --- a/Telegram/SourceFiles/gui/flatinput.h +++ b/Telegram/SourceFiles/gui/flatinput.h @@ -38,7 +38,11 @@ public: void notaBene(); + void setPlaceholder(const QString &ph); + void setPlaceholderFast(bool fast); void updatePlaceholder(); + const QString &placeholder() const; + QRect placeholderRect() const; QRect getTextRect() const; @@ -68,9 +72,16 @@ protected: virtual void correctValue(QKeyEvent *e, const QString &was); + style::font phFont() { + return _st.font; + } + + void phPrepare(Painter &p); + private: QString _ph, _fullph, _oldtext; + bool _fastph; QKeyEvent *_kev; bool _customUpDown; diff --git a/Telegram/SourceFiles/gui/phoneinput.cpp b/Telegram/SourceFiles/gui/phoneinput.cpp index 48f2d720c..a28ce3251 100644 --- a/Telegram/SourceFiles/gui/phoneinput.cpp +++ b/Telegram/SourceFiles/gui/phoneinput.cpp @@ -19,8 +19,30 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "style.h" #include "gui/phoneinput.h" +#include "numbers.h" +#include "lang.h" -PhoneInput::PhoneInput(QWidget *parent, const style::flatInput &st, const QString &ph) : FlatInput(parent, st, ph) { +PhoneInput::PhoneInput(QWidget *parent, const style::flatInput &st) : FlatInput(parent, st, lang(lng_phone_ph)) { +} + +void PhoneInput::paintEvent(QPaintEvent *e) { + FlatInput::paintEvent(e); + + Painter p(this); + QString t(text()); + if (!pattern.isEmpty() && !t.isEmpty()) { + QString ph = placeholder().mid(t.size()); + if (!ph.isEmpty()) { + p.setClipRect(rect()); + QRect phRect(placeholderRect()); + int tw = phFont()->m.width(t); + if (tw < phRect.width()) { + phRect.setLeft(phRect.left() + tw); + phPrepare(p); + p.drawText(phRect, ph, style::al_left); + } + } + } } void PhoneInput::correctValue(QKeyEvent *e, const QString &was) { @@ -36,34 +58,58 @@ void PhoneInput::correctValue(QKeyEvent *e, const QString &was) { } } if (digitCount > MaxPhoneTailLength) digitCount = MaxPhoneTailLength; - bool strict = (digitCount == MaxPhoneTailLength); + bool inPart = !pattern.isEmpty(); + int curPart = -1, leftInPart = 0; newText.reserve(oldLen); for (int i = 0; i < oldLen; ++i) { + if (i == oldPos && newPos < 0) { + newPos = newText.length(); + } + QChar ch(oldText[i]); if (ch.isDigit()) { if (!digitCount--) { break; } - newText += ch; - if (strict && !digitCount) { - break; + if (inPart) { + if (leftInPart) { + --leftInPart; + } else { + newText += ' '; + ++curPart; + inPart = curPart < pattern.size(); + leftInPart = inPart ? (pattern.at(curPart) - 1) : 0; + + ++oldPos; + } } - } else if (ch == ' ' || ch == '-' || ch == '(' || ch == ')') { newText += ch; - } - if (i == oldPos) { - newPos = newText.length(); + } else if (ch == ' ' || ch == '-' || ch == '(' || ch == ')') { + if (inPart) { + if (leftInPart) { + } else { + newText += ch; + ++curPart; + inPart = curPart < pattern.size(); + leftInPart = inPart ? pattern.at(curPart) : 0; + } + } else { + newText += ch; + } } } + int32 newlen = newText.size(); + while (newlen > 0 && newText.at(newlen - 1).isSpace()) { + --newlen; + } + if (newlen < newText.size()) newText = newText.mid(0, newlen); if (newPos < 0) { newPos = newText.length(); } if (newText != oldText) { setText(newText); - if (newPos != oldPos) { - setCursorPosition(newPos); - } + setCursorPosition(newPos); } } @@ -76,6 +122,29 @@ void PhoneInput::addedToNumber(const QString &added) { updatePlaceholder(); } +void PhoneInput::onChooseCode(const QString &code) { + pattern = phoneNumberParse(code); + if (!pattern.isEmpty() && pattern.at(0) == code.size()) { + pattern.pop_front(); + } else { + pattern.clear(); + } + if (pattern.isEmpty()) { + setPlaceholder(lang(lng_phone_ph)); + } else { + QString ph; + ph.reserve(20); + for (int i = 0, l = pattern.size(); i < l; ++i) { + ph.append(' '); + ph.append(qsl("X").repeated(pattern.at(i))); + } + setPlaceholder(ph); + } + correctValue(0, text()); + setPlaceholderFast(!pattern.isEmpty()); + updatePlaceholder(); +} + PortInput::PortInput(QWidget *parent, const style::flatInput &st, const QString &ph, const QString &val) : FlatInput(parent, st, ph, val) { correctValue(0, QString()); } diff --git a/Telegram/SourceFiles/gui/phoneinput.h b/Telegram/SourceFiles/gui/phoneinput.h index 28b3affe6..55adba6ea 100644 --- a/Telegram/SourceFiles/gui/phoneinput.h +++ b/Telegram/SourceFiles/gui/phoneinput.h @@ -24,11 +24,14 @@ class PhoneInput : public FlatInput { public: - PhoneInput(QWidget *parent, const style::flatInput &st, const QString &ph); + PhoneInput(QWidget *parent, const style::flatInput &st); + + void paintEvent(QPaintEvent *e); public slots: void addedToNumber(const QString &added); + void onChooseCode(const QString &code); signals: @@ -38,6 +41,10 @@ protected: void correctValue(QKeyEvent *e, const QString &was); +private: + + QVector pattern; + }; class PortInput : public FlatInput { diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 1157f1391..2a7e70c4c 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -626,7 +626,8 @@ HistoryItem *History::createItem(HistoryBlock *block, const MTPmessage &msg, boo const MTPDmessage m(msg.c_message()); int badMedia = 0; // 1 - unsupported, 2 - empty switch (m.vmedia.type()) { - case mtpc_messageMediaEmpty: break; + case mtpc_messageMediaEmpty: + case mtpc_messageMediaContact: break; case mtpc_messageMediaGeo: switch (m.vmedia.c_messageMediaGeo().vgeo.type()) { case mtpc_geoPoint: break; @@ -4552,7 +4553,7 @@ _description(st::msgMinWidth) { QString lnk = qsl("https://maps.google.com/maps?q=") + url.mid(9) + qsl("&ll=") + url.mid(9) + qsl("&z=17"); link.reset(new TextLink(lnk)); - data = App::imageLink(url, GoogleMapsLink, lnk); + data = App::imageLinkSet(url, GoogleMapsLink, lnk); } else { link.reset(new TextLink(url)); @@ -4563,15 +4564,15 @@ _description(st::msgMinWidth) { matchIndex = 3; } if (m.hasMatch()) { - data = App::imageLink(qsl("youtube:") + m.captured(matchIndex), YouTubeLink, url); + data = App::imageLinkSet(qsl("youtube:") + m.captured(matchIndex), YouTubeLink, url); } else { m = reVimeo.match(url); if (m.hasMatch()) { - data = App::imageLink(qsl("vimeo:") + m.captured(3), VimeoLink, url); + data = App::imageLinkSet(qsl("vimeo:") + m.captured(3), VimeoLink, url); } else { m = reInstagram.match(url); if (m.hasMatch()) { - data = App::imageLink(qsl("instagram:") + m.captured(3), InstagramLink, url); + data = App::imageLinkSet(qsl("instagram:") + m.captured(3), InstagramLink, url); data->title = qsl("instagram.com/p/") + m.captured(3); } else { data = 0; diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 0b987b752..1e1cb2c71 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -5235,7 +5235,7 @@ void HistoryWidget::drawField(Painter &p) { } p.setPen(st::replyColor->p); _replyToName.drawElided(p, replyLeft, backy + st::msgReplyPadding.top(), width() - replyLeft - _replyForwardPreviewCancel.width() - st::msgReplyPadding.right()); - p.setPen(((drawReplyTo->getMedia() || drawReplyTo->serviceMsg()) ? st::msgInDateColor : st::msgColor)->p); + p.setPen((((drawReplyTo->toHistoryMessage() && drawReplyTo->toHistoryMessage()->justMedia()) || drawReplyTo->serviceMsg()) ? st::msgInDateColor : st::msgColor)->p); _replyToText.drawElided(p, replyLeft, backy + st::msgReplyPadding.top() + st::msgServiceNameFont->height, width() - replyLeft - _replyForwardPreviewCancel.width() - st::msgReplyPadding.right()); } else { p.setFont(st::msgDateFont->f); diff --git a/Telegram/SourceFiles/intro/introphone.cpp b/Telegram/SourceFiles/intro/introphone.cpp index 96bd65a97..7c968bb3d 100644 --- a/Telegram/SourceFiles/intro/introphone.cpp +++ b/Telegram/SourceFiles/intro/introphone.cpp @@ -46,7 +46,7 @@ IntroPhone::IntroPhone(IntroWidget *parent) : IntroStage(parent), errorAlpha(0), changed(false), next(this, lang(lng_intro_next), st::btnIntroNext), country(this, st::introCountry), - phone(this, st::inpIntroPhone, lang(lng_phone_ph)), code(this, st::inpIntroCountryCode), + phone(this, st::inpIntroPhone), code(this, st::inpIntroCountryCode), _signup(this, lng_phone_notreg(lt_signup_start, textcmdStartLink(1), lt_signup_end, textcmdStopLink()), st::introErrLabel, st::introErrLabelTextStyle), _showSignup(false) { setVisible(false); @@ -57,6 +57,8 @@ IntroPhone::IntroPhone(IntroWidget *parent) : IntroStage(parent), connect(&phone, SIGNAL(voidBackspace(QKeyEvent*)), &code, SLOT(startErasing(QKeyEvent*))); connect(&country, SIGNAL(codeChanged(const QString &)), &code, SLOT(codeSelected(const QString &))); connect(&code, SIGNAL(codeChanged(const QString &)), &country, SLOT(onChooseCode(const QString &))); + connect(&code, SIGNAL(codeChanged(const QString &)), &phone, SLOT(onChooseCode(const QString &))); + connect(&country, SIGNAL(codeChanged(const QString &)), &phone, SLOT(onChooseCode(const QString &))); connect(&code, SIGNAL(addedToNumber(const QString &)), &phone, SLOT(addedToNumber(const QString &))); connect(&country, SIGNAL(selectClosed()), this, SLOT(onSelectClose())); connect(&phone, SIGNAL(changed()), this, SLOT(onInputChange())); diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index f92f163fd..9efbe5396 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -3611,7 +3611,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { UserData *user = App::userLoaded(d.vuser_id.v); if (user) { user->setPhone(qs(d.vphone)); - user->setName(user->firstName, user->lastName, (user->contact || isServiceUser(user->id) || user->phone.isEmpty()) ? QString() : App::formatPhone(user->phone), user->username); + user->setName(user->firstName, user->lastName, (user->contact || isServiceUser(user->id) || user->input.type() == mtpc_inputPeerSelf || user->phone.isEmpty()) ? QString() : App::formatPhone(user->phone), user->username); App::markPeerUpdated(user); } } break; diff --git a/Telegram/SourceFiles/numbers.h b/Telegram/SourceFiles/numbers.h new file mode 100644 index 000000000..02424f9e7 --- /dev/null +++ b/Telegram/SourceFiles/numbers.h @@ -0,0 +1,21 @@ +/* +This file is part of Telegram Desktop, +the official desktop version of Telegram messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It 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 General Public License for more details. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014 John Preston, https://desktop.telegram.org +*/ + +#pragma once + +QVector phoneNumberParse(const QString &number); diff --git a/Telegram/SourceFiles/profilewidget.cpp b/Telegram/SourceFiles/profilewidget.cpp index f75e0b914..08c460c4b 100644 --- a/Telegram/SourceFiles/profilewidget.cpp +++ b/Telegram/SourceFiles/profilewidget.cpp @@ -76,7 +76,7 @@ ProfileInner::ProfileInner(ProfileWidget *profile, ScrollArea *scroll, const Pee connect(App::api(), SIGNAL(fullPeerUpdated(PeerData*)), this, SLOT(onFullPeerUpdated(PeerData*))); if (_peerUser) { - _phoneText = _peerUser->phone.isEmpty() ? QString() : App::formatPhone(_peerUser->phone); + _phoneText = App::formatPhone(_peerUser->phone); PhotoData *userPhoto = (_peerUser->photoId && _peerUser->photoId != UnknownPeerPhotoId) ? App::photo(_peerUser->photoId) : 0; if (userPhoto && userPhoto->date) { _photoLink = TextLinkPtr(new PhotoLink(userPhoto, _peer)); @@ -382,7 +382,7 @@ void ProfileInner::peerUpdated(PeerData *data) { if (data == _peer) { PhotoData *photo = 0; if (_peerUser) { - _phoneText = _peerUser->phone.isEmpty() ? QString() : App::formatPhone(_peerUser->phone); + _phoneText = App::formatPhone(_peerUser->phone); if (_peerUser->photoId && _peerUser->photoId != UnknownPeerPhotoId) photo = App::photo(_peerUser->photoId); } else { if (_peerChat->photoId && _peerChat->photoId != UnknownPeerPhotoId) photo = App::photo(_peerChat->photoId); diff --git a/Telegram/SourceFiles/structs.h b/Telegram/SourceFiles/structs.h index 4a9a9555d..152d47b1c 100644 --- a/Telegram/SourceFiles/structs.h +++ b/Telegram/SourceFiles/structs.h @@ -681,7 +681,7 @@ inline WebPageType toWebPageType(const QString &type) { } struct WebPageData { - WebPageData(const WebPageId &id, WebPageType type = WebPageArticle, const QString &url = QString(), const QString &displayUrl = QString(), const QString &siteName = QString(), const QString &title = QString(), const QString &description = QString(), PhotoData *photo = 0, int32 duration = 0, const QString &author = QString(), int32 pendingTill = 0); + WebPageData(const WebPageId &id, WebPageType type = WebPageArticle, const QString &url = QString(), const QString &displayUrl = QString(), const QString &siteName = QString(), const QString &title = QString(), const QString &description = QString(), PhotoData *photo = 0, int32 duration = 0, const QString &author = QString(), int32 pendingTill = -1); void forget() { if (photo) photo->forget(); diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index ec2de66d7..3cf470c3e 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.40 + 0.8.41 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index 804a6f3acfd6e026cb66eb52329eda538a477a60..043bc5d1de95075a881248042f3d181d8e0f8d7e 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_R)3 diff --git a/Telegram/Telegram.vcxproj b/Telegram/Telegram.vcxproj index ccc8f6fda..2797647c0 100644 --- a/Telegram/Telegram.vcxproj +++ b/Telegram/Telegram.vcxproj @@ -689,6 +689,7 @@ true + @@ -1117,6 +1118,11 @@ .\GeneratedFiles\style_auto.h + .\GeneratedFiles\style_auto.cpp + "$(SolutionDir)$(Platform)\$(Configuration)Style\MetaStyle.exe" -classes_in ".\Resources\style_classes.txt" -classes_out ".\GeneratedFiles\style_classes.h" -styles_in ".\Resources\style.txt" -styles_out ".\GeneratedFiles\style_auto.h" -path_to_sprites ".\SourceFiles\art\\" + + + .\GeneratedFiles\numbers.cpp "$(SolutionDir)$(Platform)\$(Configuration)Style\MetaStyle.exe" -classes_in ".\Resources\style_classes.txt" -classes_out ".\GeneratedFiles\style_classes.h" -styles_in ".\Resources\style.txt" -styles_out ".\GeneratedFiles\style_auto.h" -path_to_sprites ".\SourceFiles\art\\" @@ -2020,6 +2026,7 @@ .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\..\..\Libraries\libogg-1.3.2\include" "-I.\..\..\Libraries\opus\include" "-I.\..\..\Libraries\opusfile\include" "-I.\..\..\Libraries\mpg123-1.22.1\ports\MSVC++" "-I.\..\..\Libraries\mpg123-1.22.1\src\libmpg123" "-I.\..\..\Libraries\faad2-2.7\include" "-I.\..\..\Libraries\faad2-2.7\common\mp4ff" "-I.\..\..\Libraries\ffmpeg-2.6.3" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/playerwidget.h" + $(QTDIR)\bin\moc.exe;%(FullPath) diff --git a/Telegram/Telegram.vcxproj.filters b/Telegram/Telegram.vcxproj.filters index b3cb689af..d0998e622 100644 --- a/Telegram/Telegram.vcxproj.filters +++ b/Telegram/Telegram.vcxproj.filters @@ -915,6 +915,9 @@ Generated Files\Release + + Generated Files + @@ -1001,6 +1004,9 @@ Source Files + + Source Files + @@ -1213,6 +1219,7 @@ Source Files + diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index 7b06d0e49..3fdb1a81a 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -1705,7 +1705,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.40; + CURRENT_PROJECT_VERSION = 0.8.41; DEBUG_INFORMATION_FORMAT = dwarf; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -1723,7 +1723,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 0.8.40; + CURRENT_PROJECT_VERSION = 0.8.41; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = fast; GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h; @@ -1749,10 +1749,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.40; + CURRENT_PROJECT_VERSION = 0.8.41; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DYLIB_COMPATIBILITY_VERSION = 0.8; - DYLIB_CURRENT_VERSION = 0.8.40; + DYLIB_CURRENT_VERSION = 0.8.41; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -1886,10 +1886,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.40; + CURRENT_PROJECT_VERSION = 0.8.41; DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 0.8; - DYLIB_CURRENT_VERSION = 0.8.40; + DYLIB_CURRENT_VERSION = 0.8.41; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; diff --git a/Telegram/Version.sh b/Telegram/Version.sh index e6f3290b4..d70bec318 100755 --- a/Telegram/Version.sh +++ b/Telegram/Version.sh @@ -1,2 +1,2 @@ -echo 0.8 8040 0.8.40 1 +echo 0.8 8041 0.8.41 1 # AppVersionStrMajor AppVersion AppVersionStr DevChannel From 20e7d9e0361a51923c992c75cf6fdc98c77a0776 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 21 Jul 2015 17:35:08 +0200 Subject: [PATCH 053/121] fixed some issues with forwarding, Great Minds sticker pack info, windows start --- Telegram/SourceFiles/boxes/stickersetbox.cpp | 20 ++++++++++-- Telegram/SourceFiles/boxes/stickersetbox.h | 3 +- Telegram/SourceFiles/gui/phoneinput.cpp | 2 +- Telegram/SourceFiles/historywidget.cpp | 4 +++ Telegram/SourceFiles/window.cpp | 32 ++++++++++---------- 5 files changed, 40 insertions(+), 21 deletions(-) diff --git a/Telegram/SourceFiles/boxes/stickersetbox.cpp b/Telegram/SourceFiles/boxes/stickersetbox.cpp index 12dfd5a02..5a8af1db0 100644 --- a/Telegram/SourceFiles/boxes/stickersetbox.cpp +++ b/Telegram/SourceFiles/boxes/stickersetbox.cpp @@ -63,7 +63,7 @@ void StickerSetInner::gotSet(const MTPmessages_StickerSet &set) { } } - if (_pack.isEmpty() || _setShortName.isEmpty()) { + if (_pack.isEmpty()) { App::wnd()->showLayer(new ConfirmBox(lang(lng_stickers_not_found), true), true); } else { int32 rows = _pack.size() / StickerPanPerRow + ((_pack.size() % StickerPanPerRow) ? 1 : 0); @@ -198,6 +198,10 @@ int32 StickerSetInner::notInstalled() const { return (_loaded && (cStickerSets().constFind(_setId) == cStickerSets().cend())) ? _pack.size() : 0; } +bool StickerSetInner::official() const { + return _loaded && _setShortName.isEmpty(); +} + QString StickerSetInner::title() const { return _loaded ? (_pack.isEmpty() ? lang(lng_attach_failed) : _title) : lang(lng_contacts_loading); } @@ -217,7 +221,8 @@ StickerSetInner::~StickerSetInner() { StickerSetBox::StickerSetBox(const MTPInputStickerSet &set) : ScrollableBox(st::stickersScroll), _inner(set), _close(this, st::btnStickersClose), _addStickers(this, lng_stickers_add_pack(lt_count, 0), st::btnStickersAdd), -_shareStickers(this, lang(lng_stickers_share_pack), st::btnStickersAdd) { +_shareStickers(this, lang(lng_stickers_share_pack), st::btnStickersAdd), +_closeStickers(this, lang(lng_close), st::btnStickersAdd) { resize(st::stickersWidth, height()); setMaxHeight(st::stickersMaxHeight); connect(App::main(), SIGNAL(stickersUpdated()), this, SLOT(onStickersUpdated())); @@ -227,6 +232,7 @@ _shareStickers(this, lang(lng_stickers_share_pack), st::btnStickersAdd) { connect(&_close, SIGNAL(clicked()), this, SLOT(onClose())); connect(&_addStickers, SIGNAL(clicked()), this, SLOT(onAddStickers())); connect(&_shareStickers, SIGNAL(clicked()), this, SLOT(onShareStickers())); + connect(&_closeStickers, SIGNAL(clicked()), this, SLOT(onClose())); connect(&_inner, SIGNAL(updateButtons()), this, SLOT(onUpdateButtons())); connect(&_scroll, SIGNAL(scrolled()), this, SLOT(onScroll())); @@ -274,19 +280,26 @@ void StickerSetBox::showAll() { _close.show(); int32 cnt = _inner.notInstalled(); if (_inner.loaded()) { - if (_inner.notInstalled()) { + if (_inner.official()) { + _addStickers.hide(); + _shareStickers.hide(); + _closeStickers.show(); + } else if (_inner.notInstalled()) { _addStickers.setText(lng_stickers_add_pack(lt_count, cnt)); _addStickers.show(); _addStickers.raise(); _shareStickers.hide(); + _closeStickers.hide(); } else { _shareStickers.show(); _shareStickers.raise(); _addStickers.hide(); + _closeStickers.hide(); } } else { _addStickers.hide(); _shareStickers.hide(); + _closeStickers.hide(); } update(); } @@ -304,4 +317,5 @@ void StickerSetBox::resizeEvent(QResizeEvent *e) { _close.moveToRight(0, 0, width()); _addStickers.move((width() - _addStickers.width()) / 2, height() - (st::stickersAddOrShare + _addStickers.height()) / 2); _shareStickers.move((width() - _shareStickers.width()) / 2, height() - (st::stickersAddOrShare + _shareStickers.height()) / 2); + _closeStickers.move((width() - _closeStickers.width()) / 2, height() - (st::stickersAddOrShare + _closeStickers.height()) / 2); } diff --git a/Telegram/SourceFiles/boxes/stickersetbox.h b/Telegram/SourceFiles/boxes/stickersetbox.h index 136be0e48..8ac876990 100644 --- a/Telegram/SourceFiles/boxes/stickersetbox.h +++ b/Telegram/SourceFiles/boxes/stickersetbox.h @@ -32,6 +32,7 @@ public: bool loaded() const; int32 notInstalled() const; + bool official() const; QString title() const; QString shortName() const; @@ -97,5 +98,5 @@ private: StickerSetInner _inner; IconedButton _close; - FlatButton _addStickers, _shareStickers; + FlatButton _addStickers, _shareStickers, _closeStickers; }; diff --git a/Telegram/SourceFiles/gui/phoneinput.cpp b/Telegram/SourceFiles/gui/phoneinput.cpp index a28ce3251..f49a5d26e 100644 --- a/Telegram/SourceFiles/gui/phoneinput.cpp +++ b/Telegram/SourceFiles/gui/phoneinput.cpp @@ -136,7 +136,7 @@ void PhoneInput::onChooseCode(const QString &code) { ph.reserve(20); for (int i = 0, l = pattern.size(); i < l; ++i) { ph.append(' '); - ph.append(qsl("X").repeated(pattern.at(i))); + ph.append(QString(QChar(0x2212)).repeated(pattern.at(i))); } setPlaceholder(ph); } diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 1e1cb2c71..eab7ea03f 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -2678,6 +2678,10 @@ void HistoryWidget::showPeerHistory(const PeerId &peerId, MsgId showAtMsgId) { _histInited = false; historyLoaded(); + + emit peerShown(_peer); + App::main()->topBar()->update(); + update(); return; } updateTyping(false); diff --git a/Telegram/SourceFiles/window.cpp b/Telegram/SourceFiles/window.cpp index c83df1509..8d438d159 100644 --- a/Telegram/SourceFiles/window.cpp +++ b/Telegram/SourceFiles/window.cpp @@ -429,26 +429,26 @@ void Window::init() { title = new TitleWidget(this); -#ifdef Q_OS_WIN - trayIconMenu = new ContextMenu(this); -#else - trayIconMenu = new QMenu(this); - trayIconMenu->setFont(QFont("Tahoma")); -#endif - if (cPlatform() == dbipWindows || cPlatform() == dbipMac) { - trayIconMenu->addAction(lang(lng_minimize_to_tray), this, SLOT(minimizeToTray()))->setEnabled(true); - trayIconMenu->addAction(lang(lng_quit_from_tray), this, SLOT(quitFromTray()))->setEnabled(true); - } else { - trayIconMenu->addAction(lang(lng_open_from_tray), this, SLOT(showFromTray()))->setEnabled(true); - trayIconMenu->addAction(lang(lng_minimize_to_tray), this, SLOT(minimizeToTray()))->setEnabled(true); - trayIconMenu->addAction(lang(lng_quit_from_tray), this, SLOT(quitFromTray()))->setEnabled(true); - } - psInitSize(); - psUpdateWorkmode(); } void Window::firstShow() { +#ifdef Q_OS_WIN + trayIconMenu = new ContextMenu(this); +#else + trayIconMenu = new QMenu(this); + trayIconMenu->setFont(QFont("Tahoma")); +#endif + if (cPlatform() == dbipWindows || cPlatform() == dbipMac) { + trayIconMenu->addAction(lang(lng_minimize_to_tray), this, SLOT(minimizeToTray()))->setEnabled(true); + trayIconMenu->addAction(lang(lng_quit_from_tray), this, SLOT(quitFromTray()))->setEnabled(true); + } else { + trayIconMenu->addAction(lang(lng_open_from_tray), this, SLOT(showFromTray()))->setEnabled(true); + trayIconMenu->addAction(lang(lng_minimize_to_tray), this, SLOT(minimizeToTray()))->setEnabled(true); + trayIconMenu->addAction(lang(lng_quit_from_tray), this, SLOT(quitFromTray()))->setEnabled(true); + } + psUpdateWorkmode(); + psFirstShow(); updateTrayMenu(); } From af7cd9680d261482f8df84042540827352ed9b95 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 21 Jul 2015 17:40:51 +0200 Subject: [PATCH 054/121] qt patch updated, version 0.8.41.dev --- Telegram/_qt_5_5_0_patch.diff | 4 ++-- .../_qt_5_5_0_patch/qtbase/src/corelib/kernel/qobjectdefs.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Telegram/_qt_5_5_0_patch.diff b/Telegram/_qt_5_5_0_patch.diff index ea73098ad..d713f4ae5 100644 --- a/Telegram/_qt_5_5_0_patch.diff +++ b/Telegram/_qt_5_5_0_patch.diff @@ -65,7 +65,7 @@ index 0907653..96f6e19 100644 /* High surrogate. Must be a followed by a low surrogate. */ if (length == 0) diff --git a/qtbase/src/corelib/kernel/qobjectdefs.h b/qtbase/src/corelib/kernel/qobjectdefs.h -index 4d01264..fd3854f 100644 +index 4d01264..9bee473 100644 --- a/qtbase/src/corelib/kernel/qobjectdefs.h +++ b/qtbase/src/corelib/kernel/qobjectdefs.h @@ -142,7 +142,7 @@ inline void qYouForgotTheQ_OBJECT_Macro(T1, T2) {} @@ -73,7 +73,7 @@ index 4d01264..fd3854f 100644 #endif -#if defined(Q_CC_CLANG) && Q_CC_CLANG >= 306 -+#if defined(Q_CC_CLANG) && Q_CC_CLANG >= 306 && false ++#if defined(Q_CC_CLANG) && (Q_CC_CLANG >= 306) && 0 # define Q_OBJECT_NO_OVERRIDE_WARNING QT_WARNING_DISABLE_CLANG("-Winconsistent-missing-override") #else # define Q_OBJECT_NO_OVERRIDE_WARNING diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/corelib/kernel/qobjectdefs.h b/Telegram/_qt_5_5_0_patch/qtbase/src/corelib/kernel/qobjectdefs.h index fd3854fd5..9bee4732c 100644 --- a/Telegram/_qt_5_5_0_patch/qtbase/src/corelib/kernel/qobjectdefs.h +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/corelib/kernel/qobjectdefs.h @@ -142,7 +142,7 @@ inline void qYouForgotTheQ_OBJECT_Macro(T1, T2) {} # define Q_DECL_HIDDEN_STATIC_METACALL Q_DECL_HIDDEN #endif -#if defined(Q_CC_CLANG) && Q_CC_CLANG >= 306 && false +#if defined(Q_CC_CLANG) && (Q_CC_CLANG >= 306) && 0 # define Q_OBJECT_NO_OVERRIDE_WARNING QT_WARNING_DISABLE_CLANG("-Winconsistent-missing-override") #else # define Q_OBJECT_NO_OVERRIDE_WARNING From 8339c5101752aa10c42dc9833b4425da0ad7b737 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 21 Jul 2015 17:49:14 +0200 Subject: [PATCH 055/121] added pretty number formatting to Xcode and Qt Creator projects, version 0.8.41.dev --- Telegram/SourceFiles/boxes/photosendbox.cpp | 3 ++- Telegram/Telegram.pro | 19 +++++++++++++------ Telegram/Telegram.xcodeproj/project.pbxproj | 10 ++++++++-- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/Telegram/SourceFiles/boxes/photosendbox.cpp b/Telegram/SourceFiles/boxes/photosendbox.cpp index 7f3a408da..73c4bbba5 100644 --- a/Telegram/SourceFiles/boxes/photosendbox.cpp +++ b/Telegram/SourceFiles/boxes/photosendbox.cpp @@ -61,7 +61,8 @@ PhotoSendBox::PhotoSendBox(const ReadyLocalMedia &img) : _img(new ReadyLocalMedi } resizeMaxHeight(st::boxWidth, _thumbh + st::boxPadding.top() + st::boxFont->height + st::boxPadding.bottom() + st::boxPadding.bottom() + _compressed.height() + _sendButton.height()); - _thumb = QPixmap::fromImage(_thumb.toImage().scaled(_thumbw, _thumbh, Qt::IgnoreAspectRatio, Qt::SmoothTransformation), Qt::ColorOnly); + _thumb = QPixmap::fromImage(_thumb.toImage().scaled(_thumbw * cIntRetinaFactor(), _thumbh * cIntRetinaFactor(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation), Qt::ColorOnly); + _thumb.setDevicePixelRatio(cRetinaFactor()); } else { _compressed.hide(); if (!_img->photoThumbs.isEmpty()) { diff --git a/Telegram/Telegram.pro b/Telegram/Telegram.pro index c68949b7f..eb3936449 100644 --- a/Telegram/Telegram.pro +++ b/Telegram/Telegram.pro @@ -32,17 +32,22 @@ linux { style_auto_cpp.target = ./GeneratedFiles/style_auto.cpp style_auto_cpp.depends = FORCE style_auto_cpp.commands = mkdir -p ./../../Telegram/GeneratedFiles && ./../DebugStyle/MetaStyle -classes_in ./../../Telegram/Resources/style_classes.txt -classes_out ./../../Telegram/GeneratedFiles/style_classes.h -styles_in ./../../Telegram/Resources/style.txt -styles_out ./../../Telegram/GeneratedFiles/style_auto.h -path_to_sprites ./../../Telegram/SourceFiles/art/ -style_auto_cpp.depends = ./../../Telegram/Resources/style.txt ./../../Telegram/Resources/style_classes.txt +style_auto_cpp.depends = ./../../Telegram/Resources/style.txt style_auto_h.target = ./GeneratedFiles/style_auto.h style_auto_h.depends = FORCE style_auto_h.commands = mkdir -p ./../../Telegram/GeneratedFiles && ./../DebugStyle/MetaStyle -classes_in ./../../Telegram/Resources/style_classes.txt -classes_out ./../../Telegram/GeneratedFiles/style_classes.h -styles_in ./../../Telegram/Resources/style.txt -styles_out ./../../Telegram/GeneratedFiles/style_auto.h -path_to_sprites ./../../Telegram/SourceFiles/art/ -style_auto_h.depends = ./../../Telegram/Resources/style.txt ./../../Telegram/Resources/style_classes.txt +style_auto_h.depends = ./../../Telegram/Resources/style.txt style_classes_h.target = ./GeneratedFiles/style_classes.h style_classes_h.depends = FORCE style_classes_h.commands = mkdir -p ./../../Telegram/GeneratedFiles && ./../DebugStyle/MetaStyle -classes_in ./../../Telegram/Resources/style_classes.txt -classes_out ./../../Telegram/GeneratedFiles/style_classes.h -styles_in ./../../Telegram/Resources/style.txt -styles_out ./../../Telegram/GeneratedFiles/style_auto.h -path_to_sprites ./../../Telegram/SourceFiles/art/ -style_classes_h.depends = ./../../Telegram/Resources/style.txt ./../../Telegram/Resources/style_classes.txt +style_classes_h.depends = ./../../Telegram/Resources/style_classes.txt + +numbers_cpp.target = ./GeneratedFiles/numbers.cpp +numbers_cpp.depends = FORCE +numbers_cpp.commands = mkdir -p ./../../Telegram/GeneratedFiles && ./../DebugStyle/MetaStyle -classes_in ./../../Telegram/Resources/style_classes.txt -classes_out ./../../Telegram/GeneratedFiles/style_classes.h -styles_in ./../../Telegram/Resources/style.txt -styles_out ./../../Telegram/GeneratedFiles/style_auto.h -path_to_sprites ./../../Telegram/SourceFiles/art/ +numbers_cpp.depends = ./../../Telegram/Resources/numbers.txt lang_auto_cpp.target = ./GeneratedFiles/lang_auto.cpp lang_auto_cpp.depends = FORCE @@ -54,13 +59,13 @@ lang_auto_h.depends = FORCE lang_auto_h.commands = mkdir -p ./../../Telegram/GeneratedFiles && ./../DebugLang/MetaLang -lang_in ./../../Telegram/Resources/lang.strings -lang_out ./../../Telegram/GeneratedFiles/lang_auto lang_auto_h.depends = ./../../Telegram/Resources/lang.strings -hook.depends = style_auto_cpp style_auto_h style_classes_h lang_auto_cpp lang_auto_h +hook.depends = style_auto_cpp style_auto_h style_classes_h numbers_cpp lang_auto_cpp lang_auto_h CONFIG(debug,debug|release):hook.target = Makefile.Debug CONFIG(release,debug|release):hook.target = Makefile.Release -QMAKE_EXTRA_TARGETS += style_auto_cpp style_auto_h style_classes_h lang_auto_cpp lang_auto_h hook +QMAKE_EXTRA_TARGETS += style_auto_cpp style_auto_h style_classes_h numbers_cpp lang_auto_cpp lang_auto_h hook -PRE_TARGETDEPS += ./GeneratedFiles/style_auto.cpp ./GeneratedFiles/style_auto.h ./GeneratedFiles/style_classes.h ./GeneratedFiles/lang_auto.h ./GeneratedFiles/lang_auto.cpp +PRE_TARGETDEPS += ./GeneratedFiles/style_auto.cpp ./GeneratedFiles/style_auto.h ./GeneratedFiles/style_classes.h ./GeneratedFiles/numbers.cpp ./GeneratedFiles/lang_auto.h ./GeneratedFiles/lang_auto.cpp unix { linux-g++:QMAKE_TARGET.arch = $$QMAKE_HOST.arch @@ -138,6 +143,7 @@ SOURCES += \ ./SourceFiles/gui/switcher.cpp \ ./GeneratedFiles/lang_auto.cpp \ ./GeneratedFiles/style_auto.cpp \ + ./GeneratedFiles/numbers.cpp \ ./SourceFiles/boxes/aboutbox.cpp \ ./SourceFiles/boxes/abstractbox.cpp \ ./SourceFiles/boxes/addcontactbox.cpp \ @@ -180,6 +186,7 @@ HEADERS += \ ./SourceFiles/langloaderplain.h \ ./SourceFiles/layerwidget.h \ ./SourceFiles/mediaview.h \ + ./SourceFiles/numbers.h \ ./SourceFiles/overviewwidget.h \ ./SourceFiles/passcodewidget.h \ ./SourceFiles/profilewidget.h \ diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index 3fdb1a81a..126cc9098 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -75,6 +75,7 @@ 07CAACD81AEA64F00058E508 /* AudioUnit.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 07CAACD71AEA64F00058E508 /* AudioUnit.framework */; }; 07D7034B19B8755A00C4EED2 /* audio.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07D7034919B8755A00C4EED2 /* audio.cpp */; }; 07D703BB19B88FB900C4EED2 /* moc_audio.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07D703BA19B88FB900C4EED2 /* moc_audio.cpp */; }; + 07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 07D795491B5544B200DE9598 /* qtpcre */; }; 07D7EABA1A597DD000838BA2 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 07D7EABC1A597DD000838BA2 /* Localizable.strings */; }; 07D8509419F5C97E00623D75 /* mtpCoreTypes.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07D8509219F5C97E00623D75 /* mtpCoreTypes.cpp */; }; 07D8509519F5C97E00623D75 /* mtpScheme.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07D8509319F5C97E00623D75 /* mtpScheme.cpp */; }; @@ -84,6 +85,7 @@ 07DB674D1AD07C9200A51329 /* abstractbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07DB67491AD07C9200A51329 /* abstractbox.cpp */; }; 07DB674E1AD07C9200A51329 /* sessionsbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07DB674B1AD07C9200A51329 /* sessionsbox.cpp */; }; 07DB67511AD07CB800A51329 /* intropwdcheck.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07DB674F1AD07CB800A51329 /* intropwdcheck.cpp */; }; + 07DC42A01B5EA15300B6B888 /* numbers.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07DC429F1B5EA15300B6B888 /* numbers.cpp */; }; 07DE92A01AA4923300A18F6F /* passcodewidget.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07DE929F1AA4923200A18F6F /* passcodewidget.cpp */; }; 07DE92A71AA4925B00A18F6F /* autolockbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07DE92A31AA4925B00A18F6F /* autolockbox.cpp */; }; 07DE92A81AA4925B00A18F6F /* passcodebox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07DE92A51AA4925B00A18F6F /* passcodebox.cpp */; }; @@ -97,7 +99,6 @@ 1299DDAE203A7EDFED9F5D6B /* main.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 5271C394C1E7646D117CE67E /* main.cpp */; settings = {ATTRIBUTES = (); }; }; 15364689D2AB5A30E87A689F /* Security.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 205259EEEE2BADA5E64741E3 /* Security.framework */; }; 19A66ECD6EE2F8356F27D32D /* layerwidget.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 5A9B4C6C59856143F3D0DE53 /* layerwidget.cpp */; settings = {ATTRIBUTES = (); }; }; - 07D7954A1B5544B200DE9598 /* qtpcre in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 07D795491B5544B200DE9598 /* qtpcre */; }; 1A681B886F50EE30FBE62B4B /* Qt5PrintSupport in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DBF506D10449BFABD45B82DA /* Qt5PrintSupport */; }; 1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */; }; 1BD711B4C358EA7D727BF358 /* moc_flatcheckbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 58E05D0B8B104D83F43F9859 /* moc_flatcheckbox.cpp */; settings = {ATTRIBUTES = (); }; }; @@ -328,6 +329,7 @@ 07D7034919B8755A00C4EED2 /* audio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio.cpp; path = SourceFiles/audio.cpp; sourceTree = SOURCE_ROOT; }; 07D7034A19B8755A00C4EED2 /* audio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio.h; path = SourceFiles/audio.h; sourceTree = SOURCE_ROOT; }; 07D703BA19B88FB900C4EED2 /* moc_audio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_audio.cpp; path = GeneratedFiles/Debug/moc_audio.cpp; sourceTree = SOURCE_ROOT; }; + 07D795491B5544B200DE9598 /* qtpcre */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtpcre; path = "usr/local/Qt-5.5.0/lib/libqtpcre$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 07D7EABB1A597DD000838BA2 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; 07D7EABD1A597DD200838BA2 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; 07D7EABE1A597DD300838BA2 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; @@ -347,6 +349,8 @@ 07DB674C1AD07C9200A51329 /* sessionsbox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sessionsbox.h; path = SourceFiles/boxes/sessionsbox.h; sourceTree = SOURCE_ROOT; }; 07DB674F1AD07CB800A51329 /* intropwdcheck.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = intropwdcheck.cpp; path = SourceFiles/intro/intropwdcheck.cpp; sourceTree = SOURCE_ROOT; }; 07DB67501AD07CB800A51329 /* intropwdcheck.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = intropwdcheck.h; path = SourceFiles/intro/intropwdcheck.h; sourceTree = SOURCE_ROOT; }; + 07DC429D1B5EA0E600B6B888 /* numbers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = numbers.h; path = SourceFiles/numbers.h; sourceTree = SOURCE_ROOT; }; + 07DC429F1B5EA15300B6B888 /* numbers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = numbers.cpp; path = GeneratedFiles/numbers.cpp; sourceTree = SOURCE_ROOT; }; 07DE929F1AA4923200A18F6F /* passcodewidget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = passcodewidget.cpp; path = SourceFiles/passcodewidget.cpp; sourceTree = SOURCE_ROOT; }; 07DE92A21AA4924400A18F6F /* passcodewidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = passcodewidget.h; path = SourceFiles/passcodewidget.h; sourceTree = SOURCE_ROOT; }; 07DE92A31AA4925B00A18F6F /* autolockbox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = autolockbox.cpp; path = SourceFiles/boxes/autolockbox.cpp; sourceTree = SOURCE_ROOT; }; @@ -359,7 +363,6 @@ 08A7682548FB7E671FF03822 /* boxshadow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = boxshadow.cpp; path = SourceFiles/gui/boxshadow.cpp; sourceTree = ""; }; 098EA7CE256AAFAE4A17EB77 /* introcode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = introcode.h; path = SourceFiles/intro/introcode.h; sourceTree = ""; }; 09FD01F2BD652EB838A296D8 /* application.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = application.h; path = SourceFiles/application.h; sourceTree = ""; }; - 07D795491B5544B200DE9598 /* qtpcre */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtpcre; path = "usr/local/Qt-5.5.0/lib/libqtpcre$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/unix.conf"; sourceTree = ""; }; 0BDE09020E45EFA57DCB2E25 /* photosendbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = photosendbox.h; path = SourceFiles/boxes/photosendbox.h; sourceTree = ""; }; 0C0DC15EB416789673526AA5 /* moc_emojibox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_emojibox.cpp; path = GeneratedFiles/Debug/moc_emojibox.cpp; sourceTree = ""; }; @@ -771,6 +774,7 @@ 130BDDB6FC4D60CF394D95AF /* GeneratedFiles */ = { isa = PBXGroup; children = ( + 07DC429F1B5EA15300B6B888 /* numbers.cpp */, 07080BCD1A43588C00741A51 /* lang_auto.cpp */, 07080BCE1A43588C00741A51 /* lang_auto.h */, 99B8D38F7F5858601230911E /* style_auto.cpp */, @@ -954,6 +958,7 @@ 25CA12A22B83B0B038C5B5DE /* langloaderplain.h */, 6C86B6E6AB1857B735B720D6 /* layerwidget.h */, 07A69331199277BA0099CB9F /* mediaview.h */, + 07DC429D1B5EA0E600B6B888 /* numbers.h */, 0732E4A8199E262300D50FE7 /* overviewwidget.h */, 07DE92A21AA4924400A18F6F /* passcodewidget.h */, 07B604311B46A0EC00CA29FE /* playerwidget.h */, @@ -1549,6 +1554,7 @@ 8F65F0D95B1F0CEB859F2FB3 /* boxshadow.cpp in Compile Sources */, D7EF8F129FCCE9AB3F3F081F /* button.cpp in Compile Sources */, B3CD52E504409DC1B560024F /* countrycodeinput.cpp in Compile Sources */, + 07DC42A01B5EA15300B6B888 /* numbers.cpp in Compile Sources */, C03447C9A7D9FF73463B8BB5 /* countryinput.cpp in Compile Sources */, 07BE850F1A2093C9008ACB9F /* localstorage.cpp in Compile Sources */, CDB0266A8B7CB20A95266BCD /* emoji_config.cpp in Compile Sources */, From f0c580db2dfef463f4559355391bdbe440fce0ee Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 21 Jul 2015 18:12:21 +0200 Subject: [PATCH 056/121] fixed unity count, version 0.8.41.dev --- Telegram/SourceFiles/gui/flatinput.cpp | 2 +- Telegram/SourceFiles/pspecific_linux.cpp | 27 ++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/Telegram/SourceFiles/gui/flatinput.cpp b/Telegram/SourceFiles/gui/flatinput.cpp index ef8e91d0c..0ca753445 100644 --- a/Telegram/SourceFiles/gui/flatinput.cpp +++ b/Telegram/SourceFiles/gui/flatinput.cpp @@ -43,7 +43,7 @@ namespace { } FlatInput::FlatInput(QWidget *parent, const style::flatInput &st, const QString &pholder, const QString &v) : QLineEdit(v, parent), -_fullph(pholder), _fastph(false), _oldtext(v), _kev(0), _customUpDown(false), _phVisible(!v.length()), +_fullph(pholder), _oldtext(v), _fastph(false), _kev(0), _customUpDown(false), _phVisible(!v.length()), a_phLeft(_phVisible ? 0 : st.phShift), a_phAlpha(_phVisible ? 1 : 0), a_phColor(st.phColor->c), a_borderColor(st.borderColor->c), a_bgColor(st.bgColor->c), _notingBene(0), _st(st) { resize(_st.width, _st.height); diff --git a/Telegram/SourceFiles/pspecific_linux.cpp b/Telegram/SourceFiles/pspecific_linux.cpp index a59e15b8a..0eaa7ad69 100644 --- a/Telegram/SourceFiles/pspecific_linux.cpp +++ b/Telegram/SourceFiles/pspecific_linux.cpp @@ -415,9 +415,24 @@ namespace { } void setupGtk() { - if (!noQtTrayIcon) return; - QLibrary lib_gtk, lib_indicator; + if (!noQtTrayIcon) { + if (!noTryUnity) { + if (loadLibrary(lib_gtk, "gtk-3", 0)) { + setupGtkBase(lib_gtk); + } + if (!useGtkBase) { + if (loadLibrary(lib_gtk, "gtk-x11-2.0", 0)) { + setupGtkBase(lib_gtk); + } + } + if (!useGtkBase) { + noTryUnity = true; + } + } + return; + } + if (loadLibrary(lib_indicator, "appindicator3", 1)) { if (loadLibrary(lib_gtk, "gtk-3", 0)) { setupGtkBase(lib_gtk); @@ -745,6 +760,14 @@ void PsMainWindow::psUpdatedPosition() { void PsMainWindow::psCreateTrayIcon() { if (!noQtTrayIcon) { cSetSupportTray(QSystemTrayIcon::isSystemTrayAvailable()); + if (!noTryUnity) { + if (ps_gtk_init_check(0, 0)) { + DEBUG_LOG(("Checked gtk with gtk_init_check!")); + } else { + DEBUG_LOG(("Failed to gtk_init_check(0, 0)!")); + useUnityCount = false; + } + } return; } From 5fe1b7b51fd5b2001d56310d1266f21b58e446ba Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 24 Jul 2015 10:37:17 +0200 Subject: [PATCH 057/121] fixed two crashes, enabled not qt tray icon in pantheon env --- Telegram/SourceFiles/historywidget.cpp | 2 ++ Telegram/SourceFiles/mediaview.cpp | 2 +- Telegram/SourceFiles/pspecific_linux.cpp | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index eab7ea03f..0bd5f65c9 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -1029,6 +1029,8 @@ QString HistoryList::getSelectedText() const { QMap texts; for (SelectedItems::const_iterator i = sel.cbegin(), e = sel.cend(); i != e; ++i) { HistoryItem *item = i.key(); + if (item->detached()) continue; + QString text, sel = item->selectedText(FullItemSel), time = item->date.toString(timeFormat); int32 size = item->from()->name.size() + time.size() + sel.size(); text.reserve(size); diff --git a/Telegram/SourceFiles/mediaview.cpp b/Telegram/SourceFiles/mediaview.cpp index 66c3118f7..f0739b97c 100644 --- a/Telegram/SourceFiles/mediaview.cpp +++ b/Telegram/SourceFiles/mediaview.cpp @@ -315,7 +315,7 @@ void MediaView::updateDropdown() { _btnSaveAs->setVisible(true); _btnCopy->setVisible((_doc && !_current.isNull()) || (_photo && _photo->full->loaded())); _btnForward->setVisible(_msgid > 0); - _btnDelete->setVisible(_msgid > 0 || (App::self() && App::self()->photoId == _photo->id) || (_photo->chat && _photo->chat->photoId == _photo->id)); + _btnDelete->setVisible(_msgid > 0 || (_photo && App::self() && App::self()->photoId == _photo->id) || (_photo && _photo->chat && _photo->chat->photoId == _photo->id)); _btnViewAll->setVisible((_overview != OverviewCount) && _history); _btnViewAll->setText(lang(_doc ? lng_mediaview_files_all : lng_mediaview_photos_all)); _dropdown.updateButtons(); diff --git a/Telegram/SourceFiles/pspecific_linux.cpp b/Telegram/SourceFiles/pspecific_linux.cpp index 0eaa7ad69..9d0b6c44e 100644 --- a/Telegram/SourceFiles/pspecific_linux.cpp +++ b/Telegram/SourceFiles/pspecific_linux.cpp @@ -356,7 +356,7 @@ namespace { inited = true; QString cdesktop = QString(getenv("XDG_CURRENT_DESKTOP")).toLower(); - noQtTrayIcon = false;//(cdesktop == qstr("pantheon")) || (cdesktop == qstr("gnome")); + noQtTrayIcon = (cdesktop == qstr("pantheon"));// || (cdesktop == qstr("gnome")); noTryUnity = (cdesktop != qstr("unity")); if (noQtTrayIcon) cSetSupportTray(false); From 021fbb8ad4a3d534d25fe76c2728de9a8827bbac Mon Sep 17 00:00:00 2001 From: John Preston Date: Sat, 25 Jul 2015 01:43:11 +0200 Subject: [PATCH 058/121] fixed crash in recording --- Telegram/SourceFiles/historywidget.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 0bd5f65c9..ec14a0d7e 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -2460,6 +2460,8 @@ void HistoryWidget::onRecordError() { } void HistoryWidget::onRecordDone(QByteArray result, qint32 samples) { + if (!_peer) return; + App::wnd()->activateWindow(); int32 duration = samples / AudioVoiceMsgFrequency; _imageLoader.append(result, duration, _peer->id, replyToId(), ToPrepareAudio); @@ -2475,7 +2477,7 @@ void HistoryWidget::onRecordUpdate(qint16 level, qint32 samples) { _recordingAnim.start(); _recordingSamples = samples; if (samples < 0 || samples >= AudioVoiceMsgFrequency * AudioVoiceMsgMaxLength) { - stopRecording(samples > 0 && _inField); + stopRecording(_peer && samples > 0 && _inField); } updateField(); } @@ -3588,7 +3590,7 @@ void HistoryWidget::mouseReleaseEvent(QMouseEvent *e) { updateDragAreas(); } if (_recording && cHasAudioCapture()) { - stopRecording(_inField); + stopRecording(_peer && _inField); } } From aaf347432b34ca55c3923d2b6be9cf082f42d95b Mon Sep 17 00:00:00 2001 From: John Preston Date: Sat, 25 Jul 2015 18:54:01 +0200 Subject: [PATCH 059/121] stable version 0.8.42 - new unread loading and Qt 5.5.0 --- Telegram/PrepareWin.bat | 10 +++++----- Telegram/SourceFiles/application.cpp | 4 ++-- Telegram/SourceFiles/config.h | 6 +++--- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 ++++++------ Telegram/Version.sh | 2 +- 7 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index a47c2894d..4092056fc 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,11 +1,11 @@ @echo OFF set "AppVersionStrMajor=0.8" -set "AppVersion=8041" -set "AppVersionStrSmall=0.8.41" -set "AppVersionStr=0.8.41" -set "AppVersionStrFull=0.8.41.0" -set "DevChannel=1" +set "AppVersion=8042" +set "AppVersionStrSmall=0.8.42" +set "AppVersionStr=0.8.42" +set "AppVersionStrFull=0.8.42.0" +set "DevChannel=0" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index ffea005cf..f7a65734c 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -656,8 +656,8 @@ void Application::checkMapVersion() { QString versionFeatures; if (DevChannel && Local::oldMapVersion() < 8041) { versionFeatures = QString::fromUtf8("\xe2\x80\x94 Pretty phone number formatting\n\xe2\x80\x94 Fixed shared contacts display\n\xe2\x80\x94 Fix KDE crash, use Qt tray icon in all Linux systems");// .replace('@', qsl("@") + QChar(0x200D)); - } else if (!DevChannel && Local::oldMapVersion() < 8038) { - versionFeatures = lang(lng_new_version_text).trimmed(); + } else if (!DevChannel && Local::oldMapVersion() < 8042) { + versionFeatures = lang(lng_new_version_minor).trimmed(); } if (!versionFeatures.isEmpty()) { versionFeatures = lng_new_version_wrap(lt_version, QString::fromStdWString(AppVersionStr), lt_changes, versionFeatures, lt_link, qsl("https://desktop.telegram.org/#changelog")); diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 4e4f1ccaa..a4ff05b94 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,9 +17,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8041; -static const wchar_t *AppVersionStr = L"0.8.41"; -static const bool DevChannel = true; +static const int32 AppVersion = 8042; +static const wchar_t *AppVersionStr = L"0.8.42"; +static const bool DevChannel = false; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index 3cf470c3e..72088f0df 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.41 + 0.8.42 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index 043bc5d1de95075a881248042f3d181d8e0f8d7e..03fbda89e5b4e9378d4b8d93dc94a6e83a6de0cc 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_B Date: Tue, 28 Jul 2015 15:47:21 +0200 Subject: [PATCH 060/121] temp downgrade to Qt 5.4 on OS X (Qt 5.5 does not support OS X 10.7) --- Telegram/SourceFiles/application.cpp | 16 +- Telegram/SourceFiles/autoupdater.cpp | 19 +- Telegram/SourceFiles/boxes/aboutbox.cpp | 2 +- Telegram/SourceFiles/config.h | 2 +- Telegram/SourceFiles/logs.cpp | 3 + Telegram/SourceFiles/main.cpp | 9 + Telegram/SourceFiles/settings.cpp | 10 +- Telegram/SourceFiles/settings.h | 2 + Telegram/SourceFiles/settingswidget.cpp | 2 +- Telegram/Telegram.xcodeproj/project.pbxproj | 602 +++++++++--------- Telegram/Telegram.xcodeproj/qt_preprocess.mak | 146 ++--- 11 files changed, 424 insertions(+), 389 deletions(-) diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index f7a65734c..517b29afd 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -217,7 +217,7 @@ void Application::updateGotCurrent() { if (updates.exists()) { QFileInfoList list = updates.entryInfoList(QDir::Files); for (QFileInfoList::iterator i = list.begin(), e = list.end(); i != e; ++i) { - if (QRegularExpression("^(tupdate|tmacupd|tlinuxupd|tlinux32upd)\\d+$", QRegularExpression::CaseInsensitiveOption).match(i->fileName()).hasMatch()) { + if (QRegularExpression("^(tupdate|tmacupd|tmac32upd|tlinuxupd|tlinux32upd)\\d+$", QRegularExpression::CaseInsensitiveOption).match(i->fileName()).hasMatch()) { QFile(i->absoluteFilePath()).remove(); } } @@ -514,7 +514,7 @@ void Application::startUpdateCheck(bool forceWait) { if (updates.exists()) { QFileInfoList list = updates.entryInfoList(QDir::Files); for (QFileInfoList::iterator i = list.begin(), e = list.end(); i != e; ++i) { - if (QRegularExpression("^(tupdate|tmacupd|tlinuxupd|tlinux32upd)\\d+$", QRegularExpression::CaseInsensitiveOption).match(i->fileName()).hasMatch()) { + if (QRegularExpression("^(tupdate|tmacupd|tmac32upd|tlinuxupd|tlinux32upd)\\d+$", QRegularExpression::CaseInsensitiveOption).match(i->fileName()).hasMatch()) { sendRequest = true; } } @@ -524,7 +524,11 @@ void Application::startUpdateCheck(bool forceWait) { if (sendRequest) { QUrl url(cUpdateURL()); - if (DevChannel) url.setQuery("dev=1"); + if (cDevVersion()) { + url.setQuery(qsl("version=%1&dev=1").arg(AppVersion)); + } else { + url.setQuery(qsl("version=%1").arg(AppVersion)); + } QString u = url.toString(); QNetworkRequest checkVersion(url); if (updateReply) updateReply->deleteLater(); @@ -654,9 +658,9 @@ void Application::checkMapVersion() { psRegisterCustomScheme(); if (Local::oldMapVersion()) { QString versionFeatures; - if (DevChannel && Local::oldMapVersion() < 8041) { - versionFeatures = QString::fromUtf8("\xe2\x80\x94 Pretty phone number formatting\n\xe2\x80\x94 Fixed shared contacts display\n\xe2\x80\x94 Fix KDE crash, use Qt tray icon in all Linux systems");// .replace('@', qsl("@") + QChar(0x200D)); - } else if (!DevChannel && Local::oldMapVersion() < 8042) { + if (cDevVersion() && Local::oldMapVersion() < 8042) { + versionFeatures = QString::fromUtf8("\xe2\x80\x94 Dev version will now get updated to stable as well");// .replace('@', qsl("@") + QChar(0x200D)); + } else if (!cDevVersion() && Local::oldMapVersion() < 8043) { versionFeatures = lang(lng_new_version_minor).trimmed(); } if (!versionFeatures.isEmpty()) { diff --git a/Telegram/SourceFiles/autoupdater.cpp b/Telegram/SourceFiles/autoupdater.cpp index ec8f7fcf6..ee6658e17 100644 --- a/Telegram/SourceFiles/autoupdater.cpp +++ b/Telegram/SourceFiles/autoupdater.cpp @@ -256,15 +256,28 @@ void UpdateDownloader::unpackUpdate() { return fatalFail(); } - RSA *pbKey = PEM_read_bio_RSAPublicKey(BIO_new_mem_buf(const_cast(DevChannel ? UpdatesPublicDevKey : UpdatesPublicKey), -1), 0, 0, 0); + RSA *pbKey = PEM_read_bio_RSAPublicKey(BIO_new_mem_buf(const_cast(DevVersion ? UpdatesPublicDevKey : UpdatesPublicKey), -1), 0, 0, 0); if (!pbKey) { LOG(("Update Error: cant read public rsa key!")); return fatalFail(); } if (RSA_verify(NID_sha1, (const uchar*)(compressed.constData() + hSigLen), hShaLen, (const uchar*)(compressed.constData()), hSigLen, pbKey) != 1) { // verify signature RSA_free(pbKey); - LOG(("Update Error: bad RSA signature of update file!")); - return fatalFail(); + if (cDevVersion()) { // try other public key, if we are in dev version + RSA *pbKey = PEM_read_bio_RSAPublicKey(BIO_new_mem_buf(const_cast(DevVersion ? UpdatesPublicKey : UpdatesPublicDevKey), -1), 0, 0, 0); + if (!pbKey) { + LOG(("Update Error: cant read public rsa key!")); + return fatalFail(); + } + if (RSA_verify(NID_sha1, (const uchar*)(compressed.constData() + hSigLen), hShaLen, (const uchar*)(compressed.constData()), hSigLen, pbKey) != 1) { // verify signature + RSA_free(pbKey); + LOG(("Update Error: bad RSA signature of update file!")); + return fatalFail(); + } + } else { + LOG(("Update Error: bad RSA signature of update file!")); + return fatalFail(); + } } RSA_free(pbKey); diff --git a/Telegram/SourceFiles/boxes/aboutbox.cpp b/Telegram/SourceFiles/boxes/aboutbox.cpp index 267f414cf..685131f9e 100644 --- a/Telegram/SourceFiles/boxes/aboutbox.cpp +++ b/Telegram/SourceFiles/boxes/aboutbox.cpp @@ -24,7 +24,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org AboutBox::AboutBox() : _done(this, lang(lng_about_done), st::aboutCloseButton), -_version(this, qsl("[a href=\"https://desktop.telegram.org/#changelog\"]") + textClean(lng_about_version(lt_version, QString::fromWCharArray(AppVersionStr) + (DevChannel ? " dev" : ""))) + qsl("[/a]"), st::aboutVersion, st::defaultTextStyle), +_version(this, qsl("[a href=\"https://desktop.telegram.org/#changelog\"]") + textClean(lng_about_version(lt_version, QString::fromWCharArray(AppVersionStr) + (cDevVersion() ? " dev" : ""))) + qsl("[/a]"), st::aboutVersion, st::defaultTextStyle), _text(this, lang(lng_about_text), st::aboutLabel, st::aboutTextStyle) { resizeMaxHeight(st::aboutWidth, st::aboutHeight); diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index a4ff05b94..b69209a9e 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -19,7 +19,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org static const int32 AppVersion = 8042; static const wchar_t *AppVersionStr = L"0.8.42"; -static const bool DevChannel = false; +static const bool DevVersion = false; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; diff --git a/Telegram/SourceFiles/logs.cpp b/Telegram/SourceFiles/logs.cpp index 60e6ee8f8..c723b2d68 100644 --- a/Telegram/SourceFiles/logs.cpp +++ b/Telegram/SourceFiles/logs.cpp @@ -232,6 +232,9 @@ void logsInit() { logsInitDebug(); cSetDebug(true); } + if (!cDevVersion() && QFile(cWorkingDir() + qsl("tdata/devversion")).exists()) { + cSetDevVersion(true); + } QDir().setCurrent(cWorkingDir()); } diff --git a/Telegram/SourceFiles/main.cpp b/Telegram/SourceFiles/main.cpp index 0bea35033..c1034ca0e 100644 --- a/Telegram/SourceFiles/main.cpp +++ b/Telegram/SourceFiles/main.cpp @@ -79,6 +79,15 @@ int main(int argc, char *argv[]) { DEBUG_LOG(("Application Info: Telegram done, result: %1").arg(result)); if (cRestartingUpdate()) { + if (DevVersion) { + LOG(("Writing 'withdebug' file before launching the Updater!")); + QFile f(cWorkingDir() + qsl("tdata/withdebug")); + if (!f.exists() && f.open(QIODevice::WriteOnly)) { + f.write("1"); + f.close(); + } + } + DEBUG_LOG(("Application Info: executing updater to install update..")); psExecUpdater(); } else if (cRestarting()) { diff --git a/Telegram/SourceFiles/settings.cpp b/Telegram/SourceFiles/settings.cpp index a770c64a9..b8eb89701 100644 --- a/Telegram/SourceFiles/settings.cpp +++ b/Telegram/SourceFiles/settings.cpp @@ -25,6 +25,7 @@ Qt::LayoutDirection gLangDir = Qt::LeftToRight; mtpDcOptions gDcOptions; +bool gDevVersion = DevVersion; bool gTestMode = false; bool gDebug = false; bool gManyInstance = false; @@ -159,10 +160,13 @@ int gOtherOnline = 0; float64 gSongVolume = 0.9; void settingsParseArgs(int argc, char *argv[]) { -#ifdef Q_OS_MAC - gCustomNotifies = (QSysInfo::macVersion() < QSysInfo::MV_10_8); -#else gCustomNotifies = true; +#ifdef Q_OS_MAC + if (QSysInfo::macVersion() < QSysInfo::MV_10_8) { + gUpdateURL = QUrl(qsl("http://tdesktop.com/mac32/tupdates/current")); + } else { + gCustomNotifies = false; + } #endif memset_rand(&gInstance, sizeof(gInstance)); gExeDir = psCurrentExeDirectory(argc, argv); diff --git a/Telegram/SourceFiles/settings.h b/Telegram/SourceFiles/settings.h index 48faec016..7443c09e0 100644 --- a/Telegram/SourceFiles/settings.h +++ b/Telegram/SourceFiles/settings.h @@ -64,6 +64,8 @@ struct mtpDcOption { typedef QMap mtpDcOptions; DeclareSetting(mtpDcOptions, DcOptions); +DeclareSetting(bool, DevVersion); + DeclareSetting(bool, TestMode); DeclareSetting(QString, LoggedPhoneNumber); DeclareReadSetting(uint32, ConnectionsInSession); diff --git a/Telegram/SourceFiles/settingswidget.cpp b/Telegram/SourceFiles/settingswidget.cpp index 6a6cad5be..641eb499d 100644 --- a/Telegram/SourceFiles/settingswidget.cpp +++ b/Telegram/SourceFiles/settingswidget.cpp @@ -236,7 +236,7 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), connect(&_dpiAutoScale, SIGNAL(changed()), this, SLOT(onScaleAuto())); connect(&_dpiSlider, SIGNAL(changed(int32)), this, SLOT(onScaleChange())); - _curVersionText = lng_settings_current_version(lt_version, QString::fromWCharArray(AppVersionStr) + (DevChannel ? " dev" : "")) + ' '; + _curVersionText = lng_settings_current_version(lt_version, QString::fromWCharArray(AppVersionStr) + (cDevVersion() ? " dev" : "")) + ' '; _curVersionWidth = st::linkFont->m.width(_curVersionText); _newVersionText = lang(lng_settings_update_ready) + ' '; _newVersionWidth = st::linkFont->m.width(_newVersionText); diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index b00beb8ac..f05c61f35 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -260,9 +260,9 @@ /* Begin PBXFileReference section */ 01D6341DC31FE5997F7BB159 /* mtpFileLoader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtpFileLoader.cpp; path = SourceFiles/mtproto/mtpFileLoader.cpp; sourceTree = ""; }; 032C1BF3E727B450A4851D48 /* emojibox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = emojibox.h; path = SourceFiles/boxes/emojibox.h; sourceTree = ""; }; - 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.5.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.4.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 047DAFB0A7DE92C63033A43C /* mainwidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mainwidget.cpp; path = SourceFiles/mainwidget.cpp; sourceTree = ""; }; - 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; + 060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; 06E379415713F34B83F99C35 /* app.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = app.cpp; path = SourceFiles/app.cpp; sourceTree = ""; }; 07055CC3194EE85B0008DEF6 /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcrypto.a; path = "./../../Libraries/openssl-xcode/libcrypto.a"; sourceTree = ""; }; 07080BCB1A4357F300741A51 /* lang.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = lang.strings; path = Resources/lang.strings; sourceTree = SOURCE_ROOT; }; @@ -290,7 +290,7 @@ 0755AEDA1AD12A80004D738A /* moc_abstractbox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_abstractbox.cpp; path = GeneratedFiles/Debug/moc_abstractbox.cpp; sourceTree = SOURCE_ROOT; }; 0755AEDB1AD12A80004D738A /* moc_intropwdcheck.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_intropwdcheck.cpp; path = GeneratedFiles/Debug/moc_intropwdcheck.cpp; sourceTree = SOURCE_ROOT; }; 0755AEDC1AD12A80004D738A /* moc_sessionsbox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_sessionsbox.cpp; path = GeneratedFiles/Debug/moc_sessionsbox.cpp; sourceTree = SOURCE_ROOT; }; - 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; 075F99A91A45EEF200915C72 /* lang_es.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = lang_es.strings; path = SourceFiles/langs/lang_es.strings; sourceTree = SOURCE_ROOT; }; 0764D5581ABAD6F900FBFEED /* apiwrap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = apiwrap.cpp; path = SourceFiles/apiwrap.cpp; sourceTree = SOURCE_ROOT; }; 0764D5591ABAD6F900FBFEED /* apiwrap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = apiwrap.h; path = SourceFiles/apiwrap.h; sourceTree = SOURCE_ROOT; }; @@ -329,7 +329,7 @@ 07D7034919B8755A00C4EED2 /* audio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio.cpp; path = SourceFiles/audio.cpp; sourceTree = SOURCE_ROOT; }; 07D7034A19B8755A00C4EED2 /* audio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio.h; path = SourceFiles/audio.h; sourceTree = SOURCE_ROOT; }; 07D703BA19B88FB900C4EED2 /* moc_audio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_audio.cpp; path = GeneratedFiles/Debug/moc_audio.cpp; sourceTree = SOURCE_ROOT; }; - 07D795491B5544B200DE9598 /* qtpcre */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtpcre; path = "usr/local/Qt-5.5.0/lib/libqtpcre$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 07D795491B5544B200DE9598 /* qtpcre */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtpcre; path = "usr/local/Qt-5.4.0/lib/libqtpcre$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 07D7EABB1A597DD000838BA2 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; 07D7EABD1A597DD200838BA2 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; 07D7EABE1A597DD300838BA2 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; @@ -363,7 +363,7 @@ 08A7682548FB7E671FF03822 /* boxshadow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = boxshadow.cpp; path = SourceFiles/gui/boxshadow.cpp; sourceTree = ""; }; 098EA7CE256AAFAE4A17EB77 /* introcode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = introcode.h; path = SourceFiles/intro/introcode.h; sourceTree = ""; }; 09FD01F2BD652EB838A296D8 /* application.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = application.h; path = SourceFiles/application.h; sourceTree = ""; }; - 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/unix.conf"; sourceTree = ""; }; + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/unix.conf"; sourceTree = ""; }; 0BDE09020E45EFA57DCB2E25 /* photosendbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = photosendbox.h; path = SourceFiles/boxes/photosendbox.h; sourceTree = ""; }; 0C0DC15EB416789673526AA5 /* moc_emojibox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_emojibox.cpp; path = GeneratedFiles/Debug/moc_emojibox.cpp; sourceTree = ""; }; 0CAA815FFFEDCD84808E11F5 /* logs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = logs.h; path = SourceFiles/logs.h; sourceTree = ""; }; @@ -372,15 +372,15 @@ 0FBED3C6654EA3753EB39831 /* mtpSession.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtpSession.cpp; path = SourceFiles/mtproto/mtpSession.cpp; sourceTree = ""; }; 0FC38EE7F29EF895925A2C49 /* style_core.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = style_core.h; path = SourceFiles/gui/style_core.h; sourceTree = ""; }; 1080B6D395843B8F76A2E45E /* moc_title.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_title.cpp; path = GeneratedFiles/Debug/moc_title.cpp; sourceTree = ""; }; - 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = ""; }; - 112159B026FDEF9CD4E24175 /* Qt5Multimedia */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Multimedia; path = "/usr/local/Qt-5.5.0/lib/libQt5Multimedia$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = ""; }; + 112159B026FDEF9CD4E24175 /* Qt5Multimedia */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Multimedia; path = "/usr/local/Qt-5.4.0/lib/libQt5Multimedia$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 120EBCD9A37DB9A36BFE58C0 /* contactsbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = contactsbox.h; path = SourceFiles/boxes/contactsbox.h; sourceTree = ""; }; 1292B92B4848460640F6A391 /* telegram.qrc */ = {isa = PBXFileReference; lastKnownFileType = text; name = telegram.qrc; path = SourceFiles/telegram.qrc; sourceTree = ""; }; 135FD3715BFDC50AD7B00E04 /* text.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = text.cpp; path = SourceFiles/gui/text.cpp; sourceTree = ""; }; 143405635D04698F421A12EA /* aboutbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = aboutbox.h; path = SourceFiles/boxes/aboutbox.h; sourceTree = ""; }; 14437BFDCD58FF1742EF1B35 /* photocropbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = photocropbox.h; path = SourceFiles/boxes/photocropbox.h; sourceTree = ""; }; 152B8D1BCECEB7B0C77E073C /* intro.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = intro.h; path = SourceFiles/intro/intro.h; sourceTree = ""; }; - 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = ""; }; + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = ""; }; 186D09F4CB713AD4B8BDD260 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = ""; }; 19618554524B8D928F13940D /* emoji_config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = emoji_config.h; path = SourceFiles/gui/emoji_config.h; sourceTree = ""; }; 1A4C47331E186344291B8178 /* dropdown.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dropdown.h; path = SourceFiles/dropdown.h; sourceTree = ""; }; @@ -389,74 +389,74 @@ 1DC02F674A7192FF8BE391A7 /* types.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = types.h; path = SourceFiles/types.h; sourceTree = ""; }; 1DEFC0760BB9340529F582F7 /* confirmbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = confirmbox.h; path = SourceFiles/boxes/confirmbox.h; sourceTree = ""; }; 1E5EEB5782B6357057356F9E /* moc_flatinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_flatinput.cpp; path = GeneratedFiles/Debug/moc_flatinput.cpp; sourceTree = ""; }; - 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = ""; }; + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = ""; }; 1FE45A67215BEA2434F588E8 /* moc_layerwidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_layerwidget.cpp; path = GeneratedFiles/Debug/moc_layerwidget.cpp; sourceTree = ""; }; 205259EEEE2BADA5E64741E3 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = /System/Library/Frameworks/Security.framework; sourceTree = ""; }; 206B4F5CBD5354BCE19FF32F /* countries.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = countries.h; path = SourceFiles/countries.h; sourceTree = ""; }; 2181F5E34DE0A4B2F811E2E2 /* moc_flatlabel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_flatlabel.cpp; path = GeneratedFiles/Debug/moc_flatlabel.cpp; sourceTree = ""; }; 21F907AB8D19BD779147A085 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = /System/Library/Frameworks/AVFoundation.framework; sourceTree = ""; }; 220B97F8F62C720E6059A64B /* profilewidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = profilewidget.h; path = SourceFiles/profilewidget.h; sourceTree = ""; }; - 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = ""; }; - 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = ""; }; - 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = ""; }; - 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = ""; }; + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = ""; }; + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = ""; }; + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = ""; }; + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = ""; }; 24F7D3E789E91B10E422C116 /* config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = config.h; path = SourceFiles/config.h; sourceTree = ""; }; 25CA12A22B83B0B038C5B5DE /* langloaderplain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = langloaderplain.h; path = SourceFiles/langloaderplain.h; sourceTree = ""; }; 26083D8E535AFF927591E1A5 /* moc_contactsbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_contactsbox.cpp; path = GeneratedFiles/Debug/moc_contactsbox.cpp; sourceTree = ""; }; 26B83A58EE268598E703875D /* history.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = history.cpp; path = SourceFiles/history.cpp; sourceTree = ""; }; 27E7471A4EC90E84353AA16F /* mtpCoreTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpCoreTypes.h; path = SourceFiles/mtproto/mtpCoreTypes.h; sourceTree = ""; }; - 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = ""; }; - 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = ""; }; + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = ""; }; + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = ""; }; 2BB2A1BB8DB0993F78F4E3C7 /* title.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = title.cpp; path = SourceFiles/title.cpp; sourceTree = ""; }; 2C540BAEABD7F9B5FA11008E /* moc_mtpDC.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mtpDC.cpp; path = GeneratedFiles/Debug/moc_mtpDC.cpp; sourceTree = ""; }; 2C99425D7670941EAF07B453 /* moc_historywidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_historywidget.cpp; path = GeneratedFiles/Debug/moc_historywidget.cpp; sourceTree = ""; }; - 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = ""; }; - 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = ""; }; + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = ""; }; + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = ""; }; 2EA58EF6CDF368B0132BAEB9 /* settings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = settings.h; path = SourceFiles/settings.h; sourceTree = ""; }; 301BB513F2F5D447B3BF22DF /* window.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = window.h; path = SourceFiles/window.h; sourceTree = ""; }; - 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = ""; }; - 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = ""; }; + 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 315C7FACB4A9E18AA95486CA /* mtpDC.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtpDC.cpp; path = SourceFiles/mtproto/mtpDC.cpp; sourceTree = ""; }; - 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = ""; }; - 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = ""; }; + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = ""; }; + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = ""; }; 34E1DF19219C52D7DB20224A /* flatlabel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flatlabel.h; path = SourceFiles/gui/flatlabel.h; sourceTree = ""; }; - 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = ""; }; - 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = ""; }; + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = ""; }; + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = ""; }; 36BDA5D01BED543A92886669 /* Telegram.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = Telegram.pro; sourceTree = ""; }; 36F718DC72345A84987DB0F6 /* flatbutton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flatbutton.h; path = SourceFiles/gui/flatbutton.h; sourceTree = ""; }; - 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = ""; }; + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = ""; }; 39C1ADF085370E033CB7E7E1 /* style_classes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = style_classes.h; path = GeneratedFiles/style_classes.h; sourceTree = ""; }; 3A220FD1AE5AD9FE3DC073A4 /* moc_mainwidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mainwidget.cpp; path = GeneratedFiles/Debug/moc_mainwidget.cpp; sourceTree = ""; }; 3B3ED09AB00290D78CF1181B /* moc_dialogswidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_dialogswidget.cpp; path = GeneratedFiles/Debug/moc_dialogswidget.cpp; sourceTree = ""; }; - 3BBB805F6180E363BF89151A /* qtaudio_coreaudio */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtaudio_coreaudio; path = "/usr/local/Qt-5.5.0/plugins/audio/libqtaudio_coreaudio$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 3BBB805F6180E363BF89151A /* qtaudio_coreaudio */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtaudio_coreaudio; path = "/usr/local/Qt-5.4.0/plugins/audio/libqtaudio_coreaudio$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 3BE70E2A82DC2BF402165ED5 /* sysbuttons.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sysbuttons.h; path = SourceFiles/sysbuttons.h; sourceTree = ""; }; 3C44131FDCFEF4396B9EA2BA /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; }; 3D54A9F3266BB8739520E3FB /* moc_fileuploader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_fileuploader.cpp; path = GeneratedFiles/Debug/moc_fileuploader.cpp; sourceTree = ""; }; 3E329D4547CC23585307FA32 /* countryinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = countryinput.cpp; path = SourceFiles/gui/countryinput.cpp; sourceTree = ""; }; - 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = ""; }; + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = ""; }; 420A06A32B66D250142B4B6D /* style_core.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = style_core.cpp; path = SourceFiles/gui/style_core.cpp; sourceTree = ""; }; - 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf"; sourceTree = ""; }; - 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = ""; }; + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf"; sourceTree = ""; }; + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = ""; }; 4604687EBA85611C9E8A9CDF /* button.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = button.h; path = SourceFiles/gui/button.h; sourceTree = ""; }; 46292F489228B60010794CE4 /* moc_button.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_button.cpp; path = GeneratedFiles/Debug/moc_button.cpp; sourceTree = ""; }; - 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.5.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.4.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 48003469151B9DDE82E851FB /* moc_profilewidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_profilewidget.cpp; path = GeneratedFiles/Debug/moc_profilewidget.cpp; sourceTree = ""; }; 4AF15B5A0A43EB62D6DAF211 /* libexif.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libexif.a; path = "../../Libraries/libexif-0.6.20/libexif/.libs/libexif.a"; sourceTree = ""; }; - 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = ""; }; + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = ""; }; 4D1099F2D3696E8A0E17D37D /* mtpSession.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpSession.h; path = SourceFiles/mtproto/mtpSession.h; sourceTree = ""; }; 4D504A849F15EB58E53A4E5F /* title.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = title.h; path = SourceFiles/title.h; sourceTree = ""; }; 4D55B83DFDFE3D492CDBD27A /* button.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = button.cpp; path = SourceFiles/gui/button.cpp; sourceTree = ""; }; 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; 4E4D06EC4D2C82C7D6E079A2 /* flatinput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flatinput.h; path = SourceFiles/gui/flatinput.h; sourceTree = ""; }; - 4EC011DBE92DD1FD208D94D2 /* qtmultimedia_m3u */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtmultimedia_m3u; path = "/usr/local/Qt-5.5.0/plugins/playlistformats/libqtmultimedia_m3u$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = ""; }; + 4EC011DBE92DD1FD208D94D2 /* qtmultimedia_m3u */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtmultimedia_m3u; path = "/usr/local/Qt-5.4.0/plugins/playlistformats/libqtmultimedia_m3u$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = ""; }; 5059175BDCEC77B7246DE1B9 /* flatcheckbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flatcheckbox.h; path = SourceFiles/gui/flatcheckbox.h; sourceTree = ""; }; 507CCEEC4CBA3E3BD6EEDED1 /* twidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = twidget.h; path = SourceFiles/gui/twidget.h; sourceTree = ""; }; 51355181C0E6689B0B764543 /* connectionbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = connectionbox.cpp; path = SourceFiles/boxes/connectionbox.cpp; sourceTree = ""; }; 5271C394C1E7646D117CE67E /* main.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = SourceFiles/main.cpp; sourceTree = ""; }; 547CCADBD1CC5050167EF948 /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = /System/Library/Frameworks/CoreMedia.framework; sourceTree = ""; }; 5591A965D1DC024FBDB40151 /* moc_mtpFileLoader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mtpFileLoader.cpp; path = GeneratedFiles/Debug/moc_mtpFileLoader.cpp; sourceTree = ""; }; - 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = ""; }; + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = ""; }; 55A654A2EE8554FF062742B8 /* moc_twidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_twidget.cpp; path = GeneratedFiles/Debug/moc_twidget.cpp; sourceTree = ""; }; 55B4A93DD455EED91C899A8E /* dialogswidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dialogswidget.h; path = SourceFiles/dialogswidget.h; sourceTree = ""; }; 58A7114F60E7D09E73283983 /* moc_introsignup.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_introsignup.cpp; path = GeneratedFiles/Debug/moc_introsignup.cpp; sourceTree = ""; }; @@ -464,99 +464,99 @@ 59E514973BA9BF6599252DDC /* flattextarea.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flattextarea.h; path = SourceFiles/gui/flattextarea.h; sourceTree = ""; }; 5A5431331A13AA7B07414240 /* stdafx.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = stdafx.cpp; path = SourceFiles/stdafx.cpp; sourceTree = ""; }; 5A7F88F9C7F08D3DDE6EEF6B /* localimageloader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = localimageloader.cpp; path = SourceFiles/localimageloader.cpp; sourceTree = ""; }; - 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.5.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.4.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 5A9B4C6C59856143F3D0DE53 /* layerwidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = layerwidget.cpp; path = SourceFiles/layerwidget.cpp; sourceTree = ""; }; - 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = ""; }; + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = ""; }; 5C7FD422BBEDA858D7237AE9 /* flattextarea.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flattextarea.cpp; path = SourceFiles/gui/flattextarea.cpp; sourceTree = ""; }; - 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; - 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; 6011DDB120E1B2D4803E129A /* stdafx.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = stdafx.h; path = SourceFiles/stdafx.h; sourceTree = ""; }; 60C0061633AC4244EA634B2A /* countrycodeinput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = countrycodeinput.h; path = SourceFiles/gui/countrycodeinput.h; sourceTree = ""; }; - 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; 61C679D8B4B332026BD34200 /* introphone.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = introphone.cpp; path = SourceFiles/intro/introphone.cpp; sourceTree = ""; }; 62807F13DBD204D0716143AD /* Telegram.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Telegram.app; sourceTree = BUILT_PRODUCTS_DIR; }; 63AF8520023B4EA40306CB03 /* moc_mtpSession.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mtpSession.cpp; path = GeneratedFiles/Debug/moc_mtpSession.cpp; sourceTree = ""; }; - 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf"; sourceTree = ""; }; + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf"; sourceTree = ""; }; 6532A0DC7EFE446967682E83 /* moc_downloadpathbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_downloadpathbox.cpp; path = GeneratedFiles/Debug/moc_downloadpathbox.cpp; sourceTree = ""; }; 6610564B876E47D289A596DB /* confirmbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = confirmbox.cpp; path = SourceFiles/boxes/confirmbox.cpp; sourceTree = ""; }; - 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf"; sourceTree = ""; }; - 6700DD555BF1C0FC338FB959 /* Qt5Network */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Network; path = "/usr/local/Qt-5.5.0/lib/libQt5Network$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf"; sourceTree = ""; }; + 6700DD555BF1C0FC338FB959 /* Qt5Network */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Network; path = "/usr/local/Qt-5.4.0/lib/libQt5Network$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 6868ADA9E9A9801B2BA92B97 /* countryinput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = countryinput.h; path = SourceFiles/gui/countryinput.h; sourceTree = ""; }; - 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = ""; }; + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = ""; }; 6A510365F9F6367ECB0DB065 /* images.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = images.cpp; path = SourceFiles/gui/images.cpp; sourceTree = ""; }; 6B46A0EE3C3B9D3B5A24946E /* moc_window.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_window.cpp; path = GeneratedFiles/Debug/moc_window.cpp; sourceTree = ""; }; 6B90F69947805586A6FAE80E /* sysbuttons.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = sysbuttons.cpp; path = SourceFiles/sysbuttons.cpp; sourceTree = ""; }; - 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = ""; }; + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = ""; }; 6C86B6E6AB1857B735B720D6 /* layerwidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = layerwidget.h; path = SourceFiles/layerwidget.h; sourceTree = ""; }; 6D50D70712776D7ED3B00E5C /* mtp.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtp.cpp; path = SourceFiles/mtproto/mtp.cpp; sourceTree = ""; }; 6E1859D714E4471E053D90C9 /* scrollarea.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = scrollarea.cpp; path = SourceFiles/gui/scrollarea.cpp; sourceTree = ""; }; - 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qdevice.pri"; sourceTree = ""; }; + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qdevice.pri"; sourceTree = ""; }; 6E8FD0ED1B60D43929944CD2 /* text.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = text.h; path = SourceFiles/gui/text.h; sourceTree = ""; }; 710C982FC773400941B3AFBC /* dropdown.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = dropdown.cpp; path = SourceFiles/dropdown.cpp; sourceTree = ""; }; 723F90793B2C195E2CCB2233 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 73737DC91E390C4AB18FB595 /* pspecific_mac_p.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = pspecific_mac_p.mm; path = SourceFiles/pspecific_mac_p.mm; sourceTree = ""; }; 74772222DA764BE4623EAC5D /* moc_pspecific_mac.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_pspecific_mac.cpp; path = GeneratedFiles/Debug/moc_pspecific_mac.cpp; sourceTree = ""; }; 748F1BCCBEEB3675768960FB /* mtpAuthKey.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpAuthKey.h; path = SourceFiles/mtproto/mtpAuthKey.h; sourceTree = ""; }; - 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; 751C8D0E0BE6D16937B77A2C /* countrycodeinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = countrycodeinput.cpp; path = SourceFiles/gui/countrycodeinput.cpp; sourceTree = ""; }; 763ED3C6815ED6C89E352652 /* flatlabel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flatlabel.cpp; path = SourceFiles/gui/flatlabel.cpp; sourceTree = ""; }; - 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; - 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; - 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = ""; }; + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = ""; }; 7C8F9CA4FCE8AF8FCCCB961E /* phoneinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = phoneinput.cpp; path = SourceFiles/gui/phoneinput.cpp; sourceTree = ""; }; 7CA6945B22800A0F30B75DA5 /* addcontactbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = addcontactbox.cpp; path = SourceFiles/boxes/addcontactbox.cpp; sourceTree = ""; }; 7CDE9D7CB2C729BC3612372B /* addcontactbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = addcontactbox.h; path = SourceFiles/boxes/addcontactbox.h; sourceTree = ""; }; 7D075A915E8739C1B6BC5F43 /* types.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = types.cpp; path = SourceFiles/types.cpp; sourceTree = ""; }; - 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = ""; }; + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = ""; }; 7DBFC0B5EAF874BA10E3D603 /* mtpScheme.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpScheme.h; path = SourceFiles/mtproto/mtpScheme.h; sourceTree = ""; }; - 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = ""; }; + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = ""; }; 7EC00404ACD5AB0E97726B0E /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = /System/Library/Frameworks/QuartzCore.framework; sourceTree = ""; }; - 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = ""; }; + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = ""; }; 81780025807318AEA3B8A6FF /* moc_addcontactbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_addcontactbox.cpp; path = GeneratedFiles/Debug/moc_addcontactbox.cpp; sourceTree = ""; }; - 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/macx.conf"; sourceTree = ""; }; - 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = ""; }; + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/macx.conf"; sourceTree = ""; }; + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = ""; }; 83728F60A64483E0AA933D76 /* pspecific.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pspecific.h; path = SourceFiles/pspecific.h; sourceTree = ""; }; 83A36F229E897566E011B79E /* scrollarea.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = scrollarea.h; path = SourceFiles/gui/scrollarea.h; sourceTree = ""; }; - 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = ""; }; - 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = ""; }; + 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = ""; }; + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = ""; }; 85FABD67716E36CD8B3CA4FA /* animation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = animation.h; path = SourceFiles/gui/animation.h; sourceTree = ""; }; - 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = ""; }; - 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = ""; }; - 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = ""; }; + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = ""; }; + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = ""; }; + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = ""; }; 8880067F9BFD46108777E134 /* mtp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtp.h; path = SourceFiles/mtproto/mtp.h; sourceTree = ""; }; 8918F4B71ED5FC138AFD3F70 /* moc_scrollarea.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_scrollarea.cpp; path = GeneratedFiles/Debug/moc_scrollarea.cpp; sourceTree = ""; }; - 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = ""; }; - 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = ""; }; + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = ""; }; + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = ""; }; 89F92B278CA31C393E245056 /* mtpRPC.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtpRPC.cpp; path = SourceFiles/mtproto/mtpRPC.cpp; sourceTree = ""; }; - 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = ""; }; + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = ""; }; 8A28F7789408AA839F48A5F2 /* settings.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = settings.cpp; path = SourceFiles/settings.cpp; sourceTree = ""; }; 8A9D926C08392F7A9BC83B0C /* fileuploader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fileuploader.h; path = SourceFiles/fileuploader.h; sourceTree = ""; }; - 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = ""; }; + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = ""; }; 8B98A212C068D6CC7CE73CAA /* moc_introcode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_introcode.cpp; path = GeneratedFiles/Debug/moc_introcode.cpp; sourceTree = ""; }; - 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = ""; }; - 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang.conf"; sourceTree = ""; }; + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = ""; }; + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang.conf"; sourceTree = ""; }; 8C800AAC9549E6E9E7046BED /* contactsbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = contactsbox.cpp; path = SourceFiles/boxes/contactsbox.cpp; sourceTree = ""; }; 8CCCACE96535180FEB557712 /* settingswidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = settingswidget.cpp; path = SourceFiles/settingswidget.cpp; sourceTree = ""; }; - 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; - 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = ""; }; + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = ""; }; 8DF456E9A416E4C3C2D6946C /* downloadpathbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = downloadpathbox.cpp; path = SourceFiles/boxes/downloadpathbox.cpp; sourceTree = ""; }; - 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = ""; }; + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = ""; }; 8EB83A4D34226609E79A613A /* connectionbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = connectionbox.h; path = SourceFiles/boxes/connectionbox.h; sourceTree = ""; }; - 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = ""; }; - 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = ""; }; + 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = ""; }; + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = ""; }; 924D4939FD169BB4B8AEB1C9 /* moc_mtp.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mtp.cpp; path = GeneratedFiles/Debug/moc_mtp.cpp; sourceTree = ""; }; 93AFE74928551FC3D7E8390B /* moc_settingswidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_settingswidget.cpp; path = GeneratedFiles/Debug/moc_settingswidget.cpp; sourceTree = ""; }; - 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = ""; }; + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = ""; }; 963123025C466CB8DD9CF4AF /* mtpConnection.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpConnection.h; path = SourceFiles/mtproto/mtpConnection.h; sourceTree = ""; }; 96ACDDE3DCB798B97F9EA2F4 /* mtpFileLoader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpFileLoader.h; path = SourceFiles/mtproto/mtpFileLoader.h; sourceTree = ""; }; 9742F24EE18EA44D52824F1E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; 974DB34EEB8F83B91614C0B0 /* logs.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = logs.cpp; path = SourceFiles/logs.cpp; sourceTree = ""; }; 99B8D38F7F5858601230911E /* style_auto.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = style_auto.cpp; path = GeneratedFiles/style_auto.cpp; sourceTree = ""; }; - 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = ""; }; - 9A55B8F7C143D66AD9EAE304 /* qgenericbearer */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qgenericbearer; path = "/usr/local/Qt-5.5.0/plugins/bearer/libqgenericbearer$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = ""; }; + 9A55B8F7C143D66AD9EAE304 /* qgenericbearer */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qgenericbearer; path = "/usr/local/Qt-5.4.0/plugins/bearer/libqgenericbearer$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 9A69B711DE4B9C89BA803750 /* moc_aboutbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_aboutbox.cpp; path = GeneratedFiles/Debug/moc_aboutbox.cpp; sourceTree = ""; }; 9AB1479D7D63386FD2046620 /* flatinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flatinput.cpp; path = SourceFiles/gui/flatinput.cpp; sourceTree = ""; }; 9B36BB8C5B8CA7B07F3F35F0 /* fileuploader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = fileuploader.cpp; path = SourceFiles/fileuploader.cpp; sourceTree = ""; }; @@ -566,135 +566,135 @@ 9E0704DE8650D7952DC6B7AE /* moc_photosendbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_photosendbox.cpp; path = GeneratedFiles/Debug/moc_photosendbox.cpp; sourceTree = ""; }; 9EFD7CB36012BFC00CC79434 /* style_auto.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = style_auto.h; path = GeneratedFiles/style_auto.h; sourceTree = ""; }; A0090709DE1B155085362C36 /* introcode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = introcode.cpp; path = SourceFiles/intro/introcode.cpp; sourceTree = ""; }; - A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; A1479F94376F9732B57C69DB /* moc_animation.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_animation.cpp; path = GeneratedFiles/Debug/moc_animation.cpp; sourceTree = ""; }; A1A67BEAA744704B29168D39 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; A1F48DF3E5D0D7C741C1EAC4 /* moc_countrycodeinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_countrycodeinput.cpp; path = GeneratedFiles/Debug/moc_countrycodeinput.cpp; sourceTree = ""; }; A3622760CEC6D6827A25E710 /* mtpPublicRSA.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpPublicRSA.h; path = SourceFiles/mtproto/mtpPublicRSA.h; sourceTree = ""; }; A37C7E516201B0264A4CDA38 /* moc_intro.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_intro.cpp; path = GeneratedFiles/Debug/moc_intro.cpp; sourceTree = ""; }; - A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; - A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = ""; }; - A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = ""; }; - A7782E2B07CB2D1D14F431B0 /* qtaccessiblewidgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtaccessiblewidgets; path = "/usr/local/Qt-5.5.0/plugins/accessible/libqtaccessiblewidgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = ""; }; + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = ""; }; + A7782E2B07CB2D1D14F431B0 /* qtaccessiblewidgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtaccessiblewidgets; path = "/usr/local/Qt-5.4.0/plugins/accessible/libqtaccessiblewidgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; A83D2C19F756D3371E5999A8 /* historywidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = historywidget.cpp; path = SourceFiles/historywidget.cpp; sourceTree = ""; }; - A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = ""; }; + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = ""; }; A9FF4818C6775109B3DBFA18 /* introsignup.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = introsignup.cpp; path = SourceFiles/intro/introsignup.cpp; sourceTree = ""; }; - AA5379CB06E908AC80BE7B82 /* Qt5OpenGL */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5OpenGL; path = "/usr/local/Qt-5.5.0/lib/libQt5OpenGL$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = ""; }; - AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = ""; }; + AA5379CB06E908AC80BE7B82 /* Qt5OpenGL */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5OpenGL; path = "/usr/local/Qt-5.4.0/lib/libQt5OpenGL$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = ""; }; + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = ""; }; AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = ""; }; - ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = ""; }; + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = ""; }; AC9B5F6FB4B984C8D76F7AE2 /* moc_dropdown.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_dropdown.cpp; path = GeneratedFiles/Debug/moc_dropdown.cpp; sourceTree = ""; }; - ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = ""; }; + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = ""; }; AD0C395D671BC024083A5FC7 /* localimageloader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = localimageloader.h; path = SourceFiles/localimageloader.h; sourceTree = ""; }; AD90723EF02EAD016FD49CC9 /* introsteps.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = introsteps.h; path = SourceFiles/intro/introsteps.h; sourceTree = ""; }; - ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = ""; }; + ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = ""; }; AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; AF4585F593B1C9D0D4FD061C /* flatcheckbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flatcheckbox.cpp; path = SourceFiles/gui/flatcheckbox.cpp; sourceTree = ""; }; AF5776B0652744978B7DF6D3 /* langloaderplain.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = langloaderplain.cpp; path = SourceFiles/langloaderplain.cpp; sourceTree = ""; }; AF61D864B8C444ADD4E1B391 /* moc_photocropbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_photocropbox.cpp; path = GeneratedFiles/Debug/moc_photocropbox.cpp; sourceTree = ""; }; - AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = ""; }; - B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = ""; }; - B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = ""; }; - B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = ""; }; + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = ""; }; + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = ""; }; + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = ""; }; + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = ""; }; B3062303CE8F4EB9325CB3DC /* emoji_config.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = emoji_config.cpp; path = SourceFiles/gui/emoji_config.cpp; sourceTree = ""; }; - B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = ""; }; + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = ""; }; B3D42654F18B1FE49512C404 /* mtpDC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpDC.h; path = SourceFiles/mtproto/mtpDC.h; sourceTree = ""; }; - B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = ""; }; - B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = ""; }; - B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = ""; }; + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = ""; }; + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = ""; }; + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = ""; }; B714EA71A09A832FAA846A0A /* moc_mtpConnection.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mtpConnection.cpp; path = GeneratedFiles/Debug/moc_mtpConnection.cpp; sourceTree = ""; }; B8100EAB0521FC7A937D2E4F /* moc_phoneinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_phoneinput.cpp; path = GeneratedFiles/Debug/moc_phoneinput.cpp; sourceTree = ""; }; - B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = ""; }; + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = ""; }; B88236FC554B694F618D848C /* moc_sysbuttons.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_sysbuttons.cpp; path = GeneratedFiles/Debug/moc_sysbuttons.cpp; sourceTree = ""; }; - B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = ""; }; + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = ""; }; B8D9AFA42E8633154A9817A2 /* mtpConnection.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtpConnection.cpp; path = SourceFiles/mtproto/mtpConnection.cpp; sourceTree = ""; }; B97D4DB97FE881648644211A /* downloadpathbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = downloadpathbox.h; path = SourceFiles/boxes/downloadpathbox.h; sourceTree = ""; }; BB1602EA641643DE565005B1 /* twidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = twidget.cpp; path = SourceFiles/gui/twidget.cpp; sourceTree = ""; }; - BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = ""; }; - BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = ""; }; + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = ""; }; + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = ""; }; BDAB6725B830DEE896DC0F55 /* boxshadow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = boxshadow.h; path = SourceFiles/gui/boxshadow.h; sourceTree = ""; }; - BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = ""; }; + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = ""; }; BEF9DFDA6822604126A7E233 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = ""; }; - BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = ""; }; + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = ""; }; C194EDD00F76216057D48A5C /* aboutbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = aboutbox.cpp; path = SourceFiles/boxes/aboutbox.cpp; sourceTree = ""; }; C19DF71B273A4843553518F2 /* app.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = app.h; path = SourceFiles/app.h; sourceTree = ""; }; C20F9DD8C7B031B8E20D5653 /* application.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = application.cpp; path = SourceFiles/application.cpp; sourceTree = ""; }; C34459FA465B57DF4DB80D12 /* introsteps.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = introsteps.cpp; path = SourceFiles/intro/introsteps.cpp; sourceTree = ""; }; - C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = ""; }; - C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = ""; }; + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = ""; }; + C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = ""; }; C63C6D083EBEB13A60256DF3 /* historywidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = historywidget.h; path = SourceFiles/historywidget.h; sourceTree = ""; }; - C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = ""; }; + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = ""; }; C913E6A1001E07EE7C13CE93 /* style.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = style.h; path = SourceFiles/style.h; sourceTree = ""; }; C9FFCCE4FCB845744636795F /* moc_flatbutton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_flatbutton.cpp; path = GeneratedFiles/Debug/moc_flatbutton.cpp; sourceTree = ""; }; CA56ACFB53D87637192CC9B2 /* window.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = window.cpp; path = SourceFiles/window.cpp; sourceTree = ""; }; - CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = ""; }; + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = ""; }; CE0D5EFE401BF9815FACE579 /* pspecific_mac.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pspecific_mac.h; path = SourceFiles/pspecific_mac.h; sourceTree = ""; }; CE7FFE194127BD789A2C877A /* moc_confirmbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_confirmbox.cpp; path = GeneratedFiles/Debug/moc_confirmbox.cpp; sourceTree = ""; }; - CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = ""; }; + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = ""; }; CF1690B68F3B278E78823DB9 /* history.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = history.h; path = SourceFiles/history.h; sourceTree = ""; }; CF32DF59C7823E4F3397EF3C /* profilewidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = profilewidget.cpp; path = SourceFiles/profilewidget.cpp; sourceTree = ""; }; - CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = ""; }; - CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = ""; }; - CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = ""; }; - D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = ""; }; + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = ""; }; + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = ""; }; + CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = ""; }; + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = ""; }; D12A6BD8EE80B8B308E481AD /* moc_flattextarea.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_flattextarea.cpp; path = GeneratedFiles/Debug/moc_flattextarea.cpp; sourceTree = ""; }; D1C9C77F1318F5A55C9BF289 /* photosendbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = photosendbox.cpp; path = SourceFiles/boxes/photosendbox.cpp; sourceTree = ""; }; - D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = ""; }; - D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = ""; }; - D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = ""; }; + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = ""; }; + D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; D3FE9C29B6A61D7C3C4B731B /* animation.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = animation.cpp; path = SourceFiles/gui/animation.cpp; sourceTree = ""; }; D4B32C2222F82AC56BADEB21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; - D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qconfig.pri"; sourceTree = ""; }; - D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = ""; }; - D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.5.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.5.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qconfig.pri"; sourceTree = ""; }; + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = ""; }; + D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.4.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.4.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; D6FF6676816C4E374D374060 /* qrc_telegram.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = qrc_telegram.cpp; path = GeneratedFiles/qrc_telegram.cpp; sourceTree = ""; }; - D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = ""; }; - D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = ""; }; - D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = ""; }; - DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = ""; }; - DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = ""; }; + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = ""; }; + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = ""; }; + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = ""; }; + DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; DC23E0B79FF53F35BA8F76A1 /* introsignup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = introsignup.h; path = SourceFiles/intro/introsignup.h; sourceTree = ""; }; - DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; DE4C0E3685DDAE58F9397B13 /* filedialog.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = filedialog.cpp; path = SourceFiles/gui/filedialog.cpp; sourceTree = ""; }; - DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = ""; }; + DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = ""; }; DFD7912080BC557230093752 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; - E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = ""; }; + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = ""; }; E181C525E21A16F2D4396CA7 /* moc_application.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_application.cpp; path = GeneratedFiles/Debug/moc_application.cpp; sourceTree = ""; }; - E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = ""; }; - E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = ""; }; + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = ""; }; + E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = ""; }; E466873F01ABA1E55E914489 /* dialogswidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = dialogswidget.cpp; path = SourceFiles/dialogswidget.cpp; sourceTree = ""; }; - E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = ""; }; - E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = ""; }; - E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = ""; }; + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = ""; }; + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = ""; }; + E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = ""; }; E908A6C86F93FA27DF70866C /* photocropbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = photocropbox.cpp; path = SourceFiles/boxes/photocropbox.cpp; sourceTree = ""; }; - EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = ""; }; - EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = ""; }; - EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = ""; }; - EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/mac.conf"; sourceTree = ""; }; + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = ""; }; + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = ""; }; + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = ""; }; + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/mac.conf"; sourceTree = ""; }; EC4D4A7398CAAD47386D9CA0 /* mtpSessionImpl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpSessionImpl.h; path = SourceFiles/mtproto/mtpSessionImpl.h; sourceTree = ""; }; - EE03BC5CA4628A6D6BEB0122 /* qcorewlanbearer */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcorewlanbearer; path = "/usr/local/Qt-5.5.0/plugins/bearer/libqcorewlanbearer$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + EE03BC5CA4628A6D6BEB0122 /* qcorewlanbearer */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcorewlanbearer; path = "/usr/local/Qt-5.4.0/plugins/bearer/libqcorewlanbearer$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; EF1AD6A66D0C28A6A15E2C30 /* introphone.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = introphone.h; path = SourceFiles/intro/introphone.h; sourceTree = ""; }; - F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = ""; }; + F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = ""; }; F1A04BDB750C2AE652797B04 /* flatbutton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flatbutton.cpp; path = SourceFiles/gui/flatbutton.cpp; sourceTree = ""; }; F1B68FFCE8AE823F6D45EB06 /* phoneinput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = phoneinput.h; path = SourceFiles/gui/phoneinput.h; sourceTree = ""; }; - F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; F26998DF735BCE5F975508ED /* CoreWLAN.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreWLAN.framework; path = /System/Library/Frameworks/CoreWLAN.framework; sourceTree = ""; }; - F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = ""; }; - F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf"; sourceTree = ""; }; - F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = ""; }; + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = ""; }; + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf"; sourceTree = ""; }; + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = ""; }; F4EECA1187A744AEF5165243 /* pspecific_mac.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = pspecific_mac.cpp; path = SourceFiles/pspecific_mac.cpp; sourceTree = ""; }; - F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = ""; }; + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = ""; }; F80095A026AF9453E9C2B8BD /* settingswidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = settingswidget.h; path = SourceFiles/settingswidget.h; sourceTree = ""; }; - F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = ""; }; - F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = ""; }; + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = ""; }; + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = ""; }; FB61F72601D91BF3AC730D20 /* mtpRPC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpRPC.h; path = SourceFiles/mtproto/mtpRPC.h; sourceTree = ""; }; FCC237CA5AD60B9BA4447615 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; - FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = ""; }; + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = ""; }; FE8FD20832B4C226E345CFBA /* mainwidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mainwidget.h; path = SourceFiles/mainwidget.h; sourceTree = ""; }; FEC58F9D8A0963E5A9D4BE6F /* moc_connectionbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_connectionbox.cpp; path = GeneratedFiles/Debug/moc_connectionbox.cpp; sourceTree = ""; }; FF5BDAB0076F3391B219EA52 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = /System/Library/Frameworks/SystemConfiguration.framework; sourceTree = ""; }; @@ -986,127 +986,127 @@ isa = PBXGroup; children = ( 36BDA5D01BED543A92886669 /* Telegram.pro */, - 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */, - 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */, - 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */, - EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */, - 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */, - 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */, - A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */, - 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */, - F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */, - D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */, - ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */, - 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, - BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, - CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */, - 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */, - 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */, - 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */, - 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */, - 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */, - 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */, - F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */, - 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */, - 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, - 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */, - 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */, - 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */, - D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */, - FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */, - D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */, - A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */, - 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */, - D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */, - E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */, - 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, - D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, - 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */, - 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */, - 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */, - B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */, - 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */, - E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */, - E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */, - 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, - 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, - F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */, - E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */, - 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */, - D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */, - B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */, - 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */, - 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, - DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */, - ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */, - 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, - 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */, - 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */, - 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, - D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */, - B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, - CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */, - C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */, - CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */, - A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */, - 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */, - BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */, - BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */, - 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */, - 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */, - 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */, - ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */, - 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */, - DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */, - 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */, - E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */, - B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */, - 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */, - 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */, - A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */, - 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */, - AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */, - E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */, - 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, - F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, - D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, - 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, - F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, - AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */, - EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, - 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */, - 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, - 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, - EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */, - C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */, - 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */, - B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */, - F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, - B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, - EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, - 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, - 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */, - CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, - 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, - B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */, - F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */, - CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, - 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, - 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, - 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, - 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */, - BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */, - B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, - 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, - C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, - AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, - 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, - 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, - A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, - 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */, - B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */, - 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */, - 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */, + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */, + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */, + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */, + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */, + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */, + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */, + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */, + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */, + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */, + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */, + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */, + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */, + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */, + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */, + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */, + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */, + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */, + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */, + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */, + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */, + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */, + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */, + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */, + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */, + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */, + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */, + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */, + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */, + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */, + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */, + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */, + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */, + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */, + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */, + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */, + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */, + E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */, + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */, + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */, + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */, + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */, + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */, + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */, + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, + DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */, + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */, + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */, + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */, + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */, + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */, + C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */, + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */, + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */, + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */, + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */, + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */, + 311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */, + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */, + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */, + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */, + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */, + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */, + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */, + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */, + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */, + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */, + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */, + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */, + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */, + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */, + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */, + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */, + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */, + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */, + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */, + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */, + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */, + F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */, + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */, + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */, + CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, + 060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */, + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */, + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */, + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */, + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */, + 85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */, AB745978DF0F41D1801ABDA6 /* .qmake.stash */, 370997172D3BAEED157B8E70 /* SourceFiles */, ); @@ -1776,8 +1776,8 @@ GCC_WARN_UNUSED_FUNCTION = NO; GCC_WARN_UNUSED_VARIABLE = NO; HEADER_SEARCH_PATHS = ( - ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, - ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, + ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, ./../../Libraries/QtStatic/qtbase/include, ./SourceFiles, ./GeneratedFiles, @@ -1785,15 +1785,15 @@ ./../../Libraries/opus/include, "./../../Libraries/openal-soft/include", "./../../Libraries/libexif-0.6.20", - "/usr/local/Qt-5.5.0/include", - "/usr/local/Qt-5.5.0/include/QtMultimedia", - "/usr/local/Qt-5.5.0/include/QtWidgets", - "/usr/local/Qt-5.5.0/include/QtNetwork", - "/usr/local/Qt-5.5.0/include/QtGui", - "/usr/local/Qt-5.5.0/include/QtCore", + "/usr/local/Qt-5.4.0/include", + "/usr/local/Qt-5.4.0/include/QtMultimedia", + "/usr/local/Qt-5.4.0/include/QtWidgets", + "/usr/local/Qt-5.4.0/include/QtNetwork", + "/usr/local/Qt-5.4.0/include/QtGui", + "/usr/local/Qt-5.4.0/include/QtCore", /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.5.0/mkspecs/macx-clang", + "/usr/local/Qt-5.4.0/mkspecs/macx-clang", ); INFOPLIST_FILE = Telegram.plist; INSTALL_DIR = ./../Mac/Release/; @@ -1801,10 +1801,10 @@ LIBRARY_SEARCH_PATHS = ( /System/Library/Frameworks/, "./../../Libraries/libexif-0.6.20/libexif/.libs", - "/usr/local/Qt-5.5.0/lib", - "/usr/local/Qt-5.5.0/plugins/bearer", - "/usr/local/Qt-5.5.0/plugins/platforms", - "/usr/local/Qt-5.5.0/plugins/imageformats", + "/usr/local/Qt-5.4.0/lib", + "/usr/local/Qt-5.4.0/plugins/bearer", + "/usr/local/Qt-5.4.0/plugins/platforms", + "/usr/local/Qt-5.4.0/plugins/imageformats", "./../../Libraries/openssl-xcode", ); MACOSX_DEPLOYMENT_TARGET = 10.7; @@ -1854,11 +1854,11 @@ OTHER_LDFLAGS = ( "-headerpad_max_install_names", "-stdlib=libc++", - "-L/usr/local/Qt-5.5.0/lib", - "-L/usr/local/Qt-5.5.0/plugins/bearer", - "-L/usr/local/Qt-5.5.0/plugins/platforms", + "-L/usr/local/Qt-5.4.0/lib", + "-L/usr/local/Qt-5.4.0/plugins/bearer", + "-L/usr/local/Qt-5.4.0/plugins/platforms", "-lcups", - "-L/usr/local/Qt-5.5.0/plugins/imageformats", + "-L/usr/local/Qt-5.4.0/plugins/imageformats", "-lz", "-lm", /usr/local/lib/libopenal.a, @@ -1913,8 +1913,8 @@ GCC_WARN_UNUSED_FUNCTION = NO; GCC_WARN_UNUSED_VARIABLE = NO; HEADER_SEARCH_PATHS = ( - ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, - ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, + ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, ./../../Libraries/QtStatic/qtbase/include, ./SourceFiles, ./GeneratedFiles, @@ -1922,15 +1922,15 @@ ./../../Libraries/opus/include, "./../../Libraries/openal-soft/include", "./../../Libraries/libexif-0.6.20", - "/usr/local/Qt-5.5.0/include", - "/usr/local/Qt-5.5.0/include/QtMultimedia", - "/usr/local/Qt-5.5.0/include/QtWidgets", - "/usr/local/Qt-5.5.0/include/QtNetwork", - "/usr/local/Qt-5.5.0/include/QtGui", - "/usr/local/Qt-5.5.0/include/QtCore", + "/usr/local/Qt-5.4.0/include", + "/usr/local/Qt-5.4.0/include/QtMultimedia", + "/usr/local/Qt-5.4.0/include/QtWidgets", + "/usr/local/Qt-5.4.0/include/QtNetwork", + "/usr/local/Qt-5.4.0/include/QtGui", + "/usr/local/Qt-5.4.0/include/QtCore", /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.5.0/mkspecs/macx-clang", + "/usr/local/Qt-5.4.0/mkspecs/macx-clang", ); INFOPLIST_FILE = Telegram.plist; INSTALL_DIR = ./../Mac/Debug/; @@ -1938,10 +1938,10 @@ LIBRARY_SEARCH_PATHS = ( /System/Library/Frameworks/, "./../../Libraries/libexif-0.6.20/libexif/.libs", - "/usr/local/Qt-5.5.0/lib", - "/usr/local/Qt-5.5.0/plugins/bearer", - "/usr/local/Qt-5.5.0/plugins/platforms", - "/usr/local/Qt-5.5.0/plugins/imageformats", + "/usr/local/Qt-5.4.0/lib", + "/usr/local/Qt-5.4.0/plugins/bearer", + "/usr/local/Qt-5.4.0/plugins/platforms", + "/usr/local/Qt-5.4.0/plugins/imageformats", "./../../Libraries/openssl-xcode", ); MACOSX_DEPLOYMENT_TARGET = 10.7; @@ -1990,11 +1990,11 @@ OTHER_LDFLAGS = ( "-headerpad_max_install_names", "-stdlib=libc++", - "-L/usr/local/Qt-5.5.0/lib", - "-L/usr/local/Qt-5.5.0/plugins/bearer", - "-L/usr/local/Qt-5.5.0/plugins/platforms", + "-L/usr/local/Qt-5.4.0/lib", + "-L/usr/local/Qt-5.4.0/plugins/bearer", + "-L/usr/local/Qt-5.4.0/plugins/platforms", "-lcups", - "-L/usr/local/Qt-5.5.0/plugins/imageformats", + "-L/usr/local/Qt-5.4.0/plugins/imageformats", "-lz", "-lm", /usr/local/lib/libopenal.a, diff --git a/Telegram/Telegram.xcodeproj/qt_preprocess.mak b/Telegram/Telegram.xcodeproj/qt_preprocess.mak index 662fd8be5..1843b0fb7 100644 --- a/Telegram/Telegram.xcodeproj/qt_preprocess.mak +++ b/Telegram/Telegram.xcodeproj/qt_preprocess.mak @@ -1,21 +1,21 @@ ############################################################################# # Makefile for building: ../Mac/Debug/Telegram.app/Contents/MacOS/Telegram -# Generated by qmake (3.0) (Qt 5.5.0) +# Generated by qmake (3.0) (Qt 5.4.0) # Project: Telegram.pro # Template: app -# Command: /usr/local/Qt-5.5.0/bin/qmake -spec macx-xcode -o Telegram.xcodeproj/project.pbxproj Telegram.pro +# Command: /usr/local/Qt-5.4.0/bin/qmake -spec macx-xcode -o Telegram.xcodeproj/project.pbxproj Telegram.pro ############################################################################# MAKEFILE = project.pbxproj -MOC = /usr/local/Qt-5.5.0/bin/moc -UIC = /usr/local/Qt-5.5.0/bin/uic +MOC = /usr/local/Qt-5.4.0/bin/moc +UIC = /usr/local/Qt-5.4.0/bin/uic LEX = flex LEXFLAGS = YACC = yacc YACCFLAGS = -d DEFINES = -D_DEBUG -D_DEBUG -DQT_MULTIMEDIA_LIB -DQT_WIDGETS_LIB -DQT_NETWORK_LIB -DQT_GUI_LIB -DQT_CORE_LIB -INCPATH = -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore -I../../Libraries/QtStatic/qtbase/include -ISourceFiles -IGeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers +INCPATH = -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore -I../../Libraries/QtStatic/qtbase/include -ISourceFiles -IGeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers DEL_FILE = rm -f MOVE = mv -f @@ -85,7 +85,7 @@ GeneratedFiles/qrc_telegram.cpp: SourceFiles/telegram.qrc \ SourceFiles/art/usercolor1.png \ SourceFiles/art/usercolor5.png \ SourceFiles/art/chatcolor2.png - /usr/local/Qt-5.5.0/bin/rcc -name telegram SourceFiles/telegram.qrc -o GeneratedFiles/qrc_telegram.cpp + /usr/local/Qt-5.4.0/bin/rcc -name telegram SourceFiles/telegram.qrc -o GeneratedFiles/qrc_telegram.cpp GeneratedFiles/qrc_telegram_emojis.cpp: SourceFiles/telegram_emojis.qrc \ SourceFiles/art/emoji.webp \ @@ -93,11 +93,11 @@ GeneratedFiles/qrc_telegram_emojis.cpp: SourceFiles/telegram_emojis.qrc \ SourceFiles/art/emoji_200x.webp \ SourceFiles/art/emoji_250x.webp \ SourceFiles/art/emoji_125x.webp - /usr/local/Qt-5.5.0/bin/rcc -name telegram_emojis SourceFiles/telegram_emojis.qrc -o GeneratedFiles/qrc_telegram_emojis.cpp + /usr/local/Qt-5.4.0/bin/rcc -name telegram_emojis SourceFiles/telegram_emojis.qrc -o GeneratedFiles/qrc_telegram_emojis.cpp GeneratedFiles/qrc_telegram_mac.cpp: SourceFiles/telegram_mac.qrc \ SourceFiles/art/osxtray.png - /usr/local/Qt-5.5.0/bin/rcc -name telegram_mac SourceFiles/telegram_mac.qrc -o GeneratedFiles/qrc_telegram_mac.cpp + /usr/local/Qt-5.4.0/bin/rcc -name telegram_mac SourceFiles/telegram_mac.qrc -o GeneratedFiles/qrc_telegram_mac.cpp compiler_moc_header_make_all: GeneratedFiles/Debug/moc_apiwrap.cpp GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_audio.cpp GeneratedFiles/Debug/moc_autoupdater.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_history.cpp GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp GeneratedFiles/Debug/moc_mediaview.cpp GeneratedFiles/Debug/moc_overviewwidget.cpp GeneratedFiles/Debug/moc_playerwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp GeneratedFiles/Debug/moc_passcodewidget.cpp GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_localstorage.cpp GeneratedFiles/Debug/moc_mainwidget.cpp GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp GeneratedFiles/Debug/moc_types.cpp GeneratedFiles/Debug/moc_window.cpp GeneratedFiles/Debug/moc_mtp.cpp GeneratedFiles/Debug/moc_mtpConnection.cpp GeneratedFiles/Debug/moc_mtpDC.cpp GeneratedFiles/Debug/moc_mtpFileLoader.cpp GeneratedFiles/Debug/moc_mtpSession.cpp GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp GeneratedFiles/Debug/moc_contextmenu.cpp GeneratedFiles/Debug/moc_countrycodeinput.cpp GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp GeneratedFiles/Debug/moc_switcher.cpp GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp GeneratedFiles/Debug/moc_aboutbox.cpp GeneratedFiles/Debug/moc_abstractbox.cpp GeneratedFiles/Debug/moc_addcontactbox.cpp GeneratedFiles/Debug/moc_autolockbox.cpp GeneratedFiles/Debug/moc_backgroundbox.cpp GeneratedFiles/Debug/moc_confirmbox.cpp GeneratedFiles/Debug/moc_connectionbox.cpp GeneratedFiles/Debug/moc_contactsbox.cpp GeneratedFiles/Debug/moc_downloadpathbox.cpp GeneratedFiles/Debug/moc_emojibox.cpp GeneratedFiles/Debug/moc_languagebox.cpp GeneratedFiles/Debug/moc_passcodebox.cpp GeneratedFiles/Debug/moc_photocropbox.cpp GeneratedFiles/Debug/moc_photosendbox.cpp GeneratedFiles/Debug/moc_sessionsbox.cpp GeneratedFiles/Debug/moc_stickersetbox.cpp GeneratedFiles/Debug/moc_usernamebox.cpp GeneratedFiles/Debug/moc_intro.cpp GeneratedFiles/Debug/moc_introcode.cpp GeneratedFiles/Debug/moc_introphone.cpp GeneratedFiles/Debug/moc_intropwdcheck.cpp GeneratedFiles/Debug/moc_introsignup.cpp GeneratedFiles/Debug/moc_pspecific_mac.cpp compiler_moc_header_clean: @@ -105,7 +105,7 @@ compiler_moc_header_clean: GeneratedFiles/Debug/moc_apiwrap.cpp: SourceFiles/types.h \ SourceFiles/logs.h \ SourceFiles/apiwrap.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/apiwrap.h -o GeneratedFiles/Debug/moc_apiwrap.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/apiwrap.h -o GeneratedFiles/Debug/moc_apiwrap.cpp GeneratedFiles/Debug/moc_application.cpp: ../../Libraries/QtStatic/qtbase/include/QtNetwork/QLocalSocket \ ../../Libraries/QtStatic/qtbase/include/QtNetwork/QLocalServer \ @@ -128,7 +128,7 @@ GeneratedFiles/Debug/moc_application.cpp: ../../Libraries/QtStatic/qtbase/includ SourceFiles/pspecific_wnd.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/application.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/application.h -o GeneratedFiles/Debug/moc_application.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/application.h -o GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_audio.cpp: SourceFiles/types.h \ SourceFiles/audio.h \ @@ -136,7 +136,7 @@ GeneratedFiles/Debug/moc_audio.cpp: SourceFiles/types.h \ SourceFiles/logs.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/audio.h -o GeneratedFiles/Debug/moc_audio.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/audio.h -o GeneratedFiles/Debug/moc_audio.cpp GeneratedFiles/Debug/moc_autoupdater.cpp: SourceFiles/types.h \ SourceFiles/autoupdater.h \ @@ -144,22 +144,22 @@ GeneratedFiles/Debug/moc_autoupdater.cpp: SourceFiles/types.h \ SourceFiles/logs.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/autoupdater.h -o GeneratedFiles/Debug/moc_autoupdater.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/autoupdater.h -o GeneratedFiles/Debug/moc_autoupdater.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp: SourceFiles/dialogswidget.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/dialogswidget.h -o GeneratedFiles/Debug/moc_dialogswidget.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/dialogswidget.h -o GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp: SourceFiles/gui/twidget.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/dropdown.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/dropdown.h -o GeneratedFiles/Debug/moc_dropdown.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/dropdown.h -o GeneratedFiles/Debug/moc_dropdown.cpp GeneratedFiles/Debug/moc_fileuploader.cpp: SourceFiles/localimageloader.h \ SourceFiles/fileuploader.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/fileuploader.h -o GeneratedFiles/Debug/moc_fileuploader.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/fileuploader.h -o GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_history.cpp: SourceFiles/history.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/history.h -o GeneratedFiles/Debug/moc_history.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/history.h -o GeneratedFiles/Debug/moc_history.cpp GeneratedFiles/Debug/moc_historywidget.cpp: SourceFiles/localimageloader.h \ SourceFiles/gui/boxshadow.h \ @@ -167,32 +167,32 @@ GeneratedFiles/Debug/moc_historywidget.cpp: SourceFiles/localimageloader.h \ SourceFiles/gui/twidget.h \ SourceFiles/passcodewidget.h \ SourceFiles/historywidget.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/historywidget.h -o GeneratedFiles/Debug/moc_historywidget.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/historywidget.h -o GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp: SourceFiles/gui/boxshadow.h \ SourceFiles/layerwidget.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/layerwidget.h -o GeneratedFiles/Debug/moc_layerwidget.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/layerwidget.h -o GeneratedFiles/Debug/moc_layerwidget.cpp GeneratedFiles/Debug/moc_mediaview.cpp: SourceFiles/mediaview.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mediaview.h -o GeneratedFiles/Debug/moc_mediaview.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mediaview.h -o GeneratedFiles/Debug/moc_mediaview.cpp GeneratedFiles/Debug/moc_overviewwidget.cpp: SourceFiles/overviewwidget.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/overviewwidget.h -o GeneratedFiles/Debug/moc_overviewwidget.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/overviewwidget.h -o GeneratedFiles/Debug/moc_overviewwidget.cpp GeneratedFiles/Debug/moc_playerwidget.cpp: SourceFiles/playerwidget.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/playerwidget.h -o GeneratedFiles/Debug/moc_playerwidget.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/playerwidget.h -o GeneratedFiles/Debug/moc_playerwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp: SourceFiles/profilewidget.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/profilewidget.h -o GeneratedFiles/Debug/moc_profilewidget.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/profilewidget.h -o GeneratedFiles/Debug/moc_profilewidget.cpp GeneratedFiles/Debug/moc_passcodewidget.cpp: SourceFiles/passcodewidget.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/passcodewidget.h -o GeneratedFiles/Debug/moc_passcodewidget.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/passcodewidget.h -o GeneratedFiles/Debug/moc_passcodewidget.cpp GeneratedFiles/Debug/moc_localimageloader.cpp: SourceFiles/localimageloader.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/localimageloader.h -o GeneratedFiles/Debug/moc_localimageloader.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/localimageloader.h -o GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_localstorage.cpp: SourceFiles/localstorage.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/localstorage.h -o GeneratedFiles/Debug/moc_localstorage.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/localstorage.h -o GeneratedFiles/Debug/moc_localstorage.cpp GeneratedFiles/Debug/moc_mainwidget.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/flatbutton.h \ @@ -216,7 +216,7 @@ GeneratedFiles/Debug/moc_mainwidget.cpp: ../../Libraries/QtStatic/qtbase/include SourceFiles/overviewwidget.h \ SourceFiles/profilewidget.h \ SourceFiles/mainwidget.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mainwidget.h -o GeneratedFiles/Debug/moc_mainwidget.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mainwidget.h -o GeneratedFiles/Debug/moc_mainwidget.cpp GeneratedFiles/Debug/moc_settingswidget.cpp: SourceFiles/gui/flatbutton.h \ SourceFiles/gui/button.h \ @@ -234,7 +234,7 @@ GeneratedFiles/Debug/moc_settingswidget.cpp: SourceFiles/gui/flatbutton.h \ GeneratedFiles/style_auto.h \ SourceFiles/sysbuttons.h \ SourceFiles/settingswidget.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/settingswidget.h -o GeneratedFiles/Debug/moc_settingswidget.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/settingswidget.h -o GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/animation.h \ @@ -247,7 +247,7 @@ GeneratedFiles/Debug/moc_sysbuttons.cpp: ../../Libraries/QtStatic/qtbase/include SourceFiles/passcodewidget.h \ SourceFiles/gui/twidget.h \ SourceFiles/sysbuttons.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/sysbuttons.h -o GeneratedFiles/Debug/moc_sysbuttons.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/sysbuttons.h -o GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/sysbuttons.h \ @@ -260,14 +260,14 @@ GeneratedFiles/Debug/moc_title.cpp: ../../Libraries/QtStatic/qtbase/include/QtWi SourceFiles/gui/button.h \ SourceFiles/gui/twidget.h \ SourceFiles/title.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/title.h -o GeneratedFiles/Debug/moc_title.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/title.h -o GeneratedFiles/Debug/moc_title.cpp GeneratedFiles/Debug/moc_types.cpp: SourceFiles/types.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ SourceFiles/logs.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/types.h -o GeneratedFiles/Debug/moc_types.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/types.h -o GeneratedFiles/Debug/moc_types.cpp GeneratedFiles/Debug/moc_window.cpp: SourceFiles/title.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ @@ -288,7 +288,7 @@ GeneratedFiles/Debug/moc_window.cpp: SourceFiles/title.h \ SourceFiles/passcodewidget.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/window.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/window.h -o GeneratedFiles/Debug/moc_window.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/window.h -o GeneratedFiles/Debug/moc_window.cpp GeneratedFiles/Debug/moc_mtp.cpp: SourceFiles/mtproto/mtpSession.h \ SourceFiles/mtproto/mtpConnection.h \ @@ -304,7 +304,7 @@ GeneratedFiles/Debug/moc_mtp.cpp: SourceFiles/mtproto/mtpSession.h \ SourceFiles/mtproto/mtpFileLoader.h \ SourceFiles/mtproto/mtpSessionImpl.h \ SourceFiles/mtproto/mtp.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtp.h -o GeneratedFiles/Debug/moc_mtp.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtp.h -o GeneratedFiles/Debug/moc_mtp.cpp GeneratedFiles/Debug/moc_mtpConnection.cpp: SourceFiles/mtproto/mtpCoreTypes.h \ SourceFiles/types.h \ @@ -314,13 +314,13 @@ GeneratedFiles/Debug/moc_mtpConnection.cpp: SourceFiles/mtproto/mtpCoreTypes.h \ SourceFiles/mtproto/mtpPublicRSA.h \ SourceFiles/mtproto/mtpAuthKey.h \ SourceFiles/mtproto/mtpConnection.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpConnection.h -o GeneratedFiles/Debug/moc_mtpConnection.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpConnection.h -o GeneratedFiles/Debug/moc_mtpConnection.cpp GeneratedFiles/Debug/moc_mtpDC.cpp: SourceFiles/mtproto/mtpDC.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpDC.h -o GeneratedFiles/Debug/moc_mtpDC.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpDC.h -o GeneratedFiles/Debug/moc_mtpDC.cpp GeneratedFiles/Debug/moc_mtpFileLoader.cpp: SourceFiles/mtproto/mtpFileLoader.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpFileLoader.h -o GeneratedFiles/Debug/moc_mtpFileLoader.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpFileLoader.h -o GeneratedFiles/Debug/moc_mtpFileLoader.cpp GeneratedFiles/Debug/moc_mtpSession.cpp: SourceFiles/mtproto/mtpConnection.h \ SourceFiles/mtproto/mtpCoreTypes.h \ @@ -333,7 +333,7 @@ GeneratedFiles/Debug/moc_mtpSession.cpp: SourceFiles/mtproto/mtpConnection.h \ SourceFiles/mtproto/mtpDC.h \ SourceFiles/mtproto/mtpRPC.h \ SourceFiles/mtproto/mtpSession.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpSession.h -o GeneratedFiles/Debug/moc_mtpSession.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpSession.h -o GeneratedFiles/Debug/moc_mtpSession.cpp GeneratedFiles/Debug/moc_animation.cpp: SourceFiles/types.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ @@ -341,16 +341,16 @@ GeneratedFiles/Debug/moc_animation.cpp: SourceFiles/types.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/gui/animation.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/animation.h -o GeneratedFiles/Debug/moc_animation.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/animation.h -o GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/twidget.h \ SourceFiles/gui/button.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/button.h -o GeneratedFiles/Debug/moc_button.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/button.h -o GeneratedFiles/Debug/moc_button.cpp GeneratedFiles/Debug/moc_contextmenu.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/contextmenu.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/contextmenu.h -o GeneratedFiles/Debug/moc_contextmenu.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/contextmenu.h -o GeneratedFiles/Debug/moc_contextmenu.cpp GeneratedFiles/Debug/moc_countrycodeinput.cpp: SourceFiles/gui/flatinput.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ @@ -364,7 +364,7 @@ GeneratedFiles/Debug/moc_countrycodeinput.cpp: SourceFiles/gui/flatinput.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/gui/countrycodeinput.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/countrycodeinput.h -o GeneratedFiles/Debug/moc_countrycodeinput.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/countrycodeinput.h -o GeneratedFiles/Debug/moc_countrycodeinput.cpp GeneratedFiles/Debug/moc_countryinput.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/style.h \ @@ -386,7 +386,7 @@ GeneratedFiles/Debug/moc_countryinput.cpp: ../../Libraries/QtStatic/qtbase/inclu SourceFiles/gui/flatcheckbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/gui/countryinput.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/countryinput.h -o GeneratedFiles/Debug/moc_countryinput.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/countryinput.h -o GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp: SourceFiles/gui/button.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ @@ -402,13 +402,13 @@ GeneratedFiles/Debug/moc_flatbutton.cpp: SourceFiles/gui/button.h \ GeneratedFiles/style_classes.h \ GeneratedFiles/style_auto.h \ SourceFiles/gui/flatbutton.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatbutton.h -o GeneratedFiles/Debug/moc_flatbutton.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatbutton.h -o GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp: SourceFiles/gui/button.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/twidget.h \ SourceFiles/gui/flatcheckbox.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatcheckbox.h -o GeneratedFiles/Debug/moc_flatcheckbox.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatcheckbox.h -o GeneratedFiles/Debug/moc_flatcheckbox.cpp GeneratedFiles/Debug/moc_flatinput.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ SourceFiles/style.h \ @@ -421,13 +421,13 @@ GeneratedFiles/Debug/moc_flatinput.cpp: ../../Libraries/QtStatic/qtbase/include/ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/gui/flatinput.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatinput.h -o GeneratedFiles/Debug/moc_flatinput.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatinput.h -o GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp: SourceFiles/style.h \ GeneratedFiles/style_classes.h \ GeneratedFiles/style_auto.h \ SourceFiles/gui/flatlabel.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatlabel.h -o GeneratedFiles/Debug/moc_flatlabel.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatlabel.h -o GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QTextEdit \ SourceFiles/style.h \ @@ -440,7 +440,7 @@ GeneratedFiles/Debug/moc_flattextarea.cpp: ../../Libraries/QtStatic/qtbase/inclu ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/gui/flattextarea.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flattextarea.h -o GeneratedFiles/Debug/moc_flattextarea.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flattextarea.h -o GeneratedFiles/Debug/moc_flattextarea.cpp GeneratedFiles/Debug/moc_switcher.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/twidget.h \ @@ -454,7 +454,7 @@ GeneratedFiles/Debug/moc_switcher.cpp: ../../Libraries/QtStatic/qtbase/include/Q ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/gui/switcher.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/switcher.h -o GeneratedFiles/Debug/moc_switcher.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/switcher.h -o GeneratedFiles/Debug/moc_switcher.cpp GeneratedFiles/Debug/moc_phoneinput.cpp: SourceFiles/gui/flatinput.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ @@ -468,47 +468,47 @@ GeneratedFiles/Debug/moc_phoneinput.cpp: SourceFiles/gui/flatinput.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/gui/phoneinput.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/phoneinput.h -o GeneratedFiles/Debug/moc_phoneinput.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/phoneinput.h -o GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QScrollArea \ SourceFiles/style.h \ GeneratedFiles/style_classes.h \ GeneratedFiles/style_auto.h \ SourceFiles/gui/scrollarea.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/scrollarea.h -o GeneratedFiles/Debug/moc_scrollarea.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/scrollarea.h -o GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp: SourceFiles/gui/twidget.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/twidget.h -o GeneratedFiles/Debug/moc_twidget.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/twidget.h -o GeneratedFiles/Debug/moc_twidget.cpp GeneratedFiles/Debug/moc_aboutbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/aboutbox.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/aboutbox.h -o GeneratedFiles/Debug/moc_aboutbox.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/aboutbox.h -o GeneratedFiles/Debug/moc_aboutbox.cpp GeneratedFiles/Debug/moc_abstractbox.cpp: SourceFiles/layerwidget.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/abstractbox.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/abstractbox.h -o GeneratedFiles/Debug/moc_abstractbox.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/abstractbox.h -o GeneratedFiles/Debug/moc_abstractbox.cpp GeneratedFiles/Debug/moc_addcontactbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/addcontactbox.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/addcontactbox.h -o GeneratedFiles/Debug/moc_addcontactbox.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/addcontactbox.h -o GeneratedFiles/Debug/moc_addcontactbox.cpp GeneratedFiles/Debug/moc_autolockbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/autolockbox.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/autolockbox.h -o GeneratedFiles/Debug/moc_autolockbox.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/autolockbox.h -o GeneratedFiles/Debug/moc_autolockbox.cpp GeneratedFiles/Debug/moc_backgroundbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/backgroundbox.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/backgroundbox.h -o GeneratedFiles/Debug/moc_backgroundbox.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/backgroundbox.h -o GeneratedFiles/Debug/moc_backgroundbox.cpp GeneratedFiles/Debug/moc_confirmbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/confirmbox.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/confirmbox.h -o GeneratedFiles/Debug/moc_confirmbox.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/confirmbox.h -o GeneratedFiles/Debug/moc_confirmbox.cpp GeneratedFiles/Debug/moc_connectionbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ @@ -525,12 +525,12 @@ GeneratedFiles/Debug/moc_connectionbox.cpp: SourceFiles/boxes/abstractbox.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/boxes/connectionbox.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/connectionbox.h -o GeneratedFiles/Debug/moc_connectionbox.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/connectionbox.h -o GeneratedFiles/Debug/moc_connectionbox.cpp GeneratedFiles/Debug/moc_contactsbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/contactsbox.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/contactsbox.h -o GeneratedFiles/Debug/moc_contactsbox.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/contactsbox.h -o GeneratedFiles/Debug/moc_contactsbox.cpp GeneratedFiles/Debug/moc_downloadpathbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ @@ -547,50 +547,50 @@ GeneratedFiles/Debug/moc_downloadpathbox.cpp: SourceFiles/boxes/abstractbox.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/boxes/downloadpathbox.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/downloadpathbox.h -o GeneratedFiles/Debug/moc_downloadpathbox.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/downloadpathbox.h -o GeneratedFiles/Debug/moc_downloadpathbox.cpp GeneratedFiles/Debug/moc_emojibox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/emojibox.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/emojibox.h -o GeneratedFiles/Debug/moc_emojibox.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/emojibox.h -o GeneratedFiles/Debug/moc_emojibox.cpp GeneratedFiles/Debug/moc_languagebox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/languagebox.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/languagebox.h -o GeneratedFiles/Debug/moc_languagebox.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/languagebox.h -o GeneratedFiles/Debug/moc_languagebox.cpp GeneratedFiles/Debug/moc_passcodebox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/passcodebox.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/passcodebox.h -o GeneratedFiles/Debug/moc_passcodebox.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/passcodebox.h -o GeneratedFiles/Debug/moc_passcodebox.cpp GeneratedFiles/Debug/moc_photocropbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/photocropbox.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/photocropbox.h -o GeneratedFiles/Debug/moc_photocropbox.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/photocropbox.h -o GeneratedFiles/Debug/moc_photocropbox.cpp GeneratedFiles/Debug/moc_photosendbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/localimageloader.h \ SourceFiles/boxes/photosendbox.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/photosendbox.h -o GeneratedFiles/Debug/moc_photosendbox.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/photosendbox.h -o GeneratedFiles/Debug/moc_photosendbox.cpp GeneratedFiles/Debug/moc_sessionsbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/localimageloader.h \ SourceFiles/boxes/sessionsbox.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/sessionsbox.h -o GeneratedFiles/Debug/moc_sessionsbox.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/sessionsbox.h -o GeneratedFiles/Debug/moc_sessionsbox.cpp GeneratedFiles/Debug/moc_stickersetbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/localimageloader.h \ SourceFiles/boxes/stickersetbox.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/stickersetbox.h -o GeneratedFiles/Debug/moc_stickersetbox.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/stickersetbox.h -o GeneratedFiles/Debug/moc_stickersetbox.cpp GeneratedFiles/Debug/moc_usernamebox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/usernamebox.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/usernamebox.h -o GeneratedFiles/Debug/moc_usernamebox.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/usernamebox.h -o GeneratedFiles/Debug/moc_usernamebox.cpp GeneratedFiles/Debug/moc_intro.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/flatbutton.h \ @@ -607,7 +607,7 @@ GeneratedFiles/Debug/moc_intro.cpp: ../../Libraries/QtStatic/qtbase/include/QtWi GeneratedFiles/style_classes.h \ GeneratedFiles/style_auto.h \ SourceFiles/intro/intro.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/intro.h -o GeneratedFiles/Debug/moc_intro.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/intro.h -o GeneratedFiles/Debug/moc_intro.cpp GeneratedFiles/Debug/moc_introcode.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/flatbutton.h \ @@ -627,7 +627,7 @@ GeneratedFiles/Debug/moc_introcode.cpp: ../../Libraries/QtStatic/qtbase/include/ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ SourceFiles/intro/intro.h \ SourceFiles/intro/introcode.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/introcode.h -o GeneratedFiles/Debug/moc_introcode.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/introcode.h -o GeneratedFiles/Debug/moc_introcode.cpp GeneratedFiles/Debug/moc_introphone.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/flatbutton.h \ @@ -653,7 +653,7 @@ GeneratedFiles/Debug/moc_introphone.cpp: ../../Libraries/QtStatic/qtbase/include SourceFiles/gui/boxshadow.h \ SourceFiles/intro/intro.h \ SourceFiles/intro/introphone.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/introphone.h -o GeneratedFiles/Debug/moc_introphone.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/introphone.h -o GeneratedFiles/Debug/moc_introphone.cpp GeneratedFiles/Debug/moc_intropwdcheck.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/flatbutton.h \ @@ -679,7 +679,7 @@ GeneratedFiles/Debug/moc_intropwdcheck.cpp: ../../Libraries/QtStatic/qtbase/incl SourceFiles/gui/boxshadow.h \ SourceFiles/intro/intro.h \ SourceFiles/intro/intropwdcheck.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/intropwdcheck.h -o GeneratedFiles/Debug/moc_intropwdcheck.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/intropwdcheck.h -o GeneratedFiles/Debug/moc_intropwdcheck.cpp GeneratedFiles/Debug/moc_introsignup.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/flatbutton.h \ @@ -699,10 +699,10 @@ GeneratedFiles/Debug/moc_introsignup.cpp: ../../Libraries/QtStatic/qtbase/includ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ SourceFiles/intro/intro.h \ SourceFiles/intro/introsignup.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/introsignup.h -o GeneratedFiles/Debug/moc_introsignup.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/introsignup.h -o GeneratedFiles/Debug/moc_introsignup.cpp GeneratedFiles/Debug/moc_pspecific_mac.cpp: SourceFiles/pspecific_mac.h - /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/pspecific_mac.h -o GeneratedFiles/Debug/moc_pspecific_mac.cpp + /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/pspecific_mac.h -o GeneratedFiles/Debug/moc_pspecific_mac.cpp compiler_moc_source_make_all: compiler_moc_source_clean: From b5d7af65f83b6b6662b1929a4da9a50726f57d70 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 28 Jul 2015 15:49:16 +0200 Subject: [PATCH 061/121] 0.8.42.dev version ready - dev updates to stable, new mac32 update url (for old OS X versions) --- Telegram/PrepareWin.bat | 2 +- Telegram/SourceFiles/config.h | 2 +- Telegram/Version.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index 4092056fc..793a4a948 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -5,7 +5,7 @@ set "AppVersion=8042" set "AppVersionStrSmall=0.8.42" set "AppVersionStr=0.8.42" set "AppVersionStrFull=0.8.42.0" -set "DevChannel=0" +set "DevChannel=1" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index b69209a9e..5215beaf0 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -19,7 +19,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org static const int32 AppVersion = 8042; static const wchar_t *AppVersionStr = L"0.8.42"; -static const bool DevVersion = false; +static const bool DevVersion = true; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; diff --git a/Telegram/Version.sh b/Telegram/Version.sh index fb9c24bfc..35b2893ac 100755 --- a/Telegram/Version.sh +++ b/Telegram/Version.sh @@ -1,2 +1,2 @@ -echo 0.8 8042 0.8.42 0 +echo 0.8 8042 0.8.42 1 # AppVersionStrMajor AppVersion AppVersionStr DevChannel From 46ad7a31ad1a8270d62b782d0ee0ad2bd91111a6 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 28 Jul 2015 15:58:59 +0200 Subject: [PATCH 062/121] returned Xcode project to Qt 5.5 --- Telegram/Telegram.xcodeproj/project.pbxproj | 604 +++++++++--------- Telegram/Telegram.xcodeproj/qt_preprocess.mak | 146 ++--- 2 files changed, 370 insertions(+), 380 deletions(-) diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index f05c61f35..383225818 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -260,9 +260,9 @@ /* Begin PBXFileReference section */ 01D6341DC31FE5997F7BB159 /* mtpFileLoader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtpFileLoader.cpp; path = SourceFiles/mtproto/mtpFileLoader.cpp; sourceTree = ""; }; 032C1BF3E727B450A4851D48 /* emojibox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = emojibox.h; path = SourceFiles/boxes/emojibox.h; sourceTree = ""; }; - 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.4.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.5.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 047DAFB0A7DE92C63033A43C /* mainwidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mainwidget.cpp; path = SourceFiles/mainwidget.cpp; sourceTree = ""; }; - 060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; + 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; 06E379415713F34B83F99C35 /* app.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = app.cpp; path = SourceFiles/app.cpp; sourceTree = ""; }; 07055CC3194EE85B0008DEF6 /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcrypto.a; path = "./../../Libraries/openssl-xcode/libcrypto.a"; sourceTree = ""; }; 07080BCB1A4357F300741A51 /* lang.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = lang.strings; path = Resources/lang.strings; sourceTree = SOURCE_ROOT; }; @@ -290,7 +290,7 @@ 0755AEDA1AD12A80004D738A /* moc_abstractbox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_abstractbox.cpp; path = GeneratedFiles/Debug/moc_abstractbox.cpp; sourceTree = SOURCE_ROOT; }; 0755AEDB1AD12A80004D738A /* moc_intropwdcheck.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_intropwdcheck.cpp; path = GeneratedFiles/Debug/moc_intropwdcheck.cpp; sourceTree = SOURCE_ROOT; }; 0755AEDC1AD12A80004D738A /* moc_sessionsbox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_sessionsbox.cpp; path = GeneratedFiles/Debug/moc_sessionsbox.cpp; sourceTree = SOURCE_ROOT; }; - 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; 075F99A91A45EEF200915C72 /* lang_es.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = lang_es.strings; path = SourceFiles/langs/lang_es.strings; sourceTree = SOURCE_ROOT; }; 0764D5581ABAD6F900FBFEED /* apiwrap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = apiwrap.cpp; path = SourceFiles/apiwrap.cpp; sourceTree = SOURCE_ROOT; }; 0764D5591ABAD6F900FBFEED /* apiwrap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = apiwrap.h; path = SourceFiles/apiwrap.h; sourceTree = SOURCE_ROOT; }; @@ -329,7 +329,7 @@ 07D7034919B8755A00C4EED2 /* audio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio.cpp; path = SourceFiles/audio.cpp; sourceTree = SOURCE_ROOT; }; 07D7034A19B8755A00C4EED2 /* audio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio.h; path = SourceFiles/audio.h; sourceTree = SOURCE_ROOT; }; 07D703BA19B88FB900C4EED2 /* moc_audio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_audio.cpp; path = GeneratedFiles/Debug/moc_audio.cpp; sourceTree = SOURCE_ROOT; }; - 07D795491B5544B200DE9598 /* qtpcre */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtpcre; path = "usr/local/Qt-5.4.0/lib/libqtpcre$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 07D795491B5544B200DE9598 /* qtpcre */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtpcre; path = "usr/local/Qt-5.5.0/lib/libqtpcre$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 07D7EABB1A597DD000838BA2 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; 07D7EABD1A597DD200838BA2 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; 07D7EABE1A597DD300838BA2 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; @@ -363,7 +363,7 @@ 08A7682548FB7E671FF03822 /* boxshadow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = boxshadow.cpp; path = SourceFiles/gui/boxshadow.cpp; sourceTree = ""; }; 098EA7CE256AAFAE4A17EB77 /* introcode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = introcode.h; path = SourceFiles/intro/introcode.h; sourceTree = ""; }; 09FD01F2BD652EB838A296D8 /* application.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = application.h; path = SourceFiles/application.h; sourceTree = ""; }; - 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/unix.conf"; sourceTree = ""; }; + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/unix.conf"; sourceTree = ""; }; 0BDE09020E45EFA57DCB2E25 /* photosendbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = photosendbox.h; path = SourceFiles/boxes/photosendbox.h; sourceTree = ""; }; 0C0DC15EB416789673526AA5 /* moc_emojibox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_emojibox.cpp; path = GeneratedFiles/Debug/moc_emojibox.cpp; sourceTree = ""; }; 0CAA815FFFEDCD84808E11F5 /* logs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = logs.h; path = SourceFiles/logs.h; sourceTree = ""; }; @@ -372,15 +372,14 @@ 0FBED3C6654EA3753EB39831 /* mtpSession.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtpSession.cpp; path = SourceFiles/mtproto/mtpSession.cpp; sourceTree = ""; }; 0FC38EE7F29EF895925A2C49 /* style_core.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = style_core.h; path = SourceFiles/gui/style_core.h; sourceTree = ""; }; 1080B6D395843B8F76A2E45E /* moc_title.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_title.cpp; path = GeneratedFiles/Debug/moc_title.cpp; sourceTree = ""; }; - 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = ""; }; - 112159B026FDEF9CD4E24175 /* Qt5Multimedia */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Multimedia; path = "/usr/local/Qt-5.4.0/lib/libQt5Multimedia$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = ""; }; 120EBCD9A37DB9A36BFE58C0 /* contactsbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = contactsbox.h; path = SourceFiles/boxes/contactsbox.h; sourceTree = ""; }; 1292B92B4848460640F6A391 /* telegram.qrc */ = {isa = PBXFileReference; lastKnownFileType = text; name = telegram.qrc; path = SourceFiles/telegram.qrc; sourceTree = ""; }; 135FD3715BFDC50AD7B00E04 /* text.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = text.cpp; path = SourceFiles/gui/text.cpp; sourceTree = ""; }; 143405635D04698F421A12EA /* aboutbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = aboutbox.h; path = SourceFiles/boxes/aboutbox.h; sourceTree = ""; }; 14437BFDCD58FF1742EF1B35 /* photocropbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = photocropbox.h; path = SourceFiles/boxes/photocropbox.h; sourceTree = ""; }; 152B8D1BCECEB7B0C77E073C /* intro.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = intro.h; path = SourceFiles/intro/intro.h; sourceTree = ""; }; - 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = ""; }; + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = ""; }; 186D09F4CB713AD4B8BDD260 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = ""; }; 19618554524B8D928F13940D /* emoji_config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = emoji_config.h; path = SourceFiles/gui/emoji_config.h; sourceTree = ""; }; 1A4C47331E186344291B8178 /* dropdown.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dropdown.h; path = SourceFiles/dropdown.h; sourceTree = ""; }; @@ -389,74 +388,73 @@ 1DC02F674A7192FF8BE391A7 /* types.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = types.h; path = SourceFiles/types.h; sourceTree = ""; }; 1DEFC0760BB9340529F582F7 /* confirmbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = confirmbox.h; path = SourceFiles/boxes/confirmbox.h; sourceTree = ""; }; 1E5EEB5782B6357057356F9E /* moc_flatinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_flatinput.cpp; path = GeneratedFiles/Debug/moc_flatinput.cpp; sourceTree = ""; }; - 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = ""; }; + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = ""; }; 1FE45A67215BEA2434F588E8 /* moc_layerwidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_layerwidget.cpp; path = GeneratedFiles/Debug/moc_layerwidget.cpp; sourceTree = ""; }; 205259EEEE2BADA5E64741E3 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = /System/Library/Frameworks/Security.framework; sourceTree = ""; }; 206B4F5CBD5354BCE19FF32F /* countries.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = countries.h; path = SourceFiles/countries.h; sourceTree = ""; }; 2181F5E34DE0A4B2F811E2E2 /* moc_flatlabel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_flatlabel.cpp; path = GeneratedFiles/Debug/moc_flatlabel.cpp; sourceTree = ""; }; 21F907AB8D19BD779147A085 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = /System/Library/Frameworks/AVFoundation.framework; sourceTree = ""; }; 220B97F8F62C720E6059A64B /* profilewidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = profilewidget.h; path = SourceFiles/profilewidget.h; sourceTree = ""; }; - 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = ""; }; - 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = ""; }; - 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = ""; }; - 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = ""; }; + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = ""; }; + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = ""; }; + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = ""; }; + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = ""; }; 24F7D3E789E91B10E422C116 /* config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = config.h; path = SourceFiles/config.h; sourceTree = ""; }; 25CA12A22B83B0B038C5B5DE /* langloaderplain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = langloaderplain.h; path = SourceFiles/langloaderplain.h; sourceTree = ""; }; 26083D8E535AFF927591E1A5 /* moc_contactsbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_contactsbox.cpp; path = GeneratedFiles/Debug/moc_contactsbox.cpp; sourceTree = ""; }; 26B83A58EE268598E703875D /* history.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = history.cpp; path = SourceFiles/history.cpp; sourceTree = ""; }; 27E7471A4EC90E84353AA16F /* mtpCoreTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpCoreTypes.h; path = SourceFiles/mtproto/mtpCoreTypes.h; sourceTree = ""; }; - 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = ""; }; - 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = ""; }; + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = ""; }; + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = ""; }; 2BB2A1BB8DB0993F78F4E3C7 /* title.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = title.cpp; path = SourceFiles/title.cpp; sourceTree = ""; }; 2C540BAEABD7F9B5FA11008E /* moc_mtpDC.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mtpDC.cpp; path = GeneratedFiles/Debug/moc_mtpDC.cpp; sourceTree = ""; }; 2C99425D7670941EAF07B453 /* moc_historywidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_historywidget.cpp; path = GeneratedFiles/Debug/moc_historywidget.cpp; sourceTree = ""; }; - 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = ""; }; - 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = ""; }; + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = ""; }; + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = ""; }; 2EA58EF6CDF368B0132BAEB9 /* settings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = settings.h; path = SourceFiles/settings.h; sourceTree = ""; }; 301BB513F2F5D447B3BF22DF /* window.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = window.h; path = SourceFiles/window.h; sourceTree = ""; }; - 311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = ""; }; - 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = ""; }; + 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 315C7FACB4A9E18AA95486CA /* mtpDC.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtpDC.cpp; path = SourceFiles/mtproto/mtpDC.cpp; sourceTree = ""; }; - 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = ""; }; - 346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = ""; }; + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = ""; }; + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = ""; }; 34E1DF19219C52D7DB20224A /* flatlabel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flatlabel.h; path = SourceFiles/gui/flatlabel.h; sourceTree = ""; }; - 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = ""; }; - 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = ""; }; + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = ""; }; + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = ""; }; 36BDA5D01BED543A92886669 /* Telegram.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = Telegram.pro; sourceTree = ""; }; 36F718DC72345A84987DB0F6 /* flatbutton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flatbutton.h; path = SourceFiles/gui/flatbutton.h; sourceTree = ""; }; - 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = ""; }; + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = ""; }; 39C1ADF085370E033CB7E7E1 /* style_classes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = style_classes.h; path = GeneratedFiles/style_classes.h; sourceTree = ""; }; 3A220FD1AE5AD9FE3DC073A4 /* moc_mainwidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mainwidget.cpp; path = GeneratedFiles/Debug/moc_mainwidget.cpp; sourceTree = ""; }; 3B3ED09AB00290D78CF1181B /* moc_dialogswidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_dialogswidget.cpp; path = GeneratedFiles/Debug/moc_dialogswidget.cpp; sourceTree = ""; }; - 3BBB805F6180E363BF89151A /* qtaudio_coreaudio */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtaudio_coreaudio; path = "/usr/local/Qt-5.4.0/plugins/audio/libqtaudio_coreaudio$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 3BBB805F6180E363BF89151A /* qtaudio_coreaudio */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtaudio_coreaudio; path = "/usr/local/Qt-5.5.0/plugins/audio/libqtaudio_coreaudio$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 3BE70E2A82DC2BF402165ED5 /* sysbuttons.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sysbuttons.h; path = SourceFiles/sysbuttons.h; sourceTree = ""; }; 3C44131FDCFEF4396B9EA2BA /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; }; 3D54A9F3266BB8739520E3FB /* moc_fileuploader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_fileuploader.cpp; path = GeneratedFiles/Debug/moc_fileuploader.cpp; sourceTree = ""; }; 3E329D4547CC23585307FA32 /* countryinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = countryinput.cpp; path = SourceFiles/gui/countryinput.cpp; sourceTree = ""; }; - 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = ""; }; + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = ""; }; 420A06A32B66D250142B4B6D /* style_core.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = style_core.cpp; path = SourceFiles/gui/style_core.cpp; sourceTree = ""; }; - 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf"; sourceTree = ""; }; - 45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = ""; }; + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf"; sourceTree = ""; }; + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = ""; }; 4604687EBA85611C9E8A9CDF /* button.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = button.h; path = SourceFiles/gui/button.h; sourceTree = ""; }; 46292F489228B60010794CE4 /* moc_button.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_button.cpp; path = GeneratedFiles/Debug/moc_button.cpp; sourceTree = ""; }; - 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.4.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.5.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 48003469151B9DDE82E851FB /* moc_profilewidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_profilewidget.cpp; path = GeneratedFiles/Debug/moc_profilewidget.cpp; sourceTree = ""; }; 4AF15B5A0A43EB62D6DAF211 /* libexif.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libexif.a; path = "../../Libraries/libexif-0.6.20/libexif/.libs/libexif.a"; sourceTree = ""; }; - 4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = ""; }; + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = ""; }; 4D1099F2D3696E8A0E17D37D /* mtpSession.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpSession.h; path = SourceFiles/mtproto/mtpSession.h; sourceTree = ""; }; 4D504A849F15EB58E53A4E5F /* title.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = title.h; path = SourceFiles/title.h; sourceTree = ""; }; 4D55B83DFDFE3D492CDBD27A /* button.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = button.cpp; path = SourceFiles/gui/button.cpp; sourceTree = ""; }; 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; 4E4D06EC4D2C82C7D6E079A2 /* flatinput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flatinput.h; path = SourceFiles/gui/flatinput.h; sourceTree = ""; }; - 4EC011DBE92DD1FD208D94D2 /* qtmultimedia_m3u */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtmultimedia_m3u; path = "/usr/local/Qt-5.4.0/plugins/playlistformats/libqtmultimedia_m3u$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = ""; }; + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = ""; }; 5059175BDCEC77B7246DE1B9 /* flatcheckbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flatcheckbox.h; path = SourceFiles/gui/flatcheckbox.h; sourceTree = ""; }; 507CCEEC4CBA3E3BD6EEDED1 /* twidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = twidget.h; path = SourceFiles/gui/twidget.h; sourceTree = ""; }; 51355181C0E6689B0B764543 /* connectionbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = connectionbox.cpp; path = SourceFiles/boxes/connectionbox.cpp; sourceTree = ""; }; 5271C394C1E7646D117CE67E /* main.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = SourceFiles/main.cpp; sourceTree = ""; }; 547CCADBD1CC5050167EF948 /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = /System/Library/Frameworks/CoreMedia.framework; sourceTree = ""; }; 5591A965D1DC024FBDB40151 /* moc_mtpFileLoader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mtpFileLoader.cpp; path = GeneratedFiles/Debug/moc_mtpFileLoader.cpp; sourceTree = ""; }; - 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = ""; }; + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = ""; }; 55A654A2EE8554FF062742B8 /* moc_twidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_twidget.cpp; path = GeneratedFiles/Debug/moc_twidget.cpp; sourceTree = ""; }; 55B4A93DD455EED91C899A8E /* dialogswidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dialogswidget.h; path = SourceFiles/dialogswidget.h; sourceTree = ""; }; 58A7114F60E7D09E73283983 /* moc_introsignup.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_introsignup.cpp; path = GeneratedFiles/Debug/moc_introsignup.cpp; sourceTree = ""; }; @@ -464,99 +462,99 @@ 59E514973BA9BF6599252DDC /* flattextarea.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flattextarea.h; path = SourceFiles/gui/flattextarea.h; sourceTree = ""; }; 5A5431331A13AA7B07414240 /* stdafx.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = stdafx.cpp; path = SourceFiles/stdafx.cpp; sourceTree = ""; }; 5A7F88F9C7F08D3DDE6EEF6B /* localimageloader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = localimageloader.cpp; path = SourceFiles/localimageloader.cpp; sourceTree = ""; }; - 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.4.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.5.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 5A9B4C6C59856143F3D0DE53 /* layerwidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = layerwidget.cpp; path = SourceFiles/layerwidget.cpp; sourceTree = ""; }; - 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = ""; }; + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = ""; }; 5C7FD422BBEDA858D7237AE9 /* flattextarea.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flattextarea.cpp; path = SourceFiles/gui/flattextarea.cpp; sourceTree = ""; }; - 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; - 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; 6011DDB120E1B2D4803E129A /* stdafx.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = stdafx.h; path = SourceFiles/stdafx.h; sourceTree = ""; }; 60C0061633AC4244EA634B2A /* countrycodeinput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = countrycodeinput.h; path = SourceFiles/gui/countrycodeinput.h; sourceTree = ""; }; - 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; 61C679D8B4B332026BD34200 /* introphone.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = introphone.cpp; path = SourceFiles/intro/introphone.cpp; sourceTree = ""; }; 62807F13DBD204D0716143AD /* Telegram.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Telegram.app; sourceTree = BUILT_PRODUCTS_DIR; }; 63AF8520023B4EA40306CB03 /* moc_mtpSession.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mtpSession.cpp; path = GeneratedFiles/Debug/moc_mtpSession.cpp; sourceTree = ""; }; - 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf"; sourceTree = ""; }; + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf"; sourceTree = ""; }; 6532A0DC7EFE446967682E83 /* moc_downloadpathbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_downloadpathbox.cpp; path = GeneratedFiles/Debug/moc_downloadpathbox.cpp; sourceTree = ""; }; 6610564B876E47D289A596DB /* confirmbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = confirmbox.cpp; path = SourceFiles/boxes/confirmbox.cpp; sourceTree = ""; }; - 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf"; sourceTree = ""; }; - 6700DD555BF1C0FC338FB959 /* Qt5Network */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Network; path = "/usr/local/Qt-5.4.0/lib/libQt5Network$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf"; sourceTree = ""; }; + 6700DD555BF1C0FC338FB959 /* Qt5Network */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Network; path = "/usr/local/Qt-5.5.0/lib/libQt5Network$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 6868ADA9E9A9801B2BA92B97 /* countryinput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = countryinput.h; path = SourceFiles/gui/countryinput.h; sourceTree = ""; }; - 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = ""; }; + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = ""; }; 6A510365F9F6367ECB0DB065 /* images.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = images.cpp; path = SourceFiles/gui/images.cpp; sourceTree = ""; }; 6B46A0EE3C3B9D3B5A24946E /* moc_window.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_window.cpp; path = GeneratedFiles/Debug/moc_window.cpp; sourceTree = ""; }; 6B90F69947805586A6FAE80E /* sysbuttons.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = sysbuttons.cpp; path = SourceFiles/sysbuttons.cpp; sourceTree = ""; }; - 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = ""; }; + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = ""; }; 6C86B6E6AB1857B735B720D6 /* layerwidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = layerwidget.h; path = SourceFiles/layerwidget.h; sourceTree = ""; }; 6D50D70712776D7ED3B00E5C /* mtp.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtp.cpp; path = SourceFiles/mtproto/mtp.cpp; sourceTree = ""; }; 6E1859D714E4471E053D90C9 /* scrollarea.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = scrollarea.cpp; path = SourceFiles/gui/scrollarea.cpp; sourceTree = ""; }; - 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qdevice.pri"; sourceTree = ""; }; + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qdevice.pri"; sourceTree = ""; }; 6E8FD0ED1B60D43929944CD2 /* text.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = text.h; path = SourceFiles/gui/text.h; sourceTree = ""; }; 710C982FC773400941B3AFBC /* dropdown.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = dropdown.cpp; path = SourceFiles/dropdown.cpp; sourceTree = ""; }; 723F90793B2C195E2CCB2233 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 73737DC91E390C4AB18FB595 /* pspecific_mac_p.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = pspecific_mac_p.mm; path = SourceFiles/pspecific_mac_p.mm; sourceTree = ""; }; 74772222DA764BE4623EAC5D /* moc_pspecific_mac.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_pspecific_mac.cpp; path = GeneratedFiles/Debug/moc_pspecific_mac.cpp; sourceTree = ""; }; 748F1BCCBEEB3675768960FB /* mtpAuthKey.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpAuthKey.h; path = SourceFiles/mtproto/mtpAuthKey.h; sourceTree = ""; }; - 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; 751C8D0E0BE6D16937B77A2C /* countrycodeinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = countrycodeinput.cpp; path = SourceFiles/gui/countrycodeinput.cpp; sourceTree = ""; }; 763ED3C6815ED6C89E352652 /* flatlabel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flatlabel.cpp; path = SourceFiles/gui/flatlabel.cpp; sourceTree = ""; }; - 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; - 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; - 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = ""; }; + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = ""; }; 7C8F9CA4FCE8AF8FCCCB961E /* phoneinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = phoneinput.cpp; path = SourceFiles/gui/phoneinput.cpp; sourceTree = ""; }; 7CA6945B22800A0F30B75DA5 /* addcontactbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = addcontactbox.cpp; path = SourceFiles/boxes/addcontactbox.cpp; sourceTree = ""; }; 7CDE9D7CB2C729BC3612372B /* addcontactbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = addcontactbox.h; path = SourceFiles/boxes/addcontactbox.h; sourceTree = ""; }; 7D075A915E8739C1B6BC5F43 /* types.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = types.cpp; path = SourceFiles/types.cpp; sourceTree = ""; }; - 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = ""; }; + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = ""; }; 7DBFC0B5EAF874BA10E3D603 /* mtpScheme.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpScheme.h; path = SourceFiles/mtproto/mtpScheme.h; sourceTree = ""; }; - 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = ""; }; + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = ""; }; 7EC00404ACD5AB0E97726B0E /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = /System/Library/Frameworks/QuartzCore.framework; sourceTree = ""; }; - 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = ""; }; + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = ""; }; 81780025807318AEA3B8A6FF /* moc_addcontactbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_addcontactbox.cpp; path = GeneratedFiles/Debug/moc_addcontactbox.cpp; sourceTree = ""; }; - 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/macx.conf"; sourceTree = ""; }; - 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = ""; }; + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/macx.conf"; sourceTree = ""; }; + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = ""; }; 83728F60A64483E0AA933D76 /* pspecific.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pspecific.h; path = SourceFiles/pspecific.h; sourceTree = ""; }; 83A36F229E897566E011B79E /* scrollarea.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = scrollarea.h; path = SourceFiles/gui/scrollarea.h; sourceTree = ""; }; - 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = ""; }; - 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = ""; }; + 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = ""; }; + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = ""; }; 85FABD67716E36CD8B3CA4FA /* animation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = animation.h; path = SourceFiles/gui/animation.h; sourceTree = ""; }; - 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = ""; }; - 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = ""; }; - 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = ""; }; + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = ""; }; + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = ""; }; + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = ""; }; 8880067F9BFD46108777E134 /* mtp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtp.h; path = SourceFiles/mtproto/mtp.h; sourceTree = ""; }; 8918F4B71ED5FC138AFD3F70 /* moc_scrollarea.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_scrollarea.cpp; path = GeneratedFiles/Debug/moc_scrollarea.cpp; sourceTree = ""; }; - 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = ""; }; - 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = ""; }; + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = ""; }; + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = ""; }; 89F92B278CA31C393E245056 /* mtpRPC.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtpRPC.cpp; path = SourceFiles/mtproto/mtpRPC.cpp; sourceTree = ""; }; - 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = ""; }; + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = ""; }; 8A28F7789408AA839F48A5F2 /* settings.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = settings.cpp; path = SourceFiles/settings.cpp; sourceTree = ""; }; 8A9D926C08392F7A9BC83B0C /* fileuploader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fileuploader.h; path = SourceFiles/fileuploader.h; sourceTree = ""; }; - 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = ""; }; + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = ""; }; 8B98A212C068D6CC7CE73CAA /* moc_introcode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_introcode.cpp; path = GeneratedFiles/Debug/moc_introcode.cpp; sourceTree = ""; }; - 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = ""; }; - 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang.conf"; sourceTree = ""; }; + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = ""; }; + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang.conf"; sourceTree = ""; }; 8C800AAC9549E6E9E7046BED /* contactsbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = contactsbox.cpp; path = SourceFiles/boxes/contactsbox.cpp; sourceTree = ""; }; 8CCCACE96535180FEB557712 /* settingswidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = settingswidget.cpp; path = SourceFiles/settingswidget.cpp; sourceTree = ""; }; - 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; - 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = ""; }; + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = ""; }; 8DF456E9A416E4C3C2D6946C /* downloadpathbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = downloadpathbox.cpp; path = SourceFiles/boxes/downloadpathbox.cpp; sourceTree = ""; }; - 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = ""; }; + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = ""; }; 8EB83A4D34226609E79A613A /* connectionbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = connectionbox.h; path = SourceFiles/boxes/connectionbox.h; sourceTree = ""; }; - 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = ""; }; - 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = ""; }; + 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = ""; }; + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = ""; }; 924D4939FD169BB4B8AEB1C9 /* moc_mtp.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mtp.cpp; path = GeneratedFiles/Debug/moc_mtp.cpp; sourceTree = ""; }; 93AFE74928551FC3D7E8390B /* moc_settingswidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_settingswidget.cpp; path = GeneratedFiles/Debug/moc_settingswidget.cpp; sourceTree = ""; }; - 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = ""; }; + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = ""; }; 963123025C466CB8DD9CF4AF /* mtpConnection.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpConnection.h; path = SourceFiles/mtproto/mtpConnection.h; sourceTree = ""; }; 96ACDDE3DCB798B97F9EA2F4 /* mtpFileLoader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpFileLoader.h; path = SourceFiles/mtproto/mtpFileLoader.h; sourceTree = ""; }; 9742F24EE18EA44D52824F1E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; 974DB34EEB8F83B91614C0B0 /* logs.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = logs.cpp; path = SourceFiles/logs.cpp; sourceTree = ""; }; 99B8D38F7F5858601230911E /* style_auto.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = style_auto.cpp; path = GeneratedFiles/style_auto.cpp; sourceTree = ""; }; - 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = ""; }; - 9A55B8F7C143D66AD9EAE304 /* qgenericbearer */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qgenericbearer; path = "/usr/local/Qt-5.4.0/plugins/bearer/libqgenericbearer$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = ""; }; + 9A55B8F7C143D66AD9EAE304 /* qgenericbearer */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qgenericbearer; path = "/usr/local/Qt-5.5.0/plugins/bearer/libqgenericbearer$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; 9A69B711DE4B9C89BA803750 /* moc_aboutbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_aboutbox.cpp; path = GeneratedFiles/Debug/moc_aboutbox.cpp; sourceTree = ""; }; 9AB1479D7D63386FD2046620 /* flatinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flatinput.cpp; path = SourceFiles/gui/flatinput.cpp; sourceTree = ""; }; 9B36BB8C5B8CA7B07F3F35F0 /* fileuploader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = fileuploader.cpp; path = SourceFiles/fileuploader.cpp; sourceTree = ""; }; @@ -566,135 +564,135 @@ 9E0704DE8650D7952DC6B7AE /* moc_photosendbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_photosendbox.cpp; path = GeneratedFiles/Debug/moc_photosendbox.cpp; sourceTree = ""; }; 9EFD7CB36012BFC00CC79434 /* style_auto.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = style_auto.h; path = GeneratedFiles/style_auto.h; sourceTree = ""; }; A0090709DE1B155085362C36 /* introcode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = introcode.cpp; path = SourceFiles/intro/introcode.cpp; sourceTree = ""; }; - A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; A1479F94376F9732B57C69DB /* moc_animation.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_animation.cpp; path = GeneratedFiles/Debug/moc_animation.cpp; sourceTree = ""; }; A1A67BEAA744704B29168D39 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; A1F48DF3E5D0D7C741C1EAC4 /* moc_countrycodeinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_countrycodeinput.cpp; path = GeneratedFiles/Debug/moc_countrycodeinput.cpp; sourceTree = ""; }; A3622760CEC6D6827A25E710 /* mtpPublicRSA.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpPublicRSA.h; path = SourceFiles/mtproto/mtpPublicRSA.h; sourceTree = ""; }; A37C7E516201B0264A4CDA38 /* moc_intro.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_intro.cpp; path = GeneratedFiles/Debug/moc_intro.cpp; sourceTree = ""; }; - A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; - A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = ""; }; - A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = ""; }; - A7782E2B07CB2D1D14F431B0 /* qtaccessiblewidgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtaccessiblewidgets; path = "/usr/local/Qt-5.4.0/plugins/accessible/libqtaccessiblewidgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = ""; }; + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = ""; }; + A7782E2B07CB2D1D14F431B0 /* qtaccessiblewidgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtaccessiblewidgets; path = "/usr/local/Qt-5.5.0/plugins/accessible/libqtaccessiblewidgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; A83D2C19F756D3371E5999A8 /* historywidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = historywidget.cpp; path = SourceFiles/historywidget.cpp; sourceTree = ""; }; - A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = ""; }; + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = ""; }; A9FF4818C6775109B3DBFA18 /* introsignup.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = introsignup.cpp; path = SourceFiles/intro/introsignup.cpp; sourceTree = ""; }; - AA5379CB06E908AC80BE7B82 /* Qt5OpenGL */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5OpenGL; path = "/usr/local/Qt-5.4.0/lib/libQt5OpenGL$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = ""; }; - AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = ""; }; + AA5379CB06E908AC80BE7B82 /* Qt5OpenGL */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5OpenGL; path = "/usr/local/Qt-5.5.0/lib/libQt5OpenGL$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = ""; }; + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = ""; }; AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = ""; }; - ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = ""; }; + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = ""; }; AC9B5F6FB4B984C8D76F7AE2 /* moc_dropdown.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_dropdown.cpp; path = GeneratedFiles/Debug/moc_dropdown.cpp; sourceTree = ""; }; - ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = ""; }; + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = ""; }; AD0C395D671BC024083A5FC7 /* localimageloader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = localimageloader.h; path = SourceFiles/localimageloader.h; sourceTree = ""; }; AD90723EF02EAD016FD49CC9 /* introsteps.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = introsteps.h; path = SourceFiles/intro/introsteps.h; sourceTree = ""; }; - ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = ""; }; + ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = ""; }; AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; AF4585F593B1C9D0D4FD061C /* flatcheckbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flatcheckbox.cpp; path = SourceFiles/gui/flatcheckbox.cpp; sourceTree = ""; }; AF5776B0652744978B7DF6D3 /* langloaderplain.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = langloaderplain.cpp; path = SourceFiles/langloaderplain.cpp; sourceTree = ""; }; AF61D864B8C444ADD4E1B391 /* moc_photocropbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_photocropbox.cpp; path = GeneratedFiles/Debug/moc_photocropbox.cpp; sourceTree = ""; }; - AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = ""; }; - B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = ""; }; - B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = ""; }; - B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = ""; }; + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = ""; }; + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = ""; }; + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = ""; }; + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = ""; }; B3062303CE8F4EB9325CB3DC /* emoji_config.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = emoji_config.cpp; path = SourceFiles/gui/emoji_config.cpp; sourceTree = ""; }; - B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = ""; }; + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = ""; }; B3D42654F18B1FE49512C404 /* mtpDC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpDC.h; path = SourceFiles/mtproto/mtpDC.h; sourceTree = ""; }; - B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = ""; }; - B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = ""; }; - B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = ""; }; + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = ""; }; + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = ""; }; + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = ""; }; B714EA71A09A832FAA846A0A /* moc_mtpConnection.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mtpConnection.cpp; path = GeneratedFiles/Debug/moc_mtpConnection.cpp; sourceTree = ""; }; B8100EAB0521FC7A937D2E4F /* moc_phoneinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_phoneinput.cpp; path = GeneratedFiles/Debug/moc_phoneinput.cpp; sourceTree = ""; }; - B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = ""; }; + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = ""; }; B88236FC554B694F618D848C /* moc_sysbuttons.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_sysbuttons.cpp; path = GeneratedFiles/Debug/moc_sysbuttons.cpp; sourceTree = ""; }; - B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = ""; }; + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = ""; }; B8D9AFA42E8633154A9817A2 /* mtpConnection.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtpConnection.cpp; path = SourceFiles/mtproto/mtpConnection.cpp; sourceTree = ""; }; B97D4DB97FE881648644211A /* downloadpathbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = downloadpathbox.h; path = SourceFiles/boxes/downloadpathbox.h; sourceTree = ""; }; BB1602EA641643DE565005B1 /* twidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = twidget.cpp; path = SourceFiles/gui/twidget.cpp; sourceTree = ""; }; - BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = ""; }; - BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = ""; }; + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = ""; }; + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = ""; }; BDAB6725B830DEE896DC0F55 /* boxshadow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = boxshadow.h; path = SourceFiles/gui/boxshadow.h; sourceTree = ""; }; - BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = ""; }; + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = ""; }; BEF9DFDA6822604126A7E233 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = ""; }; - BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = ""; }; + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = ""; }; C194EDD00F76216057D48A5C /* aboutbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = aboutbox.cpp; path = SourceFiles/boxes/aboutbox.cpp; sourceTree = ""; }; C19DF71B273A4843553518F2 /* app.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = app.h; path = SourceFiles/app.h; sourceTree = ""; }; C20F9DD8C7B031B8E20D5653 /* application.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = application.cpp; path = SourceFiles/application.cpp; sourceTree = ""; }; C34459FA465B57DF4DB80D12 /* introsteps.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = introsteps.cpp; path = SourceFiles/intro/introsteps.cpp; sourceTree = ""; }; - C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = ""; }; - C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = ""; }; + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = ""; }; + C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = ""; }; C63C6D083EBEB13A60256DF3 /* historywidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = historywidget.h; path = SourceFiles/historywidget.h; sourceTree = ""; }; - C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = ""; }; + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = ""; }; C913E6A1001E07EE7C13CE93 /* style.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = style.h; path = SourceFiles/style.h; sourceTree = ""; }; C9FFCCE4FCB845744636795F /* moc_flatbutton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_flatbutton.cpp; path = GeneratedFiles/Debug/moc_flatbutton.cpp; sourceTree = ""; }; CA56ACFB53D87637192CC9B2 /* window.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = window.cpp; path = SourceFiles/window.cpp; sourceTree = ""; }; - CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = ""; }; + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = ""; }; CE0D5EFE401BF9815FACE579 /* pspecific_mac.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pspecific_mac.h; path = SourceFiles/pspecific_mac.h; sourceTree = ""; }; CE7FFE194127BD789A2C877A /* moc_confirmbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_confirmbox.cpp; path = GeneratedFiles/Debug/moc_confirmbox.cpp; sourceTree = ""; }; - CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = ""; }; + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = ""; }; CF1690B68F3B278E78823DB9 /* history.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = history.h; path = SourceFiles/history.h; sourceTree = ""; }; CF32DF59C7823E4F3397EF3C /* profilewidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = profilewidget.cpp; path = SourceFiles/profilewidget.cpp; sourceTree = ""; }; - CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = ""; }; - CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = ""; }; - CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = ""; }; - D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = ""; }; + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = ""; }; + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = ""; }; + CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = ""; }; + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = ""; }; D12A6BD8EE80B8B308E481AD /* moc_flattextarea.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_flattextarea.cpp; path = GeneratedFiles/Debug/moc_flattextarea.cpp; sourceTree = ""; }; D1C9C77F1318F5A55C9BF289 /* photosendbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = photosendbox.cpp; path = SourceFiles/boxes/photosendbox.cpp; sourceTree = ""; }; - D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = ""; }; - D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = ""; }; - D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = ""; }; + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = ""; }; + D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; D3FE9C29B6A61D7C3C4B731B /* animation.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = animation.cpp; path = SourceFiles/gui/animation.cpp; sourceTree = ""; }; D4B32C2222F82AC56BADEB21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; - D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/qconfig.pri"; sourceTree = ""; }; - D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = ""; }; - D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.4.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.4.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/qconfig.pri"; sourceTree = ""; }; + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = ""; }; + D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.5.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.5.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; D6FF6676816C4E374D374060 /* qrc_telegram.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = qrc_telegram.cpp; path = GeneratedFiles/qrc_telegram.cpp; sourceTree = ""; }; - D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = ""; }; - D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = ""; }; - D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = ""; }; - DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = ""; }; - DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = ""; }; + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = ""; }; + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = ""; }; + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = ""; }; + DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; DC23E0B79FF53F35BA8F76A1 /* introsignup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = introsignup.h; path = SourceFiles/intro/introsignup.h; sourceTree = ""; }; - DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; DE4C0E3685DDAE58F9397B13 /* filedialog.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = filedialog.cpp; path = SourceFiles/gui/filedialog.cpp; sourceTree = ""; }; - DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = ""; }; + DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = ""; }; DFD7912080BC557230093752 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; - E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = ""; }; + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = ""; }; E181C525E21A16F2D4396CA7 /* moc_application.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_application.cpp; path = GeneratedFiles/Debug/moc_application.cpp; sourceTree = ""; }; - E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = ""; }; - E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = ""; }; + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = ""; }; + E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = ""; }; E466873F01ABA1E55E914489 /* dialogswidget.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = dialogswidget.cpp; path = SourceFiles/dialogswidget.cpp; sourceTree = ""; }; - E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = ""; }; - E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = ""; }; - E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.4.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = ""; }; + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = ""; }; + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = ""; }; + E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.5.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = ""; }; E908A6C86F93FA27DF70866C /* photocropbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = photocropbox.cpp; path = SourceFiles/boxes/photocropbox.cpp; sourceTree = ""; }; - EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = ""; }; - EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = ""; }; - EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = ""; }; - EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/mac.conf"; sourceTree = ""; }; + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = ""; }; + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = ""; }; + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = ""; }; + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/mac.conf"; sourceTree = ""; }; EC4D4A7398CAAD47386D9CA0 /* mtpSessionImpl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpSessionImpl.h; path = SourceFiles/mtproto/mtpSessionImpl.h; sourceTree = ""; }; - EE03BC5CA4628A6D6BEB0122 /* qcorewlanbearer */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcorewlanbearer; path = "/usr/local/Qt-5.4.0/plugins/bearer/libqcorewlanbearer$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + EE03BC5CA4628A6D6BEB0122 /* qcorewlanbearer */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcorewlanbearer; path = "/usr/local/Qt-5.5.0/plugins/bearer/libqcorewlanbearer$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; EF1AD6A66D0C28A6A15E2C30 /* introphone.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = introphone.h; path = SourceFiles/intro/introphone.h; sourceTree = ""; }; - F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; - F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = ""; }; + F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = ""; }; F1A04BDB750C2AE652797B04 /* flatbutton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flatbutton.cpp; path = SourceFiles/gui/flatbutton.cpp; sourceTree = ""; }; F1B68FFCE8AE823F6D45EB06 /* phoneinput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = phoneinput.h; path = SourceFiles/gui/phoneinput.h; sourceTree = ""; }; - F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.4.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.5.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; F26998DF735BCE5F975508ED /* CoreWLAN.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreWLAN.framework; path = /System/Library/Frameworks/CoreWLAN.framework; sourceTree = ""; }; - F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = ""; }; - F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf"; sourceTree = ""; }; - F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = ""; }; + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = ""; }; + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf"; sourceTree = ""; }; + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = ""; }; F4EECA1187A744AEF5165243 /* pspecific_mac.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = pspecific_mac.cpp; path = SourceFiles/pspecific_mac.cpp; sourceTree = ""; }; - F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = ""; }; + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = ""; }; F80095A026AF9453E9C2B8BD /* settingswidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = settingswidget.h; path = SourceFiles/settingswidget.h; sourceTree = ""; }; - F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = ""; }; - F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = ""; }; + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = ""; }; + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = ""; }; FB61F72601D91BF3AC730D20 /* mtpRPC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mtpRPC.h; path = SourceFiles/mtproto/mtpRPC.h; sourceTree = ""; }; FCC237CA5AD60B9BA4447615 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; - FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = ""; }; + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = ""; }; FE8FD20832B4C226E345CFBA /* mainwidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mainwidget.h; path = SourceFiles/mainwidget.h; sourceTree = ""; }; FEC58F9D8A0963E5A9D4BE6F /* moc_connectionbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_connectionbox.cpp; path = GeneratedFiles/Debug/moc_connectionbox.cpp; sourceTree = ""; }; FF5BDAB0076F3391B219EA52 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = /System/Library/Frameworks/SystemConfiguration.framework; sourceTree = ""; }; @@ -986,127 +984,127 @@ isa = PBXGroup; children = ( 36BDA5D01BED543A92886669 /* Telegram.pro */, - 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.4.0/mkspecs/qdevice.pri */, - 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.4.0/mkspecs/common/shell-unix.conf */, - 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.4.0/mkspecs/common/unix.conf */, - EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.4.0/mkspecs/common/mac.conf */, - 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.4.0/mkspecs/common/macx.conf */, - 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base.conf */, - A9E30FA27827990C5F182223 /* /usr/local/Qt-5.4.0/mkspecs/common/gcc-base-mac.conf */, - 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.4.0/mkspecs/common/clang.conf */, - F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.4.0/mkspecs/common/clang-mac.conf */, - D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.4.0/mkspecs/qconfig.pri */, - ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth.pri */, - 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, - BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, - CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_clucene_private.pri */, - 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent.pri */, - 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_concurrent_private.pri */, - 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core.pri */, - 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_core_private.pri */, - 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative.pri */, - 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_declarative_private.pri */, - F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer.pri */, - 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designer_private.pri */, - 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, - 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio.pri */, - 4C6C71914B1926119120DACD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_enginio_private.pri */, - 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui.pri */, - D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_gui_private.pri */, - FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help.pri */, - D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_help_private.pri */, - A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras.pri */, - 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_macextras_private.pri */, - D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia.pri */, - E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimedia_private.pri */, - 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, - D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, - 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network.pri */, - 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_network_private.pri */, - 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc.pri */, - B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_nfc_private.pri */, - 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl.pri */, - E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_opengl_private.pri */, - E432DA897A5F027987342E8F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions.pri */, - 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, - 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, - F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning.pri */, - E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_positioning_private.pri */, - 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport.pri */, - D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_printsupport_private.pri */, - B382B645B34234E451AE5D94 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml.pri */, - 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qml_private.pri */, - 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, - DF8188E30892A4654B984221 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest.pri */, - ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qmltest_private.pri */, - 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, - 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick.pri */, - 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quick_private.pri */, - 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, - D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets.pri */, - B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, - CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script.pri */, - C505A18319B9B63C63877858 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_script_private.pri */, - CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools.pri */, - A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_scripttools_private.pri */, - 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors.pri */, - BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sensors_private.pri */, - BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport.pri */, - 311004331A04F3D69C98643C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_serialport_private.pri */, - 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql.pri */, - 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_sql_private.pri */, - ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg.pri */, - 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_svg_private.pri */, - DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib.pri */, - 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_testlib_private.pri */, - E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools.pri */, - B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_uitools_private.pri */, - 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets.pri */, - 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_websockets_private.pri */, - A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets.pri */, - 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_widgets_private.pri */, - AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml.pri */, - E37365B4489B4918BEBB707D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xml_private.pri */, - 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, - F9BEAA743A908603687DA204 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, - D5141F795670589C8CC41CBC /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, - 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, - F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, - AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcocoa.pri */, - EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, - 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdds.pri */, - 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, - 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, - EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qicns.pri */, - C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qico.pri */, - 45DB132B756499D4DF38430E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qjp2.pri */, - B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qminimal.pri */, - F0A58515945747E36783CC21 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, - B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, - EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, - 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, - 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qmng.pri */, - CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, - 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, - B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsqlite.pri */, - F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvg.pri */, - CFFBE05DB004895080314289 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, - 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, - 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, - 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, - 060A694B42A4555240009936 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtga.pri */, - BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtiff.pri */, - B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, - 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, - C84546C18DCBB04166195DCF /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, - AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, - 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, - 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, - A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, - 346287C9E754E7C458153F03 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwbmp.pri */, - B26239063A068F800A2C95F4 /* /usr/local/Qt-5.4.0/mkspecs/modules/qt_plugin_qwebp.pri */, - 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.4.0/mkspecs/macx-clang/qmake.conf */, - 85061B1DA49D125991117950 /* /usr/local/Qt-5.4.0/mkspecs/macx-xcode/qmake.conf */, + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.5.0/mkspecs/qdevice.pri */, + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.5.0/mkspecs/common/shell-unix.conf */, + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.5.0/mkspecs/common/unix.conf */, + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.5.0/mkspecs/common/mac.conf */, + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.5.0/mkspecs/common/macx.conf */, + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base.conf */, + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.5.0/mkspecs/common/gcc-base-mac.conf */, + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.5.0/mkspecs/common/clang.conf */, + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.5.0/mkspecs/common/clang-mac.conf */, + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.5.0/mkspecs/qconfig.pri */, + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth.pri */, + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_clucene_private.pri */, + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent.pri */, + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_concurrent_private.pri */, + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core.pri */, + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_core_private.pri */, + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative.pri */, + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_declarative_private.pri */, + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer.pri */, + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designer_private.pri */, + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio.pri */, + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_enginio_private.pri */, + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui.pri */, + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_gui_private.pri */, + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help.pri */, + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_help_private.pri */, + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras.pri */, + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_macextras_private.pri */, + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia.pri */, + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimedia_private.pri */, + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network.pri */, + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_network_private.pri */, + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc.pri */, + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_nfc_private.pri */, + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl.pri */, + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_opengl_private.pri */, + E432DA897A5F027987342E8F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions.pri */, + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning.pri */, + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_positioning_private.pri */, + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport.pri */, + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_printsupport_private.pri */, + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml.pri */, + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qml_private.pri */, + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, + DF8188E30892A4654B984221 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest.pri */, + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qmltest_private.pri */, + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick.pri */, + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quick_private.pri */, + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets.pri */, + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script.pri */, + C505A18319B9B63C63877858 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_script_private.pri */, + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools.pri */, + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_scripttools_private.pri */, + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors.pri */, + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sensors_private.pri */, + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport.pri */, + 311004331A04F3D69C98643C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_serialport_private.pri */, + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql.pri */, + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_sql_private.pri */, + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg.pri */, + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_svg_private.pri */, + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib.pri */, + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_testlib_private.pri */, + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools.pri */, + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_uitools_private.pri */, + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets.pri */, + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_websockets_private.pri */, + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets.pri */, + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_widgets_private.pri */, + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml.pri */, + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xml_private.pri */, + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcocoa.pri */, + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdds.pri */, + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qicns.pri */, + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qico.pri */, + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qjp2.pri */, + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qminimal.pri */, + F0A58515945747E36783CC21 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qmng.pri */, + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsqlite.pri */, + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvg.pri */, + CFFBE05DB004895080314289 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, + 060A694B42A4555240009936 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtga.pri */, + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtiff.pri */, + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwbmp.pri */, + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_qwebp.pri */, + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.5.0/mkspecs/macx-clang/qmake.conf */, + 85061B1DA49D125991117950 /* /usr/local/Qt-5.5.0/mkspecs/macx-xcode/qmake.conf */, AB745978DF0F41D1801ABDA6 /* .qmake.stash */, 370997172D3BAEED157B8E70 /* SourceFiles */, ); @@ -1252,8 +1250,6 @@ 186D09F4CB713AD4B8BDD260 /* AudioUnit.framework */, AA5379CB06E908AC80BE7B82 /* Qt5OpenGL */, 3BBB805F6180E363BF89151A /* qtaudio_coreaudio */, - 4EC011DBE92DD1FD208D94D2 /* qtmultimedia_m3u */, - 112159B026FDEF9CD4E24175 /* Qt5Multimedia */, A7782E2B07CB2D1D14F431B0 /* qtaccessiblewidgets */, EE03BC5CA4628A6D6BEB0122 /* qcorewlanbearer */, F26998DF735BCE5F975508ED /* CoreWLAN.framework */, @@ -1776,8 +1772,8 @@ GCC_WARN_UNUSED_FUNCTION = NO; GCC_WARN_UNUSED_VARIABLE = NO; HEADER_SEARCH_PATHS = ( - ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ./../../Libraries/QtStatic/qtbase/include, ./SourceFiles, ./GeneratedFiles, @@ -1785,15 +1781,14 @@ ./../../Libraries/opus/include, "./../../Libraries/openal-soft/include", "./../../Libraries/libexif-0.6.20", - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtMultimedia", - "/usr/local/Qt-5.4.0/include/QtWidgets", - "/usr/local/Qt-5.4.0/include/QtNetwork", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtWidgets", + "/usr/local/Qt-5.5.0/include/QtNetwork", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INFOPLIST_FILE = Telegram.plist; INSTALL_DIR = ./../Mac/Release/; @@ -1801,10 +1796,10 @@ LIBRARY_SEARCH_PATHS = ( /System/Library/Frameworks/, "./../../Libraries/libexif-0.6.20/libexif/.libs", - "/usr/local/Qt-5.4.0/lib", - "/usr/local/Qt-5.4.0/plugins/bearer", - "/usr/local/Qt-5.4.0/plugins/platforms", - "/usr/local/Qt-5.4.0/plugins/imageformats", + "/usr/local/Qt-5.5.0/lib", + "/usr/local/Qt-5.5.0/plugins/bearer", + "/usr/local/Qt-5.5.0/plugins/platforms", + "/usr/local/Qt-5.5.0/plugins/imageformats", "./../../Libraries/openssl-xcode", ); MACOSX_DEPLOYMENT_TARGET = 10.7; @@ -1816,7 +1811,6 @@ "-W", "-fPIE", "-D_WITH_DEBUG", - "-DQT_MULTIMEDIA_LIB", "-DQT_WIDGETS_LIB", "-DQT_NETWORK_LIB", "-DQT_GUI_LIB", @@ -1838,7 +1832,6 @@ "-W", "-fPIE", "-D_WITH_DEBUG", - "-DQT_MULTIMEDIA_LIB", "-DQT_WIDGETS_LIB", "-DQT_NETWORK_LIB", "-DQT_GUI_LIB", @@ -1854,11 +1847,11 @@ OTHER_LDFLAGS = ( "-headerpad_max_install_names", "-stdlib=libc++", - "-L/usr/local/Qt-5.4.0/lib", - "-L/usr/local/Qt-5.4.0/plugins/bearer", - "-L/usr/local/Qt-5.4.0/plugins/platforms", + "-L/usr/local/Qt-5.5.0/lib", + "-L/usr/local/Qt-5.5.0/plugins/bearer", + "-L/usr/local/Qt-5.5.0/plugins/platforms", "-lcups", - "-L/usr/local/Qt-5.4.0/plugins/imageformats", + "-L/usr/local/Qt-5.5.0/plugins/imageformats", "-lz", "-lm", /usr/local/lib/libopenal.a, @@ -1913,8 +1906,8 @@ GCC_WARN_UNUSED_FUNCTION = NO; GCC_WARN_UNUSED_VARIABLE = NO; HEADER_SEARCH_PATHS = ( - ./../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui, - ./../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore, + ./../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui, + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore, ./../../Libraries/QtStatic/qtbase/include, ./SourceFiles, ./GeneratedFiles, @@ -1922,15 +1915,14 @@ ./../../Libraries/opus/include, "./../../Libraries/openal-soft/include", "./../../Libraries/libexif-0.6.20", - "/usr/local/Qt-5.4.0/include", - "/usr/local/Qt-5.4.0/include/QtMultimedia", - "/usr/local/Qt-5.4.0/include/QtWidgets", - "/usr/local/Qt-5.4.0/include/QtNetwork", - "/usr/local/Qt-5.4.0/include/QtGui", - "/usr/local/Qt-5.4.0/include/QtCore", + "/usr/local/Qt-5.5.0/include", + "/usr/local/Qt-5.5.0/include/QtWidgets", + "/usr/local/Qt-5.5.0/include/QtNetwork", + "/usr/local/Qt-5.5.0/include/QtGui", + "/usr/local/Qt-5.5.0/include/QtCore", /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, - "/usr/local/Qt-5.4.0/mkspecs/macx-clang", + "/usr/local/Qt-5.5.0/mkspecs/macx-clang", ); INFOPLIST_FILE = Telegram.plist; INSTALL_DIR = ./../Mac/Debug/; @@ -1938,10 +1930,10 @@ LIBRARY_SEARCH_PATHS = ( /System/Library/Frameworks/, "./../../Libraries/libexif-0.6.20/libexif/.libs", - "/usr/local/Qt-5.4.0/lib", - "/usr/local/Qt-5.4.0/plugins/bearer", - "/usr/local/Qt-5.4.0/plugins/platforms", - "/usr/local/Qt-5.4.0/plugins/imageformats", + "/usr/local/Qt-5.5.0/lib", + "/usr/local/Qt-5.5.0/plugins/bearer", + "/usr/local/Qt-5.5.0/plugins/platforms", + "/usr/local/Qt-5.5.0/plugins/imageformats", "./../../Libraries/openssl-xcode", ); MACOSX_DEPLOYMENT_TARGET = 10.7; @@ -1954,7 +1946,6 @@ "-W", "-fPIE", "-D_DEBUG", - "-DQT_MULTIMEDIA_LIB", "-DQT_WIDGETS_LIB", "-DQT_NETWORK_LIB", "-DQT_GUI_LIB", @@ -1975,7 +1966,6 @@ "-W", "-fPIE", "-D_DEBUG", - "-DQT_MULTIMEDIA_LIB", "-DQT_WIDGETS_LIB", "-DQT_NETWORK_LIB", "-DQT_GUI_LIB", @@ -1990,11 +1980,11 @@ OTHER_LDFLAGS = ( "-headerpad_max_install_names", "-stdlib=libc++", - "-L/usr/local/Qt-5.4.0/lib", - "-L/usr/local/Qt-5.4.0/plugins/bearer", - "-L/usr/local/Qt-5.4.0/plugins/platforms", + "-L/usr/local/Qt-5.5.0/lib", + "-L/usr/local/Qt-5.5.0/plugins/bearer", + "-L/usr/local/Qt-5.5.0/plugins/platforms", "-lcups", - "-L/usr/local/Qt-5.4.0/plugins/imageformats", + "-L/usr/local/Qt-5.5.0/plugins/imageformats", "-lz", "-lm", /usr/local/lib/libopenal.a, diff --git a/Telegram/Telegram.xcodeproj/qt_preprocess.mak b/Telegram/Telegram.xcodeproj/qt_preprocess.mak index 1843b0fb7..662fd8be5 100644 --- a/Telegram/Telegram.xcodeproj/qt_preprocess.mak +++ b/Telegram/Telegram.xcodeproj/qt_preprocess.mak @@ -1,21 +1,21 @@ ############################################################################# # Makefile for building: ../Mac/Debug/Telegram.app/Contents/MacOS/Telegram -# Generated by qmake (3.0) (Qt 5.4.0) +# Generated by qmake (3.0) (Qt 5.5.0) # Project: Telegram.pro # Template: app -# Command: /usr/local/Qt-5.4.0/bin/qmake -spec macx-xcode -o Telegram.xcodeproj/project.pbxproj Telegram.pro +# Command: /usr/local/Qt-5.5.0/bin/qmake -spec macx-xcode -o Telegram.xcodeproj/project.pbxproj Telegram.pro ############################################################################# MAKEFILE = project.pbxproj -MOC = /usr/local/Qt-5.4.0/bin/moc -UIC = /usr/local/Qt-5.4.0/bin/uic +MOC = /usr/local/Qt-5.5.0/bin/moc +UIC = /usr/local/Qt-5.5.0/bin/uic LEX = flex LEXFLAGS = YACC = yacc YACCFLAGS = -d DEFINES = -D_DEBUG -D_DEBUG -DQT_MULTIMEDIA_LIB -DQT_WIDGETS_LIB -DQT_NETWORK_LIB -DQT_GUI_LIB -DQT_CORE_LIB -INCPATH = -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.4.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.4.0/QtCore -I../../Libraries/QtStatic/qtbase/include -ISourceFiles -IGeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers +INCPATH = -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.5.0/QtCore -I../../Libraries/QtStatic/qtbase/include -ISourceFiles -IGeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers DEL_FILE = rm -f MOVE = mv -f @@ -85,7 +85,7 @@ GeneratedFiles/qrc_telegram.cpp: SourceFiles/telegram.qrc \ SourceFiles/art/usercolor1.png \ SourceFiles/art/usercolor5.png \ SourceFiles/art/chatcolor2.png - /usr/local/Qt-5.4.0/bin/rcc -name telegram SourceFiles/telegram.qrc -o GeneratedFiles/qrc_telegram.cpp + /usr/local/Qt-5.5.0/bin/rcc -name telegram SourceFiles/telegram.qrc -o GeneratedFiles/qrc_telegram.cpp GeneratedFiles/qrc_telegram_emojis.cpp: SourceFiles/telegram_emojis.qrc \ SourceFiles/art/emoji.webp \ @@ -93,11 +93,11 @@ GeneratedFiles/qrc_telegram_emojis.cpp: SourceFiles/telegram_emojis.qrc \ SourceFiles/art/emoji_200x.webp \ SourceFiles/art/emoji_250x.webp \ SourceFiles/art/emoji_125x.webp - /usr/local/Qt-5.4.0/bin/rcc -name telegram_emojis SourceFiles/telegram_emojis.qrc -o GeneratedFiles/qrc_telegram_emojis.cpp + /usr/local/Qt-5.5.0/bin/rcc -name telegram_emojis SourceFiles/telegram_emojis.qrc -o GeneratedFiles/qrc_telegram_emojis.cpp GeneratedFiles/qrc_telegram_mac.cpp: SourceFiles/telegram_mac.qrc \ SourceFiles/art/osxtray.png - /usr/local/Qt-5.4.0/bin/rcc -name telegram_mac SourceFiles/telegram_mac.qrc -o GeneratedFiles/qrc_telegram_mac.cpp + /usr/local/Qt-5.5.0/bin/rcc -name telegram_mac SourceFiles/telegram_mac.qrc -o GeneratedFiles/qrc_telegram_mac.cpp compiler_moc_header_make_all: GeneratedFiles/Debug/moc_apiwrap.cpp GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_audio.cpp GeneratedFiles/Debug/moc_autoupdater.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_history.cpp GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp GeneratedFiles/Debug/moc_mediaview.cpp GeneratedFiles/Debug/moc_overviewwidget.cpp GeneratedFiles/Debug/moc_playerwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp GeneratedFiles/Debug/moc_passcodewidget.cpp GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_localstorage.cpp GeneratedFiles/Debug/moc_mainwidget.cpp GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp GeneratedFiles/Debug/moc_types.cpp GeneratedFiles/Debug/moc_window.cpp GeneratedFiles/Debug/moc_mtp.cpp GeneratedFiles/Debug/moc_mtpConnection.cpp GeneratedFiles/Debug/moc_mtpDC.cpp GeneratedFiles/Debug/moc_mtpFileLoader.cpp GeneratedFiles/Debug/moc_mtpSession.cpp GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp GeneratedFiles/Debug/moc_contextmenu.cpp GeneratedFiles/Debug/moc_countrycodeinput.cpp GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp GeneratedFiles/Debug/moc_switcher.cpp GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp GeneratedFiles/Debug/moc_aboutbox.cpp GeneratedFiles/Debug/moc_abstractbox.cpp GeneratedFiles/Debug/moc_addcontactbox.cpp GeneratedFiles/Debug/moc_autolockbox.cpp GeneratedFiles/Debug/moc_backgroundbox.cpp GeneratedFiles/Debug/moc_confirmbox.cpp GeneratedFiles/Debug/moc_connectionbox.cpp GeneratedFiles/Debug/moc_contactsbox.cpp GeneratedFiles/Debug/moc_downloadpathbox.cpp GeneratedFiles/Debug/moc_emojibox.cpp GeneratedFiles/Debug/moc_languagebox.cpp GeneratedFiles/Debug/moc_passcodebox.cpp GeneratedFiles/Debug/moc_photocropbox.cpp GeneratedFiles/Debug/moc_photosendbox.cpp GeneratedFiles/Debug/moc_sessionsbox.cpp GeneratedFiles/Debug/moc_stickersetbox.cpp GeneratedFiles/Debug/moc_usernamebox.cpp GeneratedFiles/Debug/moc_intro.cpp GeneratedFiles/Debug/moc_introcode.cpp GeneratedFiles/Debug/moc_introphone.cpp GeneratedFiles/Debug/moc_intropwdcheck.cpp GeneratedFiles/Debug/moc_introsignup.cpp GeneratedFiles/Debug/moc_pspecific_mac.cpp compiler_moc_header_clean: @@ -105,7 +105,7 @@ compiler_moc_header_clean: GeneratedFiles/Debug/moc_apiwrap.cpp: SourceFiles/types.h \ SourceFiles/logs.h \ SourceFiles/apiwrap.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/apiwrap.h -o GeneratedFiles/Debug/moc_apiwrap.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/apiwrap.h -o GeneratedFiles/Debug/moc_apiwrap.cpp GeneratedFiles/Debug/moc_application.cpp: ../../Libraries/QtStatic/qtbase/include/QtNetwork/QLocalSocket \ ../../Libraries/QtStatic/qtbase/include/QtNetwork/QLocalServer \ @@ -128,7 +128,7 @@ GeneratedFiles/Debug/moc_application.cpp: ../../Libraries/QtStatic/qtbase/includ SourceFiles/pspecific_wnd.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/application.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/application.h -o GeneratedFiles/Debug/moc_application.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/application.h -o GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_audio.cpp: SourceFiles/types.h \ SourceFiles/audio.h \ @@ -136,7 +136,7 @@ GeneratedFiles/Debug/moc_audio.cpp: SourceFiles/types.h \ SourceFiles/logs.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/audio.h -o GeneratedFiles/Debug/moc_audio.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/audio.h -o GeneratedFiles/Debug/moc_audio.cpp GeneratedFiles/Debug/moc_autoupdater.cpp: SourceFiles/types.h \ SourceFiles/autoupdater.h \ @@ -144,22 +144,22 @@ GeneratedFiles/Debug/moc_autoupdater.cpp: SourceFiles/types.h \ SourceFiles/logs.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/autoupdater.h -o GeneratedFiles/Debug/moc_autoupdater.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/autoupdater.h -o GeneratedFiles/Debug/moc_autoupdater.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp: SourceFiles/dialogswidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/dialogswidget.h -o GeneratedFiles/Debug/moc_dialogswidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/dialogswidget.h -o GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp: SourceFiles/gui/twidget.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/dropdown.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/dropdown.h -o GeneratedFiles/Debug/moc_dropdown.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/dropdown.h -o GeneratedFiles/Debug/moc_dropdown.cpp GeneratedFiles/Debug/moc_fileuploader.cpp: SourceFiles/localimageloader.h \ SourceFiles/fileuploader.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/fileuploader.h -o GeneratedFiles/Debug/moc_fileuploader.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/fileuploader.h -o GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_history.cpp: SourceFiles/history.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/history.h -o GeneratedFiles/Debug/moc_history.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/history.h -o GeneratedFiles/Debug/moc_history.cpp GeneratedFiles/Debug/moc_historywidget.cpp: SourceFiles/localimageloader.h \ SourceFiles/gui/boxshadow.h \ @@ -167,32 +167,32 @@ GeneratedFiles/Debug/moc_historywidget.cpp: SourceFiles/localimageloader.h \ SourceFiles/gui/twidget.h \ SourceFiles/passcodewidget.h \ SourceFiles/historywidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/historywidget.h -o GeneratedFiles/Debug/moc_historywidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/historywidget.h -o GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp: SourceFiles/gui/boxshadow.h \ SourceFiles/layerwidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/layerwidget.h -o GeneratedFiles/Debug/moc_layerwidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/layerwidget.h -o GeneratedFiles/Debug/moc_layerwidget.cpp GeneratedFiles/Debug/moc_mediaview.cpp: SourceFiles/mediaview.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mediaview.h -o GeneratedFiles/Debug/moc_mediaview.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mediaview.h -o GeneratedFiles/Debug/moc_mediaview.cpp GeneratedFiles/Debug/moc_overviewwidget.cpp: SourceFiles/overviewwidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/overviewwidget.h -o GeneratedFiles/Debug/moc_overviewwidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/overviewwidget.h -o GeneratedFiles/Debug/moc_overviewwidget.cpp GeneratedFiles/Debug/moc_playerwidget.cpp: SourceFiles/playerwidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/playerwidget.h -o GeneratedFiles/Debug/moc_playerwidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/playerwidget.h -o GeneratedFiles/Debug/moc_playerwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp: SourceFiles/profilewidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/profilewidget.h -o GeneratedFiles/Debug/moc_profilewidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/profilewidget.h -o GeneratedFiles/Debug/moc_profilewidget.cpp GeneratedFiles/Debug/moc_passcodewidget.cpp: SourceFiles/passcodewidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/passcodewidget.h -o GeneratedFiles/Debug/moc_passcodewidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/passcodewidget.h -o GeneratedFiles/Debug/moc_passcodewidget.cpp GeneratedFiles/Debug/moc_localimageloader.cpp: SourceFiles/localimageloader.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/localimageloader.h -o GeneratedFiles/Debug/moc_localimageloader.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/localimageloader.h -o GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_localstorage.cpp: SourceFiles/localstorage.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/localstorage.h -o GeneratedFiles/Debug/moc_localstorage.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/localstorage.h -o GeneratedFiles/Debug/moc_localstorage.cpp GeneratedFiles/Debug/moc_mainwidget.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/flatbutton.h \ @@ -216,7 +216,7 @@ GeneratedFiles/Debug/moc_mainwidget.cpp: ../../Libraries/QtStatic/qtbase/include SourceFiles/overviewwidget.h \ SourceFiles/profilewidget.h \ SourceFiles/mainwidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mainwidget.h -o GeneratedFiles/Debug/moc_mainwidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mainwidget.h -o GeneratedFiles/Debug/moc_mainwidget.cpp GeneratedFiles/Debug/moc_settingswidget.cpp: SourceFiles/gui/flatbutton.h \ SourceFiles/gui/button.h \ @@ -234,7 +234,7 @@ GeneratedFiles/Debug/moc_settingswidget.cpp: SourceFiles/gui/flatbutton.h \ GeneratedFiles/style_auto.h \ SourceFiles/sysbuttons.h \ SourceFiles/settingswidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/settingswidget.h -o GeneratedFiles/Debug/moc_settingswidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/settingswidget.h -o GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/animation.h \ @@ -247,7 +247,7 @@ GeneratedFiles/Debug/moc_sysbuttons.cpp: ../../Libraries/QtStatic/qtbase/include SourceFiles/passcodewidget.h \ SourceFiles/gui/twidget.h \ SourceFiles/sysbuttons.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/sysbuttons.h -o GeneratedFiles/Debug/moc_sysbuttons.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/sysbuttons.h -o GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/sysbuttons.h \ @@ -260,14 +260,14 @@ GeneratedFiles/Debug/moc_title.cpp: ../../Libraries/QtStatic/qtbase/include/QtWi SourceFiles/gui/button.h \ SourceFiles/gui/twidget.h \ SourceFiles/title.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/title.h -o GeneratedFiles/Debug/moc_title.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/title.h -o GeneratedFiles/Debug/moc_title.cpp GeneratedFiles/Debug/moc_types.cpp: SourceFiles/types.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ SourceFiles/logs.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/types.h -o GeneratedFiles/Debug/moc_types.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/types.h -o GeneratedFiles/Debug/moc_types.cpp GeneratedFiles/Debug/moc_window.cpp: SourceFiles/title.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ @@ -288,7 +288,7 @@ GeneratedFiles/Debug/moc_window.cpp: SourceFiles/title.h \ SourceFiles/passcodewidget.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/window.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/window.h -o GeneratedFiles/Debug/moc_window.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/window.h -o GeneratedFiles/Debug/moc_window.cpp GeneratedFiles/Debug/moc_mtp.cpp: SourceFiles/mtproto/mtpSession.h \ SourceFiles/mtproto/mtpConnection.h \ @@ -304,7 +304,7 @@ GeneratedFiles/Debug/moc_mtp.cpp: SourceFiles/mtproto/mtpSession.h \ SourceFiles/mtproto/mtpFileLoader.h \ SourceFiles/mtproto/mtpSessionImpl.h \ SourceFiles/mtproto/mtp.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtp.h -o GeneratedFiles/Debug/moc_mtp.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtp.h -o GeneratedFiles/Debug/moc_mtp.cpp GeneratedFiles/Debug/moc_mtpConnection.cpp: SourceFiles/mtproto/mtpCoreTypes.h \ SourceFiles/types.h \ @@ -314,13 +314,13 @@ GeneratedFiles/Debug/moc_mtpConnection.cpp: SourceFiles/mtproto/mtpCoreTypes.h \ SourceFiles/mtproto/mtpPublicRSA.h \ SourceFiles/mtproto/mtpAuthKey.h \ SourceFiles/mtproto/mtpConnection.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpConnection.h -o GeneratedFiles/Debug/moc_mtpConnection.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpConnection.h -o GeneratedFiles/Debug/moc_mtpConnection.cpp GeneratedFiles/Debug/moc_mtpDC.cpp: SourceFiles/mtproto/mtpDC.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpDC.h -o GeneratedFiles/Debug/moc_mtpDC.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpDC.h -o GeneratedFiles/Debug/moc_mtpDC.cpp GeneratedFiles/Debug/moc_mtpFileLoader.cpp: SourceFiles/mtproto/mtpFileLoader.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpFileLoader.h -o GeneratedFiles/Debug/moc_mtpFileLoader.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpFileLoader.h -o GeneratedFiles/Debug/moc_mtpFileLoader.cpp GeneratedFiles/Debug/moc_mtpSession.cpp: SourceFiles/mtproto/mtpConnection.h \ SourceFiles/mtproto/mtpCoreTypes.h \ @@ -333,7 +333,7 @@ GeneratedFiles/Debug/moc_mtpSession.cpp: SourceFiles/mtproto/mtpConnection.h \ SourceFiles/mtproto/mtpDC.h \ SourceFiles/mtproto/mtpRPC.h \ SourceFiles/mtproto/mtpSession.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpSession.h -o GeneratedFiles/Debug/moc_mtpSession.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/mtpSession.h -o GeneratedFiles/Debug/moc_mtpSession.cpp GeneratedFiles/Debug/moc_animation.cpp: SourceFiles/types.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ @@ -341,16 +341,16 @@ GeneratedFiles/Debug/moc_animation.cpp: SourceFiles/types.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/gui/animation.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/animation.h -o GeneratedFiles/Debug/moc_animation.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/animation.h -o GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/twidget.h \ SourceFiles/gui/button.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/button.h -o GeneratedFiles/Debug/moc_button.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/button.h -o GeneratedFiles/Debug/moc_button.cpp GeneratedFiles/Debug/moc_contextmenu.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/contextmenu.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/contextmenu.h -o GeneratedFiles/Debug/moc_contextmenu.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/contextmenu.h -o GeneratedFiles/Debug/moc_contextmenu.cpp GeneratedFiles/Debug/moc_countrycodeinput.cpp: SourceFiles/gui/flatinput.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ @@ -364,7 +364,7 @@ GeneratedFiles/Debug/moc_countrycodeinput.cpp: SourceFiles/gui/flatinput.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/gui/countrycodeinput.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/countrycodeinput.h -o GeneratedFiles/Debug/moc_countrycodeinput.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/countrycodeinput.h -o GeneratedFiles/Debug/moc_countrycodeinput.cpp GeneratedFiles/Debug/moc_countryinput.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/style.h \ @@ -386,7 +386,7 @@ GeneratedFiles/Debug/moc_countryinput.cpp: ../../Libraries/QtStatic/qtbase/inclu SourceFiles/gui/flatcheckbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/gui/countryinput.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/countryinput.h -o GeneratedFiles/Debug/moc_countryinput.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/countryinput.h -o GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp: SourceFiles/gui/button.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ @@ -402,13 +402,13 @@ GeneratedFiles/Debug/moc_flatbutton.cpp: SourceFiles/gui/button.h \ GeneratedFiles/style_classes.h \ GeneratedFiles/style_auto.h \ SourceFiles/gui/flatbutton.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatbutton.h -o GeneratedFiles/Debug/moc_flatbutton.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatbutton.h -o GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp: SourceFiles/gui/button.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/twidget.h \ SourceFiles/gui/flatcheckbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatcheckbox.h -o GeneratedFiles/Debug/moc_flatcheckbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatcheckbox.h -o GeneratedFiles/Debug/moc_flatcheckbox.cpp GeneratedFiles/Debug/moc_flatinput.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ SourceFiles/style.h \ @@ -421,13 +421,13 @@ GeneratedFiles/Debug/moc_flatinput.cpp: ../../Libraries/QtStatic/qtbase/include/ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/gui/flatinput.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatinput.h -o GeneratedFiles/Debug/moc_flatinput.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatinput.h -o GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp: SourceFiles/style.h \ GeneratedFiles/style_classes.h \ GeneratedFiles/style_auto.h \ SourceFiles/gui/flatlabel.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatlabel.h -o GeneratedFiles/Debug/moc_flatlabel.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flatlabel.h -o GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QTextEdit \ SourceFiles/style.h \ @@ -440,7 +440,7 @@ GeneratedFiles/Debug/moc_flattextarea.cpp: ../../Libraries/QtStatic/qtbase/inclu ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/gui/flattextarea.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flattextarea.h -o GeneratedFiles/Debug/moc_flattextarea.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flattextarea.h -o GeneratedFiles/Debug/moc_flattextarea.cpp GeneratedFiles/Debug/moc_switcher.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/twidget.h \ @@ -454,7 +454,7 @@ GeneratedFiles/Debug/moc_switcher.cpp: ../../Libraries/QtStatic/qtbase/include/Q ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/gui/switcher.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/switcher.h -o GeneratedFiles/Debug/moc_switcher.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/switcher.h -o GeneratedFiles/Debug/moc_switcher.cpp GeneratedFiles/Debug/moc_phoneinput.cpp: SourceFiles/gui/flatinput.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ @@ -468,47 +468,47 @@ GeneratedFiles/Debug/moc_phoneinput.cpp: SourceFiles/gui/flatinput.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/gui/phoneinput.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/phoneinput.h -o GeneratedFiles/Debug/moc_phoneinput.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/phoneinput.h -o GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QScrollArea \ SourceFiles/style.h \ GeneratedFiles/style_classes.h \ GeneratedFiles/style_auto.h \ SourceFiles/gui/scrollarea.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/scrollarea.h -o GeneratedFiles/Debug/moc_scrollarea.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/scrollarea.h -o GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp: SourceFiles/gui/twidget.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/twidget.h -o GeneratedFiles/Debug/moc_twidget.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/twidget.h -o GeneratedFiles/Debug/moc_twidget.cpp GeneratedFiles/Debug/moc_aboutbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/aboutbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/aboutbox.h -o GeneratedFiles/Debug/moc_aboutbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/aboutbox.h -o GeneratedFiles/Debug/moc_aboutbox.cpp GeneratedFiles/Debug/moc_abstractbox.cpp: SourceFiles/layerwidget.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/abstractbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/abstractbox.h -o GeneratedFiles/Debug/moc_abstractbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/abstractbox.h -o GeneratedFiles/Debug/moc_abstractbox.cpp GeneratedFiles/Debug/moc_addcontactbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/addcontactbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/addcontactbox.h -o GeneratedFiles/Debug/moc_addcontactbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/addcontactbox.h -o GeneratedFiles/Debug/moc_addcontactbox.cpp GeneratedFiles/Debug/moc_autolockbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/autolockbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/autolockbox.h -o GeneratedFiles/Debug/moc_autolockbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/autolockbox.h -o GeneratedFiles/Debug/moc_autolockbox.cpp GeneratedFiles/Debug/moc_backgroundbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/backgroundbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/backgroundbox.h -o GeneratedFiles/Debug/moc_backgroundbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/backgroundbox.h -o GeneratedFiles/Debug/moc_backgroundbox.cpp GeneratedFiles/Debug/moc_confirmbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/confirmbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/confirmbox.h -o GeneratedFiles/Debug/moc_confirmbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/confirmbox.h -o GeneratedFiles/Debug/moc_confirmbox.cpp GeneratedFiles/Debug/moc_connectionbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ @@ -525,12 +525,12 @@ GeneratedFiles/Debug/moc_connectionbox.cpp: SourceFiles/boxes/abstractbox.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/boxes/connectionbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/connectionbox.h -o GeneratedFiles/Debug/moc_connectionbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/connectionbox.h -o GeneratedFiles/Debug/moc_connectionbox.cpp GeneratedFiles/Debug/moc_contactsbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/contactsbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/contactsbox.h -o GeneratedFiles/Debug/moc_contactsbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/contactsbox.h -o GeneratedFiles/Debug/moc_contactsbox.cpp GeneratedFiles/Debug/moc_downloadpathbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ @@ -547,50 +547,50 @@ GeneratedFiles/Debug/moc_downloadpathbox.cpp: SourceFiles/boxes/abstractbox.h \ ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ SourceFiles/boxes/downloadpathbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/downloadpathbox.h -o GeneratedFiles/Debug/moc_downloadpathbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/downloadpathbox.h -o GeneratedFiles/Debug/moc_downloadpathbox.cpp GeneratedFiles/Debug/moc_emojibox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/emojibox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/emojibox.h -o GeneratedFiles/Debug/moc_emojibox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/emojibox.h -o GeneratedFiles/Debug/moc_emojibox.cpp GeneratedFiles/Debug/moc_languagebox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/languagebox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/languagebox.h -o GeneratedFiles/Debug/moc_languagebox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/languagebox.h -o GeneratedFiles/Debug/moc_languagebox.cpp GeneratedFiles/Debug/moc_passcodebox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/passcodebox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/passcodebox.h -o GeneratedFiles/Debug/moc_passcodebox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/passcodebox.h -o GeneratedFiles/Debug/moc_passcodebox.cpp GeneratedFiles/Debug/moc_photocropbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/photocropbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/photocropbox.h -o GeneratedFiles/Debug/moc_photocropbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/photocropbox.h -o GeneratedFiles/Debug/moc_photocropbox.cpp GeneratedFiles/Debug/moc_photosendbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/localimageloader.h \ SourceFiles/boxes/photosendbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/photosendbox.h -o GeneratedFiles/Debug/moc_photosendbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/photosendbox.h -o GeneratedFiles/Debug/moc_photosendbox.cpp GeneratedFiles/Debug/moc_sessionsbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/localimageloader.h \ SourceFiles/boxes/sessionsbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/sessionsbox.h -o GeneratedFiles/Debug/moc_sessionsbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/sessionsbox.h -o GeneratedFiles/Debug/moc_sessionsbox.cpp GeneratedFiles/Debug/moc_stickersetbox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/localimageloader.h \ SourceFiles/boxes/stickersetbox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/stickersetbox.h -o GeneratedFiles/Debug/moc_stickersetbox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/stickersetbox.h -o GeneratedFiles/Debug/moc_stickersetbox.cpp GeneratedFiles/Debug/moc_usernamebox.cpp: SourceFiles/boxes/abstractbox.h \ SourceFiles/gui/boxshadow.h \ SourceFiles/boxes/usernamebox.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/usernamebox.h -o GeneratedFiles/Debug/moc_usernamebox.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/boxes/usernamebox.h -o GeneratedFiles/Debug/moc_usernamebox.cpp GeneratedFiles/Debug/moc_intro.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/flatbutton.h \ @@ -607,7 +607,7 @@ GeneratedFiles/Debug/moc_intro.cpp: ../../Libraries/QtStatic/qtbase/include/QtWi GeneratedFiles/style_classes.h \ GeneratedFiles/style_auto.h \ SourceFiles/intro/intro.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/intro.h -o GeneratedFiles/Debug/moc_intro.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/intro.h -o GeneratedFiles/Debug/moc_intro.cpp GeneratedFiles/Debug/moc_introcode.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/flatbutton.h \ @@ -627,7 +627,7 @@ GeneratedFiles/Debug/moc_introcode.cpp: ../../Libraries/QtStatic/qtbase/include/ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ SourceFiles/intro/intro.h \ SourceFiles/intro/introcode.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/introcode.h -o GeneratedFiles/Debug/moc_introcode.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/introcode.h -o GeneratedFiles/Debug/moc_introcode.cpp GeneratedFiles/Debug/moc_introphone.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/flatbutton.h \ @@ -653,7 +653,7 @@ GeneratedFiles/Debug/moc_introphone.cpp: ../../Libraries/QtStatic/qtbase/include SourceFiles/gui/boxshadow.h \ SourceFiles/intro/intro.h \ SourceFiles/intro/introphone.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/introphone.h -o GeneratedFiles/Debug/moc_introphone.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/introphone.h -o GeneratedFiles/Debug/moc_introphone.cpp GeneratedFiles/Debug/moc_intropwdcheck.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/flatbutton.h \ @@ -679,7 +679,7 @@ GeneratedFiles/Debug/moc_intropwdcheck.cpp: ../../Libraries/QtStatic/qtbase/incl SourceFiles/gui/boxshadow.h \ SourceFiles/intro/intro.h \ SourceFiles/intro/intropwdcheck.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/intropwdcheck.h -o GeneratedFiles/Debug/moc_intropwdcheck.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/intropwdcheck.h -o GeneratedFiles/Debug/moc_intropwdcheck.cpp GeneratedFiles/Debug/moc_introsignup.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ SourceFiles/gui/flatbutton.h \ @@ -699,10 +699,10 @@ GeneratedFiles/Debug/moc_introsignup.cpp: ../../Libraries/QtStatic/qtbase/includ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ SourceFiles/intro/intro.h \ SourceFiles/intro/introsignup.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/introsignup.h -o GeneratedFiles/Debug/moc_introsignup.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/intro/introsignup.h -o GeneratedFiles/Debug/moc_introsignup.cpp GeneratedFiles/Debug/moc_pspecific_mac.cpp: SourceFiles/pspecific_mac.h - /usr/local/Qt-5.4.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.4.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.4.0/include/QtGui/5.4.0/QtGui -I/usr/local/Qt-5.4.0/include/QtCore/5.4.0/QtCore -I/usr/local/Qt-5.4.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.4.0/include -I/usr/local/Qt-5.4.0/include/QtMultimedia -I/usr/local/Qt-5.4.0/include/QtWidgets -I/usr/local/Qt-5.4.0/include/QtNetwork -I/usr/local/Qt-5.4.0/include/QtGui -I/usr/local/Qt-5.4.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/pspecific_mac.h -o GeneratedFiles/Debug/moc_pspecific_mac.cpp + /usr/local/Qt-5.5.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.0/include/QtGui/5.5.0/QtGui -I/usr/local/Qt-5.5.0/include/QtCore/5.5.0/QtCore -I/usr/local/Qt-5.5.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.0/include -I/usr/local/Qt-5.5.0/include/QtMultimedia -I/usr/local/Qt-5.5.0/include/QtWidgets -I/usr/local/Qt-5.5.0/include/QtNetwork -I/usr/local/Qt-5.5.0/include/QtGui -I/usr/local/Qt-5.5.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/pspecific_mac.h -o GeneratedFiles/Debug/moc_pspecific_mac.cpp compiler_moc_source_make_all: compiler_moc_source_clean: From db78095c7958b42f2ee0023ad815ed13c777325b Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 30 Jul 2015 12:47:12 +0200 Subject: [PATCH 063/121] 0.8.43 stable version (equal to 0.8.42.dev) --- Telegram/PrepareWin.bat | 10 +++++----- Telegram/SourceFiles/config.h | 6 +++--- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 ++++++------ Telegram/Version.sh | 2 +- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index 793a4a948..04bd71215 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,11 +1,11 @@ @echo OFF set "AppVersionStrMajor=0.8" -set "AppVersion=8042" -set "AppVersionStrSmall=0.8.42" -set "AppVersionStr=0.8.42" -set "AppVersionStrFull=0.8.42.0" -set "DevChannel=1" +set "AppVersion=8043" +set "AppVersionStrSmall=0.8.43" +set "AppVersionStr=0.8.43" +set "AppVersionStrFull=0.8.43.0" +set "DevChannel=0" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 5215beaf0..e4f6476b7 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,9 +17,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8042; -static const wchar_t *AppVersionStr = L"0.8.42"; -static const bool DevVersion = true; +static const int32 AppVersion = 8043; +static const wchar_t *AppVersionStr = L"0.8.43"; +static const bool DevVersion = false; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index 72088f0df..e13565542 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.42 + 0.8.43 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index 03fbda89e5b4e9378d4b8d93dc94a6e83a6de0cc..e61aa8e03cf8c5391d3f7fcddd28faae10c2faa5 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_h Date: Fri, 31 Jul 2015 13:32:33 +0300 Subject: [PATCH 064/121] fixed bug in dev -> stable update, version 0.8.42.dev --- Telegram/PrepareWin.bat | 10 +++++----- Telegram/SourceFiles/config.h | 6 +++--- Telegram/SourceFiles/main.cpp | 4 ++-- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 ++++++------ Telegram/Version.sh | 2 +- 7 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index 04bd71215..793a4a948 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,11 +1,11 @@ @echo OFF set "AppVersionStrMajor=0.8" -set "AppVersion=8043" -set "AppVersionStrSmall=0.8.43" -set "AppVersionStr=0.8.43" -set "AppVersionStrFull=0.8.43.0" -set "DevChannel=0" +set "AppVersion=8042" +set "AppVersionStrSmall=0.8.42" +set "AppVersionStr=0.8.42" +set "AppVersionStrFull=0.8.42.0" +set "DevChannel=1" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index e4f6476b7..5215beaf0 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,9 +17,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8043; -static const wchar_t *AppVersionStr = L"0.8.43"; -static const bool DevVersion = false; +static const int32 AppVersion = 8042; +static const wchar_t *AppVersionStr = L"0.8.42"; +static const bool DevVersion = true; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; diff --git a/Telegram/SourceFiles/main.cpp b/Telegram/SourceFiles/main.cpp index c1034ca0e..e282a889b 100644 --- a/Telegram/SourceFiles/main.cpp +++ b/Telegram/SourceFiles/main.cpp @@ -80,8 +80,8 @@ int main(int argc, char *argv[]) { if (cRestartingUpdate()) { if (DevVersion) { - LOG(("Writing 'withdebug' file before launching the Updater!")); - QFile f(cWorkingDir() + qsl("tdata/withdebug")); + LOG(("Writing 'devversion' file before launching the Updater!")); + QFile f(cWorkingDir() + qsl("tdata/devversion")); if (!f.exists() && f.open(QIODevice::WriteOnly)) { f.write("1"); f.close(); diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index e13565542..72088f0df 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.43 + 0.8.42 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index e61aa8e03cf8c5391d3f7fcddd28faae10c2faa5..03fbda89e5b4e9378d4b8d93dc94a6e83a6de0cc 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_B Date: Fri, 31 Jul 2015 14:04:08 +0300 Subject: [PATCH 065/121] version 0.8.43 stable --- Telegram/PrepareWin.bat | 10 +++++----- Telegram/SourceFiles/config.h | 6 +++--- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 ++++++------ Telegram/Version.sh | 2 +- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index 793a4a948..04bd71215 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,11 +1,11 @@ @echo OFF set "AppVersionStrMajor=0.8" -set "AppVersion=8042" -set "AppVersionStrSmall=0.8.42" -set "AppVersionStr=0.8.42" -set "AppVersionStrFull=0.8.42.0" -set "DevChannel=1" +set "AppVersion=8043" +set "AppVersionStrSmall=0.8.43" +set "AppVersionStr=0.8.43" +set "AppVersionStrFull=0.8.43.0" +set "DevChannel=0" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 5215beaf0..e4f6476b7 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,9 +17,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8042; -static const wchar_t *AppVersionStr = L"0.8.42"; -static const bool DevVersion = true; +static const int32 AppVersion = 8043; +static const wchar_t *AppVersionStr = L"0.8.43"; +static const bool DevVersion = false; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index 72088f0df..e13565542 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.42 + 0.8.43 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index 03fbda89e5b4e9378d4b8d93dc94a6e83a6de0cc..e61aa8e03cf8c5391d3f7fcddd28faae10c2faa5 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_h Date: Fri, 31 Jul 2015 14:11:23 +0300 Subject: [PATCH 066/121] PrepareMac fixed --- Telegram/PrepareMac.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Telegram/PrepareMac.sh b/Telegram/PrepareMac.sh index 97ab64414..584bd442e 100755 --- a/Telegram/PrepareMac.sh +++ b/Telegram/PrepareMac.sh @@ -23,7 +23,7 @@ if [ -d "./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr" ]; then exit 1 fi -if [ -f "./../Mac/Release/tupdate$AppVersion" ]; then +if [ -f "./../Mac/Release/tmacupd$AppVersion" ]; then echo "Update file for version $AppVersion already exists!" exit 1 fi From c735b6655d843352d64684cd4d0c1342a101c414 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 31 Jul 2015 16:43:18 +0300 Subject: [PATCH 067/121] fixed autoupdater, 0.8.42.dev version --- Telegram/PrepareWin.bat | 10 +++++----- Telegram/SourceFiles/autoupdater.cpp | 2 +- Telegram/SourceFiles/config.h | 6 +++--- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 ++++++------ Telegram/Version.sh | 2 +- 7 files changed, 17 insertions(+), 17 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index 04bd71215..793a4a948 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,11 +1,11 @@ @echo OFF set "AppVersionStrMajor=0.8" -set "AppVersion=8043" -set "AppVersionStrSmall=0.8.43" -set "AppVersionStr=0.8.43" -set "AppVersionStrFull=0.8.43.0" -set "DevChannel=0" +set "AppVersion=8042" +set "AppVersionStrSmall=0.8.42" +set "AppVersionStr=0.8.42" +set "AppVersionStrFull=0.8.42.0" +set "DevChannel=1" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/SourceFiles/autoupdater.cpp b/Telegram/SourceFiles/autoupdater.cpp index ee6658e17..2d4771ce2 100644 --- a/Telegram/SourceFiles/autoupdater.cpp +++ b/Telegram/SourceFiles/autoupdater.cpp @@ -264,7 +264,7 @@ void UpdateDownloader::unpackUpdate() { if (RSA_verify(NID_sha1, (const uchar*)(compressed.constData() + hSigLen), hShaLen, (const uchar*)(compressed.constData()), hSigLen, pbKey) != 1) { // verify signature RSA_free(pbKey); if (cDevVersion()) { // try other public key, if we are in dev version - RSA *pbKey = PEM_read_bio_RSAPublicKey(BIO_new_mem_buf(const_cast(DevVersion ? UpdatesPublicKey : UpdatesPublicDevKey), -1), 0, 0, 0); + pbKey = PEM_read_bio_RSAPublicKey(BIO_new_mem_buf(const_cast(DevVersion ? UpdatesPublicKey : UpdatesPublicDevKey), -1), 0, 0, 0); if (!pbKey) { LOG(("Update Error: cant read public rsa key!")); return fatalFail(); diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index e4f6476b7..5215beaf0 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,9 +17,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8043; -static const wchar_t *AppVersionStr = L"0.8.43"; -static const bool DevVersion = false; +static const int32 AppVersion = 8042; +static const wchar_t *AppVersionStr = L"0.8.42"; +static const bool DevVersion = true; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index e13565542..72088f0df 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.43 + 0.8.42 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index e61aa8e03cf8c5391d3f7fcddd28faae10c2faa5..03fbda89e5b4e9378d4b8d93dc94a6e83a6de0cc 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_B Date: Fri, 31 Jul 2015 17:18:40 +0300 Subject: [PATCH 068/121] version 0.8.43 stable --- Telegram/PrepareWin.bat | 10 +++++----- Telegram/SourceFiles/config.h | 6 +++--- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 ++++++------ Telegram/Version.sh | 2 +- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index 793a4a948..04bd71215 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,11 +1,11 @@ @echo OFF set "AppVersionStrMajor=0.8" -set "AppVersion=8042" -set "AppVersionStrSmall=0.8.42" -set "AppVersionStr=0.8.42" -set "AppVersionStrFull=0.8.42.0" -set "DevChannel=1" +set "AppVersion=8043" +set "AppVersionStrSmall=0.8.43" +set "AppVersionStr=0.8.43" +set "AppVersionStrFull=0.8.43.0" +set "DevChannel=0" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 5215beaf0..e4f6476b7 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,9 +17,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8042; -static const wchar_t *AppVersionStr = L"0.8.42"; -static const bool DevVersion = true; +static const int32 AppVersion = 8043; +static const wchar_t *AppVersionStr = L"0.8.43"; +static const bool DevVersion = false; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index 72088f0df..e13565542 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.42 + 0.8.43 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index 03fbda89e5b4e9378d4b8d93dc94a6e83a6de0cc..e61aa8e03cf8c5391d3f7fcddd28faae10c2faa5 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_h Date: Fri, 31 Jul 2015 17:26:37 +0300 Subject: [PATCH 069/121] added mac32 version for deploy --- Telegram/DeployMacWin.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Telegram/DeployMacWin.sh b/Telegram/DeployMacWin.sh index 4f537beff..87a01cf0d 100755 --- a/Telegram/DeployMacWin.sh +++ b/Telegram/DeployMacWin.sh @@ -17,6 +17,16 @@ if [ ! -f "./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix exit 1 fi +if [ ! -f "./../../tother/tmac32/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tmac32upd$AppVersion" ]; then + echo "tmac32upd$AppVersion not found!" + exit 1 +fi + +if [ ! -f "./../../tother/tmac32/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup32.$AppVersionStr$DevPostfix.dmg" ]; then + echo "tsetup32.$AppVersionStr$DevPostfix.dmg not found!" + exit 1 +fi + if [ ! -f "./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tupdate$AppVersion" ]; then echo "tupdate$AppVersion not found!" exit 1 @@ -38,6 +48,8 @@ fi scp ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tmacupd$AppVersion tmaster:tdesktop/www/tmac/ scp ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.dmg tmaster:tdesktop/www/tmac/ +scp ./../../tother/tmac32/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tmac32upd$AppVersion tmaster:tdesktop/www/tmac32/ +scp ./../../tother/tmac32/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup32.$AppVersionStr$DevPostfix.dmg tmaster:tdesktop/www/tmac32/ scp ./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tupdate$AppVersion tmaster:tdesktop/www/tsetup/ scp ./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tportable.$AppVersionStr$DevPostfix.zip tmaster:tdesktop/www/tsetup/ scp ./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.exe tmaster:tdesktop/www/tsetup/ From 86325e889f0d76deae2396a5e32ba5979c5fb95c Mon Sep 17 00:00:00 2001 From: John Preston Date: Sat, 1 Aug 2015 11:33:00 +0300 Subject: [PATCH 070/121] 0.8.44 dev version - media typings support --- Telegram/PrepareWin.bat | 10 +- Telegram/Resources/lang.strings | 16 +++ Telegram/SourceFiles/application.cpp | 4 +- Telegram/SourceFiles/config.h | 6 +- Telegram/SourceFiles/fileuploader.cpp | 1 + Telegram/SourceFiles/history.cpp | 63 +++++++++-- Telegram/SourceFiles/history.h | 25 ++++- Telegram/SourceFiles/historywidget.cpp | 113 +++++++++++++++----- Telegram/SourceFiles/historywidget.h | 16 +-- Telegram/SourceFiles/mainwidget.cpp | 8 +- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 +-- Telegram/Version.sh | 2 +- 14 files changed, 212 insertions(+), 66 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index 04bd71215..696e34b23 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,11 +1,11 @@ @echo OFF set "AppVersionStrMajor=0.8" -set "AppVersion=8043" -set "AppVersionStrSmall=0.8.43" -set "AppVersionStr=0.8.43" -set "AppVersionStrFull=0.8.43.0" -set "DevChannel=0" +set "AppVersion=8044" +set "AppVersionStrSmall=0.8.44" +set "AppVersionStr=0.8.44" +set "AppVersionStrFull=0.8.44.0" +set "DevChannel=1" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/Resources/lang.strings b/Telegram/Resources/lang.strings index 2a1e9f8fc..0d30dce6d 100644 --- a/Telegram/Resources/lang.strings +++ b/Telegram/Resources/lang.strings @@ -478,6 +478,22 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_user_typing" = "{user} is typing"; "lng_users_typing" = "{user} and {second_user} are typing"; "lng_many_typing" = "{count:_not_used_|# is|# are} typing"; +"lng_send_action_record_video" = "recording video"; +"lng_user_action_record_video" = "{user} is recording video"; +"lng_send_action_upload_video" = "sending video"; +"lng_user_action_upload_video" = "{user} is sending video"; +"lng_send_action_record_audio" = "recording audio"; +"lng_user_action_record_audio" = "{user} is recording audio"; +"lng_send_action_upload_audio" = "sending audio"; +"lng_user_action_upload_audio" = "{user} is sending audio"; +"lng_send_action_upload_photo" = "sending photo"; +"lng_user_action_upload_photo" = "{user} is sending photo"; +"lng_send_action_upload_file" = "sending file"; +"lng_user_action_upload_file" = "{user} is sending file"; +"lng_send_action_geo_location" = "choosing location"; +"lng_user_action_geo_location" = "{user} is choosing location"; +"lng_send_action_choose_contact" = "choosing contact"; +"lng_user_action_choose_contact" = "{user} is choosing contact"; "lng_unread_bar" = "{count:_not_used_|# unread message|# unread messages}"; "lng_maps_point" = "Location"; diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index 517b29afd..8f14416b8 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -658,8 +658,8 @@ void Application::checkMapVersion() { psRegisterCustomScheme(); if (Local::oldMapVersion()) { QString versionFeatures; - if (cDevVersion() && Local::oldMapVersion() < 8042) { - versionFeatures = QString::fromUtf8("\xe2\x80\x94 Dev version will now get updated to stable as well");// .replace('@', qsl("@") + QChar(0x200D)); + if (cDevVersion() && Local::oldMapVersion() < 8044) { + versionFeatures = QString::fromUtf8("\xe2\x80\x94 Sending media and recording audio status display");// .replace('@', qsl("@") + QChar(0x200D)); } else if (!cDevVersion() && Local::oldMapVersion() < 8043) { versionFeatures = lang(lng_new_version_minor).trimmed(); } diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index e4f6476b7..740f3b96e 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,9 +17,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8043; -static const wchar_t *AppVersionStr = L"0.8.43"; -static const bool DevVersion = false; +static const int32 AppVersion = 8044; +static const wchar_t *AppVersionStr = L"0.8.44"; +static const bool DevVersion = true; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; diff --git a/Telegram/SourceFiles/fileuploader.cpp b/Telegram/SourceFiles/fileuploader.cpp index 82813f5ab..45d198085 100644 --- a/Telegram/SourceFiles/fileuploader.cpp +++ b/Telegram/SourceFiles/fileuploader.cpp @@ -273,6 +273,7 @@ void FileUploader::partLoaded(const MTPBool &result, mtpRequestId requestId) { audio->uploadOffset = audio->size; } } + emit audioProgress(k.key()); } } } diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 2a7e70c4c..1d9e7a74f 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -167,7 +167,7 @@ void DialogRow::paint(QPainter &p, int32 w, bool act, bool sel) const { if (!last) { p.setFont(st::dlgHistFont->f); p.setPen((act ? st::dlgActiveColor : st::dlgSystemColor)->p); - if (history->typing.isEmpty()) { + if (history->typing.isEmpty() && history->sendActions.isEmpty()) { p.drawText(nameleft, st::dlgPaddingVer + st::dlgFont->height + st::dlgFont->ascent + st::dlgSep, lang(lng_empty_history)); } else { history->typingText.drawElided(p, nameleft, st::dlgPaddingVer + st::dlgFont->height + st::dlgSep, namewidth); @@ -223,7 +223,7 @@ void DialogRow::paint(QPainter &p, int32 w, bool act, bool sel) const { p.setPen((act ? st::dlgActiveUnreadColor : st::dlgUnreadColor)->p); p.drawText(unreadRectLeft + st::dlgUnreadPaddingHor, unreadRectTop + st::dlgUnreadPaddingVer + st::dlgUnreadFont->ascent, unreadStr); } - if (history->typing.isEmpty()) { + if (history->typing.isEmpty() && history->sendActions.isEmpty()) { last->drawInDialog(p, QRect(nameleft, st::dlgPaddingVer + st::dlgFont->height + st::dlgSep, lastWidth, st::dlgFont->height), act, history->textCachedFor, history->lastItemTextCache); } else { p.setPen((act ? st::dlgActiveColor : st::dlgSystemColor)->p); @@ -319,7 +319,6 @@ History::History(const PeerId &peerId) : width(0), height(0) , lastItemTextCache(st::dlgRichMinWidth) , posInDialogs(0) , typingText(st::dlgRichMinWidth) -, myTyping(0) { for (int32 i = 0; i < OverviewCount; ++i) { _overviewCount[i] = -1; // not loaded yet @@ -347,6 +346,14 @@ bool History::updateTyping(uint64 ms, uint32 dots, bool force) { ++i; } } + for (SendActionUsers::iterator i = sendActions.begin(), e = sendActions.end(); i != e;) { + if (ms >= i.value().until) { + i = sendActions.erase(i); + changed = true; + } else { + ++i; + } + } if (changed) { QString newTypingStr; int32 cnt = typing.size(); @@ -356,6 +363,17 @@ bool History::updateTyping(uint64 ms, uint32 dots, bool force) { newTypingStr = lng_users_typing(lt_user, typing.begin().key()->firstName, lt_second_user, (typing.end() - 1).key()->firstName); } else if (cnt) { newTypingStr = peer->chat ? lng_user_typing(lt_user, typing.begin().key()->firstName) : lang(lng_typing); + } else if (!sendActions.isEmpty()) { + switch (sendActions.begin().value().type) { + case SendActionRecordVideo: newTypingStr = peer->chat ? lng_user_action_record_video(lt_user, sendActions.begin().key()->firstName) : lang(lng_send_action_record_video); break; + case SendActionUploadVideo: newTypingStr = peer->chat ? lng_user_action_upload_video(lt_user, sendActions.begin().key()->firstName) : lang(lng_send_action_upload_video); break; + case SendActionRecordAudio: newTypingStr = peer->chat ? lng_user_action_record_audio(lt_user, sendActions.begin().key()->firstName) : lang(lng_send_action_record_audio); break; + case SendActionUploadAudio: newTypingStr = peer->chat ? lng_user_action_upload_audio(lt_user, sendActions.begin().key()->firstName) : lang(lng_send_action_upload_audio); break; + case SendActionUploadPhoto: newTypingStr = peer->chat ? lng_user_action_upload_photo(lt_user, sendActions.begin().key()->firstName) : lang(lng_send_action_upload_photo); break; + case SendActionUploadFile: newTypingStr = peer->chat ? lng_user_action_upload_file(lt_user, sendActions.begin().key()->firstName) : lang(lng_send_action_upload_file); break; + case SendActionChooseLocation: newTypingStr = peer->chat ? lng_user_action_geo_location(lt_user, sendActions.begin().key()->firstName) : lang(lng_send_action_geo_location); break; + case SendActionChooseContact: newTypingStr = peer->chat ? lng_user_action_choose_contact(lt_user, sendActions.begin().key()->firstName) : lang(lng_send_action_choose_contact); break; + } } if (!newTypingStr.isEmpty()) { newTypingStr += qsl("..."); @@ -506,9 +524,25 @@ void Histories::clear() { Parent::clear(); } -void Histories::regTyping(History *history, UserData *user) { +void Histories::regSendAction(History *history, UserData *user, const MTPSendMessageAction &action) { + if (action.type() == mtpc_sendMessageCancelAction) { + history->unregTyping(user); + return; + } + uint64 ms = getms(true); - history->typing[user] = ms + 6000; + switch (action.type()) { + case mtpc_sendMessageTypingAction: history->typing[user] = ms + 6000; break; + case mtpc_sendMessageRecordVideoAction: history->sendActions.insert(user, SendAction(SendActionRecordVideo, ms + 6000)); break; + case mtpc_sendMessageUploadVideoAction: history->sendActions.insert(user, SendAction(SendActionUploadVideo, ms + 6000, action.c_sendMessageUploadVideoAction().vprogress.v)); break; + case mtpc_sendMessageRecordAudioAction: history->sendActions.insert(user, SendAction(SendActionRecordAudio, ms + 6000)); break; + case mtpc_sendMessageUploadAudioAction: history->sendActions.insert(user, SendAction(SendActionUploadAudio, ms + 6000, action.c_sendMessageUploadAudioAction().vprogress.v)); break; + case mtpc_sendMessageUploadPhotoAction: history->sendActions.insert(user, SendAction(SendActionUploadPhoto, ms + 6000, action.c_sendMessageUploadPhotoAction().vprogress.v)); break; + case mtpc_sendMessageUploadDocumentAction: history->sendActions.insert(user, SendAction(SendActionUploadFile, ms + 6000, action.c_sendMessageUploadDocumentAction().vprogress.v)); break; + case mtpc_sendMessageGeoLocationAction: history->sendActions.insert(user, SendAction(SendActionChooseLocation, ms + 6000)); break; + case mtpc_sendMessageChooseContactAction: history->sendActions.insert(user, SendAction(SendActionChooseContact, ms + 6000)); break; + default: return; + } user->madeAction(); @@ -530,7 +564,7 @@ bool Histories::animStep(float64) { App::main()->dlgUpdated(i.key()); App::main()->topBar()->update(); } - if (i.key()->typing.isEmpty()) { + if (i.key()->typing.isEmpty() && i.key()->sendActions.isEmpty()) { i = typing.erase(i); } else { ++i; @@ -943,11 +977,22 @@ HistoryItem *History::doAddToBack(HistoryBlock *to, bool newBlock, HistoryItem * } void History::unregTyping(UserData *from) { + bool update = false; + uint64 updateAtMs = 0; TypingUsers::iterator i = typing.find(from); if (i != typing.end()) { - uint64 ms = getms(true); - i.value() = ms; - updateTyping(ms, 0, true); + updateAtMs = getms(true); + i.value() = updateAtMs; + update = true; + } + SendActionUsers::iterator j = sendActions.find(from); + if (j != sendActions.end()) { + if (!updateAtMs) updateAtMs = getms(true); + j.value().until = updateAtMs; + update = true; + } + if (updateAtMs) { + updateTyping(updateAtMs, 0, true); App::main()->topBar()->update(); } } diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index 0c92dcc6f..9e4a0810f 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -41,7 +41,7 @@ struct Histories : public QHash, public Animated { Histories() : unreadFull(0), unreadMuted(0) { } - void regTyping(History *history, UserData *user); + void regSendAction(History *history, UserData *user, const MTPSendMessageAction &action); bool animStep(float64 ms); void clear(); @@ -134,6 +134,25 @@ inline MTPMessagesFilter typeToMediaFilter(MediaOverviewType &type) { return MTPMessagesFilter(); } +enum SendActionType { + SendActionTyping, + SendActionRecordVideo, + SendActionUploadVideo, + SendActionRecordAudio, + SendActionUploadAudio, + SendActionUploadPhoto, + SendActionUploadFile, + SendActionChooseLocation, + SendActionChooseContact, +}; +struct SendAction { + SendAction(SendActionType type, uint64 until, int32 progress = 0) : type(type), until(until), progress(progress) { + } + SendActionType type; + uint64 until; + int32 progress; +}; + class HistoryMedia; class HistoryMessage; class HistoryUnreadBar; @@ -273,11 +292,13 @@ struct History : public QList { typedef QMap TypingUsers; TypingUsers typing; + typedef QMap SendActionUsers; + SendActionUsers sendActions; QString typingStr; Text typingText; uint32 typingFrame; bool updateTyping(uint64 ms = 0, uint32 dots = 0, bool force = false); - uint64 myTyping; + QMap mySendActions; typedef QList MediaOverview; typedef QMap MediaOverviewIds; diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index ec14a0d7e..35c3f18a9 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -2233,7 +2233,6 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) , _titlePeerTextWidth(0) , _showAnim(animFunc(this, &HistoryWidget::showStep)) , _scrollDelta(0) -, _typingRequest(0) , _saveDraftStart(0) , _saveDraftText(false) { _scroll.setFocusPolicy(Qt::NoFocus); @@ -2262,7 +2261,7 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) connect(&_emojiPan, SIGNAL(emojiSelected(EmojiPtr)), &_field, SLOT(onEmojiInsert(EmojiPtr))); connect(&_emojiPan, SIGNAL(stickerSelected(DocumentData*)), this, SLOT(onStickerSend(DocumentData*))); connect(&_emojiPan, SIGNAL(updateStickers()), this, SLOT(updateStickers())); - connect(&_typingStopTimer, SIGNAL(timeout()), this, SLOT(cancelTyping())); + connect(&_sendActionStopTimer, SIGNAL(timeout()), this, SLOT(onCancelSendAction())); connect(&_previewTimer, SIGNAL(timeout()), this, SLOT(onPreviewTimeout())); if (audioCapture()) { connect(audioCapture(), SIGNAL(onError()), this, SLOT(onRecordError())); @@ -2272,7 +2271,7 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) _scrollTimer.setSingleShot(false); - _typingStopTimer.setSingleShot(true); + _sendActionStopTimer.setSingleShot(true); _animActiveTimer.setSingleShot(false); connect(&_animActiveTimer, SIGNAL(timeout()), this, SLOT(onAnimActiveStep())); @@ -2350,7 +2349,7 @@ void HistoryWidget::onMentionHashtagOrBotCommandInsert(QString str) { } void HistoryWidget::onTextChange() { - updateTyping(); + updateSendAction(_history, SendActionTyping); if (cHasAudioCapture()) { if (_field.getLastText().isEmpty() && !App::main()->hasForwardingItems()) { @@ -2369,8 +2368,8 @@ void HistoryWidget::onTextChange() { } if (updateCmdStartShown()) { updateControlsVisibility(); - resizeEvent(0); - update(); +resizeEvent(0); +update(); } if (!_history || _synthedTextUpdate) return; @@ -2411,22 +2410,55 @@ void HistoryWidget::writeDraft(MsgId *replyTo, const QString *text, const Messag if (save) Local::writeDraftPositions(_history->peer->id, cursor ? (*cursor) : MessageCursor(_field)); } -void HistoryWidget::cancelTyping() { - if (_typingRequest) { - MTP::cancel(_typingRequest); - _typingRequest = 0; +void HistoryWidget::cancelSendAction(History *history, SendActionType type) { + QMap, mtpRequestId>::iterator i = _sendActionRequests.find(qMakePair(history, type)); + if (i != _sendActionRequests.cend()) { + MTP::cancel(i.value()); + _sendActionRequests.erase(i); } } -void HistoryWidget::updateTyping(bool typing) { - uint64 ms = getms(true) + 10000; - if (_synthedTextUpdate || !_history || (typing && (_history->myTyping + 5000 > ms)) || (!typing && (_history->myTyping + 5000 <= ms))) return; +void HistoryWidget::onCancelSendAction() { + cancelSendAction(_history, SendActionTyping); +} - _history->myTyping = typing ? ms : 0; - cancelTyping(); - if (typing) { - _typingRequest = MTP::send(MTPmessages_SetTyping(_peer->input, typing ? MTP_sendMessageTypingAction() : MTP_sendMessageCancelAction()), rpcDone(&HistoryWidget::typingDone)); - _typingStopTimer.start(5000); +void HistoryWidget::updateSendAction(History *history, SendActionType type, int32 progress) { + if (!history) return; + if (type == SendActionTyping && _synthedTextUpdate) return; + + bool doing = (progress >= 0); + + uint64 ms = getms(true) + 10000; + QMap::iterator i = history->mySendActions.find(type); + if (doing && i != history->mySendActions.cend() && i.value() + 5000 > ms) return; + if (!doing && (i == history->mySendActions.cend() || i.value() + 5000 <= ms)) return; + + if (doing) { + if (i == history->mySendActions.cend()) { + history->mySendActions.insert(type, ms); + } else { + i.value() = ms; + } + } else if (i != history->mySendActions.cend()) { + history->mySendActions.erase(i); + } + + cancelSendAction(history, type); + if (doing) { + MTPsendMessageAction action; + switch (type) { + case SendActionTyping: action = MTP_sendMessageTypingAction(); break; + case SendActionRecordVideo: action = MTP_sendMessageRecordVideoAction(); break; + case SendActionUploadVideo: action = MTP_sendMessageUploadVideoAction(MTP_int(progress)); break; + case SendActionRecordAudio: action = MTP_sendMessageRecordAudioAction(); break; + case SendActionUploadAudio: action = MTP_sendMessageUploadAudioAction(MTP_int(progress)); break; + case SendActionUploadPhoto: action = MTP_sendMessageUploadPhotoAction(MTP_int(progress)); break; + case SendActionUploadFile: action = MTP_sendMessageUploadDocumentAction(MTP_int(progress)); break; + case SendActionChooseLocation: action = MTP_sendMessageGeoLocationAction(); break; + case SendActionChooseContact: action = MTP_sendMessageChooseContactAction(); break; + } + _sendActionRequests.insert(qMakePair(history, type), MTP::send(MTPmessages_SetTyping(_peer->input, action), rpcDone(&HistoryWidget::sendActionDone))); + if (type == SendActionTyping) _sendActionStopTimer.start(5000); } } @@ -2438,9 +2470,12 @@ void HistoryWidget::stickersInstalled(uint64 setId) { _emojiPan.stickersInstalled(setId); } -void HistoryWidget::typingDone(const MTPBool &result, mtpRequestId req) { - if (_typingRequest == req) { - _typingRequest = 0; +void HistoryWidget::sendActionDone(const MTPBool &result, mtpRequestId req) { + for (QMap, mtpRequestId>::iterator i = _sendActionRequests.begin(), e = _sendActionRequests.end(); i != e; ++i) { + if (i.value() == req) { + _sendActionRequests.erase(i); + break; + } } } @@ -2480,6 +2515,7 @@ void HistoryWidget::onRecordUpdate(qint16 level, qint32 samples) { stopRecording(_peer && samples > 0 && _inField); } updateField(); + updateSendAction(_history, SendActionRecordAudio); } void HistoryWidget::updateStickers() { @@ -2688,7 +2724,7 @@ void HistoryWidget::showPeerHistory(const PeerId &peerId, MsgId showAtMsgId) { update(); return; } - updateTyping(false); + if (_history->mySendActions.contains(SendActionTyping)) updateSendAction(_history, SendActionTyping, false); } stopGif(); @@ -3602,6 +3638,8 @@ void HistoryWidget::stopRecording(bool send) { _recording = false; _recordingSamples = 0; + updateSendAction(_history, SendActionRecordAudio, -1); + updateControlsVisibility(); activate(); @@ -3922,7 +3960,7 @@ void HistoryWidget::paintTopBar(QPainter &p, float64 over, int32 decreaseWidth) decreaseWidth += increaseLeft; QRect rectForName(st::topBarForwardPadding.left() + increaseLeft, st::topBarForwardPadding.top(), width() - decreaseWidth - st::topBarForwardPadding.left() - st::topBarForwardPadding.right(), st::msgNameFont->height); p.setFont(st::dlgHistFont->f); - if (_history->typing.isEmpty()) { + if (_history->typing.isEmpty() && _history->sendActions.isEmpty()) { p.setPen(st::titleStatusColor->p); p.drawText(rectForName.x(), st::topBarHeight - st::topBarForwardPadding.bottom() - st::dlgHistFont->height + st::dlgHistFont->ascent, _titlePeerText); } else { @@ -4188,10 +4226,10 @@ void HistoryWidget::confirmSendImage(const ReadyLocalMedia &img) { connect(App::uploader(), SIGNAL(documentReady(MsgId, const MTPInputFile &)), this, SLOT(onDocumentUploaded(MsgId, const MTPInputFile &)), Qt::UniqueConnection); connect(App::uploader(), SIGNAL(thumbDocumentReady(MsgId, const MTPInputFile &, const MTPInputFile &)), this, SLOT(onThumbDocumentUploaded(MsgId, const MTPInputFile &, const MTPInputFile &)), Qt::UniqueConnection); connect(App::uploader(), SIGNAL(audioReady(MsgId, const MTPInputFile &)), this, SLOT(onAudioUploaded(MsgId, const MTPInputFile &)), Qt::UniqueConnection); -// connect(App::uploader(), SIGNAL(photoProgress(MsgId)), this, SLOT(onPhotoProgress(MsgId)), Qt::UniqueConnection); + connect(App::uploader(), SIGNAL(photoProgress(MsgId)), this, SLOT(onPhotoProgress(MsgId)), Qt::UniqueConnection); connect(App::uploader(), SIGNAL(documentProgress(MsgId)), this, SLOT(onDocumentProgress(MsgId)), Qt::UniqueConnection); connect(App::uploader(), SIGNAL(audioProgress(MsgId)), this, SLOT(onAudioProgress(MsgId)), Qt::UniqueConnection); -// connect(App::uploader(), SIGNAL(photoFailed(MsgId)), this, SLOT(onPhotoFailed(MsgId)), Qt::UniqueConnection); + connect(App::uploader(), SIGNAL(photoFailed(MsgId)), this, SLOT(onPhotoFailed(MsgId)), Qt::UniqueConnection); connect(App::uploader(), SIGNAL(documentFailed(MsgId)), this, SLOT(onDocumentFailed(MsgId)), Qt::UniqueConnection); connect(App::uploader(), SIGNAL(audioFailed(MsgId)), this, SLOT(onAudioFailed(MsgId)), Qt::UniqueConnection); @@ -4328,10 +4366,22 @@ void HistoryWidget::onAudioUploaded(MsgId newId, const MTPInputFile &file) { } } +void HistoryWidget::onPhotoProgress(MsgId newId) { + if (!MTP::authedId()) return; + HistoryItem *item = App::histItemById(newId); + if (item) { + PhotoData *photo = (item->getMedia() && item->getMedia()->type() == MediaTypePhoto) ? static_cast(item->getMedia())->photo() : 0; + updateSendAction(item->history(), SendActionUploadPhoto, 0); +// msgUpdated(item->history()->peer->id, item); + } +} + void HistoryWidget::onDocumentProgress(MsgId newId) { if (!MTP::authedId()) return; HistoryItem *item = App::histItemById(newId); if (item) { + DocumentData *doc = (item->getMedia() && item->getMedia()->type() == MediaTypeDocument) ? static_cast(item->getMedia())->document() : 0; + updateSendAction(item->history(), SendActionUploadFile, doc->uploadOffset); msgUpdated(item->history()->peer->id, item); } } @@ -4340,14 +4390,26 @@ void HistoryWidget::onAudioProgress(MsgId newId) { if (!MTP::authedId()) return; HistoryItem *item = App::histItemById(newId); if (item) { + AudioData *audio = (item->getMedia() && item->getMedia()->type() == MediaTypeAudio) ? static_cast(item->getMedia())->audio() : 0; + updateSendAction(item->history(), SendActionUploadAudio, audio->uploadOffset); msgUpdated(item->history()->peer->id, item); } } +void HistoryWidget::onPhotoFailed(MsgId newId) { + if (!MTP::authedId()) return; + HistoryItem *item = App::histItemById(newId); + if (item) { + updateSendAction(item->history(), SendActionUploadPhoto, -1); +// msgUpdated(item->history()->peer->id, item); + } +} + void HistoryWidget::onDocumentFailed(MsgId newId) { if (!MTP::authedId()) return; HistoryItem *item = App::histItemById(newId); if (item) { + updateSendAction(item->history(), SendActionUploadFile, -1); msgUpdated(item->history()->peer->id, item); } } @@ -4356,6 +4418,7 @@ void HistoryWidget::onAudioFailed(MsgId newId) { if (!MTP::authedId()) return; HistoryItem *item = App::histItemById(newId); if (item) { + updateSendAction(item->history(), SendActionUploadAudio, -1); msgUpdated(item->history()->peer->id, item); } } diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index 32cab7e05..e6535ccfe 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -386,10 +386,12 @@ public: QRect historyRect() const; - void updateTyping(bool typing = true); + void updateSendAction(History *history, SendActionType type, int32 progress = 0); + void cancelSendAction(History *history, SendActionType type); + void updateRecentStickers(); void stickersInstalled(uint64 setId); - void typingDone(const MTPBool &result, mtpRequestId req); + void sendActionDone(const MTPBool &result, mtpRequestId req); void destroyData(); void uploadImage(const QImage &img, bool withText = false, const QString &source = QString()); @@ -489,6 +491,8 @@ public slots: void onReplyToMessage(); void onReplyForwardPreviewCancel(); + void onCancelSendAction(); + void onStickerPackInfo(); void onPreviewParse(); @@ -498,16 +502,16 @@ public slots: void peerUpdated(PeerData *data); void onFullPeerUpdated(PeerData *data); - void cancelTyping(); - void onPhotoUploaded(MsgId msgId, const MTPInputFile &file); void onDocumentUploaded(MsgId msgId, const MTPInputFile &file); void onThumbDocumentUploaded(MsgId msgId, const MTPInputFile &file, const MTPInputFile &thumb); void onAudioUploaded(MsgId msgId, const MTPInputFile &file); + void onPhotoProgress(MsgId msgId); void onDocumentProgress(MsgId msgId); void onAudioProgress(MsgId msgId); + void onPhotoFailed(MsgId msgId); void onDocumentFailed(MsgId msgId); void onAudioFailed(MsgId msgId); @@ -685,8 +689,8 @@ private: QTimer _animActiveTimer; float64 _animActiveStart; - mtpRequestId _typingRequest; - QTimer _typingStopTimer; + QMap, mtpRequestId> _sendActionRequests; + QTimer _sendActionStopTimer; uint64 _saveDraftStart; bool _saveDraftText; diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 9efbe5396..b56c882b7 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -3483,11 +3483,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { History *history = App::historyLoaded(App::peerFromUser(d.vuser_id)); UserData *user = App::userLoaded(d.vuser_id.v); if (history && user) { - if (d.vaction.type() == mtpc_sendMessageTypingAction) { - App::histories().regTyping(history, user); - } else if (d.vaction.type() == mtpc_sendMessageCancelAction) { - history->unregTyping(user); - } + App::histories().regSendAction(history, user, d.vaction); } } break; @@ -3496,7 +3492,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { History *history = App::historyLoaded(App::peerFromChat(d.vchat_id)); UserData *user = (d.vuser_id.v == MTP::authedId()) ? 0 : App::userLoaded(d.vuser_id.v); if (history && user) { - App::histories().regTyping(history, user); + App::histories().regSendAction(history, user, d.vaction); } } break; diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index e13565542..9b636481c 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.43 + 0.8.44 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index e61aa8e03cf8c5391d3f7fcddd28faae10c2faa5..9192bbd0a8618383b987ee687c0625a62b4c00c6 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_3 Date: Sat, 1 Aug 2015 11:34:56 +0300 Subject: [PATCH 071/121] improved deploy script --- Telegram/DeployMacWin.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Telegram/DeployMacWin.sh b/Telegram/DeployMacWin.sh index 87a01cf0d..98d0d7f00 100755 --- a/Telegram/DeployMacWin.sh +++ b/Telegram/DeployMacWin.sh @@ -59,4 +59,7 @@ mv -v ./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStr$DevPostfix ./../. cp -v ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tmacupd$AppVersion ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ cp -v ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup.$AppVersionStr$DevPostfix.dmg ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ cp -rv ./../Mac/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram.app.dSYM ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ +cp -v ./../../tother/tmac32/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tmac32upd$AppVersion ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ +cp -v ./../../tother/tmac32/$AppVersionStrMajor/$AppVersionStr$DevPostfix/tsetup32.$AppVersionStr$DevPostfix.dmg ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/ +cp -rv ./../../tother/tmac32/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram.app.dSYM ./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram32.app.dSYM From 29b8596439da66efe417f6929510b57d3575965a Mon Sep 17 00:00:00 2001 From: John Preston Date: Sat, 1 Aug 2015 15:56:10 +0300 Subject: [PATCH 072/121] instructions updated --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index b406d179c..7c15862c4 100644 --- a/README.md +++ b/README.md @@ -7,12 +7,13 @@ Source code is published under GPL v3, license is available [here](https://githu ###Supported systems * Windows XP - Windows 8.1 (**not** RT) -* Mac OS X 10.7 - Mac OS X 10.10 +* Mac OS X 10.8 - Mac OS X 10.10 +* Mac OS X 10.6 - Mac OS X 10.7 (separate build) * Ubuntu 12.04 - Ubuntu 14.04 ###Third-party -* Qt 5.5.0, slightly patched ([LGPL](http://qt-project.org/doc/qt-5/lgpl.html)) +* Qt 5.3.2 and 5.5.0, slightly patched ([LGPL](http://qt-project.org/doc/qt-5/lgpl.html)) * OpenSSL 1.0.1g ([OpenSSL License](https://www.openssl.org/source/license.html)) * zlib 1.2.8 ([zlib License](http://www.zlib.net/zlib_license.html)) * libexif 0.6.20 ([LGPL](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html)) @@ -27,6 +28,8 @@ Source code is published under GPL v3, license is available [here](https://githu ###[Build instructions for XCode 6.4](https://github.com/telegramdesktop/tdesktop/blob/master/XCODE.md) +###[Build instructions for XCode 6.4 for OS X 10.6 and 10.7](https://github.com/telegramdesktop/tdesktop/blob/master/XCODEold.md) + ###[Build instructions for Qt Creator 3.2.0 Ubuntu](https://github.com/telegramdesktop/tdesktop/blob/master/QTCREATOR.md) ##Projects in Telegram solution @@ -58,15 +61,12 @@ for Mac: ####MetaEmoji -from two folders -* SourceFiles/art/Emoji -* SourceFiles/art/Emoji_200x - -and some inner config creates four sprites and text2emoji replace code +creates four sprites and text2emoji replace code * SourceFiles/art/emoji.png * SourceFiles/art/emoji_125x.png * SourceFiles/art/emoji_150x.png * SourceFiles/art/emoji_200x.png +* SourceFiles/art/emoji_250x.png * SourceFiles/gui/emoji_config.cpp ####MetaStyle From f290fef3a321bf390dfe3b2c7d8f66895c0d3839 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sat, 1 Aug 2015 15:56:30 +0300 Subject: [PATCH 073/121] added XCODEold.md to git --- XCODEold.md | 172 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 XCODEold.md diff --git a/XCODEold.md b/XCODEold.md new file mode 100644 index 000000000..2b3e62024 --- /dev/null +++ b/XCODEold.md @@ -0,0 +1,172 @@ +##Build instructions for Xcode 6.4 + +###Prepare folder + +Choose a folder for the future build, for example **/Users/user/TBuild** There you will have two folders, **Libraries** for third-party libs and **tdesktop** (or **tdesktop-master**) for the app. + +###Clone source code + +By git – in Terminal go to **/Users/user/TBuild** and run + + git clone https://github.com/telegramdesktop/tdesktop.git + +or download in ZIP and extract to **/Users/user/TBuild** rename **tdesktop-master** to **tdesktop** to have **/Users/user/TBuild/tdesktop/Telegram/Telegram.xcodeproj** project, then go to **/Users/user/TBuild/tdesktop** and run + + git checkout mac32 + +###Prepare libraries + +In your build Terminal run + + MACOSX_DEPLOYMENT_TARGET=10.6 + +to set minimal supported OS version to 10.6 for future console builds. + +####OpenSSL 1.0.1g + +Get sources from https://github.com/telegramdesktop/openssl-xcode, by git – in Terminal go to **/Users/user/TBuild/Libraries** and run + + git clone https://github.com/telegramdesktop/openssl-xcode.git + +or download in ZIP and extract to **/Users/user/TBuild/Libraries**, rename **openssl-xcode-master** to **openssl-xcode** to have **/Users/user/TBuild/Libraries/openssl-xcode/openssl.xcodeproj** project + +http://www.openssl.org/source/ > Download [**openssl-1.0.1h.tar.gz**](http://www.openssl.org/source/openssl-1.0.1h.tar.gz) (4.3 Mb) + +Extract openssl-1.0.1h.tar.gz and copy everything from **openssl-1.0.1h** to **/Users/user/TBuild/Libraries/openssl-xcode** to have **/Users/user/TBuild/Libraries/openssl-xcode/include** + +#####Building library + +* Open **/Users/user/TBuild/Libraries/openssl-xcode/openssl.xcodeproj** with Xcode +* Product > Build + +####liblzma + +http://tukaani.org/xz/ > Download [**xz-5.0.5.tar.gz**](http://tukaani.org/xz/xz-5.0.5.tar.gz) + +Extract to **/Users/user/TBuild/Libraries** + +#####Building library + +In Terminal go to **/Users/user/TBuild/Libraries/xz-5.0.5** and there run + + ./configure + make + sudo make install + +####zlib 1.2.8 + +Using se system lib + +####libexif 0.6.20 + +Get sources from https://github.com/telegramdesktop/libexif-0.6.20, by git – in Terminal go to **/Users/user/TBuild/Libraries** and run + + git clone https://github.com/telegramdesktop/libexif-0.6.20.git + +or download in ZIP and extract to **/Users/user/TBuild/Libraries**, rename **libexif-0.6.20-master** to **libexif-0.6.20** to have **/Users/user/TBuild/Libraries/libexif-0.6.20/configure** script + +#####Building library + +In Terminal go to **/Users/user/TBuild/Libraries/libexif-0.6.20** and there run + + ./configure + make + sudo make install + +####OpenAL Soft + +Get sources by git – in Terminal go to **/Users/user/TBuild/Libraries** and run + + git clone git://repo.or.cz/openal-soft.git + +to have **/Users/user/TBuild/Libraries/openal-soft/CMakeLists.txt** + +#####Building library + +In Terminal go to **/Users/user/TBuild/Libraries/openal-soft/build** and there run + + cmake -D LIBTYPE:STRING=STATIC -D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=10.6 .. + make + sudo make install + +####Opus codec + +Download sources [opus-1.1.tar.gz](http://downloads.xiph.org/releases/opus/opus-1.1.tar.gz) from http://www.opus-codec.org/downloads/, extract to **/Users/user/TBuild/Libraries** and rename to have **/Users/user/TBuild/Libraries/opus/configure** + +#####Building libraries + +Download [pkg-config 0.28](http://pkgconfig.freedesktop.org/releases/pkg-config-0.28.tar.gz) from http://pkg-config.freedesktop.org, extract it to **/Users/user/TBuild/Libraries** + +In Terminal go to **/Users/user/TBuild/Libraries/pkg-config-0.28** and run + + ./configure --with-internal-glib + make + sudo make install + +then go to **/Users/user/TBuild/Libraries/opus** and there run + + ./configure + make + sudo make install + +####FFmpeg + +Download sources [ffmpeg-2.6.3.tar.bz2](http://ffmpeg.org/releases/ffmpeg-2.6.3.tar.bz2) from https://www.ffmpeg.org/download.html, extract to **/Users/user/TBuild/Libraries** to have **/Users/user/TBuild/Libraries/ffmpeg-2.6.3** + +#####Building libraries + +Download [libiconv-1.14](http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz) from http://www.gnu.org/software/libiconv/#downloading, extract it to **/Users/user/TBuild/Libraries** + +In Termianl go to **/Users/user/TBuild/Libraries/libiconv-1.14** and run + + ./configure --enable-static + make + sudo make install + +Then in Terminal go to **/Users/user/TBuild/Libraries/ffmpeg-2.6.3** and run + + ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" + + brew install automake fdk-aac git lame libass libtool libvorbis libvpx opus sdl shtool texi2html theora wget x264 xvid yasm + + CFLAGS=`freetype-config --cflags` + LDFLAGS=`freetype-config --libs` + PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig:/usr/X11/lib/pkgconfig + + ./configure --prefix=/usr/local --disable-programs --disable-everything --enable-libopus --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=aasc --enable-decoder=mp1 --enable-decoder=mp1float --enable-decoder=mp2 --enable-decoder=mp2float --enable-decoder=mp3 --enable-decoder=mp3adu --enable-decoder=mp3adufloat --enable-decoder=mp3float --enable-decoder=mp3on4 --enable-decoder=mp3on4float --enable-decoder=wavpack --enable-decoder=opus --enable-decoder=vorbis --enable-decoder=wmalossless --enable-decoder=wmapro --enable-decoder=wmav1 --enable-decoder=wmav2 --enable-decoder=wmavoice --enable-decoder=flac --enable-encoder=libopus --enable-parser=aac --enable-parser=aac_latm --enable-parser=mpegaudio --enable-parser=opus --enable-parser=vorbis --enable-parser=flac --enable-demuxer=aac --enable-demuxer=wav --enable-demuxer=mp3 --enable-demuxer=ogg --enable-demuxer=mov --enable-demuxer=flac --enable-muxer=ogg --enable-muxer=opus --extra-cflags="-mmacosx-version-min=10.7" --extra-cxxflags="-mmacosx-version-min=10.7" --extra-ldflags="-mmacosx-version-min=10.7" + + make + sudo make install + +####Qt 5.3.2, slightly patched + +http://download.qt-project.org/official_releases/qt/5.3/5.3.2/single/qt-everywhere-opensource-src-5.3.2.tar.gz + +Extract to **/Users/user/TBuild/Libraries**, rename **qt-everywhere-opensource-src-5.3.2** to **QtStatic** to have **/Users/user/TBuild/Libraries/QtStatic/qtbase** folder + +Apply patch: + +* OR copy (with overwrite!) everything from **/Users/user/TBuild/tdesktop/\_qt\_5\_3\_2\_patch/** to **/Users/user/TBuild/Libraries/QtStatic/** +* OR copy **/Users/user/TBuild/tdesktop/\_qt\_5\_3\_2\_patch.diff** to **/Users/user/TBuild/Libraries/QtStatic/**, go there in Terminal and run + + git apply _qt_5_3_2_patch.diff + +#####Building library + +In Terminal go to **/Users/user/TBuild/Libraries/QtStatic** and there run + + ./configure -debug-and-release -opensource -confirm-license -static -opengl desktop -no-openssl -securetransport -nomake examples -nomake tests -platform macx-g++ + make -j4 module-qtbase module-qtimageformats + sudo make module-qtbase-install_subtargets module-qtimageformats-install_subtargets + +building (**make** command) will take really long time. + +###Building Telegram Desktop + +* Launch Xcode, all projects will be taken from **/Users/user/TBuild/tdesktop/Telegram** +* Open MetaStyle.xcodeproj and build for Debug (Release optionally) +* Open MetaEmoji.xcodeproj and build for Debug (Release optionally) +* Open MetaLang.xcodeproj and build for Debug (Release optionally) +* Open Telegram.xcodeproj and build for Debug +* Build Updater target as well, it is required for Telegram relaunch +* Release Telegram build will require removing **CUSTOM_API_ID** definition in Telegram target settings (Apple LLVM 6.1 - Custom Compiler Flags > Other C / C++ Flags > Release) From a9a4623c63ac7069f13b74e07333c32fbd8158b9 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sun, 2 Aug 2015 11:07:26 +0300 Subject: [PATCH 074/121] fixed photosendbox doc and contact display --- Telegram/SourceFiles/boxes/photosendbox.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Telegram/SourceFiles/boxes/photosendbox.cpp b/Telegram/SourceFiles/boxes/photosendbox.cpp index 73c4bbba5..6cff7cff7 100644 --- a/Telegram/SourceFiles/boxes/photosendbox.cpp +++ b/Telegram/SourceFiles/boxes/photosendbox.cpp @@ -190,7 +190,11 @@ void PhotoSendBox::hideAll() { void PhotoSendBox::showAll() { _sendButton.show(); _cancelButton.show(); - _compressed.show(); + if (_img && _img->type == ToPreparePhoto) { + _compressed.show(); + } else { + _compressed.hide(); + } } void PhotoSendBox::onSend(bool ctrlShiftEnter) { From c89ee8224cd4f5f758f6e02031a834d775b03d57 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sun, 2 Aug 2015 20:40:44 +0300 Subject: [PATCH 075/121] gnome using custom tray icon, win10 multiple desktops shadow fix --- Telegram/Resources/lang.strings | 2 +- Telegram/SourceFiles/application.cpp | 2 +- Telegram/SourceFiles/pspecific_linux.cpp | 2 +- Telegram/SourceFiles/pspecific_wnd.cpp | 6 +++++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Telegram/Resources/lang.strings b/Telegram/Resources/lang.strings index 0d30dce6d..01304cfd6 100644 --- a/Telegram/Resources/lang.strings +++ b/Telegram/Resources/lang.strings @@ -28,7 +28,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_open_from_tray" = "Open Telegram"; "lng_minimize_to_tray" = "Minimize to tray"; "lng_quit_from_tray" = "Quit Telegram"; -"lng_tray_icon_text" = "Telegram is still running here,\nyou can change this from settings page.\n\nIf this icon disappears from tray menu,\nyou can drag it back here from hidden icons."; +"lng_tray_icon_text" = "Telegram is still running here,\nyou can change this from settings page.\nIf this icon disappears from tray menu,\nyou can drag it here from hidden icons."; "lng_month1" = "January"; "lng_month2" = "February"; diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index 8f14416b8..d4c43461f 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -660,7 +660,7 @@ void Application::checkMapVersion() { QString versionFeatures; if (cDevVersion() && Local::oldMapVersion() < 8044) { versionFeatures = QString::fromUtf8("\xe2\x80\x94 Sending media and recording audio status display");// .replace('@', qsl("@") + QChar(0x200D)); - } else if (!cDevVersion() && Local::oldMapVersion() < 8043) { + } else if (!cDevVersion() && Local::oldMapVersion() < 8045) { versionFeatures = lang(lng_new_version_minor).trimmed(); } if (!versionFeatures.isEmpty()) { diff --git a/Telegram/SourceFiles/pspecific_linux.cpp b/Telegram/SourceFiles/pspecific_linux.cpp index 9d0b6c44e..3dda4bfd1 100644 --- a/Telegram/SourceFiles/pspecific_linux.cpp +++ b/Telegram/SourceFiles/pspecific_linux.cpp @@ -356,7 +356,7 @@ namespace { inited = true; QString cdesktop = QString(getenv("XDG_CURRENT_DESKTOP")).toLower(); - noQtTrayIcon = (cdesktop == qstr("pantheon"));// || (cdesktop == qstr("gnome")); + noQtTrayIcon = (cdesktop == qstr("pantheon")) || (cdesktop == qstr("gnome")); noTryUnity = (cdesktop != qstr("unity")); if (noQtTrayIcon) cSetSupportTray(false); diff --git a/Telegram/SourceFiles/pspecific_wnd.cpp b/Telegram/SourceFiles/pspecific_wnd.cpp index 15ab2bf9d..a7ad89a93 100644 --- a/Telegram/SourceFiles/pspecific_wnd.cpp +++ b/Telegram/SourceFiles/pspecific_wnd.cpp @@ -214,7 +214,8 @@ namespace { if (max_h < st::wndMinHeight) max_h = st::wndMinHeight; HINSTANCE appinst = (HINSTANCE)GetModuleHandle(0); - + HWND hwnd = Application::wnd() ? Application::wnd()->psHwnd() : 0; + for (int i = 0; i < 4; ++i) { QString cn = QString("TelegramShadow%1").arg(i); LPCWSTR _cn = (LPCWSTR)cn.utf16(); @@ -244,6 +245,9 @@ namespace { destroy(); return false; } +// if (QSysInfo::windowsVersion() >= QSysInfo::WV_WINDOWS8) { + SetWindowLong(hwnds[i], GWL_HWNDPARENT, (LONG)hwnd); +// } dcs[i] = CreateCompatibleDC(screenDC); if (!dcs[i]) { From 878604225c9b454444b3a88c81ab940d197c128c Mon Sep 17 00:00:00 2001 From: John Preston Date: Sun, 2 Aug 2015 21:04:53 +0300 Subject: [PATCH 076/121] langs updated --- Telegram/SourceFiles/langs/lang_it.strings | 4 ++-- Telegram/SourceFiles/langs/lang_nl.strings | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Telegram/SourceFiles/langs/lang_it.strings b/Telegram/SourceFiles/langs/lang_it.strings index c1ffa6fb4..9a2cb24c9 100644 --- a/Telegram/SourceFiles/langs/lang_it.strings +++ b/Telegram/SourceFiles/langs/lang_it.strings @@ -26,9 +26,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_menu_back" = "Indietro"; "lng_open_from_tray" = "Apri Telegram"; -"lng_minimize_to_tray" = "Minimizza"; +"lng_minimize_to_tray" = "Riduci a icona"; "lng_quit_from_tray" = "Chiudi Telegram"; -"lng_tray_icon_text" = "Telegram è ancora aperto qui,\npuoi cambiare questo nelle impostazioni.\n\nSe l'icona scompare dall'area di notifica,\npuoi riportarla indietro dalle icone nascoste."; +"lng_tray_icon_text" = "Telegram è ancora attivo qui,\npuoi modificarlo nelle impostazioni.\n\nSe l'icona scompare dall'area di notifica,\npuoi ripristinarla dalle icone nascoste."; "lng_month1" = "Gennaio"; "lng_month2" = "Febbraio"; diff --git a/Telegram/SourceFiles/langs/lang_nl.strings b/Telegram/SourceFiles/langs/lang_nl.strings index 1bf45b613..45800c40b 100644 --- a/Telegram/SourceFiles/langs/lang_nl.strings +++ b/Telegram/SourceFiles/langs/lang_nl.strings @@ -70,7 +70,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_status_service_notifications" = "servicemeldingen"; "lng_status_bot" = "bot"; -"lng_status_bot_reads_all" = "toegang tot berichten"; +"lng_status_bot_reads_all" = "toegang tot berichten"; "lng_status_bot_not_reads_all" = "geen toegang tot berichten"; "lng_status_offline" = "lang geleden gezien"; "lng_status_recently" = "recent gezien"; From a0dc865bdcc611c7ec3419f2ad516a43ce87511b Mon Sep 17 00:00:00 2001 From: John Preston Date: Sun, 2 Aug 2015 21:07:46 +0300 Subject: [PATCH 077/121] version 0.8.45 stable --- Telegram/PrepareWin.bat | 10 +++++----- Telegram/SourceFiles/config.h | 6 +++--- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 ++++++------ Telegram/Version.sh | 2 +- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index 696e34b23..a77e54d54 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,11 +1,11 @@ @echo OFF set "AppVersionStrMajor=0.8" -set "AppVersion=8044" -set "AppVersionStrSmall=0.8.44" -set "AppVersionStr=0.8.44" -set "AppVersionStrFull=0.8.44.0" -set "DevChannel=1" +set "AppVersion=8045" +set "AppVersionStrSmall=0.8.45" +set "AppVersionStr=0.8.45" +set "AppVersionStrFull=0.8.45.0" +set "DevChannel=0" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 740f3b96e..83e9f9f2d 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,9 +17,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8044; -static const wchar_t *AppVersionStr = L"0.8.44"; -static const bool DevVersion = true; +static const int32 AppVersion = 8045; +static const wchar_t *AppVersionStr = L"0.8.45"; +static const bool DevVersion = false; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index 9b636481c..a5a04007b 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.44 + 0.8.45 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index 9192bbd0a8618383b987ee687c0625a62b4c00c6..c407394adde408a40c3d1f587915737da69103d2 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_Z Date: Sun, 2 Aug 2015 22:15:26 +0300 Subject: [PATCH 078/121] trying appindicator first in xfce --- Telegram/SourceFiles/pspecific_linux.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/Telegram/SourceFiles/pspecific_linux.cpp b/Telegram/SourceFiles/pspecific_linux.cpp index 3dda4bfd1..d0af09881 100644 --- a/Telegram/SourceFiles/pspecific_linux.cpp +++ b/Telegram/SourceFiles/pspecific_linux.cpp @@ -68,7 +68,7 @@ namespace { bool frameless = true; bool finished = true; - bool noQtTrayIcon = false, noTryUnity = false; + bool noQtTrayIcon = false, noTryUnity = false, tryAppIndicator = false; bool useGtkBase = false, useAppIndicator = false, useStatusIcon = false, trayIconChecked = false, useUnityCount = false; AppIndicator *_trayIndicator = 0; @@ -356,7 +356,8 @@ namespace { inited = true; QString cdesktop = QString(getenv("XDG_CURRENT_DESKTOP")).toLower(); - noQtTrayIcon = (cdesktop == qstr("pantheon")) || (cdesktop == qstr("gnome")); + noQtTrayIcon = (cdesktop == qstr("pantheon")) || (cdesktop == qstr("gnome")); + tryAppIndicator = (cdesktop == qstr("xfce")); noTryUnity = (cdesktop != qstr("unity")); if (noQtTrayIcon) cSetSupportTray(false); @@ -401,6 +402,9 @@ namespace { if (!loadFunction(lib_gtk, "g_type_check_instance_cast", ps_g_type_check_instance_cast)) return; if (!loadFunction(lib_gtk, "g_signal_connect_data", ps_g_signal_connect_data)) return; + if (!loadFunction(lib_gtk, "g_object_ref_sink", ps_g_object_ref_sink)) return; + if (!loadFunction(lib_gtk, "g_object_unref", ps_g_object_unref)) return; + useGtkBase = true; std::cout << "loaded gtk funcs!\n"; } @@ -416,7 +420,7 @@ namespace { void setupGtk() { QLibrary lib_gtk, lib_indicator; - if (!noQtTrayIcon) { + if (!noQtTrayIcon && !tryAppIndicator) { if (!noTryUnity) { if (loadLibrary(lib_gtk, "gtk-3", 0)) { setupGtkBase(lib_gtk); @@ -448,6 +452,14 @@ namespace { } } } + if (tryAppIndicator) { + if (useGtkBase && useAppIndicator) { + noQtTrayIcon = true; + cSetSupportTray(false); + } + return; + } + if (!useGtkBase && lib_gtk.isLoaded()) { std::cout << "no appindicator, trying to load gtk..\n"; setupGtkBase(lib_gtk); @@ -471,8 +483,6 @@ namespace { if (!loadFunction(lib_gtk, "gtk_status_icon_position_menu", ps_gtk_status_icon_position_menu)) return; if (!loadFunction(lib_gtk, "gtk_menu_popup", ps_gtk_menu_popup)) return; if (!loadFunction(lib_gtk, "gtk_get_current_event_time", ps_gtk_get_current_event_time)) return; - if (!loadFunction(lib_gtk, "g_object_ref_sink", ps_g_object_ref_sink)) return; - if (!loadFunction(lib_gtk, "g_object_unref", ps_g_object_unref)) return; if (!loadFunction(lib_gtk, "g_idle_add", ps_g_idle_add)) return; useStatusIcon = true; std::cout << "status icon api loaded\n"; From d50f3f475fe5c5257a2a991940166d4aa351250c Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 3 Aug 2015 11:25:25 +0300 Subject: [PATCH 079/121] fixed crash in send actions --- Telegram/PrepareLinux.sh | 2 +- Telegram/PrepareLinux32.sh | 2 +- Telegram/SourceFiles/dialogswidget.cpp | 3 +++ Telegram/SourceFiles/historywidget.cpp | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Telegram/PrepareLinux.sh b/Telegram/PrepareLinux.sh index 053d7092b..68c83d4f1 100755 --- a/Telegram/PrepareLinux.sh +++ b/Telegram/PrepareLinux.sh @@ -46,7 +46,7 @@ if [ ! -d "./../Linux/Release/deploy/$AppVersionStrMajor" ]; then mkdir "./../Linux/Release/deploy/$AppVersionStrMajor" fi -echo "Copying Telegram, Updater and tlinuxupd$AppVersion to deploy/$AppVersionStr$DevPostfix.."; +echo "Copying Telegram, Updater and tlinuxupd$AppVersion to deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix.."; mkdir "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix" mkdir "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram" mv ./../Linux/Release/Telegram ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram/ diff --git a/Telegram/PrepareLinux32.sh b/Telegram/PrepareLinux32.sh index e0165bda6..2ebb3ee8e 100755 --- a/Telegram/PrepareLinux32.sh +++ b/Telegram/PrepareLinux32.sh @@ -46,7 +46,7 @@ if [ ! -d "./../Linux/Release/deploy/$AppVersionStrMajor" ]; then mkdir "./../Linux/Release/deploy/$AppVersionStrMajor" fi -echo "Copying Telegram, Updater and tlinux32upd$AppVersion to deploy/$AppVersionStr$DevPostfix.."; +echo "Copying Telegram, Updater and tlinux32upd$AppVersion to deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix.."; mkdir "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix" mkdir "./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram" mv ./../Linux/Release/Telegram ./../Linux/Release/deploy/$AppVersionStrMajor/$AppVersionStr$DevPostfix/Telegram/ diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index 8ae54f92e..93bc3c11c 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -333,6 +333,9 @@ void DialogsListWidget::onUpdateSelected(bool force) { parentWidget()->update(); } } + if (mouseY >= 0 && hashtagSel < 0 && filteredSel < 0 && peopleSel < 0 && searchedSel < 0) { + setCursor(style::cur_default); + } } } diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 35c3f18a9..32ce0a65d 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -2457,7 +2457,7 @@ void HistoryWidget::updateSendAction(History *history, SendActionType type, int3 case SendActionChooseLocation: action = MTP_sendMessageGeoLocationAction(); break; case SendActionChooseContact: action = MTP_sendMessageChooseContactAction(); break; } - _sendActionRequests.insert(qMakePair(history, type), MTP::send(MTPmessages_SetTyping(_peer->input, action), rpcDone(&HistoryWidget::sendActionDone))); + _sendActionRequests.insert(qMakePair(history, type), MTP::send(MTPmessages_SetTyping(history->peer->input, action), rpcDone(&HistoryWidget::sendActionDone))); if (type == SendActionTyping) _sendActionStopTimer.start(5000); } } From af948466f4ec55d74bcac89863011323056b688b Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 3 Aug 2015 12:59:41 +0300 Subject: [PATCH 080/121] langs updated, version 0.8.45 --- Telegram/Resources/lang.strings | 4 ++-- Telegram/SourceFiles/langs/lang_de.strings | 21 +++++++++++++++-- Telegram/SourceFiles/langs/lang_es.strings | 21 +++++++++++++++-- Telegram/SourceFiles/langs/lang_it.strings | 21 +++++++++++++++-- Telegram/SourceFiles/langs/lang_ko.strings | 23 ++++++++++++++++--- Telegram/SourceFiles/langs/lang_nl.strings | 21 +++++++++++++++-- Telegram/SourceFiles/langs/lang_pt_BR.strings | 21 +++++++++++++++-- 7 files changed, 117 insertions(+), 15 deletions(-) diff --git a/Telegram/Resources/lang.strings b/Telegram/Resources/lang.strings index 01304cfd6..115bf77c5 100644 --- a/Telegram/Resources/lang.strings +++ b/Telegram/Resources/lang.strings @@ -490,8 +490,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_user_action_upload_photo" = "{user} is sending photo"; "lng_send_action_upload_file" = "sending file"; "lng_user_action_upload_file" = "{user} is sending file"; -"lng_send_action_geo_location" = "choosing location"; -"lng_user_action_geo_location" = "{user} is choosing location"; +"lng_send_action_geo_location" = "picking location"; +"lng_user_action_geo_location" = "{user} is picking location"; "lng_send_action_choose_contact" = "choosing contact"; "lng_user_action_choose_contact" = "{user} is choosing contact"; "lng_unread_bar" = "{count:_not_used_|# unread message|# unread messages}"; diff --git a/Telegram/SourceFiles/langs/lang_de.strings b/Telegram/SourceFiles/langs/lang_de.strings index 23a59e442..e952a65c3 100644 --- a/Telegram/SourceFiles/langs/lang_de.strings +++ b/Telegram/SourceFiles/langs/lang_de.strings @@ -28,7 +28,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_open_from_tray" = "Telegram öffnen"; "lng_minimize_to_tray" = "Minimieren"; "lng_quit_from_tray" = "Telegram beenden"; -"lng_tray_icon_text" = "Telegram ist noch aktiv,\ndu kannst das in den Einstellungen anpassen.\n\nWenn dieses Symbol aus der Taskleiste verschwindet,\nkannst du es wieder hierher ziehen."; +"lng_tray_icon_text" = "Telegram ist minimiert und läuft im Hintergrund,\ndu kannst das in den Einstellungen ändern.\nUm Telegram wieder anzuzeigen, klicke auf \ndas Symbol im Benachrichtigungsfeld."; "lng_month1" = "Januar"; "lng_month2" = "Februar"; @@ -385,7 +385,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_sure_delete_and_exit" = "Deinen Verlauf von «{group}» löschen und die Gruppe verlassen?\n\nDas kann man nicht rückgängig machen."; -"lng_message_empty" = "(empty)"; +"lng_message_empty" = "Leere Nachricht"; +"lng_media_unsupported" = "Format Nicht Unterstützt"; "lng_action_add_user" = "{from} hat {user} hinzugefügt"; "lng_action_kick_user" = "{from} hat {user} entfernt"; @@ -477,6 +478,22 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_user_typing" = "{user} tippt"; "lng_users_typing" = "{user} und {second_user} tippen"; "lng_many_typing" = "{count:_not_used_|# tippt|# tippen}"; +"lng_send_action_record_video" = "schickt Video"; +"lng_user_action_record_video" = "{user} sendet Video"; +"lng_send_action_upload_video" = "schickt Video"; +"lng_user_action_upload_video" = "{user} sendet Video"; +"lng_send_action_record_audio" = "nimmt Audio auf"; +"lng_user_action_record_audio" = "{user} nimmt Audio auf"; +"lng_send_action_upload_audio" = "nimmt Audio auf"; +"lng_user_action_upload_audio" = "{user} sendet Audio"; +"lng_send_action_upload_photo" = "sendet Bild"; +"lng_user_action_upload_photo" = "{user} sendet Bild"; +"lng_send_action_upload_file" = "sendet Datei"; +"lng_user_action_upload_file" = "{user} sendet Datei"; +"lng_send_action_geo_location" = "wählt Standort aus"; +"lng_user_action_geo_location" = "{user} wählt Standort aus"; +"lng_send_action_choose_contact" = "wählt Kontakt aus"; +"lng_user_action_choose_contact" = "{user} wählt Kontakt aus"; "lng_unread_bar" = "{count:_not_used_|# Ungelesene Nachricht|# Ungelesene Nachrichten}"; "lng_maps_point" = "Standort"; diff --git a/Telegram/SourceFiles/langs/lang_es.strings b/Telegram/SourceFiles/langs/lang_es.strings index 4f391b027..ef5ecdb79 100644 --- a/Telegram/SourceFiles/langs/lang_es.strings +++ b/Telegram/SourceFiles/langs/lang_es.strings @@ -28,7 +28,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_open_from_tray" = "Abrir Telegram"; "lng_minimize_to_tray" = "Minimizar al icono"; "lng_quit_from_tray" = "Salir de Telegram"; -"lng_tray_icon_text" = "Telegram sigue funcionando aquí, \npuedes cambiar esto desde los ajustes.\n\nSi este ícono desaparece desde el menú,\npuedes arrastrarlo de regreso desde los iconos ocultos."; +"lng_tray_icon_text" = "Telegram aún está funcionando,\npuedes cambiar esto en los ajustes. \nSi este icono desaparece del menú, \npuedes arrastrarlo aquí desde los iconos ocultos."; "lng_month1" = "enero"; "lng_month2" = "febrero"; @@ -385,7 +385,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_sure_delete_and_exit" = "¿Quieres eliminar todo el historial de mensajes y dejar el grupo «{group}»?\n\nEsta acción no se puede deshacer."; -"lng_message_empty" = "(vacío)"; +"lng_message_empty" = "Mensaje vacío"; +"lng_media_unsupported" = "Multimedia no soportada"; "lng_action_add_user" = "{from} añadió a {user}"; "lng_action_kick_user" = "{from} expulsó a {user}"; @@ -477,6 +478,22 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_user_typing" = "{user} está escribiendo"; "lng_users_typing" = "{user} y {second_user} están escribiendo"; "lng_many_typing" = "{count:_not_used_|# está|# están} escribiendo"; +"lng_send_action_record_video" = "grabando vídeo"; +"lng_user_action_record_video" = "{user} está grabando un vídeo"; +"lng_send_action_upload_video" = "enviando vídeo"; +"lng_user_action_upload_video" = "{user} está enviando un vídeo"; +"lng_send_action_record_audio" = "grabando audio"; +"lng_user_action_record_audio" = "{user} está grabando un audio"; +"lng_send_action_upload_audio" = "enviando audio"; +"lng_user_action_upload_audio" = "{user} está enviando un audio"; +"lng_send_action_upload_photo" = "enviando foto"; +"lng_user_action_upload_photo" = "{user} está enviando una foto"; +"lng_send_action_upload_file" = "enviando archivo"; +"lng_user_action_upload_file" = "{user} está enviando un archivo"; +"lng_send_action_geo_location" = "obteniendo ubicación"; +"lng_user_action_geo_location" = "{user} está obteniendo una ubicación"; +"lng_send_action_choose_contact" = "eligiendo contacto"; +"lng_user_action_choose_contact" = "{user} está eligiendo un contacto"; "lng_unread_bar" = "{count:_not_used_|# mensaje sin leer|# mensajes sin leer}"; "lng_maps_point" = "Ubicación"; diff --git a/Telegram/SourceFiles/langs/lang_it.strings b/Telegram/SourceFiles/langs/lang_it.strings index 9a2cb24c9..aef882f8d 100644 --- a/Telegram/SourceFiles/langs/lang_it.strings +++ b/Telegram/SourceFiles/langs/lang_it.strings @@ -28,7 +28,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_open_from_tray" = "Apri Telegram"; "lng_minimize_to_tray" = "Riduci a icona"; "lng_quit_from_tray" = "Chiudi Telegram"; -"lng_tray_icon_text" = "Telegram è ancora attivo qui,\npuoi modificarlo nelle impostazioni.\n\nSe l'icona scompare dall'area di notifica,\npuoi ripristinarla dalle icone nascoste."; +"lng_tray_icon_text" = "Telegram è ancora attivo qui,\npuoi modificarlo nelle impostazioni.\nSe l'icona scompare dall'area di notifica,\npuoi ripristinarla dalle icone nascoste."; "lng_month1" = "Gennaio"; "lng_month2" = "Febbraio"; @@ -385,7 +385,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_sure_delete_and_exit" = "Sicuro di voler eliminare tutta la cronologia dei messaggi e abbandonare «{group}»?\n\nQuesta azione non può essere annullata."; -"lng_message_empty" = "(vuoto)"; +"lng_message_empty" = "Messaggio vuoto"; +"lng_media_unsupported" = "Media non supportato"; "lng_action_add_user" = "{from} ha aggiunto {user}"; "lng_action_kick_user" = "{from} ha rimosso {user}"; @@ -477,6 +478,22 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_user_typing" = "{user} sta scrivendo"; "lng_users_typing" = "{user} e {second_user} stanno scrivendo"; "lng_many_typing" = "{count:_not_used_|# sta|# stanno} scrivendo"; +"lng_send_action_record_video" = "registrando un video"; +"lng_user_action_record_video" = "{user} sta registrando un video"; +"lng_send_action_upload_video" = "inviando un video"; +"lng_user_action_upload_video" = "{user} sta inviando un video"; +"lng_send_action_record_audio" = "registrando un audio"; +"lng_user_action_record_audio" = "{user} sta registrando un audio"; +"lng_send_action_upload_audio" = "inviando un audio"; +"lng_user_action_upload_audio" = "{user} sta inviando un audio"; +"lng_send_action_upload_photo" = "inviando una foto"; +"lng_user_action_upload_photo" = "{user} sta inviando una foto"; +"lng_send_action_upload_file" = "inviando un file"; +"lng_user_action_upload_file" = "{user} sta inviando un file"; +"lng_send_action_geo_location" = "selezionando una posizione"; +"lng_user_action_geo_location" = "{user} sta selezionando una posizione"; +"lng_send_action_choose_contact" = "selezionando un contatto"; +"lng_user_action_choose_contact" = "{user} sta selezionando un contatto"; "lng_unread_bar" = "{count:_not_used_|# messaggio non letto|# messaggi non letti}"; "lng_maps_point" = "Posizione"; diff --git a/Telegram/SourceFiles/langs/lang_ko.strings b/Telegram/SourceFiles/langs/lang_ko.strings index e8e788389..51a8bc4c9 100644 --- a/Telegram/SourceFiles/langs/lang_ko.strings +++ b/Telegram/SourceFiles/langs/lang_ko.strings @@ -28,7 +28,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_open_from_tray" = "텔레그램 실행"; "lng_minimize_to_tray" = "창을 최소화"; "lng_quit_from_tray" = "텔레그램 종료"; -"lng_tray_icon_text" = "텔레그램은 아직 실행중입니다.\n설정 화면에서 실행설정을 변경하실 수 있습니다.\n\n트레이메뉴에서 이 아이콘이 사라질 경우.\n숨겨진 아이콘 목록에서 다시 복원할 수 있습니다."; +"lng_tray_icon_text" = "텔레그램은 아직 실행중입니다. \n설정 화면에서 실행설정을 변경하실 수 있습니다. \n트레이메뉴에서 이 아이콘이 사라질 경우. \n숨겨진 아이콘 목록에서 다시 복원할 수 있습니다."; "lng_month1" = "1월"; "lng_month2" = "2월"; @@ -385,7 +385,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_sure_delete_and_exit" = "그룹 «{group}» 방에서 모든 메시지를 \n삭제하시고 퇴장하시겠습니까?\n\n삭제 하실 경우 취소가 불가능합니다."; -"lng_message_empty" = "(없음)"; +"lng_message_empty" = "메시지 없음"; +"lng_media_unsupported" = "지원하지 않는 미디어"; "lng_action_add_user" = "{from} 님께서 {user} 님을 초대하셨습니다."; "lng_action_kick_user" = "{from} 님께서 {user} 님을 추방하셨습니다."; @@ -459,7 +460,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_send_button" = "보내기"; "lng_message_ph" = "메시지 쓰기"; -"lng_record_cancel" = "이 영역에서 마우스 클릭을 해제하시면 취소가 됩니다."; +"lng_record_cancel" = "이 영역 밖에서 마우스 클릭을 해제하시면 취소가 됩니다."; "lng_empty_history" = ""; "lng_willbe_history" = "대화하실 방을 선택해주세요."; "lng_message_with_from" = "[c]{from}:[/c] {message}"; @@ -477,6 +478,22 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_user_typing" = "{user}님이 입력중입니다."; "lng_users_typing" = "{user}님과 {second_user}님이 입력중입니다."; "lng_many_typing" = "{count:_not_used_|#명이|#명이} 입력중입니다"; +"lng_send_action_record_video" = "비디오 녹화 중"; +"lng_user_action_record_video" = "{user}님이 녹화중입니다."; +"lng_send_action_upload_video" = "비디오 전송 중"; +"lng_user_action_upload_video" = "{user}님이 비디오를 전송 중입니다."; +"lng_send_action_record_audio" = "오디오 녹음 중"; +"lng_user_action_record_audio" = "{user}님이 오디오를 녹음 중입니다."; +"lng_send_action_upload_audio" = "오디오 전송 중"; +"lng_user_action_upload_audio" = "{user}님이 오디오를 전송 중입니다."; +"lng_send_action_upload_photo" = "사진 전송 중"; +"lng_user_action_upload_photo" = "{user}님이 사진을 전송 중입니다."; +"lng_send_action_upload_file" = "파일을 전송 중"; +"lng_user_action_upload_file" = "{user}님이 사진을 전송 중입니다."; +"lng_send_action_geo_location" = "위치 선택 중"; +"lng_user_action_geo_location" = "{user}님이 위치를 선택 중입니다."; +"lng_send_action_choose_contact" = "연락처 선택 중"; +"lng_user_action_choose_contact" = "{user}님이 연락처를 선택 중입니다."; "lng_unread_bar" = "{count:_not_used_|#개의 읽지 않은 메시지|#개의 읽지 않은 메시지}"; "lng_maps_point" = "위치"; diff --git a/Telegram/SourceFiles/langs/lang_nl.strings b/Telegram/SourceFiles/langs/lang_nl.strings index 45800c40b..e0a29bb35 100644 --- a/Telegram/SourceFiles/langs/lang_nl.strings +++ b/Telegram/SourceFiles/langs/lang_nl.strings @@ -28,7 +28,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_open_from_tray" = "Telegram openen"; "lng_minimize_to_tray" = "Minimaliseer naar systeemvak"; "lng_quit_from_tray" = "Telegram afsluiten"; -"lng_tray_icon_text" = "Telegram is nog steeds actief,\nJe kunt dit wijzigen via instellingen.\n\nAls dit icoon verdwijnt van het systeemvak,\nkun je deze terugslepen vanaf de verborgen iconen."; +"lng_tray_icon_text" = "Telegram is nog steeds actief, \nje kunt dit wijzigen via instellingen.\nAls dit icoon verdwijnt van het systeemvak,\nkun je deze terugslepen vanaf de verborgen iconen."; "lng_month1" = "januari"; "lng_month2" = "februari"; @@ -385,7 +385,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_sure_delete_and_exit" = "Wil je de groep «{group}» verlaten en de geschiedenis wissen?\n\nDeze actie kan niet ongedaan worden gemaakt."; -"lng_message_empty" = "(leeg)"; +"lng_message_empty" = "Leeg bericht"; +"lng_media_unsupported" = "Niet-ondersteunde media"; "lng_action_add_user" = "{from} heeft {user} toegevoegd"; "lng_action_kick_user" = "{from} heeft {user} verwijderd"; @@ -477,6 +478,22 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_user_typing" = "{user} is aan het typen"; "lng_users_typing" = "{user} en {second_user} zijn aan het typen"; "lng_many_typing" = "{count:_not_used_|# is|# zijn} aan het typen"; +"lng_send_action_record_video" = "video opnemen"; +"lng_user_action_record_video" = "{user} neemt video op"; +"lng_send_action_upload_video" = "video versturen"; +"lng_user_action_upload_video" = "{user} verstuurt video"; +"lng_send_action_record_audio" = "geluid opnemen"; +"lng_user_action_record_audio" = "{user} neemt geluid op"; +"lng_send_action_upload_audio" = "geluid versturen"; +"lng_user_action_upload_audio" = "{user} verstuurt geluid"; +"lng_send_action_upload_photo" = "foto versturen"; +"lng_user_action_upload_photo" = "{user} verstuurt een foto"; +"lng_send_action_upload_file" = "bestand versturen"; +"lng_user_action_upload_file" = "{user} verstuurt een bestand"; +"lng_send_action_geo_location" = "locatie kiezen"; +"lng_user_action_geo_location" = "{user} kiest een locatie"; +"lng_send_action_choose_contact" = "contact kiezen"; +"lng_user_action_choose_contact" = "{user} kiest een contact"; "lng_unread_bar" = "{count:_not_used_|# ongelezen bericht|# ongelezen berichten}"; "lng_maps_point" = "Locatie"; diff --git a/Telegram/SourceFiles/langs/lang_pt_BR.strings b/Telegram/SourceFiles/langs/lang_pt_BR.strings index a775b8b38..28599abb5 100644 --- a/Telegram/SourceFiles/langs/lang_pt_BR.strings +++ b/Telegram/SourceFiles/langs/lang_pt_BR.strings @@ -28,7 +28,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_open_from_tray" = "Abrir Telegram"; "lng_minimize_to_tray" = "Minimizar"; "lng_quit_from_tray" = "Sair do Telegram"; -"lng_tray_icon_text" = "Telegram ainda está sendo executado,\nvocê pode mudar isso nas configurações.\n\nSe este ícone desaparecer de sua bandeja,\nvocê pode arrastar de volta dos ícones ocultos."; +"lng_tray_icon_text" = "Telegram ainda está sendo executado,\nvocê pode mudar isso nas configurações.\nSe este ícone desaparecer de sua bandeja,\nvocê pode arrastar de volta dos ícones "; "lng_month1" = "Janeiro"; "lng_month2" = "Fevereiro"; @@ -385,7 +385,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_sure_delete_and_exit" = "Você tem certeza que deseja apagar todo o seu histórico de mensagens e deixar «{group}»?\n\nEssa ação não pode ser desfeita."; -"lng_message_empty" = "(vazio)"; +"lng_message_empty" = "Mensagem Vazia"; +"lng_media_unsupported" = "Mídia Não-Suportada"; "lng_action_add_user" = "{from} adicionou {user}"; "lng_action_kick_user" = "{from} removeu {user}"; @@ -477,6 +478,22 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_user_typing" = "{user} está escrevendo"; "lng_users_typing" = "{user} e {second_user} estão escrevendo"; "lng_many_typing" = "{count:_not_used_|# está|# estão} escrevendo"; +"lng_send_action_record_video" = "gravando vídeo"; +"lng_user_action_record_video" = "{user} está gravando vídeo"; +"lng_send_action_upload_video" = "enviando vídeo"; +"lng_user_action_upload_video" = "{user} está enviando vídeo"; +"lng_send_action_record_audio" = "gravando áudio"; +"lng_user_action_record_audio" = "{user} está gravando áudio"; +"lng_send_action_upload_audio" = "enviando áudio"; +"lng_user_action_upload_audio" = "{user} está gravando áudio"; +"lng_send_action_upload_photo" = "enviando foto"; +"lng_user_action_upload_photo" = "{user} está enviando foto"; +"lng_send_action_upload_file" = "enviando arquivo"; +"lng_user_action_upload_file" = "{user} está enviando arquivo"; +"lng_send_action_geo_location" = "escolhendo local"; +"lng_user_action_geo_location" = "{user} está escolhendo local"; +"lng_send_action_choose_contact" = "escolhendo contato"; +"lng_user_action_choose_contact" = "{user} está escolhendo contato"; "lng_unread_bar" = "{count:_not_used_|# mensagem não lida|# mensagens não lidas}"; "lng_maps_point" = "Localização"; From ad8e3f36adbd32e71aadeca82ad407c8525de6aa Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 3 Aug 2015 13:22:05 +0300 Subject: [PATCH 081/121] fixed pointer, version 0.8.45 --- Telegram/SourceFiles/dialogswidget.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index 93bc3c11c..89ba6f814 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -333,9 +333,6 @@ void DialogsListWidget::onUpdateSelected(bool force) { parentWidget()->update(); } } - if (mouseY >= 0 && hashtagSel < 0 && filteredSel < 0 && peopleSel < 0 && searchedSel < 0) { - setCursor(style::cur_default); - } } } @@ -492,6 +489,7 @@ void DialogsListWidget::leaveEvent(QEvent *e) { if (sel || filteredSel >= 0 || hashtagSel >= 0 || searchedSel >= 0 || peopleSel >= 0) { sel = 0; filteredSel = searchedSel = peopleSel = hashtagSel = -1; + setCursor(style::cur_default); parentWidget()->update(); } } @@ -840,6 +838,7 @@ void DialogsListWidget::setMouseSel(bool msel, bool toTop) { contactSel = !dialogs.list.count && contactsNoDialogs.list.count; } else if (_state == FilteredState || _state == SearchedState) { // don't select first elem in search filteredSel = peopleSel = searchedSel = hashtagSel = -1; + setCursor(style::cur_default); } } } From aabf13669025f2eb026bd09df911220f916251db Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 4 Aug 2015 18:01:47 +0300 Subject: [PATCH 082/121] search in conversation, clear history and delete conversation for all chats --- Telegram/Resources/lang.strings | 7 ++ Telegram/SourceFiles/app.cpp | 9 -- Telegram/SourceFiles/app.h | 1 - Telegram/SourceFiles/dialogswidget.cpp | 118 +++++++++++++++++++--- Telegram/SourceFiles/dialogswidget.h | 12 +++ Telegram/SourceFiles/gui/flattextarea.cpp | 2 + Telegram/SourceFiles/history.cpp | 10 +- Telegram/SourceFiles/historywidget.cpp | 2 + Telegram/SourceFiles/mainwidget.cpp | 47 +++++---- Telegram/SourceFiles/mainwidget.h | 6 +- Telegram/SourceFiles/profilewidget.cpp | 59 +++++++++-- Telegram/SourceFiles/profilewidget.h | 7 +- 12 files changed, 225 insertions(+), 55 deletions(-) diff --git a/Telegram/Resources/lang.strings b/Telegram/Resources/lang.strings index 115bf77c5..1eb67ca5f 100644 --- a/Telegram/Resources/lang.strings +++ b/Telegram/Resources/lang.strings @@ -158,6 +158,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_no_contacts" = "You have no contacts"; "lng_contacts_loading" = "Loading.."; "lng_contacts_not_found" = "No contacts found"; +"lng_dlg_search_chat" = "Search in this chat"; +"lng_dlg_search_for_messages" = "Search for messages"; "lng_settings_save" = "Save"; "lng_settings_upload" = "Set Profile Photo"; @@ -339,6 +341,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_topbar_info" = "Info"; "lng_profile_about_section" = "About"; "lng_profile_settings_section" = "Settings"; +"lng_profile_actions_section" = "Actions"; "lng_profile_bot_settings" = "Settings"; "lng_profile_bot_help" = "Help"; "lng_profile_participants_section" = "Members"; @@ -348,6 +351,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_edit_contact" = "Edit"; "lng_profile_enable_notifications" = "Notifications"; "lng_profile_clear_history" = "Clear history"; +"lng_profile_delete_conversation" = "Delete conversation"; +"lng_profile_clear_and_exit" = "Delete and exit"; +"lng_profile_search_messages" = "Search for messages"; "lng_profile_send_message" = "Send Message"; "lng_profile_share_contact" = "Share Contact"; "lng_profile_invite_to_group" = "Add to Group"; @@ -382,6 +388,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_sure_delete_contact" = "Are you sure, you want to delete {contact} from your contact list?"; "lng_sure_delete_history" = "Are you sure, you want to delete all message history with {contact}?\n\nThis action cannot be undone."; +"lng_sure_delete_group_history" = "Are you sure, you want to delete all message history in «{group}»?\n\nThis action cannot be undone."; "lng_sure_delete_and_exit" = "Are you sure, you want to delete all message history and leave «{group}»?\n\nThis action cannot be undone."; diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index a5b5659a2..120fae069 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -1752,15 +1752,6 @@ namespace App { } } - /* // don't delete history without deleting its' peerdata - void deleteHistory(const PeerId &peer) { - Histories::iterator i = ::histories.find(peer); - if (i != ::histories.end()) { - ::histories.typing.remove(i.value()); - ::histories.erase(i); - } - } -/**/ void historyRegRandom(uint64 randomId, MsgId itemId) { randomData.insert(randomId, itemId); } diff --git a/Telegram/SourceFiles/app.h b/Telegram/SourceFiles/app.h index 5a91cba2a..c1befed22 100644 --- a/Telegram/SourceFiles/app.h +++ b/Telegram/SourceFiles/app.h @@ -183,7 +183,6 @@ namespace App { void historyClearItems(); void historyRegReply(HistoryReply *reply, HistoryItem *to); void historyUnregReply(HistoryReply *reply, HistoryItem *to); -// void deleteHistory(const PeerId &peer); void historyRegRandom(uint64 randomId, MsgId itemId); void historyUnregRandom(uint64 randomId); diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index 89ba6f814..427f87d3f 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -42,12 +42,16 @@ peopleSel(-1), _lastSearchId(0), _state(DefaultState), _addContactLnk(this, lang(lng_add_contact_button)), -_overDelete(false) { +_cancelSearchInPeer(this, st::btnCancelSearch), +_overDelete(false), +_searchInPeer(0) { connect(main, SIGNAL(dialogToTop(const History::DialogLinks&)), this, SLOT(onDialogToTop(const History::DialogLinks&))); connect(main, SIGNAL(peerNameChanged(PeerData*,const PeerData::Names&,const PeerData::NameFirstChars&)), this, SLOT(onPeerNameChanged(PeerData*,const PeerData::Names&,const PeerData::NameFirstChars&))); connect(main, SIGNAL(peerPhotoChanged(PeerData*)), this, SLOT(onPeerPhotoChanged(PeerData*))); connect(main, SIGNAL(dialogRowReplaced(DialogRow*,DialogRow*)), this, SLOT(onDialogRowReplaced(DialogRow*,DialogRow*))); connect(&_addContactLnk, SIGNAL(clicked()), App::wnd(), SLOT(onShowAddContact())); + connect(&_cancelSearchInPeer, SIGNAL(clicked()), this, SIGNAL(cancelSearchInPeer())); + _cancelSearchInPeer.hide(); refresh(false); } @@ -60,7 +64,9 @@ int32 DialogsListWidget::peopleOffset() const { } int32 DialogsListWidget::searchedOffset() const { - return peopleOffset() + (peopleResults.isEmpty() ? 0 : ((peopleResults.size() * st::dlgHeight) + st::searchedBarHeight)); + int32 result = peopleOffset() + (peopleResults.isEmpty() ? 0 : ((peopleResults.size() * st::dlgHeight) + st::searchedBarHeight)); + if (_searchInPeer) result += st::dlgHeight; + return result; } void DialogsListWidget::paintEvent(QPaintEvent *e) { @@ -181,6 +187,18 @@ void DialogsListWidget::paintEvent(QPaintEvent *e) { } } + if (_searchInPeer) { + searchInPeerPaint(p, width()); + p.translate(0, st::dlgHeight); + if (_state == FilteredState && searchResults.isEmpty()) { + p.fillRect(0, 0, width(), st::searchedBarHeight, st::searchedBarBG->b); + p.setFont(st::searchedBarFont->f); + p.setPen(st::searchedBarColor->p); + p.drawText(QRect(0, 0, width(), st::searchedBarHeight), lang(lng_dlg_search_for_messages), style::al_center); + p.translate(0, st::searchedBarHeight); + } + } + if (_state == SearchedState || !searchResults.isEmpty()) { QString text = lng_search_found_results(lt_count, searchResults.isEmpty() ? 0 : searchedCount); p.fillRect(0, 0, width(), st::searchedBarHeight, st::searchedBarBG->b); @@ -252,6 +270,31 @@ void DialogsListWidget::peopleResultPaint(UserData *user, QPainter &p, int32 w, history->nameText.drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); } +void DialogsListWidget::searchInPeerPaint(QPainter &p, int32 w) const { + QRect fullRect(0, 0, w, st::dlgHeight); + p.fillRect(fullRect, st::dlgBG->b); + + p.drawPixmap(st::dlgPaddingHor, st::dlgPaddingVer, _searchInPeer->photo->pix(st::dlgPhotoSize)); + + int32 nameleft = st::dlgPaddingHor + st::dlgPhotoSize + st::dlgPhotoPadding; + int32 namewidth = w - nameleft - st::dlgPaddingHor * 2 - st::btnCancelSearch.width; + QRect rectForName(nameleft, st::dlgPaddingVer + st::dlgNameTop, namewidth, st::msgNameFont->height); + + // draw chat icon + if (_searchInPeer->chat) { + p.drawPixmap(QPoint(rectForName.left() + st::dlgChatImgLeft, rectForName.top() + st::dlgChatImgTop), App::sprite(), st::dlgChatImg); + rectForName.setLeft(rectForName.left() + st::dlgChatImgSkip); + } + + QRect tr(nameleft, st::dlgPaddingVer + st::dlgFont->height + st::dlgSep, namewidth, st::dlgFont->height); + p.setFont(st::dlgHistFont->f); + p.setPen(st::dlgTextColor->p); + p.drawText(tr.left(), tr.top() + st::dlgHistFont->ascent, st::dlgHistFont->m.elidedText(lang(lng_dlg_search_chat), Qt::ElideRight, tr.width())); + + p.setPen(st::dlgNameColor->p); + App::history(_searchInPeer->id)->nameText.drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); +} + void DialogsListWidget::activate() { } @@ -347,6 +390,7 @@ void DialogsListWidget::mousePressEvent(QMouseEvent *e) { void DialogsListWidget::resizeEvent(QResizeEvent *e) { _addContactLnk.move((width() - _addContactLnk.width()) / 2, (st::noContactsHeight + st::noContactsFont->height) / 2); + _cancelSearchInPeer.move(width() - st::dlgPaddingHor - st::btnCancelSearch.width, (st::dlgHeight - st::btnCancelSearch.height) / 2); } void DialogsListWidget::onDialogRowReplaced(DialogRow *oldRow, DialogRow *newRow) { @@ -397,9 +441,6 @@ void DialogsListWidget::removePeer(PeerData *peer) { contactsNoDialogs.addByName(App::history(peer->id)); } } -// contactsNoDialogs.del(peer); -// contacts.del(peer); -// App::deleteHistory(peer->id); emit App::main()->dialogsUpdated(); @@ -539,7 +580,7 @@ void DialogsListWidget::onFilterUpdate(QString newFilter, bool force) { } if (newFilter != filter || force) { filter = newFilter; - if (filter.isEmpty()) { + if (!_searchInPeer && filter.isEmpty()) { _state = DefaultState; hashtagResults.clear(); filterResults.clear(); @@ -551,7 +592,7 @@ void DialogsListWidget::onFilterUpdate(QString newFilter, bool force) { _state = FilteredState; filterResults.clear(); - if (!f.isEmpty()) { + if (!_searchInPeer && !f.isEmpty()) { DialogsList *dialogsToFilter = 0, *contactsNoDialogsToFilter = 0; if (dialogs.list.count) { for (fi = fb; fi != fe; ++fi) { @@ -630,7 +671,7 @@ void DialogsListWidget::onFilterUpdate(QString newFilter, bool force) { } void DialogsListWidget::onHashtagFilterUpdate(QStringRef newFilter) { - if (newFilter.isEmpty() || newFilter.at(0) != '#') { + if (newFilter.isEmpty() || newFilter.at(0) != '#' || _searchInPeer) { _hashtagFilter = QString(); if (!hashtagResults.isEmpty()) { hashtagResults.clear(); @@ -817,7 +858,7 @@ void DialogsListWidget::refresh(bool toTop) { } else { if (!_addContactLnk.isHidden()) _addContactLnk.hide(); if (_state == FilteredState) { - h = searchedOffset() + (searchResults.count() * st::dlgHeight) + (searchResults.isEmpty() ? 0 : st::searchedBarHeight); + h = searchedOffset() + (searchResults.count() * st::dlgHeight) + ((searchResults.isEmpty() && !_searchInPeer) ? 0 : st::searchedBarHeight); } else if (_state == SearchedState) { h = searchedOffset() + (searchResults.count() * st::dlgHeight) + st::searchedBarHeight; } @@ -866,9 +907,23 @@ bool DialogsListWidget::hasFilteredResults() const { return !filterResults.isEmpty() && hashtagResults.isEmpty(); } +void DialogsListWidget::searchInPeer(PeerData *peer) { + _searchInPeer = peer; + if (_searchInPeer) { + onHashtagFilterUpdate(QStringRef()); + _cancelSearchInPeer.show(); + } else { + _cancelSearchInPeer.hide(); + } +} + void DialogsListWidget::clearFilter() { if (_state == FilteredState || _state == SearchedState) { - _state = DefaultState; + if (_searchInPeer) { + _state = FilteredState; + } else { + _state = DefaultState; + } hashtagResults.clear(); filterResults.clear(); peopleResults.clear(); @@ -1390,6 +1445,7 @@ DialogsWidget::DialogsWidget(MainWidget *parent) : QWidget(parent) , _cancelSearch(this, st::btnCancelSearch) , scroll(this, st::dlgScroll) , list(&scroll, parent) +, _searchInPeer(0) , _searchFull(false) , _peopleFull(false) { @@ -1401,6 +1457,7 @@ DialogsWidget::DialogsWidget(MainWidget *parent) : QWidget(parent) connect(&list, SIGNAL(searchResultChosen()), this, SLOT(onCancel())); connect(&list, SIGNAL(completeHashtag(QString)), this, SLOT(onCompleteHashtag(QString))); connect(&list, SIGNAL(refreshHashtags()), this, SLOT(onFilterCursorMoved())); + connect(&list, SIGNAL(cancelSearchInPeer()), this, SLOT(onCancelSearchInPeer())); connect(&scroll, SIGNAL(geometryChanged()), &list, SLOT(onParentGeometryChanged())); connect(&scroll, SIGNAL(scrolled()), &list, SLOT(onUpdateSelected())); connect(&scroll, SIGNAL(scrolled()), this, SLOT(onListScroll())); @@ -1496,7 +1553,7 @@ bool DialogsWidget::animStep(float64 ms) { } void DialogsWidget::onCancel() { - if (!onCancelSearch() || !App::main()->selectingPeer()) { + if (!onCancelSearch() || (!_searchInPeer && !App::main()->selectingPeer())) { emit cancelled(); } } @@ -1600,10 +1657,10 @@ bool DialogsWidget::onSearchMessages(bool searchCache) { } else if (_searchQuery != q) { _searchQuery = q; _searchFull = false; - _searchRequest = MTP::send(MTPmessages_Search(MTP_inputPeerEmpty(), MTP_string(_searchQuery), MTP_inputMessagesFilterEmpty(), MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(SearchPerPage)), rpcDone(&DialogsWidget::searchReceived, true), rpcFail(&DialogsWidget::searchFailed)); + _searchRequest = MTP::send(MTPmessages_Search(_searchInPeer ? _searchInPeer->input : MTP_inputPeerEmpty(), MTP_string(_searchQuery), MTP_inputMessagesFilterEmpty(), MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(SearchPerPage)), rpcDone(&DialogsWidget::searchReceived, true), rpcFail(&DialogsWidget::searchFailed)); _searchQueries.insert(_searchRequest, _searchQuery); } - if (q.size() >= MinUsernameLength) { + if (!_searchInPeer && q.size() >= MinUsernameLength) { if (searchCache) { PeopleCache::const_iterator i = _peopleCache.constFind(q); if (i != _peopleCache.cend()) { @@ -1647,7 +1704,7 @@ void DialogsWidget::searchMessages(const QString &query) { void DialogsWidget::onSearchMore(MsgId minMsgId) { if (!_searchRequest && !_searchFull) { - _searchRequest = MTP::send(MTPmessages_Search(MTP_inputPeerEmpty(), MTP_string(_searchQuery), MTP_inputMessagesFilterEmpty(), MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(minMsgId), MTP_int(SearchPerPage)), rpcDone(&DialogsWidget::searchReceived, !minMsgId), rpcFail(&DialogsWidget::searchFailed)); + _searchRequest = MTP::send(MTPmessages_Search(_searchInPeer ? _searchInPeer->input : MTP_inputPeerEmpty(), MTP_string(_searchQuery), MTP_inputMessagesFilterEmpty(), MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(minMsgId), MTP_int(SearchPerPage)), rpcDone(&DialogsWidget::searchReceived, !minMsgId), rpcFail(&DialogsWidget::searchFailed)); if (!minMsgId) { _searchQueries.insert(_searchRequest, _searchQuery); } @@ -1877,6 +1934,14 @@ void DialogsWidget::onFilterUpdate(bool force) { } } +void DialogsWidget::searchInPeer(PeerData *peer) { + onCancelSearch(); + _searchInPeer = peer; + list.searchInPeer(peer); + onFilterUpdate(true); + list.onFilterUpdate(_filter.text(), true); +} + void DialogsWidget::onFilterCursorMoved(int from, int to) { if (to < 0) to = _filter.cursorPosition(); QString t = _filter.text(); @@ -2035,6 +2100,14 @@ void DialogsWidget::onNewGroup() { bool DialogsWidget::onCancelSearch() { bool clearing = !_filter.text().isEmpty(); + if (_searchInPeer && !clearing) { + if (!cWideMode()) { + App::main()->showPeerHistory(_searchInPeer->id, ShowAtUnreadMsgId); + } + _searchInPeer = 0; + list.searchInPeer(0); + clearing = true; + } list.clearFilter(); _filter.clear(); _filter.updatePlaceholder(); @@ -2042,6 +2115,23 @@ bool DialogsWidget::onCancelSearch() { return clearing; } +void DialogsWidget::onCancelSearchInPeer() { + if (_searchInPeer) { + if (!cWideMode()) { + App::main()->showPeerHistory(_searchInPeer->id, ShowAtUnreadMsgId); + } + _searchInPeer = 0; + list.searchInPeer(0); + } + list.clearFilter(); + _filter.clear(); + _filter.updatePlaceholder(); + onFilterUpdate(); + if (cWideMode()) { + emit cancelled(); + } +} + void DialogsWidget::onDialogToTopFrom(int movedFrom) { if (scroll.scrollTop() > 0) { if (movedFrom > scroll.scrollTop()) { diff --git a/Telegram/SourceFiles/dialogswidget.h b/Telegram/SourceFiles/dialogswidget.h index 922f2a813..ec7c1fa13 100644 --- a/Telegram/SourceFiles/dialogswidget.h +++ b/Telegram/SourceFiles/dialogswidget.h @@ -48,6 +48,7 @@ public: void leaveEvent(QEvent *e); void peopleResultPaint(UserData *user, QPainter &p, int32 w, bool act, bool sel) const; + void searchInPeerPaint(QPainter &p, int32 w) const; void selectSkip(int32 direction); void selectSkipPage(int32 pixels, int32 direction); @@ -93,6 +94,8 @@ public: State state() const; bool hasFilteredResults() const; + void searchInPeer(PeerData *peer); + void onFilterUpdate(QString newFilter, bool force = false); void onHashtagFilterUpdate(QStringRef newFilter); void itemRemoved(HistoryItem *item); @@ -117,6 +120,7 @@ signals: void dialogToTopFrom(int movedFrom); void searchMessages(); void searchResultChosen(); + void cancelSearchInPeer(); void completeHashtag(QString tag); void refreshHashtags(); @@ -156,9 +160,12 @@ private: void paintDialog(QPainter &p, DialogRow *dialog); LinkButton _addContactLnk; + IconedButton _cancelSearchInPeer; bool _overDelete; + PeerData *_searchInPeer; + }; class DialogsWidget : public QWidget, public Animated, public RPCSender { @@ -183,6 +190,8 @@ public: void keyPressEvent(QKeyEvent *e); void paintEvent(QPaintEvent *e); + void searchInPeer(PeerData *peer); + void loadDialogs(); void createDialogAtTop(History *history, int32 unreadCount); void dlgUpdated(DialogRow *row); @@ -226,6 +235,7 @@ public slots: void onAddContact(); void onNewGroup(); bool onCancelSearch(); + void onCancelSearchInPeer(); void onFilterCursorMoved(int from = -1, int to = -1); void onCompleteHashtag(QString tag); @@ -262,6 +272,8 @@ private: anim::ivalue a_coord, a_bgCoord; anim::fvalue a_alpha, a_bgAlpha; + PeerData *_searchInPeer; + QTimer _searchTimer; QString _searchQuery, _peopleQuery; bool _searchFull, _peopleFull; diff --git a/Telegram/SourceFiles/gui/flattextarea.cpp b/Telegram/SourceFiles/gui/flattextarea.cpp index ca001ec97..741a69901 100644 --- a/Telegram/SourceFiles/gui/flattextarea.cpp +++ b/Telegram/SourceFiles/gui/flattextarea.cpp @@ -774,6 +774,8 @@ void FlatTextarea::keyPressEvent(QKeyEvent *e) { } else { emit tabbed(); } + } else if (e->key() == Qt::Key_Search || e == QKeySequence::Find) { + e->ignore(); } else { QTextCursor tc(textCursor()); if (enter && ctrl) { diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 1d9e7a74f..2716d1c4d 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -1481,9 +1481,16 @@ void History::clear(bool leaveItems) { if (showFrom) { showFrom = 0; } + if (!leaveItems) { + lastMsg = 0; + } for (int32 i = 0; i < OverviewCount; ++i) { if (!_overview[i].isEmpty() || !_overviewIds[i].isEmpty()) { - if (_overviewCount[i] == 0) _overviewCount[i] = _overview[i].size(); + if (leaveItems) { + if (_overviewCount[i] == 0) _overviewCount[i] = _overview[i].size(); + } else { + _overviewCount[i] = -1; // not loaded yet + } _overview[i].clear(); _overviewIds[i].clear(); if (App::wnd() && !App::quiting()) App::wnd()->mediaOverviewUpdated(peer, MediaOverviewType(i)); @@ -1501,7 +1508,6 @@ void History::clear(bool leaveItems) { lastKeyboardInited = false; } else { setUnreadCount(0); - lastMsg = 0; } height = 0; oldLoaded = false; diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 32ce0a65d..2648c6e0e 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -4816,6 +4816,8 @@ void HistoryWidget::keyPressEvent(QKeyEvent *e) { App::main()->peerAfter(_peer, msgid, p, m); } if (p) App::main()->showPeerHistory(p->id, m); + } else if (_history && (e->key() == Qt::Key_Search || e == QKeySequence::Find)) { + App::main()->searchInPeer(_history->peer); } else { e->ignore(); } diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index b56c882b7..47922db5b 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -122,7 +122,7 @@ void TopBarWidget::onDeleteAndExitSure() { if (c) { App::main()->showDialogs(); App::wnd()->hideLayer(); - MTP::send(MTPmessages_DeleteChatUser(MTP_int(p->id & 0xFFFFFFFF), App::self()->inputUser), App::main()->rpcDone(&MainWidget::deleteHistory, p), App::main()->rpcFail(&MainWidget::leaveChatFailed, p)); + MTP::send(MTPmessages_DeleteChatUser(MTP_int(p->id & 0xFFFFFFFF), App::self()->inputUser), App::main()->rpcDone(&MainWidget::deleteHistoryAfterLeave, p), App::main()->rpcFail(&MainWidget::leaveChatFailed, p)); } } @@ -738,20 +738,20 @@ bool MainWidget::leaveChatFailed(PeerData *peer, const RPCError &error) { showDialogs(); } dialogs.removePeer(peer); - App::histories().remove(peer->id); + App::history(peer->id)->clear(); MTP::send(MTPmessages_DeleteHistory(peer->input, MTP_int(0)), rpcDone(&MainWidget::deleteHistoryPart, peer)); return true; } return false; } -void MainWidget::deleteHistory(PeerData *peer, const MTPUpdates &updates) { +void MainWidget::deleteHistoryAfterLeave(PeerData *peer, const MTPUpdates &updates) { sentUpdatesReceived(updates); if ((profile && profile->peer() == peer) || (overview && overview->peer() == peer) || _stack.contains(peer) || history.peer() == peer) { showDialogs(); } dialogs.removePeer(peer); - App::histories().remove(peer->id); + App::history(peer->id)->clear(); MTP::send(MTPmessages_DeleteHistory(peer->input, MTP_int(0)), rpcDone(&MainWidget::deleteHistoryPart, peer)); } @@ -776,26 +776,23 @@ void MainWidget::deletedContact(UserData *user, const MTPcontacts_Link &result) App::emitPeerUpdated(); } -void MainWidget::deleteHistoryAndContact(UserData *user, const MTPcontacts_Link &result) { - const MTPDcontacts_link &d(result.c_contacts_link()); - App::feedUsers(MTP_vector(1, d.vuser), false); - App::feedUserLink(MTP_int(user->id & 0xFFFFFFFF), d.vmy_link, d.vforeign_link, false); - App::emitPeerUpdated(); - - if ((profile && profile->peer() == user) || (overview && overview->peer() == user) || _stack.contains(user) || history.peer() == user) { - showDialogs(); - } - dialogs.removePeer(user); - MTP::send(MTPmessages_DeleteHistory(user->input, MTP_int(0)), rpcDone(&MainWidget::deleteHistoryPart, (PeerData*)user)); +void MainWidget::deleteConversation(PeerData *peer) { + dialogs.removePeer(peer); + History *h = App::history(peer->id); + h->clear(); + h->newLoaded = h->oldLoaded = true; + showDialogs(); + MTP::send(MTPmessages_DeleteHistory(peer->input, MTP_int(0)), rpcDone(&MainWidget::deleteHistoryPart, peer)); } void MainWidget::clearHistory(PeerData *peer) { - if (!peer->chat && peer->asUser()->contact <= 0) { - dialogs.removePeer(peer->asUser()); + History *h = App::history(peer->id); + if (h->lastMsg) { +// Local::savePeerPosition(h->peer, h->lastMsg->date); } - dialogsToUp(); - dialogs.update(); - App::history(peer->id)->clear(); + h->clear(); + h->newLoaded = h->oldLoaded = true; + showPeerHistory(peer->id, ShowAtUnreadMsgId); MTP::send(MTPmessages_DeleteHistory(peer->input, MTP_int(0)), rpcDone(&MainWidget::deleteHistoryPart, peer)); } @@ -2530,6 +2527,16 @@ void MainWidget::onPeerShown(PeerData *peer) { if (animating()) _topBar.hide(); } +void MainWidget::searchInPeer(PeerData *peer) { + dialogs.searchInPeer(peer); + if (cWideMode()) { + dialogs.activate(); + } else { + dialogsToUp(); + showDialogs(); + } +} + void MainWidget::onUpdateNotifySettings() { if (this != App::main()) return; while (!updateNotifySettingPeers.isEmpty()) { diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index c0503be5e..9fec76a31 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -281,11 +281,11 @@ public: DragState getDragState(const QMimeData *mime); bool leaveChatFailed(PeerData *peer, const RPCError &e); - void deleteHistory(PeerData *peer, const MTPUpdates &updates); + void deleteHistoryAfterLeave(PeerData *peer, const MTPUpdates &updates); void deleteHistoryPart(PeerData *peer, const MTPmessages_AffectedHistory &result); void deleteMessages(const QVector &ids); void deletedContact(UserData *user, const MTPcontacts_Link &result); - void deleteHistoryAndContact(UserData *user, const MTPcontacts_Link &result); + void deleteConversation(PeerData *peer); void clearHistory(PeerData *peer); void removeContact(UserData *user); @@ -421,6 +421,8 @@ public slots: void onTopBarClick(); void onPeerShown(PeerData *peer); + void searchInPeer(PeerData *peer); + void onUpdateNotifySettings(); void onPhotosSelect(); diff --git a/Telegram/SourceFiles/profilewidget.cpp b/Telegram/SourceFiles/profilewidget.cpp index 08c460c4b..30743e737 100644 --- a/Telegram/SourceFiles/profilewidget.cpp +++ b/Telegram/SourceFiles/profilewidget.cpp @@ -55,7 +55,11 @@ ProfileInner::ProfileInner(ProfileWidget *profile, ScrollArea *scroll, const Pee // settings _enableNotifications(this, lang(lng_profile_enable_notifications)), + + // actions + _searchInPeer(this, lang(lng_profile_search_messages)), _clearHistory(this, lang(lng_profile_clear_history)), + _deleteConversation(this, lang(_peer->chat ? lng_profile_clear_and_exit : lng_profile_delete_conversation)), // shared media _allMediaTypes(false), @@ -96,7 +100,6 @@ ProfileInner::ProfileInner(ProfileWidget *profile, ScrollArea *scroll, const Pee // profile _nameText.setText(st::profileNameFont, _nameCache, _textNameOptions); - connect(&_uploadPhoto, SIGNAL(clicked()), this, SLOT(onUpdatePhoto())); connect(&_addParticipant, SIGNAL(clicked()), this, SLOT(onAddParticipant())); connect(&_sendMessage, SIGNAL(clicked()), this, SLOT(onSendMessage())); @@ -149,7 +152,11 @@ ProfileInner::ProfileInner(ProfileWidget *profile, ScrollArea *scroll, const Pee // settings connect(&_enableNotifications, SIGNAL(clicked()), this, SLOT(onEnableNotifications())); + + // actions + connect(&_searchInPeer, SIGNAL(clicked()), this, SLOT(onSearchInPeer())); connect(&_clearHistory, SIGNAL(clicked()), this, SLOT(onClearHistory())); + connect(&_deleteConversation, SIGNAL(clicked()), this, SLOT(onDeleteConversation())); // shared media connect(&_mediaShowAll, SIGNAL(clicked()), this, SLOT(onMediaShowAll())); @@ -181,6 +188,10 @@ void ProfileInner::onSendMessage() { App::main()->showPeerHistory(_peer->id, ShowAtUnreadMsgId); } +void ProfileInner::onSearchInPeer() { + App::main()->searchInPeer(_peer); +} + void ProfileInner::onEnableNotifications() { App::main()->updateNotifySetting(_peer, _enableNotifications.checked()); } @@ -244,17 +255,32 @@ void ProfileInner::onUpdatePhoto() { } void ProfileInner::onClearHistory() { - ConfirmBox *box = new ConfirmBox(lng_sure_delete_history(lt_contact, _peer->name)); + ConfirmBox *box = new ConfirmBox(_peer->chat ? lng_sure_delete_group_history(lt_group, _peer->name) : lng_sure_delete_history(lt_contact, _peer->name)); connect(box, SIGNAL(confirmed()), this, SLOT(onClearHistorySure())); App::wnd()->showLayer(box); } void ProfileInner::onClearHistorySure() { - App::main()->showDialogs(); App::wnd()->hideLayer(); App::main()->clearHistory(_peer); } +void ProfileInner::onDeleteConversation() { + ConfirmBox *box = new ConfirmBox(_peer->chat ? lng_sure_delete_and_exit(lt_group, _peer->name) : lng_sure_delete_history(lt_contact, _peer->name)); + connect(box, SIGNAL(confirmed()), this, SLOT(onDeleteConversationSure())); + App::wnd()->showLayer(box); +} + +void ProfileInner::onDeleteConversationSure() { + if (_peer->chat) { + App::wnd()->hideLayer(); + App::main()->showDialogs(); + MTP::send(MTPmessages_DeleteChatUser(MTP_int(_peer->id & 0xFFFFFFFF), App::self()->inputUser), App::main()->rpcDone(&MainWidget::deleteHistoryAfterLeave, _peer), App::main()->rpcFail(&MainWidget::leaveChatFailed, _peer)); + } else { + App::main()->deleteConversation(_peer); + } +} + void ProfileInner::onAddParticipant() { App::wnd()->showLayer(new ContactsBox(_peerChat)); } @@ -569,6 +595,14 @@ void ProfileInner::paintEvent(QPaintEvent *e) { top += _enableNotifications.height(); + // actions + p.setFont(st::profileHeaderFont->f); + p.setPen(st::profileHeaderColor->p); + p.drawText(_left + st::profileHeaderLeft, top + st::profileHeaderTop + st::profileHeaderFont->ascent, lang(lng_profile_actions_section)); + top += st::profileHeaderSkip; + + top += _searchInPeer.height() + st::setLittleSkip + _clearHistory.height() + st::setLittleSkip + _deleteConversation.height(); + // shared media p.setFont(st::profileHeaderFont->f); p.setPen(st::profileHeaderColor->p); @@ -855,6 +889,12 @@ void ProfileInner::resizeEvent(QResizeEvent *e) { top += st::profileHeaderSkip; _enableNotifications.move(_left, top); top += _enableNotifications.height(); + // actions + top += st::profileHeaderSkip; + _searchInPeer.move(_left, top); top += _searchInPeer.height() + st::setLittleSkip; + _clearHistory.move(_left, top); top += _clearHistory.height() + st::setLittleSkip; + _deleteConversation.move(_left, top); top += _deleteConversation.height(); + // shared media top += st::profileHeaderSkip; @@ -883,7 +923,6 @@ void ProfileInner::resizeEvent(QResizeEvent *e) { } } top += st::profileHeaderTop + st::profileHeaderFont->ascent - st::linkFont->ascent; - _clearHistory.move(_left, top); } void ProfileInner::contextMenuEvent(QContextMenuEvent *e) { @@ -970,6 +1009,9 @@ void ProfileInner::mediaOverviewUpdated(PeerData *peer, MediaOverviewType type) } void ProfileInner::showAll() { + _searchInPeer.show(); + _clearHistory.show(); + _deleteConversation.show(); if (_peerChat) { _sendMessage.hide(); _shareContact.hide(); @@ -1006,7 +1048,6 @@ void ProfileInner::showAll() { } } _enableNotifications.show(); - _clearHistory.hide(); } else { _uploadPhoto.hide(); _cancelPhoto.hide(); @@ -1070,7 +1111,13 @@ void ProfileInner::showAll() { reorderParticipants(); int32 h; if (_peerUser) { - h = _clearHistory.y() + _clearHistory.height() + st::profileHeaderSkip; + h = _mediaShowAll.y() + _mediaShowAll.height() + st::profileHeaderSkip; + if (_mediaShowAll.isHidden()) { + for (int i = 0; i < OverviewCount; ++i) { + if (i == OverviewAudioDocuments) continue; + if (!_mediaLinks[i]->isHidden()) h += _mediaLinks[i]->height() + st::setLittleSkip; + } + } } else { h = _mediaAudios.y() + _mediaAudios.height() + st::profileHeaderSkip; if (!_participants.isEmpty()) { diff --git a/Telegram/SourceFiles/profilewidget.h b/Telegram/SourceFiles/profilewidget.h index 7acc3dfe3..94765769d 100644 --- a/Telegram/SourceFiles/profilewidget.h +++ b/Telegram/SourceFiles/profilewidget.h @@ -68,10 +68,13 @@ public slots: void onShareContact(); void onInviteToGroup(); void onSendMessage(); + void onSearchInPeer(); void onEnableNotifications(); void onClearHistory(); void onClearHistorySure(); + void onDeleteConversation(); + void onDeleteConversationSure(); void onAddParticipant(); void onUpdatePhoto(); @@ -142,7 +145,9 @@ private: // settings FlatCheckbox _enableNotifications; - LinkButton _clearHistory; + + // actions + LinkButton _searchInPeer, _clearHistory, _deleteConversation; // shared media bool _allMediaTypes; From 6225bd3bcb536363395a1fec3d3b094485b42259 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 5 Aug 2015 16:48:27 +0300 Subject: [PATCH 083/121] fixed crash on sticker send, version 0.8.46 --- Telegram/PrepareWin.bat | 8 ++++---- Telegram/SourceFiles/config.h | 4 ++-- Telegram/SourceFiles/historywidget.cpp | 2 +- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 ++++++------ Telegram/Version.sh | 2 +- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index a77e54d54..0ccb9abc5 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,10 +1,10 @@ @echo OFF set "AppVersionStrMajor=0.8" -set "AppVersion=8045" -set "AppVersionStrSmall=0.8.45" -set "AppVersionStr=0.8.45" -set "AppVersionStrFull=0.8.45.0" +set "AppVersion=8046" +set "AppVersionStrSmall=0.8.46" +set "AppVersionStr=0.8.46" +set "AppVersionStrFull=0.8.46.0" set "DevChannel=0" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 83e9f9f2d..377fea046 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,8 +17,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8045; -static const wchar_t *AppVersionStr = L"0.8.45"; +static const int32 AppVersion = 8046; +static const wchar_t *AppVersionStr = L"0.8.46"; static const bool DevVersion = false; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 32ce0a65d..41f9b538e 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -4381,7 +4381,7 @@ void HistoryWidget::onDocumentProgress(MsgId newId) { HistoryItem *item = App::histItemById(newId); if (item) { DocumentData *doc = (item->getMedia() && item->getMedia()->type() == MediaTypeDocument) ? static_cast(item->getMedia())->document() : 0; - updateSendAction(item->history(), SendActionUploadFile, doc->uploadOffset); + updateSendAction(item->history(), SendActionUploadFile, doc ? doc->uploadOffset : 0); msgUpdated(item->history()->peer->id, item); } } diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index a5a04007b..745d81e8e 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.45 + 0.8.46 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index c407394adde408a40c3d1f587915737da69103d2..dee5d4b5f7d0cfaf265e476220a164294dd29cb2 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_J Date: Fri, 7 Aug 2015 15:11:50 +0300 Subject: [PATCH 084/121] version 0.8.47.dev - search in conversation, clear history, delete conversation, saving cleared conversations locally, removed contacts from left column --- Telegram/PrepareWin.bat | 10 +- Telegram/Resources/lang.strings | 6 +- Telegram/SourceFiles/apiwrap.cpp | 25 +++ Telegram/SourceFiles/apiwrap.h | 3 + Telegram/SourceFiles/app.cpp | 30 ++- Telegram/SourceFiles/app.h | 1 + Telegram/SourceFiles/application.cpp | 4 +- Telegram/SourceFiles/boxes/contactsbox.cpp | 37 ++- Telegram/SourceFiles/boxes/contactsbox.h | 4 +- Telegram/SourceFiles/config.h | 6 +- Telegram/SourceFiles/dialogswidget.cpp | 38 +++- Telegram/SourceFiles/dialogswidget.h | 1 + Telegram/SourceFiles/gui/images.h | 10 + Telegram/SourceFiles/history.cpp | 22 +- Telegram/SourceFiles/history.h | 6 +- Telegram/SourceFiles/historywidget.cpp | 10 +- Telegram/SourceFiles/localstorage.cpp | 236 +++++++++++++++++++- Telegram/SourceFiles/localstorage.h | 4 + Telegram/SourceFiles/mainwidget.cpp | 13 +- Telegram/SourceFiles/settings.cpp | 3 + Telegram/SourceFiles/settings.h | 6 + Telegram/SourceFiles/structs.cpp | 39 +++- Telegram/SourceFiles/structs.h | 22 +- Telegram/SourceFiles/telegram.qrc | 80 +++---- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.vcxproj | 1 + Telegram/Telegram.xcodeproj/project.pbxproj | 12 +- Telegram/Version.sh | 2 +- 29 files changed, 492 insertions(+), 141 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index 0ccb9abc5..b5b72657c 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,11 +1,11 @@ @echo OFF set "AppVersionStrMajor=0.8" -set "AppVersion=8046" -set "AppVersionStrSmall=0.8.46" -set "AppVersionStr=0.8.46" -set "AppVersionStrFull=0.8.46.0" -set "DevChannel=0" +set "AppVersion=8047" +set "AppVersionStrSmall=0.8.47" +set "AppVersionStr=0.8.47" +set "AppVersionStrFull=0.8.47.0" +set "DevChannel=1" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/Resources/lang.strings b/Telegram/Resources/lang.strings index 1eb67ca5f..b462bcd6d 100644 --- a/Telegram/Resources/lang.strings +++ b/Telegram/Resources/lang.strings @@ -156,6 +156,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_dlg_new_group_name" = "Group name"; "lng_dlg_create_group" = "Create"; "lng_no_contacts" = "You have no contacts"; +"lng_no_chats" = "Your chats will be here"; "lng_contacts_loading" = "Loading.."; "lng_contacts_not_found" = "No contacts found"; "lng_dlg_search_chat" = "Search in this chat"; @@ -385,6 +386,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_create_group_title" = "New Group"; "lng_failed_add_participant" = "Could not add user. Try again later."; +"lng_failed_add_not_mutual" = "Sorry, if a person left a group, only a\nmutual contact can bring them back\n(they need to have your phone\nnumber, and you need theirs)."; "lng_sure_delete_contact" = "Are you sure, you want to delete {contact} from your contact list?"; "lng_sure_delete_history" = "Are you sure, you want to delete all message history with {contact}?\n\nThis action cannot be undone."; @@ -469,7 +471,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_message_ph" = "Write a message.."; "lng_record_cancel" = "Release outside this field to cancel"; "lng_empty_history" = ""; -"lng_willbe_history" = "Please select chat to start messaging"; +"lng_willbe_history" = "Please select a chat to start messaging"; "lng_message_with_from" = "[c]{from}:[/c] {message}"; "lng_from_you" = "You"; "lng_bot_description" = "What can this bot do?"; @@ -627,7 +629,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop was updated to version {version}\n\n{changes}\n\nFull version history is available here:\n{link}"; "lng_new_version_minor" = "— Bug fixes and other minor improvements"; -"lng_new_version_text" = "— Improved in-app media playback\n— Bug fixes and other minor improvements"; +"lng_new_version_text" = "— Search for messages in conversation\n— Clear messages history in groups\n— Contacts without messages are hidden from the conversations list"; "lng_menu_insert_unicode" = "Insert Unicode control character"; diff --git a/Telegram/SourceFiles/apiwrap.cpp b/Telegram/SourceFiles/apiwrap.cpp index c93bce807..75d8187c7 100644 --- a/Telegram/SourceFiles/apiwrap.cpp +++ b/Telegram/SourceFiles/apiwrap.cpp @@ -225,6 +225,23 @@ void ApiWrap::requestPeer(PeerData *peer) { _peerRequests.insert(peer, req); } +void ApiWrap::requestPeers(const QList &peers) { + QVector chats; + QVector users; + chats.reserve(peers.size()); + users.reserve(peers.size()); + for (QList::const_iterator i = peers.cbegin(), e = peers.cend(); i != e; ++i) { + if (!*i || _fullPeerRequests.contains(*i) || _peerRequests.contains(*i)) continue; + if ((*i)->chat) { + chats.push_back(MTP_int(App::chatFromPeer((*i)->id))); + } else { + users.push_back((*i)->asUser()->inputUser); + } + } + if (!chats.isEmpty()) MTP::send(MTPmessages_GetChats(MTP_vector(chats)), rpcDone(&ApiWrap::gotChats)); + if (!users.isEmpty()) MTP::send(MTPusers_GetUsers(MTP_vector(users)), rpcDone(&ApiWrap::gotUsers)); +} + void ApiWrap::gotChat(PeerData *peer, const MTPmessages_Chats &result) { _peerRequests.remove(peer); @@ -249,6 +266,14 @@ void ApiWrap::gotUser(PeerData *peer, const MTPVector &result) { } } +void ApiWrap::gotChats(const MTPmessages_Chats &result) { + App::feedChats(result.c_messages_chats().vchats); +} + +void ApiWrap::gotUsers(const MTPVector &result) { + App::feedUsers(result); +} + bool ApiWrap::gotPeerFailed(PeerData *peer, const RPCError &error) { if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false; diff --git a/Telegram/SourceFiles/apiwrap.h b/Telegram/SourceFiles/apiwrap.h index f73561c4c..a57eb6bd9 100644 --- a/Telegram/SourceFiles/apiwrap.h +++ b/Telegram/SourceFiles/apiwrap.h @@ -32,6 +32,7 @@ public: void requestFullPeer(PeerData *peer); void requestPeer(PeerData *peer); + void requestPeers(const QList &peers); void requestWebPageDelayed(WebPageData *page); void clearWebPageRequest(WebPageData *page); @@ -72,6 +73,8 @@ private: void gotChat(PeerData *peer, const MTPmessages_Chats &result); void gotUser(PeerData *peer, const MTPVector &result); + void gotChats(const MTPmessages_Chats &result); + void gotUsers(const MTPVector &result); bool gotPeerFailed(PeerData *peer, const RPCError &err); PeerRequests _peerRequests; diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index 120fae069..ac3773b9e 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -416,6 +416,8 @@ namespace App { bool showPhone = !isServiceUser(data->id) && !(flags & (MTPDuser_flag_self | MTPDuser_flag_contact | MTPDuser_flag_mutual_contact)); bool showPhoneChanged = !isServiceUser(data->id) && !(flags & (MTPDuser_flag_self)) && ((showPhone && data->contact) || (!showPhone && !data->contact)); + // see also Local::readPeer + QString pname = (showPhoneChanged || phoneChanged || nameChanged) ? ((showPhone && !phone.isEmpty()) ? formatPhone(phone) : QString()) : data->nameOrPhone; data->setName(fname, lname, pname, uname); @@ -500,7 +502,6 @@ namespace App { data->count = d.vparticipants_count.v; data->left = d.vleft.v; data->forbidden = false; - data->access = 0; if (data->version < d.vversion.v) { data->version = d.vversion.v; data->participants = ChatData::Participants(); @@ -519,7 +520,6 @@ namespace App { data->count = -1; data->left = false; data->forbidden = true; - data->access = 0; } break; case mtpc_geoChat: { const MTPDgeoChat &d(chat.c_geoChat()); @@ -760,27 +760,23 @@ namespace App { return ImagePtr(); } + StorageImageLocation imageLocation(int32 w, int32 h, const MTPFileLocation &loc) { + if (loc.type() == mtpc_fileLocation) { + const MTPDfileLocation &l(loc.c_fileLocation()); + return StorageImageLocation(w, h, l.vdc_id.v, l.vvolume_id.v, l.vlocal_id.v, l.vsecret.v); + } + return StorageImageLocation(w, h, 0, 0, 0, 0); + } + StorageImageLocation imageLocation(const MTPPhotoSize &size) { switch (size.type()) { case mtpc_photoSize: { const MTPDphotoSize &d(size.c_photoSize()); - if (d.vlocation.type() == mtpc_fileLocation) { - const MTPDfileLocation &l(d.vlocation.c_fileLocation()); - return StorageImageLocation(d.vw.v, d.vh.v, l.vdc_id.v, l.vvolume_id.v, l.vlocal_id.v, l.vsecret.v); - } + return imageLocation(d.vw.v, d.vh.v, d.vlocation); } break; case mtpc_photoCachedSize: { const MTPDphotoCachedSize &d(size.c_photoCachedSize()); - if (d.vlocation.type() == mtpc_fileLocation) { - const MTPDfileLocation &l(d.vlocation.c_fileLocation()); - const string &s(d.vbytes.c_string().v); - QByteArray bytes(s.data(), s.size()); - return StorageImageLocation(d.vw.v, d.vh.v, l.vdc_id.v, l.vvolume_id.v, l.vlocal_id.v, l.vsecret.v); - } else if (d.vlocation.type() == mtpc_fileLocationUnavailable) { - const string &s(d.vbytes.c_string().v); - QByteArray bytes(s.data(), s.size()); - return StorageImageLocation(d.vw.v, d.vh.v, 0, 0, 0, 0); - } + return imageLocation(d.vw.v, d.vh.v, d.vlocation); } break; } return StorageImageLocation(); @@ -1697,6 +1693,8 @@ namespace App { randomData.clear(); mutedPeers.clear(); updatedPeers.clear(); + cSetSavedPeers(SavedPeers()); + cSetSavedPeersByTime(SavedPeersByTime()); for (PeersData::const_iterator i = peersData.cbegin(), e = peersData.cend(); i != e; ++i) { delete *i; } diff --git a/Telegram/SourceFiles/app.h b/Telegram/SourceFiles/app.h index c1befed22..1033ef90d 100644 --- a/Telegram/SourceFiles/app.h +++ b/Telegram/SourceFiles/app.h @@ -127,6 +127,7 @@ namespace App { int32 maxMsgId(); ImagePtr image(const MTPPhotoSize &size); + StorageImageLocation imageLocation(int32 w, int32 h, const MTPFileLocation &loc); StorageImageLocation imageLocation(const MTPPhotoSize &size); PhotoData *feedPhoto(const MTPPhoto &photo, const PreparedPhotoThumbs &thumbs); diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index d4c43461f..1d314fa9b 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -658,8 +658,8 @@ void Application::checkMapVersion() { psRegisterCustomScheme(); if (Local::oldMapVersion()) { QString versionFeatures; - if (cDevVersion() && Local::oldMapVersion() < 8044) { - versionFeatures = QString::fromUtf8("\xe2\x80\x94 Sending media and recording audio status display");// .replace('@', qsl("@") + QChar(0x200D)); + if (cDevVersion() && Local::oldMapVersion() < 8047) { + versionFeatures = QString::fromUtf8("\xe2\x80\x94 Search for messages in conversation\n\xe2\x80\x94 Clear messages history in groups\n\xe2\x80\x94 Contacts without messages are hidden from the conversations list");// .replace('@', qsl("@") + QChar(0x200D)); } else if (!cDevVersion() && Local::oldMapVersion() < 8045) { versionFeatures = lang(lng_new_version_minor).trimmed(); } diff --git a/Telegram/SourceFiles/boxes/contactsbox.cpp b/Telegram/SourceFiles/boxes/contactsbox.cpp index 311b26b6b..c5cec8baa 100644 --- a/Telegram/SourceFiles/boxes/contactsbox.cpp +++ b/Telegram/SourceFiles/boxes/contactsbox.cpp @@ -60,7 +60,7 @@ _byUsernameSel(-1), _addContactLnk(this, lang(lng_add_contact_button)) { DialogsIndexed &v(App::main()->dialogsList()); for (DialogRow *r = v.list.begin; r != v.list.end; r = r->next) { - if (r->history->peer->chat && !r->history->peer->asChat()->forbidden) { + if (r->history->peer->chat && !r->history->peer->asChat()->forbidden && !r->history->peer->asChat()->left) { _contacts->addToEnd(r->history); } } @@ -104,7 +104,7 @@ void ContactsInner::onAddBot() { void ContactsInner::peerUpdated(PeerData *peer) { if (_chat && (!peer || peer == _chat)) { - if (_chat->forbidden) { + if (_chat->forbidden || _chat->left) { App::wnd()->hideLayer(); } else if (!_chat->participants.isEmpty() || _chat->count <= 0) { for (ContactsData::iterator i = _contactsData.begin(), e = _contactsData.end(); i != e; ++i) { @@ -180,11 +180,11 @@ ContactsInner::ContactData *ContactsInner::contactData(DialogRow *row) { if (i == _contactsData.cend()) { _contactsData.insert(peer, data = new ContactData()); data->inchat = (_chat && !peer->chat) ? _chat->participants.contains(peer->asUser()) : false; - data->check = false; + data->check = _checkedContacts.contains(peer); data->name.setText(st::profileListNameFont, peer->name, _textNameOptions); if (peer->chat) { ChatData *chat = peer->asChat(); - if (chat->forbidden) { + if (chat->forbidden || chat->left) { data->online = lang(lng_chat_status_unaccessible); } else { data->online = lng_chat_status_members(lt_count, chat->count); @@ -401,7 +401,7 @@ void ContactsInner::chooseParticipant() { if (_filter.isEmpty()) { if (_byUsernameSel >= 0 && _byUsernameSel < _byUsername.size()) { if (d_byUsername[_byUsernameSel]->inchat) return; - changeCheckState(d_byUsername[_byUsernameSel]); + changeCheckState(d_byUsername[_byUsernameSel], _byUsername[_byUsernameSel]); } else { if (!_sel || contactData(_sel)->inchat) return; changeCheckState(_sel); @@ -409,7 +409,7 @@ void ContactsInner::chooseParticipant() { } else { if (_byUsernameSel >= 0 && _byUsernameSel < _byUsernameFiltered.size()) { if (d_byUsernameFiltered[_byUsernameSel]->inchat) return; - changeCheckState(d_byUsernameFiltered[_byUsernameSel]); + changeCheckState(d_byUsernameFiltered[_byUsernameSel], _byUsernameFiltered[_byUsernameSel]); ContactData *moving = d_byUsernameFiltered[_byUsernameSel]; int32 i = 0, l = d_byUsername.size(); @@ -470,15 +470,17 @@ void ContactsInner::chooseParticipant() { } void ContactsInner::changeCheckState(DialogRow *row) { - changeCheckState(contactData(row)); + changeCheckState(contactData(row), row->history->peer); } -void ContactsInner::changeCheckState(ContactData *data) { +void ContactsInner::changeCheckState(ContactData *data, PeerData *peer) { if (data->check) { data->check = false; + _checkedContacts.remove(peer); --_selCount; } else if (_selCount + (_chat ? _chat->count : 0) < cMaxGroupCount()) { data->check = true; + _checkedContacts.insert(peer, true); ++_selCount; } } @@ -693,7 +695,7 @@ void ContactsInner::peopleReceived(const QString &query, const QVectorinchat = _chat ? _chat->participants.contains(u) : false; - d->check = false; + d->check = _checkedContacts.contains(u); d->name.setText(st::profileListNameFont, u->name, _textNameOptions); d->online = '@' + u->username; @@ -880,6 +882,11 @@ void ContactsInner::selectSkipPage(int32 h, int32 dir) { QVector ContactsInner::selected() { QVector result; + for (DialogRow *row = _contacts->list.begin; row->next; row = row->next) { + if (_checkedContacts.contains(row->history->peer)) { + contactData(row); // fill _contactsData + } + } result.reserve(_contactsData.size()); for (ContactsData::const_iterator i = _contactsData.cbegin(), e = _contactsData.cend(); i != e; ++i) { if (i.value()->check && !i.key()->chat) { @@ -896,10 +903,15 @@ QVector ContactsInner::selected() { QVector ContactsInner::selectedInputs() { QVector result; + for (DialogRow *row = _contacts->list.begin; row->next; row = row->next) { + if (_checkedContacts.contains(row->history->peer)) { + contactData(row); // fill _contactsData + } + } result.reserve(_contactsData.size()); for (ContactsData::const_iterator i = _contactsData.cbegin(), e = _contactsData.cend(); i != e; ++i) { if (i.value()->check && !i.key()->chat) { - result.push_back(i.key()->inputUser); + result.push_back(i.key()->asUser()->inputUser); } } for (int32 i = 0, l = _byUsername.size(); i < l; ++i) { @@ -911,6 +923,11 @@ QVector ContactsInner::selectedInputs() { } PeerData *ContactsInner::selectedUser() { + for (DialogRow *row = _contacts->list.begin; row->next; row = row->next) { + if (_checkedContacts.contains(row->history->peer)) { + contactData(row); // fill _contactsData + } + } for (ContactsData::const_iterator i = _contactsData.cbegin(), e = _contactsData.cend(); i != e; ++i) { if (i.value()->check) { return i.key(); diff --git a/Telegram/SourceFiles/boxes/contactsbox.h b/Telegram/SourceFiles/boxes/contactsbox.h index 7fd8fc834..5b59f8a63 100644 --- a/Telegram/SourceFiles/boxes/contactsbox.h +++ b/Telegram/SourceFiles/boxes/contactsbox.h @@ -53,7 +53,7 @@ public: void loadProfilePhotos(int32 yFrom); void chooseParticipant(); void changeCheckState(DialogRow *row); - void changeCheckState(ContactData *data); + void changeCheckState(ContactData *data, PeerData *peer); void peopleReceived(const QString &query, const QVector &people); @@ -109,6 +109,8 @@ private: }; typedef QMap ContactsData; ContactsData _contactsData; + typedef QMap CheckedContacts; + CheckedContacts _checkedContacts; ContactData *contactData(DialogRow *row); diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 377fea046..3a7421a80 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,9 +17,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8046; -static const wchar_t *AppVersionStr = L"0.8.46"; -static const bool DevVersion = false; +static const int32 AppVersion = 8047; +static const wchar_t *AppVersionStr = L"0.8.47"; +static const bool DevVersion = true; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index 427f87d3f..771efe276 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -86,12 +86,12 @@ void DialogsListWidget::paintEvent(QPaintEvent *e) { if (otherStart) { dialogs.list.paint(p, width(), r.top(), r.bottom(), active, selected); } - if (contactsNoDialogs.list.count) { + if (contactsNoDialogs.list.count && false) { contactsNoDialogs.list.paint(p, width(), r.top() - otherStart, r.bottom() - otherStart, active, selected); } else if (!otherStart) { p.setFont(st::noContactsFont->f); p.setPen(st::noContactsColor->p); - p.drawText(QRect(0, 0, width(), st::noContactsHeight - (cContactsReceived() ? st::noContactsFont->height : 0)), lang(cContactsReceived() ? lng_no_contacts : lng_contacts_loading), style::al_center); + p.drawText(QRect(0, 0, width(), st::noContactsHeight - (cContactsReceived() ? st::noContactsFont->height : 0)), lang(cContactsReceived() ? lng_no_chats : lng_contacts_loading), style::al_center); } } else if (_state == FilteredState || _state == SearchedState) { if (!hashtagResults.isEmpty()) { @@ -317,7 +317,7 @@ void DialogsListWidget::onUpdateSelected(bool force) { if (newSel) { contactSel = false; } else { - newSel = contactsNoDialogs.list.rowAtY(mouseY - otherStart, st::dlgHeight); + newSel = 0;// contactsNoDialogs.list.rowAtY(mouseY - otherStart, st::dlgHeight); contactSel = true; } if (newSel != sel) { @@ -442,6 +442,8 @@ void DialogsListWidget::removePeer(PeerData *peer) { } } + Local::removeSavedPeer(peer); + emit App::main()->dialogsUpdated(); refresh(); @@ -481,7 +483,7 @@ void DialogsListWidget::dlgUpdated(History *history) { if (i != dialogs.list.rowByPeer.cend()) { update(0, i.value()->pos * st::dlgHeight, width(), st::dlgHeight); } else { - i = contactsNoDialogs.list.rowByPeer.find(history->peer->id); + i = contactsNoDialogs.list.rowByPeer.end();// find(history->peer->id); if (i != contactsNoDialogs.list.rowByPeer.cend()) { update(0, (dialogs.list.count + i.value()->pos) * st::dlgHeight, width(), st::dlgHeight); } @@ -771,6 +773,16 @@ void DialogsListWidget::dialogsReceived(const QVector &added) { refresh(); } +void DialogsListWidget::addAllSavedPeers() { + SavedPeersByTime &saved(cRefSavedPeersByTime()); + while (!saved.isEmpty()) { + History *history = App::history(saved.last()->id); + history->dialogs = dialogs.addToEnd(history); + contactsNoDialogs.del(history->peer); + saved.remove(saved.lastKey(), saved.last()); + } +} + void DialogsListWidget::searchReceived(const QVector &messages, bool fromStart, int32 fullCount) { if (fromStart) { clearSearchResults(false); @@ -810,7 +822,7 @@ void DialogsListWidget::contactsReceived(const QVector &contacts) { App::self()->contact = 1; } } - if (!sel && contactsNoDialogs.list.count) { + if (!sel && contactsNoDialogs.list.count && false) { sel = contactsNoDialogs.list.begin; contactSel = true; } @@ -827,11 +839,11 @@ int32 DialogsListWidget::addNewContact(int32 uid, bool select) { if (i == dialogs.list.rowByPeer.cend()) { DialogRow *added = contactsNoDialogs.addByName(history); if (!added) return -1; - if (select) { + if (select && false) { sel = added; contactSel = true; } - if (contactsNoDialogs.list.count == 1 && !dialogs.list.count) refresh(); +// if (contactsNoDialogs.list.count == 1 && !dialogs.list.count) refresh(); return added ? ((dialogs.list.count + added->pos) * st::dlgHeight) : -1; } if (select) { @@ -844,7 +856,7 @@ int32 DialogsListWidget::addNewContact(int32 uid, bool select) { void DialogsListWidget::refresh(bool toTop) { int32 h = 0; if (_state == DefaultState) { - h = (dialogs.list.count + contactsNoDialogs.list.count) * st::dlgHeight; + h = (dialogs.list.count/* + contactsNoDialogs.list.count*/) * st::dlgHeight; if (h) { if (!_addContactLnk.isHidden()) _addContactLnk.hide(); } else { @@ -936,6 +948,15 @@ void DialogsListWidget::clearFilter() { void DialogsListWidget::addDialog(const MTPDdialog &dialog) { History *history = App::history(App::peerFromMTP(dialog.vpeer), dialog.vunread_count.v, dialog.vread_inbox_max_id.v); + if (history->lastMsg) { + SavedPeersByTime &saved(cRefSavedPeersByTime()); + while (!saved.isEmpty() && history->lastMsg->date < saved.lastKey()) { + History *history = App::history(saved.last()->id); + history->dialogs = dialogs.addToEnd(history); + contactsNoDialogs.del(history->peer); + saved.remove(saved.lastKey(), saved.last()); + } + } History::DialogLinks links = dialogs.addToEnd(history); history->dialogs = links; contactsNoDialogs.del(history->peer); @@ -1714,6 +1735,7 @@ void DialogsWidget::onSearchMore(MsgId minMsgId) { void DialogsWidget::loadDialogs() { if (dlgPreloading) return; if (dlgCount >= 0 && dlgOffset >= dlgCount) { + list.addAllSavedPeers(); cSetDialogsReceived(true); return; } diff --git a/Telegram/SourceFiles/dialogswidget.h b/Telegram/SourceFiles/dialogswidget.h index ec7c1fa13..036a7695a 100644 --- a/Telegram/SourceFiles/dialogswidget.h +++ b/Telegram/SourceFiles/dialogswidget.h @@ -27,6 +27,7 @@ public: DialogsListWidget(QWidget *parent, MainWidget *main); void dialogsReceived(const QVector &dialogs); + void addAllSavedPeers(); void searchReceived(const QVector &messages, bool fromStart, int32 fullCount); void peopleReceived(const QString &query, const QVector &people); void showMore(int32 pixels); diff --git a/Telegram/SourceFiles/gui/images.h b/Telegram/SourceFiles/gui/images.h index c0d9ecd88..8ebec1dc2 100644 --- a/Telegram/SourceFiles/gui/images.h +++ b/Telegram/SourceFiles/gui/images.h @@ -29,6 +29,9 @@ struct StorageImageLocation { } StorageImageLocation(int32 width, int32 height, const MTPDfileLocation &location) : width(width), height(height), dc(location.vdc_id.v), volume(location.vvolume_id.v), local(location.vlocal_id.v), secret(location.vsecret.v) { } + bool isNull() const { + return !dc; + } int32 width, height; int32 dc; uint64 volume; @@ -36,6 +39,13 @@ struct StorageImageLocation { uint64 secret; }; +inline bool operator==(const StorageImageLocation &a, const StorageImageLocation &b) { + return !memcmp(&a, &b, sizeof(StorageImageLocation)); +} +inline bool operator!=(const StorageImageLocation &a, const StorageImageLocation &b) { + return !(a == b); +} + class Image { public: diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 2716d1c4d..a486510a7 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -613,7 +613,7 @@ HistoryItem *Histories::addToBack(const MTPmessage &msg, int msgState) { if (!h.value()->loadedAtBottom()) { HistoryItem *item = h.value()->addToHistory(msg); if (item) { - h.value()->lastMsg = item; + h.value()->setLastMessage(item); if (msgState > 0) { h.value()->newItemAdded(item); } @@ -908,7 +908,8 @@ HistoryItem *History::doAddToBack(HistoryBlock *to, bool newBlock, HistoryItem * } } to->push_back(adding); - lastMsg = adding; + setLastMessage(adding); + adding->y = to->height; if (width) { int32 dh = adding->resize(width); @@ -919,6 +920,7 @@ HistoryItem *History::doAddToBack(HistoryBlock *to, bool newBlock, HistoryItem * if (newMsg) { newItemAdded(adding); } + HistoryMedia *media = adding->getMedia(true); if (media) { HistoryMediaType mt = media->type(); @@ -1414,14 +1416,24 @@ void History::getReadyFor(MsgId msgId) { } } +void History::setLastMessage(HistoryItem *msg) { + if (msg) { + if (!lastMsg) Local::removeSavedPeer(peer); + lastMsg = msg; + lastMsgDate = msg->date; + } else { + lastMsg = 0; + } +} + void History::fixLastMessage(bool wasAtBottom) { if (wasAtBottom && isEmpty()) { wasAtBottom = false; } if (wasAtBottom) { - lastMsg = back()->back(); + setLastMessage(back()->back()); } else { - lastMsg = 0; + setLastMessage(0); if (App::main()) { App::main()->checkPeerHistory(peer); } @@ -1482,7 +1494,7 @@ void History::clear(bool leaveItems) { showFrom = 0; } if (!leaveItems) { - lastMsg = 0; + setLastMessage(0); } for (int32 i = 0; i < OverviewCount; ++i) { if (!_overview[i].isEmpty() || !_overviewIds[i].isEmpty()) { diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index 9e4a0810f..1379928b5 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -204,6 +204,7 @@ struct History : public QList { bool isReadyFor(MsgId msgId, bool check = false) const; // has messages for showing history at msgId void getReadyFor(MsgId msgId); + void setLastMessage(HistoryItem *msg); void fixLastMessage(bool wasAtBottom); MsgId minMsgId() const; @@ -218,6 +219,7 @@ struct History : public QList { PeerData *peer; bool oldLoaded, newLoaded; HistoryItem *lastMsg; + QDateTime lastMsgDate; typedef QList NotifyQueue; NotifyQueue notifies; @@ -446,11 +448,11 @@ struct DialogsList { DialogRow *row = addToEnd(history), *change = row; const QString &peerName(history->peer->name); - while (change->prev && change->prev->history->peer->name > peerName) { + while (change->prev && change->prev->history->peer->name.compare(peerName, Qt::CaseInsensitive) > 0) { change = change->prev; } if (!insertBefore(row, change)) { - while (change->next != end && change->next->history->peer->name < peerName) { + while (change->next != end && change->next->history->peer->name.compare(peerName, Qt::CaseInsensitive) < 0) { change = change->next; } insertAfter(row, change); diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index aaf668f36..6e506cc1a 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -2724,7 +2724,7 @@ void HistoryWidget::showPeerHistory(const PeerId &peerId, MsgId showAtMsgId) { update(); return; } - if (_history->mySendActions.contains(SendActionTyping)) updateSendAction(_history, SendActionTyping, false); + if (_history->mySendActions.contains(SendActionTyping)) updateSendAction(_history, SendActionTyping, -1); } stopGif(); @@ -2912,7 +2912,7 @@ void HistoryWidget::updateControlsVisibility() { } else { _scroll.show(); } - if (!_peer->chat || !_peer->asChat()->forbidden) { + if ((_peer->chat && !_peer->asChat()->forbidden && !_peer->asChat()->left) || (!_peer->chat && _peer->asUser()->access != UserNoAccess)) { checkMentionDropdown(); if (isBotStart()) { if (_botStart.isHidden()) { @@ -4002,7 +4002,7 @@ void HistoryWidget::updateOnlineDisplay(int32 x, int32 w) { int32 t = unixtime(); if (_peer->chat) { ChatData *chat = _peer->asChat(); - if (chat->forbidden) { + if (chat->forbidden || chat->left) { text = lang(lng_chat_status_unaccessible); } else if (chat->participants.isEmpty()) { text = _titlePeerText.isEmpty() ? lng_chat_status_members(lt_count, chat->count < 0 ? 0 : chat->count) : _titlePeerText; @@ -4391,7 +4391,7 @@ void HistoryWidget::onAudioProgress(MsgId newId) { HistoryItem *item = App::histItemById(newId); if (item) { AudioData *audio = (item->getMedia() && item->getMedia()->type() == MediaTypeAudio) ? static_cast(item->getMedia())->audio() : 0; - updateSendAction(item->history(), SendActionUploadAudio, audio->uploadOffset); + updateSendAction(item->history(), SendActionUploadAudio, audio ? audio->uploadOffset : 0); msgUpdated(item->history()->peer->id, item); } } @@ -4540,7 +4540,7 @@ void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown, if (isBotStart()) { newScrollHeight -= _botStart.height(); } else { - if (!_peer->chat || !_peer->asChat()->forbidden) { + if ((_peer->chat && !_peer->asChat()->forbidden && !_peer->asChat()->left) || (!_peer->chat && _peer->asUser()->access != UserNoAccess)) { newScrollHeight -= (_field.height() + 2 * st::sendPadding); } if (replyToId() || App::main()->hasForwardingItems() || (_previewData && _previewData->pendingTill >= 0)) { diff --git a/Telegram/SourceFiles/localstorage.cpp b/Telegram/SourceFiles/localstorage.cpp index bf141a300..b3036fce4 100644 --- a/Telegram/SourceFiles/localstorage.cpp +++ b/Telegram/SourceFiles/localstorage.cpp @@ -18,6 +18,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "stdafx.h" #include "localstorage.h" +#include "mainwidget.h" #include "lang.h" namespace { @@ -505,6 +506,7 @@ namespace { lskUserSettings = 0x09, // no data lskRecentHashtags = 0x0a, // no data lskStickers = 0x0b, // no data + lskSavedPeers = 0x0c, // no data }; typedef QMap DraftsMap; @@ -530,6 +532,8 @@ namespace { FileKey _recentHashtagsKey = 0; bool _recentHashtagsWereRead = false; + FileKey _savedPeersKey = 0; + typedef QPair FileDesc; // file, size typedef QMap StorageMap; StorageMap _imagesMap, _stickerImagesMap, _audiosMap; @@ -1432,7 +1436,7 @@ namespace { DraftsNotReadMap draftsNotReadMap; StorageMap imagesMap, stickerImagesMap, audiosMap; qint64 storageImagesSize = 0, storageStickersSize = 0, storageAudiosSize = 0; - quint64 locationsKey = 0, recentStickersKeyOld = 0, stickersKey = 0, backgroundKey = 0, userSettingsKey = 0, recentHashtagsKey = 0; + quint64 locationsKey = 0, recentStickersKeyOld = 0, stickersKey = 0, backgroundKey = 0, userSettingsKey = 0, recentHashtagsKey = 0, savedPeersKey = 0; while (!map.stream.atEnd()) { quint32 keyType; map.stream >> keyType; @@ -1512,6 +1516,9 @@ namespace { case lskStickers: { map.stream >> stickersKey; } break; + case lskSavedPeers: { + map.stream >> savedPeersKey; + } break; default: LOG(("App Error: unknown key type in encrypted map: %1").arg(keyType)); return Local::ReadMapFailed; @@ -1535,6 +1542,7 @@ namespace { _locationsKey = locationsKey; _recentStickersKeyOld = recentStickersKeyOld; _stickersKey = stickersKey; + _savedPeersKey = savedPeersKey; _backgroundKey = backgroundKey; _userSettingsKey = userSettingsKey; _recentHashtagsKey = recentHashtagsKey; @@ -1599,6 +1607,7 @@ namespace { if (_locationsKey) mapSize += sizeof(quint32) + sizeof(quint64); if (_recentStickersKeyOld) mapSize += sizeof(quint32) + sizeof(quint64); if (_stickersKey) mapSize += sizeof(quint32) + sizeof(quint64); + if (_savedPeersKey) mapSize += sizeof(quint32) + sizeof(quint64); if (_backgroundKey) mapSize += sizeof(quint32) + sizeof(quint64); if (_userSettingsKey) mapSize += sizeof(quint32) + sizeof(quint64); if (_recentHashtagsKey) mapSize += sizeof(quint32) + sizeof(quint64); @@ -1642,6 +1651,9 @@ namespace { if (_stickersKey) { mapData.stream << quint32(lskStickers) << quint64(_stickersKey); } + if (_savedPeersKey) { + mapData.stream << quint32(lskSavedPeers) << quint64(_savedPeersKey); + } if (_backgroundKey) { mapData.stream << quint32(lskBackground) << quint64(_backgroundKey); } @@ -1900,7 +1912,7 @@ namespace Local { _draftsNotReadMap.clear(); _stickerImagesMap.clear(); _audiosMap.clear(); - _locationsKey = _recentStickersKeyOld = _stickersKey = _backgroundKey = _userSettingsKey = _recentHashtagsKey = 0; + _locationsKey = _recentStickersKeyOld = _stickersKey = _backgroundKey = _userSettingsKey = _recentHashtagsKey = _savedPeersKey = 0; _mapChanged = true; _writeMap(WriteMapNow); @@ -2293,6 +2305,23 @@ namespace Local { return _storageAudiosSize; } + void _writeStorageImageLocation(QDataStream &stream, const StorageImageLocation &loc) { + stream << qint32(loc.width) << qint32(loc.height); + stream << qint32(loc.dc) << quint64(loc.volume) << qint32(loc.local) << quint64(loc.secret); + } + + uint32 _storageImageLocationSize() { + // width + height + dc + volume + local + secret + return sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(quint64) + sizeof(qint32) + sizeof(quint64); + } + + StorageImageLocation _readStorageImageLocation(FileReadDescriptor &from) { + qint32 thumbWidth, thumbHeight, thumbDc, thumbLocal; + quint64 thumbVolume, thumbSecret; + from.stream >> thumbWidth >> thumbHeight >> thumbDc >> thumbVolume >> thumbLocal >> thumbSecret; + return StorageImageLocation(thumbWidth, thumbHeight, thumbDc, thumbVolume, thumbLocal, thumbSecret); + } + void _writeStickerSet(QDataStream &stream, uint64 setId) { StickerSets::const_iterator it = cStickerSets().constFind(setId); if (it == cStickerSets().cend()) return; @@ -2321,8 +2350,7 @@ namespace Local { stream << qint32(StickerSetTypeEmpty); } break; } - const StorageImageLocation &loc(doc->sticker()->loc); - stream << qint32(loc.width) << qint32(loc.height) << qint32(loc.dc) << quint64(loc.volume) << qint32(loc.local) << quint64(loc.secret); + _writeStorageImageLocation(stream, doc->sticker()->loc); } } @@ -2358,8 +2386,8 @@ namespace Local { // id + access + date + namelen + name + mimelen + mime + dc + size + width + height + type + alt + type-of-set size += sizeof(quint64) + sizeof(quint64) + sizeof(qint32) + _stringSize(doc->name) + _stringSize(doc->mime) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + _stringSize(doc->sticker()->alt) + sizeof(qint32); - // thumb-width + thumb-height + thumb-dc + thumb-volume + thumb-local + thumb-secret - size += sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(quint64) + sizeof(qint32) + sizeof(quint64); + // loc + size += _storageImageLocationSize(); } ++setsCount; } @@ -2519,9 +2547,7 @@ namespace Local { qint32 date, dc, size, width, height, type, typeOfSet; stickers.stream >> id >> access >> date >> name >> mime >> dc >> size >> width >> height >> type >> alt >> typeOfSet; - qint32 thumbWidth, thumbHeight, thumbDc, thumbLocal; - quint64 thumbVolume, thumbSecret; - stickers.stream >> thumbWidth >> thumbHeight >> thumbDc >> thumbVolume >> thumbLocal >> thumbSecret; + StorageImageLocation thumb(_readStorageImageLocation(stickers)); if (read.contains(id)) continue; read.insert(id, true); @@ -2552,7 +2578,6 @@ namespace Local { attributes.push_back(MTP_documentAttributeImageSize(MTP_int(width), MTP_int(height))); } - StorageImageLocation thumb(thumbWidth, thumbHeight, thumbDc, thumbVolume, thumbLocal, thumbSecret); DocumentData *doc = App::documentSet(id, 0, access, date, attributes, mime, thumb.dc ? ImagePtr(thumb) : ImagePtr(), dc, size, thumb); if (!doc->sticker()) continue; @@ -2705,6 +2730,193 @@ namespace Local { cSetRecentSearchHashtags(search); } + uint32 _peerSize(PeerData *peer) { + uint32 result = sizeof(quint64) + sizeof(quint64) + _storageImageLocationSize(); + if (peer->chat) { + ChatData *chat = peer->asChat(); + + // name + count + date + version + admin + forbidden + left + invitationUrl + result += _stringSize(chat->name) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32) + _stringSize(chat->invitationUrl); + } else { + UserData *user = peer->asUser(); + + // first + last + phone + username + access + onlineTill + contact + botInfoVersion + result += _stringSize(user->firstName) + _stringSize(user->lastName) + _stringSize(user->phone) + _stringSize(user->username) + sizeof(quint64) + sizeof(qint32) + sizeof(qint32) + sizeof(qint32); + } + return result; + } + + void _writePeer(QDataStream &stream, PeerData *peer) { + stream << quint64(peer->id) << quint64(peer->photoId); + _writeStorageImageLocation(stream, peer->photoLoc); + if (peer->chat) { + ChatData *chat = peer->asChat(); + + stream << chat->name << qint32(chat->count) << qint32(chat->date) << qint32(chat->version) << qint32(chat->admin); + stream << qint32(chat->forbidden ? 1 : 0) << qint32(chat->left ? 1 : 0) << chat->invitationUrl; + } else { + UserData *user = peer->asUser(); + + stream << user->firstName << user->lastName << user->phone << user->username << quint64(user->access) << qint32(user->onlineTill) << qint32(user->contact) << qint32(user->botInfo ? user->botInfo->version : -1); + } + } + + PeerData *_readPeer(FileReadDescriptor &from) { + PeerData *result = 0; + quint64 peerId = 0, photoId = 0; + from.stream >> peerId >> photoId; + + StorageImageLocation photoLoc(_readStorageImageLocation(from)); + + result = App::peer(peerId); + result->loaded = true; + if (result->chat) { + ChatData *chat = result->asChat(); + + QString name, invitationUrl; + qint32 count, date, version, admin, forbidden, left; + from.stream >> name >> count >> date >> version >> admin >> forbidden >> left >> invitationUrl; + + chat->updateName(name, QString(), QString()); + chat->count = count; + chat->date = date; + chat->version = version; + chat->admin = admin; + chat->forbidden = (forbidden == 1); + chat->left = (left == 1); + chat->invitationUrl = invitationUrl; + + chat->input = MTP_inputPeerChat(MTP_int(App::chatFromPeer(chat->id))); + + chat->photo = photoLoc.isNull() ? ImagePtr(chatDefPhoto(chat->colorIndex)) : ImagePtr(photoLoc); + } else { + UserData *user = result->asUser(); + + QString first, last, phone, username; + quint64 access; + qint32 onlineTill, contact, botInfoVersion; + from.stream >> first >> last >> phone >> username >> access >> onlineTill >> contact >> botInfoVersion; + + bool showPhone = !isServiceUser(user->id) && (user->id != MTP::authedId()) && (contact <= 0); + QString pname = (showPhone && !phone.isEmpty()) ? App::formatPhone(phone) : QString(); + + user->setName(first, last, pname, username); + + user->access = access; + user->onlineTill = onlineTill; + user->contact = contact; + user->setBotInfoVersion(botInfoVersion); + + if (user->id == MTP::authedId()) { + user->input = MTP_inputPeerSelf(); + user->inputUser = MTP_inputUserSelf(); + } else if (user->contact > 0 || !user->access) { + user->input = MTP_inputPeerContact(MTP_int(App::userFromPeer(user->id))); + user->inputUser = MTP_inputUserContact(MTP_int(App::userFromPeer(user->id))); + } else { + user->input = MTP_inputPeerForeign(MTP_int(App::userFromPeer(user->id)), MTP_long(user->access)); + user->inputUser = MTP_inputUserForeign(MTP_int(App::userFromPeer(user->id)), MTP_long(user->access)); + } + + user->photo = photoLoc.isNull() ? ImagePtr(userDefPhoto(user->colorIndex)) : ImagePtr(photoLoc); + } + App::markPeerUpdated(result); + emit App::main()->peerPhotoChanged(result); + return result; + } + + void writeSavedPeers() { + if (!_working()) return; + + const SavedPeers &saved(cSavedPeers()); + if (saved.isEmpty()) { + if (_savedPeersKey) { + clearKey(_savedPeersKey); + _savedPeersKey = 0; + _mapChanged = true; + } + _writeMap(); + } else { + if (!_savedPeersKey) { + _savedPeersKey = genKey(); + _mapChanged = true; + _writeMap(WriteMapFast); + } + quint32 size = sizeof(quint32); + for (SavedPeers::const_iterator i = saved.cbegin(); i != saved.cend(); ++i) { + size += _peerSize(i.key()) + _dateTimeSize(); + } + + EncryptedDescriptor data(size); + data.stream << quint32(saved.size()); + for (SavedPeers::const_iterator i = saved.cbegin(); i != saved.cend(); ++i) { + _writePeer(data.stream, i.key()); + data.stream << i.value(); + } + + FileWriteDescriptor file(_savedPeersKey); + file.writeEncrypted(data); + } + } + + void readSavedPeers() { + if (!_savedPeersKey) return; + + FileReadDescriptor saved; + if (!readEncryptedFile(saved, _savedPeersKey)) { + clearKey(_savedPeersKey); + _savedPeersKey = 0; + _writeMap(); + return; + } + + quint32 count = 0; + saved.stream >> count; + cRefSavedPeers().clear(); + cRefSavedPeersByTime().clear(); + QList peers; + peers.reserve(count); + for (uint32 i = 0; i < count; ++i) { + PeerData *peer = _readPeer(saved); + if (!peer) break; + + QDateTime t; + saved.stream >> t; + + cRefSavedPeers().insert(peer, t); + cRefSavedPeersByTime().insert(t, peer); + peers.push_back(peer); + } + App::emitPeerUpdated(); + App::api()->requestPeers(peers); + } + + void addSavedPeer(PeerData *peer, const QDateTime &position) { + SavedPeers &savedPeers(cRefSavedPeers()); + SavedPeers::iterator i = savedPeers.find(peer); + if (i == savedPeers.cend()) { + savedPeers.insert(peer, position); + } else if (i.value() != position) { + cRefSavedPeersByTime().remove(i.value(), peer); + i.value() = position; + cRefSavedPeersByTime().insert(i.value(), peer); + } + writeSavedPeers(); + } + + void removeSavedPeer(PeerData *peer) { + SavedPeers &savedPeers(cRefSavedPeers()); + if (savedPeers.isEmpty()) return; + + SavedPeers::iterator i = savedPeers.find(peer); + if (i != savedPeers.cend()) { + cRefSavedPeersByTime().remove(i.value(), peer); + savedPeers.erase(i); + + writeSavedPeers(); + } + } + struct ClearManagerData { QThread *thread; StorageMap images, stickers, audios; @@ -2764,6 +2976,10 @@ namespace Local { _recentHashtagsKey = 0; _mapChanged = true; } + if (_savedPeersKey) { + _savedPeersKey = 0; + _mapChanged = true; + } _writeMap(); } else { if (task & ClearManagerStorage) { diff --git a/Telegram/SourceFiles/localstorage.h b/Telegram/SourceFiles/localstorage.h index d3df02d3b..65fe3c7cf 100644 --- a/Telegram/SourceFiles/localstorage.h +++ b/Telegram/SourceFiles/localstorage.h @@ -141,4 +141,8 @@ namespace Local { void writeRecentHashtags(); void readRecentHashtags(); + void addSavedPeer(PeerData *peer, const QDateTime &position); + void removeSavedPeer(PeerData *peer); + void readSavedPeers(); + }; diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 47922db5b..0013557e3 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -788,7 +788,7 @@ void MainWidget::deleteConversation(PeerData *peer) { void MainWidget::clearHistory(PeerData *peer) { History *h = App::history(peer->id); if (h->lastMsg) { -// Local::savePeerPosition(h->peer, h->lastMsg->date); + Local::addSavedPeer(h->peer, h->lastMsg->date); } h->clear(); h->newLoaded = h->oldLoaded = true; @@ -813,6 +813,8 @@ bool MainWidget::addParticipantFail(UserData *user, const RPCError &error) { QString text = lang(lng_failed_add_participant); if (error.type() == "USER_LEFT_CHAT") { // trying to return banned user to his group + } else if (error.type() == "USER_NOT_MUTUAL_CONTACT") { // trying to return user who does not have me in contacts + text = lang(lng_failed_add_not_mutual); } else if (error.type() == "USER_ALREADY_PARTICIPANT" && user->botInfo) { text = lang(lng_bot_already_in_group); } @@ -856,7 +858,12 @@ void MainWidget::checkedHistory(PeerData *peer, const MTPmessages_Messages &resu if ((profile && profile->peer() == peer) || (overview && overview->peer() == peer) || _stack.contains(peer) || history.peer() == peer) { showDialogs(); } - dialogs.removePeer(peer); + if (peer->chat && peer->asChat()->left) { + dialogs.removePeer(peer); + } else { + History *h = App::historyLoaded(peer->id); + if (h) Local::addSavedPeer(peer, h->lastMsgDate); + } } else { History *h = App::historyLoaded(peer->id); if (!h->lastMsg) { @@ -2757,6 +2764,8 @@ void MainWidget::start(const MTPUser &user) { Local::writeMtpData(); } + Local::readSavedPeers(); + cSetOtherOnline(0); App::feedUsers(MTP_vector(1, user)); App::app()->startUpdateCheck(); diff --git a/Telegram/SourceFiles/settings.cpp b/Telegram/SourceFiles/settings.cpp index b8eb89701..a9a61afba 100644 --- a/Telegram/SourceFiles/settings.cpp +++ b/Telegram/SourceFiles/settings.cpp @@ -159,6 +159,9 @@ int gOtherOnline = 0; float64 gSongVolume = 0.9; +SavedPeers gSavedPeers; +SavedPeersByTime gSavedPeersByTime; + void settingsParseArgs(int argc, char *argv[]) { gCustomNotifies = true; #ifdef Q_OS_MAC diff --git a/Telegram/SourceFiles/settings.h b/Telegram/SourceFiles/settings.h index 7443c09e0..f5b577fbf 100644 --- a/Telegram/SourceFiles/settings.h +++ b/Telegram/SourceFiles/settings.h @@ -308,4 +308,10 @@ DeclareSetting(int, OtherOnline); DeclareSetting(float64, SongVolume); +struct PeerData; +typedef QMap SavedPeers; +typedef QMultiMap SavedPeersByTime; +DeclareRefSetting(SavedPeers, SavedPeers); +DeclareRefSetting(SavedPeersByTime, SavedPeersByTime); + void settingsParseArgs(int argc, char *argv[]); diff --git a/Telegram/SourceFiles/structs.cpp b/Telegram/SourceFiles/structs.cpp index d60be556e..080b346af 100644 --- a/Telegram/SourceFiles/structs.cpp +++ b/Telegram/SourceFiles/structs.cpp @@ -90,10 +90,10 @@ NotifySettingsPtr globalNotifyAllPtr = UnknownNotifySettings, globalNotifyUsersP PeerData::PeerData(const PeerId &id) : id(id) , loaded(false) , chat(App::isChat(id)) -, access(0) , colorIndex(peerColorIndex(id)) , color(peerColor(colorIndex)) , photo(chat ? chatDefPhoto(colorIndex) : userDefPhoto(colorIndex)) +, photoId(UnknownPeerPhotoId) , nameVersion(0) , notify(UnknownNotifySettings) { @@ -132,14 +132,16 @@ void PeerData::updateName(const QString &newName, const QString &newNameOrPhone, } } -void UserData::setPhoto(const MTPUserProfilePhoto &p) { +void UserData::setPhoto(const MTPUserProfilePhoto &p) { // see Local::readPeer as well PhotoId newPhotoId = photoId; ImagePtr newPhoto = photo; + StorageImageLocation newPhotoLoc = photoLoc; switch (p.type()) { case mtpc_userProfilePhoto: { const MTPDuserProfilePhoto d(p.c_userProfilePhoto()); newPhotoId = d.vphoto_id.v; - newPhoto = ImagePtr(160, 160, d.vphoto_small, userDefPhoto(colorIndex)); + newPhotoLoc = App::imageLocation(160, 160, d.vphoto_small); + newPhoto = newPhotoLoc.isNull() ? userDefPhoto(colorIndex) : ImagePtr(newPhotoLoc); //App::feedPhoto(App::photoFromUserPhoto(MTP_int(id & 0xFFFFFFFF), MTP_int(unixtime()), p)); } break; default: { @@ -151,11 +153,13 @@ void UserData::setPhoto(const MTPUserProfilePhoto &p) { } else { newPhoto = userDefPhoto(colorIndex); } + newPhotoLoc = StorageImageLocation(); } break; } - if (newPhotoId != photoId || newPhoto.v() != photo.v()) { + if (newPhotoId != photoId || newPhoto.v() != photo.v() || newPhotoLoc != photoLoc) { photoId = newPhotoId; photo = newPhoto; + photoLoc = newPhotoLoc; emit App::main()->peerPhotoChanged(this); } } @@ -226,6 +230,7 @@ void UserData::setBotInfoVersion(int32 version) { botInfo->inited = false; } } + void UserData::setBotInfo(const MTPBotInfo &info) { switch (info.type()) { case mtpc_botInfoEmpty: @@ -305,23 +310,33 @@ void UserData::madeAction() { } } -void ChatData::setPhoto(const MTPChatPhoto &p, const PhotoId &phId) { +void ChatData::setPhoto(const MTPChatPhoto &p, const PhotoId &phId) { // see Local::readPeer as well + PhotoId newPhotoId = photoId; + ImagePtr newPhoto = photo; + StorageImageLocation newPhotoLoc = photoLoc; switch (p.type()) { case mtpc_chatPhoto: { const MTPDchatPhoto d(p.c_chatPhoto()); - photo = ImagePtr(160, 160, d.vphoto_small, chatDefPhoto(colorIndex)); - photoFull = ImagePtr(640, 640, d.vphoto_big, chatDefPhoto(colorIndex)); if (phId != UnknownPeerPhotoId) { - photoId = phId; + newPhotoId = phId; } + newPhotoLoc = App::imageLocation(160, 160, d.vphoto_small); + newPhoto = newPhotoLoc.isNull() ? chatDefPhoto(colorIndex) : ImagePtr(newPhotoLoc); +// photoFull = ImagePtr(640, 640, d.vphoto_big, chatDefPhoto(colorIndex)); } break; default: { - photo = chatDefPhoto(colorIndex); - photoFull = ImagePtr(); - photoId = 0; + newPhotoId = 0; + newPhotoLoc = StorageImageLocation(); + newPhoto = chatDefPhoto(colorIndex); +// photoFull = ImagePtr(); } break; } - emit App::main()->peerPhotoChanged(this); + if (newPhotoId != photoId || newPhoto.v() != photo.v() || newPhotoLoc != photoLoc) { + photoId = newPhotoId; + photo = newPhoto; + photoLoc = newPhotoLoc; + emit App::main()->peerPhotoChanged(this); + } } void PhotoLink::onClick(Qt::MouseButton button) const { diff --git a/Telegram/SourceFiles/structs.h b/Telegram/SourceFiles/structs.h index 152d47b1c..6bcdd6c5c 100644 --- a/Telegram/SourceFiles/structs.h +++ b/Telegram/SourceFiles/structs.h @@ -59,8 +59,10 @@ style::color peerColor(int32 index); ImagePtr userDefPhoto(int32 index); ImagePtr chatDefPhoto(int32 index); -struct ChatData; +static const PhotoId UnknownPeerPhotoId = 0xFFFFFFFFFFFFFFFFULL; + struct UserData; +struct ChatData; struct PeerData { PeerData(const PeerId &id); virtual ~PeerData() { @@ -94,13 +96,13 @@ struct PeerData { bool loaded; bool chat; - uint64 access; MTPinputPeer input; - MTPinputUser inputUser; int32 colorIndex; style::color color; ImagePtr photo; + PhotoId photoId; + StorageImageLocation photoLoc; int32 nameVersion; @@ -165,11 +167,9 @@ struct BotInfo { QString startToken, startGroupToken; }; -static const PhotoId UnknownPeerPhotoId = 0xFFFFFFFFFFFFFFFFULL; - struct PhotoData; struct UserData : public PeerData { - UserData(const PeerId &id) : PeerData(id), photoId(UnknownPeerPhotoId), lnk(new PeerLink(this)), onlineTill(0), contact(-1), photosCount(-1), botInfo(0) { + UserData(const PeerId &id) : PeerData(id), access(0), lnk(new PeerLink(this)), onlineTill(0), contact(-1), photosCount(-1), botInfo(0) { } void setPhoto(const MTPUserProfilePhoto &photo); void setName(const QString &first, const QString &last, const QString &phoneName, const QString &username); @@ -180,12 +180,15 @@ struct UserData : public PeerData { void madeAction(); // pseudo-online + uint64 access; + + MTPinputUser inputUser; + QString firstName; QString lastName; QString username; QString phone; Text nameText; - PhotoId photoId; TextLinkPtr lnk; int32 onlineTill; int32 contact; // -1 - not contact, cant add (self, empty, deleted, foreign), 0 - not contact, can add (request), 1 - contact @@ -198,7 +201,7 @@ struct UserData : public PeerData { }; struct ChatData : public PeerData { - ChatData(const PeerId &id) : PeerData(id), count(0), date(0), version(0), left(false), forbidden(true), botStatus(0), photoId(UnknownPeerPhotoId) { + ChatData(const PeerId &id) : PeerData(id), count(0), date(0), version(0), left(false), forbidden(true), botStatus(0) { } void setPhoto(const MTPChatPhoto &photo, const PhotoId &phId = UnknownPeerPhotoId); int32 count; @@ -216,8 +219,7 @@ struct ChatData : public PeerData { typedef QMap MarkupSenders; MarkupSenders markupSenders; int32 botStatus; // -1 - no bots, 0 - unknown, 1 - one bot, that sees all history, 2 - other - ImagePtr photoFull; - PhotoId photoId; +// ImagePtr photoFull; QString invitationUrl; // geo }; diff --git a/Telegram/SourceFiles/telegram.qrc b/Telegram/SourceFiles/telegram.qrc index 3418022e0..6a0af5648 100644 --- a/Telegram/SourceFiles/telegram.qrc +++ b/Telegram/SourceFiles/telegram.qrc @@ -1,42 +1,42 @@ - - art/fonts/OpenSans-Regular.ttf - art/fonts/OpenSans-Bold.ttf - art/fonts/OpenSans-Semibold.ttf - art/newmsg.wav - art/bg.jpg - art/bg0.png - art/sprite.png - art/sprite_125x.png - art/sprite_150x.png - art/sprite_200x.png - art/blank.gif - art/icon256.png - art/iconbig256.png - - - art/chatcolor1.png - art/chatcolor2.png - art/chatcolor3.png - art/chatcolor4.png - art/usercolor1.png - art/usercolor2.png - art/usercolor3.png - art/usercolor4.png - art/usercolor5.png - art/usercolor6.png - art/usercolor7.png - art/usercolor8.png - - - qmime/freedesktop.org.xml - - - langs/lang_it.strings - langs/lang_es.strings - langs/lang_de.strings - langs/lang_nl.strings - langs/lang_pt_BR.strings - langs/lang_ko.strings - + + art/fonts/OpenSans-Regular.ttf + art/fonts/OpenSans-Bold.ttf + art/fonts/OpenSans-Semibold.ttf + art/newmsg.wav + art/bg.jpg + art/bg0.png + art/sprite.png + art/sprite_125x.png + art/sprite_150x.png + art/sprite_200x.png + art/blank.gif + art/icon256.png + art/iconbig256.png + + + art/chatcolor1.png + art/chatcolor2.png + art/chatcolor3.png + art/chatcolor4.png + art/usercolor1.png + art/usercolor2.png + art/usercolor3.png + art/usercolor4.png + art/usercolor5.png + art/usercolor6.png + art/usercolor7.png + art/usercolor8.png + + + qmime/freedesktop.org.xml + + + langs/lang_it.strings + langs/lang_es.strings + langs/lang_de.strings + langs/lang_nl.strings + langs/lang_pt_BR.strings + langs/lang_ko.strings + diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index 745d81e8e..b066496f6 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.46 + 0.8.47 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index dee5d4b5f7d0cfaf265e476220a164294dd29cb2..14b5bc3c7f1352997641b0788d79ece1cb29d006 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_p6O delta 53 zcmZ3Yy+nIM5ig_JAnySuitable true Speed + /Zm110 %(AdditionalOptions) Windows diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index 175b9d219..d0f9fc4ba 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -1707,7 +1707,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.46; + CURRENT_PROJECT_VERSION = 0.8.47; DEBUG_INFORMATION_FORMAT = dwarf; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -1725,7 +1725,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 0.8.46; + CURRENT_PROJECT_VERSION = 0.8.47; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = fast; GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h; @@ -1751,10 +1751,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.46; + CURRENT_PROJECT_VERSION = 0.8.47; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DYLIB_COMPATIBILITY_VERSION = 0.8; - DYLIB_CURRENT_VERSION = 0.8.46; + DYLIB_CURRENT_VERSION = 0.8.47; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -1885,10 +1885,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.46; + CURRENT_PROJECT_VERSION = 0.8.47; DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 0.8; - DYLIB_CURRENT_VERSION = 0.8.46; + DYLIB_CURRENT_VERSION = 0.8.47; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; diff --git a/Telegram/Version.sh b/Telegram/Version.sh index 8f625316a..8761287d7 100755 --- a/Telegram/Version.sh +++ b/Telegram/Version.sh @@ -1,2 +1,2 @@ -echo 0.8 8046 0.8.46 0 +echo 0.8 8047 0.8.47 1 # AppVersionStrMajor AppVersion AppVersionStr DevChannel From 9792d5df764318481fa6eb3df9d3d7d240c80f63 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 7 Aug 2015 15:20:19 +0300 Subject: [PATCH 085/121] fixed warnings, version 0.8.47.dev --- Telegram/SourceFiles/localstorage.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/localstorage.cpp b/Telegram/SourceFiles/localstorage.cpp index b3036fce4..4f6103da4 100644 --- a/Telegram/SourceFiles/localstorage.cpp +++ b/Telegram/SourceFiles/localstorage.cpp @@ -2797,7 +2797,7 @@ namespace Local { qint32 onlineTill, contact, botInfoVersion; from.stream >> first >> last >> phone >> username >> access >> onlineTill >> contact >> botInfoVersion; - bool showPhone = !isServiceUser(user->id) && (user->id != MTP::authedId()) && (contact <= 0); + bool showPhone = !isServiceUser(user->id) && (App::userFromPeer(user->id) != MTP::authedId()) && (contact <= 0); QString pname = (showPhone && !phone.isEmpty()) ? App::formatPhone(phone) : QString(); user->setName(first, last, pname, username); @@ -2807,7 +2807,7 @@ namespace Local { user->contact = contact; user->setBotInfoVersion(botInfoVersion); - if (user->id == MTP::authedId()) { + if (App::userFromPeer(user->id) == MTP::authedId()) { user->input = MTP_inputPeerSelf(); user->inputUser = MTP_inputUserSelf(); } else if (user->contact > 0 || !user->access) { From 3a97bfd1106e23d6fc167119da5c7fdb5579a13b Mon Sep 17 00:00:00 2001 From: John Preston Date: Sat, 8 Aug 2015 12:14:47 +0300 Subject: [PATCH 086/121] deadlock fixed in mtpConnection --- .../SourceFiles/mtproto/mtpConnection.cpp | 74 +++++++++++++++++-- Telegram/SourceFiles/mtproto/mtpConnection.h | 5 +- 2 files changed, 69 insertions(+), 10 deletions(-) diff --git a/Telegram/SourceFiles/mtproto/mtpConnection.cpp b/Telegram/SourceFiles/mtproto/mtpConnection.cpp index ea1f3eb2a..1a8e0b0f8 100644 --- a/Telegram/SourceFiles/mtproto/mtpConnection.cpp +++ b/Telegram/SourceFiles/mtproto/mtpConnection.cpp @@ -1253,6 +1253,7 @@ MTProtoConnectionPrivate::MTProtoConnectionPrivate(QThread *thread, MTProtoConne , _pingMsgId(0) , restarted(false) , keyId(0) +// , sessionDataMutex(QReadWriteLock::Recursive) , sessionData(data) , myKeyLock(false) , authKeyData(0) @@ -1856,7 +1857,7 @@ void MTProtoConnectionPrivate::tryToSend() { } } mtpRequestData::padding(toSendRequest); - sendRequest(toSendRequest, needAnyResponse); + sendRequest(toSendRequest, needAnyResponse, lockFinished); } void MTProtoConnectionPrivate::retryByTimer() { @@ -1971,8 +1972,11 @@ void MTProtoConnectionPrivate::restart(bool maybeBadKey) { } } + lockFinished.unlock(); doDisconnect(); - if (_needSessionReset) { + + lockFinished.relock(); + if (sessionData && _needSessionReset) { resetSession(); } restarted = true; @@ -2089,7 +2093,12 @@ void MTProtoConnectionPrivate::onWaitIPv4Failed() { void MTProtoConnectionPrivate::doDisconnect() { destroyConn(); - unlockKey(); + { + QReadLocker lockFinished(&sessionDataMutex); + if (sessionData) { + unlockKey(); + } + } clearAuthKeyData(); @@ -2113,12 +2122,16 @@ void MTProtoConnectionPrivate::handleReceived() { DEBUG_LOG(("MTP Error: auth_key for dc %1 busy, cant lock").arg(dc)); clearMessages(); keyId = 0; + + lockFinished.unlock(); return restart(); } mtpAuthKeyPtr key(sessionData->getKey()); if (!key || key->keyId() != keyId) { DEBUG_LOG(("MTP Error: auth_key id for dc %1 changed").arg(dc)); + + lockFinished.unlock(); return restart(); } @@ -2129,11 +2142,15 @@ void MTProtoConnectionPrivate::handleReceived() { if (len < 18) { // 2 auth_key_id, 4 msg_key, 2 salt, 2 session, 2 msg_id, 1 seq_no, 1 length, (1 data + 3 padding) min LOG(("TCP Error: bad message received, len %1").arg(len * sizeof(mtpPrime))); TCP_LOG(("TCP Error: bad message %1").arg(mb(encrypted, len * sizeof(mtpPrime)).str())); + + lockFinished.unlock(); return restart(); } if (keyId != *(uint64*)encrypted) { LOG(("TCP Error: bad auth_key_id %1 instead of %2 received").arg(keyId).arg(*(uint64*)encrypted)); TCP_LOG(("TCP Error: bad message %1").arg(mb(encrypted, len * sizeof(mtpPrime)).str())); + + lockFinished.unlock(); return restart(); } @@ -2152,6 +2169,8 @@ void MTProtoConnectionPrivate::handleReceived() { LOG(("TCP Error: bad msg_len received %1, data size: %2").arg(msgLen).arg(dataBuffer.size())); TCP_LOG(("TCP Error: bad message %1").arg(mb(encrypted, len * sizeof(mtpPrime)).str())); _conn->received().pop_front(); + + lockFinished.unlock(); return restart(); } uchar sha1Buffer[20]; @@ -2159,6 +2178,8 @@ void MTProtoConnectionPrivate::handleReceived() { LOG(("TCP Error: bad SHA1 hash after aesDecrypt in message")); TCP_LOG(("TCP Error: bad message %1").arg(mb(encrypted, len * sizeof(mtpPrime)).str())); _conn->received().pop_front(); + + lockFinished.unlock(); return restart(); } TCP_LOG(("TCP Info: decrypted message %1,%2,%3 is %4 len").arg(msgId).arg(seqNo).arg(logBool(needAck)).arg(msgLen + 8 * sizeof(mtpPrime))); @@ -2168,6 +2189,8 @@ void MTProtoConnectionPrivate::handleReceived() { LOG(("MTP Error: bad server session received")); TCP_LOG(("MTP Error: bad server session %1 instead of %2 in message received").arg(session).arg(serverSession)); _conn->received().pop_front(); + + lockFinished.unlock(); return restart(); } @@ -2177,6 +2200,8 @@ void MTProtoConnectionPrivate::handleReceived() { bool isReply = ((msgId & 0x03) == 1); if (!isReply && ((msgId & 0x03) != 3)) { LOG(("MTP Error: bad msg_id %1 in message received").arg(msgId)); + + lockFinished.unlock(); return restart(); } @@ -2252,6 +2277,8 @@ void MTProtoConnectionPrivate::handleReceived() { if (res < 0) { _needSessionReset = (res < -1); + + lockFinished.unlock(); return restart(); } retryTimeout = 1; // reset restart() timer @@ -3022,6 +3049,8 @@ void MTProtoConnectionPrivate::onConnected4() { disconnect(_conn4, SIGNAL(connected()), this, SLOT(onConnected4())); if (!_conn4->isConnected()) { LOG(("Connection Error: not connected in onConnected4(), state: %1").arg(_conn4->debugState())); + + lockFinished.unlock(); return restart(); } @@ -3030,6 +3059,7 @@ void MTProtoConnectionPrivate::onConnected4() { DEBUG_LOG(("MTP Info: connection through IPv4 succeed.")); + lockFinished.unlock(); updateAuthKey(); } @@ -3043,6 +3073,8 @@ void MTProtoConnectionPrivate::onConnected6() { disconnect(_conn6, SIGNAL(connected()), this, SLOT(onConnected6())); if (!_conn6->isConnected()) { LOG(("Connection Error: not connected in onConnected(), state: %1").arg(_conn6->debugState())); + + lockFinished.unlock(); return restart(); } @@ -3121,6 +3153,7 @@ void MTProtoConnectionPrivate::updateAuthKey() { connect(_conn, SIGNAL(receivedData()), this, SLOT(pqAnswered())); DEBUG_LOG(("AuthKey Info: sending Req_pq..")); + lockFinished.unlock(); sendRequestNotSecure(req_pq); } @@ -3424,6 +3457,7 @@ void MTProtoConnectionPrivate::dhClientParamsAnswered() { MTPSet_client_DH_params::ResponseType res_client_DH_params; if (!readResponseNotSecure(res_client_DH_params)) { + lockFinished.unlock(); return restart(); } @@ -3433,11 +3467,15 @@ void MTProtoConnectionPrivate::dhClientParamsAnswered() { if (resDH.vnonce != authKeyData->nonce) { LOG(("AuthKey Error: received nonce <> sent nonce (in dh_gen_ok)!")); DEBUG_LOG(("AuthKey Error: received nonce: %1, sent nonce: %2").arg(mb(&resDH.vnonce, 16).str()).arg(mb(&authKeyData->nonce, 16).str())); + + lockFinished.unlock(); return restart(); } if (resDH.vserver_nonce != authKeyData->server_nonce) { LOG(("AuthKey Error: received server_nonce <> sent server_nonce (in dh_gen_ok)!")); DEBUG_LOG(("AuthKey Error: received server_nonce: %1, sent server_nonce: %2").arg(mb(&resDH.vserver_nonce, 16).str()).arg(mb(&authKeyData->server_nonce, 16).str())); + + lockFinished.unlock(); return restart(); } authKeyData->new_nonce_buf[32] = 1; @@ -3445,6 +3483,8 @@ void MTProtoConnectionPrivate::dhClientParamsAnswered() { if (resDH.vnew_nonce_hash1 != *(MTPint128*)(hashSha1(authKeyData->new_nonce_buf, 41, sha1Buffer) + 1)) { LOG(("AuthKey Error: received new_nonce_hash1 did not match!")); DEBUG_LOG(("AuthKey Error: received new_nonce_hash1: %1, new_nonce_buf: %2").arg(mb(&resDH.vnew_nonce_hash1, 16).str()).arg(mb(authKeyData->new_nonce_buf, 41).str())); + + lockFinished.unlock(); return restart(); } @@ -3467,11 +3507,15 @@ void MTProtoConnectionPrivate::dhClientParamsAnswered() { if (resDH.vnonce != authKeyData->nonce) { LOG(("AuthKey Error: received nonce <> sent nonce (in dh_gen_retry)!")); DEBUG_LOG(("AuthKey Error: received nonce: %1, sent nonce: %2").arg(mb(&resDH.vnonce, 16).str()).arg(mb(&authKeyData->nonce, 16).str())); + + lockFinished.unlock(); return restart(); } if (resDH.vserver_nonce != authKeyData->server_nonce) { LOG(("AuthKey Error: received server_nonce <> sent server_nonce (in dh_gen_retry)!")); DEBUG_LOG(("AuthKey Error: received server_nonce: %1, sent server_nonce: %2").arg(mb(&resDH.vserver_nonce, 16).str()).arg(mb(&authKeyData->server_nonce, 16).str())); + + lockFinished.unlock(); return restart(); } authKeyData->new_nonce_buf[32] = 2; @@ -3479,6 +3523,8 @@ void MTProtoConnectionPrivate::dhClientParamsAnswered() { if (resDH.vnew_nonce_hash2 != *(MTPint128*)(hashSha1(authKeyData->new_nonce_buf, 41, sha1Buffer) + 1)) { LOG(("AuthKey Error: received new_nonce_hash2 did not match!")); DEBUG_LOG(("AuthKey Error: received new_nonce_hash2: %1, new_nonce_buf: %2").arg(mb(&resDH.vnew_nonce_hash2, 16).str()).arg(mb(authKeyData->new_nonce_buf, 41).str())); + + lockFinished.unlock(); return restart(); } authKeyData->retry_id = authKeyData->auth_key_aux_hash; @@ -3489,11 +3535,15 @@ void MTProtoConnectionPrivate::dhClientParamsAnswered() { if (resDH.vnonce != authKeyData->nonce) { LOG(("AuthKey Error: received nonce <> sent nonce (in dh_gen_fail)!")); DEBUG_LOG(("AuthKey Error: received nonce: %1, sent nonce: %2").arg(mb(&resDH.vnonce, 16).str()).arg(mb(&authKeyData->nonce, 16).str())); + + lockFinished.unlock(); return restart(); } if (resDH.vserver_nonce != authKeyData->server_nonce) { LOG(("AuthKey Error: received server_nonce <> sent server_nonce (in dh_gen_fail)!")); DEBUG_LOG(("AuthKey Error: received server_nonce: %1, sent server_nonce: %2").arg(mb(&resDH.vserver_nonce, 16).str()).arg(mb(&authKeyData->server_nonce, 16).str())); + + lockFinished.unlock(); return restart(); } authKeyData->new_nonce_buf[32] = 3; @@ -3501,13 +3551,20 @@ void MTProtoConnectionPrivate::dhClientParamsAnswered() { if (resDH.vnew_nonce_hash3 != *(MTPint128*)(hashSha1(authKeyData->new_nonce_buf, 41, sha1Buffer) + 1)) { LOG(("AuthKey Error: received new_nonce_hash3 did not match!")); DEBUG_LOG(("AuthKey Error: received new_nonce_hash3: %1, new_nonce_buf: %2").arg(mb(&resDH.vnew_nonce_hash3, 16).str()).arg(mb(authKeyData->new_nonce_buf, 41).str())); + + lockFinished.unlock(); return restart(); } LOG(("AuthKey Error: dh_gen_fail received!")); - } return restart(); + } + + lockFinished.unlock(); + return restart(); } LOG(("AuthKey Error: unknown set_client_DH_params_answer received, typeId = %1").arg(res_client_DH_params.type())); + + lockFinished.unlock(); return restart(); } @@ -3646,7 +3703,7 @@ bool MTProtoConnectionPrivate::readResponseNotSecure(TResponse &response) { return true; } -bool MTProtoConnectionPrivate::sendRequest(mtpRequest &request, bool needAnyResponse) { +bool MTProtoConnectionPrivate::sendRequest(mtpRequest &request, bool needAnyResponse, QReadLocker &lockFinished) { uint32 fullSize = request->size(); if (fullSize < 9) return false; @@ -3656,6 +3713,8 @@ bool MTProtoConnectionPrivate::sendRequest(mtpRequest &request, bool needAnyResp ReadLockerAttempt lock(sessionData->keyMutex()); if (!lock) { DEBUG_LOG(("MTP Info: could not lock key for read in sendBuffer(), dc %1, restarting..").arg(dc)); + + lockFinished.unlock(); restart(); return false; } @@ -3663,6 +3722,8 @@ bool MTProtoConnectionPrivate::sendRequest(mtpRequest &request, bool needAnyResp mtpAuthKeyPtr key(sessionData->getKey()); if (!key || key->keyId() != keyId) { DEBUG_LOG(("MTP Error: auth_key id for dc %1 changed").arg(dc)); + + lockFinished.unlock(); restart(); return false; } @@ -3729,9 +3790,6 @@ void MTProtoConnectionPrivate::lockKey() { } void MTProtoConnectionPrivate::unlockKey() { - QReadLocker lockFinished(&sessionDataMutex); - if (!sessionData) return; - if (myKeyLock) { myKeyLock = false; sessionData->keyMutex()->unlock(); diff --git a/Telegram/SourceFiles/mtproto/mtpConnection.h b/Telegram/SourceFiles/mtproto/mtpConnection.h index 44eed5d6f..2e0bc96ee 100644 --- a/Telegram/SourceFiles/mtproto/mtpConnection.h +++ b/Telegram/SourceFiles/mtproto/mtpConnection.h @@ -410,7 +410,6 @@ public slots: void onError4(bool maybeBadKey = false); void onError6(bool maybeBadKey = false); - void doDisconnect(); void doFinish(); // Auth key creation packet receive slots @@ -430,6 +429,8 @@ public slots: private: + void doDisconnect(); + void createConn(bool createIPv4, bool createIPv6); void destroyConn(MTPabstractConnection **conn = 0); // 0 - destory all @@ -437,7 +438,7 @@ private: mtpMsgId prepareToSend(mtpRequest &request, mtpMsgId currentLastId); mtpMsgId replaceMsgId(mtpRequest &request, mtpMsgId newId); - bool sendRequest(mtpRequest &request, bool needAnyResponse); + bool sendRequest(mtpRequest &request, bool needAnyResponse, QReadLocker &lockFinished); mtpRequestId wasSent(mtpMsgId msgId) const; int32 handleOneReceived(const mtpPrime *from, const mtpPrime *end, uint64 msgId, int32 serverTime, uint64 serverSalt, bool badTime); From 897699dd04f5e95bbed3245fbdf6168bc5a716ad Mon Sep 17 00:00:00 2001 From: John Preston Date: Sat, 8 Aug 2015 12:22:47 +0300 Subject: [PATCH 087/121] langs updated --- Telegram/SourceFiles/langs/lang_de.strings | 15 ++++++++++++--- Telegram/SourceFiles/langs/lang_es.strings | 17 +++++++++++++---- Telegram/SourceFiles/langs/lang_it.strings | 13 +++++++++++-- Telegram/SourceFiles/langs/lang_ko.strings | 11 ++++++++++- Telegram/SourceFiles/langs/lang_nl.strings | 13 +++++++++++-- Telegram/SourceFiles/langs/lang_pt_BR.strings | 11 ++++++++++- 6 files changed, 67 insertions(+), 13 deletions(-) diff --git a/Telegram/SourceFiles/langs/lang_de.strings b/Telegram/SourceFiles/langs/lang_de.strings index e952a65c3..2176c1055 100644 --- a/Telegram/SourceFiles/langs/lang_de.strings +++ b/Telegram/SourceFiles/langs/lang_de.strings @@ -156,8 +156,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_dlg_new_group_name" = "Name der Gruppe"; "lng_dlg_create_group" = "Erstellen"; "lng_no_contacts" = "Du hast keine Kontakte"; +"lng_no_chats" = "Noch keine Chats"; "lng_contacts_loading" = "Lade.."; "lng_contacts_not_found" = "Keine Kontakte gefunden"; +"lng_dlg_search_chat" = "In diesem Chat suchen"; +"lng_dlg_search_for_messages" = "Nach Nachrichten suchen"; "lng_settings_save" = "Speichern"; "lng_settings_upload" = "Profilbild festlegen"; @@ -289,7 +292,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_cloud_password_bad" = "Kennwort und Hinweis müssen sich unterscheiden."; "lng_cloud_password_email" = "E-Mail für die Wiederherstellung"; "lng_cloud_password_bad_email" = "Ungültige E-Mai, bitte erneut versuchen."; -"lng_cloud_password_about" = "Du kannst ein eigenes Kennwort festlegen, um dich an einem neuen Gerät anzumelden, zusätzlich zum SMS-Code."; +"lng_cloud_password_about" = "Dieses Kennwort brauchst du, wenn du dich mit einem neuen Gerät anmeldest."; "lng_cloud_password_about_recover" = "Hinweis! Möchtest du wirklich keine E-Mail\nAdresse hinterlegen? \n\nWenn dir dein Kennwort nicht mehr einfällt, \nverlierst du Zugriff auf dein Telegram Konto."; "lng_cloud_password_almost" = "Ein Bestätigungslink wurde an\ndeine E-Mail Adresse gesendet.\n\nZweistufige Bestätigung wird aktiviert,\nsobald du den Link öffnest."; "lng_cloud_password_was_set" = "Zweistufige Bestätigung aktiviert."; @@ -339,6 +342,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_topbar_info" = "Info"; "lng_profile_about_section" = "Info"; "lng_profile_settings_section" = "Einstellungen"; +"lng_profile_actions_section" = "Aktionen"; "lng_profile_bot_settings" = "Einstellungen"; "lng_profile_bot_help" = "Hilfe"; "lng_profile_participants_section" = "Teilnehmer"; @@ -348,6 +352,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_edit_contact" = "Bearbeiten"; "lng_profile_enable_notifications" = "Benachrichtigungen"; "lng_profile_clear_history" = "Chatverlauf löschen"; +"lng_profile_delete_conversation" = "Verlauf löschen"; +"lng_profile_clear_and_exit" = "Löschen und verlassen"; +"lng_profile_search_messages" = "In diesem Chat suchen"; "lng_profile_send_message" = "Nachricht senden"; "lng_profile_share_contact" = "Kontakt teilen"; "lng_profile_invite_to_group" = "In eine Gruppe einladen"; @@ -379,9 +386,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_create_group_title" = "Neue Gruppe erstellen"; "lng_failed_add_participant" = "Kann Teilnehmer nicht hinzufügen. Später erneut versuchen."; +"lng_failed_add_not_mutual" = "Wenn man eine Gruppe verlässt, kann nur \nein gemeinsamer Kontakt die Person erneut \neinladen (beide Seiten müssen die Nummer\n des anderen gespeichert haben)."; "lng_sure_delete_contact" = "Bist du sicher, dass du {contact} von deinen Kontakten löschen willst?"; "lng_sure_delete_history" = "Sicher, dass du den kompletten Verlauf mit {contact} löschen willst?\n\nDas kann man nicht rückgängig machen."; +"lng_sure_delete_group_history" = "Möchtest du wirklich deinen Verlauf von «{group}» löschen?\n\nDas kann man nicht rückgängig machen."; "lng_sure_delete_and_exit" = "Deinen Verlauf von «{group}» löschen und die Gruppe verlassen?\n\nDas kann man nicht rückgängig machen."; @@ -462,7 +471,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_message_ph" = "Schreibe deine Nachricht.."; "lng_record_cancel" = "Zum Abbrechen rausbewegen"; "lng_empty_history" = ""; -"lng_willbe_history" = "Wähle einen Chat aus, um zu schreiben"; +"lng_willbe_history" = "Chat auswählen um zu schreiben"; "lng_message_with_from" = "[c]{from}:[/c] {message}"; "lng_from_you" = "Ich"; "lng_bot_description" = "Was kann dieser Bot?"; @@ -620,7 +629,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop wurde aktualisiert auf Version {version}\n\n{changes}\n\nGesamter Versionsverlauf:\n{link}"; "lng_new_version_minor" = "— Fehlerbehebungen und Softwareoptimierungen"; -"lng_new_version_text" = "— In-App Medienwiedergabe optimiert\n— Fehlerbehebungen und kleinere Verbesserungen"; +"lng_new_version_text" = "— Direkte Suche in Chats (Chat auswählen und STRG+F drücken)\n— Verlauf in Gruppen löschen (in der Gruppe auf den Gruppennamen tippen)\n— Kontakte, mit denen du nicht chattest, werden nicht mehr in der Übersicht gezeigt"; "lng_menu_insert_unicode" = "Unicode-Steuerzeichen einfügen"; diff --git a/Telegram/SourceFiles/langs/lang_es.strings b/Telegram/SourceFiles/langs/lang_es.strings index ef5ecdb79..c58709f8f 100644 --- a/Telegram/SourceFiles/langs/lang_es.strings +++ b/Telegram/SourceFiles/langs/lang_es.strings @@ -156,8 +156,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_dlg_new_group_name" = "Nombre del grupo"; "lng_dlg_create_group" = "Crear"; "lng_no_contacts" = "No tienes contactos"; +"lng_no_chats" = "Tus chats estarán aquí"; "lng_contacts_loading" = "Cargando..."; "lng_contacts_not_found" = "No se encontraron contactos"; +"lng_dlg_search_chat" = "Buscar en este chat"; +"lng_dlg_search_for_messages" = "Buscar mensajes"; "lng_settings_save" = "Guardar"; "lng_settings_upload" = "Poner foto de perfil"; @@ -289,7 +292,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_cloud_password_bad" = "La contraseña y la pista no pueden ser iguales."; "lng_cloud_password_email" = "Pon un e-mail de recuperación"; "lng_cloud_password_bad_email" = "E-mail incorrecto. Por favor, prueba otro."; -"lng_cloud_password_about" = "Esta contraseña será requerida cuando inicies sesión en un nuevo dispositivo, además del código de activación."; +"lng_cloud_password_about" = "Necesitarás la contraseña al iniciar sesión en un nuevo dispositivo, además del código de activación."; "lng_cloud_password_about_recover" = "¡Advertencia! ¿No quieres añadir un e-mail \nde recuperación para la contraseña?\n\nSi olvidas tu contraseña, perderás\nel acceso a tu cuenta de Telegram."; "lng_cloud_password_almost" = "Un enlace de confirmación fue enviado\nal e-mail que estableciste.\n\nLa verificación en dos pasos se activará\nen cuanto sigas ese enlace."; "lng_cloud_password_was_set" = "Verificación en dos pasos activada."; @@ -339,6 +342,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_topbar_info" = "Información"; "lng_profile_about_section" = "Acerca de"; "lng_profile_settings_section" = "Ajustes"; +"lng_profile_actions_section" = "Acciones"; "lng_profile_bot_settings" = "Ajustes"; "lng_profile_bot_help" = "Ayuda"; "lng_profile_participants_section" = "Miembros"; @@ -348,6 +352,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_edit_contact" = "Editar"; "lng_profile_enable_notifications" = "Notificaciones"; "lng_profile_clear_history" = "Borrar historial"; +"lng_profile_delete_conversation" = "Eliminar chat"; +"lng_profile_clear_and_exit" = "Eliminar y salir"; +"lng_profile_search_messages" = "Buscar mensajes"; "lng_profile_send_message" = "Enviar mensaje"; "lng_profile_share_contact" = "Compartir contacto"; "lng_profile_invite_to_group" = "Añadir al grupo"; @@ -359,7 +366,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_sure_kick" = "¿Quieres expulsar a {user} del grupo?"; "lng_profile_loading" = "Cargando..."; "lng_profile_shared_media" = "Todos los archivos"; -"lng_profile_no_media" = "No hay multimedia en esta conversación."; +"lng_profile_no_media" = "No hay multimedia en este chat."; "lng_profile_photos" = "{count:_not_used_|# foto|# fotos} »"; "lng_profile_photos_header" = "Todas las fotos"; "lng_profile_videos" = "{count:_not_used_|# vídeo|# vídeos} »"; @@ -379,9 +386,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_create_group_title" = "Nuevo grupo"; "lng_failed_add_participant" = "No se pudo añadir el usuario. Por favor, inténtalo más tarde."; +"lng_failed_add_not_mutual" = "Si una persona dejó el grupo, sólo\nun contacto mutuo puede volver \na invitarlo (necesitan tener tu \nnúmero y tú el de ellos)."; "lng_sure_delete_contact" = "¿Quieres eliminar a {contact} de tu lista de contactos?"; "lng_sure_delete_history" = "¿Quieres eliminar todo el historial de mensajes con {contact}?\n\nEsta acción no se puede deshacer."; +"lng_sure_delete_group_history" = "¿Quieres borrar todo el historial en «{group}»?\n\nEsta acción no se puede deshacer."; "lng_sure_delete_and_exit" = "¿Quieres eliminar todo el historial de mensajes y dejar el grupo «{group}»?\n\nEsta acción no se puede deshacer."; @@ -462,7 +471,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_message_ph" = "Escribir un mensaje..."; "lng_record_cancel" = "Suelta fuera de aquí para cancelar"; "lng_empty_history" = ""; -"lng_willbe_history" = "Por favor, elige un chat para comenzar a conversar"; +"lng_willbe_history" = "Por favor, elige un chat para comenzar"; "lng_message_with_from" = "[c]{from}:[/c] {message}"; "lng_from_you" = "Tú"; "lng_bot_description" = "¿Qué puede hacer este bot?"; @@ -620,7 +629,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop fue actualizada a la versión {version}\n\n{changes}\n\nEl historial completo está disponible aquí:\n{link}"; "lng_new_version_minor" = "— Corrección de errores y otras mejoras menores"; -"lng_new_version_text" = "— Reproducción de la multimedia dentro de la aplicación mejorada\n— Corrección de errores y otras mejoras menores"; +"lng_new_version_text" = "— Busca mensajes en un chat\n— Borra el historial de mensajes en grupos\n— Los contactos sin mensajes se ocultarán de la lista de chats"; "lng_menu_insert_unicode" = "Insertar caracteres de control Unicode"; diff --git a/Telegram/SourceFiles/langs/lang_it.strings b/Telegram/SourceFiles/langs/lang_it.strings index aef882f8d..7b8f8ee60 100644 --- a/Telegram/SourceFiles/langs/lang_it.strings +++ b/Telegram/SourceFiles/langs/lang_it.strings @@ -156,8 +156,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_dlg_new_group_name" = "Nome gruppo"; "lng_dlg_create_group" = "Crea"; "lng_no_contacts" = "Non hai contatti"; +"lng_no_chats" = "Le tua chat saranno qui"; "lng_contacts_loading" = "Caricamento.."; "lng_contacts_not_found" = "Nessun contatto trovato"; +"lng_dlg_search_chat" = "Cerca in questa chat"; +"lng_dlg_search_for_messages" = "Cerca messaggi"; "lng_settings_save" = "Salva"; "lng_settings_upload" = "Imposta foto profilo"; @@ -267,7 +270,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_passcode_enter_first" = "Inserisci un codice"; "lng_passcode_enter_new" = "Inserisci il nuovo codice"; "lng_passcode_confirm_new" = "Reinserisci il nuovo codice"; -"lng_passcode_about" = "Quando imposti un codice, un'icona col lucchetto apparirà nel menu in alto. Premi su di essa per bloccare l'app. \n\nNota: se ti dimentichi il codice, dovrai rifare il login su Telegram Desktop."; +"lng_passcode_about" = "Quando imposti un codice, un'icona col lucchetto apparirà nel menu in alto. Premi su di essa per bloccare l'app. \n\nNota: se dimentichi il codice, dovrai rifare l'accesso su Telegram Desktop."; "lng_passcode_differ" = "I codici sono diversi"; "lng_passcode_wrong" = "Codice errato"; "lng_passcode_is_same" = "Il codice non è stato cambiato"; @@ -339,6 +342,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_topbar_info" = "Info"; "lng_profile_about_section" = "Info"; "lng_profile_settings_section" = "Impostazioni"; +"lng_profile_actions_section" = "Azioni"; "lng_profile_bot_settings" = "Impostazioni"; "lng_profile_bot_help" = "Aiuto"; "lng_profile_participants_section" = "Membri"; @@ -348,6 +352,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_edit_contact" = "Modifica"; "lng_profile_enable_notifications" = "Notifiche"; "lng_profile_clear_history" = "Cancella la cronologia"; +"lng_profile_delete_conversation" = "Elimina chat"; +"lng_profile_clear_and_exit" = "Elimina ed esci"; +"lng_profile_search_messages" = "Cerca messaggi"; "lng_profile_send_message" = "Invia messaggio"; "lng_profile_share_contact" = "Condividi contatto"; "lng_profile_invite_to_group" = "Aggiungi a un gruppo"; @@ -379,9 +386,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_create_group_title" = "Nuovo gruppo"; "lng_failed_add_participant" = "Impossibile aggiungere l'utente. Riprova più tardi."; +"lng_failed_add_not_mutual" = "Se una persona lascia un gruppo,\nsolo un contatto in comune può reinvitarlo\n(devono avere il tuo numero\ndi telefono, e tu il loro)."; "lng_sure_delete_contact" = "Sicuro di volere eliminare {contact} dalla tua lista dei contatti?"; "lng_sure_delete_history" = "Sicuro di voler eliminare tutta la cronologia dei messaggi con {contact}?\n\nQuesta azione non può essere annullata."; +"lng_sure_delete_group_history" = "Sicuro di voler eliminare tutta la cronologia dei messaggi in «{group}»?\n\nQuesta azione non può essere annullata."; "lng_sure_delete_and_exit" = "Sicuro di voler eliminare tutta la cronologia dei messaggi e abbandonare «{group}»?\n\nQuesta azione non può essere annullata."; @@ -620,7 +629,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop si è aggiornato alla versione {version}\n\n{changes}\n\nLa cronologia degli update è disponibile qui:\n{link}"; "lng_new_version_minor" = "— Bug fix e altri miglioramenti minori"; -"lng_new_version_text" = "— Riproduzione dei media migliorata\n— Risoluzione di bug e miglioramenti minori"; +"lng_new_version_text" = "— Cerca messaggi in una chat\n— Pulisci la cronologia dei messaggi nei gruppi\n— I contatti senza messaggi sono nascosti dalla lista delle chat"; "lng_menu_insert_unicode" = "Inserisci carattere di controllo Unicode"; diff --git a/Telegram/SourceFiles/langs/lang_ko.strings b/Telegram/SourceFiles/langs/lang_ko.strings index 51a8bc4c9..9fb577498 100644 --- a/Telegram/SourceFiles/langs/lang_ko.strings +++ b/Telegram/SourceFiles/langs/lang_ko.strings @@ -156,8 +156,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_dlg_new_group_name" = "그룹이름"; "lng_dlg_create_group" = "만들기"; "lng_no_contacts" = "연락처가 없습니다."; +"lng_no_chats" = "대화시 대화방이 존재 할 곳입니다."; "lng_contacts_loading" = "로드중.."; "lng_contacts_not_found" = "연락처를 찾을 수 없음"; +"lng_dlg_search_chat" = "이 채팅에서 검색"; +"lng_dlg_search_for_messages" = "메시지 검색"; "lng_settings_save" = "저장"; "lng_settings_upload" = "프로필 이미지 선택"; @@ -339,6 +342,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_topbar_info" = "정보"; "lng_profile_about_section" = "취소"; "lng_profile_settings_section" = "환경설정"; +"lng_profile_actions_section" = "동작"; "lng_profile_bot_settings" = "환경설정"; "lng_profile_bot_help" = "도움말"; "lng_profile_participants_section" = "사용자"; @@ -348,6 +352,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_edit_contact" = "수정"; "lng_profile_enable_notifications" = "알림"; "lng_profile_clear_history" = "히스토리 초기화"; +"lng_profile_delete_conversation" = "대화 지우기"; +"lng_profile_clear_and_exit" = "삭제 후 종료"; +"lng_profile_search_messages" = "메시지 검색"; "lng_profile_send_message" = "메세지 전송"; "lng_profile_share_contact" = "연락처 공유"; "lng_profile_invite_to_group" = "그룹에 추가"; @@ -379,9 +386,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_create_group_title" = "새로운 그룹"; "lng_failed_add_participant" = "사용자를 초대할 수 없습니다. 나중에 다시 시도해주세요."; +"lng_failed_add_not_mutual" = "죄송합니다. 그룹방에서 대화상대방이 나갔을 경우,\n상대 전화번호가 있는 분만 초대가 가능합니다.\n(서로 전화번호가 등록되어져 있어야만 가능)"; "lng_sure_delete_contact" = "{contact} 님을 주소록에서 \n삭제하시겠습니까?"; "lng_sure_delete_history" = "{contact} 님과 관련된 모든 메시지를 \n삭제하시겠습니까?\n\n삭제 하실 경우 취소가 불가능합니다."; +"lng_sure_delete_group_history" = "그룹<<{group}>> 방의 모든 메시지 기록을 삭제하시겠습니까?\n\n이 작업은 취소가 불가능합니다."; "lng_sure_delete_and_exit" = "그룹 «{group}» 방에서 모든 메시지를 \n삭제하시고 퇴장하시겠습니까?\n\n삭제 하실 경우 취소가 불가능합니다."; @@ -620,7 +629,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "텔레그램 데스크탑은 {version} 버전으로 업데이트 되었습니다.\n\n{changes}\n\n전체 버전 히스토리는 아래에서 확인 가능합니다:\n{link}"; "lng_new_version_minor" = "— 버그 수정 및 일부 기능 향상"; -"lng_new_version_text" = "— 앱내 미디어 재생 기능 향상\n— 버그 수정 및 마이나 기능 향상"; +"lng_new_version_text" = "— 대화방내 검색 기능\n— 그룹방 대화내용 삭제\n— 메시지가 없는 대화방은 대화목록에서 숨겨짐"; "lng_menu_insert_unicode" = "유니코드 문자를 입력하세요."; diff --git a/Telegram/SourceFiles/langs/lang_nl.strings b/Telegram/SourceFiles/langs/lang_nl.strings index e0a29bb35..f011259f7 100644 --- a/Telegram/SourceFiles/langs/lang_nl.strings +++ b/Telegram/SourceFiles/langs/lang_nl.strings @@ -156,8 +156,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_dlg_new_group_name" = "Groepsnaam"; "lng_dlg_create_group" = "Maak"; "lng_no_contacts" = "Je hebt geen contacten"; +"lng_no_chats" = "Hier komen je chats"; "lng_contacts_loading" = "Bezig met laden"; "lng_contacts_not_found" = "Geen contacten gevonden"; +"lng_dlg_search_chat" = "Zoek in deze chat"; +"lng_dlg_search_for_messages" = "Zoek berichten"; "lng_settings_save" = "Opslaan"; "lng_settings_upload" = "Profielfoto instellen"; @@ -289,7 +292,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_cloud_password_bad" = "De hint moet anders zijn dan je wachtwoord."; "lng_cloud_password_email" = "Herstel-e-mailadres invoeren"; "lng_cloud_password_bad_email" = "Ongeldig e-mailadres, probeer een andere."; -"lng_cloud_password_about" = "Naast de code die je per SMS ontvangt kun je een extra wachtwoord instellen voor als je inlogt op een nieuw apparaat."; +"lng_cloud_password_about" = "Dit wachtwoord is nodig als je inlogt vanaf een nieuw apparaat, naast de SMS die je ontvangt."; "lng_cloud_password_about_recover" = "Let op: Echt geen herstel-emailadres\nopgeven voor je wachtwoord?\n\nBij verlies van je wachtwoord ben je\nook de toegang tot Telegram kwijt."; "lng_cloud_password_almost" = "Een bevestigingslink is naar\nhet e-mailadres verstuurd.\n\ntwee-staps-verificatie is actief\nna het klikken van de e-mail-link."; "lng_cloud_password_was_set" = "Twee-staps-verificatie ingeschakeld."; @@ -339,6 +342,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_topbar_info" = "Info"; "lng_profile_about_section" = "Over"; "lng_profile_settings_section" = "Instellingen"; +"lng_profile_actions_section" = "Acties"; "lng_profile_bot_settings" = "Instellingen"; "lng_profile_bot_help" = "Help"; "lng_profile_participants_section" = "Deelnemers"; @@ -348,6 +352,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_edit_contact" = "Wijzig"; "lng_profile_enable_notifications" = "Meldingen"; "lng_profile_clear_history" = "Geschiedenis wissen"; +"lng_profile_delete_conversation" = "Gesprek verwijderen"; +"lng_profile_clear_and_exit" = "Verwijder en verlaat"; +"lng_profile_search_messages" = "Zoek berichten"; "lng_profile_send_message" = "Bericht sturen"; "lng_profile_share_contact" = "Contact delen"; "lng_profile_invite_to_group" = "Groepslid maken"; @@ -379,9 +386,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_create_group_title" = "Nieuwe groep"; "lng_failed_add_participant" = "Gebruiker toevoegen mislukt. Probeer het later nog eens."; +"lng_failed_add_not_mutual" = "Sorry, als een persoon verlaat, \nKan alleen een wederzijds\ncontact ze weer toevoegen\n(opgeslagen telefoonnummers)."; "lng_sure_delete_contact" = "{contact} echt verwijderen uit contacten?"; "lng_sure_delete_history" = "Geschiedenis met {contact} echt wissen? \n\nDeze actie kan niet ongedaan worden gemaakt."; +"lng_sure_delete_group_history" = "Echt de geschiedenis van «{group}» wissen?\n\nHerstellen is niet mogelijk. "; "lng_sure_delete_and_exit" = "Wil je de groep «{group}» verlaten en de geschiedenis wissen?\n\nDeze actie kan niet ongedaan worden gemaakt."; @@ -620,7 +629,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram is bijgewerkt naar versie {version}\n\n{changes} \n\nVolledige versiegeschiedenis is hier te vinden:\n{link}"; "lng_new_version_minor" = "— Probleemoplossing en andere kleine verbeteringen"; -"lng_new_version_text" = "— Media afspelen binnen de app verbeterd\n— Probleemoplossing en kleine verbeteringen"; +"lng_new_version_text" = "— Zoek berichten binnen gesprekken\n— Berichtengeschiedenis van groepen wissen\n— Contacten zonder berichten zijn verborgen in de gesprekslijst"; "lng_menu_insert_unicode" = "Unicode-besturingsteken invoegen"; diff --git a/Telegram/SourceFiles/langs/lang_pt_BR.strings b/Telegram/SourceFiles/langs/lang_pt_BR.strings index 28599abb5..fcdabc5f8 100644 --- a/Telegram/SourceFiles/langs/lang_pt_BR.strings +++ b/Telegram/SourceFiles/langs/lang_pt_BR.strings @@ -156,8 +156,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_dlg_new_group_name" = "Nome do grupo"; "lng_dlg_create_group" = "Criar"; "lng_no_contacts" = "Você não possui contatos"; +"lng_no_chats" = "Seus chats estarão aqui"; "lng_contacts_loading" = "Carregando.."; "lng_contacts_not_found" = "Nenhum contato encontrado"; +"lng_dlg_search_chat" = "Buscar nesse chat"; +"lng_dlg_search_for_messages" = "Buscar por mensagens"; "lng_settings_save" = "Salvar"; "lng_settings_upload" = "Definir Foto de Perfil"; @@ -339,6 +342,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_topbar_info" = "Info"; "lng_profile_about_section" = "Sobre"; "lng_profile_settings_section" = "Configurações"; +"lng_profile_actions_section" = "Ações"; "lng_profile_bot_settings" = "Configurações"; "lng_profile_bot_help" = "Ajuda"; "lng_profile_participants_section" = "Membros"; @@ -348,6 +352,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_edit_contact" = "Editar"; "lng_profile_enable_notifications" = "Notificações"; "lng_profile_clear_history" = "Limpar histórico"; +"lng_profile_delete_conversation" = "Apagar conversa"; +"lng_profile_clear_and_exit" = "Apagar e sair"; +"lng_profile_search_messages" = "Buscar mensagens"; "lng_profile_send_message" = "Enviar Mensagem"; "lng_profile_share_contact" = "Compartilhar"; "lng_profile_invite_to_group" = "Adicionar ao Grupo"; @@ -379,9 +386,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_create_group_title" = "Novo Grupo"; "lng_failed_add_participant" = "Não foi possível adicionar o usuário. Tente novamente mais tarde."; +"lng_failed_add_not_mutual" = "Desculpe, se uma pessoa deixou o\ngrupo, apenas um contato mútuo pode\ncolocá-la de volta (eles precisam do seu \ncontato no telefone e você o deles)"; "lng_sure_delete_contact" = "Você tem certeza que deseja remover {contact} da sua lista de contatos?"; "lng_sure_delete_history" = "Você tem certeza que deseja apagar todo o seu histórico de mensagens com {contact}?\n\nEssa ação não pode ser desfeita."; +"lng_sure_delete_group_history" = "Você tem certeza que deseja apagar todo o histórico de «{group}»?\n\nEssa ação não pode ser desfeita."; "lng_sure_delete_and_exit" = "Você tem certeza que deseja apagar todo o seu histórico de mensagens e deixar «{group}»?\n\nEssa ação não pode ser desfeita."; @@ -620,7 +629,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_new_version_wrap" = "Telegram Desktop foi atualizado para a versão {version}\n\n{changes}\n\nHistórico completo de mudanças disponível aqui:\n{link}"; "lng_new_version_minor" = "— Resolução de bugs e outras menores melhorias"; -"lng_new_version_text" = "— Reprodução de mídia no app melhorada\n— Resolução de bugs e menores melhorias"; +"lng_new_version_text" = "— Buscar mensagens em uma conversa\n— Limpar histórico de mensagens em grupos\n— Contatos sem mensagens estão ocultos da lista de conversas"; "lng_menu_insert_unicode" = "Inserir caractere de controle Unicode"; From 1b16064db6f73dc8d83dbed7172f510dfbc40fb0 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sat, 8 Aug 2015 12:28:34 +0300 Subject: [PATCH 088/121] 0.8.48 stable version with clear history and conversation search --- Telegram/PrepareWin.bat | 10 +++++----- Telegram/SourceFiles/application.cpp | 4 ++-- Telegram/SourceFiles/config.h | 6 +++--- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 ++++++------ Telegram/Version.sh | 2 +- 7 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index b5b72657c..1b4532518 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,11 +1,11 @@ @echo OFF set "AppVersionStrMajor=0.8" -set "AppVersion=8047" -set "AppVersionStrSmall=0.8.47" -set "AppVersionStr=0.8.47" -set "AppVersionStrFull=0.8.47.0" -set "DevChannel=1" +set "AppVersion=8048" +set "AppVersionStrSmall=0.8.48" +set "AppVersionStr=0.8.48" +set "AppVersionStrFull=0.8.48.0" +set "DevChannel=0" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index 1d314fa9b..83e1334c3 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -660,8 +660,8 @@ void Application::checkMapVersion() { QString versionFeatures; if (cDevVersion() && Local::oldMapVersion() < 8047) { versionFeatures = QString::fromUtf8("\xe2\x80\x94 Search for messages in conversation\n\xe2\x80\x94 Clear messages history in groups\n\xe2\x80\x94 Contacts without messages are hidden from the conversations list");// .replace('@', qsl("@") + QChar(0x200D)); - } else if (!cDevVersion() && Local::oldMapVersion() < 8045) { - versionFeatures = lang(lng_new_version_minor).trimmed(); + } else if (!cDevVersion() && Local::oldMapVersion() < 8048) { + versionFeatures = lang(lng_new_version_text).trimmed(); } if (!versionFeatures.isEmpty()) { versionFeatures = lng_new_version_wrap(lt_version, QString::fromStdWString(AppVersionStr), lt_changes, versionFeatures, lt_link, qsl("https://desktop.telegram.org/#changelog")); diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 3a7421a80..fba2537d3 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,9 +17,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8047; -static const wchar_t *AppVersionStr = L"0.8.47"; -static const bool DevVersion = true; +static const int32 AppVersion = 8048; +static const wchar_t *AppVersionStr = L"0.8.48"; +static const bool DevVersion = false; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index b066496f6..e397d0312 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.47 + 0.8.48 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index 14b5bc3c7f1352997641b0788d79ece1cb29d006..6be09603894469ffd0be0a1e42d4737f429e8e01 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig^~ delta 53 zcmZ3Yy+nIM5ig_p6O diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index d0f9fc4ba..acf18ab7f 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -1707,7 +1707,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.47; + CURRENT_PROJECT_VERSION = 0.8.48; DEBUG_INFORMATION_FORMAT = dwarf; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -1725,7 +1725,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 0.8.47; + CURRENT_PROJECT_VERSION = 0.8.48; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = fast; GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h; @@ -1751,10 +1751,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.47; + CURRENT_PROJECT_VERSION = 0.8.48; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DYLIB_COMPATIBILITY_VERSION = 0.8; - DYLIB_CURRENT_VERSION = 0.8.47; + DYLIB_CURRENT_VERSION = 0.8.48; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -1885,10 +1885,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.47; + CURRENT_PROJECT_VERSION = 0.8.48; DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 0.8; - DYLIB_CURRENT_VERSION = 0.8.47; + DYLIB_CURRENT_VERSION = 0.8.48; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; diff --git a/Telegram/Version.sh b/Telegram/Version.sh index 8761287d7..89b3f7622 100755 --- a/Telegram/Version.sh +++ b/Telegram/Version.sh @@ -1,2 +1,2 @@ -echo 0.8 8047 0.8.47 1 +echo 0.8 8048 0.8.48 0 # AppVersionStrMajor AppVersion AppVersionStr DevChannel From cf9737e762e161d788986e6d24c9b4252ebd53dc Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 11 Aug 2015 22:50:48 +0300 Subject: [PATCH 089/121] Windows 8/8.1/10 toast notifications support added --- Telegram/Resources/lang.strings | 1 + Telegram/SourceFiles/config.h | 1 + Telegram/SourceFiles/gui/images.h | 4 + Telegram/SourceFiles/localstorage.cpp | 13 +- Telegram/SourceFiles/pspecific_linux.h | 4 + Telegram/SourceFiles/pspecific_mac.h | 4 + Telegram/SourceFiles/pspecific_wnd.cpp | 830 ++++++++++++++++++++++-- Telegram/SourceFiles/pspecific_wnd.h | 7 + Telegram/SourceFiles/settings.cpp | 6 +- Telegram/SourceFiles/settings.h | 2 + Telegram/SourceFiles/settingswidget.cpp | 21 + Telegram/SourceFiles/settingswidget.h | 4 +- Telegram/SourceFiles/types.h | 87 +-- Telegram/Telegram.vcxproj | 5 +- 14 files changed, 889 insertions(+), 100 deletions(-) diff --git a/Telegram/Resources/lang.strings b/Telegram/Resources/lang.strings index b462bcd6d..19528d4ac 100644 --- a/Telegram/Resources/lang.strings +++ b/Telegram/Resources/lang.strings @@ -185,6 +185,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_desktop_notify" = "Desktop notifications"; "lng_settings_show_name" = "Show sender's name"; "lng_settings_show_preview" = "Show message preview"; +"lng_settings_use_windows" = "Use Windows notifications"; "lng_settings_sound_notify" = "Play sound"; "lng_notification_preview" = "You have a new message"; diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index fba2537d3..b53fe420e 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -321,6 +321,7 @@ enum { MemoryForImageCache = 64 * 1024 * 1024, // after 64mb of unpacked images we try to clear some memory NotifyWindowsCount = 3, // 3 desktop notifies at the same time NotifySettingSaveTimeout = 1000, // wait 1 second before saving notify setting to server + NotifyDeletePhotoAfter = 60000, // delete notify photo after 1 minute UpdateChunk = 100 * 1024, // 100kb parts when downloading the update IdleMsecs = 60 * 1000, // after 60secs without user input we think we are idle diff --git a/Telegram/SourceFiles/gui/images.h b/Telegram/SourceFiles/gui/images.h index 8ebec1dc2..2d1e4a139 100644 --- a/Telegram/SourceFiles/gui/images.h +++ b/Telegram/SourceFiles/gui/images.h @@ -154,6 +154,10 @@ inline StorageKey storageKey(int32 dc, const uint64 &volume, int32 local) { inline StorageKey storageKey(const MTPDfileLocation &location) { return storageKey(location.vdc_id.v, location.vvolume_id.v, location.vlocal_id.v); } +inline StorageKey storageKey(const StorageImageLocation &location) { + return storageKey(location.dc, location.volume, location.local); +} + enum StorageFileType { StorageFileUnknown = 0xaa963b05, // mtpc_storage_fileUnknown StorageFileJpeg = 0x7efe0e, // mtpc_storage_fileJpeg diff --git a/Telegram/SourceFiles/localstorage.cpp b/Telegram/SourceFiles/localstorage.cpp index 4f6103da4..0809f9205 100644 --- a/Telegram/SourceFiles/localstorage.cpp +++ b/Telegram/SourceFiles/localstorage.cpp @@ -19,6 +19,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "localstorage.h" #include "mainwidget.h" +#include "window.h" #include "lang.h" namespace { @@ -737,6 +738,15 @@ namespace { cSetDesktopNotify(v == 1); } break; + case dbiWindowsNotifications: { + qint32 v; + stream >> v; + if (!_checkStreamStatus(stream)) return false; + + cSetWindowsNotifications(v == 1); + cSetCustomNotifies((App::wnd() ? App::wnd()->psHasNativeNotifications() : true) && !cWindowsNotifications()); + } break; + case dbiWorkMode: { qint32 v; stream >> v; @@ -1269,7 +1279,7 @@ namespace { _writeMap(WriteMapFast); } - uint32 size = 12 * (sizeof(quint32) + sizeof(qint32)); + uint32 size = 13 * (sizeof(quint32) + sizeof(qint32)); size += sizeof(quint32) + _stringSize(cAskDownloadPath() ? QString() : cDownloadPath()); size += sizeof(quint32) + sizeof(qint32) + (cRecentEmojisPreload().isEmpty() ? cGetRecentEmojis().size() : cRecentEmojisPreload().size()) * (sizeof(uint64) + sizeof(ushort)); size += sizeof(quint32) + sizeof(qint32) + cEmojiVariants().size() * (sizeof(uint32) + sizeof(uint64)); @@ -1285,6 +1295,7 @@ namespace { data.stream << quint32(dbiSoundNotify) << qint32(cSoundNotify()); data.stream << quint32(dbiDesktopNotify) << qint32(cDesktopNotify()); data.stream << quint32(dbiNotifyView) << qint32(cNotifyView()); + data.stream << quint32(dbiWindowsNotifications) << qint32(cWindowsNotifications()); data.stream << quint32(dbiAskDownloadPath) << qint32(cAskDownloadPath()); data.stream << quint32(dbiDownloadPath) << (cAskDownloadPath() ? QString() : cDownloadPath()); data.stream << quint32(dbiCompressPastedImage) << qint32(cCompressPastedImage()); diff --git a/Telegram/SourceFiles/pspecific_linux.h b/Telegram/SourceFiles/pspecific_linux.h index 580fefcec..a4de7f9ba 100644 --- a/Telegram/SourceFiles/pspecific_linux.h +++ b/Telegram/SourceFiles/pspecific_linux.h @@ -68,6 +68,10 @@ public: void psUpdateCounter(); + bool psHasNativeNotifications() { + return false; + } + virtual QImage iconWithCounter(int size, int count, style::color bg, bool smallIcon) = 0; ~PsMainWindow(); diff --git a/Telegram/SourceFiles/pspecific_mac.h b/Telegram/SourceFiles/pspecific_mac.h index 5dcda2877..a9807a175 100644 --- a/Telegram/SourceFiles/pspecific_mac.h +++ b/Telegram/SourceFiles/pspecific_mac.h @@ -83,6 +83,10 @@ public: void psUpdateCounter(); + bool psHasNativeNotifications() { + return !(QSysInfo::macVersion() < QSysInfo::MV_10_8); + } + virtual QImage iconWithCounter(int size, int count, style::color bg, bool smallIcon) = 0; ~PsMainWindow(); diff --git a/Telegram/SourceFiles/pspecific_wnd.cpp b/Telegram/SourceFiles/pspecific_wnd.cpp index a7ad89a93..d8dd244c7 100644 --- a/Telegram/SourceFiles/pspecific_wnd.cpp +++ b/Telegram/SourceFiles/pspecific_wnd.cpp @@ -24,6 +24,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "localstorage.h" +#include "passcodewidget.h" + #include #include #include @@ -33,11 +35,29 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include #include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + #include #define min(a, b) ((a) < (b) ? (a) : (b)) #define max(a, b) ((a) < (b) ? (b) : (a)) +#include + #ifndef DCX_USESTYLE #define DCX_USESTYLE 0x00010000 #endif @@ -48,9 +68,15 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #define WM_NCPOINTERUP 0x0243 #endif -#include -#pragma comment (lib,"Gdiplus.lib") -#pragma comment (lib,"Msimg32.lib") +const WCHAR AppUserModelId[] = L"Telegram.TelegramDesktop"; + +static const PROPERTYKEY pkey_AppUserModel_ID = { { 0x9F4C2855, 0x9F79, 0x4B39, { 0xA8, 0xD0, 0xE1, 0xD4, 0x2D, 0xE1, 0xD5, 0xF3 } }, 5 }; +static const PROPERTYKEY pkey_AppUserModel_StartPinOption = { { 0x9F4C2855, 0x9F79, 0x4B39, { 0xA8, 0xD0, 0xE1, 0xD4, 0x2D, 0xE1, 0xD5, 0xF3 } }, 12 }; + +using namespace Microsoft::WRL; +using namespace ABI::Windows::UI::Notifications; +using namespace ABI::Windows::Data::Xml::Dom; +using namespace Windows::Foundation; namespace { QStringList _initLogs; @@ -61,6 +87,7 @@ namespace { bool useOpenAs = false; bool useWtsapi = false; bool useShellapi = false; + bool useToast = false; bool themeInited = false; bool finished = true; int menuShown = 0, menuHidden = 0; @@ -70,7 +97,27 @@ namespace { bool sessionLoggedOff = false; UINT tbCreatedMsgId = 0; - ITaskbarList3 *tbListInterface = 0; + + ComPtr taskbarList; + + ComPtr toastNotificationManager; + ComPtr toastNotifier; + ComPtr toastNotificationFactory; + struct ToastNotificationPtr { + ToastNotificationPtr() { + } + ToastNotificationPtr(const ComPtr &ptr) : p(ptr) { + } + ComPtr p; + }; + typedef QMap > ToastNotifications; + ToastNotifications toastNotifications; + struct ToastImage { + uint64 until; + QString path; + }; + typedef QMap ToastImages; + ToastImages toastImages; HWND createTaskbarHider() { HINSTANCE appinst = (HINSTANCE)GetModuleHandle(0); @@ -245,9 +292,7 @@ namespace { destroy(); return false; } -// if (QSysInfo::windowsVersion() >= QSysInfo::WV_WINDOWS8) { - SetWindowLong(hwnds[i], GWL_HWNDPARENT, (LONG)hwnd); -// } + SetWindowLong(hwnds[i], GWL_HWNDPARENT, (LONG)hwnd); dcs[i] = CreateCompatibleDC(screenDC); if (!dcs[i]) { @@ -629,9 +674,6 @@ namespace { typedef HRESULT (FAR STDAPICALLTYPE *f_shCreateItemFromParsingName)(PCWSTR pszPath, IBindCtx *pbc, REFIID riid, void **ppv); f_shCreateItemFromParsingName shCreateItemFromParsingName = 0; - typedef HRESULT (FAR STDAPICALLTYPE *f_shLoadIndirectString)(LPCWSTR pszSource, LPWSTR pszOutBuf, UINT cchOutBuf, void **ppvReserved); - f_shLoadIndirectString shLoadIndirectString = 0; - typedef BOOL (FAR STDAPICALLTYPE *f_wtsRegisterSessionNotification)(HWND hWnd, DWORD dwFlags); f_wtsRegisterSessionNotification wtsRegisterSessionNotification = 0; @@ -640,6 +682,21 @@ namespace { typedef HRESULT (FAR STDAPICALLTYPE *f_shQueryUserNotificationState)(QUERY_USER_NOTIFICATION_STATE *pquns); f_shQueryUserNotificationState shQueryUserNotificationState = 0; + + typedef HRESULT (FAR STDAPICALLTYPE *f_setCurrentProcessExplicitAppUserModelID)(__in PCWSTR AppID); + f_setCurrentProcessExplicitAppUserModelID setCurrentProcessExplicitAppUserModelID = 0; + + typedef HRESULT (FAR STDAPICALLTYPE *f_roGetActivationFactory)(_In_ HSTRING activatableClassId, _In_ REFIID iid, _COM_Outptr_ void ** factory); + f_roGetActivationFactory roGetActivationFactory = 0; + + typedef HRESULT (FAR STDAPICALLTYPE *f_windowsCreateStringReference)(_In_reads_opt_(length + 1) PCWSTR sourceString, UINT32 length, _Out_ HSTRING_HEADER * hstringHeader, _Outptr_result_maybenull_ _Result_nullonfailure_ HSTRING * string); + f_windowsCreateStringReference windowsCreateStringReference = 0; + + typedef HRESULT (FAR STDAPICALLTYPE *f_windowsDeleteString)(_In_opt_ HSTRING string); + f_windowsDeleteString windowsDeleteString = 0; + + typedef HRESULT (FAR STDAPICALLTYPE *f_propVariantToString)(_In_ REFPROPVARIANT propvar, _Out_writes_(cch) PWSTR psz, _In_ UINT cch); + f_propVariantToString propVariantToString = 0; template bool loadFunction(HINSTANCE dll, LPCSTR name, TFunction &func) { @@ -657,6 +714,7 @@ namespace { setupUx(); setupShell(); setupWtsapi(); + setupCombase(); } void setupUx() { HINSTANCE procId = LoadLibrary(L"UXTHEME.DLL"); @@ -669,19 +727,24 @@ namespace { setupOpenWith(procId); setupOpenAs(procId); setupShellapi(procId); + setupAppUserModel(procId); } void setupOpenWith(HINSTANCE procId) { if (!loadFunction(procId, "SHAssocEnumHandlers", shAssocEnumHandlers)) return; if (!loadFunction(procId, "SHCreateItemFromParsingName", shCreateItemFromParsingName)) return; useOpenWith = true; - - HINSTANCE otherProcId = LoadLibrary(L"SHLWAPI.DLL"); - if (otherProcId) loadFunction(otherProcId, "SHLoadIndirectString", shLoadIndirectString); } void setupOpenAs(HINSTANCE procId) { if (!loadFunction(procId, "SHOpenWithDialog", shOpenWithDialog) && !loadFunction(procId, "OpenAs_RunDLLW", openAs_RunDLL)) return; useOpenAs = true; } + void setupShellapi(HINSTANCE procId) { + if (!loadFunction(procId, "SHQueryUserNotificationState", shQueryUserNotificationState)) return; + useShellapi = true; + } + void setupAppUserModel(HINSTANCE procId) { + if (!loadFunction(procId, "SetCurrentProcessExplicitAppUserModelID", setCurrentProcessExplicitAppUserModelID)) return; + } void setupWtsapi() { HINSTANCE procId = LoadLibrary(L"WTSAPI32.DLL"); @@ -689,9 +752,24 @@ namespace { if (!loadFunction(procId, "WTSUnRegisterSessionNotification", wtsUnRegisterSessionNotification)) return; useWtsapi = true; } - void setupShellapi(HINSTANCE procId) { - if (!loadFunction(procId, "SHQueryUserNotificationState", shQueryUserNotificationState)) return; - useShellapi = true; + void setupCombase() { + if (!setCurrentProcessExplicitAppUserModelID) return; + + HINSTANCE procId = LoadLibrary(L"COMBASE.DLL"); + setupToast(procId); + } + void setupToast(HINSTANCE procId) { + if (QSysInfo::windowsVersion() < QSysInfo::WV_WINDOWS8) return; + if (!loadFunction(procId, "RoGetActivationFactory", roGetActivationFactory)) return; + + HINSTANCE otherProcId = LoadLibrary(L"api-ms-win-core-winrt-string-l1-1-0.dll"); + if (!loadFunction(otherProcId, "WindowsCreateStringReference", windowsCreateStringReference)) return; + if (!loadFunction(otherProcId, "WindowsDeleteString", windowsDeleteString)) return; + + HINSTANCE otherOtherProcId = LoadLibrary(L"PROPSYS.DLL"); + if (!loadFunction(otherOtherProcId, "PropVariantToString", propVariantToString)) return; + + useToast = true; } }; _PsInitializer _psInitializer; @@ -718,8 +796,9 @@ namespace { bool mainWindowEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, LRESULT *result) { if (tbCreatedMsgId && msg == tbCreatedMsgId) { - if (CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_ALL, IID_ITaskbarList3, (void**)&tbListInterface) != S_OK) { - tbListInterface = 0; + HRESULT hr = CoCreateInstance(CLSID_TaskbarList, nullptr, CLSCTX_ALL, IID_PPV_ARGS(&taskbarList)); + if (!SUCCEEDED(hr)) { + taskbarList.Reset(); } } switch (msg) { @@ -915,12 +994,41 @@ namespace { PsMainWindow::PsMainWindow(QWidget *parent) : QMainWindow(parent), ps_hWnd(0), ps_menu(0), icon256(qsl(":/gui/art/icon256.png")), iconbig256(qsl(":/gui/art/iconbig256.png")), wndIcon(QPixmap::fromImage(icon256, Qt::ColorOnly)), ps_iconBig(0), ps_iconSmall(0), ps_iconOverlay(0), trayIcon(0), trayIconMenu(0), posInited(false), ps_tbHider_hWnd(createTaskbarHider()) { tbCreatedMsgId = RegisterWindowMessage(L"TaskbarButtonCreated"); + connect(&ps_cleanNotifyPhotosTimer, SIGNAL(timeout()), this, SLOT(psCleanNotifyPhotos())); } void PsMainWindow::psShowTrayMenu() { trayIconMenu->popup(QCursor::pos()); } +void PsMainWindow::psCleanNotifyPhotosIn(int32 dt) { + if (dt < 0) { + if (ps_cleanNotifyPhotosTimer.isActive() && ps_cleanNotifyPhotosTimer.remainingTime() <= -dt) return; + dt = -dt; + } + ps_cleanNotifyPhotosTimer.start(dt); +} + +void PsMainWindow::psCleanNotifyPhotos() { + uint64 ms = getms(true), minuntil = 0; + for (ToastImages::iterator i = toastImages.begin(); i != toastImages.end();) { + if (!i->until) { + ++i; + continue; + } + if (i->until <= ms) { + QFile(i->path).remove(); + i = toastImages.erase(i); + } else { + if (!minuntil || minuntil > i->until) { + minuntil = i->until; + } + ++i; + } + } + if (minuntil) psCleanNotifyPhotosIn(int32(minuntil - ms)); +} + void PsMainWindow::psRefreshTaskbarIcon() { QWidget *w = new QWidget(this); w->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint); @@ -1008,8 +1116,8 @@ void PsMainWindow::psUpdateCounter() { QIcon iconSmall, iconBig; iconSmall.addPixmap(QPixmap::fromImage(iconWithCounter(16, counter, bg, true), Qt::ColorOnly)); iconSmall.addPixmap(QPixmap::fromImage(iconWithCounter(32, counter, bg, true), Qt::ColorOnly)); - iconBig.addPixmap(QPixmap::fromImage(iconWithCounter(32, tbListInterface ? 0 : counter, bg, false), Qt::ColorOnly)); - iconBig.addPixmap(QPixmap::fromImage(iconWithCounter(64, tbListInterface ? 0 : counter, bg, false), Qt::ColorOnly)); + iconBig.addPixmap(QPixmap::fromImage(iconWithCounter(32, taskbarList.Get() ? 0 : counter, bg, false), Qt::ColorOnly)); + iconBig.addPixmap(QPixmap::fromImage(iconWithCounter(64, taskbarList.Get() ? 0 : counter, bg, false), Qt::ColorOnly)); if (trayIcon) { trayIcon->setIcon(iconSmall); } @@ -1020,7 +1128,7 @@ void PsMainWindow::psUpdateCounter() { ps_iconBig = _qt_createHIcon(iconBig, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON)); SendMessage(ps_hWnd, WM_SETICON, 0, (LPARAM)ps_iconSmall); SendMessage(ps_hWnd, WM_SETICON, 1, (LPARAM)(ps_iconBig ? ps_iconBig : ps_iconSmall)); - if (tbListInterface) { + if (taskbarList.Get()) { if (counter > 0) { QIcon iconOverlay; iconOverlay.addPixmap(QPixmap::fromImage(iconWithCounter(-16, counter, bg, false), Qt::ColorOnly)); @@ -1028,9 +1136,7 @@ void PsMainWindow::psUpdateCounter() { ps_iconOverlay = _qt_createHIcon(iconOverlay, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON)); } QString description = counter > 0 ? QString("%1 unread messages").arg(counter) : qsl("No unread messages"); - static WCHAR descriptionArr[1024]; - description.toWCharArray(descriptionArr); - tbListInterface->SetOverlayIcon(ps_hWnd, ps_iconOverlay, descriptionArr); + taskbarList->SetOverlayIcon(ps_hWnd, ps_iconOverlay, description.toStdWString().c_str()); } SetWindowPos(ps_hWnd, 0, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE); } @@ -1089,6 +1195,10 @@ void PsMainWindow::psInitSize() { setGeometry(geom); } +bool InitToastManager(); +bool CreateToast(PeerData *peer, int32 msgId, bool showpix, const QString &title, const QString &subtitle, const QString &msg); +void CleanupAppUserModelIdShortcut(); + void PsMainWindow::psInitFrameless() { psUpdatedPositionTimer.setSingleShot(true); connect(&psUpdatedPositionTimer, SIGNAL(timeout()), this, SLOT(psSavePosition())); @@ -1105,6 +1215,9 @@ void PsMainWindow::psInitFrameless() { } // RegisterApplicationRestart(NULL, 0); + if (!InitToastManager()) { + useToast = false; + } psInitSysMenu(); } @@ -1151,8 +1264,18 @@ void PsMainWindow::psUpdatedPosition() { psUpdatedPositionTimer.start(SaveWindowPositionTimeout); } +bool PsMainWindow::psHasNativeNotifications() { + return useToast; +} + Q_DECLARE_METATYPE(QMargins); void PsMainWindow::psFirstShow() { + if (useToast) { + cSetCustomNotifies(!cWindowsNotifications()); + } else { + cSetCustomNotifies(true); + } + _psShadowWindows.init(_shActive); finished = false; @@ -1328,6 +1451,13 @@ PsMainWindow::~PsMainWindow() { } } + if (taskbarList) taskbarList.Reset(); + + toastNotifications.clear(); + if (toastNotificationManager) toastNotificationManager.Reset(); + if (toastNotifier) toastNotifier.Reset(); + if (toastNotificationFactory) toastNotificationFactory.Reset(); + finished = true; if (ps_menu) DestroyMenu(ps_menu); psDestroyIcons(); @@ -1367,12 +1497,40 @@ void PsMainWindow::psActivateNotify(NotifyWindow *w) { } void PsMainWindow::psClearNotifies(PeerId peerId) { + if (!toastNotifier) return; + + if (peerId) { + ToastNotifications::iterator i = toastNotifications.find(peerId); + if (i != toastNotifications.cend()) { + QMap temp = i.value(); + toastNotifications.erase(i); + + for (QMap::const_iterator j = temp.cbegin(), e = temp.cend(); j != e; ++j) { + toastNotifier->Hide(j->p.Get()); + } + } + } else { + ToastNotifications temp = toastNotifications; + toastNotifications.clear(); + + for (ToastNotifications::const_iterator i = temp.cbegin(), end = temp.cend(); i != end; ++i) { + for (QMap::const_iterator j = i->cbegin(), e = i->cend(); j != e; ++j) { + toastNotifier->Hide(j->p.Get()); + } + } + } } void PsMainWindow::psNotifyShown(NotifyWindow *w) { } void PsMainWindow::psPlatformNotify(HistoryItem *item, int32 fwdCount) { + QString title = (!App::passcoded() && cNotifyView() <= dbinvShowName) ? item->history()->peer->name : qsl("Telegram Desktop"); + QString subtitle = (!App::passcoded() && cNotifyView() <= dbinvShowName) ? item->notificationHeader() : QString(); + bool showpix = (!App::passcoded() && cNotifyView() <= dbinvShowName); + QString msg = (!App::passcoded() && cNotifyView() <= dbinvShowPreview) ? (fwdCount < 2 ? item->notificationText() : lng_forward_messages(lt_count, fwdCount)) : lang(lng_notification_preview); + + CreateToast(item->history()->peer, item->id, showpix, title, subtitle, msg); } PsApplication::PsApplication(int &argc, char **argv) : QApplication(argc, argv) { @@ -1704,6 +1862,7 @@ void psDoCleanup() { try { psAutoStart(false, true); psSendToMenu(false, true); + CleanupAppUserModelIdShortcut(); } catch (...) { } } @@ -1822,7 +1981,7 @@ namespace { HBITMAP _iconToBitmap(LPWSTR icon, int iconindex) { if (!icon) return 0; WCHAR tmpIcon[4096]; - if (icon[0] == L'@' && shLoadIndirectString && SUCCEEDED(shLoadIndirectString(icon, tmpIcon, 4096, 0))) { + if (icon[0] == L'@' && SUCCEEDED(SHLoadIndirectString(icon, tmpIcon, 4096, 0))) { icon = tmpIcon; } int32 w = GetSystemMetrics(SM_CXSMICON), h = GetSystemMetrics(SM_CYSMICON); @@ -1983,6 +2142,7 @@ void psStart() { } void psFinish() { + psDeleteDir(cWorkingDir() + qsl("tdata/temp")); } namespace { @@ -2038,10 +2198,12 @@ namespace { } void psRegisterCustomScheme() { + + DEBUG_LOG(("App Info: Checking custom scheme 'tg'..")); HKEY rkey; - QString exe = QDir::toNativeSeparators(QDir(cExeDir()).absolutePath() + '/' + QString::fromWCharArray(AppFile) + qsl(".exe")); + QString exe = QDir::toNativeSeparators(cExeDir() + cExeName()); if (!_psOpenRegKey(L"Software\\Classes\\tg", &rkey)) return; if (!_psSetKeyValue(rkey, L"URL Protocol", QString())) return; @@ -2084,9 +2246,9 @@ void psExecTelegram() { if (cTestMode()) targs += qsl(" -testmode"); if (cDataFile() != qsl("data")) targs += qsl(" -key \"") + cDataFile() + '"'; - QString telegram(QDir::toNativeSeparators(cExeDir() + QString::fromWCharArray(AppFile) + qsl(".exe"))), wdir(QDir::toNativeSeparators(cWorkingDir())); + QString telegram(QDir::toNativeSeparators(cExeDir() + cExeName())), wdir(QDir::toNativeSeparators(cWorkingDir())); - DEBUG_LOG(("Application Info: executing %1 %2").arg(cExeDir() + QString::fromWCharArray(AppFile) + qsl(".exe")).arg(targs)); + DEBUG_LOG(("Application Info: executing %1 %2").arg(cExeDir() + cExeName()).arg(targs)); HINSTANCE r = ShellExecute(0, 0, telegram.toStdWString().c_str(), targs.toStdWString().c_str(), wdir.isEmpty() ? 0 : wdir.toStdWString().c_str(), SW_SHOWNORMAL); if (long(r) < 32) { DEBUG_LOG(("Application Error: failed to execute %1, working directory: '%2', result: %3").arg(telegram).arg(wdir).arg(long(r))); @@ -2095,38 +2257,49 @@ void psExecTelegram() { void _manageAppLnk(bool create, bool silent, int path_csidl, const wchar_t *args, const wchar_t *description) { WCHAR startupFolder[MAX_PATH]; - HRESULT hres = SHGetFolderPath(0, path_csidl, 0, SHGFP_TYPE_CURRENT, startupFolder); - if (SUCCEEDED(hres)) { + HRESULT hr = SHGetFolderPath(0, path_csidl, 0, SHGFP_TYPE_CURRENT, startupFolder); + if (SUCCEEDED(hr)) { QString lnk = QString::fromWCharArray(startupFolder) + '\\' + QString::fromWCharArray(AppFile) + qsl(".lnk"); if (create) { - IShellLink* psl; - hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl); - if (SUCCEEDED(hres)) { - IPersistFile* ppf; + ComPtr shellLink; + hr = CoCreateInstance(CLSID_ShellLink, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&shellLink)); + if (SUCCEEDED(hr)) { + ComPtr persistFile; - QString exe = QDir::toNativeSeparators(QDir(cExeDir()).absolutePath() + '/' + QString::fromWCharArray(AppFile) + qsl(".exe")), dir = QDir::toNativeSeparators(QDir(cWorkingDir()).absolutePath()); - psl->SetArguments(args); - psl->SetPath(exe.toStdWString().c_str()); - psl->SetWorkingDirectory(dir.toStdWString().c_str()); - psl->SetDescription(description); + QString exe = QDir::toNativeSeparators(cExeDir() + cExeName()), dir = QDir::toNativeSeparators(QDir(cWorkingDir()).absolutePath()); + shellLink->SetArguments(args); + shellLink->SetPath(exe.toStdWString().c_str()); + shellLink->SetWorkingDirectory(dir.toStdWString().c_str()); + shellLink->SetDescription(description); - hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf); - - if (SUCCEEDED(hres)) { - hres = ppf->Save(lnk.toStdWString().c_str(), TRUE); - ppf->Release(); - } else { - if (!silent) LOG(("App Error: could not create interface IID_IPersistFile %1").arg(hres)); + ComPtr propertyStore; + hr = shellLink.As(&propertyStore); + if (SUCCEEDED(hr)) { + PROPVARIANT appIdPropVar; + hr = InitPropVariantFromString(AppUserModelId, &appIdPropVar); + if (SUCCEEDED(hr)) { + hr = propertyStore->SetValue(pkey_AppUserModel_ID, appIdPropVar); + PropVariantClear(&appIdPropVar); + if (SUCCEEDED(hr)) { + hr = propertyStore->Commit(); + } + } + } + + hr = shellLink.As(&persistFile); + if (SUCCEEDED(hr)) { + hr = persistFile->Save(lnk.toStdWString().c_str(), TRUE); + } else { + if (!silent) LOG(("App Error: could not create interface IID_IPersistFile %1").arg(hr)); } - psl->Release(); } else { - if (!silent) LOG(("App Error: could not create instance of IID_IShellLink %1").arg(hres)); + if (!silent) LOG(("App Error: could not create instance of IID_IShellLink %1").arg(hr)); } } else { QFile::remove(lnk); } } else { - if (!silent) LOG(("App Error: could not get CSIDL %1 folder %2").arg(path_csidl).arg(hres)); + if (!silent) LOG(("App Error: could not get CSIDL %1 folder %2").arg(path_csidl).arg(hr)); } } @@ -2247,3 +2420,562 @@ LONG CALLBACK _exceptionFilter(EXCEPTION_POINTERS* pExceptionPointers) { return _oldWndExceptionFilter ? (*_oldWndExceptionFilter)(pExceptionPointers) : EXCEPTION_CONTINUE_SEARCH; } #endif + +class StringReferenceWrapper { +public: + + StringReferenceWrapper(_In_reads_(length) PCWSTR stringRef, _In_ UINT32 length) throw() { + HRESULT hr = windowsCreateStringReference(stringRef, length, &_header, &_hstring); + if (!SUCCEEDED(hr)) { + RaiseException(static_cast(STATUS_INVALID_PARAMETER), EXCEPTION_NONCONTINUABLE, 0, nullptr); + } + } + + ~StringReferenceWrapper() { + windowsDeleteString(_hstring); + } + + template + StringReferenceWrapper(_In_reads_(N) wchar_t const (&stringRef)[N]) throw() { + UINT32 length = N - 1; + HRESULT hr = windowsCreateStringReference(stringRef, length, &_header, &_hstring); + if (!SUCCEEDED(hr)) { + RaiseException(static_cast(STATUS_INVALID_PARAMETER), EXCEPTION_NONCONTINUABLE, 0, nullptr); + } + } + + template + StringReferenceWrapper(_In_reads_(_) wchar_t(&stringRef)[_]) throw() { + UINT32 length; + HRESULT hr = SizeTToUInt32(wcslen(stringRef), &length); + if (!SUCCEEDED(hr)) { + RaiseException(static_cast(STATUS_INVALID_PARAMETER), EXCEPTION_NONCONTINUABLE, 0, nullptr); + } + + windowsCreateStringReference(stringRef, length, &_header, &_hstring); + } + + HSTRING Get() const throw() { + return _hstring; + } + +private: + HSTRING _hstring; + HSTRING_HEADER _header; + +}; + +HRESULT SetNodeValueString(_In_ HSTRING inputString, _In_ IXmlNode *node, _In_ IXmlDocument *xml) { + ComPtr inputText; + + HRESULT hr = xml->CreateTextNode(inputString, &inputText); + if (!SUCCEEDED(hr)) return hr; + ComPtr inputTextNode; + + hr = inputText.As(&inputTextNode); + if (!SUCCEEDED(hr)) return hr; + + ComPtr pAppendedChild; + return node->AppendChild(inputTextNode.Get(), &pAppendedChild); +} + +HRESULT SetAudioSilent(_In_ IXmlDocument *toastXml) { + ComPtr nodeList; + HRESULT hr = toastXml->GetElementsByTagName(StringReferenceWrapper(L"audio").Get(), &nodeList); + if (!SUCCEEDED(hr)) return hr; + + ComPtr audioNode; + hr = nodeList->Item(0, &audioNode); + if (!SUCCEEDED(hr)) return hr; + + if (audioNode) { + ComPtr audioElement; + hr = audioNode.As(&audioElement); + if (!SUCCEEDED(hr)) return hr; + + hr = audioElement->SetAttribute(StringReferenceWrapper(L"silent").Get(), StringReferenceWrapper(L"true").Get()); + if (!SUCCEEDED(hr)) return hr; + } else { + ComPtr audioElement; + hr = toastXml->CreateElement(StringReferenceWrapper(L"audio").Get(), &audioElement); + if (!SUCCEEDED(hr)) return hr; + + hr = audioElement->SetAttribute(StringReferenceWrapper(L"silent").Get(), StringReferenceWrapper(L"true").Get()); + if (!SUCCEEDED(hr)) return hr; + + ComPtr audioNode; + hr = audioElement.As(&audioNode); + if (!SUCCEEDED(hr)) return hr; + + ComPtr nodeList; + hr = toastXml->GetElementsByTagName(StringReferenceWrapper(L"toast").Get(), &nodeList); + if (!SUCCEEDED(hr)) return hr; + + ComPtr toastNode; + hr = nodeList->Item(0, &toastNode); + if (!SUCCEEDED(hr)) return hr; + + ComPtr appendedNode; + hr = toastNode->AppendChild(audioNode.Get(), &appendedNode); + } + return hr; +} + +HRESULT SetImageSrc(_In_z_ const wchar_t *imagePath, _In_ IXmlDocument *toastXml) { + wchar_t imageSrc[MAX_PATH] = L"file:///"; + HRESULT hr = StringCchCat(imageSrc, ARRAYSIZE(imageSrc), imagePath); + if (!SUCCEEDED(hr)) return hr; + + ComPtr nodeList; + hr = toastXml->GetElementsByTagName(StringReferenceWrapper(L"image").Get(), &nodeList); + if (!SUCCEEDED(hr)) return hr; + + ComPtr imageNode; + hr = nodeList->Item(0, &imageNode); + if (!SUCCEEDED(hr)) return hr; + + ComPtr attributes; + hr = imageNode->get_Attributes(&attributes); + if (!SUCCEEDED(hr)) return hr; + + ComPtr srcAttribute; + hr = attributes->GetNamedItem(StringReferenceWrapper(L"src").Get(), &srcAttribute); + if (!SUCCEEDED(hr)) return hr; + + return SetNodeValueString(StringReferenceWrapper(imageSrc).Get(), srcAttribute.Get(), toastXml); +} + +typedef ABI::Windows::Foundation::ITypedEventHandler DesktopToastActivatedEventHandler; +typedef ABI::Windows::Foundation::ITypedEventHandler DesktopToastDismissedEventHandler; +typedef ABI::Windows::Foundation::ITypedEventHandler DesktopToastFailedEventHandler; + +class ToastEventHandler : public Implements { +public: + ToastEventHandler::ToastEventHandler(uint64 peer, int32 msg) : _ref(1), _peerId(peer), _msgId(msg) { + } + ~ToastEventHandler() { + } + + // DesktopToastActivatedEventHandler + IFACEMETHODIMP Invoke(_In_ IToastNotification *sender, _In_ IInspectable* args) { + ToastNotifications::iterator i = toastNotifications.find(_peerId); + if (i != toastNotifications.cend()) { + i.value().remove(_msgId); + if (i.value().isEmpty()) { + toastNotifications.erase(i); + } + } + if (App::wnd()) { + History *history = App::history(PeerId(_peerId)); + + App::wnd()->showFromTray(); + if (App::passcoded()) { + App::wnd()->passcodeWidget()->setInnerFocus(); + App::wnd()->notifyClear(); + } else { + App::wnd()->hideSettings(); + bool tomsg = history->peer->chat && (_msgId > 0); + if (tomsg) { + HistoryItem *item = App::histItemById(_msgId); + if (!item || !item->notifyByFrom()) { + tomsg = false; + } + } + App::main()->showPeerHistory(history->peer->id, tomsg ? _msgId : ShowAtUnreadMsgId); + App::wnd()->notifyClear(history); + } + SetForegroundWindow(App::wnd()->psHwnd()); + } + return S_OK; + } + + // DesktopToastDismissedEventHandler + IFACEMETHODIMP Invoke(_In_ IToastNotification *sender, _In_ IToastDismissedEventArgs *e) { + ToastDismissalReason tdr; + if (SUCCEEDED(e->get_Reason(&tdr))) { + switch (tdr) { + case ToastDismissalReason_ApplicationHidden: + break; + case ToastDismissalReason_UserCanceled: + case ToastDismissalReason_TimedOut: + default: + ToastNotifications::iterator i = toastNotifications.find(_peerId); + if (i != toastNotifications.cend()) { + i.value().remove(_msgId); + if (i.value().isEmpty()) { + toastNotifications.erase(i); + } + } + break; + } + } + return S_OK; + } + + // DesktopToastFailedEventHandler + IFACEMETHODIMP Invoke(_In_ IToastNotification *sender, _In_ IToastFailedEventArgs *e) { + ToastNotifications::iterator i = toastNotifications.find(_peerId); + if (i != toastNotifications.cend()) { + i.value().remove(_msgId); + if (i.value().isEmpty()) { + toastNotifications.erase(i); + } + } + return S_OK; + } + + // IUnknown + IFACEMETHODIMP_(ULONG) AddRef() { + return InterlockedIncrement(&_ref); + } + + IFACEMETHODIMP_(ULONG) Release() { + ULONG l = InterlockedDecrement(&_ref); + if (l == 0) delete this; + return l; + } + + IFACEMETHODIMP QueryInterface(_In_ REFIID riid, _COM_Outptr_ void **ppv) { + if (IsEqualIID(riid, IID_IUnknown)) + *ppv = static_cast(static_cast(this)); + else if (IsEqualIID(riid, __uuidof(DesktopToastActivatedEventHandler))) + *ppv = static_cast(this); + else if (IsEqualIID(riid, __uuidof(DesktopToastDismissedEventHandler))) + *ppv = static_cast(this); + else if (IsEqualIID(riid, __uuidof(DesktopToastFailedEventHandler))) + *ppv = static_cast(this); + else *ppv = nullptr; + + if (*ppv) { + reinterpret_cast(*ppv)->AddRef(); + return S_OK; + } + + return E_NOINTERFACE; + } + +private: + ULONG _ref; + uint64 _peerId; + int32 _msgId; +}; + +template +_Check_return_ __inline HRESULT _1_GetActivationFactory(_In_ HSTRING activatableClassId, _COM_Outptr_ T** factory) { + return roGetActivationFactory(activatableClassId, IID_INS_ARGS(factory)); +} + +template +inline HRESULT wrap_GetActivationFactory(_In_ HSTRING activatableClassId, _Inout_ Details::ComPtrRef factory) throw() { + return _1_GetActivationFactory(activatableClassId, factory.ReleaseAndGetAddressOf()); +} + +QString toastImage(const StorageKey &key, PeerData *peer) { + uint64 ms = getms(true); + ToastImages::iterator i = toastImages.find(key); + if (i != toastImages.cend()) { + if (i->until) { + i->until = ms + NotifyDeletePhotoAfter; + if (App::wnd()) App::wnd()->psCleanNotifyPhotosIn(-NotifyDeletePhotoAfter); + } + } else { + ToastImage v; + if (key.first) { + v.until = ms + NotifyDeletePhotoAfter; + if (App::wnd()) App::wnd()->psCleanNotifyPhotosIn(-NotifyDeletePhotoAfter); + } else { + v.until = 0; + } + v.path = cWorkingDir() + qsl("tdata/temp/") + QString::number(MTP::nonce(), 16) + qsl(".png"); + if (peer->photo->loaded() && (key.first || key.second)) { + peer->photo->pix().save(v.path, "PNG"); + } else if (!key.first && key.second) { + (peer->chat ? chatDefPhoto : userDefPhoto)(peer->colorIndex)->pix().save(v.path, "PNG"); + } else { + QFile(":/gui/art/iconbig256.png").copy(v.path); + } + i = toastImages.insert(key, v); + } + return i->path; +} + +bool CreateToast(PeerData *peer, int32 msgId, bool showpix, const QString &title, const QString &subtitle, const QString &msg) { + if (!useToast || !toastNotificationManager || !toastNotifier || !toastNotificationFactory) return false; + + ComPtr toastXml; + bool withSubtitle = !subtitle.isEmpty(); + + HRESULT hr = toastNotificationManager->GetTemplateContent(withSubtitle ? ToastTemplateType_ToastImageAndText04 : ToastTemplateType_ToastImageAndText02, &toastXml); + if (!SUCCEEDED(hr)) return false; + + hr = SetAudioSilent(toastXml.Get()); + if (!SUCCEEDED(hr)) return false; + + StorageKey key; + QString imagePath; + if (showpix) { + if (peer->photoLoc.isNull() || !peer->photo->loaded()) { + key = StorageKey(0, (peer->chat ? 0x2000 : 0x1000) | peer->colorIndex); + } else { + key = storageKey(peer->photoLoc); + } + } else { + key = StorageKey(0, 0); + } + QString image = toastImage(key, peer); + std::wstring wimage = QDir::toNativeSeparators(image).toStdWString(); + + hr = SetImageSrc(wimage.c_str(), toastXml.Get()); + if (!SUCCEEDED(hr)) return false; + + ComPtr nodeList; + hr = toastXml->GetElementsByTagName(StringReferenceWrapper(L"text").Get(), &nodeList); + if (!SUCCEEDED(hr)) return false; + + UINT32 nodeListLength; + hr = nodeList->get_Length(&nodeListLength); + if (!SUCCEEDED(hr)) return false; + + if (nodeListLength < (withSubtitle ? 3 : 2)) return false; + + { + ComPtr textNode; + hr = nodeList->Item(0, &textNode); + if (!SUCCEEDED(hr)) return false; + + std::wstring wtitle = title.toStdWString(); + hr = SetNodeValueString(StringReferenceWrapper(wtitle.data(), wtitle.size()).Get(), textNode.Get(), toastXml.Get()); + if (!SUCCEEDED(hr)) return false; + } + if (withSubtitle) { + ComPtr textNode; + hr = nodeList->Item(1, &textNode); + if (!SUCCEEDED(hr)) return false; + + std::wstring wsubtitle = subtitle.toStdWString(); + hr = SetNodeValueString(StringReferenceWrapper(wsubtitle.data(), wsubtitle.size()).Get(), textNode.Get(), toastXml.Get()); + if (!SUCCEEDED(hr)) return false; + } + { + ComPtr textNode; + hr = nodeList->Item(withSubtitle ? 2 : 1, &textNode); + if (!SUCCEEDED(hr)) return false; + + std::wstring wmsg = msg.toStdWString(); + hr = SetNodeValueString(StringReferenceWrapper(wmsg.data(), wmsg.size()).Get(), textNode.Get(), toastXml.Get()); + if (!SUCCEEDED(hr)) return false; + } + + ComPtr toast; + hr = toastNotificationFactory->CreateToastNotification(toastXml.Get(), &toast); + if (!SUCCEEDED(hr)) return false; + + EventRegistrationToken activatedToken, dismissedToken, failedToken; + ComPtr eventHandler(new ToastEventHandler(peer->id, msgId)); + + hr = toast->add_Activated(eventHandler.Get(), &activatedToken); + if (!SUCCEEDED(hr)) return false; + + hr = toast->add_Dismissed(eventHandler.Get(), &dismissedToken); + if (!SUCCEEDED(hr)) return false; + + hr = toast->add_Failed(eventHandler.Get(), &failedToken); + if (!SUCCEEDED(hr)) return false; + + ToastNotifications::iterator i = toastNotifications.find(peer->id); + if (i == toastNotifications.cend()) { + i = toastNotifications.insert(peer->id, QMap()); + } else { + QMap::iterator j = i->find(msgId); + if (j != i->cend()) { + toastNotifier->Hide(j->p.Get()); + i->erase(j); + if (i->isEmpty()) { + toastNotifications.erase(i); + } + } + } + hr = toastNotifier->Show(toast.Get()); + if (!SUCCEEDED(hr)) { + if (i->isEmpty()) toastNotifications.erase(i); + return false; + } + i->insert(msgId, toast); + + return true; +} + +QString systemShortcutPath() { + static const int maxFileLen = MAX_PATH * 10; + WCHAR wstrPath[maxFileLen]; + if (GetEnvironmentVariable(L"APPDATA", wstrPath, maxFileLen)) { + QDir appData(QString::fromStdWString(std::wstring(wstrPath))); + return appData.absolutePath() + qsl("/Microsoft/Windows/Start Menu/Programs/"); + } + return QString(); +} + +void CleanupAppUserModelIdShortcut() { + static const int maxFileLen = MAX_PATH * 10; + + QString path = systemShortcutPath() + qsl("Telegram.lnk"); + std::wstring p = QDir::toNativeSeparators(path).toStdWString(); + + DWORD attributes = GetFileAttributes(p.c_str()); + if (attributes >= 0xFFFFFFF) return; // file does not exist + + ComPtr shellLink; + HRESULT hr = CoCreateInstance(CLSID_ShellLink, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&shellLink)); + if (!SUCCEEDED(hr)) return; + + ComPtr persistFile; + hr = shellLink.As(&persistFile); + if (!SUCCEEDED(hr)) return; + + hr = persistFile->Load(p.c_str(), STGM_READWRITE); + if (!SUCCEEDED(hr)) return; + + WCHAR szGotPath[MAX_PATH]; + WIN32_FIND_DATA wfd; + hr = shellLink->GetPath(szGotPath, MAX_PATH, (WIN32_FIND_DATA*)&wfd, SLGP_SHORTPATH); + if (!SUCCEEDED(hr)) return; + + if (QDir::toNativeSeparators(cExeDir() + cExeName()).toStdWString() == szGotPath) { + QFile().remove(path); + } +} + +bool ValidateAppUserModelIdShortcutAt(const QString &path) { + static const int maxFileLen = MAX_PATH * 10; + + std::wstring p = QDir::toNativeSeparators(path).toStdWString(); + + DWORD attributes = GetFileAttributes(p.c_str()); + if (attributes >= 0xFFFFFFF) return false; // file does not exist + + ComPtr shellLink; + HRESULT hr = CoCreateInstance(CLSID_ShellLink, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&shellLink)); + if (!SUCCEEDED(hr)) return false; + + ComPtr persistFile; + hr = shellLink.As(&persistFile); + if (!SUCCEEDED(hr)) return false; + + hr = persistFile->Load(p.c_str(), STGM_READWRITE); + if (!SUCCEEDED(hr)) return false; + + ComPtr propertyStore; + hr = shellLink.As(&propertyStore); + if (!SUCCEEDED(hr)) return false; + + PROPVARIANT appIdPropVar; + hr = propertyStore->GetValue(pkey_AppUserModel_ID, &appIdPropVar); + if (!SUCCEEDED(hr)) return false; + + WCHAR already[MAX_PATH]; + hr = propVariantToString(appIdPropVar, already, MAX_PATH); + if (SUCCEEDED(hr)) { + if (std::wstring(AppUserModelId) == already) { + PropVariantClear(&appIdPropVar); + return true; + } + } + if (appIdPropVar.vt != VT_EMPTY) { + PropVariantClear(&appIdPropVar); + return false; + } + PropVariantClear(&appIdPropVar); + + hr = InitPropVariantFromString(AppUserModelId, &appIdPropVar); + if (!SUCCEEDED(hr)) return false; + + hr = propertyStore->SetValue(pkey_AppUserModel_ID, appIdPropVar); + PropVariantClear(&appIdPropVar); + if (!SUCCEEDED(hr)) return false; + + hr = propertyStore->Commit(); + if (!SUCCEEDED(hr)) return false; + + if (persistFile->IsDirty() == S_OK) { + persistFile->Save(p.c_str(), TRUE); + } + + return true; +} + +bool ValidateAppUserModelIdShortcut() { + if (!useToast) return false; + + QString path = systemShortcutPath(); + if (path.isEmpty()) return false; + + if (ValidateAppUserModelIdShortcutAt(path + qsl("Telegram Desktop/Telegram.lnk"))) return true; + if (ValidateAppUserModelIdShortcutAt(path + qsl("Telegram Win (Unofficial)/Telegram.lnk"))) return true; + + path += qsl("Telegram.lnk"); + if (ValidateAppUserModelIdShortcutAt(path)) return true; + + ComPtr shellLink; + HRESULT hr = CoCreateInstance(CLSID_ShellLink, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&shellLink)); + if (!SUCCEEDED(hr)) return false; + + hr = shellLink->SetPath(QDir::toNativeSeparators(cExeDir() + cExeName()).toStdWString().c_str()); + if (!SUCCEEDED(hr)) return false; + + hr = shellLink->SetArguments(L""); + if (!SUCCEEDED(hr)) return false; + + hr = shellLink->SetWorkingDirectory(QDir::toNativeSeparators(QDir(cWorkingDir()).absolutePath()).toStdWString().c_str()); + if (!SUCCEEDED(hr)) return false; + + ComPtr propertyStore; + hr = shellLink.As(&propertyStore); + if (!SUCCEEDED(hr)) return false; + + PROPVARIANT appIdPropVar; + hr = InitPropVariantFromString(AppUserModelId, &appIdPropVar); + if (!SUCCEEDED(hr)) return false; + + hr = propertyStore->SetValue(pkey_AppUserModel_ID, appIdPropVar); + PropVariantClear(&appIdPropVar); + if (!SUCCEEDED(hr)) return false; + + PROPVARIANT startPinPropVar; + hr = InitPropVariantFromUInt32(APPUSERMODEL_STARTPINOPTION_NOPINONINSTALL, &startPinPropVar); + if (!SUCCEEDED(hr)) return false; + + hr = propertyStore->SetValue(pkey_AppUserModel_StartPinOption, startPinPropVar); + PropVariantClear(&startPinPropVar); + if (!SUCCEEDED(hr)) return false; + + hr = propertyStore->Commit(); + if (!SUCCEEDED(hr)) return false; + + ComPtr persistFile; + hr = shellLink.As(&persistFile); + if (!SUCCEEDED(hr)) return false; + + hr = persistFile->Save(QDir::toNativeSeparators(path).toStdWString().c_str(), TRUE); + if (!SUCCEEDED(hr)) return false; + + return true; +} + +bool InitToastManager() { + if (!useToast || !ValidateAppUserModelIdShortcut()) return false; + + if (!SUCCEEDED(setCurrentProcessExplicitAppUserModelID(AppUserModelId))) { + return false; + } + if (!SUCCEEDED(wrap_GetActivationFactory(StringReferenceWrapper(RuntimeClass_Windows_UI_Notifications_ToastNotificationManager).Get(), &toastNotificationManager))) { + return false; + } + if (!SUCCEEDED(toastNotificationManager->CreateToastNotifierWithId(StringReferenceWrapper(AppUserModelId).Get(), &toastNotifier))) { + return false; + } + if (!SUCCEEDED(wrap_GetActivationFactory(StringReferenceWrapper(RuntimeClass_Windows_UI_Notifications_ToastNotification).Get(), &toastNotificationFactory))) { + return false; + } + QDir().mkpath(cWorkingDir() + qsl("tdata/temp")); + return true; +} diff --git a/Telegram/SourceFiles/pspecific_wnd.h b/Telegram/SourceFiles/pspecific_wnd.h index 6e8040b23..bf07c1c1a 100644 --- a/Telegram/SourceFiles/pspecific_wnd.h +++ b/Telegram/SourceFiles/pspecific_wnd.h @@ -67,6 +67,9 @@ public: void psUpdateCounter(); + bool psHasNativeNotifications(); + void psCleanNotifyPhotosIn(int32 dt); + virtual QImage iconWithCounter(int size, int count, style::color bg, bool smallIcon) = 0; ~PsMainWindow(); @@ -77,6 +80,8 @@ public slots: void psSavePosition(Qt::WindowState state = Qt::WindowActive); void psShowTrayMenu(); + void psCleanNotifyPhotos(); + protected: bool psHasTrayIcon() const { @@ -100,6 +105,8 @@ private: HMENU ps_menu; HICON ps_iconBig, ps_iconSmall, ps_iconOverlay; + SingleTimer ps_cleanNotifyPhotosTimer; + void psDestroyIcons(); }; diff --git a/Telegram/SourceFiles/settings.cpp b/Telegram/SourceFiles/settings.cpp index a9a61afba..da839b676 100644 --- a/Telegram/SourceFiles/settings.cpp +++ b/Telegram/SourceFiles/settings.cpp @@ -42,6 +42,7 @@ QString gDialogLastPath, gDialogHelperPath; // optimize QFileDialog bool gSoundNotify = true; bool gDesktopNotify = true; DBINotifyView gNotifyView = dbinvShowPreview; +bool gWindowsNotifications = true; bool gStartMinimized = false; bool gStartInTray = false; bool gAutoStart = false; @@ -119,11 +120,7 @@ QString gLangFile; bool gRetina = false; float64 gRetinaFactor = 1.; int32 gIntRetinaFactor = 1; -#ifdef Q_OS_MAC -bool gCustomNotifies = false; -#else bool gCustomNotifies = true; -#endif uint64 gInstance = 0.; #ifdef Q_OS_WIN @@ -163,7 +160,6 @@ SavedPeers gSavedPeers; SavedPeersByTime gSavedPeersByTime; void settingsParseArgs(int argc, char *argv[]) { - gCustomNotifies = true; #ifdef Q_OS_MAC if (QSysInfo::macVersion() < QSysInfo::MV_10_8) { gUpdateURL = QUrl(qsl("http://tdesktop.com/mac32/tupdates/current")); diff --git a/Telegram/SourceFiles/settings.h b/Telegram/SourceFiles/settings.h index f5b577fbf..47c9a3610 100644 --- a/Telegram/SourceFiles/settings.h +++ b/Telegram/SourceFiles/settings.h @@ -101,6 +101,8 @@ DeclareSetting(bool, DesktopNotify); DeclareSetting(DBINotifyView, NotifyView); DeclareSetting(bool, AutoUpdate); +DeclareSetting(bool, WindowsNotifications); + struct TWindowPos { TWindowPos() : moncrc(0), maximized(0), x(0), y(0), w(0), h(0) { } diff --git a/Telegram/SourceFiles/settingswidget.cpp b/Telegram/SourceFiles/settingswidget.cpp index 641eb499d..acda58647 100644 --- a/Telegram/SourceFiles/settingswidget.cpp +++ b/Telegram/SourceFiles/settingswidget.cpp @@ -122,6 +122,7 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), _desktopNotify(this, lang(lng_settings_desktop_notify), cDesktopNotify()), _senderName(this, lang(lng_settings_show_name), cNotifyView() <= dbinvShowName), _messagePreview(this, lang(lng_settings_show_preview), cNotifyView() <= dbinvShowPreview), + _windowsNotifications(this, lang(lng_settings_use_windows), cWindowsNotifications()), _soundNotify(this, lang(lng_settings_sound_notify), cSoundNotify()), // general @@ -217,6 +218,7 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), connect(&_desktopNotify, SIGNAL(changed()), this, SLOT(onDesktopNotify())); connect(&_senderName, SIGNAL(changed()), this, SLOT(onSenderName())); connect(&_messagePreview, SIGNAL(changed()), this, SLOT(onMessagePreview())); + connect(&_windowsNotifications, SIGNAL(changed()), this, SLOT(onWindowsNotifications())); connect(&_soundNotify, SIGNAL(changed()), this, SLOT(onSoundNotify())); // general @@ -411,6 +413,9 @@ void SettingsInner::paintEvent(QPaintEvent *e) { top += _desktopNotify.height() + st::setLittleSkip; top += _senderName.height() + st::setLittleSkip; top += _messagePreview.height() + st::setSectionSkip; + if (App::wnd()->psHasNativeNotifications() && cPlatform() == dbipWindows) { + top += _windowsNotifications.height() + st::setSectionSkip; + } top += _soundNotify.height(); } @@ -637,6 +642,9 @@ void SettingsInner::resizeEvent(QResizeEvent *e) { _desktopNotify.move(_left, top); top += _desktopNotify.height() + st::setLittleSkip; _senderName.move(_left, top); top += _senderName.height() + st::setLittleSkip; _messagePreview.move(_left, top); top += _messagePreview.height() + st::setSectionSkip; + if (App::wnd()->psHasNativeNotifications() && cPlatform() == dbipWindows) { + _windowsNotifications.move(_left, top); top += _windowsNotifications.height() + st::setSectionSkip; + } _soundNotify.move(_left, top); top += _soundNotify.height(); } @@ -936,11 +944,17 @@ void SettingsInner::showAll() { _desktopNotify.show(); _senderName.show(); _messagePreview.show(); + if (App::wnd()->psHasNativeNotifications() && cPlatform() == dbipWindows) { + _windowsNotifications.show(); + } else { + _windowsNotifications.hide(); + } _soundNotify.show(); } else { _desktopNotify.hide(); _senderName.hide(); _messagePreview.hide(); + _windowsNotifications.hide(); _soundNotify.hide(); } @@ -1349,6 +1363,13 @@ void SettingsInner::onSoundNotify() { Local::writeUserSettings(); } +void SettingsInner::onWindowsNotifications() { + cSetWindowsNotifications(!cWindowsNotifications()); + App::wnd()->notifyClearFast(); + cSetCustomNotifies(!cWindowsNotifications()); + Local::writeUserSettings(); +} + void SettingsInner::onDesktopNotify() { cSetDesktopNotify(_desktopNotify.checked()); if (!_desktopNotify.checked()) { diff --git a/Telegram/SourceFiles/settingswidget.h b/Telegram/SourceFiles/settingswidget.h index 1de46a36c..0ce9dcfa9 100644 --- a/Telegram/SourceFiles/settingswidget.h +++ b/Telegram/SourceFiles/settingswidget.h @@ -125,6 +125,8 @@ public slots: void onSenderName(); void onMessagePreview(); + void onWindowsNotifications(); + void onReplaceEmojis(); void onViewEmojis(); @@ -192,7 +194,7 @@ private: LinkButton _chooseUsername; // notifications - FlatCheckbox _desktopNotify, _senderName, _messagePreview, _soundNotify; + FlatCheckbox _desktopNotify, _senderName, _messagePreview, _windowsNotifications, _soundNotify; // general LinkButton _changeLanguage; diff --git a/Telegram/SourceFiles/types.h b/Telegram/SourceFiles/types.h index 5d8ee7a0e..976f40085 100644 --- a/Telegram/SourceFiles/types.h +++ b/Telegram/SourceFiles/types.h @@ -232,55 +232,56 @@ QString translitRusEng(const QString &rus); QString rusKeyboardLayoutSwitch(const QString &from); enum DataBlockId { - dbiKey = 0x00, - dbiUser = 0x01, - dbiDcOptionOld = 0x02, - dbiMaxGroupCount = 0x03, - dbiMutePeer = 0x04, - dbiSendKey = 0x05, - dbiAutoStart = 0x06, - dbiStartMinimized = 0x07, - dbiSoundNotify = 0x08, - dbiWorkMode = 0x09, - dbiSeenTrayTooltip = 0x0a, - dbiDesktopNotify = 0x0b, - dbiAutoUpdate = 0x0c, - dbiLastUpdateCheck = 0x0d, - dbiWindowPosition = 0x0e, - dbiConnectionType = 0x0f, + dbiKey = 0x00, + dbiUser = 0x01, + dbiDcOptionOld = 0x02, + dbiMaxGroupCount = 0x03, + dbiMutePeer = 0x04, + dbiSendKey = 0x05, + dbiAutoStart = 0x06, + dbiStartMinimized = 0x07, + dbiSoundNotify = 0x08, + dbiWorkMode = 0x09, + dbiSeenTrayTooltip = 0x0a, + dbiDesktopNotify = 0x0b, + dbiAutoUpdate = 0x0c, + dbiLastUpdateCheck = 0x0d, + dbiWindowPosition = 0x0e, + dbiConnectionType = 0x0f, // 0x10 reserved - dbiDefaultAttach = 0x11, - dbiCatsAndDogs = 0x12, - dbiReplaceEmojis = 0x13, - dbiAskDownloadPath = 0x14, - dbiDownloadPath = 0x15, - dbiScale = 0x16, - dbiEmojiTab = 0x17, - dbiRecentEmojisOld = 0x18, - dbiLoggedPhoneNumber = 0x19, - dbiMutedPeers = 0x1a, + dbiDefaultAttach = 0x11, + dbiCatsAndDogs = 0x12, + dbiReplaceEmojis = 0x13, + dbiAskDownloadPath = 0x14, + dbiDownloadPath = 0x15, + dbiScale = 0x16, + dbiEmojiTab = 0x17, + dbiRecentEmojisOld = 0x18, + dbiLoggedPhoneNumber = 0x19, + dbiMutedPeers = 0x1a, // 0x1b reserved - dbiNotifyView = 0x1c, - dbiSendToMenu = 0x1d, - dbiCompressPastedImage = 0x1e, - dbiLang = 0x1f, - dbiLangFile = 0x20, - dbiTileBackground = 0x21, - dbiAutoLock = 0x22, - dbiDialogLastPath = 0x23, - dbiRecentEmojis = 0x24, - dbiEmojiVariants = 0x25, - dbiRecentStickers = 0x26, - dbiDcOption = 0x27, - dbiTryIPv6 = 0x28, - dbiSongVolume = 0x29, + dbiNotifyView = 0x1c, + dbiSendToMenu = 0x1d, + dbiCompressPastedImage = 0x1e, + dbiLang = 0x1f, + dbiLangFile = 0x20, + dbiTileBackground = 0x21, + dbiAutoLock = 0x22, + dbiDialogLastPath = 0x23, + dbiRecentEmojis = 0x24, + dbiEmojiVariants = 0x25, + dbiRecentStickers = 0x26, + dbiDcOption = 0x27, + dbiTryIPv6 = 0x28, + dbiSongVolume = 0x29, + dbiWindowsNotifications = 0x30, - dbiEncryptedWithSalt = 333, - dbiEncrypted = 444, + dbiEncryptedWithSalt = 333, + dbiEncrypted = 444, // 500-600 reserved - dbiVersion = 666, + dbiVersion = 666, }; enum DBISendKey { diff --git a/Telegram/Telegram.vcxproj b/Telegram/Telegram.vcxproj index 80b18b34f..b749011c5 100644 --- a/Telegram/Telegram.vcxproj +++ b/Telegram/Telegram.vcxproj @@ -54,14 +54,17 @@ $(SolutionDir)$(Platform)\$(Configuration)Intermediate\ + $(VC_IncludePath);$(WindowsSDK_IncludePath); $(SolutionDir)$(Platform)\$(Configuration)\ $(SolutionDir)$(Platform)\$(Configuration)Intermediate\ + $(VC_IncludePath);$(WindowsSdk_71A_IncludePath);$(WindowsSDK_IncludePath); $(SolutionDir)$(Platform)\$(Configuration)\ $(SolutionDir)$(Platform)\$(Configuration)Intermediate\ + $(VC_IncludePath);$(WindowsSdk_71A_IncludePath);$(WindowsSDK_IncludePath); @@ -80,7 +83,7 @@ Windows $(OutDir)$(ProjectName).exe .\..\..\Libraries\lzma\C\Util\LzmaLib\Debug;.\..\..\Libraries\libexif-0.6.20\win32\Debug;.\..\..\Libraries\ffmpeg-2.6.3;.\..\..\Libraries\opus\win32\VS2010\Win32\Debug;.\..\..\Libraries\openal-soft\build\Debug;.\..\..\Libraries\zlib-1.2.8\contrib\vstudio\vc11\x86\ZlibStatDebug;.\..\..\Libraries\OpenSSL-Win32\lib\VC\static;$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;gdi32.lib;comdlg32.lib;oleaut32.lib;imm32.lib;winmm.lib;qtmaind.lib;glu32.lib;opengl32.lib;Strmiids.lib;Qt5Cored.lib;Qt5Guid.lib;qtharfbuzzngd.lib;qtpcred.lib;qtfreetyped.lib;Qt5Widgetsd.lib;Qt5Networkd.lib;Qt5PlatformSupportd.lib;platforms\qwindowsd.lib;imageformats\qwebpd.lib;libeay32MTd.lib;ssleay32MTd.lib;Crypt32.lib;zlibstat.lib;LzmaLib.lib;lib_exif.lib;UxTheme.lib;DbgHelp.lib;OpenAL32.lib;common.lib;libavformat\libavformat.a;libavcodec\libavcodec.a;libavutil\libavutil.a;libswresample\libswresample.a;opus.lib;celt.lib;silk_common.lib;silk_float.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;gdi32.lib;comdlg32.lib;oleaut32.lib;Shlwapi.lib;Gdiplus.lib;imm32.lib;winmm.lib;qtmaind.lib;glu32.lib;opengl32.lib;Strmiids.lib;Qt5Cored.lib;Qt5Guid.lib;qtharfbuzzngd.lib;qtpcred.lib;qtfreetyped.lib;Qt5Widgetsd.lib;Qt5Networkd.lib;Qt5PlatformSupportd.lib;platforms\qwindowsd.lib;imageformats\qwebpd.lib;libeay32MTd.lib;ssleay32MTd.lib;Crypt32.lib;zlibstat.lib;LzmaLib.lib;lib_exif.lib;UxTheme.lib;DbgHelp.lib;OpenAL32.lib;common.lib;libavformat\libavformat.a;libavcodec\libavcodec.a;libavutil\libavutil.a;libswresample\libswresample.a;opus.lib;celt.lib;silk_common.lib;silk_float.lib;%(AdditionalDependencies) true LIBCMT From 8511181508d19eab5aea77c88d6f28670f68b482 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 12 Aug 2015 21:01:32 +0300 Subject: [PATCH 090/121] version 0.8.49.dev - block/unblock users in profile, ask question and faq link in Settings, Windows 8/8.1/10 toast notifications --- Telegram/PrepareWin.bat | 10 +- Telegram/Resources/lang.strings | 11 + Telegram/Resources/style.txt | 5 + Telegram/SourceFiles/apiwrap.cpp | 1 + Telegram/SourceFiles/app.cpp | 70 ++-- Telegram/SourceFiles/app.h | 6 +- Telegram/SourceFiles/application.cpp | 6 +- Telegram/SourceFiles/boxes/confirmbox.cpp | 9 +- Telegram/SourceFiles/boxes/confirmbox.h | 5 + Telegram/SourceFiles/config.h | 12 +- Telegram/SourceFiles/historywidget.cpp | 90 +++- Telegram/SourceFiles/historywidget.h | 8 +- Telegram/SourceFiles/localimageloader.cpp | 4 +- Telegram/SourceFiles/localstorage.cpp | 7 +- Telegram/SourceFiles/mainwidget.cpp | 7 +- Telegram/SourceFiles/mediaview.cpp | 22 +- Telegram/SourceFiles/mtproto/mtpCoreTypes.h | 2 +- Telegram/SourceFiles/mtproto/mtpScheme.cpp | 120 +++--- Telegram/SourceFiles/mtproto/mtpScheme.h | 440 +++++++++++--------- Telegram/SourceFiles/mtproto/scheme.tl | 22 +- Telegram/SourceFiles/profilewidget.cpp | 111 +++-- Telegram/SourceFiles/profilewidget.h | 13 +- Telegram/SourceFiles/settingswidget.cpp | 47 ++- Telegram/SourceFiles/settingswidget.h | 10 +- Telegram/SourceFiles/structs.cpp | 20 +- Telegram/SourceFiles/structs.h | 20 +- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.vcxproj | 8 +- Telegram/Telegram.xcodeproj/project.pbxproj | 12 +- Telegram/Version.sh | 2 +- 31 files changed, 685 insertions(+), 417 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index 1b4532518..868329c42 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,11 +1,11 @@ @echo OFF set "AppVersionStrMajor=0.8" -set "AppVersion=8048" -set "AppVersionStrSmall=0.8.48" -set "AppVersionStr=0.8.48" -set "AppVersionStrFull=0.8.48.0" -set "DevChannel=0" +set "AppVersion=8049" +set "AppVersionStrSmall=0.8.49" +set "AppVersionStr=0.8.49" +set "AppVersionStrFull=0.8.49.0" +set "DevChannel=1" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/Resources/lang.strings b/Telegram/Resources/lang.strings index 19528d4ac..b51067d5c 100644 --- a/Telegram/Resources/lang.strings +++ b/Telegram/Resources/lang.strings @@ -69,6 +69,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_reconnecting_try_now" = "Try now"; "lng_status_service_notifications" = "service notifications"; +"lng_status_support" = "support"; "lng_status_bot" = "bot"; "lng_status_bot_reads_all" = "has access to messages"; "lng_status_bot_not_reads_all" = "has no access to messages"; @@ -324,6 +325,11 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_reset_one_sure" = "Do you want to terminate this session?"; "lng_settings_reset_button" = "Terminate"; "lng_settings_reset_done" = "Other sessions terminated"; +"lng_settings_ask_question" = "Ask a Question"; +"lng_settings_ask_sure" = "Please note that Telegram Support is done by volunteers. We try to respond as quickly as possible, but it may take a while.\n\nPlease take a look at the Telegram FAQ: it has important troubleshooting tips and answers to most questions."; +"lng_settings_faq_button" = "Go to FAQ"; +"lng_settings_ask_ok" = "Ask"; +"lng_settings_faq" = "Telegram FAQ"; "lng_settings_logout" = "Log Out"; "lng_sure_logout" = "Are you sure you want to log out?"; @@ -356,6 +362,10 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_delete_conversation" = "Delete conversation"; "lng_profile_clear_and_exit" = "Delete and exit"; "lng_profile_search_messages" = "Search for messages"; +"lng_profile_block_user" = "Block user"; +"lng_profile_unblock_user" = "Unblock user"; +"lng_profile_block_bot" = "Stop and block bot"; +"lng_profile_unblock_bot" = "Unblock bot"; "lng_profile_send_message" = "Send Message"; "lng_profile_share_contact" = "Share Contact"; "lng_profile_invite_to_group" = "Add to Group"; @@ -476,6 +486,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_message_with_from" = "[c]{from}:[/c] {message}"; "lng_from_you" = "You"; "lng_bot_description" = "What can this bot do?"; +"lng_unblock_button" = "Unblock"; "lng_bot_start" = "Start"; "lng_bot_choose_group" = "Choose Group"; diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index e2658c14c..bdc6e4276 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -972,6 +972,11 @@ btnSend: flatButton(btnDefFlat) { font: font(16px); overFont: font(16px); } +btnUnblock: flatButton(btnSend) { + color: #d15948; + overColor: #d15948; + downColor: #db6352; +} btnAttachDocument: iconedButton(btnDefIconed) { icon: sprite(218px, 68px, 24px, 24px); diff --git a/Telegram/SourceFiles/apiwrap.cpp b/Telegram/SourceFiles/apiwrap.cpp index 75d8187c7..a0fe57772 100644 --- a/Telegram/SourceFiles/apiwrap.cpp +++ b/Telegram/SourceFiles/apiwrap.cpp @@ -199,6 +199,7 @@ void ApiWrap::gotUserFull(PeerData *peer, const MTPUserFull &result) { App::main()->gotNotifySetting(MTP_inputNotifyPeer(peer->input), d.vnotify_settings); peer->asUser()->setBotInfo(d.vbot_info); + peer->asUser()->blocked = d.vblocked.v ? UserIsBlocked : UserIsNotBlocked; _fullPeerRequests.remove(peer); App::clearPeerUpdated(peer); diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index ac3773b9e..1a31593ba 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -289,8 +289,10 @@ namespace App { } QString onlineText(UserData *user, int32 now, bool precise) { - if (isServiceUser(user->id)) { + if (isNotificationsUser(user->id)) { return lang(lng_status_service_notifications); + } else if (isServiceUser(user->id)) { + return lang(lng_status_support); } else if (user->botInfo) { return lang(lng_status_bot); } @@ -370,8 +372,8 @@ namespace App { PeerId peer(peerFromUser(d.vid.v)); data = App::user(peer); - data->input = MTP_inputPeerContact(d.vid); - data->inputUser = MTP_inputUserContact(d.vid); + data->input = MTP_inputPeerUser(d.vid, MTP_long(0)); + data->inputUser = MTP_inputUser(d.vid, MTP_long(0)); data->setName(lang(lng_deleted), QString(), QString(), QString()); data->setPhoto(MTP_userProfilePhotoEmpty()); data->access = UserNoAccess; @@ -389,12 +391,12 @@ namespace App { if (flags & MTPDuser_flag_self) { data->input = MTP_inputPeerSelf(); data->inputUser = MTP_inputUserSelf(); - } else if ((flags & (MTPDuser_flag_contact | MTPDuser_flag_mutual_contact)) || !d.has_access_hash()) { - data->input = MTP_inputPeerContact(d.vid); - data->inputUser = MTP_inputUserContact(d.vid); + } else if (!d.has_access_hash()) { + data->input = MTP_inputPeerUser(d.vid, MTP_long((data->access == UserNoAccess) ? 0 : data->access)); + data->inputUser = MTP_inputUser(d.vid, MTP_long((data->access == UserNoAccess) ? 0 : data->access)); } else { - data->input = MTP_inputPeerForeign(d.vid, d.vaccess_hash); - data->inputUser = MTP_inputUserForeign(d.vid, d.vaccess_hash); + data->input = MTP_inputPeerUser(d.vid, d.vaccess_hash); + data->inputUser = MTP_inputUser(d.vid, d.vaccess_hash); } if (flags & MTPDuser_flag_deleted) { data->setPhone(QString()); @@ -868,14 +870,8 @@ namespace App { if (user->contact > 0) { if (!wasContact) { App::main()->addNewContact(App::userFromPeer(user->id), false); - if (user->input.type() != mtpc_inputPeerSelf) user->input = MTP_inputPeerContact(userId); - if (user->inputUser.type() != mtpc_inputUserSelf) user->inputUser = MTP_inputUserContact(userId); } } else { - if (user->access && user->access != UserNoAccess) { - if (user->input.type() != mtpc_inputPeerSelf) user->input = MTP_inputPeerForeign(userId, MTP_long(user->access)); - if (user->inputUser.type() != mtpc_inputUserSelf) user->inputUser = MTP_inputUserForeign(userId, MTP_long(user->access)); - } if (user->contact < 0 && !user->phone.isEmpty() && App::userFromPeer(user->id) != MTP::authedId()) { user->contact = 0; } @@ -924,7 +920,7 @@ namespace App { return feedPhoto(photo.c_photo(), convert); } break; case mtpc_photoEmpty: { - return App::photoSet(photo.c_photoEmpty().vid.v, convert, 0, 0, 0, ImagePtr(), ImagePtr(), ImagePtr()); + return App::photoSet(photo.c_photoEmpty().vid.v, convert, 0, 0, ImagePtr(), ImagePtr(), ImagePtr()); } break; } return App::photo(0); @@ -968,7 +964,7 @@ namespace App { switch (photo.type()) { case mtpc_photo: { const MTPDphoto &ph(photo.c_photo()); - return App::photoSet(ph.vid.v, 0, ph.vaccess_hash.v, ph.vuser_id.v, ph.vdate.v, ImagePtr(*thumb, "JPG"), ImagePtr(*medium, "JPG"), ImagePtr(*full, "JPG")); + return App::photoSet(ph.vid.v, 0, ph.vaccess_hash.v, ph.vdate.v, ImagePtr(*thumb, "JPG"), ImagePtr(*medium, "JPG"), ImagePtr(*full, "JPG")); } break; case mtpc_photoEmpty: return App::photo(photo.c_photoEmpty().vid.v); } @@ -1023,13 +1019,13 @@ namespace App { } } if (thumb && medium && full) { - return App::photoSet(photo.vid.v, convert, photo.vaccess_hash.v, photo.vuser_id.v, photo.vdate.v, App::image(*thumb), App::image(*medium), App::image(*full)); + return App::photoSet(photo.vid.v, convert, photo.vaccess_hash.v, photo.vdate.v, App::image(*thumb), App::image(*medium), App::image(*full)); } - return App::photoSet(photo.vid.v, convert, 0, 0, 0, ImagePtr(), ImagePtr(), ImagePtr()); + return App::photoSet(photo.vid.v, convert, 0, 0, ImagePtr(), ImagePtr(), ImagePtr()); } VideoData *feedVideo(const MTPDvideo &video, VideoData *convert) { - return App::videoSet(video.vid.v, convert, video.vaccess_hash.v, video.vuser_id.v, video.vdate.v, video.vduration.v, video.vw.v, video.vh.v, App::image(video.vthumb), video.vdc_id.v, video.vsize.v); + return App::videoSet(video.vid.v, convert, video.vaccess_hash.v, video.vdate.v, video.vduration.v, video.vw.v, video.vh.v, App::image(video.vthumb), video.vdc_id.v, video.vsize.v); } AudioData *feedAudio(const MTPaudio &audio, AudioData *convert) { @@ -1038,14 +1034,14 @@ namespace App { return feedAudio(audio.c_audio(), convert); } break; case mtpc_audioEmpty: { - return App::audioSet(audio.c_audioEmpty().vid.v, convert, 0, 0, 0, QString(), 0, 0, 0); + return App::audioSet(audio.c_audioEmpty().vid.v, convert, 0, 0, QString(), 0, 0, 0); } break; } return App::audio(0); } AudioData *feedAudio(const MTPDaudio &audio, AudioData *convert) { - return App::audioSet(audio.vid.v, convert, audio.vaccess_hash.v, audio.vuser_id.v, audio.vdate.v, qs(audio.vmime_type), audio.vduration.v, audio.vdc_id.v, audio.vsize.v); + return App::audioSet(audio.vid.v, convert, audio.vaccess_hash.v, audio.vdate.v, qs(audio.vmime_type), audio.vduration.v, audio.vdc_id.v, audio.vsize.v); } DocumentData *feedDocument(const MTPdocument &document, const QPixmap &thumb) { @@ -1172,7 +1168,7 @@ namespace App { return i.value(); } - PhotoData *photoSet(const PhotoId &photo, PhotoData *convert, const uint64 &access, int32 user, int32 date, const ImagePtr &thumb, const ImagePtr &medium, const ImagePtr &full) { + PhotoData *photoSet(const PhotoId &photo, PhotoData *convert, const uint64 &access, int32 date, const ImagePtr &thumb, const ImagePtr &medium, const ImagePtr &full) { if (convert) { if (convert->id != photo) { PhotosData::iterator i = photosData.find(convert->id); @@ -1182,8 +1178,7 @@ namespace App { convert->id = photo; } convert->access = access; - if (!convert->user && !convert->date && (user || date)) { - convert->user = user; + if (!convert->date && date) { convert->date = date; convert->thumb = thumb; convert->medium = medium; @@ -1197,14 +1192,13 @@ namespace App { if (convert) { result = convert; } else { - result = new PhotoData(photo, access, user, date, thumb, medium, full); + result = new PhotoData(photo, access, date, thumb, medium, full); } photosData.insert(photo, result); } else { result = i.value(); - if (result != convert && !result->user && !result->date && (user || date)) { + if (result != convert && !result->date && date) { result->access = access; - result->user = user; result->date = date; result->thumb = thumb; result->medium = medium; @@ -1234,7 +1228,7 @@ namespace App { return i.value(); } - VideoData *videoSet(const VideoId &video, VideoData *convert, const uint64 &access, int32 user, int32 date, int32 duration, int32 w, int32 h, const ImagePtr &thumb, int32 dc, int32 size) { + VideoData *videoSet(const VideoId &video, VideoData *convert, const uint64 &access, int32 date, int32 duration, int32 w, int32 h, const ImagePtr &thumb, int32 dc, int32 size) { if (convert) { if (convert->id != video) { VideosData::iterator i = videosData.find(convert->id); @@ -1245,8 +1239,7 @@ namespace App { convert->status = FileReady; } convert->access = access; - if (!convert->user && !convert->date && (user || date)) { - convert->user = user; + if (!convert->date && date) { convert->date = date; convert->duration = duration; convert->w = w; @@ -1262,14 +1255,13 @@ namespace App { if (convert) { result = convert; } else { - result = new VideoData(video, access, user, date, duration, w, h, thumb, dc, size); + result = new VideoData(video, access, date, duration, w, h, thumb, dc, size); } videosData.insert(video, result); } else { result = i.value(); - if (result != convert && !result->user && !result->date && (user || date)) { + if (result != convert && !result->date && date) { result->access = access; - result->user = user; result->date = date; result->duration = duration; result->w = w; @@ -1290,7 +1282,7 @@ namespace App { return i.value(); } - AudioData *audioSet(const AudioId &audio, AudioData *convert, const uint64 &access, int32 user, int32 date, const QString &mime, int32 duration, int32 dc, int32 size) { + AudioData *audioSet(const AudioId &audio, AudioData *convert, const uint64 &access, int32 date, const QString &mime, int32 duration, int32 dc, int32 size) { if (convert) { if (convert->id != audio) { AudiosData::iterator i = audiosData.find(convert->id); @@ -1301,8 +1293,7 @@ namespace App { convert->status = FileReady; } convert->access = access; - if (!convert->user && !convert->date && (user || date)) { - convert->user = user; + if (!convert->date && date) { convert->date = date; convert->mime = mime; convert->duration = duration; @@ -1316,14 +1307,13 @@ namespace App { if (convert) { result = convert; } else { - result = new AudioData(audio, access, user, date, mime, duration, dc, size); + result = new AudioData(audio, access, date, mime, duration, dc, size); } audiosData.insert(audio, result); } else { result = i.value(); - if (result != convert && !result->user && !result->date && (user || date)) { + if (result != convert && !result->date && date) { result->access = access; - result->user = user; result->date = date; result->mime = mime; result->duration = duration; @@ -1547,7 +1537,7 @@ namespace App { photoSizes.push_back(MTP_photoSize(MTP_string("a"), uphoto.vphoto_small, MTP_int(160), MTP_int(160), MTP_int(0))); photoSizes.push_back(MTP_photoSize(MTP_string("c"), uphoto.vphoto_big, MTP_int(640), MTP_int(640), MTP_int(0))); - return MTP_photo(uphoto.vphoto_id, MTP_long(0), userId, date, MTP_geoPointEmpty(), MTP_vector(photoSizes)); + return MTP_photo(uphoto.vphoto_id, MTP_long(0), date, MTP_vector(photoSizes)); } return MTP_photoEmpty(MTP_long(0)); } diff --git a/Telegram/SourceFiles/app.h b/Telegram/SourceFiles/app.h index 1033ef90d..a68c390c3 100644 --- a/Telegram/SourceFiles/app.h +++ b/Telegram/SourceFiles/app.h @@ -158,11 +158,11 @@ namespace App { ChatData *chat(int32 chat); QString peerName(const PeerData *peer, bool forDialogs = false); PhotoData *photo(const PhotoId &photo); - PhotoData *photoSet(const PhotoId &photo, PhotoData *convert, const uint64 &access, int32 user, int32 date, const ImagePtr &thumb, const ImagePtr &medium, const ImagePtr &full); + PhotoData *photoSet(const PhotoId &photo, PhotoData *convert, const uint64 &access, int32 date, const ImagePtr &thumb, const ImagePtr &medium, const ImagePtr &full); VideoData *video(const VideoId &video); - VideoData *videoSet(const VideoId &video, VideoData *convert, const uint64 &access, int32 user, int32 date, int32 duration, int32 w, int32 h, const ImagePtr &thumb, int32 dc, int32 size); + VideoData *videoSet(const VideoId &video, VideoData *convert, const uint64 &access, int32 date, int32 duration, int32 w, int32 h, const ImagePtr &thumb, int32 dc, int32 size); AudioData *audio(const AudioId &audio); - AudioData *audioSet(const AudioId &audio, AudioData *convert, const uint64 &access, int32 user, int32 date, const QString &mime, int32 duration, int32 dc, int32 size); + AudioData *audioSet(const AudioId &audio, AudioData *convert, const uint64 &access, int32 date, const QString &mime, int32 duration, int32 dc, int32 size); DocumentData *document(const DocumentId &document); DocumentData *documentSet(const DocumentId &document, DocumentData *convert, const uint64 &access, int32 date, const QVector &attributes, const QString &mime, const ImagePtr &thumb, int32 dc, int32 size, const StorageImageLocation &thumbLocation); WebPageData *webPage(const WebPageId &webPage); diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index 83e1334c3..867e035fa 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -474,7 +474,7 @@ void Application::uploadProfilePhoto(const QImage &tosend, const PeerId &peerId) PhotoId id = MTP::nonce(); - MTPPhoto photo(MTP_photo(MTP_long(id), MTP_long(0), MTP_int(MTP::authedId()), MTP_int(unixtime()), MTP_geoPointEmpty(), MTP_vector(photoSizes))); + MTPPhoto photo(MTP_photo(MTP_long(id), MTP_long(0), MTP_int(unixtime()), MTP_vector(photoSizes))); QString file, filename; int32 filesize = 0; @@ -658,8 +658,8 @@ void Application::checkMapVersion() { psRegisterCustomScheme(); if (Local::oldMapVersion()) { QString versionFeatures; - if (cDevVersion() && Local::oldMapVersion() < 8047) { - versionFeatures = QString::fromUtf8("\xe2\x80\x94 Search for messages in conversation\n\xe2\x80\x94 Clear messages history in groups\n\xe2\x80\x94 Contacts without messages are hidden from the conversations list");// .replace('@', qsl("@") + QChar(0x200D)); + if (cDevVersion() && Local::oldMapVersion() < 8049) { + versionFeatures = QString::fromUtf8("\xe2\x80\x94 Block users from user profile\n\xe2\x80\x94 Ask support team a question from Settings\n\xe2\x80\x94 Windows toast notifications support added");// .replace('@', qsl("@") + QChar(0x200D)); } else if (!cDevVersion() && Local::oldMapVersion() < 8048) { versionFeatures = lang(lng_new_version_text).trimmed(); } diff --git a/Telegram/SourceFiles/boxes/confirmbox.cpp b/Telegram/SourceFiles/boxes/confirmbox.cpp index 8231651ea..bd4ed0d01 100644 --- a/Telegram/SourceFiles/boxes/confirmbox.cpp +++ b/Telegram/SourceFiles/boxes/confirmbox.cpp @@ -56,19 +56,24 @@ void ConfirmBox::init(const QString &text) { _confirm.hide(); _cancel.hide(); - connect(&_close, SIGNAL(clicked()), this, SLOT(onClose())); + connect(&_close, SIGNAL(clicked()), this, SLOT(onCancel())); setMouseTracking(_text.hasLinks()); } else { _close.hide(); connect(&_confirm, SIGNAL(clicked()), this, SIGNAL(confirmed())); - connect(&_cancel, SIGNAL(clicked()), this, SLOT(onClose())); + connect(&_cancel, SIGNAL(clicked()), this, SLOT(onCancel())); } prepare(); } +void ConfirmBox::onCancel() { + emit cancelPressed(); + onClose(); +} + void ConfirmBox::mouseMoveEvent(QMouseEvent *e) { _lastMousePos = e->globalPos(); updateHover(); diff --git a/Telegram/SourceFiles/boxes/confirmbox.h b/Telegram/SourceFiles/boxes/confirmbox.h index 2cbf4de9f..1a54c33ac 100644 --- a/Telegram/SourceFiles/boxes/confirmbox.h +++ b/Telegram/SourceFiles/boxes/confirmbox.h @@ -35,10 +35,15 @@ public: void leaveEvent(QEvent *e); void updateLink(); +public slots: + + void onCancel(); + signals: void confirmed(); void cancelled(); + void cancelPressed(); protected: diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index b53fe420e..7caebfc95 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,9 +17,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8048; -static const wchar_t *AppVersionStr = L"0.8.48"; -static const bool DevVersion = false; +static const int32 AppVersion = 8049; +static const wchar_t *AppVersionStr = L"0.8.49"; +static const bool DevVersion = true; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; @@ -144,10 +144,14 @@ enum { ChoosePeerByDragTimeout = 1000, // 1 second mouse not moved to choose dialog when dragging a file }; -inline bool isServiceUser(uint64 id) { +inline bool isNotificationsUser(uint64 id) { return (id == 333000) || (id == ServiceUserId); } +inline bool isServiceUser(uint64 id) { + return !(id % 1000);// (id == 333000) || (id == ServiceUserId); +} + #ifdef Q_OS_WIN inline const GUID &cGUID() { static const GUID gGuid = { 0x87a94ab0, 0xe370, 0x4cde, { 0x98, 0xd3, 0xac, 0xc1, 0x10, 0xc5, 0x96, 0x7d } }; diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 6e506cc1a..a26a190f0 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -75,7 +75,9 @@ HistoryList::HistoryList(HistoryWidget *historyWidget, ScrollArea *scroll, Histo _trippleClickTimer.setSingleShot(true); - if (botInfo && !botInfo->inited) App::api()->requestFullPeer(hist->peer); + if (botInfo && !botInfo->inited) { + App::api()->requestFullPeer(hist->peer); + } setMouseTracking(true); } @@ -2200,7 +2202,9 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) , _toHistoryEnd(this, st::historyToEnd) , _attachMention(this) , _send(this, lang(lng_send_button), st::btnSend) +, _unblock(this, lang(lng_unblock_button), st::btnUnblock) , _botStart(this, lang(lng_bot_start), st::btnSend) +, _unblockRequest(0) , _attachDocument(this, st::btnAttachDocument) , _attachPhoto(this, st::btnAttachPhoto) , _attachEmoji(this, st::btnAttachEmoji) @@ -2243,6 +2247,7 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) connect(&_toHistoryEnd, SIGNAL(clicked()), this, SLOT(onHistoryToEnd())); connect(&_replyForwardPreviewCancel, SIGNAL(clicked()), this, SLOT(onReplyForwardPreviewCancel())); connect(&_send, SIGNAL(clicked()), this, SLOT(onSend())); + connect(&_unblock, SIGNAL(clicked()), this, SLOT(onUnblock())); connect(&_botStart, SIGNAL(clicked()), this, SLOT(onBotStart())); connect(&_attachDocument, SIGNAL(clicked()), this, SLOT(onDocumentSelect())); connect(&_attachPhoto, SIGNAL(clicked()), this, SLOT(onPhotoSelect())); @@ -2305,6 +2310,7 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) _field.hide(); _field.resize(width() - _send.width() - _attachDocument.width() - _attachEmoji.width(), _send.height() - 2 * st::sendPadding); _send.hide(); + _unblock.hide(); _botStart.hide(); _attachDocument.hide(); @@ -2368,8 +2374,8 @@ void HistoryWidget::onTextChange() { } if (updateCmdStartShown()) { updateControlsVisibility(); -resizeEvent(0); -update(); + resizeEvent(0); + update(); } if (!_history || _synthedTextUpdate) return; @@ -2482,7 +2488,7 @@ void HistoryWidget::sendActionDone(const MTPBool &result, mtpRequestId req) { void HistoryWidget::activate() { if (_history) updateListSize(0, true); if (_list) { - if (_selCount || (_list && _list->wasSelectedText()) || _recording || isBotStart()) { + if (_selCount || (_list && _list->wasSelectedText()) || _recording || isBotStart() || isBlocked()) { _list->setFocus(); } else { _field.setFocus(); @@ -2776,6 +2782,7 @@ void HistoryWidget::showPeerHistory(const PeerId &peerId, MsgId showAtMsgId) { } _peer = peerId ? App::peer(peerId) : 0; + _unblockRequest = 0; _titlePeerText = QString(); _titlePeerTextWidth = 0; @@ -2890,6 +2897,7 @@ void HistoryWidget::updateControlsVisibility() { _scroll.hide(); _kbScroll.hide(); _send.hide(); + _unblock.hide(); _botStart.hide(); _attachMention.hide(); _field.hide(); @@ -2914,7 +2922,25 @@ void HistoryWidget::updateControlsVisibility() { } if ((_peer->chat && !_peer->asChat()->forbidden && !_peer->asChat()->left) || (!_peer->chat && _peer->asUser()->access != UserNoAccess)) { checkMentionDropdown(); - if (isBotStart()) { + if (isBlocked()) { + _botStart.hide(); + if (_unblock.isHidden()) { + _unblock.clearState(); + _unblock.show(); + _kbShown = false; + } + _send.hide(); + _field.hide(); + _attachEmoji.hide(); + _kbShow.hide(); + _kbHide.hide(); + _cmdStart.hide(); + _attachDocument.hide(); + _attachPhoto.hide(); + _kbScroll.hide(); + _replyForwardPreviewCancel.hide(); + } else if (isBotStart()) { + _unblock.hide(); if (_botStart.isHidden()) { _botStart.clearState(); _botStart.show(); @@ -2931,6 +2957,7 @@ void HistoryWidget::updateControlsVisibility() { _kbScroll.hide(); _replyForwardPreviewCancel.hide(); } else { + _unblock.hide(); _botStart.hide(); if (cHasAudioCapture() && _field.getLastText().isEmpty() && !App::main()->hasForwardingItems()) { _send.hide(); @@ -3007,6 +3034,7 @@ void HistoryWidget::updateControlsVisibility() { } else { _attachMention.hide(); _send.hide(); + _unblock.hide(); _botStart.hide(); _attachDocument.hide(); _attachPhoto.hide(); @@ -3321,6 +3349,29 @@ void HistoryWidget::onSend(bool ctrlShiftEnter, MsgId replyTo) { if (!_keyboard.hasMarkup() && _keyboard.forceReply() && !_kbReplyTo) onKbToggle(); } +void HistoryWidget::onUnblock() { + if (_unblockRequest) return; + if (!_peer || _peer->chat || _peer->asUser()->blocked != UserIsBlocked) { + updateControlsVisibility(); + return; + } + + _unblockRequest = MTP::send(MTPcontacts_Unblock(_peer->asUser()->inputUser), rpcDone(&HistoryWidget::unblockDone, _peer), rpcFail(&HistoryWidget::unblockFail)); +} + +void HistoryWidget::unblockDone(PeerData *peer, const MTPBool &result) { + if (peer->chat) return; + _unblockRequest = 0; + peer->asUser()->blocked = UserIsNotBlocked; + emit App::main()->peerUpdated(peer); +} + +bool HistoryWidget::unblockFail(const RPCError &error) { + if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false; +// _unblockRequest = 0; + return false; +} + void HistoryWidget::onBotStart() { if (!_peer || _peer->chat || !_peer->asUser()->botInfo) { updateControlsVisibility(); @@ -3418,6 +3469,7 @@ void HistoryWidget::animShow(const QPixmap &bgAnimCache, const QPixmap &bgAnimTo _field.hide(); _replyForwardPreviewCancel.hide(); _send.hide(); + _unblock.hide(); _botStart.hide(); a_coord = back ? anim::ivalue(-st::introSlideShift, 0) : anim::ivalue(st::introSlideShift, 0); a_alpha = anim::fvalue(0, 1); @@ -3470,7 +3522,7 @@ void HistoryWidget::animStop() { bool HistoryWidget::recordStep(float64 ms) { float64 dt = ms / st::btnSend.duration; bool res = true; - if (dt >= 1 || !_send.isHidden() || isBotStart()) { + if (dt >= 1 || !_send.isHidden() || isBotStart() || isBlocked()) { res = false; a_recordOver.finish(); a_recordDown.finish(); @@ -3787,10 +3839,14 @@ bool HistoryWidget::isBotStart() const { return !_peer->asUser()->botInfo->startToken.isEmpty() || (_history->isEmpty() && !_history->lastMsg); } +bool HistoryWidget::isBlocked() const { + return _peer && !_peer->chat && _peer->asUser()->blocked == UserIsBlocked; +} + bool HistoryWidget::updateCmdStartShown() { bool cmdStartShown = false; if (_history && _peer && ((_peer->chat && _peer->asChat()->botStatus > 0) || (!_peer->chat && _peer->asUser()->botInfo))) { - if (!isBotStart() && !_keyboard.hasMarkup() && !_keyboard.forceReply()) { + if (!isBotStart() && !isBlocked() && !_keyboard.hasMarkup() && !_keyboard.forceReply()) { if (_field.getLastText().isEmpty()) { cmdStartShown = true; } @@ -4069,6 +4125,7 @@ void HistoryWidget::onFieldResize() { _attachDocument.move(0, height() - kbh - _attachDocument.height()); _attachPhoto.move(_attachDocument.x(), _attachDocument.y()); _botStart.setGeometry(0, _attachDocument.y(), width(), _botStart.height()); + _unblock.setGeometry(0, _attachDocument.y(), width(), _unblock.height()); _send.move(width() - _send.width(), _attachDocument.y()); _attachEmoji.move(_send.x() - _attachEmoji.width(), height() - kbh - _attachEmoji.height()); _kbShow.move(_attachEmoji.x() - _kbShow.width(), height() - kbh - _kbShow.height()); @@ -4427,7 +4484,7 @@ void HistoryWidget::peerMessagesUpdated(PeerId peer) { if (_peer && _list && peer == _peer->id) { updateListSize(); updateBotKeyboard(); - if (!_scroll.isHidden() && _botStart.isHidden() == isBotStart()) { + if (!_scroll.isHidden() && !isBlocked() && _botStart.isHidden() == isBotStart()) { updateControlsVisibility(); resizeEvent(0); } @@ -4468,6 +4525,7 @@ void HistoryWidget::resizeEvent(QResizeEvent *e) { _send.move(width() - _send.width(), _attachDocument.y()); _botStart.setGeometry(0, _attachDocument.y(), width(), _botStart.height()); + _unblock.setGeometry(0, _attachDocument.y(), width(), _unblock.height()); _attachEmoji.move(_send.x() - _attachEmoji.width(), height() - kbh - _attachEmoji.height()); _kbShow.move(_attachEmoji.x() - _kbShow.width(), height() - kbh - _kbShow.height()); _kbHide.move(_attachEmoji.x(), _attachEmoji.y()); @@ -4537,7 +4595,9 @@ void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown, } int32 newScrollHeight = height(); - if (isBotStart()) { + if (isBlocked()) { + newScrollHeight -= _unblock.height(); + } else if (isBotStart()) { newScrollHeight -= _botStart.height(); } else { if ((_peer->chat && !_peer->asChat()->forbidden && !_peer->asChat()->left) || (!_peer->chat && _peer->asUser()->access != UserNoAccess)) { @@ -4676,7 +4736,7 @@ void HistoryWidget::updateBotKeyboard() { bool hasMarkup = _keyboard.hasMarkup(), forceReply = _keyboard.forceReply() && !_replyTo; if (hasMarkup || forceReply) { if (_keyboard.singleUse() && _keyboard.hasMarkup() && _keyboard.forMsgId() == _history->lastKeyboardId && _history->lastKeyboardUsed) _kbWasHidden = true; - if (!isBotStart() && (wasVisible || _replyTo || (_field.getLastText().isEmpty() && !_kbWasHidden))) { + if (!isBotStart() && !isBlocked() && (wasVisible || _replyTo || (_field.getLastText().isEmpty() && !_kbWasHidden))) { if (!_showAnim.animating()) { if (hasMarkup) { _kbScroll.show(); @@ -5094,6 +5154,9 @@ void HistoryWidget::onFullPeerUpdated(PeerData *data) { updateControlsVisibility(); resizeEvent(0); update(); + } else if (!_scroll.isHidden() && _unblock.isHidden() == isBlocked()) { + updateControlsVisibility(); + resizeEvent(0); } if (newScrollTop != _scroll.scrollTop()) { if (_scroll.isVisible()) { @@ -5110,6 +5173,11 @@ void HistoryWidget::peerUpdated(PeerData *data) { if (!_showAnim.animating()) updateControlsVisibility(); if (data->chat && data->asChat()->count > 0 && data->asChat()->participants.isEmpty()) { App::api()->requestFullPeer(data); + } else if (!data->chat && data->asUser()->blocked == UserBlockUnknown) { + App::api()->requestFullPeer(data); + } else if (!_scroll.isHidden() && _unblock.isHidden() == isBlocked()) { + updateControlsVisibility(); + resizeEvent(0); } App::main()->updateOnlineDisplay(); } @@ -5225,7 +5293,7 @@ void HistoryWidget::updateTopBarSelection() { updateControlsVisibility(); updateListSize(); if (!App::wnd()->layerShown() && !App::passcoded()) { - if (_selCount || (_list && _list->wasSelectedText()) || _recording || isBotStart()) { + if (_selCount || (_list && _list->wasSelectedText()) || _recording || isBotStart() || isBlocked()) { _list->setFocus(); } else { _field.setFocus(); diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index e6535ccfe..0ce5c0c81 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -518,6 +518,7 @@ public slots: void onListScroll(); void onHistoryToEnd(); void onSend(bool ctrlShiftEnter = false, MsgId replyTo = -1); + void onUnblock(); void onBotStart(); void onPhotoSelect(); @@ -604,6 +605,9 @@ private: void addMessagesToFront(const QVector &messages); void addMessagesToBack(const QVector &messages); + void unblockDone(PeerData *peer, const MTPBool &result); + bool unblockFail(const RPCError &error); + void countHistoryShowFrom(); void updateToEndVisibility(); @@ -640,9 +644,11 @@ private: MentionsDropdown _attachMention; bool isBotStart() const; + bool isBlocked() const; bool updateCmdStartShown(); - FlatButton _send, _botStart; + FlatButton _send, _unblock, _botStart; + mtpRequestId _unblockRequest; IconedButton _attachDocument, _attachPhoto, _attachEmoji, _kbShow, _kbHide, _cmdStart; bool _cmdStartShown; MessageField _field; diff --git a/Telegram/SourceFiles/localimageloader.cpp b/Telegram/SourceFiles/localimageloader.cpp index 2e212aec6..4d7edf177 100644 --- a/Telegram/SourceFiles/localimageloader.cpp +++ b/Telegram/SourceFiles/localimageloader.cpp @@ -221,7 +221,7 @@ void LocalImageLoaderPrivate::prepareImages() { } if (!filesize) filesize = jpeg.size(); - photo = MTP_photo(MTP_long(id), MTP_long(0), MTP_int(user), MTP_int(unixtime()), MTP_geoPointEmpty(), MTP_vector(photoSizes)); + photo = MTP_photo(MTP_long(id), MTP_long(0), MTP_int(unixtime()), MTP_vector(photoSizes)); thumbId = id; } else if ((type == ToPrepareVideo || type == ToPrepareDocument) && !img.isNull() && !isSong) { @@ -254,7 +254,7 @@ void LocalImageLoaderPrivate::prepareImages() { if (type == ToPrepareDocument) { document = MTP_document(MTP_long(id), MTP_long(0), MTP_int(unixtime()), MTP_string(mime), MTP_int(filesize), thumb, MTP_int(MTP::maindc()), MTP_vector(attributes)); } else if (type == ToPrepareAudio) { - audio = MTP_audio(MTP_long(id), MTP_long(0), MTP_int(user), MTP_int(unixtime()), MTP_int(duration), MTP_string(mime), MTP_int(filesize), MTP_int(MTP::maindc())); + audio = MTP_audio(MTP_long(id), MTP_long(0), MTP_int(unixtime()), MTP_int(duration), MTP_string(mime), MTP_int(filesize), MTP_int(MTP::maindc())); } { diff --git a/Telegram/SourceFiles/localstorage.cpp b/Telegram/SourceFiles/localstorage.cpp index 0809f9205..0ca20aca2 100644 --- a/Telegram/SourceFiles/localstorage.cpp +++ b/Telegram/SourceFiles/localstorage.cpp @@ -2821,12 +2821,9 @@ namespace Local { if (App::userFromPeer(user->id) == MTP::authedId()) { user->input = MTP_inputPeerSelf(); user->inputUser = MTP_inputUserSelf(); - } else if (user->contact > 0 || !user->access) { - user->input = MTP_inputPeerContact(MTP_int(App::userFromPeer(user->id))); - user->inputUser = MTP_inputUserContact(MTP_int(App::userFromPeer(user->id))); } else { - user->input = MTP_inputPeerForeign(MTP_int(App::userFromPeer(user->id)), MTP_long(user->access)); - user->inputUser = MTP_inputUserForeign(MTP_int(App::userFromPeer(user->id)), MTP_long(user->access)); + user->input = MTP_inputPeerUser(MTP_int(App::userFromPeer(user->id)), MTP_long((user->access == UserNoAccess) ? 0 : user->access)); + user->inputUser = MTP_inputUser(MTP_int(App::userFromPeer(user->id)), MTP_long((user->access == UserNoAccess) ? 0 : user->access)); } user->photo = photoLoc.isNull() ? ImagePtr(userDefPhoto(user->colorIndex)) : ImagePtr(photoLoc); diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 0013557e3..0b0760725 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -3040,8 +3040,7 @@ void MainWidget::gotNotifySetting(MTPInputNotifyPeer peer, const MTPPeerNotifySe switch (peer.c_inputNotifyPeer().vpeer.type()) { case mtpc_inputPeerEmpty: applyNotifySetting(MTP_notifyPeer(MTP_peerUser(MTP_int(0))), settings); break; case mtpc_inputPeerSelf: applyNotifySetting(MTP_notifyPeer(MTP_peerUser(MTP_int(MTP::authedId()))), settings); break; - case mtpc_inputPeerContact: applyNotifySetting(MTP_notifyPeer(MTP_peerUser(peer.c_inputNotifyPeer().vpeer.c_inputPeerContact().vuser_id)), settings); break; - case mtpc_inputPeerForeign: applyNotifySetting(MTP_notifyPeer(MTP_peerUser(peer.c_inputNotifyPeer().vpeer.c_inputPeerForeign().vuser_id)), settings); break; + case mtpc_inputPeerUser: applyNotifySetting(MTP_notifyPeer(MTP_peerUser(peer.c_inputNotifyPeer().vpeer.c_inputPeerUser().vuser_id)), settings); break; case mtpc_inputPeerChat: applyNotifySetting(MTP_notifyPeer(MTP_peerChat(peer.c_inputNotifyPeer().vpeer.c_inputPeerChat().vchat_id)), settings); break; } break; @@ -3650,6 +3649,10 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { case mtpc_updateUserBlocked: { const MTPDupdateUserBlocked &d(update.c_updateUserBlocked()); + if (UserData *user = App::userLoaded(d.vuser_id.v)) { + user->blocked = d.vblocked.v ? UserIsBlocked : UserIsNotBlocked; + App::markPeerUpdated(user); + } } break; case mtpc_updateNewAuthorization: { diff --git a/Telegram/SourceFiles/mediaview.cpp b/Telegram/SourceFiles/mediaview.cpp index f0739b97c..6baf5b562 100644 --- a/Telegram/SourceFiles/mediaview.cpp +++ b/Telegram/SourceFiles/mediaview.cpp @@ -775,18 +775,14 @@ void MediaView::displayPhoto(PhotoData *photo, HistoryItem *item) { _x = (width() - _w) / 2; _y = (height() - _h) / 2; _width = _w; - if (_photo->user == WebPageUserId && _msgid) { - if (HistoryItem *item = App::histItemById(_msgid)) { - if (dynamic_cast(item)) { - _from = static_cast(item)->fromForwarded(); - } else { - _from = item->from(); - } + if (_msgid && item) { + if (HistoryForwarded *fwd = item->toHistoryForwarded()) { + _from = fwd->fromForwarded(); } else { - _from = App::user(_photo->user); + _from = item->from(); } } else { - _from = App::user(_photo->user); + _from = _user; } updateControls(); _photo->full->load(); @@ -955,10 +951,10 @@ void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { // empty } _x = (width() - _w) / 2; _y = (height() - _h) / 2; - if (HistoryForwarded *fwd = dynamic_cast(item)) { - _from = fwd->fromForwarded()->asUser(); + if (HistoryForwarded *fwd = item->toHistoryForwarded()) { + _from = fwd->fromForwarded(); } else { - _from = item->from()->asUser(); + _from = item->from(); } _full = 1; updateControls(); @@ -1850,7 +1846,7 @@ void MediaView::loadBack() { if (App::main()) App::main()->loadMediaBack(_history->peer, _overview); } else if (_user && _user->photosCount != 0) { int32 limit = (_index < MediaOverviewStartPerPage && _user->photos.size() > MediaOverviewStartPerPage) ? SearchPerPage : MediaOverviewStartPerPage; - _loadRequest = MTP::send(MTPphotos_GetUserPhotos(_user->inputUser, MTP_int(_user->photos.size()), MTP_int(0), MTP_int(limit)), rpcDone(&MediaView::userPhotosLoaded, _user)); + _loadRequest = MTP::send(MTPphotos_GetUserPhotos(_user->inputUser, MTP_int(_user->photos.size()), MTP_long(0), MTP_int(limit)), rpcDone(&MediaView::userPhotosLoaded, _user)); } } diff --git a/Telegram/SourceFiles/mtproto/mtpCoreTypes.h b/Telegram/SourceFiles/mtproto/mtpCoreTypes.h index 950d5be3a..63b6c1fad 100644 --- a/Telegram/SourceFiles/mtproto/mtpCoreTypes.h +++ b/Telegram/SourceFiles/mtproto/mtpCoreTypes.h @@ -366,7 +366,7 @@ static const mtpTypeId mtpLayers[] = { mtpc_invokeWithLayer17, mtpc_invokeWithLayer18, }, mtpLayerMaxSingle = sizeof(mtpLayers) / sizeof(mtpLayers[0]); -static const mtpPrime mtpCurrentLayer = 32; +static const mtpPrime mtpCurrentLayer = 33; template class MTPBoxed : public bareT { diff --git a/Telegram/SourceFiles/mtproto/mtpScheme.cpp b/Telegram/SourceFiles/mtproto/mtpScheme.cpp index a79731ee7..457cd9470 100644 --- a/Telegram/SourceFiles/mtproto/mtpScheme.cpp +++ b/Telegram/SourceFiles/mtproto/mtpScheme.cpp @@ -487,33 +487,6 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP to.add("{ inputPeerSelf }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - case mtpc_inputPeerContact: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputPeerContact"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - - case mtpc_inputPeerForeign: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputPeerForeign"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - case mtpc_inputPeerChat: if (stage) { to.add(",\n").addSpaces(lev); @@ -527,6 +500,20 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; + case mtpc_inputPeerUser: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputPeerUser"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + case mtpc_inputUserEmpty: to.add("{ inputUserEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; @@ -535,24 +522,11 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP to.add("{ inputUserSelf }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - case mtpc_inputUserContact: + case mtpc_inputUser: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ inputUserContact"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; - } - break; - - case mtpc_inputUserForeign: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputUserForeign"); + to.add("{ inputUser"); to.add("\n").addSpaces(lev); } switch (stage) { @@ -1662,10 +1636,8 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP switch (stage) { case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 3: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 4: to.add(" geo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 5: to.add(" sizes: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 2: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 3: to.add(" sizes: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; @@ -1740,9 +1712,9 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP switch (stage) { case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 3: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 4: to.add(" duration: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 2: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 3: to.add(" duration: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 4: to.add(" mime_type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 5: to.add(" size: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 6: to.add(" thumb: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 7: to.add(" dc_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; @@ -2336,6 +2308,10 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP to.add("{ inputMessagesFilterAudioDocuments }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + case mtpc_inputMessagesFilterUrl: + to.add("{ inputMessagesFilterUrl }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); + break; + case mtpc_updateNewMessage: if (stage) { to.add(",\n").addSpaces(lev); @@ -3513,12 +3489,11 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP switch (stage) { case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 3: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 4: to.add(" duration: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 5: to.add(" mime_type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 6: to.add(" size: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 7: to.add(" dc_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 2: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 3: to.add(" duration: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 4: to.add(" mime_type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 5: to.add(" size: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 6: to.add(" dc_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; @@ -4389,6 +4364,23 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; + case mtpc_help_appChangelogEmpty: + to.add("{ help_appChangelogEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); + break; + + case mtpc_help_appChangelog: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ help_appChangelog"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" text: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + case mtpc_req_pq: if (stage) { to.add(",\n").addSpaces(lev); @@ -5786,7 +5778,7 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP switch (stage) { case 0: to.add(" user_id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 1: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 2: to.add(" max_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 2: to.add(" max_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 3: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } @@ -6201,6 +6193,22 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; + case mtpc_help_getAppChangelog: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ help_getAppChangelog"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" device_model: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" system_version: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 2: to.add(" app_version: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 3: to.add(" lang_code: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + case mtpc_rpc_result: if (stage) { to.add(",\n").addSpaces(lev); diff --git a/Telegram/SourceFiles/mtproto/mtpScheme.h b/Telegram/SourceFiles/mtproto/mtpScheme.h index 2cebf65f9..17d3f4a6f 100644 --- a/Telegram/SourceFiles/mtproto/mtpScheme.h +++ b/Telegram/SourceFiles/mtproto/mtpScheme.h @@ -67,13 +67,9 @@ enum { mtpc_null = 0x56730bcc, mtpc_inputPeerEmpty = 0x7f3b18ea, mtpc_inputPeerSelf = 0x7da07ec9, - mtpc_inputPeerContact = 0x1023dbe8, - mtpc_inputPeerForeign = 0x9b447325, mtpc_inputPeerChat = 0x179be863, mtpc_inputUserEmpty = 0xb98886cf, mtpc_inputUserSelf = 0xf7c1b13f, - mtpc_inputUserContact = 0x86e94f65, - mtpc_inputUserForeign = 0x655e74ff, mtpc_inputPhoneContact = 0xf392b7f4, mtpc_inputFile = 0xf52ff27f, mtpc_inputMediaEmpty = 0x9664f57f, @@ -145,12 +141,12 @@ enum { mtpc_messageActionChatDeleteUser = 0xb2ae9b0c, mtpc_dialog = 0xc1dd804a, mtpc_photoEmpty = 0x2331b22d, - mtpc_photo = 0xc3838076, + mtpc_photo = 0xcded42fe, mtpc_photoSizeEmpty = 0xe17e23c, mtpc_photoSize = 0x77bfb61b, mtpc_photoCachedSize = 0xe9a734fa, mtpc_videoEmpty = 0xc10658a8, - mtpc_video = 0xee9f4a4d, + mtpc_video = 0xf72887d3, mtpc_geoPointEmpty = 0x1117dd5f, mtpc_geoPoint = 0x2049d70c, mtpc_auth_checkedPhone = 0x811ea28e, @@ -200,6 +196,7 @@ enum { mtpc_inputMessagesFilterDocument = 0x9eddf188, mtpc_inputMessagesFilterAudio = 0xcfc87522, mtpc_inputMessagesFilterAudioDocuments = 0x5afbf764, + mtpc_inputMessagesFilterUrl = 0x7ef0dd87, mtpc_updateNewMessage = 0x1f2b0afd, mtpc_updateMessageID = 0x4e90bfd6, mtpc_updateDeleteMessages = 0xa20db0e5, @@ -288,7 +285,7 @@ enum { mtpc_inputAudioFileLocation = 0x74dc404d, mtpc_inputDocumentFileLocation = 0x4e45abe9, mtpc_audioEmpty = 0x586988d8, - mtpc_audio = 0xc7ac6496, + mtpc_audio = 0xf9e35055, mtpc_documentEmpty = 0x36f8c871, mtpc_document = 0xf9a39f4f, mtpc_help_support = 0x17c6b5f6, @@ -388,6 +385,10 @@ enum { mtpc_replyKeyboardHide = 0xa03e5b85, mtpc_replyKeyboardForceReply = 0xf4108aa0, mtpc_replyKeyboardMarkup = 0x3502758c, + mtpc_inputPeerUser = 0x7b8e7de6, + mtpc_inputUser = 0xd8292816, + mtpc_help_appChangelogEmpty = 0xaf7e0394, + mtpc_help_appChangelog = 0x4668e6bd, mtpc_invokeAfterMsg = 0xcb9f372d, mtpc_invokeAfterMsgs = 0x3dc4b4f0, mtpc_auth_checkPhone = 0x6fe51dfb, @@ -453,7 +454,7 @@ enum { mtpc_help_getAppUpdate = 0xc812ac7e, mtpc_help_saveAppLog = 0x6f02f748, mtpc_help_getInviteText = 0xa4a95186, - mtpc_photos_getUserPhotos = 0xb7ee553c, + mtpc_photos_getUserPhotos = 0x91cd32a8, mtpc_messages_forwardMessage = 0x33963bf9, mtpc_messages_sendBroadcast = 0xbf73f4da, mtpc_geochats_getLocated = 0x7f192d8f, @@ -515,7 +516,8 @@ enum { mtpc_messages_getStickerSet = 0x2619a90e, mtpc_messages_installStickerSet = 0x7b30c3a6, mtpc_messages_uninstallStickerSet = 0xf96e55de, - mtpc_messages_startBot = 0x1b3e0ffc + mtpc_messages_startBot = 0x1b3e0ffc, + mtpc_help_getAppChangelog = 0x5bab7fb2 }; // Type forward declarations @@ -594,13 +596,11 @@ class MTPDerror; class MTPnull; class MTPinputPeer; -class MTPDinputPeerContact; -class MTPDinputPeerForeign; class MTPDinputPeerChat; +class MTPDinputPeerUser; class MTPinputUser; -class MTPDinputUserContact; -class MTPDinputUserForeign; +class MTPDinputUser; class MTPinputContact; class MTPDinputPhoneContact; @@ -1083,6 +1083,9 @@ class MTPDreplyKeyboardHide; class MTPDreplyKeyboardForceReply; class MTPDreplyKeyboardMarkup; +class MTPhelp_appChangelog; +class MTPDhelp_appChangelog; + // Boxed types definitions typedef MTPBoxed MTPResPQ; @@ -1234,6 +1237,7 @@ typedef MTPBoxed MTPBotInfo; typedef MTPBoxed MTPKeyboardButton; typedef MTPBoxed MTPKeyboardButtonRow; typedef MTPBoxed MTPReplyMarkup; +typedef MTPBoxed MTPhelp_AppChangelog; // Type classes definitions @@ -2070,30 +2074,6 @@ public: read(from, end, cons); } - MTPDinputPeerContact &_inputPeerContact() { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_inputPeerContact) throw mtpErrorWrongTypeId(_type, mtpc_inputPeerContact); - split(); - return *(MTPDinputPeerContact*)data; - } - const MTPDinputPeerContact &c_inputPeerContact() const { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_inputPeerContact) throw mtpErrorWrongTypeId(_type, mtpc_inputPeerContact); - return *(const MTPDinputPeerContact*)data; - } - - MTPDinputPeerForeign &_inputPeerForeign() { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_inputPeerForeign) throw mtpErrorWrongTypeId(_type, mtpc_inputPeerForeign); - split(); - return *(MTPDinputPeerForeign*)data; - } - const MTPDinputPeerForeign &c_inputPeerForeign() const { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_inputPeerForeign) throw mtpErrorWrongTypeId(_type, mtpc_inputPeerForeign); - return *(const MTPDinputPeerForeign*)data; - } - MTPDinputPeerChat &_inputPeerChat() { if (!data) throw mtpErrorUninitialized(); if (_type != mtpc_inputPeerChat) throw mtpErrorWrongTypeId(_type, mtpc_inputPeerChat); @@ -2106,6 +2086,18 @@ public: return *(const MTPDinputPeerChat*)data; } + MTPDinputPeerUser &_inputPeerUser() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_inputPeerUser) throw mtpErrorWrongTypeId(_type, mtpc_inputPeerUser); + split(); + return *(MTPDinputPeerUser*)data; + } + const MTPDinputPeerUser &c_inputPeerUser() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_inputPeerUser) throw mtpErrorWrongTypeId(_type, mtpc_inputPeerUser); + return *(const MTPDinputPeerUser*)data; + } + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); @@ -2115,15 +2107,13 @@ public: private: explicit MTPinputPeer(mtpTypeId type); - explicit MTPinputPeer(MTPDinputPeerContact *_data); - explicit MTPinputPeer(MTPDinputPeerForeign *_data); explicit MTPinputPeer(MTPDinputPeerChat *_data); + explicit MTPinputPeer(MTPDinputPeerUser *_data); friend MTPinputPeer MTP_inputPeerEmpty(); friend MTPinputPeer MTP_inputPeerSelf(); - friend MTPinputPeer MTP_inputPeerContact(MTPint _user_id); - friend MTPinputPeer MTP_inputPeerForeign(MTPint _user_id, const MTPlong &_access_hash); friend MTPinputPeer MTP_inputPeerChat(MTPint _chat_id); + friend MTPinputPeer MTP_inputPeerUser(MTPint _user_id, const MTPlong &_access_hash); mtpTypeId _type; }; @@ -2137,28 +2127,16 @@ public: read(from, end, cons); } - MTPDinputUserContact &_inputUserContact() { + MTPDinputUser &_inputUser() { if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_inputUserContact) throw mtpErrorWrongTypeId(_type, mtpc_inputUserContact); + if (_type != mtpc_inputUser) throw mtpErrorWrongTypeId(_type, mtpc_inputUser); split(); - return *(MTPDinputUserContact*)data; + return *(MTPDinputUser*)data; } - const MTPDinputUserContact &c_inputUserContact() const { + const MTPDinputUser &c_inputUser() const { if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_inputUserContact) throw mtpErrorWrongTypeId(_type, mtpc_inputUserContact); - return *(const MTPDinputUserContact*)data; - } - - MTPDinputUserForeign &_inputUserForeign() { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_inputUserForeign) throw mtpErrorWrongTypeId(_type, mtpc_inputUserForeign); - split(); - return *(MTPDinputUserForeign*)data; - } - const MTPDinputUserForeign &c_inputUserForeign() const { - if (!data) throw mtpErrorUninitialized(); - if (_type != mtpc_inputUserForeign) throw mtpErrorWrongTypeId(_type, mtpc_inputUserForeign); - return *(const MTPDinputUserForeign*)data; + if (_type != mtpc_inputUser) throw mtpErrorWrongTypeId(_type, mtpc_inputUser); + return *(const MTPDinputUser*)data; } uint32 innerLength() const; @@ -2170,13 +2148,11 @@ public: private: explicit MTPinputUser(mtpTypeId type); - explicit MTPinputUser(MTPDinputUserContact *_data); - explicit MTPinputUser(MTPDinputUserForeign *_data); + explicit MTPinputUser(MTPDinputUser *_data); friend MTPinputUser MTP_inputUserEmpty(); friend MTPinputUser MTP_inputUserSelf(); - friend MTPinputUser MTP_inputUserContact(MTPint _user_id); - friend MTPinputUser MTP_inputUserForeign(MTPint _user_id, const MTPlong &_access_hash); + friend MTPinputUser MTP_inputUser(MTPint _user_id, const MTPlong &_access_hash); mtpTypeId _type; }; @@ -3709,7 +3685,7 @@ private: explicit MTPphoto(MTPDphoto *_data); friend MTPphoto MTP_photoEmpty(const MTPlong &_id); - friend MTPphoto MTP_photo(const MTPlong &_id, const MTPlong &_access_hash, MTPint _user_id, MTPint _date, const MTPGeoPoint &_geo, const MTPVector &_sizes); + friend MTPphoto MTP_photo(const MTPlong &_id, const MTPlong &_access_hash, MTPint _date, const MTPVector &_sizes); mtpTypeId _type; }; @@ -3825,7 +3801,7 @@ private: explicit MTPvideo(MTPDvideo *_data); friend MTPvideo MTP_videoEmpty(const MTPlong &_id); - friend MTPvideo MTP_video(const MTPlong &_id, const MTPlong &_access_hash, MTPint _user_id, MTPint _date, MTPint _duration, MTPint _size, const MTPPhotoSize &_thumb, MTPint _dc_id, MTPint _w, MTPint _h); + friend MTPvideo MTP_video(const MTPlong &_id, const MTPlong &_access_hash, MTPint _date, MTPint _duration, const MTPstring &_mime_type, MTPint _size, const MTPPhotoSize &_thumb, MTPint _dc_id, MTPint _w, MTPint _h); mtpTypeId _type; }; @@ -4929,6 +4905,7 @@ private: friend MTPmessagesFilter MTP_inputMessagesFilterDocument(); friend MTPmessagesFilter MTP_inputMessagesFilterAudio(); friend MTPmessagesFilter MTP_inputMessagesFilterAudioDocuments(); + friend MTPmessagesFilter MTP_inputMessagesFilterUrl(); mtpTypeId _type; }; @@ -6539,7 +6516,7 @@ private: explicit MTPaudio(MTPDaudio *_data); friend MTPaudio MTP_audioEmpty(const MTPlong &_id); - friend MTPaudio MTP_audio(const MTPlong &_id, const MTPlong &_access_hash, MTPint _user_id, MTPint _date, MTPint _duration, const MTPstring &_mime_type, MTPint _size, MTPint _dc_id); + friend MTPaudio MTP_audio(const MTPlong &_id, const MTPlong &_access_hash, MTPint _date, MTPint _duration, const MTPstring &_mime_type, MTPint _size, MTPint _dc_id); mtpTypeId _type; }; @@ -8050,6 +8027,44 @@ private: }; typedef MTPBoxed MTPReplyMarkup; +class MTPhelp_appChangelog : private mtpDataOwner { +public: + MTPhelp_appChangelog() : mtpDataOwner(0), _type(0) { + } + MTPhelp_appChangelog(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) : mtpDataOwner(0), _type(0) { + read(from, end, cons); + } + + MTPDhelp_appChangelog &_help_appChangelog() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_help_appChangelog) throw mtpErrorWrongTypeId(_type, mtpc_help_appChangelog); + split(); + return *(MTPDhelp_appChangelog*)data; + } + const MTPDhelp_appChangelog &c_help_appChangelog() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_help_appChangelog) throw mtpErrorWrongTypeId(_type, mtpc_help_appChangelog); + return *(const MTPDhelp_appChangelog*)data; + } + + uint32 innerLength() const; + mtpTypeId type() const; + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); + void write(mtpBuffer &to) const; + + typedef void ResponseType; + +private: + explicit MTPhelp_appChangelog(mtpTypeId type); + explicit MTPhelp_appChangelog(MTPDhelp_appChangelog *_data); + + friend MTPhelp_appChangelog MTP_help_appChangelogEmpty(); + friend MTPhelp_appChangelog MTP_help_appChangelog(const MTPstring &_text); + + mtpTypeId _type; +}; +typedef MTPBoxed MTPhelp_AppChangelog; + // Type constructors with data class MTPDresPQ : public mtpDataImpl { @@ -8383,27 +8398,6 @@ public: MTPstring vtext; }; -class MTPDinputPeerContact : public mtpDataImpl { -public: - MTPDinputPeerContact() { - } - MTPDinputPeerContact(MTPint _user_id) : vuser_id(_user_id) { - } - - MTPint vuser_id; -}; - -class MTPDinputPeerForeign : public mtpDataImpl { -public: - MTPDinputPeerForeign() { - } - MTPDinputPeerForeign(MTPint _user_id, const MTPlong &_access_hash) : vuser_id(_user_id), vaccess_hash(_access_hash) { - } - - MTPint vuser_id; - MTPlong vaccess_hash; -}; - class MTPDinputPeerChat : public mtpDataImpl { public: MTPDinputPeerChat() { @@ -8414,21 +8408,22 @@ public: MTPint vchat_id; }; -class MTPDinputUserContact : public mtpDataImpl { +class MTPDinputPeerUser : public mtpDataImpl { public: - MTPDinputUserContact() { + MTPDinputPeerUser() { } - MTPDinputUserContact(MTPint _user_id) : vuser_id(_user_id) { + MTPDinputPeerUser(MTPint _user_id, const MTPlong &_access_hash) : vuser_id(_user_id), vaccess_hash(_access_hash) { } MTPint vuser_id; + MTPlong vaccess_hash; }; -class MTPDinputUserForeign : public mtpDataImpl { +class MTPDinputUser : public mtpDataImpl { public: - MTPDinputUserForeign() { + MTPDinputUser() { } - MTPDinputUserForeign(MTPint _user_id, const MTPlong &_access_hash) : vuser_id(_user_id), vaccess_hash(_access_hash) { + MTPDinputUser(MTPint _user_id, const MTPlong &_access_hash) : vuser_id(_user_id), vaccess_hash(_access_hash) { } MTPint vuser_id; @@ -9255,14 +9250,12 @@ class MTPDphoto : public mtpDataImpl { public: MTPDphoto() { } - MTPDphoto(const MTPlong &_id, const MTPlong &_access_hash, MTPint _user_id, MTPint _date, const MTPGeoPoint &_geo, const MTPVector &_sizes) : vid(_id), vaccess_hash(_access_hash), vuser_id(_user_id), vdate(_date), vgeo(_geo), vsizes(_sizes) { + MTPDphoto(const MTPlong &_id, const MTPlong &_access_hash, MTPint _date, const MTPVector &_sizes) : vid(_id), vaccess_hash(_access_hash), vdate(_date), vsizes(_sizes) { } MTPlong vid; MTPlong vaccess_hash; - MTPint vuser_id; MTPint vdate; - MTPGeoPoint vgeo; MTPVector vsizes; }; @@ -9318,14 +9311,14 @@ class MTPDvideo : public mtpDataImpl { public: MTPDvideo() { } - MTPDvideo(const MTPlong &_id, const MTPlong &_access_hash, MTPint _user_id, MTPint _date, MTPint _duration, MTPint _size, const MTPPhotoSize &_thumb, MTPint _dc_id, MTPint _w, MTPint _h) : vid(_id), vaccess_hash(_access_hash), vuser_id(_user_id), vdate(_date), vduration(_duration), vsize(_size), vthumb(_thumb), vdc_id(_dc_id), vw(_w), vh(_h) { + MTPDvideo(const MTPlong &_id, const MTPlong &_access_hash, MTPint _date, MTPint _duration, const MTPstring &_mime_type, MTPint _size, const MTPPhotoSize &_thumb, MTPint _dc_id, MTPint _w, MTPint _h) : vid(_id), vaccess_hash(_access_hash), vdate(_date), vduration(_duration), vmime_type(_mime_type), vsize(_size), vthumb(_thumb), vdc_id(_dc_id), vw(_w), vh(_h) { } MTPlong vid; MTPlong vaccess_hash; - MTPint vuser_id; MTPint vdate; MTPint vduration; + MTPstring vmime_type; MTPint vsize; MTPPhotoSize vthumb; MTPint vdc_id; @@ -10684,12 +10677,11 @@ class MTPDaudio : public mtpDataImpl { public: MTPDaudio() { } - MTPDaudio(const MTPlong &_id, const MTPlong &_access_hash, MTPint _user_id, MTPint _date, MTPint _duration, const MTPstring &_mime_type, MTPint _size, MTPint _dc_id) : vid(_id), vaccess_hash(_access_hash), vuser_id(_user_id), vdate(_date), vduration(_duration), vmime_type(_mime_type), vsize(_size), vdc_id(_dc_id) { + MTPDaudio(const MTPlong &_id, const MTPlong &_access_hash, MTPint _date, MTPint _duration, const MTPstring &_mime_type, MTPint _size, MTPint _dc_id) : vid(_id), vaccess_hash(_access_hash), vdate(_date), vduration(_duration), vmime_type(_mime_type), vsize(_size), vdc_id(_dc_id) { } MTPlong vid; MTPlong vaccess_hash; - MTPint vuser_id; MTPint vdate; MTPint vduration; MTPstring vmime_type; @@ -11329,6 +11321,16 @@ public: MTPVector vrows; }; +class MTPDhelp_appChangelog : public mtpDataImpl { +public: + MTPDhelp_appChangelog() { + } + MTPDhelp_appChangelog(const MTPstring &_text) : vtext(_text) { + } + + MTPstring vtext; +}; + // RPC methods class MTPreq_pq { // RPC method 'req_pq' @@ -14429,7 +14431,7 @@ class MTPphotos_getUserPhotos { // RPC method 'photos.getUserPhotos' public: MTPInputUser vuser_id; MTPint voffset; - MTPint vmax_id; + MTPlong vmax_id; MTPint vlimit; MTPphotos_getUserPhotos() { @@ -14437,7 +14439,7 @@ public: MTPphotos_getUserPhotos(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_photos_getUserPhotos) { read(from, end, cons); } - MTPphotos_getUserPhotos(const MTPInputUser &_user_id, MTPint _offset, MTPint _max_id, MTPint _limit) : vuser_id(_user_id), voffset(_offset), vmax_id(_max_id), vlimit(_limit) { + MTPphotos_getUserPhotos(const MTPInputUser &_user_id, MTPint _offset, const MTPlong &_max_id, MTPint _limit) : vuser_id(_user_id), voffset(_offset), vmax_id(_max_id), vlimit(_limit) { } uint32 innerLength() const { @@ -14469,7 +14471,7 @@ public: } MTPphotos_GetUserPhotos(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed(from, end, cons) { } - MTPphotos_GetUserPhotos(const MTPInputUser &_user_id, MTPint _offset, MTPint _max_id, MTPint _limit) : MTPBoxed(MTPphotos_getUserPhotos(_user_id, _offset, _max_id, _limit)) { + MTPphotos_GetUserPhotos(const MTPInputUser &_user_id, MTPint _offset, const MTPlong &_max_id, MTPint _limit) : MTPBoxed(MTPphotos_getUserPhotos(_user_id, _offset, _max_id, _limit)) { } }; @@ -17049,6 +17051,54 @@ public: } }; +class MTPhelp_getAppChangelog { // RPC method 'help.getAppChangelog' +public: + MTPstring vdevice_model; + MTPstring vsystem_version; + MTPstring vapp_version; + MTPstring vlang_code; + + MTPhelp_getAppChangelog() { + } + MTPhelp_getAppChangelog(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_help_getAppChangelog) { + read(from, end, cons); + } + MTPhelp_getAppChangelog(const MTPstring &_device_model, const MTPstring &_system_version, const MTPstring &_app_version, const MTPstring &_lang_code) : vdevice_model(_device_model), vsystem_version(_system_version), vapp_version(_app_version), vlang_code(_lang_code) { + } + + uint32 innerLength() const { + return vdevice_model.innerLength() + vsystem_version.innerLength() + vapp_version.innerLength() + vlang_code.innerLength(); + } + mtpTypeId type() const { + return mtpc_help_getAppChangelog; + } + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_help_getAppChangelog) { + vdevice_model.read(from, end); + vsystem_version.read(from, end); + vapp_version.read(from, end); + vlang_code.read(from, end); + } + void write(mtpBuffer &to) const { + vdevice_model.write(to); + vsystem_version.write(to); + vapp_version.write(to); + vlang_code.write(to); + } + + typedef MTPhelp_AppChangelog ResponseType; +}; +class MTPhelp_GetAppChangelog : public MTPBoxed { +public: + MTPhelp_GetAppChangelog() { + } + MTPhelp_GetAppChangelog(const MTPhelp_getAppChangelog &v) : MTPBoxed(v) { + } + MTPhelp_GetAppChangelog(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed(from, end, cons) { + } + MTPhelp_GetAppChangelog(const MTPstring &_device_model, const MTPstring &_system_version, const MTPstring &_app_version, const MTPstring &_lang_code) : MTPBoxed(MTPhelp_getAppChangelog(_device_model, _system_version, _app_version, _lang_code)) { + } +}; + // Inline methods definition inline MTPresPQ::MTPresPQ() : mtpDataOwner(new MTPDresPQ()) { @@ -17989,18 +18039,14 @@ inline MTPnull MTP_null() { inline uint32 MTPinputPeer::innerLength() const { switch (_type) { - case mtpc_inputPeerContact: { - const MTPDinputPeerContact &v(c_inputPeerContact()); - return v.vuser_id.innerLength(); - } - case mtpc_inputPeerForeign: { - const MTPDinputPeerForeign &v(c_inputPeerForeign()); - return v.vuser_id.innerLength() + v.vaccess_hash.innerLength(); - } case mtpc_inputPeerChat: { const MTPDinputPeerChat &v(c_inputPeerChat()); return v.vchat_id.innerLength(); } + case mtpc_inputPeerUser: { + const MTPDinputPeerUser &v(c_inputPeerUser()); + return v.vuser_id.innerLength() + v.vaccess_hash.innerLength(); + } } return 0; } @@ -18013,82 +18059,63 @@ inline void MTPinputPeer::read(const mtpPrime *&from, const mtpPrime *end, mtpTy switch (cons) { case mtpc_inputPeerEmpty: _type = cons; break; case mtpc_inputPeerSelf: _type = cons; break; - case mtpc_inputPeerContact: _type = cons; { - if (!data) setData(new MTPDinputPeerContact()); - MTPDinputPeerContact &v(_inputPeerContact()); - v.vuser_id.read(from, end); - } break; - case mtpc_inputPeerForeign: _type = cons; { - if (!data) setData(new MTPDinputPeerForeign()); - MTPDinputPeerForeign &v(_inputPeerForeign()); - v.vuser_id.read(from, end); - v.vaccess_hash.read(from, end); - } break; case mtpc_inputPeerChat: _type = cons; { if (!data) setData(new MTPDinputPeerChat()); MTPDinputPeerChat &v(_inputPeerChat()); v.vchat_id.read(from, end); } break; + case mtpc_inputPeerUser: _type = cons; { + if (!data) setData(new MTPDinputPeerUser()); + MTPDinputPeerUser &v(_inputPeerUser()); + v.vuser_id.read(from, end); + v.vaccess_hash.read(from, end); + } break; default: throw mtpErrorUnexpected(cons, "MTPinputPeer"); } } inline void MTPinputPeer::write(mtpBuffer &to) const { switch (_type) { - case mtpc_inputPeerContact: { - const MTPDinputPeerContact &v(c_inputPeerContact()); - v.vuser_id.write(to); - } break; - case mtpc_inputPeerForeign: { - const MTPDinputPeerForeign &v(c_inputPeerForeign()); - v.vuser_id.write(to); - v.vaccess_hash.write(to); - } break; case mtpc_inputPeerChat: { const MTPDinputPeerChat &v(c_inputPeerChat()); v.vchat_id.write(to); } break; + case mtpc_inputPeerUser: { + const MTPDinputPeerUser &v(c_inputPeerUser()); + v.vuser_id.write(to); + v.vaccess_hash.write(to); + } break; } } inline MTPinputPeer::MTPinputPeer(mtpTypeId type) : mtpDataOwner(0), _type(type) { switch (type) { case mtpc_inputPeerEmpty: break; case mtpc_inputPeerSelf: break; - case mtpc_inputPeerContact: setData(new MTPDinputPeerContact()); break; - case mtpc_inputPeerForeign: setData(new MTPDinputPeerForeign()); break; case mtpc_inputPeerChat: setData(new MTPDinputPeerChat()); break; + case mtpc_inputPeerUser: setData(new MTPDinputPeerUser()); break; default: throw mtpErrorBadTypeId(type, "MTPinputPeer"); } } -inline MTPinputPeer::MTPinputPeer(MTPDinputPeerContact *_data) : mtpDataOwner(_data), _type(mtpc_inputPeerContact) { -} -inline MTPinputPeer::MTPinputPeer(MTPDinputPeerForeign *_data) : mtpDataOwner(_data), _type(mtpc_inputPeerForeign) { -} inline MTPinputPeer::MTPinputPeer(MTPDinputPeerChat *_data) : mtpDataOwner(_data), _type(mtpc_inputPeerChat) { } +inline MTPinputPeer::MTPinputPeer(MTPDinputPeerUser *_data) : mtpDataOwner(_data), _type(mtpc_inputPeerUser) { +} inline MTPinputPeer MTP_inputPeerEmpty() { return MTPinputPeer(mtpc_inputPeerEmpty); } inline MTPinputPeer MTP_inputPeerSelf() { return MTPinputPeer(mtpc_inputPeerSelf); } -inline MTPinputPeer MTP_inputPeerContact(MTPint _user_id) { - return MTPinputPeer(new MTPDinputPeerContact(_user_id)); -} -inline MTPinputPeer MTP_inputPeerForeign(MTPint _user_id, const MTPlong &_access_hash) { - return MTPinputPeer(new MTPDinputPeerForeign(_user_id, _access_hash)); -} inline MTPinputPeer MTP_inputPeerChat(MTPint _chat_id) { return MTPinputPeer(new MTPDinputPeerChat(_chat_id)); } +inline MTPinputPeer MTP_inputPeerUser(MTPint _user_id, const MTPlong &_access_hash) { + return MTPinputPeer(new MTPDinputPeerUser(_user_id, _access_hash)); +} inline uint32 MTPinputUser::innerLength() const { switch (_type) { - case mtpc_inputUserContact: { - const MTPDinputUserContact &v(c_inputUserContact()); - return v.vuser_id.innerLength(); - } - case mtpc_inputUserForeign: { - const MTPDinputUserForeign &v(c_inputUserForeign()); + case mtpc_inputUser: { + const MTPDinputUser &v(c_inputUser()); return v.vuser_id.innerLength() + v.vaccess_hash.innerLength(); } } @@ -18103,14 +18130,9 @@ inline void MTPinputUser::read(const mtpPrime *&from, const mtpPrime *end, mtpTy switch (cons) { case mtpc_inputUserEmpty: _type = cons; break; case mtpc_inputUserSelf: _type = cons; break; - case mtpc_inputUserContact: _type = cons; { - if (!data) setData(new MTPDinputUserContact()); - MTPDinputUserContact &v(_inputUserContact()); - v.vuser_id.read(from, end); - } break; - case mtpc_inputUserForeign: _type = cons; { - if (!data) setData(new MTPDinputUserForeign()); - MTPDinputUserForeign &v(_inputUserForeign()); + case mtpc_inputUser: _type = cons; { + if (!data) setData(new MTPDinputUser()); + MTPDinputUser &v(_inputUser()); v.vuser_id.read(from, end); v.vaccess_hash.read(from, end); } break; @@ -18119,12 +18141,8 @@ inline void MTPinputUser::read(const mtpPrime *&from, const mtpPrime *end, mtpTy } inline void MTPinputUser::write(mtpBuffer &to) const { switch (_type) { - case mtpc_inputUserContact: { - const MTPDinputUserContact &v(c_inputUserContact()); - v.vuser_id.write(to); - } break; - case mtpc_inputUserForeign: { - const MTPDinputUserForeign &v(c_inputUserForeign()); + case mtpc_inputUser: { + const MTPDinputUser &v(c_inputUser()); v.vuser_id.write(to); v.vaccess_hash.write(to); } break; @@ -18134,14 +18152,11 @@ inline MTPinputUser::MTPinputUser(mtpTypeId type) : mtpDataOwner(0), _type(type) switch (type) { case mtpc_inputUserEmpty: break; case mtpc_inputUserSelf: break; - case mtpc_inputUserContact: setData(new MTPDinputUserContact()); break; - case mtpc_inputUserForeign: setData(new MTPDinputUserForeign()); break; + case mtpc_inputUser: setData(new MTPDinputUser()); break; default: throw mtpErrorBadTypeId(type, "MTPinputUser"); } } -inline MTPinputUser::MTPinputUser(MTPDinputUserContact *_data) : mtpDataOwner(_data), _type(mtpc_inputUserContact) { -} -inline MTPinputUser::MTPinputUser(MTPDinputUserForeign *_data) : mtpDataOwner(_data), _type(mtpc_inputUserForeign) { +inline MTPinputUser::MTPinputUser(MTPDinputUser *_data) : mtpDataOwner(_data), _type(mtpc_inputUser) { } inline MTPinputUser MTP_inputUserEmpty() { return MTPinputUser(mtpc_inputUserEmpty); @@ -18149,11 +18164,8 @@ inline MTPinputUser MTP_inputUserEmpty() { inline MTPinputUser MTP_inputUserSelf() { return MTPinputUser(mtpc_inputUserSelf); } -inline MTPinputUser MTP_inputUserContact(MTPint _user_id) { - return MTPinputUser(new MTPDinputUserContact(_user_id)); -} -inline MTPinputUser MTP_inputUserForeign(MTPint _user_id, const MTPlong &_access_hash) { - return MTPinputUser(new MTPDinputUserForeign(_user_id, _access_hash)); +inline MTPinputUser MTP_inputUser(MTPint _user_id, const MTPlong &_access_hash) { + return MTPinputUser(new MTPDinputUser(_user_id, _access_hash)); } inline MTPinputContact::MTPinputContact() : mtpDataOwner(new MTPDinputPhoneContact()) { @@ -20319,7 +20331,7 @@ inline uint32 MTPphoto::innerLength() const { } case mtpc_photo: { const MTPDphoto &v(c_photo()); - return v.vid.innerLength() + v.vaccess_hash.innerLength() + v.vuser_id.innerLength() + v.vdate.innerLength() + v.vgeo.innerLength() + v.vsizes.innerLength(); + return v.vid.innerLength() + v.vaccess_hash.innerLength() + v.vdate.innerLength() + v.vsizes.innerLength(); } } return 0; @@ -20341,9 +20353,7 @@ inline void MTPphoto::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId MTPDphoto &v(_photo()); v.vid.read(from, end); v.vaccess_hash.read(from, end); - v.vuser_id.read(from, end); v.vdate.read(from, end); - v.vgeo.read(from, end); v.vsizes.read(from, end); } break; default: throw mtpErrorUnexpected(cons, "MTPphoto"); @@ -20359,9 +20369,7 @@ inline void MTPphoto::write(mtpBuffer &to) const { const MTPDphoto &v(c_photo()); v.vid.write(to); v.vaccess_hash.write(to); - v.vuser_id.write(to); v.vdate.write(to); - v.vgeo.write(to); v.vsizes.write(to); } break; } @@ -20380,8 +20388,8 @@ inline MTPphoto::MTPphoto(MTPDphoto *_data) : mtpDataOwner(_data), _type(mtpc_ph inline MTPphoto MTP_photoEmpty(const MTPlong &_id) { return MTPphoto(new MTPDphotoEmpty(_id)); } -inline MTPphoto MTP_photo(const MTPlong &_id, const MTPlong &_access_hash, MTPint _user_id, MTPint _date, const MTPGeoPoint &_geo, const MTPVector &_sizes) { - return MTPphoto(new MTPDphoto(_id, _access_hash, _user_id, _date, _geo, _sizes)); +inline MTPphoto MTP_photo(const MTPlong &_id, const MTPlong &_access_hash, MTPint _date, const MTPVector &_sizes) { + return MTPphoto(new MTPDphoto(_id, _access_hash, _date, _sizes)); } inline uint32 MTPphotoSize::innerLength() const { @@ -20490,7 +20498,7 @@ inline uint32 MTPvideo::innerLength() const { } case mtpc_video: { const MTPDvideo &v(c_video()); - return v.vid.innerLength() + v.vaccess_hash.innerLength() + v.vuser_id.innerLength() + v.vdate.innerLength() + v.vduration.innerLength() + v.vsize.innerLength() + v.vthumb.innerLength() + v.vdc_id.innerLength() + v.vw.innerLength() + v.vh.innerLength(); + return v.vid.innerLength() + v.vaccess_hash.innerLength() + v.vdate.innerLength() + v.vduration.innerLength() + v.vmime_type.innerLength() + v.vsize.innerLength() + v.vthumb.innerLength() + v.vdc_id.innerLength() + v.vw.innerLength() + v.vh.innerLength(); } } return 0; @@ -20512,9 +20520,9 @@ inline void MTPvideo::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId MTPDvideo &v(_video()); v.vid.read(from, end); v.vaccess_hash.read(from, end); - v.vuser_id.read(from, end); v.vdate.read(from, end); v.vduration.read(from, end); + v.vmime_type.read(from, end); v.vsize.read(from, end); v.vthumb.read(from, end); v.vdc_id.read(from, end); @@ -20534,9 +20542,9 @@ inline void MTPvideo::write(mtpBuffer &to) const { const MTPDvideo &v(c_video()); v.vid.write(to); v.vaccess_hash.write(to); - v.vuser_id.write(to); v.vdate.write(to); v.vduration.write(to); + v.vmime_type.write(to); v.vsize.write(to); v.vthumb.write(to); v.vdc_id.write(to); @@ -20559,8 +20567,8 @@ inline MTPvideo::MTPvideo(MTPDvideo *_data) : mtpDataOwner(_data), _type(mtpc_vi inline MTPvideo MTP_videoEmpty(const MTPlong &_id) { return MTPvideo(new MTPDvideoEmpty(_id)); } -inline MTPvideo MTP_video(const MTPlong &_id, const MTPlong &_access_hash, MTPint _user_id, MTPint _date, MTPint _duration, MTPint _size, const MTPPhotoSize &_thumb, MTPint _dc_id, MTPint _w, MTPint _h) { - return MTPvideo(new MTPDvideo(_id, _access_hash, _user_id, _date, _duration, _size, _thumb, _dc_id, _w, _h)); +inline MTPvideo MTP_video(const MTPlong &_id, const MTPlong &_access_hash, MTPint _date, MTPint _duration, const MTPstring &_mime_type, MTPint _size, const MTPPhotoSize &_thumb, MTPint _dc_id, MTPint _w, MTPint _h) { + return MTPvideo(new MTPDvideo(_id, _access_hash, _date, _duration, _mime_type, _size, _thumb, _dc_id, _w, _h)); } inline uint32 MTPgeoPoint::innerLength() const { @@ -21852,6 +21860,7 @@ inline void MTPmessagesFilter::read(const mtpPrime *&from, const mtpPrime *end, case mtpc_inputMessagesFilterDocument: _type = cons; break; case mtpc_inputMessagesFilterAudio: _type = cons; break; case mtpc_inputMessagesFilterAudioDocuments: _type = cons; break; + case mtpc_inputMessagesFilterUrl: _type = cons; break; default: throw mtpErrorUnexpected(cons, "MTPmessagesFilter"); } } @@ -21869,6 +21878,7 @@ inline MTPmessagesFilter::MTPmessagesFilter(mtpTypeId type) : _type(type) { case mtpc_inputMessagesFilterDocument: break; case mtpc_inputMessagesFilterAudio: break; case mtpc_inputMessagesFilterAudioDocuments: break; + case mtpc_inputMessagesFilterUrl: break; default: throw mtpErrorBadTypeId(type, "MTPmessagesFilter"); } } @@ -21896,6 +21906,9 @@ inline MTPmessagesFilter MTP_inputMessagesFilterAudio() { inline MTPmessagesFilter MTP_inputMessagesFilterAudioDocuments() { return MTPmessagesFilter(mtpc_inputMessagesFilterAudioDocuments); } +inline MTPmessagesFilter MTP_inputMessagesFilterUrl() { + return MTPmessagesFilter(mtpc_inputMessagesFilterUrl); +} inline uint32 MTPupdate::innerLength() const { switch (_type) { @@ -24147,7 +24160,7 @@ inline uint32 MTPaudio::innerLength() const { } case mtpc_audio: { const MTPDaudio &v(c_audio()); - return v.vid.innerLength() + v.vaccess_hash.innerLength() + v.vuser_id.innerLength() + v.vdate.innerLength() + v.vduration.innerLength() + v.vmime_type.innerLength() + v.vsize.innerLength() + v.vdc_id.innerLength(); + return v.vid.innerLength() + v.vaccess_hash.innerLength() + v.vdate.innerLength() + v.vduration.innerLength() + v.vmime_type.innerLength() + v.vsize.innerLength() + v.vdc_id.innerLength(); } } return 0; @@ -24169,7 +24182,6 @@ inline void MTPaudio::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId MTPDaudio &v(_audio()); v.vid.read(from, end); v.vaccess_hash.read(from, end); - v.vuser_id.read(from, end); v.vdate.read(from, end); v.vduration.read(from, end); v.vmime_type.read(from, end); @@ -24189,7 +24201,6 @@ inline void MTPaudio::write(mtpBuffer &to) const { const MTPDaudio &v(c_audio()); v.vid.write(to); v.vaccess_hash.write(to); - v.vuser_id.write(to); v.vdate.write(to); v.vduration.write(to); v.vmime_type.write(to); @@ -24212,8 +24223,8 @@ inline MTPaudio::MTPaudio(MTPDaudio *_data) : mtpDataOwner(_data), _type(mtpc_au inline MTPaudio MTP_audioEmpty(const MTPlong &_id) { return MTPaudio(new MTPDaudioEmpty(_id)); } -inline MTPaudio MTP_audio(const MTPlong &_id, const MTPlong &_access_hash, MTPint _user_id, MTPint _date, MTPint _duration, const MTPstring &_mime_type, MTPint _size, MTPint _dc_id) { - return MTPaudio(new MTPDaudio(_id, _access_hash, _user_id, _date, _duration, _mime_type, _size, _dc_id)); +inline MTPaudio MTP_audio(const MTPlong &_id, const MTPlong &_access_hash, MTPint _date, MTPint _duration, const MTPstring &_mime_type, MTPint _size, MTPint _dc_id) { + return MTPaudio(new MTPDaudio(_id, _access_hash, _date, _duration, _mime_type, _size, _dc_id)); } inline uint32 MTPdocument::innerLength() const { @@ -26072,6 +26083,55 @@ inline MTPreplyMarkup MTP_replyKeyboardMarkup(MTPint _flags, const MTPVector = Photo; +photo#cded42fe id:long access_hash:long date:int sizes:Vector = Photo; photoSizeEmpty#e17e23c type:string = PhotoSize; photoSize#77bfb61b type:string location:FileLocation w:int h:int size:int = PhotoSize; photoCachedSize#e9a734fa type:string location:FileLocation w:int h:int bytes:bytes = PhotoSize; videoEmpty#c10658a8 id:long = Video; -video#ee9f4a4d id:long access_hash:long user_id:int date:int duration:int size:int thumb:PhotoSize dc_id:int w:int h:int = Video; +video#f72887d3 id:long access_hash:long date:int duration:int mime_type:string size:int thumb:PhotoSize dc_id:int w:int h:int = Video; geoPointEmpty#1117dd5f = GeoPoint; geoPoint#2049d70c long:double lat:double = GeoPoint; @@ -325,6 +321,7 @@ inputMessagesFilterPhotoVideoDocuments#d95e73bb = MessagesFilter; inputMessagesFilterDocument#9eddf188 = MessagesFilter; inputMessagesFilterAudio#cfc87522 = MessagesFilter; inputMessagesFilterAudioDocuments#5afbf764 = MessagesFilter; +inputMessagesFilterUrl#7ef0dd87 = MessagesFilter; updateNewMessage#1f2b0afd message:Message pts:int pts_count:int = Update; updateMessageID#4e90bfd6 id:int random_id:long = Update; @@ -454,7 +451,7 @@ inputAudioFileLocation#74dc404d id:long access_hash:long = InputFileLocation; inputDocumentFileLocation#4e45abe9 id:long access_hash:long = InputFileLocation; audioEmpty#586988d8 id:long = Audio; -audio#c7ac6496 id:long access_hash:long user_id:int date:int duration:int mime_type:string size:int dc_id:int = Audio; +audio#f9e35055 id:long access_hash:long date:int duration:int mime_type:string size:int dc_id:int = Audio; documentEmpty#36f8c871 id:long = Document; document#f9a39f4f id:long access_hash:long date:int mime_type:string size:int thumb:PhotoSize dc_id:int attributes:Vector = Document; @@ -607,6 +604,13 @@ replyKeyboardHide#a03e5b85 flags:# = ReplyMarkup; replyKeyboardForceReply#f4108aa0 flags:# = ReplyMarkup; replyKeyboardMarkup#3502758c flags:# rows:Vector = ReplyMarkup; +inputPeerUser#7b8e7de6 user_id:int access_hash:long = InputPeer; + +inputUser#d8292816 user_id:int access_hash:long = InputUser; + +help.appChangelogEmpty#af7e0394 = help.AppChangelog; +help.appChangelog#4668e6bd text:string = help.AppChangelog; + ---functions--- invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X; @@ -685,7 +689,7 @@ help.getAppUpdate#c812ac7e device_model:string system_version:string app_version help.saveAppLog#6f02f748 events:Vector = Bool; help.getInviteText#a4a95186 lang_code:string = help.InviteText; -photos.getUserPhotos#b7ee553c user_id:InputUser offset:int max_id:int limit:int = photos.Photos; +photos.getUserPhotos#91cd32a8 user_id:InputUser offset:int max_id:long limit:int = photos.Photos; messages.forwardMessage#33963bf9 peer:InputPeer id:int random_id:long = Updates; messages.sendBroadcast#bf73f4da contacts:Vector random_id:Vector message:string media:InputMedia = Updates; @@ -770,3 +774,5 @@ messages.getStickerSet#2619a90e stickerset:InputStickerSet = messages.StickerSet messages.installStickerSet#7b30c3a6 stickerset:InputStickerSet disabled:Bool = Bool; messages.uninstallStickerSet#f96e55de stickerset:InputStickerSet = Bool; messages.startBot#1b3e0ffc bot:InputUser chat_id:int random_id:long start_param:string = Updates; + +help.getAppChangelog#5bab7fb2 device_model:string system_version:string app_version:string lang_code:string = help.AppChangelog; diff --git a/Telegram/SourceFiles/profilewidget.cpp b/Telegram/SourceFiles/profilewidget.cpp index 30743e737..e6cf819e2 100644 --- a/Telegram/SourceFiles/profilewidget.cpp +++ b/Telegram/SourceFiles/profilewidget.cpp @@ -56,11 +56,6 @@ ProfileInner::ProfileInner(ProfileWidget *profile, ScrollArea *scroll, const Pee // settings _enableNotifications(this, lang(lng_profile_enable_notifications)), - // actions - _searchInPeer(this, lang(lng_profile_search_messages)), - _clearHistory(this, lang(lng_profile_clear_history)), - _deleteConversation(this, lang(_peer->chat ? lng_profile_clear_and_exit : lng_profile_delete_conversation)), - // shared media _allMediaTypes(false), _mediaShowAll(this, lang(lng_profile_show_all_types)), @@ -69,6 +64,14 @@ ProfileInner::ProfileInner(ProfileWidget *profile, ScrollArea *scroll, const Pee _mediaDocuments(this, QString()), _mediaAudios(this, QString()), + // actions + _searchInPeer(this, lang(lng_profile_search_messages)), + _clearHistory(this, lang(lng_profile_clear_history)), + _deleteConversation(this, lang(_peer->chat ? lng_profile_clear_and_exit : lng_profile_delete_conversation)), + _wasBlocked(_peerUser ? _peerUser->blocked : UserBlockUnknown), + _blockRequest(0), + _blockUser(this, lang((_peerUser && _peerUser->botInfo) ? lng_profile_block_bot : lng_profile_block_user), st::btnRedLink), + // participants _pHeight(st::profileListPhotoSize + st::profileListPadding.height() * 2), _kickWidth(st::linkFont->m.width(lang(lng_profile_kick))), @@ -80,12 +83,15 @@ ProfileInner::ProfileInner(ProfileWidget *profile, ScrollArea *scroll, const Pee connect(App::api(), SIGNAL(fullPeerUpdated(PeerData*)), this, SLOT(onFullPeerUpdated(PeerData*))); if (_peerUser) { + if (_peerUser->blocked == UserIsBlocked) { + _blockUser.setText(lang(_peerUser->botInfo ? lng_profile_unblock_bot : lng_profile_unblock_user)); + } _phoneText = App::formatPhone(_peerUser->phone); PhotoData *userPhoto = (_peerUser->photoId && _peerUser->photoId != UnknownPeerPhotoId) ? App::photo(_peerUser->photoId) : 0; if (userPhoto && userPhoto->date) { _photoLink = TextLinkPtr(new PhotoLink(userPhoto, _peer)); } - if ((_peerUser->botInfo && !_peerUser->botInfo->inited) || (_peerUser->photoId == UnknownPeerPhotoId) || (_peerUser->photoId && !userPhoto->date)) { + if ((_peerUser->botInfo && !_peerUser->botInfo->inited) || (_peerUser->photoId == UnknownPeerPhotoId) || (_peerUser->photoId && !userPhoto->date) || (_peerUser->blocked == UserBlockUnknown)) { App::api()->requestFullPeer(_peer); } } else { @@ -153,11 +159,6 @@ ProfileInner::ProfileInner(ProfileWidget *profile, ScrollArea *scroll, const Pee // settings connect(&_enableNotifications, SIGNAL(clicked()), this, SLOT(onEnableNotifications())); - // actions - connect(&_searchInPeer, SIGNAL(clicked()), this, SLOT(onSearchInPeer())); - connect(&_clearHistory, SIGNAL(clicked()), this, SLOT(onClearHistory())); - connect(&_deleteConversation, SIGNAL(clicked()), this, SLOT(onDeleteConversation())); - // shared media connect(&_mediaShowAll, SIGNAL(clicked()), this, SLOT(onMediaShowAll())); connect(&_mediaPhotos, SIGNAL(clicked()), this, SLOT(onMediaPhotos())); @@ -170,6 +171,12 @@ ProfileInner::ProfileInner(ProfileWidget *profile, ScrollArea *scroll, const Pee _mediaLinks[OverviewAudios] = &_mediaAudios; App::main()->preloadOverviews(_peer); + // actions + connect(&_searchInPeer, SIGNAL(clicked()), this, SLOT(onSearchInPeer())); + connect(&_clearHistory, SIGNAL(clicked()), this, SLOT(onClearHistory())); + connect(&_deleteConversation, SIGNAL(clicked()), this, SLOT(onDeleteConversation())); + connect(&_blockUser, SIGNAL(clicked()), this, SLOT(onBlockUser())); + App::contextItem(0); resizeEvent(0); @@ -281,6 +288,28 @@ void ProfileInner::onDeleteConversationSure() { } } +void ProfileInner::onBlockUser() { + if (!_peerUser || _blockRequest) return; + if (_peerUser->blocked == UserIsBlocked) { + _blockRequest = MTP::send(MTPcontacts_Unblock(_peerUser->inputUser), rpcDone(&ProfileInner::blockDone, false), rpcFail(&ProfileInner::blockFail)); + } else { + _blockRequest = MTP::send(MTPcontacts_Block(_peerUser->inputUser), rpcDone(&ProfileInner::blockDone, true), rpcFail(&ProfileInner::blockFail)); + } +} + +void ProfileInner::blockDone(bool blocked, const MTPBool &result) { + _blockRequest = 0; + if (!_peerUser) return; + _peerUser->blocked = blocked ? UserIsBlocked : UserIsNotBlocked; + emit App::main()->peerUpdated(_peerUser); +} + +bool ProfileInner::blockFail(const RPCError &error) { + if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false; + //_blockRequest = 0; + return false; +} + void ProfileInner::onAddParticipant() { App::wnd()->showLayer(new ContactsBox(_peerChat)); } @@ -410,6 +439,10 @@ void ProfileInner::peerUpdated(PeerData *data) { if (_peerUser) { _phoneText = App::formatPhone(_peerUser->phone); if (_peerUser->photoId && _peerUser->photoId != UnknownPeerPhotoId) photo = App::photo(_peerUser->photoId); + if (_wasBlocked != _peerUser->blocked) { + _wasBlocked = _peerUser->blocked; + _blockUser.setText(lang((_peerUser->blocked == UserIsBlocked) ? (_peerUser->botInfo ? lng_profile_unblock_bot : lng_profile_unblock_user) : (_peerUser->botInfo ? lng_profile_block_bot : lng_profile_block_user))); + } } else { if (_peerChat->photoId && _peerChat->photoId != UnknownPeerPhotoId) photo = App::photo(_peerChat->photoId); } @@ -595,14 +628,6 @@ void ProfileInner::paintEvent(QPaintEvent *e) { top += _enableNotifications.height(); - // actions - p.setFont(st::profileHeaderFont->f); - p.setPen(st::profileHeaderColor->p); - p.drawText(_left + st::profileHeaderLeft, top + st::profileHeaderTop + st::profileHeaderFont->ascent, lang(lng_profile_actions_section)); - top += st::profileHeaderSkip; - - top += _searchInPeer.height() + st::setLittleSkip + _clearHistory.height() + st::setLittleSkip + _deleteConversation.height(); - // shared media p.setFont(st::profileHeaderFont->f); p.setPen(st::profileHeaderColor->p); @@ -644,6 +669,15 @@ void ProfileInner::paintEvent(QPaintEvent *e) { top += _mediaLinks[OverviewPhotos]->height(); } + // actions + p.setFont(st::profileHeaderFont->f); + p.setPen(st::profileHeaderColor->p); + p.drawText(_left + st::profileHeaderLeft, top + st::profileHeaderTop + st::profileHeaderFont->ascent, lang(lng_profile_actions_section)); + top += st::profileHeaderSkip; + + top += _searchInPeer.height() + st::setLittleSkip + _clearHistory.height() + st::setLittleSkip + _deleteConversation.height(); + if (_peerUser && _peerUser->id != MTP::authedId()) top += st::setSectionSkip + _blockUser.height(); + // participants if (_peerChat && (_peerChat->count > 0 || !_participants.isEmpty())) { QString sectionHeader = lang(_participants.isEmpty() ? lng_profile_loading : lng_profile_participants_section); @@ -741,7 +775,7 @@ void ProfileInner::updateSelected() { update(QRect(_left, _aboutTop, _width, _aboutHeight)); } - int32 partfrom = _mediaAudios.y() + _mediaAudios.height() + st::profileHeaderSkip; + int32 partfrom = _deleteConversation.y() + _deleteConversation.height() + st::profileHeaderSkip; int32 newSelected = (lp.x() >= _left - st::profileListPadding.width() && lp.x() < _left + _width + st::profileListPadding.width() && lp.y() >= partfrom) ? (lp.y() - partfrom) / _pHeight : -1; UserData *newKickOver = 0; @@ -889,12 +923,6 @@ void ProfileInner::resizeEvent(QResizeEvent *e) { top += st::profileHeaderSkip; _enableNotifications.move(_left, top); top += _enableNotifications.height(); - // actions - top += st::profileHeaderSkip; - _searchInPeer.move(_left, top); top += _searchInPeer.height() + st::setLittleSkip; - _clearHistory.move(_left, top); top += _clearHistory.height() + st::setLittleSkip; - _deleteConversation.move(_left, top); top += _deleteConversation.height(); - // shared media top += st::profileHeaderSkip; @@ -914,6 +942,16 @@ void ProfileInner::resizeEvent(QResizeEvent *e) { } top += _mediaLinks[OverviewPhotos]->height(); + // actions + top += st::profileHeaderSkip; + _searchInPeer.move(_left, top); top += _searchInPeer.height() + st::setLittleSkip; + _clearHistory.move(_left, top); top += _clearHistory.height() + st::setLittleSkip; + _deleteConversation.move(_left, top); top += _deleteConversation.height(); + if (_peerUser && _peerUser->id != MTP::authedId()) { + top += st::setSectionSkip; + _blockUser.move(_left, top); top += _blockUser.height(); + } + // participants if (_peerChat && (_peerChat->count > 0 || !_participants.isEmpty())) { top += st::profileHeaderSkip; @@ -1047,7 +1085,7 @@ void ProfileInner::showAll() { _addParticipant.hide(); } } - _enableNotifications.show(); + _blockUser.hide(); } else { _uploadPhoto.hide(); _cancelPhoto.hide(); @@ -1066,9 +1104,14 @@ void ProfileInner::showAll() { _shareContact.show(); _inviteToGroup.hide(); } - _enableNotifications.show(); _clearHistory.show(); + if (_peerUser->id != MTP::authedId()) { + _blockUser.show(); + } else { + _blockUser.hide(); + } } + _enableNotifications.show(); updateNotifySettings(); // shared media @@ -1111,15 +1154,13 @@ void ProfileInner::showAll() { reorderParticipants(); int32 h; if (_peerUser) { - h = _mediaShowAll.y() + _mediaShowAll.height() + st::profileHeaderSkip; - if (_mediaShowAll.isHidden()) { - for (int i = 0; i < OverviewCount; ++i) { - if (i == OverviewAudioDocuments) continue; - if (!_mediaLinks[i]->isHidden()) h += _mediaLinks[i]->height() + st::setLittleSkip; - } + if (_peerUser->id == MTP::authedId()) { + h = _deleteConversation.y() + _deleteConversation.height() + st::profileHeaderSkip; + } else { + h = _blockUser.y() + _blockUser.height() + st::profileHeaderSkip; } } else { - h = _mediaAudios.y() + _mediaAudios.height() + st::profileHeaderSkip; + h = _deleteConversation.y() + _deleteConversation.height() + st::profileHeaderSkip; if (!_participants.isEmpty()) { h += st::profileHeaderSkip + _participants.size() * _pHeight; } else if (_peerChat->count > 0) { diff --git a/Telegram/SourceFiles/profilewidget.h b/Telegram/SourceFiles/profilewidget.h index 94765769d..5c742d31f 100644 --- a/Telegram/SourceFiles/profilewidget.h +++ b/Telegram/SourceFiles/profilewidget.h @@ -75,6 +75,7 @@ public slots: void onClearHistorySure(); void onDeleteConversation(); void onDeleteConversationSure(); + void onBlockUser(); void onAddParticipant(); void onUpdatePhoto(); @@ -146,15 +147,18 @@ private: // settings FlatCheckbox _enableNotifications; - // actions - LinkButton _searchInPeer, _clearHistory, _deleteConversation; - // shared media bool _allMediaTypes; LinkButton _mediaShowAll, _mediaPhotos, _mediaVideos, _mediaDocuments, _mediaAudios; LinkButton *_mediaLinks[OverviewCount]; QString overviewLinkText(int32 type, int32 count); + // actions + LinkButton _searchInPeer, _clearHistory, _deleteConversation; + UserBlockedStatus _wasBlocked; + mtpRequestId _blockRequest; + LinkButton _blockUser; + // participants int32 _pHeight; int32 _kickWidth, _selectedRow, _lastPreload; @@ -176,6 +180,9 @@ private: QString _onlineText; ContextMenu *_menu; + void blockDone(bool blocked, const MTPBool &result); + bool blockFail(const RPCError &error); + }; class ProfileWidget : public QWidget, public RPCSender, public Animated { diff --git a/Telegram/SourceFiles/settingswidget.cpp b/Telegram/SourceFiles/settingswidget.cpp index acda58647..d272122ed 100644 --- a/Telegram/SourceFiles/settingswidget.cpp +++ b/Telegram/SourceFiles/settingswidget.cpp @@ -187,7 +187,10 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), _connectionTypeText(lang(lng_connection_type) + ' '), _connectionTypeWidth(st::linkFont->m.width(_connectionTypeText)), _showSessions(this, lang(lng_settings_show_sessions)), - _logOut(this, lang(lng_settings_logout), st::btnLogout) + _askQuestion(this, lang(lng_settings_ask_question)), + _telegramFAQ(this, lang(lng_settings_faq)), + _logOut(this, lang(lng_settings_logout), st::btnLogout), + _supportGetRequest(0) { if (self()) { _nameText.setText(st::setNameFont, _nameCache, _textNameOptions); @@ -290,6 +293,8 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), connect(&_passwordTurnOff, SIGNAL(clicked()), this, SLOT(onPasswordOff())); connect(&_connectionType, SIGNAL(clicked()), this, SLOT(onConnectionType())); connect(&_showSessions, SIGNAL(clicked()), this, SLOT(onShowSessions())); + connect(&_askQuestion, SIGNAL(clicked()), this, SLOT(onAskQuestion())); + connect(&_telegramFAQ, SIGNAL(clicked()), this, SLOT(onTelegramFAQ())); connect(&_logOut, SIGNAL(clicked()), App::wnd(), SLOT(onLogout())); if (App::main()) { @@ -727,7 +732,12 @@ void SettingsInner::resizeEvent(QResizeEvent *e) { _connectionType.move(_left + _connectionTypeWidth, top); top += _connectionType.height() + st::setLittleSkip; if (self()) { _showSessions.move(_left, top); top += _showSessions.height() + st::setSectionSkip; + _askQuestion.move(_left, top); top += _askQuestion.height() + st::setLittleSkip; + _telegramFAQ.move(_left, top); top += _telegramFAQ.height() + st::setSectionSkip; _logOut.move(_left, top); + } else { + top += st::setSectionSkip - st::setLittleSkip; + _telegramFAQ.move(_left, top); } } @@ -818,7 +828,7 @@ bool SettingsInner::animStep(float64 ms) { void SettingsInner::updateSize(int32 newWidth) { if (_logOut.isHidden()) { - resize(newWidth, _connectionType.geometry().bottom() + st::setBottom); + resize(newWidth, _telegramFAQ.geometry().bottom() + st::setBottom); } else { resize(newWidth, _logOut.geometry().bottom() + st::setBottom); } @@ -1063,6 +1073,7 @@ void SettingsInner::showAll() { _passwordTurnOff.show(); } _showSessions.show(); + _askQuestion.show(); _logOut.show(); } else { _passcodeEdit.hide(); @@ -1071,8 +1082,10 @@ void SettingsInner::showAll() { _passwordEdit.hide(); _passwordTurnOff.hide(); _showSessions.hide(); + _askQuestion.hide(); _logOut.hide(); } + _telegramFAQ.show(); } void SettingsInner::saveError(const QString &str) { @@ -1081,6 +1094,17 @@ void SettingsInner::saveError(const QString &str) { update(); } +void SettingsInner::supportGot(const MTPhelp_Support &support) { + if (!App::main()) return; + + if (support.type() == mtpc_help_support) { + const MTPDhelp_support &d(support.c_help_support()); + UserData *u = App::feedUsers(MTP_vector(1, d.vuser)); + App::main()->showPeerHistory(u->id, ShowAtUnreadMsgId); + App::wnd()->hideSettings(); + } +} + void SettingsInner::onUpdatePhotoCancel() { if (self()) { App::app()->cancelPhotoUpdate(self()->id); @@ -1124,6 +1148,25 @@ void SettingsInner::onShowSessions() { App::wnd()->showLayer(box); } +void SettingsInner::onAskQuestion() { + if (!App::self()) return; + + ConfirmBox *box = new ConfirmBox(lang(lng_settings_ask_sure), lang(lng_settings_ask_ok), lang(lng_settings_faq_button)); + connect(box, SIGNAL(confirmed()), this, SLOT(onAskQuestionSure())); + connect(box, SIGNAL(cancelPressed()), this, SLOT(onTelegramFAQ())); + App::wnd()->showLayer(box); +} + +void SettingsInner::onAskQuestionSure() { + if (_supportGetRequest) return; + _supportGetRequest = MTP::send(MTPhelp_GetSupport(), rpcDone(&SettingsInner::supportGot)); +} + +void SettingsInner::onTelegramFAQ() { + App::wnd()->hideLayer(); + QDesktopServices::openUrl(qsl("https://telegram.org/faq#general")); +} + void SettingsInner::onChangeLanguage() { if ((_changeLanguage.clickModifiers() & Qt::ShiftModifier) && (_changeLanguage.clickModifiers() & Qt::AltModifier)) { QString file; diff --git a/Telegram/SourceFiles/settingswidget.h b/Telegram/SourceFiles/settingswidget.h index 0ce9dcfa9..540c6f6c3 100644 --- a/Telegram/SourceFiles/settingswidget.h +++ b/Telegram/SourceFiles/settingswidget.h @@ -164,10 +164,16 @@ public slots: void onUpdateLocalStorage(); + void onAskQuestion(); + void onAskQuestionSure(); + void onTelegramFAQ(); + private: void saveError(const QString &str = QString()); + void supportGot(const MTPhelp_Support &support); + void setScale(DBIScale newScale); QString _testlang, _secretText; @@ -263,9 +269,11 @@ private: LinkButton _connectionType; QString _connectionTypeText; int32 _connectionTypeWidth; - LinkButton _showSessions; + LinkButton _showSessions, _askQuestion, _telegramFAQ; FlatButton _logOut; + mtpRequestId _supportGetRequest; + void gotPassword(const MTPaccount_Password &result); void offPasswordDone(const MTPBool &result); bool offPasswordFail(const RPCError &error); diff --git a/Telegram/SourceFiles/structs.cpp b/Telegram/SourceFiles/structs.cpp index 080b346af..86885d11e 100644 --- a/Telegram/SourceFiles/structs.cpp +++ b/Telegram/SourceFiles/structs.cpp @@ -404,7 +404,7 @@ QString saveFileName(const QString &title, const QString &filter, const QString void VideoOpenLink::onClick(Qt::MouseButton button) const { VideoData *data = video(); - if ((!data->user && !data->date) || button != Qt::LeftButton) return; + if (!data->date || button != Qt::LeftButton) return; QString already = data->already(true); if (!already.isEmpty()) { @@ -424,7 +424,7 @@ void VideoOpenLink::onClick(Qt::MouseButton button) const { } void VideoSaveLink::doSave(VideoData *data, bool forceSavingAs) { - if (!data->user && !data->date) return; + if (!data->date) return; QString already = data->already(true); if (!already.isEmpty() && !forceSavingAs) { @@ -456,13 +456,13 @@ void VideoSaveLink::onClick(Qt::MouseButton button) const { void VideoCancelLink::onClick(Qt::MouseButton button) const { VideoData *data = video(); - if ((!data->user && !data->date) || button != Qt::LeftButton) return; + if (!data->date || button != Qt::LeftButton) return; data->cancel(); } -VideoData::VideoData(const VideoId &id, const uint64 &access, int32 user, int32 date, int32 duration, int32 w, int32 h, const ImagePtr &thumb, int32 dc, int32 size) : -id(id), access(access), user(user), date(date), duration(duration), w(w), h(h), thumb(thumb), dc(dc), size(size), status(FileReady), uploadOffset(0), fileType(0), openOnSave(0), openOnSaveMsgId(0), loader(0) { +VideoData::VideoData(const VideoId &id, const uint64 &access, int32 date, int32 duration, int32 w, int32 h, const ImagePtr &thumb, int32 dc, int32 size) : +id(id), access(access), date(date), duration(duration), w(w), h(h), thumb(thumb), dc(dc), size(size), status(FileReady), uploadOffset(0), fileType(0), openOnSave(0), openOnSaveMsgId(0), loader(0) { location = Local::readFileLocation(mediaKey(VideoFileLocation, dc, id)); } @@ -482,7 +482,7 @@ QString VideoData::already(bool check) { void AudioOpenLink::onClick(Qt::MouseButton button) const { AudioData *data = audio(); - if ((!data->user && !data->date) || button != Qt::LeftButton) return; + if (!data->date || button != Qt::LeftButton) return; QString already = data->already(true); bool play = App::hoveredLinkItem() && audioPlayer(); @@ -516,7 +516,7 @@ void AudioOpenLink::onClick(Qt::MouseButton button) const { } void AudioSaveLink::doSave(AudioData *data, bool forceSavingAs) { - if (!data->user && !data->date) return; + if (!data->date) return; QString already = data->already(true); if (!already.isEmpty() && !forceSavingAs) { @@ -549,7 +549,7 @@ void AudioSaveLink::onClick(Qt::MouseButton button) const { void AudioCancelLink::onClick(Qt::MouseButton button) const { AudioData *data = audio(); - if ((!data->user && !data->date) || button != Qt::LeftButton) return; + if (!data->date || button != Qt::LeftButton) return; data->cancel(); } @@ -569,8 +569,8 @@ bool StickerData::setInstalled() const { return false; } -AudioData::AudioData(const AudioId &id, const uint64 &access, int32 user, int32 date, const QString &mime, int32 duration, int32 dc, int32 size) : -id(id), access(access), user(user), date(date), mime(mime), duration(duration), dc(dc), size(size), status(FileReady), uploadOffset(0), openOnSave(0), openOnSaveMsgId(0), loader(0) { +AudioData::AudioData(const AudioId &id, const uint64 &access, int32 date, const QString &mime, int32 duration, int32 dc, int32 size) : +id(id), access(access), date(date), mime(mime), duration(duration), dc(dc), size(size), status(FileReady), uploadOffset(0), openOnSave(0), openOnSaveMsgId(0), loader(0) { location = Local::readFileLocation(mediaKey(AudioFileLocation, dc, id)); } diff --git a/Telegram/SourceFiles/structs.h b/Telegram/SourceFiles/structs.h index 6bcdd6c5c..bbc1b41b3 100644 --- a/Telegram/SourceFiles/structs.h +++ b/Telegram/SourceFiles/structs.h @@ -167,9 +167,15 @@ struct BotInfo { QString startToken, startGroupToken; }; +enum UserBlockedStatus { + UserBlockUnknown = 0, + UserIsBlocked, + UserIsNotBlocked, +}; + struct PhotoData; struct UserData : public PeerData { - UserData(const PeerId &id) : PeerData(id), access(0), lnk(new PeerLink(this)), onlineTill(0), contact(-1), photosCount(-1), botInfo(0) { + UserData(const PeerId &id) : PeerData(id), access(0), lnk(new PeerLink(this)), onlineTill(0), contact(-1), blocked(UserBlockUnknown), photosCount(-1), botInfo(0) { } void setPhoto(const MTPUserProfilePhoto &photo); void setName(const QString &first, const QString &last, const QString &phoneName, const QString &username); @@ -192,6 +198,7 @@ struct UserData : public PeerData { TextLinkPtr lnk; int32 onlineTill; int32 contact; // -1 - not contact, cant add (self, empty, deleted, foreign), 0 - not contact, can add (request), 1 - contact + UserBlockedStatus blocked; typedef QList Photos; Photos photos; @@ -230,8 +237,8 @@ inline int32 newMessageFlags(PeerData *p) { typedef QMap PreparedPhotoThumbs; struct PhotoData { - PhotoData(const PhotoId &id, const uint64 &access = 0, int32 user = 0, int32 date = 0, const ImagePtr &thumb = ImagePtr(), const ImagePtr &medium = ImagePtr(), const ImagePtr &full = ImagePtr()) : - id(id), access(access), user(user), date(date), thumb(thumb), medium(medium), full(full), chat(0) { + PhotoData(const PhotoId &id, const uint64 &access = 0, int32 date = 0, const ImagePtr &thumb = ImagePtr(), const ImagePtr &medium = ImagePtr(), const ImagePtr &full = ImagePtr()) : + id(id), access(access), date(date), thumb(thumb), medium(medium), full(full), chat(0) { } void forget() { thumb->forget(); @@ -254,7 +261,6 @@ struct PhotoData { } PhotoId id; uint64 access; - int32 user; int32 date; ImagePtr thumb, replyPreview; ImagePtr medium; @@ -294,7 +300,7 @@ enum FileStatus { }; struct VideoData { - VideoData(const VideoId &id, const uint64 &access = 0, int32 user = 0, int32 date = 0, int32 duration = 0, int32 w = 0, int32 h = 0, const ImagePtr &thumb = ImagePtr(), int32 dc = 0, int32 size = 0); + VideoData(const VideoId &id, const uint64 &access = 0, int32 date = 0, int32 duration = 0, int32 w = 0, int32 h = 0, const ImagePtr &thumb = ImagePtr(), int32 dc = 0, int32 size = 0); void forget() { thumb->forget(); @@ -330,7 +336,6 @@ struct VideoData { VideoId id; uint64 access; - int32 user; int32 date; int32 duration; int32 w, h; @@ -390,7 +395,7 @@ public: }; struct AudioData { - AudioData(const AudioId &id, const uint64 &access = 0, int32 user = 0, int32 date = 0, const QString &mime = QString(), int32 duration = 0, int32 dc = 0, int32 size = 0); + AudioData(const AudioId &id, const uint64 &access = 0, int32 date = 0, const QString &mime = QString(), int32 duration = 0, int32 dc = 0, int32 size = 0); void forget() { } @@ -425,7 +430,6 @@ struct AudioData { AudioId id; uint64 access; - int32 user; int32 date; QString mime; int32 duration; diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index e397d0312..0e5abe0cb 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.48 + 0.8.49 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index 6be09603894469ffd0be0a1e42d4737f429e8e01..251f2edd5823703ad3f18e11c01306547811dae9 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_V diff --git a/Telegram/Telegram.vcxproj b/Telegram/Telegram.vcxproj index b749011c5..7f02c5851 100644 --- a/Telegram/Telegram.vcxproj +++ b/Telegram/Telegram.vcxproj @@ -59,12 +59,12 @@ $(SolutionDir)$(Platform)\$(Configuration)\ $(SolutionDir)$(Platform)\$(Configuration)Intermediate\ - $(VC_IncludePath);$(WindowsSdk_71A_IncludePath);$(WindowsSDK_IncludePath); + $(VC_IncludePath);$(WindowsSDK_IncludePath); $(SolutionDir)$(Platform)\$(Configuration)\ $(SolutionDir)$(Platform)\$(Configuration)Intermediate\ - $(VC_IncludePath);$(WindowsSdk_71A_IncludePath);$(WindowsSDK_IncludePath); + $(VC_IncludePath);$(WindowsSDK_IncludePath); @@ -111,7 +111,7 @@ Windows $(OutDir)$(ProjectName).exe .\..\..\Libraries\lzma\C\Util\LzmaLib\Release;.\..\..\Libraries\libexif-0.6.20\win32\Release;.\..\..\Libraries\ffmpeg-2.6.3;.\..\..\Libraries\opus\win32\VS2010\Win32\Release;.\..\..\Libraries\openal-soft\build\Release;.\..\..\Libraries\zlib-1.2.8\contrib\vstudio\vc11\x86\ZlibStatRelease;.\..\..\Libraries\OpenSSL-Win32\lib\VC\static;$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;gdi32.lib;comdlg32.lib;oleaut32.lib;imm32.lib;winmm.lib;qtmain.lib;glu32.lib;opengl32.lib;Strmiids.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;qtpcre.lib;qtfreetype.lib;Qt5Widgets.lib;Qt5Network.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;imageformats\qwebp.lib;libeay32MT.lib;ssleay32MT.lib;Crypt32.lib;zlibstat.lib;lib_exif.lib;UxTheme.lib;DbgHelp.lib;LzmaLib.lib;OpenAL32.lib;common.lib;libavformat\libavformat.a;libavcodec\libavcodec.a;libavutil\libavutil.a;libswresample\libswresample.a;opus.lib;celt.lib;silk_common.lib;silk_float.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;gdi32.lib;comdlg32.lib;oleaut32.lib;Shlwapi.lib;Gdiplus.lib;imm32.lib;winmm.lib;qtmain.lib;glu32.lib;opengl32.lib;Strmiids.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;qtpcre.lib;qtfreetype.lib;Qt5Widgets.lib;Qt5Network.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;imageformats\qwebp.lib;libeay32MT.lib;ssleay32MT.lib;Crypt32.lib;zlibstat.lib;lib_exif.lib;UxTheme.lib;DbgHelp.lib;LzmaLib.lib;OpenAL32.lib;common.lib;libavformat\libavformat.a;libavcodec\libavcodec.a;libavutil\libavutil.a;libswresample\libswresample.a;opus.lib;celt.lib;silk_common.lib;silk_float.lib;%(AdditionalDependencies) $(SolutionDir)$(Platform)\$(Configuration)Intermediate\$(TargetName).lib $(IntDir)$(TargetName).pgd @@ -139,7 +139,7 @@ Windows $(OutDir)$(ProjectName).exe .\..\..\Libraries\lzma\C\Util\LzmaLib\Release;.\..\..\Libraries\libexif-0.6.20\win32\Release;.\..\..\Libraries\ffmpeg-2.6.3;.\..\..\Libraries\opus\win32\VS2010\Win32\Release;.\..\..\Libraries\openal-soft\build\Release;.\..\..\Libraries\zlib-1.2.8\contrib\vstudio\vc11\x86\ZlibStatRelease;.\..\..\Libraries\OpenSSL-Win32\lib\VC\static;$(QTDIR)\lib;$(QTDIR)\plugins;%(AdditionalLibraryDirectories) - kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;gdi32.lib;comdlg32.lib;oleaut32.lib;imm32.lib;winmm.lib;qtmain.lib;glu32.lib;opengl32.lib;Strmiids.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;qtpcre.lib;qtfreetype.lib;Qt5Widgets.lib;Qt5Network.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;imageformats\qwebp.lib;libeay32MT.lib;ssleay32MT.lib;Crypt32.lib;zlibstat.lib;lib_exif.lib;UxTheme.lib;DbgHelp.lib;LzmaLib.lib;OpenAL32.lib;common.lib;libavformat\libavformat.a;libavcodec\libavcodec.a;libavutil\libavutil.a;libswresample\libswresample.a;opus.lib;celt.lib;silk_common.lib;silk_float.lib;%(AdditionalDependencies) + kernel32.lib;user32.lib;shell32.lib;uuid.lib;ole32.lib;advapi32.lib;ws2_32.lib;gdi32.lib;comdlg32.lib;oleaut32.lib;Shlwapi.lib;Gdiplus.lib;imm32.lib;winmm.lib;qtmain.lib;glu32.lib;opengl32.lib;Strmiids.lib;Qt5Core.lib;Qt5Gui.lib;qtharfbuzzng.lib;qtpcre.lib;qtfreetype.lib;Qt5Widgets.lib;Qt5Network.lib;Qt5PlatformSupport.lib;platforms\qwindows.lib;imageformats\qwebp.lib;libeay32MT.lib;ssleay32MT.lib;Crypt32.lib;zlibstat.lib;lib_exif.lib;UxTheme.lib;DbgHelp.lib;LzmaLib.lib;OpenAL32.lib;common.lib;libavformat\libavformat.a;libavcodec\libavcodec.a;libavutil\libavutil.a;libswresample\libswresample.a;opus.lib;celt.lib;silk_common.lib;silk_float.lib;%(AdditionalDependencies) $(SolutionDir)$(Platform)\$(Configuration)Intermediate\$(TargetName).lib diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index acf18ab7f..681fafc96 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -1707,7 +1707,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.48; + CURRENT_PROJECT_VERSION = 0.8.49; DEBUG_INFORMATION_FORMAT = dwarf; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -1725,7 +1725,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 0.8.48; + CURRENT_PROJECT_VERSION = 0.8.49; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = fast; GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h; @@ -1751,10 +1751,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.48; + CURRENT_PROJECT_VERSION = 0.8.49; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DYLIB_COMPATIBILITY_VERSION = 0.8; - DYLIB_CURRENT_VERSION = 0.8.48; + DYLIB_CURRENT_VERSION = 0.8.49; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -1885,10 +1885,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.8.48; + CURRENT_PROJECT_VERSION = 0.8.49; DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 0.8; - DYLIB_CURRENT_VERSION = 0.8.48; + DYLIB_CURRENT_VERSION = 0.8.49; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; diff --git a/Telegram/Version.sh b/Telegram/Version.sh index 89b3f7622..deafb9a75 100755 --- a/Telegram/Version.sh +++ b/Telegram/Version.sh @@ -1,2 +1,2 @@ -echo 0.8 8048 0.8.48 0 +echo 0.8 8049 0.8.49 1 # AppVersionStrMajor AppVersion AppVersionStr DevChannel From afac237f030c1707b67d8040315c37198b444bcf Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 12 Aug 2015 21:02:20 +0300 Subject: [PATCH 091/121] improved window activation in os x --- Telegram/SourceFiles/pspecific_mac.cpp | 4 +++- Telegram/SourceFiles/pspecific_mac_p.h | 2 +- Telegram/SourceFiles/pspecific_mac_p.mm | 6 +++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Telegram/SourceFiles/pspecific_mac.cpp b/Telegram/SourceFiles/pspecific_mac.cpp index c782e6687..9ee389640 100644 --- a/Telegram/SourceFiles/pspecific_mac.cpp +++ b/Telegram/SourceFiles/pspecific_mac.cpp @@ -564,7 +564,9 @@ void psClearInitLogs() { } void psActivateProcess(uint64 pid) { - objc_activateProgram(); + if (!pid) { + objc_activateProgram(App::wnd() ? App::wnd()->winId() : 0); + } } QString psCurrentCountry() { diff --git a/Telegram/SourceFiles/pspecific_mac_p.h b/Telegram/SourceFiles/pspecific_mac_p.h index 2470ae0a7..1ed7626c0 100644 --- a/Telegram/SourceFiles/pspecific_mac_p.h +++ b/Telegram/SourceFiles/pspecific_mac_p.h @@ -73,7 +73,7 @@ void objc_execTelegram(); void objc_registerCustomScheme(); -void objc_activateProgram(); +void objc_activateProgram(WId winId); bool objc_moveFile(const QString &from, const QString &to); void objc_deleteDir(const QString &dir); diff --git a/Telegram/SourceFiles/pspecific_mac_p.mm b/Telegram/SourceFiles/pspecific_mac_p.mm index 8df6af224..845ca5e2a 100644 --- a/Telegram/SourceFiles/pspecific_mac_p.mm +++ b/Telegram/SourceFiles/pspecific_mac_p.mm @@ -982,8 +982,12 @@ void objc_execTelegram() { _execUpdater(NO); } -void objc_activateProgram() { +void objc_activateProgram(WId winId) { [NSApp activateIgnoringOtherApps:YES]; + if (winId) { + NSWindow *w = [reinterpret_cast(winId) window]; + [w makeKeyAndOrderFront:NSApp]; + } } bool objc_moveFile(const QString &from, const QString &to) { From 82dc07ee42ff5bfd7514d703aec6e3f0ac310ae3 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 12 Aug 2015 21:05:25 +0300 Subject: [PATCH 092/121] fixed warnings, version 0.8.49.dev --- Telegram/SourceFiles/profilewidget.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Telegram/SourceFiles/profilewidget.cpp b/Telegram/SourceFiles/profilewidget.cpp index e6cf819e2..d5ee5fcaf 100644 --- a/Telegram/SourceFiles/profilewidget.cpp +++ b/Telegram/SourceFiles/profilewidget.cpp @@ -676,7 +676,7 @@ void ProfileInner::paintEvent(QPaintEvent *e) { top += st::profileHeaderSkip; top += _searchInPeer.height() + st::setLittleSkip + _clearHistory.height() + st::setLittleSkip + _deleteConversation.height(); - if (_peerUser && _peerUser->id != MTP::authedId()) top += st::setSectionSkip + _blockUser.height(); + if (_peerUser && App::userFromPeer(_peerUser->id) != MTP::authedId()) top += st::setSectionSkip + _blockUser.height(); // participants if (_peerChat && (_peerChat->count > 0 || !_participants.isEmpty())) { @@ -947,7 +947,7 @@ void ProfileInner::resizeEvent(QResizeEvent *e) { _searchInPeer.move(_left, top); top += _searchInPeer.height() + st::setLittleSkip; _clearHistory.move(_left, top); top += _clearHistory.height() + st::setLittleSkip; _deleteConversation.move(_left, top); top += _deleteConversation.height(); - if (_peerUser && _peerUser->id != MTP::authedId()) { + if (_peerUser && App::userFromPeer(_peerUser->id) != MTP::authedId()) { top += st::setSectionSkip; _blockUser.move(_left, top); top += _blockUser.height(); } @@ -1105,7 +1105,7 @@ void ProfileInner::showAll() { _inviteToGroup.hide(); } _clearHistory.show(); - if (_peerUser->id != MTP::authedId()) { + if (App::userFromPeer(_peerUser->id) != MTP::authedId()) { _blockUser.show(); } else { _blockUser.hide(); @@ -1154,7 +1154,7 @@ void ProfileInner::showAll() { reorderParticipants(); int32 h; if (_peerUser) { - if (_peerUser->id == MTP::authedId()) { + if (App::userFromPeer(_peerUser->id) == MTP::authedId()) { h = _deleteConversation.y() + _deleteConversation.height() + st::profileHeaderSkip; } else { h = _blockUser.y() + _blockUser.height() + st::profileHeaderSkip; From 30e96a1d5e30b794dadc9243fa2ca4fc8de6bde6 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 12 Aug 2015 21:09:03 +0300 Subject: [PATCH 093/121] improved translation, 0.8.49.dev --- Telegram/SourceFiles/langs/lang_de.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Telegram/SourceFiles/langs/lang_de.strings b/Telegram/SourceFiles/langs/lang_de.strings index 2176c1055..d3e9292b6 100644 --- a/Telegram/SourceFiles/langs/lang_de.strings +++ b/Telegram/SourceFiles/langs/lang_de.strings @@ -352,7 +352,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_edit_contact" = "Bearbeiten"; "lng_profile_enable_notifications" = "Benachrichtigungen"; "lng_profile_clear_history" = "Chatverlauf löschen"; -"lng_profile_delete_conversation" = "Verlauf löschen"; +"lng_profile_delete_conversation" = "Chat entfernen"; "lng_profile_clear_and_exit" = "Löschen und verlassen"; "lng_profile_search_messages" = "In diesem Chat suchen"; "lng_profile_send_message" = "Nachricht senden"; From efa62ece723d36f6b28ecb0f1bf1ba84b57900f0 Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 13 Aug 2015 18:09:04 +0300 Subject: [PATCH 094/121] added fcitx inputcontext plugin for linux version --- README.md | 2 +- Telegram/SourceFiles/settingswidget.cpp | 42 +- Telegram/SourceFiles/settingswidget.h | 2 + Telegram/SourceFiles/stdafx.cpp | 1 + Telegram/Telegram.pro | 4 +- .../platforminputcontexts/compose/compose.pro | 29 + .../platforminputcontexts/fcitx/Makefile | 6085 +++++++++++++++++ .../platforminputcontexts/fcitx/fcitx.json | 3 + .../platforminputcontexts/fcitx/fcitx.pro | 38 + .../fcitx/fcitxqtconnection.cpp | 369 + .../fcitx/fcitxqtconnection.h | 111 + .../fcitx/fcitxqtconnection_p.h | 68 + .../fcitx/fcitxqtdbusaddons_export.h | 41 + .../fcitx/fcitxqtdbusaddons_version.h | 11 + .../fcitx/fcitxqtformattedpreedit.cpp | 78 + .../fcitx/fcitxqtformattedpreedit.h | 51 + .../fcitx/fcitxqtinputcontextproxy.cpp | 26 + .../fcitx/fcitxqtinputcontextproxy.h | 136 + .../fcitx/fcitxqtinputmethoditem.cpp | 95 + .../fcitx/fcitxqtinputmethoditem.h | 64 + .../fcitx/fcitxqtinputmethodproxy.cpp | 26 + .../fcitx/fcitxqtinputmethodproxy.h | 217 + .../fcitx/fcitxqtkeyboardlayout.cpp | 100 + .../fcitx/fcitxqtkeyboardlayout.h | 58 + .../fcitx/fcitxqtkeyboardproxy.cpp | 26 + .../fcitx/fcitxqtkeyboardproxy.h | 74 + .../org.fcitx.Fcitx.InputContext.xml | 81 + .../org.fcitx.Fcitx.InputMethod.xml | 81 + .../interfaces/org.fcitx.Fcitx.Keyboard.xml | 20 + .../platforminputcontexts/fcitx/keydata.h | 1612 +++++ .../fcitx/keyserver_x11.h | 173 + .../platforminputcontexts/fcitx/keyuni.cpp | 56 + .../platforminputcontexts/fcitx/keyuni.h | 29 + .../platforminputcontexts/fcitx/main.cpp | 35 + .../platforminputcontexts/fcitx/main.h | 37 + .../fcitx/qfcitxplatforminputcontext.cpp | 770 +++ .../fcitx/qfcitxplatforminputcontext.h | 269 + .../platforminputcontexts/fcitx/utils.cpp | 177 + .../platforminputcontexts/fcitx/utils.h | 35 + .../fcitx/xkbcommon/xkbcommon-compat.h | 98 + .../fcitx/xkbcommon/xkbcommon-compose.h | 488 ++ .../fcitx/xkbcommon/xkbcommon-keysyms.h | 3012 ++++++++ .../fcitx/xkbcommon/xkbcommon-names.h | 45 + .../fcitx/xkbcommon/xkbcommon-x11.h | 244 + .../fcitx/xkbcommon/xkbcommon.h | 1723 +++++ .../platforminputcontexts.pro | 10 + 46 files changed, 16732 insertions(+), 20 deletions(-) create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/compose/compose.pro create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/Makefile create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.json create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.pro create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.cpp create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection_p.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_export.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_version.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.cpp create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.cpp create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.cpp create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.cpp create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.cpp create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.cpp create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputContext.xml create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputMethod.xml create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.Keyboard.xml create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keydata.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keyserver_x11.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.cpp create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/main.cpp create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/main.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.cpp create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/utils.cpp create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/utils.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compat.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compose.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-keysyms.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-names.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-x11.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon.h create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/platforminputcontexts.pro diff --git a/README.md b/README.md index e93f0693e..1b4b41452 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Source code is published under GPL v3, license is available [here](https://githu ###Supported systems -* Windows XP - Windows 8.1 (**not** RT) +* Windows XP - Windows 10 (**not** RT) * Mac OS X 10.8 - Mac OS X 10.10 * Mac OS X 10.6 - Mac OS X 10.7 (separate build) * Ubuntu 12.04 - Ubuntu 14.04 diff --git a/Telegram/SourceFiles/settingswidget.cpp b/Telegram/SourceFiles/settingswidget.cpp index d272122ed..ae3092e76 100644 --- a/Telegram/SourceFiles/settingswidget.cpp +++ b/Telegram/SourceFiles/settingswidget.cpp @@ -763,7 +763,9 @@ void SettingsInner::keyPressEvent(QKeyEvent *e) { App::wnd()->showLayer(box); from = size; break; - } else if (qsl("debugmode").startsWith(str) || qsl("testmode").startsWith(str)) { + } else if (str == qstr("loadlang")) { + chooseCustomLang(); + } else if (qsl("debugmode").startsWith(str) || qsl("testmode").startsWith(str) || qsl("loadlang").startsWith(str)) { break; } ++from; @@ -1167,25 +1169,29 @@ void SettingsInner::onTelegramFAQ() { QDesktopServices::openUrl(qsl("https://telegram.org/faq#general")); } +void SettingsInner::chooseCustomLang() { + QString file; + QByteArray arr; + if (filedialogGetOpenFile(file, arr, qsl("Choose language .strings file"), qsl("Language files (*.strings)"))) { + _testlang = QFileInfo(file).absoluteFilePath(); + LangLoaderPlain loader(_testlang, LangLoaderRequest(lng_sure_save_language, lng_cancel, lng_continue)); + if (loader.errors().isEmpty()) { + LangLoaderResult result = loader.found(); + QString text = result.value(lng_sure_save_language, langOriginal(lng_sure_save_language)), + save = result.value(lng_continue, langOriginal(lng_continue)), + cancel = result.value(lng_cancel, langOriginal(lng_cancel)); + ConfirmBox *box = new ConfirmBox(text, save, cancel); + connect(box, SIGNAL(confirmed()), this, SLOT(onSaveTestLang())); + App::wnd()->showLayer(box); + } else { + App::wnd()->showLayer(new ConfirmBox("Custom lang failed :(\n\nError: " + loader.errors(), true, lang(lng_close))); + } + } +} + void SettingsInner::onChangeLanguage() { if ((_changeLanguage.clickModifiers() & Qt::ShiftModifier) && (_changeLanguage.clickModifiers() & Qt::AltModifier)) { - QString file; - QByteArray arr; - if (filedialogGetOpenFile(file, arr, qsl("Choose language .strings file"), qsl("Language files (*.strings)"))) { - _testlang = QFileInfo(file).absoluteFilePath(); - LangLoaderPlain loader(_testlang, LangLoaderRequest(lng_sure_save_language, lng_cancel, lng_continue)); - if (loader.errors().isEmpty()) { - LangLoaderResult result = loader.found(); - QString text = result.value(lng_sure_save_language, langOriginal(lng_sure_save_language)), - save = result.value(lng_continue, langOriginal(lng_continue)), - cancel = result.value(lng_cancel, langOriginal(lng_cancel)); - ConfirmBox *box = new ConfirmBox(text, save, cancel); - connect(box, SIGNAL(confirmed()), this, SLOT(onSaveTestLang())); - App::wnd()->showLayer(box); - } else { - App::wnd()->showLayer(new ConfirmBox("Custom lang failed :(\n\nError: " + loader.errors(), true, lang(lng_close))); - } - } + chooseCustomLang(); } else { App::wnd()->showLayer(new LanguageBox()); } diff --git a/Telegram/SourceFiles/settingswidget.h b/Telegram/SourceFiles/settingswidget.h index 540c6f6c3..faf500406 100644 --- a/Telegram/SourceFiles/settingswidget.h +++ b/Telegram/SourceFiles/settingswidget.h @@ -78,6 +78,8 @@ public: void showAll(); + void chooseCustomLang(); + void updateChatBackground(); void needBackgroundUpdate(bool tile); diff --git a/Telegram/SourceFiles/stdafx.cpp b/Telegram/SourceFiles/stdafx.cpp index 79b7a48f8..e2d89d33b 100644 --- a/Telegram/SourceFiles/stdafx.cpp +++ b/Telegram/SourceFiles/stdafx.cpp @@ -36,5 +36,6 @@ Q_IMPORT_PLUGIN(QWebpPlugin) #elif defined Q_OS_LINUX Q_IMPORT_PLUGIN(QComposePlatformInputContextPlugin) Q_IMPORT_PLUGIN(QIbusPlatformInputContextPlugin) +Q_IMPORT_PLUGIN(QFcitxPlatformInputContextPlugin) Q_IMPORT_PLUGIN(QWebpPlugin) #endif diff --git a/Telegram/Telegram.pro b/Telegram/Telegram.pro index d21b6aa4d..13b036d28 100644 --- a/Telegram/Telegram.pro +++ b/Telegram/Telegram.pro @@ -313,7 +313,9 @@ INCLUDEPATH += "/usr/include/libdbusmenu-glib-0.4" LIBS += -lcrypto -lssl -lz -ldl -llzma -lexif -lopenal -lavformat -lavcodec -lswresample -lavutil -lopus LIBS += ./../../../Libraries/QtStatic/qtbase/plugins/platforminputcontexts/libcomposeplatforminputcontextplugin.a \ - ./../../../Libraries/QtStatic/qtbase/plugins/platforminputcontexts/libibusplatforminputcontextplugin.a + ./../../../Libraries/QtStatic/qtbase/plugins/platforminputcontexts/libibusplatforminputcontextplugin.a \ + ./../../../Libraries/QtStatic/qtbase/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.a +LIBS += /usr/local/lib/libxkbcommon.a RESOURCES += \ ./SourceFiles/telegram.qrc \ diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/compose/compose.pro b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/compose/compose.pro new file mode 100644 index 000000000..0f902442d --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/compose/compose.pro @@ -0,0 +1,29 @@ +TARGET = composeplatforminputcontextplugin + +PLUGIN_TYPE = platforminputcontexts +PLUGIN_EXTENDS = - +PLUGIN_CLASS_NAME = QComposePlatformInputContextPlugin +load(qt_plugin) + +QT += gui-private + +DEFINES += X11_PREFIX='\\"$$QMAKE_X11_PREFIX\\"' + +SOURCES += $$PWD/qcomposeplatforminputcontextmain.cpp \ + $$PWD/qcomposeplatforminputcontext.cpp \ + $$PWD/generator/qtablegenerator.cpp \ + +HEADERS += $$PWD/qcomposeplatforminputcontext.h \ + $$PWD/generator/qtablegenerator.h \ + +# libxkbcommon +contains(QT_CONFIG, xkbcommon-qt): { + # dont't need x11 dependency for compose key plugin + QT_CONFIG -= use-xkbcommon-x11support +# include(../../../3rdparty/xkbcommon.pri) +} else { +# LIBS += $$QMAKE_LIBS_XKBCOMMON + QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_XKBCOMMON +} + +OTHER_FILES += $$PWD/compose.json diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/Makefile b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/Makefile new file mode 100644 index 000000000..de86b5c3e --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/Makefile @@ -0,0 +1,6085 @@ +############################################################################# +# Makefile for building: libfcitxplatforminputcontextplugin.a +# Generated by qmake (3.0) (Qt 5.5.0) +# Project: fcitx.pro +# Template: lib +# Command: /home/antanubis/TBuild/Libraries/QtStatic/qtbase/bin/qmake -o Makefile fcitx.pro +############################################################################# + +MAKEFILE = Makefile + +####### Compiler, tools and options + +CC = gcc +CXX = g++ +DEFINES = -DQT_NO_MTDEV -DQT_NO_LIBUDEV -DQT_NO_TSLIB -DQT_NO_LIBINPUT -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_STATICPLUGIN -DQT_PLUGIN -DQT_GUI_LIB -DQT_DBUS_LIB -DQT_CORE_LIB +CFLAGS = -pipe -O2 -fPIC -fvisibility=hidden -fno-exceptions -Wall -W -D_REENTRANT -fPIC $(DEFINES) +CXXFLAGS = -pipe -O2 -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -std=c++0x -fno-exceptions -Wall -W -D_REENTRANT -fPIC $(DEFINES) +INCPATH = -I. -I../../../../include/QtGui/5.5.0 -I../../../../include/QtGui/5.5.0/QtGui -I../../../../include -I../../../../include/QtGui -I../../../../include/QtDBus -I../../../../include/QtCore -I.moc -I../../../../mkspecs/linux-g++ +QMAKE = /home/antanubis/TBuild/Libraries/QtStatic/qtbase/bin/qmake +DEL_FILE = rm -f +CHK_DIR_EXISTS= test -d +MKDIR = mkdir -p +COPY = cp -f +COPY_FILE = cp -f +COPY_DIR = cp -f -R +INSTALL_FILE = install -m 644 -p +INSTALL_PROGRAM = install -m 755 -p +INSTALL_DIR = cp -f -R +DEL_FILE = rm -f +SYMLINK = ln -f -s +DEL_DIR = rmdir +MOVE = mv -f +TAR = tar -cf +COMPRESS = gzip -9f +DISTNAME = fcitxplatforminputcontextplugin1.0.0 +DISTDIR = /home/antanubis/TBuild/Libraries/QtStatic/qtbase/src/plugins/platforminputcontexts/fcitx/.obj/fcitxplatforminputcontextplugin1.0.0 +AR = ar cqs +RANLIB = +SED = sed +STRIP = strip + +####### Output directory + +OBJECTS_DIR = .obj/ + +####### Files + +SOURCES = fcitxqtconnection.cpp \ + fcitxqtformattedpreedit.cpp \ + fcitxqtinputcontextproxy.cpp \ + fcitxqtinputmethoditem.cpp \ + fcitxqtinputmethodproxy.cpp \ + fcitxqtkeyboardlayout.cpp \ + fcitxqtkeyboardproxy.cpp \ + keyuni.cpp \ + main.cpp \ + qfcitxplatforminputcontext.cpp \ + utils.cpp .moc/moc_fcitxqtconnection.cpp \ + .moc/moc_fcitxqtconnection_p.cpp \ + .moc/moc_fcitxqtinputcontextproxy.cpp \ + .moc/moc_fcitxqtinputmethodproxy.cpp \ + .moc/moc_fcitxqtkeyboardproxy.cpp \ + .moc/moc_main.cpp \ + .moc/moc_qfcitxplatforminputcontext.cpp +OBJECTS = .obj/fcitxqtconnection.o \ + .obj/fcitxqtformattedpreedit.o \ + .obj/fcitxqtinputcontextproxy.o \ + .obj/fcitxqtinputmethoditem.o \ + .obj/fcitxqtinputmethodproxy.o \ + .obj/fcitxqtkeyboardlayout.o \ + .obj/fcitxqtkeyboardproxy.o \ + .obj/keyuni.o \ + .obj/main.o \ + .obj/qfcitxplatforminputcontext.o \ + .obj/utils.o \ + .obj/moc_fcitxqtconnection.o \ + .obj/moc_fcitxqtconnection_p.o \ + .obj/moc_fcitxqtinputcontextproxy.o \ + .obj/moc_fcitxqtinputmethodproxy.o \ + .obj/moc_fcitxqtkeyboardproxy.o \ + .obj/moc_main.o \ + .obj/moc_qfcitxplatforminputcontext.o +DIST = ../../../../mkspecs/features/spec_pre.prf \ + ../../../../mkspecs/common/unix.conf \ + ../../../../mkspecs/common/linux.conf \ + ../../../../mkspecs/common/sanitize.conf \ + ../../../../mkspecs/common/gcc-base.conf \ + ../../../../mkspecs/common/gcc-base-unix.conf \ + ../../../../mkspecs/common/g++-base.conf \ + ../../../../mkspecs/common/g++-unix.conf \ + ../../../../mkspecs/qconfig.pri \ + ../../../../mkspecs/modules-inst/qt_lib_bootstrap_private.pri \ + ../../../../mkspecs/modules/qt_lib_bootstrap_private.pri \ + ../../../../mkspecs/modules-inst/qt_lib_concurrent.pri \ + ../../../../mkspecs/modules-inst/qt_lib_concurrent_private.pri \ + ../../../../mkspecs/modules/qt_lib_concurrent.pri \ + ../../../../mkspecs/modules-inst/qt_lib_core.pri \ + ../../../../mkspecs/modules-inst/qt_lib_core_private.pri \ + ../../../../mkspecs/modules/qt_lib_core.pri \ + ../../../../mkspecs/modules-inst/qt_lib_dbus.pri \ + ../../../../mkspecs/modules-inst/qt_lib_dbus_private.pri \ + ../../../../mkspecs/modules/qt_lib_dbus.pri \ + ../../../../mkspecs/modules-inst/qt_lib_gui.pri \ + ../../../../mkspecs/modules-inst/qt_lib_gui_private.pri \ + ../../../../mkspecs/modules/qt_lib_gui.pri \ + ../../../../mkspecs/modules-inst/qt_lib_network.pri \ + ../../../../mkspecs/modules-inst/qt_lib_network_private.pri \ + ../../../../mkspecs/modules/qt_lib_network.pri \ + ../../../../mkspecs/modules-inst/qt_lib_platformsupport_private.pri \ + ../../../../mkspecs/modules/qt_lib_platformsupport_private.pri \ + ../../../../mkspecs/modules-inst/qt_lib_printsupport.pri \ + ../../../../mkspecs/modules-inst/qt_lib_printsupport_private.pri \ + ../../../../mkspecs/modules/qt_lib_printsupport.pri \ + ../../../../mkspecs/modules-inst/qt_lib_sql.pri \ + ../../../../mkspecs/modules-inst/qt_lib_sql_private.pri \ + ../../../../mkspecs/modules/qt_lib_sql.pri \ + ../../../../mkspecs/modules-inst/qt_lib_testlib.pri \ + ../../../../mkspecs/modules-inst/qt_lib_testlib_private.pri \ + ../../../../mkspecs/modules/qt_lib_testlib.pri \ + ../../../../mkspecs/modules-inst/qt_lib_widgets.pri \ + ../../../../mkspecs/modules-inst/qt_lib_widgets_private.pri \ + ../../../../mkspecs/modules/qt_lib_widgets.pri \ + ../../../../mkspecs/modules-inst/qt_lib_xcb_qpa_lib_private.pri \ + ../../../../mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \ + ../../../../mkspecs/modules-inst/qt_lib_xml.pri \ + ../../../../mkspecs/modules-inst/qt_lib_xml_private.pri \ + ../../../../mkspecs/modules/qt_lib_xml.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_composeplatforminputcontextplugin.pri \ + ../../../../mkspecs/modules/qt_plugin_composeplatforminputcontextplugin.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_ibusplatforminputcontextplugin.pri \ + ../../../../mkspecs/modules/qt_plugin_ibusplatforminputcontextplugin.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qconnmanbearer.pri \ + ../../../../mkspecs/modules/qt_plugin_qconnmanbearer.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qevdevkeyboardplugin.pri \ + ../../../../mkspecs/modules/qt_plugin_qevdevkeyboardplugin.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qevdevmouseplugin.pri \ + ../../../../mkspecs/modules/qt_plugin_qevdevmouseplugin.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qevdevtabletplugin.pri \ + ../../../../mkspecs/modules/qt_plugin_qevdevtabletplugin.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qevdevtouchplugin.pri \ + ../../../../mkspecs/modules/qt_plugin_qevdevtouchplugin.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qgenericbearer.pri \ + ../../../../mkspecs/modules/qt_plugin_qgenericbearer.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qgtk2.pri \ + ../../../../mkspecs/modules/qt_plugin_qgtk2.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qico.pri \ + ../../../../mkspecs/modules/qt_plugin_qico.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qlinuxfb.pri \ + ../../../../mkspecs/modules/qt_plugin_qlinuxfb.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qminimal.pri \ + ../../../../mkspecs/modules/qt_plugin_qminimal.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qnmbearer.pri \ + ../../../../mkspecs/modules/qt_plugin_qnmbearer.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qoffscreen.pri \ + ../../../../mkspecs/modules/qt_plugin_qoffscreen.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qsqlite.pri \ + ../../../../mkspecs/modules/qt_plugin_qsqlite.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qtuiotouchplugin.pri \ + ../../../../mkspecs/modules/qt_plugin_qtuiotouchplugin.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qxcb.pri \ + ../../../../mkspecs/modules/qt_plugin_qxcb.pri \ + ../../../../mkspecs/modules/qt_tool_moc.pri \ + ../../../../mkspecs/modules/qt_tool_qdbuscpp2xml.pri \ + ../../../../mkspecs/modules/qt_tool_qdbusxml2cpp.pri \ + ../../../../mkspecs/modules/qt_tool_qdoc.pri \ + ../../../../mkspecs/modules/qt_tool_qlalr.pri \ + ../../../../mkspecs/modules/qt_tool_rcc.pri \ + ../../../../mkspecs/modules/qt_tool_syncqt.pri \ + ../../../../mkspecs/modules/qt_tool_uic.pri \ + ../../../../mkspecs/features/qt_functions.prf \ + ../../../../mkspecs/features/qt_config.prf \ + ../../../../mkspecs/linux-g++/qmake.conf \ + ../../../../mkspecs/features/spec_post.prf \ + ../../../../mkspecs/qmodule.pri \ + ../../../../mkspecs/features/qt_build_config.prf \ + ../../../../.qmake.conf \ + ../../../../mkspecs/features/exclusive_builds.prf \ + ../../../../mkspecs/features/default_pre.prf \ + ../../../../mkspecs/features/qt_build_paths.prf \ + ../../../../mkspecs/modules-inst/qt_plugin_fcitxplatforminputcontextplugin.pri \ + ../../../../mkspecs/modules/qt_plugin_fcitxplatforminputcontextplugin.pri \ + ../../../../mkspecs/features/qt_targets.prf \ + ../../../../mkspecs/features/qt_common.prf \ + ../../../../mkspecs/features/qt_plugin.prf \ + ../../../../mkspecs/features/resolve_config.prf \ + ../../../../mkspecs/features/default_post.prf \ + ../../../../mkspecs/features/unix/bsymbolic_functions.prf \ + ../../../../mkspecs/features/unix/hide_symbols.prf \ + ../../../../mkspecs/features/c++11.prf \ + ../../../../mkspecs/features/cmake_functions.prf \ + ../../../../mkspecs/features/create_cmake.prf \ + ../../../../mkspecs/features/qt_example_installs.prf \ + ../../../../mkspecs/features/exceptions_off.prf \ + ../../../../mkspecs/features/qt_docs_targets.prf \ + ../../../../mkspecs/features/precompile_header.prf \ + ../../../../mkspecs/features/unix/largefile.prf \ + ../../../../mkspecs/features/warn_on.prf \ + ../../../../mkspecs/features/qt.prf \ + ../../../../mkspecs/features/resources.prf \ + ../../../../mkspecs/features/moc.prf \ + ../../../../mkspecs/features/dbuscommon.pri \ + ../../../../mkspecs/features/dbusinterfaces.prf \ + ../../../../mkspecs/features/dbusadaptors.prf \ + ../../../../mkspecs/features/unix/thread.prf \ + ../../../../mkspecs/features/testcase_targets.prf \ + ../../../../mkspecs/features/yacc.prf \ + ../../../../mkspecs/features/lex.prf \ + fcitx.pro fcitxqtconnection.h \ + fcitxqtconnection_p.h \ + fcitxqtdbusaddons_export.h \ + fcitxqtdbusaddons_version.h \ + fcitxqtformattedpreedit.h \ + fcitxqtinputcontextproxy.h \ + fcitxqtinputmethoditem.h \ + fcitxqtinputmethodproxy.h \ + fcitxqtkeyboardlayout.h \ + fcitxqtkeyboardproxy.h \ + keydata.h \ + keyserver_x11.h \ + keyuni.h \ + main.h \ + qfcitxplatforminputcontext.h \ + utils.h fcitxqtconnection.cpp \ + fcitxqtformattedpreedit.cpp \ + fcitxqtinputcontextproxy.cpp \ + fcitxqtinputmethoditem.cpp \ + fcitxqtinputmethodproxy.cpp \ + fcitxqtkeyboardlayout.cpp \ + fcitxqtkeyboardproxy.cpp \ + keyuni.cpp \ + main.cpp \ + qfcitxplatforminputcontext.cpp \ + utils.cpp +QMAKE_TARGET = fcitxplatforminputcontextplugin +DESTDIR = ../../../../plugins/platforminputcontexts/#avoid trailing-slash linebreak +TARGET = libfcitxplatforminputcontextplugin.a +TARGETD = libfcitxplatforminputcontextplugin.a + + +first: all +####### Implicit rules + +.SUFFIXES: .o .c .cpp .cc .cxx .C + +.cpp.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.cc.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.cxx.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.C.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.c.o: + $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<" + +####### Build rules + +staticlib: ../../../../plugins/platforminputcontexts/$(TARGET) + +../../../../plugins/platforminputcontexts/$(TARGET): /home/antanubis/TBuild/Libraries/QtStatic/qtbase/lib/libQt5Gui.a /home/antanubis/TBuild/Libraries/QtStatic/qtbase/lib/libQt5DBus.a /home/antanubis/TBuild/Libraries/QtStatic/qtbase/lib/libQt5Core.a $(OBJECTS) $(OBJCOMP) + @test -d ../../../../plugins/platforminputcontexts/ || mkdir -p ../../../../plugins/platforminputcontexts/ + -$(DEL_FILE) $(TARGET) + $(AR) $(TARGET) $(OBJECTS) + -$(DEL_FILE) ../../../../plugins/platforminputcontexts/$(TARGET) + -$(MOVE) $(TARGET) ../../../../plugins/platforminputcontexts/ + + +../../../../plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.prl: + @$(QMAKE) -prl fcitx.pro +Makefile: fcitx.pro ../../../../.qmake.conf ../../../../.qmake.cache ../../../../mkspecs/linux-g++/qmake.conf ../../../../mkspecs/features/spec_pre.prf \ + ../../../../mkspecs/common/unix.conf \ + ../../../../mkspecs/common/linux.conf \ + ../../../../mkspecs/common/sanitize.conf \ + ../../../../mkspecs/common/gcc-base.conf \ + ../../../../mkspecs/common/gcc-base-unix.conf \ + ../../../../mkspecs/common/g++-base.conf \ + ../../../../mkspecs/common/g++-unix.conf \ + ../../../../mkspecs/qconfig.pri \ + /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qdds.pri \ + /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qdds.pri \ + /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qicns.pri \ + /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qicns.pri \ + /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qjp2.pri \ + /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qjp2.pri \ + /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qmng.pri \ + /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qmng.pri \ + /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qtga.pri \ + /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qtga.pri \ + /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qtiff.pri \ + /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qtiff.pri \ + /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qwbmp.pri \ + /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qwbmp.pri \ + /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qwebp.pri \ + /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qwebp.pri \ + ../../../../mkspecs/modules-inst/qt_lib_bootstrap_private.pri \ + ../../../../mkspecs/modules/qt_lib_bootstrap_private.pri \ + ../../../../mkspecs/modules-inst/qt_lib_concurrent.pri \ + ../../../../mkspecs/modules-inst/qt_lib_concurrent_private.pri \ + ../../../../mkspecs/modules/qt_lib_concurrent.pri \ + ../../../../mkspecs/modules-inst/qt_lib_core.pri \ + ../../../../mkspecs/modules-inst/qt_lib_core_private.pri \ + ../../../../mkspecs/modules/qt_lib_core.pri \ + ../../../../mkspecs/modules-inst/qt_lib_dbus.pri \ + ../../../../mkspecs/modules-inst/qt_lib_dbus_private.pri \ + ../../../../mkspecs/modules/qt_lib_dbus.pri \ + ../../../../mkspecs/modules-inst/qt_lib_gui.pri \ + ../../../../mkspecs/modules-inst/qt_lib_gui_private.pri \ + ../../../../mkspecs/modules/qt_lib_gui.pri \ + ../../../../mkspecs/modules-inst/qt_lib_network.pri \ + ../../../../mkspecs/modules-inst/qt_lib_network_private.pri \ + ../../../../mkspecs/modules/qt_lib_network.pri \ + ../../../../mkspecs/modules-inst/qt_lib_platformsupport_private.pri \ + ../../../../mkspecs/modules/qt_lib_platformsupport_private.pri \ + ../../../../mkspecs/modules-inst/qt_lib_printsupport.pri \ + ../../../../mkspecs/modules-inst/qt_lib_printsupport_private.pri \ + ../../../../mkspecs/modules/qt_lib_printsupport.pri \ + ../../../../mkspecs/modules-inst/qt_lib_sql.pri \ + ../../../../mkspecs/modules-inst/qt_lib_sql_private.pri \ + ../../../../mkspecs/modules/qt_lib_sql.pri \ + ../../../../mkspecs/modules-inst/qt_lib_testlib.pri \ + ../../../../mkspecs/modules-inst/qt_lib_testlib_private.pri \ + ../../../../mkspecs/modules/qt_lib_testlib.pri \ + ../../../../mkspecs/modules-inst/qt_lib_widgets.pri \ + ../../../../mkspecs/modules-inst/qt_lib_widgets_private.pri \ + ../../../../mkspecs/modules/qt_lib_widgets.pri \ + ../../../../mkspecs/modules-inst/qt_lib_xcb_qpa_lib_private.pri \ + ../../../../mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \ + ../../../../mkspecs/modules-inst/qt_lib_xml.pri \ + ../../../../mkspecs/modules-inst/qt_lib_xml_private.pri \ + ../../../../mkspecs/modules/qt_lib_xml.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_composeplatforminputcontextplugin.pri \ + ../../../../mkspecs/modules/qt_plugin_composeplatforminputcontextplugin.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_ibusplatforminputcontextplugin.pri \ + ../../../../mkspecs/modules/qt_plugin_ibusplatforminputcontextplugin.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qconnmanbearer.pri \ + ../../../../mkspecs/modules/qt_plugin_qconnmanbearer.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qevdevkeyboardplugin.pri \ + ../../../../mkspecs/modules/qt_plugin_qevdevkeyboardplugin.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qevdevmouseplugin.pri \ + ../../../../mkspecs/modules/qt_plugin_qevdevmouseplugin.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qevdevtabletplugin.pri \ + ../../../../mkspecs/modules/qt_plugin_qevdevtabletplugin.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qevdevtouchplugin.pri \ + ../../../../mkspecs/modules/qt_plugin_qevdevtouchplugin.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qgenericbearer.pri \ + ../../../../mkspecs/modules/qt_plugin_qgenericbearer.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qgtk2.pri \ + ../../../../mkspecs/modules/qt_plugin_qgtk2.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qico.pri \ + ../../../../mkspecs/modules/qt_plugin_qico.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qlinuxfb.pri \ + ../../../../mkspecs/modules/qt_plugin_qlinuxfb.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qminimal.pri \ + ../../../../mkspecs/modules/qt_plugin_qminimal.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qnmbearer.pri \ + ../../../../mkspecs/modules/qt_plugin_qnmbearer.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qoffscreen.pri \ + ../../../../mkspecs/modules/qt_plugin_qoffscreen.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qsqlite.pri \ + ../../../../mkspecs/modules/qt_plugin_qsqlite.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qtuiotouchplugin.pri \ + ../../../../mkspecs/modules/qt_plugin_qtuiotouchplugin.pri \ + ../../../../mkspecs/modules-inst/qt_plugin_qxcb.pri \ + ../../../../mkspecs/modules/qt_plugin_qxcb.pri \ + ../../../../mkspecs/modules/qt_tool_moc.pri \ + ../../../../mkspecs/modules/qt_tool_qdbuscpp2xml.pri \ + ../../../../mkspecs/modules/qt_tool_qdbusxml2cpp.pri \ + ../../../../mkspecs/modules/qt_tool_qdoc.pri \ + ../../../../mkspecs/modules/qt_tool_qlalr.pri \ + ../../../../mkspecs/modules/qt_tool_rcc.pri \ + ../../../../mkspecs/modules/qt_tool_syncqt.pri \ + ../../../../mkspecs/modules/qt_tool_uic.pri \ + ../../../../mkspecs/features/qt_functions.prf \ + ../../../../mkspecs/features/qt_config.prf \ + ../../../../mkspecs/linux-g++/qmake.conf \ + ../../../../mkspecs/features/spec_post.prf \ + ../../../../mkspecs/qmodule.pri \ + ../../../../mkspecs/features/qt_build_config.prf \ + ../../../../.qmake.conf \ + ../../../../.qmake.cache \ + ../../../../mkspecs/features/exclusive_builds.prf \ + ../../../../mkspecs/features/default_pre.prf \ + ../../../../mkspecs/features/qt_build_paths.prf \ + ../../../../mkspecs/modules-inst/qt_plugin_fcitxplatforminputcontextplugin.pri \ + ../../../../mkspecs/modules/qt_plugin_fcitxplatforminputcontextplugin.pri \ + ../../../../mkspecs/features/qt_targets.prf \ + ../../../../mkspecs/features/qt_common.prf \ + ../../../../mkspecs/features/qt_plugin.prf \ + ../../../../mkspecs/features/resolve_config.prf \ + ../../../../mkspecs/features/default_post.prf \ + ../../../../mkspecs/features/unix/bsymbolic_functions.prf \ + ../../../../mkspecs/features/unix/hide_symbols.prf \ + ../../../../mkspecs/features/c++11.prf \ + ../../../../mkspecs/features/cmake_functions.prf \ + ../../../../mkspecs/features/create_cmake.prf \ + ../../../../mkspecs/features/qt_example_installs.prf \ + ../../../../mkspecs/features/exceptions_off.prf \ + ../../../../mkspecs/features/qt_docs_targets.prf \ + ../../../../mkspecs/features/precompile_header.prf \ + ../../../../mkspecs/features/unix/largefile.prf \ + ../../../../mkspecs/features/warn_on.prf \ + ../../../../mkspecs/features/qt.prf \ + ../../../../mkspecs/features/resources.prf \ + ../../../../mkspecs/features/moc.prf \ + ../../../../mkspecs/features/dbuscommon.pri \ + ../../../../mkspecs/features/dbusinterfaces.prf \ + ../../../../mkspecs/features/dbusadaptors.prf \ + ../../../../mkspecs/features/unix/thread.prf \ + ../../../../mkspecs/features/testcase_targets.prf \ + ../../../../mkspecs/features/yacc.prf \ + ../../../../mkspecs/features/lex.prf \ + fcitx.pro \ + ../../../../mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in \ + /home/antanubis/TBuild/Libraries/QtStatic/qtbase/lib/libQt5Gui.prl \ + /home/antanubis/TBuild/Libraries/QtStatic/qtbase/lib/libQt5DBus.prl \ + /home/antanubis/TBuild/Libraries/QtStatic/qtbase/lib/libQt5Core.prl + $(QMAKE) -o Makefile fcitx.pro +../../../../mkspecs/features/spec_pre.prf: +../../../../mkspecs/common/unix.conf: +../../../../mkspecs/common/linux.conf: +../../../../mkspecs/common/sanitize.conf: +../../../../mkspecs/common/gcc-base.conf: +../../../../mkspecs/common/gcc-base-unix.conf: +../../../../mkspecs/common/g++-base.conf: +../../../../mkspecs/common/g++-unix.conf: +../../../../mkspecs/qconfig.pri: +/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qdds.pri: +/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qdds.pri: +/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qicns.pri: +/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qicns.pri: +/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qjp2.pri: +/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qjp2.pri: +/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qmng.pri: +/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qmng.pri: +/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qtga.pri: +/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qtga.pri: +/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qtiff.pri: +/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qtiff.pri: +/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qwbmp.pri: +/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qwbmp.pri: +/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qwebp.pri: +/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qwebp.pri: +../../../../mkspecs/modules-inst/qt_lib_bootstrap_private.pri: +../../../../mkspecs/modules/qt_lib_bootstrap_private.pri: +../../../../mkspecs/modules-inst/qt_lib_concurrent.pri: +../../../../mkspecs/modules-inst/qt_lib_concurrent_private.pri: +../../../../mkspecs/modules/qt_lib_concurrent.pri: +../../../../mkspecs/modules-inst/qt_lib_core.pri: +../../../../mkspecs/modules-inst/qt_lib_core_private.pri: +../../../../mkspecs/modules/qt_lib_core.pri: +../../../../mkspecs/modules-inst/qt_lib_dbus.pri: +../../../../mkspecs/modules-inst/qt_lib_dbus_private.pri: +../../../../mkspecs/modules/qt_lib_dbus.pri: +../../../../mkspecs/modules-inst/qt_lib_gui.pri: +../../../../mkspecs/modules-inst/qt_lib_gui_private.pri: +../../../../mkspecs/modules/qt_lib_gui.pri: +../../../../mkspecs/modules-inst/qt_lib_network.pri: +../../../../mkspecs/modules-inst/qt_lib_network_private.pri: +../../../../mkspecs/modules/qt_lib_network.pri: +../../../../mkspecs/modules-inst/qt_lib_platformsupport_private.pri: +../../../../mkspecs/modules/qt_lib_platformsupport_private.pri: +../../../../mkspecs/modules-inst/qt_lib_printsupport.pri: +../../../../mkspecs/modules-inst/qt_lib_printsupport_private.pri: +../../../../mkspecs/modules/qt_lib_printsupport.pri: +../../../../mkspecs/modules-inst/qt_lib_sql.pri: +../../../../mkspecs/modules-inst/qt_lib_sql_private.pri: +../../../../mkspecs/modules/qt_lib_sql.pri: +../../../../mkspecs/modules-inst/qt_lib_testlib.pri: +../../../../mkspecs/modules-inst/qt_lib_testlib_private.pri: +../../../../mkspecs/modules/qt_lib_testlib.pri: +../../../../mkspecs/modules-inst/qt_lib_widgets.pri: +../../../../mkspecs/modules-inst/qt_lib_widgets_private.pri: +../../../../mkspecs/modules/qt_lib_widgets.pri: +../../../../mkspecs/modules-inst/qt_lib_xcb_qpa_lib_private.pri: +../../../../mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri: +../../../../mkspecs/modules-inst/qt_lib_xml.pri: +../../../../mkspecs/modules-inst/qt_lib_xml_private.pri: +../../../../mkspecs/modules/qt_lib_xml.pri: +../../../../mkspecs/modules-inst/qt_plugin_composeplatforminputcontextplugin.pri: +../../../../mkspecs/modules/qt_plugin_composeplatforminputcontextplugin.pri: +../../../../mkspecs/modules-inst/qt_plugin_ibusplatforminputcontextplugin.pri: +../../../../mkspecs/modules/qt_plugin_ibusplatforminputcontextplugin.pri: +../../../../mkspecs/modules-inst/qt_plugin_qconnmanbearer.pri: +../../../../mkspecs/modules/qt_plugin_qconnmanbearer.pri: +../../../../mkspecs/modules-inst/qt_plugin_qevdevkeyboardplugin.pri: +../../../../mkspecs/modules/qt_plugin_qevdevkeyboardplugin.pri: +../../../../mkspecs/modules-inst/qt_plugin_qevdevmouseplugin.pri: +../../../../mkspecs/modules/qt_plugin_qevdevmouseplugin.pri: +../../../../mkspecs/modules-inst/qt_plugin_qevdevtabletplugin.pri: +../../../../mkspecs/modules/qt_plugin_qevdevtabletplugin.pri: +../../../../mkspecs/modules-inst/qt_plugin_qevdevtouchplugin.pri: +../../../../mkspecs/modules/qt_plugin_qevdevtouchplugin.pri: +../../../../mkspecs/modules-inst/qt_plugin_qgenericbearer.pri: +../../../../mkspecs/modules/qt_plugin_qgenericbearer.pri: +../../../../mkspecs/modules-inst/qt_plugin_qgtk2.pri: +../../../../mkspecs/modules/qt_plugin_qgtk2.pri: +../../../../mkspecs/modules-inst/qt_plugin_qico.pri: +../../../../mkspecs/modules/qt_plugin_qico.pri: +../../../../mkspecs/modules-inst/qt_plugin_qlinuxfb.pri: +../../../../mkspecs/modules/qt_plugin_qlinuxfb.pri: +../../../../mkspecs/modules-inst/qt_plugin_qminimal.pri: +../../../../mkspecs/modules/qt_plugin_qminimal.pri: +../../../../mkspecs/modules-inst/qt_plugin_qnmbearer.pri: +../../../../mkspecs/modules/qt_plugin_qnmbearer.pri: +../../../../mkspecs/modules-inst/qt_plugin_qoffscreen.pri: +../../../../mkspecs/modules/qt_plugin_qoffscreen.pri: +../../../../mkspecs/modules-inst/qt_plugin_qsqlite.pri: +../../../../mkspecs/modules/qt_plugin_qsqlite.pri: +../../../../mkspecs/modules-inst/qt_plugin_qtuiotouchplugin.pri: +../../../../mkspecs/modules/qt_plugin_qtuiotouchplugin.pri: +../../../../mkspecs/modules-inst/qt_plugin_qxcb.pri: +../../../../mkspecs/modules/qt_plugin_qxcb.pri: +../../../../mkspecs/modules/qt_tool_moc.pri: +../../../../mkspecs/modules/qt_tool_qdbuscpp2xml.pri: +../../../../mkspecs/modules/qt_tool_qdbusxml2cpp.pri: +../../../../mkspecs/modules/qt_tool_qdoc.pri: +../../../../mkspecs/modules/qt_tool_qlalr.pri: +../../../../mkspecs/modules/qt_tool_rcc.pri: +../../../../mkspecs/modules/qt_tool_syncqt.pri: +../../../../mkspecs/modules/qt_tool_uic.pri: +../../../../mkspecs/features/qt_functions.prf: +../../../../mkspecs/features/qt_config.prf: +../../../../mkspecs/linux-g++/qmake.conf: +../../../../mkspecs/features/spec_post.prf: +../../../../mkspecs/qmodule.pri: +../../../../mkspecs/features/qt_build_config.prf: +../../../../.qmake.conf: +../../../../.qmake.cache: +../../../../mkspecs/features/exclusive_builds.prf: +../../../../mkspecs/features/default_pre.prf: +../../../../mkspecs/features/qt_build_paths.prf: +../../../../mkspecs/modules-inst/qt_plugin_fcitxplatforminputcontextplugin.pri: +../../../../mkspecs/modules/qt_plugin_fcitxplatforminputcontextplugin.pri: +../../../../mkspecs/features/qt_targets.prf: +../../../../mkspecs/features/qt_common.prf: +../../../../mkspecs/features/qt_plugin.prf: +../../../../mkspecs/features/resolve_config.prf: +../../../../mkspecs/features/default_post.prf: +../../../../mkspecs/features/unix/bsymbolic_functions.prf: +../../../../mkspecs/features/unix/hide_symbols.prf: +../../../../mkspecs/features/c++11.prf: +../../../../mkspecs/features/cmake_functions.prf: +../../../../mkspecs/features/create_cmake.prf: +../../../../mkspecs/features/qt_example_installs.prf: +../../../../mkspecs/features/exceptions_off.prf: +../../../../mkspecs/features/qt_docs_targets.prf: +../../../../mkspecs/features/precompile_header.prf: +../../../../mkspecs/features/unix/largefile.prf: +../../../../mkspecs/features/warn_on.prf: +../../../../mkspecs/features/qt.prf: +../../../../mkspecs/features/resources.prf: +../../../../mkspecs/features/moc.prf: +../../../../mkspecs/features/dbuscommon.pri: +../../../../mkspecs/features/dbusinterfaces.prf: +../../../../mkspecs/features/dbusadaptors.prf: +../../../../mkspecs/features/unix/thread.prf: +../../../../mkspecs/features/testcase_targets.prf: +../../../../mkspecs/features/yacc.prf: +../../../../mkspecs/features/lex.prf: +fcitx.pro: +../../../../mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in: +/home/antanubis/TBuild/Libraries/QtStatic/qtbase/lib/libQt5Gui.prl: +/home/antanubis/TBuild/Libraries/QtStatic/qtbase/lib/libQt5DBus.prl: +/home/antanubis/TBuild/Libraries/QtStatic/qtbase/lib/libQt5Core.prl: +qmake: FORCE + @$(QMAKE) -o Makefile fcitx.pro + +qmake_all: FORCE + + +all: Makefile \ + ../../../../plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.prl ../../../../plugins/platforminputcontexts/$(TARGET) + +dist: distdir FORCE + (cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR) + +distdir: FORCE + @test -d $(DISTDIR) || mkdir -p $(DISTDIR) + $(COPY_FILE) --parents $(DIST) $(DISTDIR)/ + $(COPY_FILE) --parents fcitxqtconnection.h fcitxqtconnection_p.h fcitxqtdbusaddons_export.h fcitxqtdbusaddons_version.h fcitxqtformattedpreedit.h fcitxqtinputcontextproxy.h fcitxqtinputmethoditem.h fcitxqtinputmethodproxy.h fcitxqtkeyboardlayout.h fcitxqtkeyboardproxy.h keydata.h keyserver_x11.h keyuni.h main.h qfcitxplatforminputcontext.h utils.h $(DISTDIR)/ + $(COPY_FILE) --parents fcitxqtconnection.cpp fcitxqtformattedpreedit.cpp fcitxqtinputcontextproxy.cpp fcitxqtinputmethoditem.cpp fcitxqtinputmethodproxy.cpp fcitxqtkeyboardlayout.cpp fcitxqtkeyboardproxy.cpp keyuni.cpp main.cpp qfcitxplatforminputcontext.cpp utils.cpp $(DISTDIR)/ + + +clean: compiler_clean + -$(DEL_FILE) $(OBJECTS) + -$(DEL_FILE) *~ core *.core + + +distclean: clean + -$(DEL_FILE) ../../../../plugins/platforminputcontexts/$(TARGET) + -$(DEL_FILE) /home/antanubis/TBuild/Libraries/QtStatic/qtbase/lib/cmake/Qt5Gui/Qt5Gui_QFcitxPlatformInputContextPlugin.cmake ../../../../plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.prl + -$(DEL_FILE) Makefile + + +####### Sub-libraries + +html_docs: + $(MAKE) -f $(MAKEFILE) prepare_docs && $(MAKE) -f $(MAKEFILE) generate_docs + +docs: + $(MAKE) -f $(MAKEFILE) html_docs && $(MAKE) -f $(MAKEFILE) qch_docs + +install_html_docs: + +uninstall_html_docs: + +install_qch_docs: + +uninstall_qch_docs: + +install_docs: + +uninstall_docs: + +qch_docs: + +prepare_docs: + +generate_docs: + +mocclean: compiler_moc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_source_make_all + +check: first + +compiler_no_pch_compiler_make_all: +compiler_no_pch_compiler_clean: +compiler_rcc_make_all: +compiler_rcc_clean: +compiler_moc_header_make_all: .moc/moc_fcitxqtconnection.cpp .moc/moc_fcitxqtconnection_p.cpp .moc/moc_fcitxqtinputcontextproxy.cpp .moc/moc_fcitxqtinputmethodproxy.cpp .moc/moc_fcitxqtkeyboardproxy.cpp .moc/moc_main.cpp .moc/moc_qfcitxplatforminputcontext.cpp +compiler_moc_header_clean: + -$(DEL_FILE) .moc/moc_fcitxqtconnection.cpp .moc/moc_fcitxqtconnection_p.cpp .moc/moc_fcitxqtinputcontextproxy.cpp .moc/moc_fcitxqtinputmethodproxy.cpp .moc/moc_fcitxqtkeyboardproxy.cpp .moc/moc_main.cpp .moc/moc_qfcitxplatforminputcontext.cpp +.moc/moc_fcitxqtconnection.cpp: fcitxqtdbusaddons_export.h \ + ../../../../include/QtCore/QObject \ + ../../../../include/QtCore/qobject.h \ + ../../../corelib/kernel/qobject.h \ + ../../../../include/QtCore/qobjectdefs.h \ + ../../../corelib/kernel/qobjectdefs.h \ + ../../../../include/QtCore/qnamespace.h \ + ../../../corelib/global/qnamespace.h \ + ../../../../include/QtCore/qglobal.h \ + ../../../corelib/global/qglobal.h \ + ../../../../include/QtCore/qconfig.h \ + ../../../corelib/global/qconfig.h \ + ../../../../include/QtCore/qfeatures.h \ + ../../../corelib/global/qfeatures.h \ + ../../../../include/QtCore/qsystemdetection.h \ + ../../../corelib/global/qsystemdetection.h \ + ../../../../include/QtCore/qprocessordetection.h \ + ../../../corelib/global/qprocessordetection.h \ + ../../../../include/QtCore/qcompilerdetection.h \ + ../../../corelib/global/qcompilerdetection.h \ + ../../../../include/QtCore/qtypeinfo.h \ + ../../../corelib/global/qtypeinfo.h \ + ../../../../include/QtCore/qtypetraits.h \ + ../../../corelib/global/qtypetraits.h \ + ../../../../include/QtCore/qsysinfo.h \ + ../../../corelib/global/qsysinfo.h \ + ../../../../include/QtCore/qlogging.h \ + ../../../corelib/global/qlogging.h \ + ../../../../include/QtCore/qflags.h \ + ../../../corelib/global/qflags.h \ + ../../../../include/QtCore/qatomic.h \ + ../../../corelib/thread/qatomic.h \ + ../../../../include/QtCore/qbasicatomic.h \ + ../../../corelib/thread/qbasicatomic.h \ + ../../../../include/QtCore/qatomic_bootstrap.h \ + ../../../corelib/arch/qatomic_bootstrap.h \ + ../../../../include/QtCore/qgenericatomic.h \ + ../../../corelib/thread/qgenericatomic.h \ + ../../../../include/QtCore/qatomic_cxx11.h \ + ../../../corelib/arch/qatomic_cxx11.h \ + ../../../../include/QtCore/qatomic_gcc.h \ + ../../../corelib/arch/qatomic_gcc.h \ + ../../../../include/QtCore/qatomic_msvc.h \ + ../../../corelib/arch/qatomic_msvc.h \ + ../../../../include/QtCore/qatomic_armv7.h \ + ../../../corelib/arch/qatomic_armv7.h \ + ../../../../include/QtCore/qatomic_armv6.h \ + ../../../corelib/arch/qatomic_armv6.h \ + ../../../../include/QtCore/qatomic_armv5.h \ + ../../../corelib/arch/qatomic_armv5.h \ + ../../../../include/QtCore/qatomic_ia64.h \ + ../../../corelib/arch/qatomic_ia64.h \ + ../../../../include/QtCore/qatomic_mips.h \ + ../../../corelib/arch/qatomic_mips.h \ + ../../../../include/QtCore/qatomic_x86.h \ + ../../../corelib/arch/qatomic_x86.h \ + ../../../../include/QtCore/qatomic_unix.h \ + ../../../corelib/arch/qatomic_unix.h \ + ../../../../include/QtCore/qglobalstatic.h \ + ../../../corelib/global/qglobalstatic.h \ + ../../../../include/QtCore/qmutex.h \ + ../../../corelib/thread/qmutex.h \ + ../../../../include/QtCore/qnumeric.h \ + ../../../corelib/global/qnumeric.h \ + ../../../../include/QtCore/qobjectdefs_impl.h \ + ../../../corelib/kernel/qobjectdefs_impl.h \ + ../../../../include/QtCore/qstring.h \ + ../../../corelib/tools/qstring.h \ + ../../../../include/QtCore/qchar.h \ + ../../../corelib/tools/qchar.h \ + ../../../../include/QtCore/qbytearray.h \ + ../../../corelib/tools/qbytearray.h \ + ../../../../include/QtCore/qrefcount.h \ + ../../../corelib/tools/qrefcount.h \ + ../../../../include/QtCore/qarraydata.h \ + ../../../corelib/tools/qarraydata.h \ + ../../../../include/QtCore/qstringbuilder.h \ + ../../../corelib/tools/qstringbuilder.h \ + ../../../../include/QtCore/qlist.h \ + ../../../corelib/tools/qlist.h \ + ../../../../include/QtCore/qalgorithms.h \ + ../../../corelib/tools/qalgorithms.h \ + ../../../../include/QtCore/qiterator.h \ + ../../../corelib/tools/qiterator.h \ + ../../../../include/QtCore/qbytearraylist.h \ + ../../../corelib/tools/qbytearraylist.h \ + ../../../../include/QtCore/qstringlist.h \ + ../../../corelib/tools/qstringlist.h \ + ../../../../include/QtCore/qregexp.h \ + ../../../corelib/tools/qregexp.h \ + ../../../../include/QtCore/qstringmatcher.h \ + ../../../corelib/tools/qstringmatcher.h \ + ../../../../include/QtCore/qcoreevent.h \ + ../../../corelib/kernel/qcoreevent.h \ + ../../../../include/QtCore/qscopedpointer.h \ + ../../../corelib/tools/qscopedpointer.h \ + ../../../../include/QtCore/qmetatype.h \ + ../../../corelib/kernel/qmetatype.h \ + ../../../../include/QtCore/qvarlengtharray.h \ + ../../../corelib/tools/qvarlengtharray.h \ + ../../../../include/QtCore/qcontainerfwd.h \ + ../../../corelib/tools/qcontainerfwd.h \ + ../../../../include/QtCore/qisenum.h \ + ../../../corelib/global/qisenum.h \ + ../../../../include/QtCore/qobject_impl.h \ + ../../../corelib/kernel/qobject_impl.h \ + fcitxqtconnection.h + /home/antanubis/TBuild/Libraries/QtStatic/qtbase/bin/moc $(DEFINES) -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/mkspecs/linux-g++ -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/src/plugins/platforminputcontexts/fcitx -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0 -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtDBus -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtCore -I/usr/include/c++/4.8 -I/usr/include/x86_64-linux-gnu/c++/4.8 -I/usr/include/c++/4.8/backward -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include fcitxqtconnection.h -o .moc/moc_fcitxqtconnection.cpp + +.moc/moc_fcitxqtconnection_p.cpp: fcitxqtconnection.h \ + fcitxqtdbusaddons_export.h \ + ../../../../include/QtCore/QObject \ + ../../../../include/QtCore/qobject.h \ + ../../../corelib/kernel/qobject.h \ + ../../../../include/QtCore/qobjectdefs.h \ + ../../../corelib/kernel/qobjectdefs.h \ + ../../../../include/QtCore/qnamespace.h \ + ../../../corelib/global/qnamespace.h \ + ../../../../include/QtCore/qglobal.h \ + ../../../corelib/global/qglobal.h \ + ../../../../include/QtCore/qconfig.h \ + ../../../corelib/global/qconfig.h \ + ../../../../include/QtCore/qfeatures.h \ + ../../../corelib/global/qfeatures.h \ + ../../../../include/QtCore/qsystemdetection.h \ + ../../../corelib/global/qsystemdetection.h \ + ../../../../include/QtCore/qprocessordetection.h \ + ../../../corelib/global/qprocessordetection.h \ + ../../../../include/QtCore/qcompilerdetection.h \ + ../../../corelib/global/qcompilerdetection.h \ + ../../../../include/QtCore/qtypeinfo.h \ + ../../../corelib/global/qtypeinfo.h \ + ../../../../include/QtCore/qtypetraits.h \ + ../../../corelib/global/qtypetraits.h \ + ../../../../include/QtCore/qsysinfo.h \ + ../../../corelib/global/qsysinfo.h \ + ../../../../include/QtCore/qlogging.h \ + ../../../corelib/global/qlogging.h \ + ../../../../include/QtCore/qflags.h \ + ../../../corelib/global/qflags.h \ + ../../../../include/QtCore/qatomic.h \ + ../../../corelib/thread/qatomic.h \ + ../../../../include/QtCore/qbasicatomic.h \ + ../../../corelib/thread/qbasicatomic.h \ + ../../../../include/QtCore/qatomic_bootstrap.h \ + ../../../corelib/arch/qatomic_bootstrap.h \ + ../../../../include/QtCore/qgenericatomic.h \ + ../../../corelib/thread/qgenericatomic.h \ + ../../../../include/QtCore/qatomic_cxx11.h \ + ../../../corelib/arch/qatomic_cxx11.h \ + ../../../../include/QtCore/qatomic_gcc.h \ + ../../../corelib/arch/qatomic_gcc.h \ + ../../../../include/QtCore/qatomic_msvc.h \ + ../../../corelib/arch/qatomic_msvc.h \ + ../../../../include/QtCore/qatomic_armv7.h \ + ../../../corelib/arch/qatomic_armv7.h \ + ../../../../include/QtCore/qatomic_armv6.h \ + ../../../corelib/arch/qatomic_armv6.h \ + ../../../../include/QtCore/qatomic_armv5.h \ + ../../../corelib/arch/qatomic_armv5.h \ + ../../../../include/QtCore/qatomic_ia64.h \ + ../../../corelib/arch/qatomic_ia64.h \ + ../../../../include/QtCore/qatomic_mips.h \ + ../../../corelib/arch/qatomic_mips.h \ + ../../../../include/QtCore/qatomic_x86.h \ + ../../../corelib/arch/qatomic_x86.h \ + ../../../../include/QtCore/qatomic_unix.h \ + ../../../corelib/arch/qatomic_unix.h \ + ../../../../include/QtCore/qglobalstatic.h \ + ../../../corelib/global/qglobalstatic.h \ + ../../../../include/QtCore/qmutex.h \ + ../../../corelib/thread/qmutex.h \ + ../../../../include/QtCore/qnumeric.h \ + ../../../corelib/global/qnumeric.h \ + ../../../../include/QtCore/qobjectdefs_impl.h \ + ../../../corelib/kernel/qobjectdefs_impl.h \ + ../../../../include/QtCore/qstring.h \ + ../../../corelib/tools/qstring.h \ + ../../../../include/QtCore/qchar.h \ + ../../../corelib/tools/qchar.h \ + ../../../../include/QtCore/qbytearray.h \ + ../../../corelib/tools/qbytearray.h \ + ../../../../include/QtCore/qrefcount.h \ + ../../../corelib/tools/qrefcount.h \ + ../../../../include/QtCore/qarraydata.h \ + ../../../corelib/tools/qarraydata.h \ + ../../../../include/QtCore/qstringbuilder.h \ + ../../../corelib/tools/qstringbuilder.h \ + ../../../../include/QtCore/qlist.h \ + ../../../corelib/tools/qlist.h \ + ../../../../include/QtCore/qalgorithms.h \ + ../../../corelib/tools/qalgorithms.h \ + ../../../../include/QtCore/qiterator.h \ + ../../../corelib/tools/qiterator.h \ + ../../../../include/QtCore/qbytearraylist.h \ + ../../../corelib/tools/qbytearraylist.h \ + ../../../../include/QtCore/qstringlist.h \ + ../../../corelib/tools/qstringlist.h \ + ../../../../include/QtCore/qregexp.h \ + ../../../corelib/tools/qregexp.h \ + ../../../../include/QtCore/qstringmatcher.h \ + ../../../corelib/tools/qstringmatcher.h \ + ../../../../include/QtCore/qcoreevent.h \ + ../../../corelib/kernel/qcoreevent.h \ + ../../../../include/QtCore/qscopedpointer.h \ + ../../../corelib/tools/qscopedpointer.h \ + ../../../../include/QtCore/qmetatype.h \ + ../../../corelib/kernel/qmetatype.h \ + ../../../../include/QtCore/qvarlengtharray.h \ + ../../../corelib/tools/qvarlengtharray.h \ + ../../../../include/QtCore/qcontainerfwd.h \ + ../../../corelib/tools/qcontainerfwd.h \ + ../../../../include/QtCore/qisenum.h \ + ../../../corelib/global/qisenum.h \ + ../../../../include/QtCore/qobject_impl.h \ + ../../../corelib/kernel/qobject_impl.h \ + ../../../../include/QtCore/QWeakPointer \ + ../../../../include/QtCore/qsharedpointer.h \ + ../../../corelib/tools/qsharedpointer.h \ + ../../../../include/QtCore/qshareddata.h \ + ../../../corelib/tools/qshareddata.h \ + ../../../../include/QtCore/qhash.h \ + ../../../corelib/tools/qhash.h \ + ../../../../include/QtCore/qpair.h \ + ../../../corelib/tools/qpair.h \ + ../../../../include/QtCore/qsharedpointer_impl.h \ + ../../../corelib/tools/qsharedpointer_impl.h \ + ../../../../include/QtCore/QFileSystemWatcher \ + ../../../../include/QtCore/qfilesystemwatcher.h \ + ../../../corelib/io/qfilesystemwatcher.h \ + fcitxqtconnection_p.h + /home/antanubis/TBuild/Libraries/QtStatic/qtbase/bin/moc $(DEFINES) -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/mkspecs/linux-g++ -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/src/plugins/platforminputcontexts/fcitx -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0 -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtDBus -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtCore -I/usr/include/c++/4.8 -I/usr/include/x86_64-linux-gnu/c++/4.8 -I/usr/include/c++/4.8/backward -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include fcitxqtconnection_p.h -o .moc/moc_fcitxqtconnection_p.cpp + +.moc/moc_fcitxqtinputcontextproxy.cpp: ../../../../include/QtCore/QObject \ + ../../../../include/QtCore/qobject.h \ + ../../../corelib/kernel/qobject.h \ + ../../../../include/QtCore/qobjectdefs.h \ + ../../../corelib/kernel/qobjectdefs.h \ + ../../../../include/QtCore/qnamespace.h \ + ../../../corelib/global/qnamespace.h \ + ../../../../include/QtCore/qglobal.h \ + ../../../corelib/global/qglobal.h \ + ../../../../include/QtCore/qconfig.h \ + ../../../corelib/global/qconfig.h \ + ../../../../include/QtCore/qfeatures.h \ + ../../../corelib/global/qfeatures.h \ + ../../../../include/QtCore/qsystemdetection.h \ + ../../../corelib/global/qsystemdetection.h \ + ../../../../include/QtCore/qprocessordetection.h \ + ../../../corelib/global/qprocessordetection.h \ + ../../../../include/QtCore/qcompilerdetection.h \ + ../../../corelib/global/qcompilerdetection.h \ + ../../../../include/QtCore/qtypeinfo.h \ + ../../../corelib/global/qtypeinfo.h \ + ../../../../include/QtCore/qtypetraits.h \ + ../../../corelib/global/qtypetraits.h \ + ../../../../include/QtCore/qsysinfo.h \ + ../../../corelib/global/qsysinfo.h \ + ../../../../include/QtCore/qlogging.h \ + ../../../corelib/global/qlogging.h \ + ../../../../include/QtCore/qflags.h \ + ../../../corelib/global/qflags.h \ + ../../../../include/QtCore/qatomic.h \ + ../../../corelib/thread/qatomic.h \ + ../../../../include/QtCore/qbasicatomic.h \ + ../../../corelib/thread/qbasicatomic.h \ + ../../../../include/QtCore/qatomic_bootstrap.h \ + ../../../corelib/arch/qatomic_bootstrap.h \ + ../../../../include/QtCore/qgenericatomic.h \ + ../../../corelib/thread/qgenericatomic.h \ + ../../../../include/QtCore/qatomic_cxx11.h \ + ../../../corelib/arch/qatomic_cxx11.h \ + ../../../../include/QtCore/qatomic_gcc.h \ + ../../../corelib/arch/qatomic_gcc.h \ + ../../../../include/QtCore/qatomic_msvc.h \ + ../../../corelib/arch/qatomic_msvc.h \ + ../../../../include/QtCore/qatomic_armv7.h \ + ../../../corelib/arch/qatomic_armv7.h \ + ../../../../include/QtCore/qatomic_armv6.h \ + ../../../corelib/arch/qatomic_armv6.h \ + ../../../../include/QtCore/qatomic_armv5.h \ + ../../../corelib/arch/qatomic_armv5.h \ + ../../../../include/QtCore/qatomic_ia64.h \ + ../../../corelib/arch/qatomic_ia64.h \ + ../../../../include/QtCore/qatomic_mips.h \ + ../../../corelib/arch/qatomic_mips.h \ + ../../../../include/QtCore/qatomic_x86.h \ + ../../../corelib/arch/qatomic_x86.h \ + ../../../../include/QtCore/qatomic_unix.h \ + ../../../corelib/arch/qatomic_unix.h \ + ../../../../include/QtCore/qglobalstatic.h \ + ../../../corelib/global/qglobalstatic.h \ + ../../../../include/QtCore/qmutex.h \ + ../../../corelib/thread/qmutex.h \ + ../../../../include/QtCore/qnumeric.h \ + ../../../corelib/global/qnumeric.h \ + ../../../../include/QtCore/qobjectdefs_impl.h \ + ../../../corelib/kernel/qobjectdefs_impl.h \ + ../../../../include/QtCore/qstring.h \ + ../../../corelib/tools/qstring.h \ + ../../../../include/QtCore/qchar.h \ + ../../../corelib/tools/qchar.h \ + ../../../../include/QtCore/qbytearray.h \ + ../../../corelib/tools/qbytearray.h \ + ../../../../include/QtCore/qrefcount.h \ + ../../../corelib/tools/qrefcount.h \ + ../../../../include/QtCore/qarraydata.h \ + ../../../corelib/tools/qarraydata.h \ + ../../../../include/QtCore/qstringbuilder.h \ + ../../../corelib/tools/qstringbuilder.h \ + ../../../../include/QtCore/qlist.h \ + ../../../corelib/tools/qlist.h \ + ../../../../include/QtCore/qalgorithms.h \ + ../../../corelib/tools/qalgorithms.h \ + ../../../../include/QtCore/qiterator.h \ + ../../../corelib/tools/qiterator.h \ + ../../../../include/QtCore/qbytearraylist.h \ + ../../../corelib/tools/qbytearraylist.h \ + ../../../../include/QtCore/qstringlist.h \ + ../../../corelib/tools/qstringlist.h \ + ../../../../include/QtCore/qregexp.h \ + ../../../corelib/tools/qregexp.h \ + ../../../../include/QtCore/qstringmatcher.h \ + ../../../corelib/tools/qstringmatcher.h \ + ../../../../include/QtCore/qcoreevent.h \ + ../../../corelib/kernel/qcoreevent.h \ + ../../../../include/QtCore/qscopedpointer.h \ + ../../../corelib/tools/qscopedpointer.h \ + ../../../../include/QtCore/qmetatype.h \ + ../../../corelib/kernel/qmetatype.h \ + ../../../../include/QtCore/qvarlengtharray.h \ + ../../../corelib/tools/qvarlengtharray.h \ + ../../../../include/QtCore/qcontainerfwd.h \ + ../../../corelib/tools/qcontainerfwd.h \ + ../../../../include/QtCore/qisenum.h \ + ../../../corelib/global/qisenum.h \ + ../../../../include/QtCore/qobject_impl.h \ + ../../../corelib/kernel/qobject_impl.h \ + ../../../../include/QtCore/QByteArray \ + ../../../../include/QtCore/QList \ + ../../../../include/QtCore/QMap \ + ../../../../include/QtCore/qmap.h \ + ../../../corelib/tools/qmap.h \ + ../../../../include/QtCore/qpair.h \ + ../../../corelib/tools/qpair.h \ + ../../../../include/QtCore/qdebug.h \ + ../../../corelib/io/qdebug.h \ + ../../../../include/QtCore/qhash.h \ + ../../../corelib/tools/qhash.h \ + ../../../../include/QtCore/qtextstream.h \ + ../../../corelib/io/qtextstream.h \ + ../../../../include/QtCore/qiodevice.h \ + ../../../corelib/io/qiodevice.h \ + ../../../../include/QtCore/qlocale.h \ + ../../../corelib/tools/qlocale.h \ + ../../../../include/QtCore/qvariant.h \ + ../../../corelib/kernel/qvariant.h \ + ../../../../include/QtCore/qshareddata.h \ + ../../../corelib/tools/qshareddata.h \ + ../../../../include/QtCore/qvector.h \ + ../../../corelib/tools/qvector.h \ + ../../../../include/QtCore/qpoint.h \ + ../../../corelib/tools/qpoint.h \ + ../../../../include/QtCore/qset.h \ + ../../../corelib/tools/qset.h \ + ../../../../include/QtCore/qcontiguouscache.h \ + ../../../corelib/tools/qcontiguouscache.h \ + ../../../../include/QtCore/QString \ + ../../../../include/QtCore/QStringList \ + ../../../../include/QtCore/QVariant \ + ../../../../include/QtDBus/QtDBus \ + ../../../../include/QtDBus/QtDBusDepends \ + ../../../../include/QtCore/QtCore \ + ../../../../include/QtCore/QtCoreDepends \ + ../../../../include/QtCore/qabstractanimation.h \ + ../../../corelib/animation/qabstractanimation.h \ + ../../../../include/QtCore/qanimationgroup.h \ + ../../../corelib/animation/qanimationgroup.h \ + ../../../../include/QtCore/qparallelanimationgroup.h \ + ../../../corelib/animation/qparallelanimationgroup.h \ + ../../../../include/QtCore/qpauseanimation.h \ + ../../../corelib/animation/qpauseanimation.h \ + ../../../../include/QtCore/qpropertyanimation.h \ + ../../../corelib/animation/qpropertyanimation.h \ + ../../../../include/QtCore/qvariantanimation.h \ + ../../../corelib/animation/qvariantanimation.h \ + ../../../../include/QtCore/qeasingcurve.h \ + ../../../corelib/tools/qeasingcurve.h \ + ../../../../include/QtCore/qsequentialanimationgroup.h \ + ../../../corelib/animation/qsequentialanimationgroup.h \ + ../../../../include/QtCore/qtextcodec.h \ + ../../../corelib/codecs/qtextcodec.h \ + ../../../../include/QtCore/qendian.h \ + ../../../corelib/global/qendian.h \ + ../../../../include/QtCore/qlibraryinfo.h \ + ../../../corelib/global/qlibraryinfo.h \ + ../../../../include/QtCore/qdatetime.h \ + ../../../corelib/tools/qdatetime.h \ + ../../../../include/QtCore/qbuffer.h \ + ../../../corelib/io/qbuffer.h \ + ../../../../include/QtCore/qdatastream.h \ + ../../../corelib/io/qdatastream.h \ + ../../../../include/QtCore/qdir.h \ + ../../../corelib/io/qdir.h \ + ../../../../include/QtCore/qfileinfo.h \ + ../../../corelib/io/qfileinfo.h \ + ../../../../include/QtCore/qfile.h \ + ../../../corelib/io/qfile.h \ + ../../../../include/QtCore/qfiledevice.h \ + ../../../corelib/io/qfiledevice.h \ + ../../../../include/QtCore/qdiriterator.h \ + ../../../corelib/io/qdiriterator.h \ + ../../../../include/QtCore/qfileselector.h \ + ../../../corelib/io/qfileselector.h \ + ../../../../include/QtCore/qfilesystemwatcher.h \ + ../../../corelib/io/qfilesystemwatcher.h \ + ../../../../include/QtCore/qlockfile.h \ + ../../../corelib/io/qlockfile.h \ + ../../../../include/QtCore/qloggingcategory.h \ + ../../../corelib/io/qloggingcategory.h \ + ../../../../include/QtCore/qprocess.h \ + ../../../corelib/io/qprocess.h \ + ../../../../include/QtCore/qresource.h \ + ../../../corelib/io/qresource.h \ + ../../../../include/QtCore/qsavefile.h \ + ../../../corelib/io/qsavefile.h \ + ../../../../include/QtCore/qsettings.h \ + ../../../corelib/io/qsettings.h \ + ../../../../include/QtCore/qstandardpaths.h \ + ../../../corelib/io/qstandardpaths.h \ + ../../../../include/QtCore/qstorageinfo.h \ + ../../../corelib/io/qstorageinfo.h \ + ../../../../include/QtCore/qtemporarydir.h \ + ../../../corelib/io/qtemporarydir.h \ + ../../../../include/QtCore/QScopedPointer \ + ../../../../include/QtCore/qtemporaryfile.h \ + ../../../corelib/io/qtemporaryfile.h \ + ../../../../include/QtCore/qurl.h \ + ../../../corelib/io/qurl.h \ + ../../../../include/QtCore/qurlquery.h \ + ../../../corelib/io/qurlquery.h \ + ../../../../include/QtCore/qabstractitemmodel.h \ + ../../../corelib/itemmodels/qabstractitemmodel.h \ + ../../../../include/QtCore/qabstractproxymodel.h \ + ../../../corelib/itemmodels/qabstractproxymodel.h \ + ../../../../include/QtCore/qidentityproxymodel.h \ + ../../../corelib/itemmodels/qidentityproxymodel.h \ + ../../../../include/QtCore/qitemselectionmodel.h \ + ../../../corelib/itemmodels/qitemselectionmodel.h \ + ../../../../include/QtCore/qsortfilterproxymodel.h \ + ../../../corelib/itemmodels/qsortfilterproxymodel.h \ + ../../../../include/QtCore/qstringlistmodel.h \ + ../../../corelib/itemmodels/qstringlistmodel.h \ + ../../../../include/QtCore/qjsonarray.h \ + ../../../corelib/json/qjsonarray.h \ + ../../../../include/QtCore/qjsonvalue.h \ + ../../../corelib/json/qjsonvalue.h \ + ../../../../include/QtCore/qjsondocument.h \ + ../../../corelib/json/qjsondocument.h \ + ../../../../include/QtCore/qjsonobject.h \ + ../../../corelib/json/qjsonobject.h \ + ../../../../include/QtCore/qabstracteventdispatcher.h \ + ../../../corelib/kernel/qabstracteventdispatcher.h \ + ../../../../include/QtCore/qeventloop.h \ + ../../../corelib/kernel/qeventloop.h \ + ../../../../include/QtCore/qabstractnativeeventfilter.h \ + ../../../corelib/kernel/qabstractnativeeventfilter.h \ + ../../../../include/QtCore/qbasictimer.h \ + ../../../corelib/kernel/qbasictimer.h \ + ../../../../include/QtCore/qcoreapplication.h \ + ../../../corelib/kernel/qcoreapplication.h \ + ../../../../include/QtCore/qmath.h \ + ../../../corelib/kernel/qmath.h \ + ../../../../include/QtCore/qmetaobject.h \ + ../../../corelib/kernel/qmetaobject.h \ + ../../../../include/QtCore/qmimedata.h \ + ../../../corelib/kernel/qmimedata.h \ + ../../../../include/QtCore/qobjectcleanuphandler.h \ + ../../../corelib/kernel/qobjectcleanuphandler.h \ + ../../../../include/QtCore/qpointer.h \ + ../../../corelib/kernel/qpointer.h \ + ../../../../include/QtCore/qsharedpointer.h \ + ../../../corelib/tools/qsharedpointer.h \ + ../../../../include/QtCore/qsharedpointer_impl.h \ + ../../../corelib/tools/qsharedpointer_impl.h \ + ../../../../include/QtCore/qsharedmemory.h \ + ../../../corelib/kernel/qsharedmemory.h \ + ../../../../include/QtCore/qsignalmapper.h \ + ../../../corelib/kernel/qsignalmapper.h \ + ../../../../include/QtCore/qsocketnotifier.h \ + ../../../corelib/kernel/qsocketnotifier.h \ + ../../../../include/QtCore/qsystemsemaphore.h \ + ../../../corelib/kernel/qsystemsemaphore.h \ + ../../../../include/QtCore/qtimer.h \ + ../../../corelib/kernel/qtimer.h \ + ../../../../include/QtCore/qtranslator.h \ + ../../../corelib/kernel/qtranslator.h \ + ../../../../include/QtCore/qwineventnotifier.h \ + ../../../corelib/kernel/qwineventnotifier.h \ + ../../../../include/QtCore/qmimedatabase.h \ + ../../../corelib/mimetypes/qmimedatabase.h \ + ../../../../include/QtCore/qmimetype.h \ + ../../../corelib/mimetypes/qmimetype.h \ + ../../../../include/QtCore/qfactoryinterface.h \ + ../../../corelib/plugin/qfactoryinterface.h \ + ../../../../include/QtCore/qlibrary.h \ + ../../../corelib/plugin/qlibrary.h \ + ../../../../include/QtCore/qplugin.h \ + ../../../corelib/plugin/qplugin.h \ + ../../../../include/QtCore/qpluginloader.h \ + ../../../corelib/plugin/qpluginloader.h \ + ../../../../include/QtCore/quuid.h \ + ../../../corelib/plugin/quuid.h \ + ../../../../include/QtCore/qabstractstate.h \ + ../../../corelib/statemachine/qabstractstate.h \ + ../../../../include/QtCore/qabstracttransition.h \ + ../../../corelib/statemachine/qabstracttransition.h \ + ../../../../include/QtCore/qeventtransition.h \ + ../../../corelib/statemachine/qeventtransition.h \ + ../../../../include/QtCore/qfinalstate.h \ + ../../../corelib/statemachine/qfinalstate.h \ + ../../../../include/QtCore/qhistorystate.h \ + ../../../corelib/statemachine/qhistorystate.h \ + ../../../../include/QtCore/qsignaltransition.h \ + ../../../corelib/statemachine/qsignaltransition.h \ + ../../../../include/QtCore/qstate.h \ + ../../../corelib/statemachine/qstate.h \ + ../../../../include/QtCore/qstatemachine.h \ + ../../../corelib/statemachine/qstatemachine.h \ + ../../../../include/QtCore/qexception.h \ + ../../../corelib/thread/qexception.h \ + ../../../../include/QtCore/qfuture.h \ + ../../../corelib/thread/qfuture.h \ + ../../../../include/QtCore/qfutureinterface.h \ + ../../../corelib/thread/qfutureinterface.h \ + ../../../../include/QtCore/qrunnable.h \ + ../../../corelib/thread/qrunnable.h \ + ../../../../include/QtCore/qresultstore.h \ + ../../../corelib/thread/qresultstore.h \ + ../../../../include/QtCore/qfuturesynchronizer.h \ + ../../../corelib/thread/qfuturesynchronizer.h \ + ../../../../include/QtCore/qfuturewatcher.h \ + ../../../corelib/thread/qfuturewatcher.h \ + ../../../../include/QtCore/qreadwritelock.h \ + ../../../corelib/thread/qreadwritelock.h \ + ../../../../include/QtCore/qsemaphore.h \ + ../../../corelib/thread/qsemaphore.h \ + ../../../../include/QtCore/qthread.h \ + ../../../corelib/thread/qthread.h \ + ../../../../include/QtCore/qthreadpool.h \ + ../../../corelib/thread/qthreadpool.h \ + ../../../../include/QtCore/qthreadstorage.h \ + ../../../corelib/thread/qthreadstorage.h \ + ../../../../include/QtCore/qwaitcondition.h \ + ../../../corelib/thread/qwaitcondition.h \ + ../../../../include/QtCore/qarraydataops.h \ + ../../../corelib/tools/qarraydataops.h \ + ../../../../include/QtCore/qarraydatapointer.h \ + ../../../corelib/tools/qarraydatapointer.h \ + ../../../../include/QtCore/qbitarray.h \ + ../../../corelib/tools/qbitarray.h \ + ../../../../include/QtCore/qbytearraymatcher.h \ + ../../../corelib/tools/qbytearraymatcher.h \ + ../../../../include/QtCore/qcache.h \ + ../../../corelib/tools/qcache.h \ + ../../../../include/QtCore/qcollator.h \ + ../../../corelib/tools/qcollator.h \ + ../../../../include/QtCore/qcommandlineoption.h \ + ../../../corelib/tools/qcommandlineoption.h \ + ../../../../include/QtCore/qcommandlineparser.h \ + ../../../corelib/tools/qcommandlineparser.h \ + ../../../../include/QtCore/qcryptographichash.h \ + ../../../corelib/tools/qcryptographichash.h \ + ../../../../include/QtCore/qelapsedtimer.h \ + ../../../corelib/tools/qelapsedtimer.h \ + ../../../../include/QtCore/qline.h \ + ../../../corelib/tools/qline.h \ + ../../../../include/QtCore/qlinkedlist.h \ + ../../../corelib/tools/qlinkedlist.h \ + ../../../../include/QtCore/qmargins.h \ + ../../../corelib/tools/qmargins.h \ + ../../../../include/QtCore/qmessageauthenticationcode.h \ + ../../../corelib/tools/qmessageauthenticationcode.h \ + ../../../../include/QtCore/qqueue.h \ + ../../../corelib/tools/qqueue.h \ + ../../../../include/QtCore/qrect.h \ + ../../../corelib/tools/qrect.h \ + ../../../../include/QtCore/qsize.h \ + ../../../corelib/tools/qsize.h \ + ../../../../include/QtCore/qregularexpression.h \ + ../../../corelib/tools/qregularexpression.h \ + ../../../../include/QtCore/qscopedvaluerollback.h \ + ../../../corelib/tools/qscopedvaluerollback.h \ + ../../../../include/QtCore/qstack.h \ + ../../../corelib/tools/qstack.h \ + ../../../../include/QtCore/qtextboundaryfinder.h \ + ../../../corelib/tools/qtextboundaryfinder.h \ + ../../../../include/QtCore/qtimeline.h \ + ../../../corelib/tools/qtimeline.h \ + ../../../../include/QtCore/qtimezone.h \ + ../../../corelib/tools/qtimezone.h \ + ../../../../include/QtCore/qxmlstream.h \ + ../../../corelib/xml/qxmlstream.h \ + ../../../../include/QtCore/qtcoreversion.h \ + ../../../../include/QtDBus/qdbusabstractadaptor.h \ + ../../../dbus/qdbusabstractadaptor.h \ + ../../../../include/QtDBus/qdbusmacros.h \ + ../../../dbus/qdbusmacros.h \ + ../../../../include/QtDBus/qdbusabstractinterface.h \ + ../../../dbus/qdbusabstractinterface.h \ + ../../../../include/QtDBus/qdbusmessage.h \ + ../../../dbus/qdbusmessage.h \ + ../../../../include/QtDBus/qdbuserror.h \ + ../../../dbus/qdbuserror.h \ + ../../../../include/QtDBus/qdbusextratypes.h \ + ../../../dbus/qdbusextratypes.h \ + ../../../../include/QtDBus/qdbusconnection.h \ + ../../../dbus/qdbusconnection.h \ + ../../../../include/QtDBus/qdbusargument.h \ + ../../../dbus/qdbusargument.h \ + ../../../../include/QtDBus/qdbusconnectioninterface.h \ + ../../../dbus/qdbusconnectioninterface.h \ + ../../../../include/QtDBus/qdbusreply.h \ + ../../../dbus/qdbusreply.h \ + ../../../../include/QtDBus/qdbuspendingreply.h \ + ../../../dbus/qdbuspendingreply.h \ + ../../../../include/QtDBus/qdbuspendingcall.h \ + ../../../dbus/qdbuspendingcall.h \ + ../../../../include/QtDBus/qdbuscontext.h \ + ../../../dbus/qdbuscontext.h \ + ../../../../include/QtDBus/qdbusinterface.h \ + ../../../dbus/qdbusinterface.h \ + ../../../../include/QtDBus/qdbusmetatype.h \ + ../../../dbus/qdbusmetatype.h \ + ../../../../include/QtDBus/qdbusserver.h \ + ../../../dbus/qdbusserver.h \ + ../../../../include/QtDBus/qdbusservicewatcher.h \ + ../../../dbus/qdbusservicewatcher.h \ + ../../../../include/QtDBus/qdbusunixfiledescriptor.h \ + ../../../dbus/qdbusunixfiledescriptor.h \ + ../../../../include/QtDBus/qdbusvirtualobject.h \ + ../../../dbus/qdbusvirtualobject.h \ + ../../../../include/QtDBus/qtdbusversion.h \ + fcitxqtformattedpreedit.h \ + fcitxqtdbusaddons_export.h \ + ../../../../include/QtCore/QMetaType \ + ../../../../include/QtDBus/QDBusArgument \ + fcitxqtinputcontextproxy.h + /home/antanubis/TBuild/Libraries/QtStatic/qtbase/bin/moc $(DEFINES) -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/mkspecs/linux-g++ -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/src/plugins/platforminputcontexts/fcitx -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0 -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtDBus -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtCore -I/usr/include/c++/4.8 -I/usr/include/x86_64-linux-gnu/c++/4.8 -I/usr/include/c++/4.8/backward -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include fcitxqtinputcontextproxy.h -o .moc/moc_fcitxqtinputcontextproxy.cpp + +.moc/moc_fcitxqtinputmethodproxy.cpp: ../../../../include/QtCore/QObject \ + ../../../../include/QtCore/qobject.h \ + ../../../corelib/kernel/qobject.h \ + ../../../../include/QtCore/qobjectdefs.h \ + ../../../corelib/kernel/qobjectdefs.h \ + ../../../../include/QtCore/qnamespace.h \ + ../../../corelib/global/qnamespace.h \ + ../../../../include/QtCore/qglobal.h \ + ../../../corelib/global/qglobal.h \ + ../../../../include/QtCore/qconfig.h \ + ../../../corelib/global/qconfig.h \ + ../../../../include/QtCore/qfeatures.h \ + ../../../corelib/global/qfeatures.h \ + ../../../../include/QtCore/qsystemdetection.h \ + ../../../corelib/global/qsystemdetection.h \ + ../../../../include/QtCore/qprocessordetection.h \ + ../../../corelib/global/qprocessordetection.h \ + ../../../../include/QtCore/qcompilerdetection.h \ + ../../../corelib/global/qcompilerdetection.h \ + ../../../../include/QtCore/qtypeinfo.h \ + ../../../corelib/global/qtypeinfo.h \ + ../../../../include/QtCore/qtypetraits.h \ + ../../../corelib/global/qtypetraits.h \ + ../../../../include/QtCore/qsysinfo.h \ + ../../../corelib/global/qsysinfo.h \ + ../../../../include/QtCore/qlogging.h \ + ../../../corelib/global/qlogging.h \ + ../../../../include/QtCore/qflags.h \ + ../../../corelib/global/qflags.h \ + ../../../../include/QtCore/qatomic.h \ + ../../../corelib/thread/qatomic.h \ + ../../../../include/QtCore/qbasicatomic.h \ + ../../../corelib/thread/qbasicatomic.h \ + ../../../../include/QtCore/qatomic_bootstrap.h \ + ../../../corelib/arch/qatomic_bootstrap.h \ + ../../../../include/QtCore/qgenericatomic.h \ + ../../../corelib/thread/qgenericatomic.h \ + ../../../../include/QtCore/qatomic_cxx11.h \ + ../../../corelib/arch/qatomic_cxx11.h \ + ../../../../include/QtCore/qatomic_gcc.h \ + ../../../corelib/arch/qatomic_gcc.h \ + ../../../../include/QtCore/qatomic_msvc.h \ + ../../../corelib/arch/qatomic_msvc.h \ + ../../../../include/QtCore/qatomic_armv7.h \ + ../../../corelib/arch/qatomic_armv7.h \ + ../../../../include/QtCore/qatomic_armv6.h \ + ../../../corelib/arch/qatomic_armv6.h \ + ../../../../include/QtCore/qatomic_armv5.h \ + ../../../corelib/arch/qatomic_armv5.h \ + ../../../../include/QtCore/qatomic_ia64.h \ + ../../../corelib/arch/qatomic_ia64.h \ + ../../../../include/QtCore/qatomic_mips.h \ + ../../../corelib/arch/qatomic_mips.h \ + ../../../../include/QtCore/qatomic_x86.h \ + ../../../corelib/arch/qatomic_x86.h \ + ../../../../include/QtCore/qatomic_unix.h \ + ../../../corelib/arch/qatomic_unix.h \ + ../../../../include/QtCore/qglobalstatic.h \ + ../../../corelib/global/qglobalstatic.h \ + ../../../../include/QtCore/qmutex.h \ + ../../../corelib/thread/qmutex.h \ + ../../../../include/QtCore/qnumeric.h \ + ../../../corelib/global/qnumeric.h \ + ../../../../include/QtCore/qobjectdefs_impl.h \ + ../../../corelib/kernel/qobjectdefs_impl.h \ + ../../../../include/QtCore/qstring.h \ + ../../../corelib/tools/qstring.h \ + ../../../../include/QtCore/qchar.h \ + ../../../corelib/tools/qchar.h \ + ../../../../include/QtCore/qbytearray.h \ + ../../../corelib/tools/qbytearray.h \ + ../../../../include/QtCore/qrefcount.h \ + ../../../corelib/tools/qrefcount.h \ + ../../../../include/QtCore/qarraydata.h \ + ../../../corelib/tools/qarraydata.h \ + ../../../../include/QtCore/qstringbuilder.h \ + ../../../corelib/tools/qstringbuilder.h \ + ../../../../include/QtCore/qlist.h \ + ../../../corelib/tools/qlist.h \ + ../../../../include/QtCore/qalgorithms.h \ + ../../../corelib/tools/qalgorithms.h \ + ../../../../include/QtCore/qiterator.h \ + ../../../corelib/tools/qiterator.h \ + ../../../../include/QtCore/qbytearraylist.h \ + ../../../corelib/tools/qbytearraylist.h \ + ../../../../include/QtCore/qstringlist.h \ + ../../../corelib/tools/qstringlist.h \ + ../../../../include/QtCore/qregexp.h \ + ../../../corelib/tools/qregexp.h \ + ../../../../include/QtCore/qstringmatcher.h \ + ../../../corelib/tools/qstringmatcher.h \ + ../../../../include/QtCore/qcoreevent.h \ + ../../../corelib/kernel/qcoreevent.h \ + ../../../../include/QtCore/qscopedpointer.h \ + ../../../corelib/tools/qscopedpointer.h \ + ../../../../include/QtCore/qmetatype.h \ + ../../../corelib/kernel/qmetatype.h \ + ../../../../include/QtCore/qvarlengtharray.h \ + ../../../corelib/tools/qvarlengtharray.h \ + ../../../../include/QtCore/qcontainerfwd.h \ + ../../../corelib/tools/qcontainerfwd.h \ + ../../../../include/QtCore/qisenum.h \ + ../../../corelib/global/qisenum.h \ + ../../../../include/QtCore/qobject_impl.h \ + ../../../corelib/kernel/qobject_impl.h \ + ../../../../include/QtCore/QByteArray \ + ../../../../include/QtCore/QList \ + ../../../../include/QtCore/QMap \ + ../../../../include/QtCore/qmap.h \ + ../../../corelib/tools/qmap.h \ + ../../../../include/QtCore/qpair.h \ + ../../../corelib/tools/qpair.h \ + ../../../../include/QtCore/qdebug.h \ + ../../../corelib/io/qdebug.h \ + ../../../../include/QtCore/qhash.h \ + ../../../corelib/tools/qhash.h \ + ../../../../include/QtCore/qtextstream.h \ + ../../../corelib/io/qtextstream.h \ + ../../../../include/QtCore/qiodevice.h \ + ../../../corelib/io/qiodevice.h \ + ../../../../include/QtCore/qlocale.h \ + ../../../corelib/tools/qlocale.h \ + ../../../../include/QtCore/qvariant.h \ + ../../../corelib/kernel/qvariant.h \ + ../../../../include/QtCore/qshareddata.h \ + ../../../corelib/tools/qshareddata.h \ + ../../../../include/QtCore/qvector.h \ + ../../../corelib/tools/qvector.h \ + ../../../../include/QtCore/qpoint.h \ + ../../../corelib/tools/qpoint.h \ + ../../../../include/QtCore/qset.h \ + ../../../corelib/tools/qset.h \ + ../../../../include/QtCore/qcontiguouscache.h \ + ../../../corelib/tools/qcontiguouscache.h \ + ../../../../include/QtCore/QString \ + ../../../../include/QtCore/QStringList \ + ../../../../include/QtCore/QVariant \ + ../../../../include/QtDBus/QtDBus \ + ../../../../include/QtDBus/QtDBusDepends \ + ../../../../include/QtCore/QtCore \ + ../../../../include/QtCore/QtCoreDepends \ + ../../../../include/QtCore/qabstractanimation.h \ + ../../../corelib/animation/qabstractanimation.h \ + ../../../../include/QtCore/qanimationgroup.h \ + ../../../corelib/animation/qanimationgroup.h \ + ../../../../include/QtCore/qparallelanimationgroup.h \ + ../../../corelib/animation/qparallelanimationgroup.h \ + ../../../../include/QtCore/qpauseanimation.h \ + ../../../corelib/animation/qpauseanimation.h \ + ../../../../include/QtCore/qpropertyanimation.h \ + ../../../corelib/animation/qpropertyanimation.h \ + ../../../../include/QtCore/qvariantanimation.h \ + ../../../corelib/animation/qvariantanimation.h \ + ../../../../include/QtCore/qeasingcurve.h \ + ../../../corelib/tools/qeasingcurve.h \ + ../../../../include/QtCore/qsequentialanimationgroup.h \ + ../../../corelib/animation/qsequentialanimationgroup.h \ + ../../../../include/QtCore/qtextcodec.h \ + ../../../corelib/codecs/qtextcodec.h \ + ../../../../include/QtCore/qendian.h \ + ../../../corelib/global/qendian.h \ + ../../../../include/QtCore/qlibraryinfo.h \ + ../../../corelib/global/qlibraryinfo.h \ + ../../../../include/QtCore/qdatetime.h \ + ../../../corelib/tools/qdatetime.h \ + ../../../../include/QtCore/qbuffer.h \ + ../../../corelib/io/qbuffer.h \ + ../../../../include/QtCore/qdatastream.h \ + ../../../corelib/io/qdatastream.h \ + ../../../../include/QtCore/qdir.h \ + ../../../corelib/io/qdir.h \ + ../../../../include/QtCore/qfileinfo.h \ + ../../../corelib/io/qfileinfo.h \ + ../../../../include/QtCore/qfile.h \ + ../../../corelib/io/qfile.h \ + ../../../../include/QtCore/qfiledevice.h \ + ../../../corelib/io/qfiledevice.h \ + ../../../../include/QtCore/qdiriterator.h \ + ../../../corelib/io/qdiriterator.h \ + ../../../../include/QtCore/qfileselector.h \ + ../../../corelib/io/qfileselector.h \ + ../../../../include/QtCore/qfilesystemwatcher.h \ + ../../../corelib/io/qfilesystemwatcher.h \ + ../../../../include/QtCore/qlockfile.h \ + ../../../corelib/io/qlockfile.h \ + ../../../../include/QtCore/qloggingcategory.h \ + ../../../corelib/io/qloggingcategory.h \ + ../../../../include/QtCore/qprocess.h \ + ../../../corelib/io/qprocess.h \ + ../../../../include/QtCore/qresource.h \ + ../../../corelib/io/qresource.h \ + ../../../../include/QtCore/qsavefile.h \ + ../../../corelib/io/qsavefile.h \ + ../../../../include/QtCore/qsettings.h \ + ../../../corelib/io/qsettings.h \ + ../../../../include/QtCore/qstandardpaths.h \ + ../../../corelib/io/qstandardpaths.h \ + ../../../../include/QtCore/qstorageinfo.h \ + ../../../corelib/io/qstorageinfo.h \ + ../../../../include/QtCore/qtemporarydir.h \ + ../../../corelib/io/qtemporarydir.h \ + ../../../../include/QtCore/QScopedPointer \ + ../../../../include/QtCore/qtemporaryfile.h \ + ../../../corelib/io/qtemporaryfile.h \ + ../../../../include/QtCore/qurl.h \ + ../../../corelib/io/qurl.h \ + ../../../../include/QtCore/qurlquery.h \ + ../../../corelib/io/qurlquery.h \ + ../../../../include/QtCore/qabstractitemmodel.h \ + ../../../corelib/itemmodels/qabstractitemmodel.h \ + ../../../../include/QtCore/qabstractproxymodel.h \ + ../../../corelib/itemmodels/qabstractproxymodel.h \ + ../../../../include/QtCore/qidentityproxymodel.h \ + ../../../corelib/itemmodels/qidentityproxymodel.h \ + ../../../../include/QtCore/qitemselectionmodel.h \ + ../../../corelib/itemmodels/qitemselectionmodel.h \ + ../../../../include/QtCore/qsortfilterproxymodel.h \ + ../../../corelib/itemmodels/qsortfilterproxymodel.h \ + ../../../../include/QtCore/qstringlistmodel.h \ + ../../../corelib/itemmodels/qstringlistmodel.h \ + ../../../../include/QtCore/qjsonarray.h \ + ../../../corelib/json/qjsonarray.h \ + ../../../../include/QtCore/qjsonvalue.h \ + ../../../corelib/json/qjsonvalue.h \ + ../../../../include/QtCore/qjsondocument.h \ + ../../../corelib/json/qjsondocument.h \ + ../../../../include/QtCore/qjsonobject.h \ + ../../../corelib/json/qjsonobject.h \ + ../../../../include/QtCore/qabstracteventdispatcher.h \ + ../../../corelib/kernel/qabstracteventdispatcher.h \ + ../../../../include/QtCore/qeventloop.h \ + ../../../corelib/kernel/qeventloop.h \ + ../../../../include/QtCore/qabstractnativeeventfilter.h \ + ../../../corelib/kernel/qabstractnativeeventfilter.h \ + ../../../../include/QtCore/qbasictimer.h \ + ../../../corelib/kernel/qbasictimer.h \ + ../../../../include/QtCore/qcoreapplication.h \ + ../../../corelib/kernel/qcoreapplication.h \ + ../../../../include/QtCore/qmath.h \ + ../../../corelib/kernel/qmath.h \ + ../../../../include/QtCore/qmetaobject.h \ + ../../../corelib/kernel/qmetaobject.h \ + ../../../../include/QtCore/qmimedata.h \ + ../../../corelib/kernel/qmimedata.h \ + ../../../../include/QtCore/qobjectcleanuphandler.h \ + ../../../corelib/kernel/qobjectcleanuphandler.h \ + ../../../../include/QtCore/qpointer.h \ + ../../../corelib/kernel/qpointer.h \ + ../../../../include/QtCore/qsharedpointer.h \ + ../../../corelib/tools/qsharedpointer.h \ + ../../../../include/QtCore/qsharedpointer_impl.h \ + ../../../corelib/tools/qsharedpointer_impl.h \ + ../../../../include/QtCore/qsharedmemory.h \ + ../../../corelib/kernel/qsharedmemory.h \ + ../../../../include/QtCore/qsignalmapper.h \ + ../../../corelib/kernel/qsignalmapper.h \ + ../../../../include/QtCore/qsocketnotifier.h \ + ../../../corelib/kernel/qsocketnotifier.h \ + ../../../../include/QtCore/qsystemsemaphore.h \ + ../../../corelib/kernel/qsystemsemaphore.h \ + ../../../../include/QtCore/qtimer.h \ + ../../../corelib/kernel/qtimer.h \ + ../../../../include/QtCore/qtranslator.h \ + ../../../corelib/kernel/qtranslator.h \ + ../../../../include/QtCore/qwineventnotifier.h \ + ../../../corelib/kernel/qwineventnotifier.h \ + ../../../../include/QtCore/qmimedatabase.h \ + ../../../corelib/mimetypes/qmimedatabase.h \ + ../../../../include/QtCore/qmimetype.h \ + ../../../corelib/mimetypes/qmimetype.h \ + ../../../../include/QtCore/qfactoryinterface.h \ + ../../../corelib/plugin/qfactoryinterface.h \ + ../../../../include/QtCore/qlibrary.h \ + ../../../corelib/plugin/qlibrary.h \ + ../../../../include/QtCore/qplugin.h \ + ../../../corelib/plugin/qplugin.h \ + ../../../../include/QtCore/qpluginloader.h \ + ../../../corelib/plugin/qpluginloader.h \ + ../../../../include/QtCore/quuid.h \ + ../../../corelib/plugin/quuid.h \ + ../../../../include/QtCore/qabstractstate.h \ + ../../../corelib/statemachine/qabstractstate.h \ + ../../../../include/QtCore/qabstracttransition.h \ + ../../../corelib/statemachine/qabstracttransition.h \ + ../../../../include/QtCore/qeventtransition.h \ + ../../../corelib/statemachine/qeventtransition.h \ + ../../../../include/QtCore/qfinalstate.h \ + ../../../corelib/statemachine/qfinalstate.h \ + ../../../../include/QtCore/qhistorystate.h \ + ../../../corelib/statemachine/qhistorystate.h \ + ../../../../include/QtCore/qsignaltransition.h \ + ../../../corelib/statemachine/qsignaltransition.h \ + ../../../../include/QtCore/qstate.h \ + ../../../corelib/statemachine/qstate.h \ + ../../../../include/QtCore/qstatemachine.h \ + ../../../corelib/statemachine/qstatemachine.h \ + ../../../../include/QtCore/qexception.h \ + ../../../corelib/thread/qexception.h \ + ../../../../include/QtCore/qfuture.h \ + ../../../corelib/thread/qfuture.h \ + ../../../../include/QtCore/qfutureinterface.h \ + ../../../corelib/thread/qfutureinterface.h \ + ../../../../include/QtCore/qrunnable.h \ + ../../../corelib/thread/qrunnable.h \ + ../../../../include/QtCore/qresultstore.h \ + ../../../corelib/thread/qresultstore.h \ + ../../../../include/QtCore/qfuturesynchronizer.h \ + ../../../corelib/thread/qfuturesynchronizer.h \ + ../../../../include/QtCore/qfuturewatcher.h \ + ../../../corelib/thread/qfuturewatcher.h \ + ../../../../include/QtCore/qreadwritelock.h \ + ../../../corelib/thread/qreadwritelock.h \ + ../../../../include/QtCore/qsemaphore.h \ + ../../../corelib/thread/qsemaphore.h \ + ../../../../include/QtCore/qthread.h \ + ../../../corelib/thread/qthread.h \ + ../../../../include/QtCore/qthreadpool.h \ + ../../../corelib/thread/qthreadpool.h \ + ../../../../include/QtCore/qthreadstorage.h \ + ../../../corelib/thread/qthreadstorage.h \ + ../../../../include/QtCore/qwaitcondition.h \ + ../../../corelib/thread/qwaitcondition.h \ + ../../../../include/QtCore/qarraydataops.h \ + ../../../corelib/tools/qarraydataops.h \ + ../../../../include/QtCore/qarraydatapointer.h \ + ../../../corelib/tools/qarraydatapointer.h \ + ../../../../include/QtCore/qbitarray.h \ + ../../../corelib/tools/qbitarray.h \ + ../../../../include/QtCore/qbytearraymatcher.h \ + ../../../corelib/tools/qbytearraymatcher.h \ + ../../../../include/QtCore/qcache.h \ + ../../../corelib/tools/qcache.h \ + ../../../../include/QtCore/qcollator.h \ + ../../../corelib/tools/qcollator.h \ + ../../../../include/QtCore/qcommandlineoption.h \ + ../../../corelib/tools/qcommandlineoption.h \ + ../../../../include/QtCore/qcommandlineparser.h \ + ../../../corelib/tools/qcommandlineparser.h \ + ../../../../include/QtCore/qcryptographichash.h \ + ../../../corelib/tools/qcryptographichash.h \ + ../../../../include/QtCore/qelapsedtimer.h \ + ../../../corelib/tools/qelapsedtimer.h \ + ../../../../include/QtCore/qline.h \ + ../../../corelib/tools/qline.h \ + ../../../../include/QtCore/qlinkedlist.h \ + ../../../corelib/tools/qlinkedlist.h \ + ../../../../include/QtCore/qmargins.h \ + ../../../corelib/tools/qmargins.h \ + ../../../../include/QtCore/qmessageauthenticationcode.h \ + ../../../corelib/tools/qmessageauthenticationcode.h \ + ../../../../include/QtCore/qqueue.h \ + ../../../corelib/tools/qqueue.h \ + ../../../../include/QtCore/qrect.h \ + ../../../corelib/tools/qrect.h \ + ../../../../include/QtCore/qsize.h \ + ../../../corelib/tools/qsize.h \ + ../../../../include/QtCore/qregularexpression.h \ + ../../../corelib/tools/qregularexpression.h \ + ../../../../include/QtCore/qscopedvaluerollback.h \ + ../../../corelib/tools/qscopedvaluerollback.h \ + ../../../../include/QtCore/qstack.h \ + ../../../corelib/tools/qstack.h \ + ../../../../include/QtCore/qtextboundaryfinder.h \ + ../../../corelib/tools/qtextboundaryfinder.h \ + ../../../../include/QtCore/qtimeline.h \ + ../../../corelib/tools/qtimeline.h \ + ../../../../include/QtCore/qtimezone.h \ + ../../../corelib/tools/qtimezone.h \ + ../../../../include/QtCore/qxmlstream.h \ + ../../../corelib/xml/qxmlstream.h \ + ../../../../include/QtCore/qtcoreversion.h \ + ../../../../include/QtDBus/qdbusabstractadaptor.h \ + ../../../dbus/qdbusabstractadaptor.h \ + ../../../../include/QtDBus/qdbusmacros.h \ + ../../../dbus/qdbusmacros.h \ + ../../../../include/QtDBus/qdbusabstractinterface.h \ + ../../../dbus/qdbusabstractinterface.h \ + ../../../../include/QtDBus/qdbusmessage.h \ + ../../../dbus/qdbusmessage.h \ + ../../../../include/QtDBus/qdbuserror.h \ + ../../../dbus/qdbuserror.h \ + ../../../../include/QtDBus/qdbusextratypes.h \ + ../../../dbus/qdbusextratypes.h \ + ../../../../include/QtDBus/qdbusconnection.h \ + ../../../dbus/qdbusconnection.h \ + ../../../../include/QtDBus/qdbusargument.h \ + ../../../dbus/qdbusargument.h \ + ../../../../include/QtDBus/qdbusconnectioninterface.h \ + ../../../dbus/qdbusconnectioninterface.h \ + ../../../../include/QtDBus/qdbusreply.h \ + ../../../dbus/qdbusreply.h \ + ../../../../include/QtDBus/qdbuspendingreply.h \ + ../../../dbus/qdbuspendingreply.h \ + ../../../../include/QtDBus/qdbuspendingcall.h \ + ../../../dbus/qdbuspendingcall.h \ + ../../../../include/QtDBus/qdbuscontext.h \ + ../../../dbus/qdbuscontext.h \ + ../../../../include/QtDBus/qdbusinterface.h \ + ../../../dbus/qdbusinterface.h \ + ../../../../include/QtDBus/qdbusmetatype.h \ + ../../../dbus/qdbusmetatype.h \ + ../../../../include/QtDBus/qdbusserver.h \ + ../../../dbus/qdbusserver.h \ + ../../../../include/QtDBus/qdbusservicewatcher.h \ + ../../../dbus/qdbusservicewatcher.h \ + ../../../../include/QtDBus/qdbusunixfiledescriptor.h \ + ../../../dbus/qdbusunixfiledescriptor.h \ + ../../../../include/QtDBus/qdbusvirtualobject.h \ + ../../../dbus/qdbusvirtualobject.h \ + ../../../../include/QtDBus/qtdbusversion.h \ + fcitxqtinputmethoditem.h \ + fcitxqtdbusaddons_export.h \ + ../../../../include/QtCore/QMetaType \ + ../../../../include/QtDBus/QDBusArgument \ + fcitxqtinputmethodproxy.h + /home/antanubis/TBuild/Libraries/QtStatic/qtbase/bin/moc $(DEFINES) -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/mkspecs/linux-g++ -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/src/plugins/platforminputcontexts/fcitx -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0 -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtDBus -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtCore -I/usr/include/c++/4.8 -I/usr/include/x86_64-linux-gnu/c++/4.8 -I/usr/include/c++/4.8/backward -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include fcitxqtinputmethodproxy.h -o .moc/moc_fcitxqtinputmethodproxy.cpp + +.moc/moc_fcitxqtkeyboardproxy.cpp: ../../../../include/QtCore/QObject \ + ../../../../include/QtCore/qobject.h \ + ../../../corelib/kernel/qobject.h \ + ../../../../include/QtCore/qobjectdefs.h \ + ../../../corelib/kernel/qobjectdefs.h \ + ../../../../include/QtCore/qnamespace.h \ + ../../../corelib/global/qnamespace.h \ + ../../../../include/QtCore/qglobal.h \ + ../../../corelib/global/qglobal.h \ + ../../../../include/QtCore/qconfig.h \ + ../../../corelib/global/qconfig.h \ + ../../../../include/QtCore/qfeatures.h \ + ../../../corelib/global/qfeatures.h \ + ../../../../include/QtCore/qsystemdetection.h \ + ../../../corelib/global/qsystemdetection.h \ + ../../../../include/QtCore/qprocessordetection.h \ + ../../../corelib/global/qprocessordetection.h \ + ../../../../include/QtCore/qcompilerdetection.h \ + ../../../corelib/global/qcompilerdetection.h \ + ../../../../include/QtCore/qtypeinfo.h \ + ../../../corelib/global/qtypeinfo.h \ + ../../../../include/QtCore/qtypetraits.h \ + ../../../corelib/global/qtypetraits.h \ + ../../../../include/QtCore/qsysinfo.h \ + ../../../corelib/global/qsysinfo.h \ + ../../../../include/QtCore/qlogging.h \ + ../../../corelib/global/qlogging.h \ + ../../../../include/QtCore/qflags.h \ + ../../../corelib/global/qflags.h \ + ../../../../include/QtCore/qatomic.h \ + ../../../corelib/thread/qatomic.h \ + ../../../../include/QtCore/qbasicatomic.h \ + ../../../corelib/thread/qbasicatomic.h \ + ../../../../include/QtCore/qatomic_bootstrap.h \ + ../../../corelib/arch/qatomic_bootstrap.h \ + ../../../../include/QtCore/qgenericatomic.h \ + ../../../corelib/thread/qgenericatomic.h \ + ../../../../include/QtCore/qatomic_cxx11.h \ + ../../../corelib/arch/qatomic_cxx11.h \ + ../../../../include/QtCore/qatomic_gcc.h \ + ../../../corelib/arch/qatomic_gcc.h \ + ../../../../include/QtCore/qatomic_msvc.h \ + ../../../corelib/arch/qatomic_msvc.h \ + ../../../../include/QtCore/qatomic_armv7.h \ + ../../../corelib/arch/qatomic_armv7.h \ + ../../../../include/QtCore/qatomic_armv6.h \ + ../../../corelib/arch/qatomic_armv6.h \ + ../../../../include/QtCore/qatomic_armv5.h \ + ../../../corelib/arch/qatomic_armv5.h \ + ../../../../include/QtCore/qatomic_ia64.h \ + ../../../corelib/arch/qatomic_ia64.h \ + ../../../../include/QtCore/qatomic_mips.h \ + ../../../corelib/arch/qatomic_mips.h \ + ../../../../include/QtCore/qatomic_x86.h \ + ../../../corelib/arch/qatomic_x86.h \ + ../../../../include/QtCore/qatomic_unix.h \ + ../../../corelib/arch/qatomic_unix.h \ + ../../../../include/QtCore/qglobalstatic.h \ + ../../../corelib/global/qglobalstatic.h \ + ../../../../include/QtCore/qmutex.h \ + ../../../corelib/thread/qmutex.h \ + ../../../../include/QtCore/qnumeric.h \ + ../../../corelib/global/qnumeric.h \ + ../../../../include/QtCore/qobjectdefs_impl.h \ + ../../../corelib/kernel/qobjectdefs_impl.h \ + ../../../../include/QtCore/qstring.h \ + ../../../corelib/tools/qstring.h \ + ../../../../include/QtCore/qchar.h \ + ../../../corelib/tools/qchar.h \ + ../../../../include/QtCore/qbytearray.h \ + ../../../corelib/tools/qbytearray.h \ + ../../../../include/QtCore/qrefcount.h \ + ../../../corelib/tools/qrefcount.h \ + ../../../../include/QtCore/qarraydata.h \ + ../../../corelib/tools/qarraydata.h \ + ../../../../include/QtCore/qstringbuilder.h \ + ../../../corelib/tools/qstringbuilder.h \ + ../../../../include/QtCore/qlist.h \ + ../../../corelib/tools/qlist.h \ + ../../../../include/QtCore/qalgorithms.h \ + ../../../corelib/tools/qalgorithms.h \ + ../../../../include/QtCore/qiterator.h \ + ../../../corelib/tools/qiterator.h \ + ../../../../include/QtCore/qbytearraylist.h \ + ../../../corelib/tools/qbytearraylist.h \ + ../../../../include/QtCore/qstringlist.h \ + ../../../corelib/tools/qstringlist.h \ + ../../../../include/QtCore/qregexp.h \ + ../../../corelib/tools/qregexp.h \ + ../../../../include/QtCore/qstringmatcher.h \ + ../../../corelib/tools/qstringmatcher.h \ + ../../../../include/QtCore/qcoreevent.h \ + ../../../corelib/kernel/qcoreevent.h \ + ../../../../include/QtCore/qscopedpointer.h \ + ../../../corelib/tools/qscopedpointer.h \ + ../../../../include/QtCore/qmetatype.h \ + ../../../corelib/kernel/qmetatype.h \ + ../../../../include/QtCore/qvarlengtharray.h \ + ../../../corelib/tools/qvarlengtharray.h \ + ../../../../include/QtCore/qcontainerfwd.h \ + ../../../corelib/tools/qcontainerfwd.h \ + ../../../../include/QtCore/qisenum.h \ + ../../../corelib/global/qisenum.h \ + ../../../../include/QtCore/qobject_impl.h \ + ../../../corelib/kernel/qobject_impl.h \ + ../../../../include/QtCore/QByteArray \ + ../../../../include/QtCore/QList \ + ../../../../include/QtCore/QMap \ + ../../../../include/QtCore/qmap.h \ + ../../../corelib/tools/qmap.h \ + ../../../../include/QtCore/qpair.h \ + ../../../corelib/tools/qpair.h \ + ../../../../include/QtCore/qdebug.h \ + ../../../corelib/io/qdebug.h \ + ../../../../include/QtCore/qhash.h \ + ../../../corelib/tools/qhash.h \ + ../../../../include/QtCore/qtextstream.h \ + ../../../corelib/io/qtextstream.h \ + ../../../../include/QtCore/qiodevice.h \ + ../../../corelib/io/qiodevice.h \ + ../../../../include/QtCore/qlocale.h \ + ../../../corelib/tools/qlocale.h \ + ../../../../include/QtCore/qvariant.h \ + ../../../corelib/kernel/qvariant.h \ + ../../../../include/QtCore/qshareddata.h \ + ../../../corelib/tools/qshareddata.h \ + ../../../../include/QtCore/qvector.h \ + ../../../corelib/tools/qvector.h \ + ../../../../include/QtCore/qpoint.h \ + ../../../corelib/tools/qpoint.h \ + ../../../../include/QtCore/qset.h \ + ../../../corelib/tools/qset.h \ + ../../../../include/QtCore/qcontiguouscache.h \ + ../../../corelib/tools/qcontiguouscache.h \ + ../../../../include/QtCore/QString \ + ../../../../include/QtCore/QStringList \ + ../../../../include/QtCore/QVariant \ + ../../../../include/QtDBus/QtDBus \ + ../../../../include/QtDBus/QtDBusDepends \ + ../../../../include/QtCore/QtCore \ + ../../../../include/QtCore/QtCoreDepends \ + ../../../../include/QtCore/qabstractanimation.h \ + ../../../corelib/animation/qabstractanimation.h \ + ../../../../include/QtCore/qanimationgroup.h \ + ../../../corelib/animation/qanimationgroup.h \ + ../../../../include/QtCore/qparallelanimationgroup.h \ + ../../../corelib/animation/qparallelanimationgroup.h \ + ../../../../include/QtCore/qpauseanimation.h \ + ../../../corelib/animation/qpauseanimation.h \ + ../../../../include/QtCore/qpropertyanimation.h \ + ../../../corelib/animation/qpropertyanimation.h \ + ../../../../include/QtCore/qvariantanimation.h \ + ../../../corelib/animation/qvariantanimation.h \ + ../../../../include/QtCore/qeasingcurve.h \ + ../../../corelib/tools/qeasingcurve.h \ + ../../../../include/QtCore/qsequentialanimationgroup.h \ + ../../../corelib/animation/qsequentialanimationgroup.h \ + ../../../../include/QtCore/qtextcodec.h \ + ../../../corelib/codecs/qtextcodec.h \ + ../../../../include/QtCore/qendian.h \ + ../../../corelib/global/qendian.h \ + ../../../../include/QtCore/qlibraryinfo.h \ + ../../../corelib/global/qlibraryinfo.h \ + ../../../../include/QtCore/qdatetime.h \ + ../../../corelib/tools/qdatetime.h \ + ../../../../include/QtCore/qbuffer.h \ + ../../../corelib/io/qbuffer.h \ + ../../../../include/QtCore/qdatastream.h \ + ../../../corelib/io/qdatastream.h \ + ../../../../include/QtCore/qdir.h \ + ../../../corelib/io/qdir.h \ + ../../../../include/QtCore/qfileinfo.h \ + ../../../corelib/io/qfileinfo.h \ + ../../../../include/QtCore/qfile.h \ + ../../../corelib/io/qfile.h \ + ../../../../include/QtCore/qfiledevice.h \ + ../../../corelib/io/qfiledevice.h \ + ../../../../include/QtCore/qdiriterator.h \ + ../../../corelib/io/qdiriterator.h \ + ../../../../include/QtCore/qfileselector.h \ + ../../../corelib/io/qfileselector.h \ + ../../../../include/QtCore/qfilesystemwatcher.h \ + ../../../corelib/io/qfilesystemwatcher.h \ + ../../../../include/QtCore/qlockfile.h \ + ../../../corelib/io/qlockfile.h \ + ../../../../include/QtCore/qloggingcategory.h \ + ../../../corelib/io/qloggingcategory.h \ + ../../../../include/QtCore/qprocess.h \ + ../../../corelib/io/qprocess.h \ + ../../../../include/QtCore/qresource.h \ + ../../../corelib/io/qresource.h \ + ../../../../include/QtCore/qsavefile.h \ + ../../../corelib/io/qsavefile.h \ + ../../../../include/QtCore/qsettings.h \ + ../../../corelib/io/qsettings.h \ + ../../../../include/QtCore/qstandardpaths.h \ + ../../../corelib/io/qstandardpaths.h \ + ../../../../include/QtCore/qstorageinfo.h \ + ../../../corelib/io/qstorageinfo.h \ + ../../../../include/QtCore/qtemporarydir.h \ + ../../../corelib/io/qtemporarydir.h \ + ../../../../include/QtCore/QScopedPointer \ + ../../../../include/QtCore/qtemporaryfile.h \ + ../../../corelib/io/qtemporaryfile.h \ + ../../../../include/QtCore/qurl.h \ + ../../../corelib/io/qurl.h \ + ../../../../include/QtCore/qurlquery.h \ + ../../../corelib/io/qurlquery.h \ + ../../../../include/QtCore/qabstractitemmodel.h \ + ../../../corelib/itemmodels/qabstractitemmodel.h \ + ../../../../include/QtCore/qabstractproxymodel.h \ + ../../../corelib/itemmodels/qabstractproxymodel.h \ + ../../../../include/QtCore/qidentityproxymodel.h \ + ../../../corelib/itemmodels/qidentityproxymodel.h \ + ../../../../include/QtCore/qitemselectionmodel.h \ + ../../../corelib/itemmodels/qitemselectionmodel.h \ + ../../../../include/QtCore/qsortfilterproxymodel.h \ + ../../../corelib/itemmodels/qsortfilterproxymodel.h \ + ../../../../include/QtCore/qstringlistmodel.h \ + ../../../corelib/itemmodels/qstringlistmodel.h \ + ../../../../include/QtCore/qjsonarray.h \ + ../../../corelib/json/qjsonarray.h \ + ../../../../include/QtCore/qjsonvalue.h \ + ../../../corelib/json/qjsonvalue.h \ + ../../../../include/QtCore/qjsondocument.h \ + ../../../corelib/json/qjsondocument.h \ + ../../../../include/QtCore/qjsonobject.h \ + ../../../corelib/json/qjsonobject.h \ + ../../../../include/QtCore/qabstracteventdispatcher.h \ + ../../../corelib/kernel/qabstracteventdispatcher.h \ + ../../../../include/QtCore/qeventloop.h \ + ../../../corelib/kernel/qeventloop.h \ + ../../../../include/QtCore/qabstractnativeeventfilter.h \ + ../../../corelib/kernel/qabstractnativeeventfilter.h \ + ../../../../include/QtCore/qbasictimer.h \ + ../../../corelib/kernel/qbasictimer.h \ + ../../../../include/QtCore/qcoreapplication.h \ + ../../../corelib/kernel/qcoreapplication.h \ + ../../../../include/QtCore/qmath.h \ + ../../../corelib/kernel/qmath.h \ + ../../../../include/QtCore/qmetaobject.h \ + ../../../corelib/kernel/qmetaobject.h \ + ../../../../include/QtCore/qmimedata.h \ + ../../../corelib/kernel/qmimedata.h \ + ../../../../include/QtCore/qobjectcleanuphandler.h \ + ../../../corelib/kernel/qobjectcleanuphandler.h \ + ../../../../include/QtCore/qpointer.h \ + ../../../corelib/kernel/qpointer.h \ + ../../../../include/QtCore/qsharedpointer.h \ + ../../../corelib/tools/qsharedpointer.h \ + ../../../../include/QtCore/qsharedpointer_impl.h \ + ../../../corelib/tools/qsharedpointer_impl.h \ + ../../../../include/QtCore/qsharedmemory.h \ + ../../../corelib/kernel/qsharedmemory.h \ + ../../../../include/QtCore/qsignalmapper.h \ + ../../../corelib/kernel/qsignalmapper.h \ + ../../../../include/QtCore/qsocketnotifier.h \ + ../../../corelib/kernel/qsocketnotifier.h \ + ../../../../include/QtCore/qsystemsemaphore.h \ + ../../../corelib/kernel/qsystemsemaphore.h \ + ../../../../include/QtCore/qtimer.h \ + ../../../corelib/kernel/qtimer.h \ + ../../../../include/QtCore/qtranslator.h \ + ../../../corelib/kernel/qtranslator.h \ + ../../../../include/QtCore/qwineventnotifier.h \ + ../../../corelib/kernel/qwineventnotifier.h \ + ../../../../include/QtCore/qmimedatabase.h \ + ../../../corelib/mimetypes/qmimedatabase.h \ + ../../../../include/QtCore/qmimetype.h \ + ../../../corelib/mimetypes/qmimetype.h \ + ../../../../include/QtCore/qfactoryinterface.h \ + ../../../corelib/plugin/qfactoryinterface.h \ + ../../../../include/QtCore/qlibrary.h \ + ../../../corelib/plugin/qlibrary.h \ + ../../../../include/QtCore/qplugin.h \ + ../../../corelib/plugin/qplugin.h \ + ../../../../include/QtCore/qpluginloader.h \ + ../../../corelib/plugin/qpluginloader.h \ + ../../../../include/QtCore/quuid.h \ + ../../../corelib/plugin/quuid.h \ + ../../../../include/QtCore/qabstractstate.h \ + ../../../corelib/statemachine/qabstractstate.h \ + ../../../../include/QtCore/qabstracttransition.h \ + ../../../corelib/statemachine/qabstracttransition.h \ + ../../../../include/QtCore/qeventtransition.h \ + ../../../corelib/statemachine/qeventtransition.h \ + ../../../../include/QtCore/qfinalstate.h \ + ../../../corelib/statemachine/qfinalstate.h \ + ../../../../include/QtCore/qhistorystate.h \ + ../../../corelib/statemachine/qhistorystate.h \ + ../../../../include/QtCore/qsignaltransition.h \ + ../../../corelib/statemachine/qsignaltransition.h \ + ../../../../include/QtCore/qstate.h \ + ../../../corelib/statemachine/qstate.h \ + ../../../../include/QtCore/qstatemachine.h \ + ../../../corelib/statemachine/qstatemachine.h \ + ../../../../include/QtCore/qexception.h \ + ../../../corelib/thread/qexception.h \ + ../../../../include/QtCore/qfuture.h \ + ../../../corelib/thread/qfuture.h \ + ../../../../include/QtCore/qfutureinterface.h \ + ../../../corelib/thread/qfutureinterface.h \ + ../../../../include/QtCore/qrunnable.h \ + ../../../corelib/thread/qrunnable.h \ + ../../../../include/QtCore/qresultstore.h \ + ../../../corelib/thread/qresultstore.h \ + ../../../../include/QtCore/qfuturesynchronizer.h \ + ../../../corelib/thread/qfuturesynchronizer.h \ + ../../../../include/QtCore/qfuturewatcher.h \ + ../../../corelib/thread/qfuturewatcher.h \ + ../../../../include/QtCore/qreadwritelock.h \ + ../../../corelib/thread/qreadwritelock.h \ + ../../../../include/QtCore/qsemaphore.h \ + ../../../corelib/thread/qsemaphore.h \ + ../../../../include/QtCore/qthread.h \ + ../../../corelib/thread/qthread.h \ + ../../../../include/QtCore/qthreadpool.h \ + ../../../corelib/thread/qthreadpool.h \ + ../../../../include/QtCore/qthreadstorage.h \ + ../../../corelib/thread/qthreadstorage.h \ + ../../../../include/QtCore/qwaitcondition.h \ + ../../../corelib/thread/qwaitcondition.h \ + ../../../../include/QtCore/qarraydataops.h \ + ../../../corelib/tools/qarraydataops.h \ + ../../../../include/QtCore/qarraydatapointer.h \ + ../../../corelib/tools/qarraydatapointer.h \ + ../../../../include/QtCore/qbitarray.h \ + ../../../corelib/tools/qbitarray.h \ + ../../../../include/QtCore/qbytearraymatcher.h \ + ../../../corelib/tools/qbytearraymatcher.h \ + ../../../../include/QtCore/qcache.h \ + ../../../corelib/tools/qcache.h \ + ../../../../include/QtCore/qcollator.h \ + ../../../corelib/tools/qcollator.h \ + ../../../../include/QtCore/qcommandlineoption.h \ + ../../../corelib/tools/qcommandlineoption.h \ + ../../../../include/QtCore/qcommandlineparser.h \ + ../../../corelib/tools/qcommandlineparser.h \ + ../../../../include/QtCore/qcryptographichash.h \ + ../../../corelib/tools/qcryptographichash.h \ + ../../../../include/QtCore/qelapsedtimer.h \ + ../../../corelib/tools/qelapsedtimer.h \ + ../../../../include/QtCore/qline.h \ + ../../../corelib/tools/qline.h \ + ../../../../include/QtCore/qlinkedlist.h \ + ../../../corelib/tools/qlinkedlist.h \ + ../../../../include/QtCore/qmargins.h \ + ../../../corelib/tools/qmargins.h \ + ../../../../include/QtCore/qmessageauthenticationcode.h \ + ../../../corelib/tools/qmessageauthenticationcode.h \ + ../../../../include/QtCore/qqueue.h \ + ../../../corelib/tools/qqueue.h \ + ../../../../include/QtCore/qrect.h \ + ../../../corelib/tools/qrect.h \ + ../../../../include/QtCore/qsize.h \ + ../../../corelib/tools/qsize.h \ + ../../../../include/QtCore/qregularexpression.h \ + ../../../corelib/tools/qregularexpression.h \ + ../../../../include/QtCore/qscopedvaluerollback.h \ + ../../../corelib/tools/qscopedvaluerollback.h \ + ../../../../include/QtCore/qstack.h \ + ../../../corelib/tools/qstack.h \ + ../../../../include/QtCore/qtextboundaryfinder.h \ + ../../../corelib/tools/qtextboundaryfinder.h \ + ../../../../include/QtCore/qtimeline.h \ + ../../../corelib/tools/qtimeline.h \ + ../../../../include/QtCore/qtimezone.h \ + ../../../corelib/tools/qtimezone.h \ + ../../../../include/QtCore/qxmlstream.h \ + ../../../corelib/xml/qxmlstream.h \ + ../../../../include/QtCore/qtcoreversion.h \ + ../../../../include/QtDBus/qdbusabstractadaptor.h \ + ../../../dbus/qdbusabstractadaptor.h \ + ../../../../include/QtDBus/qdbusmacros.h \ + ../../../dbus/qdbusmacros.h \ + ../../../../include/QtDBus/qdbusabstractinterface.h \ + ../../../dbus/qdbusabstractinterface.h \ + ../../../../include/QtDBus/qdbusmessage.h \ + ../../../dbus/qdbusmessage.h \ + ../../../../include/QtDBus/qdbuserror.h \ + ../../../dbus/qdbuserror.h \ + ../../../../include/QtDBus/qdbusextratypes.h \ + ../../../dbus/qdbusextratypes.h \ + ../../../../include/QtDBus/qdbusconnection.h \ + ../../../dbus/qdbusconnection.h \ + ../../../../include/QtDBus/qdbusargument.h \ + ../../../dbus/qdbusargument.h \ + ../../../../include/QtDBus/qdbusconnectioninterface.h \ + ../../../dbus/qdbusconnectioninterface.h \ + ../../../../include/QtDBus/qdbusreply.h \ + ../../../dbus/qdbusreply.h \ + ../../../../include/QtDBus/qdbuspendingreply.h \ + ../../../dbus/qdbuspendingreply.h \ + ../../../../include/QtDBus/qdbuspendingcall.h \ + ../../../dbus/qdbuspendingcall.h \ + ../../../../include/QtDBus/qdbuscontext.h \ + ../../../dbus/qdbuscontext.h \ + ../../../../include/QtDBus/qdbusinterface.h \ + ../../../dbus/qdbusinterface.h \ + ../../../../include/QtDBus/qdbusmetatype.h \ + ../../../dbus/qdbusmetatype.h \ + ../../../../include/QtDBus/qdbusserver.h \ + ../../../dbus/qdbusserver.h \ + ../../../../include/QtDBus/qdbusservicewatcher.h \ + ../../../dbus/qdbusservicewatcher.h \ + ../../../../include/QtDBus/qdbusunixfiledescriptor.h \ + ../../../dbus/qdbusunixfiledescriptor.h \ + ../../../../include/QtDBus/qdbusvirtualobject.h \ + ../../../dbus/qdbusvirtualobject.h \ + ../../../../include/QtDBus/qtdbusversion.h \ + fcitxqtkeyboardlayout.h \ + fcitxqtdbusaddons_export.h \ + ../../../../include/QtCore/QMetaType \ + ../../../../include/QtDBus/QDBusArgument \ + fcitxqtkeyboardproxy.h + /home/antanubis/TBuild/Libraries/QtStatic/qtbase/bin/moc $(DEFINES) -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/mkspecs/linux-g++ -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/src/plugins/platforminputcontexts/fcitx -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0 -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtDBus -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtCore -I/usr/include/c++/4.8 -I/usr/include/x86_64-linux-gnu/c++/4.8 -I/usr/include/c++/4.8/backward -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include fcitxqtkeyboardproxy.h -o .moc/moc_fcitxqtkeyboardproxy.cpp + +.moc/moc_main.cpp: ../../../../include/QtGui/5.5.0/QtGui/qpa/qplatforminputcontextplugin_p.h \ + ../../../gui/kernel/qplatforminputcontextplugin_p.h \ + ../../../../include/QtCore/qplugin.h \ + ../../../corelib/plugin/qplugin.h \ + ../../../../include/QtCore/qobject.h \ + ../../../corelib/kernel/qobject.h \ + ../../../../include/QtCore/qobjectdefs.h \ + ../../../corelib/kernel/qobjectdefs.h \ + ../../../../include/QtCore/qnamespace.h \ + ../../../corelib/global/qnamespace.h \ + ../../../../include/QtCore/qglobal.h \ + ../../../corelib/global/qglobal.h \ + ../../../../include/QtCore/qconfig.h \ + ../../../corelib/global/qconfig.h \ + ../../../../include/QtCore/qfeatures.h \ + ../../../corelib/global/qfeatures.h \ + ../../../../include/QtCore/qsystemdetection.h \ + ../../../corelib/global/qsystemdetection.h \ + ../../../../include/QtCore/qprocessordetection.h \ + ../../../corelib/global/qprocessordetection.h \ + ../../../../include/QtCore/qcompilerdetection.h \ + ../../../corelib/global/qcompilerdetection.h \ + ../../../../include/QtCore/qtypeinfo.h \ + ../../../corelib/global/qtypeinfo.h \ + ../../../../include/QtCore/qtypetraits.h \ + ../../../corelib/global/qtypetraits.h \ + ../../../../include/QtCore/qsysinfo.h \ + ../../../corelib/global/qsysinfo.h \ + ../../../../include/QtCore/qlogging.h \ + ../../../corelib/global/qlogging.h \ + ../../../../include/QtCore/qflags.h \ + ../../../corelib/global/qflags.h \ + ../../../../include/QtCore/qatomic.h \ + ../../../corelib/thread/qatomic.h \ + ../../../../include/QtCore/qbasicatomic.h \ + ../../../corelib/thread/qbasicatomic.h \ + ../../../../include/QtCore/qatomic_bootstrap.h \ + ../../../corelib/arch/qatomic_bootstrap.h \ + ../../../../include/QtCore/qgenericatomic.h \ + ../../../corelib/thread/qgenericatomic.h \ + ../../../../include/QtCore/qatomic_cxx11.h \ + ../../../corelib/arch/qatomic_cxx11.h \ + ../../../../include/QtCore/qatomic_gcc.h \ + ../../../corelib/arch/qatomic_gcc.h \ + ../../../../include/QtCore/qatomic_msvc.h \ + ../../../corelib/arch/qatomic_msvc.h \ + ../../../../include/QtCore/qatomic_armv7.h \ + ../../../corelib/arch/qatomic_armv7.h \ + ../../../../include/QtCore/qatomic_armv6.h \ + ../../../corelib/arch/qatomic_armv6.h \ + ../../../../include/QtCore/qatomic_armv5.h \ + ../../../corelib/arch/qatomic_armv5.h \ + ../../../../include/QtCore/qatomic_ia64.h \ + ../../../corelib/arch/qatomic_ia64.h \ + ../../../../include/QtCore/qatomic_mips.h \ + ../../../corelib/arch/qatomic_mips.h \ + ../../../../include/QtCore/qatomic_x86.h \ + ../../../corelib/arch/qatomic_x86.h \ + ../../../../include/QtCore/qatomic_unix.h \ + ../../../corelib/arch/qatomic_unix.h \ + ../../../../include/QtCore/qglobalstatic.h \ + ../../../corelib/global/qglobalstatic.h \ + ../../../../include/QtCore/qmutex.h \ + ../../../corelib/thread/qmutex.h \ + ../../../../include/QtCore/qnumeric.h \ + ../../../corelib/global/qnumeric.h \ + ../../../../include/QtCore/qobjectdefs_impl.h \ + ../../../corelib/kernel/qobjectdefs_impl.h \ + ../../../../include/QtCore/qstring.h \ + ../../../corelib/tools/qstring.h \ + ../../../../include/QtCore/qchar.h \ + ../../../corelib/tools/qchar.h \ + ../../../../include/QtCore/qbytearray.h \ + ../../../corelib/tools/qbytearray.h \ + ../../../../include/QtCore/qrefcount.h \ + ../../../corelib/tools/qrefcount.h \ + ../../../../include/QtCore/qarraydata.h \ + ../../../corelib/tools/qarraydata.h \ + ../../../../include/QtCore/qstringbuilder.h \ + ../../../corelib/tools/qstringbuilder.h \ + ../../../../include/QtCore/qlist.h \ + ../../../corelib/tools/qlist.h \ + ../../../../include/QtCore/qalgorithms.h \ + ../../../corelib/tools/qalgorithms.h \ + ../../../../include/QtCore/qiterator.h \ + ../../../corelib/tools/qiterator.h \ + ../../../../include/QtCore/qbytearraylist.h \ + ../../../corelib/tools/qbytearraylist.h \ + ../../../../include/QtCore/qstringlist.h \ + ../../../corelib/tools/qstringlist.h \ + ../../../../include/QtCore/qregexp.h \ + ../../../corelib/tools/qregexp.h \ + ../../../../include/QtCore/qstringmatcher.h \ + ../../../corelib/tools/qstringmatcher.h \ + ../../../../include/QtCore/qcoreevent.h \ + ../../../corelib/kernel/qcoreevent.h \ + ../../../../include/QtCore/qscopedpointer.h \ + ../../../corelib/tools/qscopedpointer.h \ + ../../../../include/QtCore/qmetatype.h \ + ../../../corelib/kernel/qmetatype.h \ + ../../../../include/QtCore/qvarlengtharray.h \ + ../../../corelib/tools/qvarlengtharray.h \ + ../../../../include/QtCore/qcontainerfwd.h \ + ../../../corelib/tools/qcontainerfwd.h \ + ../../../../include/QtCore/qisenum.h \ + ../../../corelib/global/qisenum.h \ + ../../../../include/QtCore/qobject_impl.h \ + ../../../corelib/kernel/qobject_impl.h \ + ../../../../include/QtCore/qpointer.h \ + ../../../corelib/kernel/qpointer.h \ + ../../../../include/QtCore/qsharedpointer.h \ + ../../../corelib/tools/qsharedpointer.h \ + ../../../../include/QtCore/qshareddata.h \ + ../../../corelib/tools/qshareddata.h \ + ../../../../include/QtCore/qhash.h \ + ../../../corelib/tools/qhash.h \ + ../../../../include/QtCore/qpair.h \ + ../../../corelib/tools/qpair.h \ + ../../../../include/QtCore/qsharedpointer_impl.h \ + ../../../corelib/tools/qsharedpointer_impl.h \ + ../../../../include/QtCore/qjsonobject.h \ + ../../../corelib/json/qjsonobject.h \ + ../../../../include/QtCore/qjsonvalue.h \ + ../../../corelib/json/qjsonvalue.h \ + ../../../../include/QtCore/qfactoryinterface.h \ + ../../../corelib/plugin/qfactoryinterface.h \ + ../../../../include/QtCore/QStringList \ + qfcitxplatforminputcontext.h \ + ../../../../include/QtGui/5.5.0/QtGui/qpa/qplatforminputcontext.h \ + ../../../gui/kernel/qplatforminputcontext.h \ + ../../../../include/QtGui/qinputmethod.h \ + ../../../gui/kernel/qinputmethod.h \ + ../../../../include/QtGui/QWindow \ + ../../../../include/QtGui/qwindow.h \ + ../../../gui/kernel/qwindow.h \ + ../../../../include/QtCore/QObject \ + ../../../../include/QtCore/QEvent \ + ../../../../include/QtCore/QMargins \ + ../../../../include/QtCore/qmargins.h \ + ../../../corelib/tools/qmargins.h \ + ../../../../include/QtCore/QRect \ + ../../../../include/QtCore/qrect.h \ + ../../../corelib/tools/qrect.h \ + ../../../../include/QtCore/qsize.h \ + ../../../corelib/tools/qsize.h \ + ../../../../include/QtCore/qpoint.h \ + ../../../corelib/tools/qpoint.h \ + ../../../../include/QtGui/qsurface.h \ + ../../../gui/kernel/qsurface.h \ + ../../../../include/QtGui/qsurfaceformat.h \ + ../../../gui/kernel/qsurfaceformat.h \ + ../../../../include/QtGui/qwindowdefs.h \ + ../../../gui/kernel/qwindowdefs.h \ + ../../../../include/QtGui/qwindowdefs_win.h \ + ../../../gui/kernel/qwindowdefs_win.h \ + ../../../../include/QtGui/qicon.h \ + ../../../gui/image/qicon.h \ + ../../../../include/QtGui/qpixmap.h \ + ../../../gui/image/qpixmap.h \ + ../../../../include/QtGui/qpaintdevice.h \ + ../../../gui/painting/qpaintdevice.h \ + ../../../../include/QtGui/qcolor.h \ + ../../../gui/painting/qcolor.h \ + ../../../../include/QtGui/qrgb.h \ + ../../../gui/painting/qrgb.h \ + ../../../../include/QtGui/qimage.h \ + ../../../gui/image/qimage.h \ + ../../../../include/QtGui/qtransform.h \ + ../../../gui/painting/qtransform.h \ + ../../../../include/QtGui/qmatrix.h \ + ../../../gui/painting/qmatrix.h \ + ../../../../include/QtGui/qpolygon.h \ + ../../../gui/painting/qpolygon.h \ + ../../../../include/QtCore/qvector.h \ + ../../../corelib/tools/qvector.h \ + ../../../../include/QtGui/qregion.h \ + ../../../gui/painting/qregion.h \ + ../../../../include/QtCore/qdatastream.h \ + ../../../corelib/io/qdatastream.h \ + ../../../../include/QtCore/qiodevice.h \ + ../../../corelib/io/qiodevice.h \ + ../../../../include/QtCore/qline.h \ + ../../../corelib/tools/qline.h \ + ../../../../include/QtGui/qpainterpath.h \ + ../../../gui/painting/qpainterpath.h \ + ../../../../include/QtGui/qpixelformat.h \ + ../../../gui/kernel/qpixelformat.h \ + ../../../../include/QtGui/qcursor.h \ + ../../../gui/kernel/qcursor.h \ + ../../../../include/QtGui/QKeyEvent \ + ../../../../include/QtGui/qevent.h \ + ../../../gui/kernel/qevent.h \ + ../../../../include/QtGui/qkeysequence.h \ + ../../../gui/kernel/qkeysequence.h \ + ../../../../include/QtCore/qvariant.h \ + ../../../corelib/kernel/qvariant.h \ + ../../../../include/QtCore/qmap.h \ + ../../../corelib/tools/qmap.h \ + ../../../../include/QtCore/qdebug.h \ + ../../../corelib/io/qdebug.h \ + ../../../../include/QtCore/qtextstream.h \ + ../../../corelib/io/qtextstream.h \ + ../../../../include/QtCore/qlocale.h \ + ../../../corelib/tools/qlocale.h \ + ../../../../include/QtCore/qset.h \ + ../../../corelib/tools/qset.h \ + ../../../../include/QtCore/qcontiguouscache.h \ + ../../../corelib/tools/qcontiguouscache.h \ + ../../../../include/QtCore/qurl.h \ + ../../../corelib/io/qurl.h \ + ../../../../include/QtCore/qurlquery.h \ + ../../../corelib/io/qurlquery.h \ + ../../../../include/QtCore/qfile.h \ + ../../../corelib/io/qfile.h \ + ../../../../include/QtCore/qfiledevice.h \ + ../../../corelib/io/qfiledevice.h \ + ../../../../include/QtGui/qvector2d.h \ + ../../../gui/math3d/qvector2d.h \ + ../../../../include/QtGui/qtouchdevice.h \ + ../../../gui/kernel/qtouchdevice.h \ + ../../../../include/QtDBus/QDBusConnection \ + ../../../../include/QtDBus/qdbusconnection.h \ + ../../../dbus/qdbusconnection.h \ + ../../../../include/QtDBus/qdbusmacros.h \ + ../../../dbus/qdbusmacros.h \ + ../../../../include/QtDBus/QDBusServiceWatcher \ + ../../../../include/QtDBus/qdbusservicewatcher.h \ + ../../../dbus/qdbusservicewatcher.h \ + ../../../../include/QtCore/QPointer \ + ../../../../include/QtCore/QFileSystemWatcher \ + ../../../../include/QtCore/qfilesystemwatcher.h \ + ../../../corelib/io/qfilesystemwatcher.h \ + fcitxqtformattedpreedit.h \ + fcitxqtdbusaddons_export.h \ + ../../../../include/QtCore/QMetaType \ + ../../../../include/QtDBus/QDBusArgument \ + ../../../../include/QtDBus/qdbusargument.h \ + ../../../dbus/qdbusargument.h \ + ../../../../include/QtDBus/qdbusextratypes.h \ + ../../../dbus/qdbusextratypes.h \ + fcitxqtinputcontextproxy.h \ + ../../../../include/QtCore/QByteArray \ + ../../../../include/QtCore/QList \ + ../../../../include/QtCore/QMap \ + ../../../../include/QtCore/QString \ + ../../../../include/QtCore/QVariant \ + ../../../../include/QtDBus/QtDBus \ + ../../../../include/QtDBus/QtDBusDepends \ + ../../../../include/QtCore/QtCore \ + ../../../../include/QtCore/QtCoreDepends \ + ../../../../include/QtCore/qabstractanimation.h \ + ../../../corelib/animation/qabstractanimation.h \ + ../../../../include/QtCore/qanimationgroup.h \ + ../../../corelib/animation/qanimationgroup.h \ + ../../../../include/QtCore/qparallelanimationgroup.h \ + ../../../corelib/animation/qparallelanimationgroup.h \ + ../../../../include/QtCore/qpauseanimation.h \ + ../../../corelib/animation/qpauseanimation.h \ + ../../../../include/QtCore/qpropertyanimation.h \ + ../../../corelib/animation/qpropertyanimation.h \ + ../../../../include/QtCore/qvariantanimation.h \ + ../../../corelib/animation/qvariantanimation.h \ + ../../../../include/QtCore/qeasingcurve.h \ + ../../../corelib/tools/qeasingcurve.h \ + ../../../../include/QtCore/qsequentialanimationgroup.h \ + ../../../corelib/animation/qsequentialanimationgroup.h \ + ../../../../include/QtCore/qtextcodec.h \ + ../../../corelib/codecs/qtextcodec.h \ + ../../../../include/QtCore/qendian.h \ + ../../../corelib/global/qendian.h \ + ../../../../include/QtCore/qlibraryinfo.h \ + ../../../corelib/global/qlibraryinfo.h \ + ../../../../include/QtCore/qdatetime.h \ + ../../../corelib/tools/qdatetime.h \ + ../../../../include/QtCore/qbuffer.h \ + ../../../corelib/io/qbuffer.h \ + ../../../../include/QtCore/qdir.h \ + ../../../corelib/io/qdir.h \ + ../../../../include/QtCore/qfileinfo.h \ + ../../../corelib/io/qfileinfo.h \ + ../../../../include/QtCore/qdiriterator.h \ + ../../../corelib/io/qdiriterator.h \ + ../../../../include/QtCore/qfileselector.h \ + ../../../corelib/io/qfileselector.h \ + ../../../../include/QtCore/qlockfile.h \ + ../../../corelib/io/qlockfile.h \ + ../../../../include/QtCore/qloggingcategory.h \ + ../../../corelib/io/qloggingcategory.h \ + ../../../../include/QtCore/qprocess.h \ + ../../../corelib/io/qprocess.h \ + ../../../../include/QtCore/qresource.h \ + ../../../corelib/io/qresource.h \ + ../../../../include/QtCore/qsavefile.h \ + ../../../corelib/io/qsavefile.h \ + ../../../../include/QtCore/qsettings.h \ + ../../../corelib/io/qsettings.h \ + ../../../../include/QtCore/qstandardpaths.h \ + ../../../corelib/io/qstandardpaths.h \ + ../../../../include/QtCore/qstorageinfo.h \ + ../../../corelib/io/qstorageinfo.h \ + ../../../../include/QtCore/qtemporarydir.h \ + ../../../corelib/io/qtemporarydir.h \ + ../../../../include/QtCore/QScopedPointer \ + ../../../../include/QtCore/qtemporaryfile.h \ + ../../../corelib/io/qtemporaryfile.h \ + ../../../../include/QtCore/qabstractitemmodel.h \ + ../../../corelib/itemmodels/qabstractitemmodel.h \ + ../../../../include/QtCore/qabstractproxymodel.h \ + ../../../corelib/itemmodels/qabstractproxymodel.h \ + ../../../../include/QtCore/qidentityproxymodel.h \ + ../../../corelib/itemmodels/qidentityproxymodel.h \ + ../../../../include/QtCore/qitemselectionmodel.h \ + ../../../corelib/itemmodels/qitemselectionmodel.h \ + ../../../../include/QtCore/qsortfilterproxymodel.h \ + ../../../corelib/itemmodels/qsortfilterproxymodel.h \ + ../../../../include/QtCore/qstringlistmodel.h \ + ../../../corelib/itemmodels/qstringlistmodel.h \ + ../../../../include/QtCore/qjsonarray.h \ + ../../../corelib/json/qjsonarray.h \ + ../../../../include/QtCore/qjsondocument.h \ + ../../../corelib/json/qjsondocument.h \ + ../../../../include/QtCore/qabstracteventdispatcher.h \ + ../../../corelib/kernel/qabstracteventdispatcher.h \ + ../../../../include/QtCore/qeventloop.h \ + ../../../corelib/kernel/qeventloop.h \ + ../../../../include/QtCore/qabstractnativeeventfilter.h \ + ../../../corelib/kernel/qabstractnativeeventfilter.h \ + ../../../../include/QtCore/qbasictimer.h \ + ../../../corelib/kernel/qbasictimer.h \ + ../../../../include/QtCore/qcoreapplication.h \ + ../../../corelib/kernel/qcoreapplication.h \ + ../../../../include/QtCore/qmath.h \ + ../../../corelib/kernel/qmath.h \ + ../../../../include/QtCore/qmetaobject.h \ + ../../../corelib/kernel/qmetaobject.h \ + ../../../../include/QtCore/qmimedata.h \ + ../../../corelib/kernel/qmimedata.h \ + ../../../../include/QtCore/qobjectcleanuphandler.h \ + ../../../corelib/kernel/qobjectcleanuphandler.h \ + ../../../../include/QtCore/qsharedmemory.h \ + ../../../corelib/kernel/qsharedmemory.h \ + ../../../../include/QtCore/qsignalmapper.h \ + ../../../corelib/kernel/qsignalmapper.h \ + ../../../../include/QtCore/qsocketnotifier.h \ + ../../../corelib/kernel/qsocketnotifier.h \ + ../../../../include/QtCore/qsystemsemaphore.h \ + ../../../corelib/kernel/qsystemsemaphore.h \ + ../../../../include/QtCore/qtimer.h \ + ../../../corelib/kernel/qtimer.h \ + ../../../../include/QtCore/qtranslator.h \ + ../../../corelib/kernel/qtranslator.h \ + ../../../../include/QtCore/qwineventnotifier.h \ + ../../../corelib/kernel/qwineventnotifier.h \ + ../../../../include/QtCore/qmimedatabase.h \ + ../../../corelib/mimetypes/qmimedatabase.h \ + ../../../../include/QtCore/qmimetype.h \ + ../../../corelib/mimetypes/qmimetype.h \ + ../../../../include/QtCore/qlibrary.h \ + ../../../corelib/plugin/qlibrary.h \ + ../../../../include/QtCore/qpluginloader.h \ + ../../../corelib/plugin/qpluginloader.h \ + ../../../../include/QtCore/quuid.h \ + ../../../corelib/plugin/quuid.h \ + ../../../../include/QtCore/qabstractstate.h \ + ../../../corelib/statemachine/qabstractstate.h \ + ../../../../include/QtCore/qabstracttransition.h \ + ../../../corelib/statemachine/qabstracttransition.h \ + ../../../../include/QtCore/qeventtransition.h \ + ../../../corelib/statemachine/qeventtransition.h \ + ../../../../include/QtCore/qfinalstate.h \ + ../../../corelib/statemachine/qfinalstate.h \ + ../../../../include/QtCore/qhistorystate.h \ + ../../../corelib/statemachine/qhistorystate.h \ + ../../../../include/QtCore/qsignaltransition.h \ + ../../../corelib/statemachine/qsignaltransition.h \ + ../../../../include/QtCore/qstate.h \ + ../../../corelib/statemachine/qstate.h \ + ../../../../include/QtCore/qstatemachine.h \ + ../../../corelib/statemachine/qstatemachine.h \ + ../../../../include/QtCore/qexception.h \ + ../../../corelib/thread/qexception.h \ + ../../../../include/QtCore/qfuture.h \ + ../../../corelib/thread/qfuture.h \ + ../../../../include/QtCore/qfutureinterface.h \ + ../../../corelib/thread/qfutureinterface.h \ + ../../../../include/QtCore/qrunnable.h \ + ../../../corelib/thread/qrunnable.h \ + ../../../../include/QtCore/qresultstore.h \ + ../../../corelib/thread/qresultstore.h \ + ../../../../include/QtCore/qfuturesynchronizer.h \ + ../../../corelib/thread/qfuturesynchronizer.h \ + ../../../../include/QtCore/qfuturewatcher.h \ + ../../../corelib/thread/qfuturewatcher.h \ + ../../../../include/QtCore/qreadwritelock.h \ + ../../../corelib/thread/qreadwritelock.h \ + ../../../../include/QtCore/qsemaphore.h \ + ../../../corelib/thread/qsemaphore.h \ + ../../../../include/QtCore/qthread.h \ + ../../../corelib/thread/qthread.h \ + ../../../../include/QtCore/qthreadpool.h \ + ../../../corelib/thread/qthreadpool.h \ + ../../../../include/QtCore/qthreadstorage.h \ + ../../../corelib/thread/qthreadstorage.h \ + ../../../../include/QtCore/qwaitcondition.h \ + ../../../corelib/thread/qwaitcondition.h \ + ../../../../include/QtCore/qarraydataops.h \ + ../../../corelib/tools/qarraydataops.h \ + ../../../../include/QtCore/qarraydatapointer.h \ + ../../../corelib/tools/qarraydatapointer.h \ + ../../../../include/QtCore/qbitarray.h \ + ../../../corelib/tools/qbitarray.h \ + ../../../../include/QtCore/qbytearraymatcher.h \ + ../../../corelib/tools/qbytearraymatcher.h \ + ../../../../include/QtCore/qcache.h \ + ../../../corelib/tools/qcache.h \ + ../../../../include/QtCore/qcollator.h \ + ../../../corelib/tools/qcollator.h \ + ../../../../include/QtCore/qcommandlineoption.h \ + ../../../corelib/tools/qcommandlineoption.h \ + ../../../../include/QtCore/qcommandlineparser.h \ + ../../../corelib/tools/qcommandlineparser.h \ + ../../../../include/QtCore/qcryptographichash.h \ + ../../../corelib/tools/qcryptographichash.h \ + ../../../../include/QtCore/qelapsedtimer.h \ + ../../../corelib/tools/qelapsedtimer.h \ + ../../../../include/QtCore/qlinkedlist.h \ + ../../../corelib/tools/qlinkedlist.h \ + ../../../../include/QtCore/qmessageauthenticationcode.h \ + ../../../corelib/tools/qmessageauthenticationcode.h \ + ../../../../include/QtCore/qqueue.h \ + ../../../corelib/tools/qqueue.h \ + ../../../../include/QtCore/qregularexpression.h \ + ../../../corelib/tools/qregularexpression.h \ + ../../../../include/QtCore/qscopedvaluerollback.h \ + ../../../corelib/tools/qscopedvaluerollback.h \ + ../../../../include/QtCore/qstack.h \ + ../../../corelib/tools/qstack.h \ + ../../../../include/QtCore/qtextboundaryfinder.h \ + ../../../corelib/tools/qtextboundaryfinder.h \ + ../../../../include/QtCore/qtimeline.h \ + ../../../corelib/tools/qtimeline.h \ + ../../../../include/QtCore/qtimezone.h \ + ../../../corelib/tools/qtimezone.h \ + ../../../../include/QtCore/qxmlstream.h \ + ../../../corelib/xml/qxmlstream.h \ + ../../../../include/QtCore/qtcoreversion.h \ + ../../../../include/QtDBus/qdbusabstractadaptor.h \ + ../../../dbus/qdbusabstractadaptor.h \ + ../../../../include/QtDBus/qdbusabstractinterface.h \ + ../../../dbus/qdbusabstractinterface.h \ + ../../../../include/QtDBus/qdbusmessage.h \ + ../../../dbus/qdbusmessage.h \ + ../../../../include/QtDBus/qdbuserror.h \ + ../../../dbus/qdbuserror.h \ + ../../../../include/QtDBus/qdbusconnectioninterface.h \ + ../../../dbus/qdbusconnectioninterface.h \ + ../../../../include/QtDBus/qdbusreply.h \ + ../../../dbus/qdbusreply.h \ + ../../../../include/QtDBus/qdbuspendingreply.h \ + ../../../dbus/qdbuspendingreply.h \ + ../../../../include/QtDBus/qdbuspendingcall.h \ + ../../../dbus/qdbuspendingcall.h \ + ../../../../include/QtDBus/qdbuscontext.h \ + ../../../dbus/qdbuscontext.h \ + ../../../../include/QtDBus/qdbusinterface.h \ + ../../../dbus/qdbusinterface.h \ + ../../../../include/QtDBus/qdbusmetatype.h \ + ../../../dbus/qdbusmetatype.h \ + ../../../../include/QtDBus/qdbusserver.h \ + ../../../dbus/qdbusserver.h \ + ../../../../include/QtDBus/qdbusunixfiledescriptor.h \ + ../../../dbus/qdbusunixfiledescriptor.h \ + ../../../../include/QtDBus/qdbusvirtualobject.h \ + ../../../dbus/qdbusvirtualobject.h \ + ../../../../include/QtDBus/qtdbusversion.h \ + main.h + /home/antanubis/TBuild/Libraries/QtStatic/qtbase/bin/moc $(DEFINES) -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/mkspecs/linux-g++ -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/src/plugins/platforminputcontexts/fcitx -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0 -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtDBus -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtCore -I/usr/include/c++/4.8 -I/usr/include/x86_64-linux-gnu/c++/4.8 -I/usr/include/c++/4.8/backward -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include main.h -o .moc/moc_main.cpp + +.moc/moc_qfcitxplatforminputcontext.cpp: ../../../../include/QtGui/5.5.0/QtGui/qpa/qplatforminputcontext.h \ + ../../../gui/kernel/qplatforminputcontext.h \ + ../../../../include/QtGui/qinputmethod.h \ + ../../../gui/kernel/qinputmethod.h \ + ../../../../include/QtCore/qobject.h \ + ../../../corelib/kernel/qobject.h \ + ../../../../include/QtCore/qobjectdefs.h \ + ../../../corelib/kernel/qobjectdefs.h \ + ../../../../include/QtCore/qnamespace.h \ + ../../../corelib/global/qnamespace.h \ + ../../../../include/QtCore/qglobal.h \ + ../../../corelib/global/qglobal.h \ + ../../../../include/QtCore/qconfig.h \ + ../../../corelib/global/qconfig.h \ + ../../../../include/QtCore/qfeatures.h \ + ../../../corelib/global/qfeatures.h \ + ../../../../include/QtCore/qsystemdetection.h \ + ../../../corelib/global/qsystemdetection.h \ + ../../../../include/QtCore/qprocessordetection.h \ + ../../../corelib/global/qprocessordetection.h \ + ../../../../include/QtCore/qcompilerdetection.h \ + ../../../corelib/global/qcompilerdetection.h \ + ../../../../include/QtCore/qtypeinfo.h \ + ../../../corelib/global/qtypeinfo.h \ + ../../../../include/QtCore/qtypetraits.h \ + ../../../corelib/global/qtypetraits.h \ + ../../../../include/QtCore/qsysinfo.h \ + ../../../corelib/global/qsysinfo.h \ + ../../../../include/QtCore/qlogging.h \ + ../../../corelib/global/qlogging.h \ + ../../../../include/QtCore/qflags.h \ + ../../../corelib/global/qflags.h \ + ../../../../include/QtCore/qatomic.h \ + ../../../corelib/thread/qatomic.h \ + ../../../../include/QtCore/qbasicatomic.h \ + ../../../corelib/thread/qbasicatomic.h \ + ../../../../include/QtCore/qatomic_bootstrap.h \ + ../../../corelib/arch/qatomic_bootstrap.h \ + ../../../../include/QtCore/qgenericatomic.h \ + ../../../corelib/thread/qgenericatomic.h \ + ../../../../include/QtCore/qatomic_cxx11.h \ + ../../../corelib/arch/qatomic_cxx11.h \ + ../../../../include/QtCore/qatomic_gcc.h \ + ../../../corelib/arch/qatomic_gcc.h \ + ../../../../include/QtCore/qatomic_msvc.h \ + ../../../corelib/arch/qatomic_msvc.h \ + ../../../../include/QtCore/qatomic_armv7.h \ + ../../../corelib/arch/qatomic_armv7.h \ + ../../../../include/QtCore/qatomic_armv6.h \ + ../../../corelib/arch/qatomic_armv6.h \ + ../../../../include/QtCore/qatomic_armv5.h \ + ../../../corelib/arch/qatomic_armv5.h \ + ../../../../include/QtCore/qatomic_ia64.h \ + ../../../corelib/arch/qatomic_ia64.h \ + ../../../../include/QtCore/qatomic_mips.h \ + ../../../corelib/arch/qatomic_mips.h \ + ../../../../include/QtCore/qatomic_x86.h \ + ../../../corelib/arch/qatomic_x86.h \ + ../../../../include/QtCore/qatomic_unix.h \ + ../../../corelib/arch/qatomic_unix.h \ + ../../../../include/QtCore/qglobalstatic.h \ + ../../../corelib/global/qglobalstatic.h \ + ../../../../include/QtCore/qmutex.h \ + ../../../corelib/thread/qmutex.h \ + ../../../../include/QtCore/qnumeric.h \ + ../../../corelib/global/qnumeric.h \ + ../../../../include/QtCore/qobjectdefs_impl.h \ + ../../../corelib/kernel/qobjectdefs_impl.h \ + ../../../../include/QtCore/qstring.h \ + ../../../corelib/tools/qstring.h \ + ../../../../include/QtCore/qchar.h \ + ../../../corelib/tools/qchar.h \ + ../../../../include/QtCore/qbytearray.h \ + ../../../corelib/tools/qbytearray.h \ + ../../../../include/QtCore/qrefcount.h \ + ../../../corelib/tools/qrefcount.h \ + ../../../../include/QtCore/qarraydata.h \ + ../../../corelib/tools/qarraydata.h \ + ../../../../include/QtCore/qstringbuilder.h \ + ../../../corelib/tools/qstringbuilder.h \ + ../../../../include/QtCore/qlist.h \ + ../../../corelib/tools/qlist.h \ + ../../../../include/QtCore/qalgorithms.h \ + ../../../corelib/tools/qalgorithms.h \ + ../../../../include/QtCore/qiterator.h \ + ../../../corelib/tools/qiterator.h \ + ../../../../include/QtCore/qbytearraylist.h \ + ../../../corelib/tools/qbytearraylist.h \ + ../../../../include/QtCore/qstringlist.h \ + ../../../corelib/tools/qstringlist.h \ + ../../../../include/QtCore/qregexp.h \ + ../../../corelib/tools/qregexp.h \ + ../../../../include/QtCore/qstringmatcher.h \ + ../../../corelib/tools/qstringmatcher.h \ + ../../../../include/QtCore/qcoreevent.h \ + ../../../corelib/kernel/qcoreevent.h \ + ../../../../include/QtCore/qscopedpointer.h \ + ../../../corelib/tools/qscopedpointer.h \ + ../../../../include/QtCore/qmetatype.h \ + ../../../corelib/kernel/qmetatype.h \ + ../../../../include/QtCore/qvarlengtharray.h \ + ../../../corelib/tools/qvarlengtharray.h \ + ../../../../include/QtCore/qcontainerfwd.h \ + ../../../corelib/tools/qcontainerfwd.h \ + ../../../../include/QtCore/qisenum.h \ + ../../../corelib/global/qisenum.h \ + ../../../../include/QtCore/qobject_impl.h \ + ../../../corelib/kernel/qobject_impl.h \ + ../../../../include/QtGui/QWindow \ + ../../../../include/QtGui/qwindow.h \ + ../../../gui/kernel/qwindow.h \ + ../../../../include/QtCore/QObject \ + ../../../../include/QtCore/QEvent \ + ../../../../include/QtCore/QMargins \ + ../../../../include/QtCore/qmargins.h \ + ../../../corelib/tools/qmargins.h \ + ../../../../include/QtCore/QRect \ + ../../../../include/QtCore/qrect.h \ + ../../../corelib/tools/qrect.h \ + ../../../../include/QtCore/qsize.h \ + ../../../corelib/tools/qsize.h \ + ../../../../include/QtCore/qpoint.h \ + ../../../corelib/tools/qpoint.h \ + ../../../../include/QtGui/qsurface.h \ + ../../../gui/kernel/qsurface.h \ + ../../../../include/QtGui/qsurfaceformat.h \ + ../../../gui/kernel/qsurfaceformat.h \ + ../../../../include/QtCore/qpair.h \ + ../../../corelib/tools/qpair.h \ + ../../../../include/QtGui/qwindowdefs.h \ + ../../../gui/kernel/qwindowdefs.h \ + ../../../../include/QtGui/qwindowdefs_win.h \ + ../../../gui/kernel/qwindowdefs_win.h \ + ../../../../include/QtGui/qicon.h \ + ../../../gui/image/qicon.h \ + ../../../../include/QtGui/qpixmap.h \ + ../../../gui/image/qpixmap.h \ + ../../../../include/QtGui/qpaintdevice.h \ + ../../../gui/painting/qpaintdevice.h \ + ../../../../include/QtGui/qcolor.h \ + ../../../gui/painting/qcolor.h \ + ../../../../include/QtGui/qrgb.h \ + ../../../gui/painting/qrgb.h \ + ../../../../include/QtCore/qsharedpointer.h \ + ../../../corelib/tools/qsharedpointer.h \ + ../../../../include/QtCore/qshareddata.h \ + ../../../corelib/tools/qshareddata.h \ + ../../../../include/QtCore/qhash.h \ + ../../../corelib/tools/qhash.h \ + ../../../../include/QtCore/qsharedpointer_impl.h \ + ../../../corelib/tools/qsharedpointer_impl.h \ + ../../../../include/QtGui/qimage.h \ + ../../../gui/image/qimage.h \ + ../../../../include/QtGui/qtransform.h \ + ../../../gui/painting/qtransform.h \ + ../../../../include/QtGui/qmatrix.h \ + ../../../gui/painting/qmatrix.h \ + ../../../../include/QtGui/qpolygon.h \ + ../../../gui/painting/qpolygon.h \ + ../../../../include/QtCore/qvector.h \ + ../../../corelib/tools/qvector.h \ + ../../../../include/QtGui/qregion.h \ + ../../../gui/painting/qregion.h \ + ../../../../include/QtCore/qdatastream.h \ + ../../../corelib/io/qdatastream.h \ + ../../../../include/QtCore/qiodevice.h \ + ../../../corelib/io/qiodevice.h \ + ../../../../include/QtCore/qline.h \ + ../../../corelib/tools/qline.h \ + ../../../../include/QtGui/qpainterpath.h \ + ../../../gui/painting/qpainterpath.h \ + ../../../../include/QtGui/qpixelformat.h \ + ../../../gui/kernel/qpixelformat.h \ + ../../../../include/QtGui/qcursor.h \ + ../../../gui/kernel/qcursor.h \ + ../../../../include/QtGui/QKeyEvent \ + ../../../../include/QtGui/qevent.h \ + ../../../gui/kernel/qevent.h \ + ../../../../include/QtGui/qkeysequence.h \ + ../../../gui/kernel/qkeysequence.h \ + ../../../../include/QtCore/qvariant.h \ + ../../../corelib/kernel/qvariant.h \ + ../../../../include/QtCore/qmap.h \ + ../../../corelib/tools/qmap.h \ + ../../../../include/QtCore/qdebug.h \ + ../../../corelib/io/qdebug.h \ + ../../../../include/QtCore/qtextstream.h \ + ../../../corelib/io/qtextstream.h \ + ../../../../include/QtCore/qlocale.h \ + ../../../corelib/tools/qlocale.h \ + ../../../../include/QtCore/qset.h \ + ../../../corelib/tools/qset.h \ + ../../../../include/QtCore/qcontiguouscache.h \ + ../../../corelib/tools/qcontiguouscache.h \ + ../../../../include/QtCore/qurl.h \ + ../../../corelib/io/qurl.h \ + ../../../../include/QtCore/qurlquery.h \ + ../../../corelib/io/qurlquery.h \ + ../../../../include/QtCore/qfile.h \ + ../../../corelib/io/qfile.h \ + ../../../../include/QtCore/qfiledevice.h \ + ../../../corelib/io/qfiledevice.h \ + ../../../../include/QtGui/qvector2d.h \ + ../../../gui/math3d/qvector2d.h \ + ../../../../include/QtGui/qtouchdevice.h \ + ../../../gui/kernel/qtouchdevice.h \ + ../../../../include/QtDBus/QDBusConnection \ + ../../../../include/QtDBus/qdbusconnection.h \ + ../../../dbus/qdbusconnection.h \ + ../../../../include/QtDBus/qdbusmacros.h \ + ../../../dbus/qdbusmacros.h \ + ../../../../include/QtDBus/QDBusServiceWatcher \ + ../../../../include/QtDBus/qdbusservicewatcher.h \ + ../../../dbus/qdbusservicewatcher.h \ + ../../../../include/QtCore/QPointer \ + ../../../../include/QtCore/qpointer.h \ + ../../../corelib/kernel/qpointer.h \ + ../../../../include/QtCore/QFileSystemWatcher \ + ../../../../include/QtCore/qfilesystemwatcher.h \ + ../../../corelib/io/qfilesystemwatcher.h \ + fcitxqtformattedpreedit.h \ + fcitxqtdbusaddons_export.h \ + ../../../../include/QtCore/QMetaType \ + ../../../../include/QtDBus/QDBusArgument \ + ../../../../include/QtDBus/qdbusargument.h \ + ../../../dbus/qdbusargument.h \ + ../../../../include/QtDBus/qdbusextratypes.h \ + ../../../dbus/qdbusextratypes.h \ + fcitxqtinputcontextproxy.h \ + ../../../../include/QtCore/QByteArray \ + ../../../../include/QtCore/QList \ + ../../../../include/QtCore/QMap \ + ../../../../include/QtCore/QString \ + ../../../../include/QtCore/QStringList \ + ../../../../include/QtCore/QVariant \ + ../../../../include/QtDBus/QtDBus \ + ../../../../include/QtDBus/QtDBusDepends \ + ../../../../include/QtCore/QtCore \ + ../../../../include/QtCore/QtCoreDepends \ + ../../../../include/QtCore/qabstractanimation.h \ + ../../../corelib/animation/qabstractanimation.h \ + ../../../../include/QtCore/qanimationgroup.h \ + ../../../corelib/animation/qanimationgroup.h \ + ../../../../include/QtCore/qparallelanimationgroup.h \ + ../../../corelib/animation/qparallelanimationgroup.h \ + ../../../../include/QtCore/qpauseanimation.h \ + ../../../corelib/animation/qpauseanimation.h \ + ../../../../include/QtCore/qpropertyanimation.h \ + ../../../corelib/animation/qpropertyanimation.h \ + ../../../../include/QtCore/qvariantanimation.h \ + ../../../corelib/animation/qvariantanimation.h \ + ../../../../include/QtCore/qeasingcurve.h \ + ../../../corelib/tools/qeasingcurve.h \ + ../../../../include/QtCore/qsequentialanimationgroup.h \ + ../../../corelib/animation/qsequentialanimationgroup.h \ + ../../../../include/QtCore/qtextcodec.h \ + ../../../corelib/codecs/qtextcodec.h \ + ../../../../include/QtCore/qendian.h \ + ../../../corelib/global/qendian.h \ + ../../../../include/QtCore/qlibraryinfo.h \ + ../../../corelib/global/qlibraryinfo.h \ + ../../../../include/QtCore/qdatetime.h \ + ../../../corelib/tools/qdatetime.h \ + ../../../../include/QtCore/qbuffer.h \ + ../../../corelib/io/qbuffer.h \ + ../../../../include/QtCore/qdir.h \ + ../../../corelib/io/qdir.h \ + ../../../../include/QtCore/qfileinfo.h \ + ../../../corelib/io/qfileinfo.h \ + ../../../../include/QtCore/qdiriterator.h \ + ../../../corelib/io/qdiriterator.h \ + ../../../../include/QtCore/qfileselector.h \ + ../../../corelib/io/qfileselector.h \ + ../../../../include/QtCore/qlockfile.h \ + ../../../corelib/io/qlockfile.h \ + ../../../../include/QtCore/qloggingcategory.h \ + ../../../corelib/io/qloggingcategory.h \ + ../../../../include/QtCore/qprocess.h \ + ../../../corelib/io/qprocess.h \ + ../../../../include/QtCore/qresource.h \ + ../../../corelib/io/qresource.h \ + ../../../../include/QtCore/qsavefile.h \ + ../../../corelib/io/qsavefile.h \ + ../../../../include/QtCore/qsettings.h \ + ../../../corelib/io/qsettings.h \ + ../../../../include/QtCore/qstandardpaths.h \ + ../../../corelib/io/qstandardpaths.h \ + ../../../../include/QtCore/qstorageinfo.h \ + ../../../corelib/io/qstorageinfo.h \ + ../../../../include/QtCore/qtemporarydir.h \ + ../../../corelib/io/qtemporarydir.h \ + ../../../../include/QtCore/QScopedPointer \ + ../../../../include/QtCore/qtemporaryfile.h \ + ../../../corelib/io/qtemporaryfile.h \ + ../../../../include/QtCore/qabstractitemmodel.h \ + ../../../corelib/itemmodels/qabstractitemmodel.h \ + ../../../../include/QtCore/qabstractproxymodel.h \ + ../../../corelib/itemmodels/qabstractproxymodel.h \ + ../../../../include/QtCore/qidentityproxymodel.h \ + ../../../corelib/itemmodels/qidentityproxymodel.h \ + ../../../../include/QtCore/qitemselectionmodel.h \ + ../../../corelib/itemmodels/qitemselectionmodel.h \ + ../../../../include/QtCore/qsortfilterproxymodel.h \ + ../../../corelib/itemmodels/qsortfilterproxymodel.h \ + ../../../../include/QtCore/qstringlistmodel.h \ + ../../../corelib/itemmodels/qstringlistmodel.h \ + ../../../../include/QtCore/qjsonarray.h \ + ../../../corelib/json/qjsonarray.h \ + ../../../../include/QtCore/qjsonvalue.h \ + ../../../corelib/json/qjsonvalue.h \ + ../../../../include/QtCore/qjsondocument.h \ + ../../../corelib/json/qjsondocument.h \ + ../../../../include/QtCore/qjsonobject.h \ + ../../../corelib/json/qjsonobject.h \ + ../../../../include/QtCore/qabstracteventdispatcher.h \ + ../../../corelib/kernel/qabstracteventdispatcher.h \ + ../../../../include/QtCore/qeventloop.h \ + ../../../corelib/kernel/qeventloop.h \ + ../../../../include/QtCore/qabstractnativeeventfilter.h \ + ../../../corelib/kernel/qabstractnativeeventfilter.h \ + ../../../../include/QtCore/qbasictimer.h \ + ../../../corelib/kernel/qbasictimer.h \ + ../../../../include/QtCore/qcoreapplication.h \ + ../../../corelib/kernel/qcoreapplication.h \ + ../../../../include/QtCore/qmath.h \ + ../../../corelib/kernel/qmath.h \ + ../../../../include/QtCore/qmetaobject.h \ + ../../../corelib/kernel/qmetaobject.h \ + ../../../../include/QtCore/qmimedata.h \ + ../../../corelib/kernel/qmimedata.h \ + ../../../../include/QtCore/qobjectcleanuphandler.h \ + ../../../corelib/kernel/qobjectcleanuphandler.h \ + ../../../../include/QtCore/qsharedmemory.h \ + ../../../corelib/kernel/qsharedmemory.h \ + ../../../../include/QtCore/qsignalmapper.h \ + ../../../corelib/kernel/qsignalmapper.h \ + ../../../../include/QtCore/qsocketnotifier.h \ + ../../../corelib/kernel/qsocketnotifier.h \ + ../../../../include/QtCore/qsystemsemaphore.h \ + ../../../corelib/kernel/qsystemsemaphore.h \ + ../../../../include/QtCore/qtimer.h \ + ../../../corelib/kernel/qtimer.h \ + ../../../../include/QtCore/qtranslator.h \ + ../../../corelib/kernel/qtranslator.h \ + ../../../../include/QtCore/qwineventnotifier.h \ + ../../../corelib/kernel/qwineventnotifier.h \ + ../../../../include/QtCore/qmimedatabase.h \ + ../../../corelib/mimetypes/qmimedatabase.h \ + ../../../../include/QtCore/qmimetype.h \ + ../../../corelib/mimetypes/qmimetype.h \ + ../../../../include/QtCore/qfactoryinterface.h \ + ../../../corelib/plugin/qfactoryinterface.h \ + ../../../../include/QtCore/qlibrary.h \ + ../../../corelib/plugin/qlibrary.h \ + ../../../../include/QtCore/qplugin.h \ + ../../../corelib/plugin/qplugin.h \ + ../../../../include/QtCore/qpluginloader.h \ + ../../../corelib/plugin/qpluginloader.h \ + ../../../../include/QtCore/quuid.h \ + ../../../corelib/plugin/quuid.h \ + ../../../../include/QtCore/qabstractstate.h \ + ../../../corelib/statemachine/qabstractstate.h \ + ../../../../include/QtCore/qabstracttransition.h \ + ../../../corelib/statemachine/qabstracttransition.h \ + ../../../../include/QtCore/qeventtransition.h \ + ../../../corelib/statemachine/qeventtransition.h \ + ../../../../include/QtCore/qfinalstate.h \ + ../../../corelib/statemachine/qfinalstate.h \ + ../../../../include/QtCore/qhistorystate.h \ + ../../../corelib/statemachine/qhistorystate.h \ + ../../../../include/QtCore/qsignaltransition.h \ + ../../../corelib/statemachine/qsignaltransition.h \ + ../../../../include/QtCore/qstate.h \ + ../../../corelib/statemachine/qstate.h \ + ../../../../include/QtCore/qstatemachine.h \ + ../../../corelib/statemachine/qstatemachine.h \ + ../../../../include/QtCore/qexception.h \ + ../../../corelib/thread/qexception.h \ + ../../../../include/QtCore/qfuture.h \ + ../../../corelib/thread/qfuture.h \ + ../../../../include/QtCore/qfutureinterface.h \ + ../../../corelib/thread/qfutureinterface.h \ + ../../../../include/QtCore/qrunnable.h \ + ../../../corelib/thread/qrunnable.h \ + ../../../../include/QtCore/qresultstore.h \ + ../../../corelib/thread/qresultstore.h \ + ../../../../include/QtCore/qfuturesynchronizer.h \ + ../../../corelib/thread/qfuturesynchronizer.h \ + ../../../../include/QtCore/qfuturewatcher.h \ + ../../../corelib/thread/qfuturewatcher.h \ + ../../../../include/QtCore/qreadwritelock.h \ + ../../../corelib/thread/qreadwritelock.h \ + ../../../../include/QtCore/qsemaphore.h \ + ../../../corelib/thread/qsemaphore.h \ + ../../../../include/QtCore/qthread.h \ + ../../../corelib/thread/qthread.h \ + ../../../../include/QtCore/qthreadpool.h \ + ../../../corelib/thread/qthreadpool.h \ + ../../../../include/QtCore/qthreadstorage.h \ + ../../../corelib/thread/qthreadstorage.h \ + ../../../../include/QtCore/qwaitcondition.h \ + ../../../corelib/thread/qwaitcondition.h \ + ../../../../include/QtCore/qarraydataops.h \ + ../../../corelib/tools/qarraydataops.h \ + ../../../../include/QtCore/qarraydatapointer.h \ + ../../../corelib/tools/qarraydatapointer.h \ + ../../../../include/QtCore/qbitarray.h \ + ../../../corelib/tools/qbitarray.h \ + ../../../../include/QtCore/qbytearraymatcher.h \ + ../../../corelib/tools/qbytearraymatcher.h \ + ../../../../include/QtCore/qcache.h \ + ../../../corelib/tools/qcache.h \ + ../../../../include/QtCore/qcollator.h \ + ../../../corelib/tools/qcollator.h \ + ../../../../include/QtCore/qcommandlineoption.h \ + ../../../corelib/tools/qcommandlineoption.h \ + ../../../../include/QtCore/qcommandlineparser.h \ + ../../../corelib/tools/qcommandlineparser.h \ + ../../../../include/QtCore/qcryptographichash.h \ + ../../../corelib/tools/qcryptographichash.h \ + ../../../../include/QtCore/qelapsedtimer.h \ + ../../../corelib/tools/qelapsedtimer.h \ + ../../../../include/QtCore/qlinkedlist.h \ + ../../../corelib/tools/qlinkedlist.h \ + ../../../../include/QtCore/qmessageauthenticationcode.h \ + ../../../corelib/tools/qmessageauthenticationcode.h \ + ../../../../include/QtCore/qqueue.h \ + ../../../corelib/tools/qqueue.h \ + ../../../../include/QtCore/qregularexpression.h \ + ../../../corelib/tools/qregularexpression.h \ + ../../../../include/QtCore/qscopedvaluerollback.h \ + ../../../corelib/tools/qscopedvaluerollback.h \ + ../../../../include/QtCore/qstack.h \ + ../../../corelib/tools/qstack.h \ + ../../../../include/QtCore/qtextboundaryfinder.h \ + ../../../corelib/tools/qtextboundaryfinder.h \ + ../../../../include/QtCore/qtimeline.h \ + ../../../corelib/tools/qtimeline.h \ + ../../../../include/QtCore/qtimezone.h \ + ../../../corelib/tools/qtimezone.h \ + ../../../../include/QtCore/qxmlstream.h \ + ../../../corelib/xml/qxmlstream.h \ + ../../../../include/QtCore/qtcoreversion.h \ + ../../../../include/QtDBus/qdbusabstractadaptor.h \ + ../../../dbus/qdbusabstractadaptor.h \ + ../../../../include/QtDBus/qdbusabstractinterface.h \ + ../../../dbus/qdbusabstractinterface.h \ + ../../../../include/QtDBus/qdbusmessage.h \ + ../../../dbus/qdbusmessage.h \ + ../../../../include/QtDBus/qdbuserror.h \ + ../../../dbus/qdbuserror.h \ + ../../../../include/QtDBus/qdbusconnectioninterface.h \ + ../../../dbus/qdbusconnectioninterface.h \ + ../../../../include/QtDBus/qdbusreply.h \ + ../../../dbus/qdbusreply.h \ + ../../../../include/QtDBus/qdbuspendingreply.h \ + ../../../dbus/qdbuspendingreply.h \ + ../../../../include/QtDBus/qdbuspendingcall.h \ + ../../../dbus/qdbuspendingcall.h \ + ../../../../include/QtDBus/qdbuscontext.h \ + ../../../dbus/qdbuscontext.h \ + ../../../../include/QtDBus/qdbusinterface.h \ + ../../../dbus/qdbusinterface.h \ + ../../../../include/QtDBus/qdbusmetatype.h \ + ../../../dbus/qdbusmetatype.h \ + ../../../../include/QtDBus/qdbusserver.h \ + ../../../dbus/qdbusserver.h \ + ../../../../include/QtDBus/qdbusunixfiledescriptor.h \ + ../../../dbus/qdbusunixfiledescriptor.h \ + ../../../../include/QtDBus/qdbusvirtualobject.h \ + ../../../dbus/qdbusvirtualobject.h \ + ../../../../include/QtDBus/qtdbusversion.h \ + qfcitxplatforminputcontext.h + /home/antanubis/TBuild/Libraries/QtStatic/qtbase/bin/moc $(DEFINES) -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/mkspecs/linux-g++ -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/src/plugins/platforminputcontexts/fcitx -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0 -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtDBus -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtCore -I/usr/include/c++/4.8 -I/usr/include/x86_64-linux-gnu/c++/4.8 -I/usr/include/c++/4.8/backward -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include qfcitxplatforminputcontext.h -o .moc/moc_qfcitxplatforminputcontext.cpp + +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: compiler_moc_header_clean + +####### Compile + +.obj/fcitxqtconnection.o: fcitxqtconnection.cpp fcitxqtconnection_p.h \ + fcitxqtconnection.h \ + fcitxqtdbusaddons_export.h \ + ../../../../include/QtCore/QObject \ + ../../../../include/QtCore/qobject.h \ + ../../../corelib/kernel/qobject.h \ + ../../../../include/QtCore/qobjectdefs.h \ + ../../../corelib/kernel/qobjectdefs.h \ + ../../../../include/QtCore/qnamespace.h \ + ../../../corelib/global/qnamespace.h \ + ../../../../include/QtCore/qglobal.h \ + ../../../corelib/global/qglobal.h \ + ../../../../include/QtCore/qconfig.h \ + ../../../corelib/global/qconfig.h \ + ../../../../include/QtCore/qfeatures.h \ + ../../../corelib/global/qfeatures.h \ + ../../../../include/QtCore/qsystemdetection.h \ + ../../../corelib/global/qsystemdetection.h \ + ../../../../include/QtCore/qprocessordetection.h \ + ../../../corelib/global/qprocessordetection.h \ + ../../../../include/QtCore/qcompilerdetection.h \ + ../../../corelib/global/qcompilerdetection.h \ + ../../../../include/QtCore/qtypeinfo.h \ + ../../../corelib/global/qtypeinfo.h \ + ../../../../include/QtCore/qtypetraits.h \ + ../../../corelib/global/qtypetraits.h \ + ../../../../include/QtCore/qsysinfo.h \ + ../../../corelib/global/qsysinfo.h \ + ../../../../include/QtCore/qlogging.h \ + ../../../corelib/global/qlogging.h \ + ../../../../include/QtCore/qflags.h \ + ../../../corelib/global/qflags.h \ + ../../../../include/QtCore/qatomic.h \ + ../../../corelib/thread/qatomic.h \ + ../../../../include/QtCore/qbasicatomic.h \ + ../../../corelib/thread/qbasicatomic.h \ + ../../../../include/QtCore/qatomic_bootstrap.h \ + ../../../corelib/arch/qatomic_bootstrap.h \ + ../../../../include/QtCore/qgenericatomic.h \ + ../../../corelib/thread/qgenericatomic.h \ + ../../../../include/QtCore/qatomic_cxx11.h \ + ../../../corelib/arch/qatomic_cxx11.h \ + ../../../../include/QtCore/qatomic_gcc.h \ + ../../../corelib/arch/qatomic_gcc.h \ + ../../../../include/QtCore/qatomic_msvc.h \ + ../../../corelib/arch/qatomic_msvc.h \ + ../../../../include/QtCore/qatomic_armv7.h \ + ../../../corelib/arch/qatomic_armv7.h \ + ../../../../include/QtCore/qatomic_armv6.h \ + ../../../corelib/arch/qatomic_armv6.h \ + ../../../../include/QtCore/qatomic_armv5.h \ + ../../../corelib/arch/qatomic_armv5.h \ + ../../../../include/QtCore/qatomic_ia64.h \ + ../../../corelib/arch/qatomic_ia64.h \ + ../../../../include/QtCore/qatomic_mips.h \ + ../../../corelib/arch/qatomic_mips.h \ + ../../../../include/QtCore/qatomic_x86.h \ + ../../../corelib/arch/qatomic_x86.h \ + ../../../../include/QtCore/qatomic_unix.h \ + ../../../corelib/arch/qatomic_unix.h \ + ../../../../include/QtCore/qglobalstatic.h \ + ../../../corelib/global/qglobalstatic.h \ + ../../../../include/QtCore/qmutex.h \ + ../../../corelib/thread/qmutex.h \ + ../../../../include/QtCore/qnumeric.h \ + ../../../corelib/global/qnumeric.h \ + ../../../../include/QtCore/qobjectdefs_impl.h \ + ../../../corelib/kernel/qobjectdefs_impl.h \ + ../../../../include/QtCore/qstring.h \ + ../../../corelib/tools/qstring.h \ + ../../../../include/QtCore/qchar.h \ + ../../../corelib/tools/qchar.h \ + ../../../../include/QtCore/qbytearray.h \ + ../../../corelib/tools/qbytearray.h \ + ../../../../include/QtCore/qrefcount.h \ + ../../../corelib/tools/qrefcount.h \ + ../../../../include/QtCore/qarraydata.h \ + ../../../corelib/tools/qarraydata.h \ + ../../../../include/QtCore/qstringbuilder.h \ + ../../../corelib/tools/qstringbuilder.h \ + ../../../../include/QtCore/qlist.h \ + ../../../corelib/tools/qlist.h \ + ../../../../include/QtCore/qalgorithms.h \ + ../../../corelib/tools/qalgorithms.h \ + ../../../../include/QtCore/qiterator.h \ + ../../../corelib/tools/qiterator.h \ + ../../../../include/QtCore/qbytearraylist.h \ + ../../../corelib/tools/qbytearraylist.h \ + ../../../../include/QtCore/qstringlist.h \ + ../../../corelib/tools/qstringlist.h \ + ../../../../include/QtCore/qregexp.h \ + ../../../corelib/tools/qregexp.h \ + ../../../../include/QtCore/qstringmatcher.h \ + ../../../corelib/tools/qstringmatcher.h \ + ../../../../include/QtCore/qcoreevent.h \ + ../../../corelib/kernel/qcoreevent.h \ + ../../../../include/QtCore/qscopedpointer.h \ + ../../../corelib/tools/qscopedpointer.h \ + ../../../../include/QtCore/qmetatype.h \ + ../../../corelib/kernel/qmetatype.h \ + ../../../../include/QtCore/qvarlengtharray.h \ + ../../../corelib/tools/qvarlengtharray.h \ + ../../../../include/QtCore/qcontainerfwd.h \ + ../../../corelib/tools/qcontainerfwd.h \ + ../../../../include/QtCore/qisenum.h \ + ../../../corelib/global/qisenum.h \ + ../../../../include/QtCore/qobject_impl.h \ + ../../../corelib/kernel/qobject_impl.h \ + ../../../../include/QtCore/QWeakPointer \ + ../../../../include/QtCore/qsharedpointer.h \ + ../../../corelib/tools/qsharedpointer.h \ + ../../../../include/QtCore/qshareddata.h \ + ../../../corelib/tools/qshareddata.h \ + ../../../../include/QtCore/qhash.h \ + ../../../corelib/tools/qhash.h \ + ../../../../include/QtCore/qpair.h \ + ../../../corelib/tools/qpair.h \ + ../../../../include/QtCore/qsharedpointer_impl.h \ + ../../../corelib/tools/qsharedpointer_impl.h \ + ../../../../include/QtCore/QFileSystemWatcher \ + ../../../../include/QtCore/qfilesystemwatcher.h \ + ../../../corelib/io/qfilesystemwatcher.h \ + ../../../../include/QtDBus/QDBusConnection \ + ../../../../include/QtDBus/qdbusconnection.h \ + ../../../dbus/qdbusconnection.h \ + ../../../../include/QtDBus/qdbusmacros.h \ + ../../../dbus/qdbusmacros.h \ + ../../../../include/QtCore/qvariant.h \ + ../../../corelib/kernel/qvariant.h \ + ../../../../include/QtCore/qmap.h \ + ../../../corelib/tools/qmap.h \ + ../../../../include/QtCore/qdebug.h \ + ../../../corelib/io/qdebug.h \ + ../../../../include/QtCore/qtextstream.h \ + ../../../corelib/io/qtextstream.h \ + ../../../../include/QtCore/qiodevice.h \ + ../../../corelib/io/qiodevice.h \ + ../../../../include/QtCore/qlocale.h \ + ../../../corelib/tools/qlocale.h \ + ../../../../include/QtCore/qvector.h \ + ../../../corelib/tools/qvector.h \ + ../../../../include/QtCore/qpoint.h \ + ../../../corelib/tools/qpoint.h \ + ../../../../include/QtCore/qset.h \ + ../../../corelib/tools/qset.h \ + ../../../../include/QtCore/qcontiguouscache.h \ + ../../../corelib/tools/qcontiguouscache.h \ + ../../../../include/QtDBus/QDBusServiceWatcher \ + ../../../../include/QtDBus/qdbusservicewatcher.h \ + ../../../dbus/qdbusservicewatcher.h \ + ../../../../include/QtDBus/QDBusReply \ + ../../../../include/QtDBus/qdbusreply.h \ + ../../../dbus/qdbusreply.h \ + ../../../../include/QtDBus/qdbusmessage.h \ + ../../../dbus/qdbusmessage.h \ + ../../../../include/QtDBus/qdbuserror.h \ + ../../../dbus/qdbuserror.h \ + ../../../../include/QtDBus/qdbusextratypes.h \ + ../../../dbus/qdbusextratypes.h \ + ../../../../include/QtDBus/qdbuspendingreply.h \ + ../../../dbus/qdbuspendingreply.h \ + ../../../../include/QtDBus/qdbusargument.h \ + ../../../dbus/qdbusargument.h \ + ../../../../include/QtDBus/qdbuspendingcall.h \ + ../../../dbus/qdbuspendingcall.h \ + ../../../../include/QtDBus/QDBusConnectionInterface \ + ../../../../include/QtDBus/qdbusconnectioninterface.h \ + ../../../dbus/qdbusconnectioninterface.h \ + ../../../../include/QtDBus/qdbusabstractinterface.h \ + ../../../dbus/qdbusabstractinterface.h \ + ../../../../include/QtCore/QDebug \ + ../../../../include/QtCore/QFile \ + ../../../../include/QtCore/qfile.h \ + ../../../corelib/io/qfile.h \ + ../../../../include/QtCore/qfiledevice.h \ + ../../../corelib/io/qfiledevice.h \ + ../../../../include/QtCore/QTimer \ + ../../../../include/QtCore/qtimer.h \ + ../../../corelib/kernel/qtimer.h \ + ../../../../include/QtCore/qbasictimer.h \ + ../../../corelib/kernel/qbasictimer.h \ + ../../../../include/QtCore/QDir \ + ../../../../include/QtCore/qdir.h \ + ../../../corelib/io/qdir.h \ + ../../../../include/QtCore/qfileinfo.h \ + ../../../corelib/io/qfileinfo.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/fcitxqtconnection.o fcitxqtconnection.cpp + +.obj/fcitxqtformattedpreedit.o: fcitxqtformattedpreedit.cpp ../../../../include/QtDBus/QDBusMetaType \ + ../../../../include/QtDBus/qdbusmetatype.h \ + ../../../dbus/qdbusmetatype.h \ + ../../../../include/QtCore/qmetatype.h \ + ../../../corelib/kernel/qmetatype.h \ + ../../../../include/QtCore/qglobal.h \ + ../../../corelib/global/qglobal.h \ + ../../../../include/QtCore/qconfig.h \ + ../../../corelib/global/qconfig.h \ + ../../../../include/QtCore/qfeatures.h \ + ../../../corelib/global/qfeatures.h \ + ../../../../include/QtCore/qsystemdetection.h \ + ../../../corelib/global/qsystemdetection.h \ + ../../../../include/QtCore/qprocessordetection.h \ + ../../../corelib/global/qprocessordetection.h \ + ../../../../include/QtCore/qcompilerdetection.h \ + ../../../corelib/global/qcompilerdetection.h \ + ../../../../include/QtCore/qtypeinfo.h \ + ../../../corelib/global/qtypeinfo.h \ + ../../../../include/QtCore/qtypetraits.h \ + ../../../corelib/global/qtypetraits.h \ + ../../../../include/QtCore/qsysinfo.h \ + ../../../corelib/global/qsysinfo.h \ + ../../../../include/QtCore/qlogging.h \ + ../../../corelib/global/qlogging.h \ + ../../../../include/QtCore/qflags.h \ + ../../../corelib/global/qflags.h \ + ../../../../include/QtCore/qatomic.h \ + ../../../corelib/thread/qatomic.h \ + ../../../../include/QtCore/qbasicatomic.h \ + ../../../corelib/thread/qbasicatomic.h \ + ../../../../include/QtCore/qatomic_bootstrap.h \ + ../../../corelib/arch/qatomic_bootstrap.h \ + ../../../../include/QtCore/qgenericatomic.h \ + ../../../corelib/thread/qgenericatomic.h \ + ../../../../include/QtCore/qatomic_cxx11.h \ + ../../../corelib/arch/qatomic_cxx11.h \ + ../../../../include/QtCore/qatomic_gcc.h \ + ../../../corelib/arch/qatomic_gcc.h \ + ../../../../include/QtCore/qatomic_msvc.h \ + ../../../corelib/arch/qatomic_msvc.h \ + ../../../../include/QtCore/qatomic_armv7.h \ + ../../../corelib/arch/qatomic_armv7.h \ + ../../../../include/QtCore/qatomic_armv6.h \ + ../../../corelib/arch/qatomic_armv6.h \ + ../../../../include/QtCore/qatomic_armv5.h \ + ../../../corelib/arch/qatomic_armv5.h \ + ../../../../include/QtCore/qatomic_ia64.h \ + ../../../corelib/arch/qatomic_ia64.h \ + ../../../../include/QtCore/qatomic_mips.h \ + ../../../corelib/arch/qatomic_mips.h \ + ../../../../include/QtCore/qatomic_x86.h \ + ../../../corelib/arch/qatomic_x86.h \ + ../../../../include/QtCore/qatomic_unix.h \ + ../../../corelib/arch/qatomic_unix.h \ + ../../../../include/QtCore/qglobalstatic.h \ + ../../../corelib/global/qglobalstatic.h \ + ../../../../include/QtCore/qmutex.h \ + ../../../corelib/thread/qmutex.h \ + ../../../../include/QtCore/qnumeric.h \ + ../../../corelib/global/qnumeric.h \ + ../../../../include/QtCore/qbytearray.h \ + ../../../corelib/tools/qbytearray.h \ + ../../../../include/QtCore/qrefcount.h \ + ../../../corelib/tools/qrefcount.h \ + ../../../../include/QtCore/qnamespace.h \ + ../../../corelib/global/qnamespace.h \ + ../../../../include/QtCore/qarraydata.h \ + ../../../corelib/tools/qarraydata.h \ + ../../../../include/QtCore/qstring.h \ + ../../../corelib/tools/qstring.h \ + ../../../../include/QtCore/qchar.h \ + ../../../corelib/tools/qchar.h \ + ../../../../include/QtCore/qstringbuilder.h \ + ../../../corelib/tools/qstringbuilder.h \ + ../../../../include/QtCore/qvarlengtharray.h \ + ../../../corelib/tools/qvarlengtharray.h \ + ../../../../include/QtCore/qcontainerfwd.h \ + ../../../corelib/tools/qcontainerfwd.h \ + ../../../../include/QtCore/qalgorithms.h \ + ../../../corelib/tools/qalgorithms.h \ + ../../../../include/QtCore/qisenum.h \ + ../../../corelib/global/qisenum.h \ + ../../../../include/QtCore/qobjectdefs.h \ + ../../../corelib/kernel/qobjectdefs.h \ + ../../../../include/QtCore/qobjectdefs_impl.h \ + ../../../corelib/kernel/qobjectdefs_impl.h \ + ../../../../include/QtDBus/qdbusargument.h \ + ../../../dbus/qdbusargument.h \ + ../../../../include/QtCore/qhash.h \ + ../../../corelib/tools/qhash.h \ + ../../../../include/QtCore/qiterator.h \ + ../../../corelib/tools/qiterator.h \ + ../../../../include/QtCore/qlist.h \ + ../../../corelib/tools/qlist.h \ + ../../../../include/QtCore/qbytearraylist.h \ + ../../../corelib/tools/qbytearraylist.h \ + ../../../../include/QtCore/qstringlist.h \ + ../../../corelib/tools/qstringlist.h \ + ../../../../include/QtCore/qregexp.h \ + ../../../corelib/tools/qregexp.h \ + ../../../../include/QtCore/qstringmatcher.h \ + ../../../corelib/tools/qstringmatcher.h \ + ../../../../include/QtCore/qpair.h \ + ../../../corelib/tools/qpair.h \ + ../../../../include/QtCore/qmap.h \ + ../../../corelib/tools/qmap.h \ + ../../../../include/QtCore/qdebug.h \ + ../../../corelib/io/qdebug.h \ + ../../../../include/QtCore/qtextstream.h \ + ../../../corelib/io/qtextstream.h \ + ../../../../include/QtCore/qiodevice.h \ + ../../../corelib/io/qiodevice.h \ + ../../../../include/QtCore/qobject.h \ + ../../../corelib/kernel/qobject.h \ + ../../../../include/QtCore/qcoreevent.h \ + ../../../corelib/kernel/qcoreevent.h \ + ../../../../include/QtCore/qscopedpointer.h \ + ../../../corelib/tools/qscopedpointer.h \ + ../../../../include/QtCore/qobject_impl.h \ + ../../../corelib/kernel/qobject_impl.h \ + ../../../../include/QtCore/qlocale.h \ + ../../../corelib/tools/qlocale.h \ + ../../../../include/QtCore/qvariant.h \ + ../../../corelib/kernel/qvariant.h \ + ../../../../include/QtCore/qshareddata.h \ + ../../../corelib/tools/qshareddata.h \ + ../../../../include/QtCore/qvector.h \ + ../../../corelib/tools/qvector.h \ + ../../../../include/QtCore/qpoint.h \ + ../../../corelib/tools/qpoint.h \ + ../../../../include/QtCore/qset.h \ + ../../../corelib/tools/qset.h \ + ../../../../include/QtCore/qcontiguouscache.h \ + ../../../corelib/tools/qcontiguouscache.h \ + ../../../../include/QtDBus/qdbusextratypes.h \ + ../../../dbus/qdbusextratypes.h \ + ../../../../include/QtDBus/qdbusmacros.h \ + ../../../dbus/qdbusmacros.h \ + fcitxqtformattedpreedit.h \ + fcitxqtdbusaddons_export.h \ + ../../../../include/QtCore/QMetaType \ + ../../../../include/QtDBus/QDBusArgument + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/fcitxqtformattedpreedit.o fcitxqtformattedpreedit.cpp + +.obj/fcitxqtinputcontextproxy.o: fcitxqtinputcontextproxy.cpp fcitxqtinputcontextproxy.h \ + ../../../../include/QtCore/QObject \ + ../../../../include/QtCore/qobject.h \ + ../../../corelib/kernel/qobject.h \ + ../../../../include/QtCore/qobjectdefs.h \ + ../../../corelib/kernel/qobjectdefs.h \ + ../../../../include/QtCore/qnamespace.h \ + ../../../corelib/global/qnamespace.h \ + ../../../../include/QtCore/qglobal.h \ + ../../../corelib/global/qglobal.h \ + ../../../../include/QtCore/qconfig.h \ + ../../../corelib/global/qconfig.h \ + ../../../../include/QtCore/qfeatures.h \ + ../../../corelib/global/qfeatures.h \ + ../../../../include/QtCore/qsystemdetection.h \ + ../../../corelib/global/qsystemdetection.h \ + ../../../../include/QtCore/qprocessordetection.h \ + ../../../corelib/global/qprocessordetection.h \ + ../../../../include/QtCore/qcompilerdetection.h \ + ../../../corelib/global/qcompilerdetection.h \ + ../../../../include/QtCore/qtypeinfo.h \ + ../../../corelib/global/qtypeinfo.h \ + ../../../../include/QtCore/qtypetraits.h \ + ../../../corelib/global/qtypetraits.h \ + ../../../../include/QtCore/qsysinfo.h \ + ../../../corelib/global/qsysinfo.h \ + ../../../../include/QtCore/qlogging.h \ + ../../../corelib/global/qlogging.h \ + ../../../../include/QtCore/qflags.h \ + ../../../corelib/global/qflags.h \ + ../../../../include/QtCore/qatomic.h \ + ../../../corelib/thread/qatomic.h \ + ../../../../include/QtCore/qbasicatomic.h \ + ../../../corelib/thread/qbasicatomic.h \ + ../../../../include/QtCore/qatomic_bootstrap.h \ + ../../../corelib/arch/qatomic_bootstrap.h \ + ../../../../include/QtCore/qgenericatomic.h \ + ../../../corelib/thread/qgenericatomic.h \ + ../../../../include/QtCore/qatomic_cxx11.h \ + ../../../corelib/arch/qatomic_cxx11.h \ + ../../../../include/QtCore/qatomic_gcc.h \ + ../../../corelib/arch/qatomic_gcc.h \ + ../../../../include/QtCore/qatomic_msvc.h \ + ../../../corelib/arch/qatomic_msvc.h \ + ../../../../include/QtCore/qatomic_armv7.h \ + ../../../corelib/arch/qatomic_armv7.h \ + ../../../../include/QtCore/qatomic_armv6.h \ + ../../../corelib/arch/qatomic_armv6.h \ + ../../../../include/QtCore/qatomic_armv5.h \ + ../../../corelib/arch/qatomic_armv5.h \ + ../../../../include/QtCore/qatomic_ia64.h \ + ../../../corelib/arch/qatomic_ia64.h \ + ../../../../include/QtCore/qatomic_mips.h \ + ../../../corelib/arch/qatomic_mips.h \ + ../../../../include/QtCore/qatomic_x86.h \ + ../../../corelib/arch/qatomic_x86.h \ + ../../../../include/QtCore/qatomic_unix.h \ + ../../../corelib/arch/qatomic_unix.h \ + ../../../../include/QtCore/qglobalstatic.h \ + ../../../corelib/global/qglobalstatic.h \ + ../../../../include/QtCore/qmutex.h \ + ../../../corelib/thread/qmutex.h \ + ../../../../include/QtCore/qnumeric.h \ + ../../../corelib/global/qnumeric.h \ + ../../../../include/QtCore/qobjectdefs_impl.h \ + ../../../corelib/kernel/qobjectdefs_impl.h \ + ../../../../include/QtCore/qstring.h \ + ../../../corelib/tools/qstring.h \ + ../../../../include/QtCore/qchar.h \ + ../../../corelib/tools/qchar.h \ + ../../../../include/QtCore/qbytearray.h \ + ../../../corelib/tools/qbytearray.h \ + ../../../../include/QtCore/qrefcount.h \ + ../../../corelib/tools/qrefcount.h \ + ../../../../include/QtCore/qarraydata.h \ + ../../../corelib/tools/qarraydata.h \ + ../../../../include/QtCore/qstringbuilder.h \ + ../../../corelib/tools/qstringbuilder.h \ + ../../../../include/QtCore/qlist.h \ + ../../../corelib/tools/qlist.h \ + ../../../../include/QtCore/qalgorithms.h \ + ../../../corelib/tools/qalgorithms.h \ + ../../../../include/QtCore/qiterator.h \ + ../../../corelib/tools/qiterator.h \ + ../../../../include/QtCore/qbytearraylist.h \ + ../../../corelib/tools/qbytearraylist.h \ + ../../../../include/QtCore/qstringlist.h \ + ../../../corelib/tools/qstringlist.h \ + ../../../../include/QtCore/qregexp.h \ + ../../../corelib/tools/qregexp.h \ + ../../../../include/QtCore/qstringmatcher.h \ + ../../../corelib/tools/qstringmatcher.h \ + ../../../../include/QtCore/qcoreevent.h \ + ../../../corelib/kernel/qcoreevent.h \ + ../../../../include/QtCore/qscopedpointer.h \ + ../../../corelib/tools/qscopedpointer.h \ + ../../../../include/QtCore/qmetatype.h \ + ../../../corelib/kernel/qmetatype.h \ + ../../../../include/QtCore/qvarlengtharray.h \ + ../../../corelib/tools/qvarlengtharray.h \ + ../../../../include/QtCore/qcontainerfwd.h \ + ../../../corelib/tools/qcontainerfwd.h \ + ../../../../include/QtCore/qisenum.h \ + ../../../corelib/global/qisenum.h \ + ../../../../include/QtCore/qobject_impl.h \ + ../../../corelib/kernel/qobject_impl.h \ + ../../../../include/QtCore/QByteArray \ + ../../../../include/QtCore/QList \ + ../../../../include/QtCore/QMap \ + ../../../../include/QtCore/qmap.h \ + ../../../corelib/tools/qmap.h \ + ../../../../include/QtCore/qpair.h \ + ../../../corelib/tools/qpair.h \ + ../../../../include/QtCore/qdebug.h \ + ../../../corelib/io/qdebug.h \ + ../../../../include/QtCore/qhash.h \ + ../../../corelib/tools/qhash.h \ + ../../../../include/QtCore/qtextstream.h \ + ../../../corelib/io/qtextstream.h \ + ../../../../include/QtCore/qiodevice.h \ + ../../../corelib/io/qiodevice.h \ + ../../../../include/QtCore/qlocale.h \ + ../../../corelib/tools/qlocale.h \ + ../../../../include/QtCore/qvariant.h \ + ../../../corelib/kernel/qvariant.h \ + ../../../../include/QtCore/qshareddata.h \ + ../../../corelib/tools/qshareddata.h \ + ../../../../include/QtCore/qvector.h \ + ../../../corelib/tools/qvector.h \ + ../../../../include/QtCore/qpoint.h \ + ../../../corelib/tools/qpoint.h \ + ../../../../include/QtCore/qset.h \ + ../../../corelib/tools/qset.h \ + ../../../../include/QtCore/qcontiguouscache.h \ + ../../../corelib/tools/qcontiguouscache.h \ + ../../../../include/QtCore/QString \ + ../../../../include/QtCore/QStringList \ + ../../../../include/QtCore/QVariant \ + ../../../../include/QtDBus/QtDBus \ + ../../../../include/QtDBus/QtDBusDepends \ + ../../../../include/QtCore/QtCore \ + ../../../../include/QtCore/QtCoreDepends \ + ../../../../include/QtCore/qabstractanimation.h \ + ../../../corelib/animation/qabstractanimation.h \ + ../../../../include/QtCore/qanimationgroup.h \ + ../../../corelib/animation/qanimationgroup.h \ + ../../../../include/QtCore/qparallelanimationgroup.h \ + ../../../corelib/animation/qparallelanimationgroup.h \ + ../../../../include/QtCore/qpauseanimation.h \ + ../../../corelib/animation/qpauseanimation.h \ + ../../../../include/QtCore/qpropertyanimation.h \ + ../../../corelib/animation/qpropertyanimation.h \ + ../../../../include/QtCore/qvariantanimation.h \ + ../../../corelib/animation/qvariantanimation.h \ + ../../../../include/QtCore/qeasingcurve.h \ + ../../../corelib/tools/qeasingcurve.h \ + ../../../../include/QtCore/qsequentialanimationgroup.h \ + ../../../corelib/animation/qsequentialanimationgroup.h \ + ../../../../include/QtCore/qtextcodec.h \ + ../../../corelib/codecs/qtextcodec.h \ + ../../../../include/QtCore/qendian.h \ + ../../../corelib/global/qendian.h \ + ../../../../include/QtCore/qlibraryinfo.h \ + ../../../corelib/global/qlibraryinfo.h \ + ../../../../include/QtCore/qdatetime.h \ + ../../../corelib/tools/qdatetime.h \ + ../../../../include/QtCore/qbuffer.h \ + ../../../corelib/io/qbuffer.h \ + ../../../../include/QtCore/qdatastream.h \ + ../../../corelib/io/qdatastream.h \ + ../../../../include/QtCore/qdir.h \ + ../../../corelib/io/qdir.h \ + ../../../../include/QtCore/qfileinfo.h \ + ../../../corelib/io/qfileinfo.h \ + ../../../../include/QtCore/qfile.h \ + ../../../corelib/io/qfile.h \ + ../../../../include/QtCore/qfiledevice.h \ + ../../../corelib/io/qfiledevice.h \ + ../../../../include/QtCore/qdiriterator.h \ + ../../../corelib/io/qdiriterator.h \ + ../../../../include/QtCore/qfileselector.h \ + ../../../corelib/io/qfileselector.h \ + ../../../../include/QtCore/qfilesystemwatcher.h \ + ../../../corelib/io/qfilesystemwatcher.h \ + ../../../../include/QtCore/qlockfile.h \ + ../../../corelib/io/qlockfile.h \ + ../../../../include/QtCore/qloggingcategory.h \ + ../../../corelib/io/qloggingcategory.h \ + ../../../../include/QtCore/qprocess.h \ + ../../../corelib/io/qprocess.h \ + ../../../../include/QtCore/qresource.h \ + ../../../corelib/io/qresource.h \ + ../../../../include/QtCore/qsavefile.h \ + ../../../corelib/io/qsavefile.h \ + ../../../../include/QtCore/qsettings.h \ + ../../../corelib/io/qsettings.h \ + ../../../../include/QtCore/qstandardpaths.h \ + ../../../corelib/io/qstandardpaths.h \ + ../../../../include/QtCore/qstorageinfo.h \ + ../../../corelib/io/qstorageinfo.h \ + ../../../../include/QtCore/qtemporarydir.h \ + ../../../corelib/io/qtemporarydir.h \ + ../../../../include/QtCore/QScopedPointer \ + ../../../../include/QtCore/qtemporaryfile.h \ + ../../../corelib/io/qtemporaryfile.h \ + ../../../../include/QtCore/qurl.h \ + ../../../corelib/io/qurl.h \ + ../../../../include/QtCore/qurlquery.h \ + ../../../corelib/io/qurlquery.h \ + ../../../../include/QtCore/qabstractitemmodel.h \ + ../../../corelib/itemmodels/qabstractitemmodel.h \ + ../../../../include/QtCore/qabstractproxymodel.h \ + ../../../corelib/itemmodels/qabstractproxymodel.h \ + ../../../../include/QtCore/qidentityproxymodel.h \ + ../../../corelib/itemmodels/qidentityproxymodel.h \ + ../../../../include/QtCore/qitemselectionmodel.h \ + ../../../corelib/itemmodels/qitemselectionmodel.h \ + ../../../../include/QtCore/qsortfilterproxymodel.h \ + ../../../corelib/itemmodels/qsortfilterproxymodel.h \ + ../../../../include/QtCore/qstringlistmodel.h \ + ../../../corelib/itemmodels/qstringlistmodel.h \ + ../../../../include/QtCore/qjsonarray.h \ + ../../../corelib/json/qjsonarray.h \ + ../../../../include/QtCore/qjsonvalue.h \ + ../../../corelib/json/qjsonvalue.h \ + ../../../../include/QtCore/qjsondocument.h \ + ../../../corelib/json/qjsondocument.h \ + ../../../../include/QtCore/qjsonobject.h \ + ../../../corelib/json/qjsonobject.h \ + ../../../../include/QtCore/qabstracteventdispatcher.h \ + ../../../corelib/kernel/qabstracteventdispatcher.h \ + ../../../../include/QtCore/qeventloop.h \ + ../../../corelib/kernel/qeventloop.h \ + ../../../../include/QtCore/qabstractnativeeventfilter.h \ + ../../../corelib/kernel/qabstractnativeeventfilter.h \ + ../../../../include/QtCore/qbasictimer.h \ + ../../../corelib/kernel/qbasictimer.h \ + ../../../../include/QtCore/qcoreapplication.h \ + ../../../corelib/kernel/qcoreapplication.h \ + ../../../../include/QtCore/qmath.h \ + ../../../corelib/kernel/qmath.h \ + ../../../../include/QtCore/qmetaobject.h \ + ../../../corelib/kernel/qmetaobject.h \ + ../../../../include/QtCore/qmimedata.h \ + ../../../corelib/kernel/qmimedata.h \ + ../../../../include/QtCore/qobjectcleanuphandler.h \ + ../../../corelib/kernel/qobjectcleanuphandler.h \ + ../../../../include/QtCore/qpointer.h \ + ../../../corelib/kernel/qpointer.h \ + ../../../../include/QtCore/qsharedpointer.h \ + ../../../corelib/tools/qsharedpointer.h \ + ../../../../include/QtCore/qsharedpointer_impl.h \ + ../../../corelib/tools/qsharedpointer_impl.h \ + ../../../../include/QtCore/qsharedmemory.h \ + ../../../corelib/kernel/qsharedmemory.h \ + ../../../../include/QtCore/qsignalmapper.h \ + ../../../corelib/kernel/qsignalmapper.h \ + ../../../../include/QtCore/qsocketnotifier.h \ + ../../../corelib/kernel/qsocketnotifier.h \ + ../../../../include/QtCore/qsystemsemaphore.h \ + ../../../corelib/kernel/qsystemsemaphore.h \ + ../../../../include/QtCore/qtimer.h \ + ../../../corelib/kernel/qtimer.h \ + ../../../../include/QtCore/qtranslator.h \ + ../../../corelib/kernel/qtranslator.h \ + ../../../../include/QtCore/qwineventnotifier.h \ + ../../../corelib/kernel/qwineventnotifier.h \ + ../../../../include/QtCore/qmimedatabase.h \ + ../../../corelib/mimetypes/qmimedatabase.h \ + ../../../../include/QtCore/qmimetype.h \ + ../../../corelib/mimetypes/qmimetype.h \ + ../../../../include/QtCore/qfactoryinterface.h \ + ../../../corelib/plugin/qfactoryinterface.h \ + ../../../../include/QtCore/qlibrary.h \ + ../../../corelib/plugin/qlibrary.h \ + ../../../../include/QtCore/qplugin.h \ + ../../../corelib/plugin/qplugin.h \ + ../../../../include/QtCore/qpluginloader.h \ + ../../../corelib/plugin/qpluginloader.h \ + ../../../../include/QtCore/quuid.h \ + ../../../corelib/plugin/quuid.h \ + ../../../../include/QtCore/qabstractstate.h \ + ../../../corelib/statemachine/qabstractstate.h \ + ../../../../include/QtCore/qabstracttransition.h \ + ../../../corelib/statemachine/qabstracttransition.h \ + ../../../../include/QtCore/qeventtransition.h \ + ../../../corelib/statemachine/qeventtransition.h \ + ../../../../include/QtCore/qfinalstate.h \ + ../../../corelib/statemachine/qfinalstate.h \ + ../../../../include/QtCore/qhistorystate.h \ + ../../../corelib/statemachine/qhistorystate.h \ + ../../../../include/QtCore/qsignaltransition.h \ + ../../../corelib/statemachine/qsignaltransition.h \ + ../../../../include/QtCore/qstate.h \ + ../../../corelib/statemachine/qstate.h \ + ../../../../include/QtCore/qstatemachine.h \ + ../../../corelib/statemachine/qstatemachine.h \ + ../../../../include/QtCore/qexception.h \ + ../../../corelib/thread/qexception.h \ + ../../../../include/QtCore/qfuture.h \ + ../../../corelib/thread/qfuture.h \ + ../../../../include/QtCore/qfutureinterface.h \ + ../../../corelib/thread/qfutureinterface.h \ + ../../../../include/QtCore/qrunnable.h \ + ../../../corelib/thread/qrunnable.h \ + ../../../../include/QtCore/qresultstore.h \ + ../../../corelib/thread/qresultstore.h \ + ../../../../include/QtCore/qfuturesynchronizer.h \ + ../../../corelib/thread/qfuturesynchronizer.h \ + ../../../../include/QtCore/qfuturewatcher.h \ + ../../../corelib/thread/qfuturewatcher.h \ + ../../../../include/QtCore/qreadwritelock.h \ + ../../../corelib/thread/qreadwritelock.h \ + ../../../../include/QtCore/qsemaphore.h \ + ../../../corelib/thread/qsemaphore.h \ + ../../../../include/QtCore/qthread.h \ + ../../../corelib/thread/qthread.h \ + ../../../../include/QtCore/qthreadpool.h \ + ../../../corelib/thread/qthreadpool.h \ + ../../../../include/QtCore/qthreadstorage.h \ + ../../../corelib/thread/qthreadstorage.h \ + ../../../../include/QtCore/qwaitcondition.h \ + ../../../corelib/thread/qwaitcondition.h \ + ../../../../include/QtCore/qarraydataops.h \ + ../../../corelib/tools/qarraydataops.h \ + ../../../../include/QtCore/qarraydatapointer.h \ + ../../../corelib/tools/qarraydatapointer.h \ + ../../../../include/QtCore/qbitarray.h \ + ../../../corelib/tools/qbitarray.h \ + ../../../../include/QtCore/qbytearraymatcher.h \ + ../../../corelib/tools/qbytearraymatcher.h \ + ../../../../include/QtCore/qcache.h \ + ../../../corelib/tools/qcache.h \ + ../../../../include/QtCore/qcollator.h \ + ../../../corelib/tools/qcollator.h \ + ../../../../include/QtCore/qcommandlineoption.h \ + ../../../corelib/tools/qcommandlineoption.h \ + ../../../../include/QtCore/qcommandlineparser.h \ + ../../../corelib/tools/qcommandlineparser.h \ + ../../../../include/QtCore/qcryptographichash.h \ + ../../../corelib/tools/qcryptographichash.h \ + ../../../../include/QtCore/qelapsedtimer.h \ + ../../../corelib/tools/qelapsedtimer.h \ + ../../../../include/QtCore/qline.h \ + ../../../corelib/tools/qline.h \ + ../../../../include/QtCore/qlinkedlist.h \ + ../../../corelib/tools/qlinkedlist.h \ + ../../../../include/QtCore/qmargins.h \ + ../../../corelib/tools/qmargins.h \ + ../../../../include/QtCore/qmessageauthenticationcode.h \ + ../../../corelib/tools/qmessageauthenticationcode.h \ + ../../../../include/QtCore/qqueue.h \ + ../../../corelib/tools/qqueue.h \ + ../../../../include/QtCore/qrect.h \ + ../../../corelib/tools/qrect.h \ + ../../../../include/QtCore/qsize.h \ + ../../../corelib/tools/qsize.h \ + ../../../../include/QtCore/qregularexpression.h \ + ../../../corelib/tools/qregularexpression.h \ + ../../../../include/QtCore/qscopedvaluerollback.h \ + ../../../corelib/tools/qscopedvaluerollback.h \ + ../../../../include/QtCore/qstack.h \ + ../../../corelib/tools/qstack.h \ + ../../../../include/QtCore/qtextboundaryfinder.h \ + ../../../corelib/tools/qtextboundaryfinder.h \ + ../../../../include/QtCore/qtimeline.h \ + ../../../corelib/tools/qtimeline.h \ + ../../../../include/QtCore/qtimezone.h \ + ../../../corelib/tools/qtimezone.h \ + ../../../../include/QtCore/qxmlstream.h \ + ../../../corelib/xml/qxmlstream.h \ + ../../../../include/QtCore/qtcoreversion.h \ + ../../../../include/QtDBus/qdbusabstractadaptor.h \ + ../../../dbus/qdbusabstractadaptor.h \ + ../../../../include/QtDBus/qdbusmacros.h \ + ../../../dbus/qdbusmacros.h \ + ../../../../include/QtDBus/qdbusabstractinterface.h \ + ../../../dbus/qdbusabstractinterface.h \ + ../../../../include/QtDBus/qdbusmessage.h \ + ../../../dbus/qdbusmessage.h \ + ../../../../include/QtDBus/qdbuserror.h \ + ../../../dbus/qdbuserror.h \ + ../../../../include/QtDBus/qdbusextratypes.h \ + ../../../dbus/qdbusextratypes.h \ + ../../../../include/QtDBus/qdbusconnection.h \ + ../../../dbus/qdbusconnection.h \ + ../../../../include/QtDBus/qdbusargument.h \ + ../../../dbus/qdbusargument.h \ + ../../../../include/QtDBus/qdbusconnectioninterface.h \ + ../../../dbus/qdbusconnectioninterface.h \ + ../../../../include/QtDBus/qdbusreply.h \ + ../../../dbus/qdbusreply.h \ + ../../../../include/QtDBus/qdbuspendingreply.h \ + ../../../dbus/qdbuspendingreply.h \ + ../../../../include/QtDBus/qdbuspendingcall.h \ + ../../../dbus/qdbuspendingcall.h \ + ../../../../include/QtDBus/qdbuscontext.h \ + ../../../dbus/qdbuscontext.h \ + ../../../../include/QtDBus/qdbusinterface.h \ + ../../../dbus/qdbusinterface.h \ + ../../../../include/QtDBus/qdbusmetatype.h \ + ../../../dbus/qdbusmetatype.h \ + ../../../../include/QtDBus/qdbusserver.h \ + ../../../dbus/qdbusserver.h \ + ../../../../include/QtDBus/qdbusservicewatcher.h \ + ../../../dbus/qdbusservicewatcher.h \ + ../../../../include/QtDBus/qdbusunixfiledescriptor.h \ + ../../../dbus/qdbusunixfiledescriptor.h \ + ../../../../include/QtDBus/qdbusvirtualobject.h \ + ../../../dbus/qdbusvirtualobject.h \ + ../../../../include/QtDBus/qtdbusversion.h \ + fcitxqtformattedpreedit.h \ + fcitxqtdbusaddons_export.h \ + ../../../../include/QtCore/QMetaType \ + ../../../../include/QtDBus/QDBusArgument + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/fcitxqtinputcontextproxy.o fcitxqtinputcontextproxy.cpp + +.obj/fcitxqtinputmethoditem.o: fcitxqtinputmethoditem.cpp ../../../../include/QtDBus/QDBusArgument \ + ../../../../include/QtDBus/qdbusargument.h \ + ../../../dbus/qdbusargument.h \ + ../../../../include/QtCore/qbytearray.h \ + ../../../corelib/tools/qbytearray.h \ + ../../../../include/QtCore/qrefcount.h \ + ../../../corelib/tools/qrefcount.h \ + ../../../../include/QtCore/qatomic.h \ + ../../../corelib/thread/qatomic.h \ + ../../../../include/QtCore/qglobal.h \ + ../../../corelib/global/qglobal.h \ + ../../../../include/QtCore/qconfig.h \ + ../../../corelib/global/qconfig.h \ + ../../../../include/QtCore/qfeatures.h \ + ../../../corelib/global/qfeatures.h \ + ../../../../include/QtCore/qsystemdetection.h \ + ../../../corelib/global/qsystemdetection.h \ + ../../../../include/QtCore/qprocessordetection.h \ + ../../../corelib/global/qprocessordetection.h \ + ../../../../include/QtCore/qcompilerdetection.h \ + ../../../corelib/global/qcompilerdetection.h \ + ../../../../include/QtCore/qtypeinfo.h \ + ../../../corelib/global/qtypeinfo.h \ + ../../../../include/QtCore/qtypetraits.h \ + ../../../corelib/global/qtypetraits.h \ + ../../../../include/QtCore/qsysinfo.h \ + ../../../corelib/global/qsysinfo.h \ + ../../../../include/QtCore/qlogging.h \ + ../../../corelib/global/qlogging.h \ + ../../../../include/QtCore/qflags.h \ + ../../../corelib/global/qflags.h \ + ../../../../include/QtCore/qglobalstatic.h \ + ../../../corelib/global/qglobalstatic.h \ + ../../../../include/QtCore/qmutex.h \ + ../../../corelib/thread/qmutex.h \ + ../../../../include/QtCore/qnumeric.h \ + ../../../corelib/global/qnumeric.h \ + ../../../../include/QtCore/qbasicatomic.h \ + ../../../corelib/thread/qbasicatomic.h \ + ../../../../include/QtCore/qatomic_bootstrap.h \ + ../../../corelib/arch/qatomic_bootstrap.h \ + ../../../../include/QtCore/qgenericatomic.h \ + ../../../corelib/thread/qgenericatomic.h \ + ../../../../include/QtCore/qatomic_cxx11.h \ + ../../../corelib/arch/qatomic_cxx11.h \ + ../../../../include/QtCore/qatomic_gcc.h \ + ../../../corelib/arch/qatomic_gcc.h \ + ../../../../include/QtCore/qatomic_msvc.h \ + ../../../corelib/arch/qatomic_msvc.h \ + ../../../../include/QtCore/qatomic_armv7.h \ + ../../../corelib/arch/qatomic_armv7.h \ + ../../../../include/QtCore/qatomic_armv6.h \ + ../../../corelib/arch/qatomic_armv6.h \ + ../../../../include/QtCore/qatomic_armv5.h \ + ../../../corelib/arch/qatomic_armv5.h \ + ../../../../include/QtCore/qatomic_ia64.h \ + ../../../corelib/arch/qatomic_ia64.h \ + ../../../../include/QtCore/qatomic_mips.h \ + ../../../corelib/arch/qatomic_mips.h \ + ../../../../include/QtCore/qatomic_x86.h \ + ../../../corelib/arch/qatomic_x86.h \ + ../../../../include/QtCore/qatomic_unix.h \ + ../../../corelib/arch/qatomic_unix.h \ + ../../../../include/QtCore/qnamespace.h \ + ../../../corelib/global/qnamespace.h \ + ../../../../include/QtCore/qarraydata.h \ + ../../../corelib/tools/qarraydata.h \ + ../../../../include/QtCore/qstring.h \ + ../../../corelib/tools/qstring.h \ + ../../../../include/QtCore/qchar.h \ + ../../../corelib/tools/qchar.h \ + ../../../../include/QtCore/qstringbuilder.h \ + ../../../corelib/tools/qstringbuilder.h \ + ../../../../include/QtCore/qhash.h \ + ../../../corelib/tools/qhash.h \ + ../../../../include/QtCore/qiterator.h \ + ../../../corelib/tools/qiterator.h \ + ../../../../include/QtCore/qlist.h \ + ../../../corelib/tools/qlist.h \ + ../../../../include/QtCore/qalgorithms.h \ + ../../../corelib/tools/qalgorithms.h \ + ../../../../include/QtCore/qbytearraylist.h \ + ../../../corelib/tools/qbytearraylist.h \ + ../../../../include/QtCore/qstringlist.h \ + ../../../corelib/tools/qstringlist.h \ + ../../../../include/QtCore/qregexp.h \ + ../../../corelib/tools/qregexp.h \ + ../../../../include/QtCore/qstringmatcher.h \ + ../../../corelib/tools/qstringmatcher.h \ + ../../../../include/QtCore/qpair.h \ + ../../../corelib/tools/qpair.h \ + ../../../../include/QtCore/qmap.h \ + ../../../corelib/tools/qmap.h \ + ../../../../include/QtCore/qdebug.h \ + ../../../corelib/io/qdebug.h \ + ../../../../include/QtCore/qtextstream.h \ + ../../../corelib/io/qtextstream.h \ + ../../../../include/QtCore/qiodevice.h \ + ../../../corelib/io/qiodevice.h \ + ../../../../include/QtCore/qobject.h \ + ../../../corelib/kernel/qobject.h \ + ../../../../include/QtCore/qobjectdefs.h \ + ../../../corelib/kernel/qobjectdefs.h \ + ../../../../include/QtCore/qobjectdefs_impl.h \ + ../../../corelib/kernel/qobjectdefs_impl.h \ + ../../../../include/QtCore/qcoreevent.h \ + ../../../corelib/kernel/qcoreevent.h \ + ../../../../include/QtCore/qscopedpointer.h \ + ../../../corelib/tools/qscopedpointer.h \ + ../../../../include/QtCore/qmetatype.h \ + ../../../corelib/kernel/qmetatype.h \ + ../../../../include/QtCore/qvarlengtharray.h \ + ../../../corelib/tools/qvarlengtharray.h \ + ../../../../include/QtCore/qcontainerfwd.h \ + ../../../corelib/tools/qcontainerfwd.h \ + ../../../../include/QtCore/qisenum.h \ + ../../../corelib/global/qisenum.h \ + ../../../../include/QtCore/qobject_impl.h \ + ../../../corelib/kernel/qobject_impl.h \ + ../../../../include/QtCore/qlocale.h \ + ../../../corelib/tools/qlocale.h \ + ../../../../include/QtCore/qvariant.h \ + ../../../corelib/kernel/qvariant.h \ + ../../../../include/QtCore/qshareddata.h \ + ../../../corelib/tools/qshareddata.h \ + ../../../../include/QtCore/qvector.h \ + ../../../corelib/tools/qvector.h \ + ../../../../include/QtCore/qpoint.h \ + ../../../corelib/tools/qpoint.h \ + ../../../../include/QtCore/qset.h \ + ../../../corelib/tools/qset.h \ + ../../../../include/QtCore/qcontiguouscache.h \ + ../../../corelib/tools/qcontiguouscache.h \ + ../../../../include/QtDBus/qdbusextratypes.h \ + ../../../dbus/qdbusextratypes.h \ + ../../../../include/QtDBus/qdbusmacros.h \ + ../../../dbus/qdbusmacros.h \ + ../../../../include/QtDBus/QDBusMetaType \ + ../../../../include/QtDBus/qdbusmetatype.h \ + ../../../dbus/qdbusmetatype.h \ + fcitxqtinputmethoditem.h \ + fcitxqtdbusaddons_export.h \ + ../../../../include/QtCore/QString \ + ../../../../include/QtCore/QMetaType + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/fcitxqtinputmethoditem.o fcitxqtinputmethoditem.cpp + +.obj/fcitxqtinputmethodproxy.o: fcitxqtinputmethodproxy.cpp fcitxqtinputmethodproxy.h \ + ../../../../include/QtCore/QObject \ + ../../../../include/QtCore/qobject.h \ + ../../../corelib/kernel/qobject.h \ + ../../../../include/QtCore/qobjectdefs.h \ + ../../../corelib/kernel/qobjectdefs.h \ + ../../../../include/QtCore/qnamespace.h \ + ../../../corelib/global/qnamespace.h \ + ../../../../include/QtCore/qglobal.h \ + ../../../corelib/global/qglobal.h \ + ../../../../include/QtCore/qconfig.h \ + ../../../corelib/global/qconfig.h \ + ../../../../include/QtCore/qfeatures.h \ + ../../../corelib/global/qfeatures.h \ + ../../../../include/QtCore/qsystemdetection.h \ + ../../../corelib/global/qsystemdetection.h \ + ../../../../include/QtCore/qprocessordetection.h \ + ../../../corelib/global/qprocessordetection.h \ + ../../../../include/QtCore/qcompilerdetection.h \ + ../../../corelib/global/qcompilerdetection.h \ + ../../../../include/QtCore/qtypeinfo.h \ + ../../../corelib/global/qtypeinfo.h \ + ../../../../include/QtCore/qtypetraits.h \ + ../../../corelib/global/qtypetraits.h \ + ../../../../include/QtCore/qsysinfo.h \ + ../../../corelib/global/qsysinfo.h \ + ../../../../include/QtCore/qlogging.h \ + ../../../corelib/global/qlogging.h \ + ../../../../include/QtCore/qflags.h \ + ../../../corelib/global/qflags.h \ + ../../../../include/QtCore/qatomic.h \ + ../../../corelib/thread/qatomic.h \ + ../../../../include/QtCore/qbasicatomic.h \ + ../../../corelib/thread/qbasicatomic.h \ + ../../../../include/QtCore/qatomic_bootstrap.h \ + ../../../corelib/arch/qatomic_bootstrap.h \ + ../../../../include/QtCore/qgenericatomic.h \ + ../../../corelib/thread/qgenericatomic.h \ + ../../../../include/QtCore/qatomic_cxx11.h \ + ../../../corelib/arch/qatomic_cxx11.h \ + ../../../../include/QtCore/qatomic_gcc.h \ + ../../../corelib/arch/qatomic_gcc.h \ + ../../../../include/QtCore/qatomic_msvc.h \ + ../../../corelib/arch/qatomic_msvc.h \ + ../../../../include/QtCore/qatomic_armv7.h \ + ../../../corelib/arch/qatomic_armv7.h \ + ../../../../include/QtCore/qatomic_armv6.h \ + ../../../corelib/arch/qatomic_armv6.h \ + ../../../../include/QtCore/qatomic_armv5.h \ + ../../../corelib/arch/qatomic_armv5.h \ + ../../../../include/QtCore/qatomic_ia64.h \ + ../../../corelib/arch/qatomic_ia64.h \ + ../../../../include/QtCore/qatomic_mips.h \ + ../../../corelib/arch/qatomic_mips.h \ + ../../../../include/QtCore/qatomic_x86.h \ + ../../../corelib/arch/qatomic_x86.h \ + ../../../../include/QtCore/qatomic_unix.h \ + ../../../corelib/arch/qatomic_unix.h \ + ../../../../include/QtCore/qglobalstatic.h \ + ../../../corelib/global/qglobalstatic.h \ + ../../../../include/QtCore/qmutex.h \ + ../../../corelib/thread/qmutex.h \ + ../../../../include/QtCore/qnumeric.h \ + ../../../corelib/global/qnumeric.h \ + ../../../../include/QtCore/qobjectdefs_impl.h \ + ../../../corelib/kernel/qobjectdefs_impl.h \ + ../../../../include/QtCore/qstring.h \ + ../../../corelib/tools/qstring.h \ + ../../../../include/QtCore/qchar.h \ + ../../../corelib/tools/qchar.h \ + ../../../../include/QtCore/qbytearray.h \ + ../../../corelib/tools/qbytearray.h \ + ../../../../include/QtCore/qrefcount.h \ + ../../../corelib/tools/qrefcount.h \ + ../../../../include/QtCore/qarraydata.h \ + ../../../corelib/tools/qarraydata.h \ + ../../../../include/QtCore/qstringbuilder.h \ + ../../../corelib/tools/qstringbuilder.h \ + ../../../../include/QtCore/qlist.h \ + ../../../corelib/tools/qlist.h \ + ../../../../include/QtCore/qalgorithms.h \ + ../../../corelib/tools/qalgorithms.h \ + ../../../../include/QtCore/qiterator.h \ + ../../../corelib/tools/qiterator.h \ + ../../../../include/QtCore/qbytearraylist.h \ + ../../../corelib/tools/qbytearraylist.h \ + ../../../../include/QtCore/qstringlist.h \ + ../../../corelib/tools/qstringlist.h \ + ../../../../include/QtCore/qregexp.h \ + ../../../corelib/tools/qregexp.h \ + ../../../../include/QtCore/qstringmatcher.h \ + ../../../corelib/tools/qstringmatcher.h \ + ../../../../include/QtCore/qcoreevent.h \ + ../../../corelib/kernel/qcoreevent.h \ + ../../../../include/QtCore/qscopedpointer.h \ + ../../../corelib/tools/qscopedpointer.h \ + ../../../../include/QtCore/qmetatype.h \ + ../../../corelib/kernel/qmetatype.h \ + ../../../../include/QtCore/qvarlengtharray.h \ + ../../../corelib/tools/qvarlengtharray.h \ + ../../../../include/QtCore/qcontainerfwd.h \ + ../../../corelib/tools/qcontainerfwd.h \ + ../../../../include/QtCore/qisenum.h \ + ../../../corelib/global/qisenum.h \ + ../../../../include/QtCore/qobject_impl.h \ + ../../../corelib/kernel/qobject_impl.h \ + ../../../../include/QtCore/QByteArray \ + ../../../../include/QtCore/QList \ + ../../../../include/QtCore/QMap \ + ../../../../include/QtCore/qmap.h \ + ../../../corelib/tools/qmap.h \ + ../../../../include/QtCore/qpair.h \ + ../../../corelib/tools/qpair.h \ + ../../../../include/QtCore/qdebug.h \ + ../../../corelib/io/qdebug.h \ + ../../../../include/QtCore/qhash.h \ + ../../../corelib/tools/qhash.h \ + ../../../../include/QtCore/qtextstream.h \ + ../../../corelib/io/qtextstream.h \ + ../../../../include/QtCore/qiodevice.h \ + ../../../corelib/io/qiodevice.h \ + ../../../../include/QtCore/qlocale.h \ + ../../../corelib/tools/qlocale.h \ + ../../../../include/QtCore/qvariant.h \ + ../../../corelib/kernel/qvariant.h \ + ../../../../include/QtCore/qshareddata.h \ + ../../../corelib/tools/qshareddata.h \ + ../../../../include/QtCore/qvector.h \ + ../../../corelib/tools/qvector.h \ + ../../../../include/QtCore/qpoint.h \ + ../../../corelib/tools/qpoint.h \ + ../../../../include/QtCore/qset.h \ + ../../../corelib/tools/qset.h \ + ../../../../include/QtCore/qcontiguouscache.h \ + ../../../corelib/tools/qcontiguouscache.h \ + ../../../../include/QtCore/QString \ + ../../../../include/QtCore/QStringList \ + ../../../../include/QtCore/QVariant \ + ../../../../include/QtDBus/QtDBus \ + ../../../../include/QtDBus/QtDBusDepends \ + ../../../../include/QtCore/QtCore \ + ../../../../include/QtCore/QtCoreDepends \ + ../../../../include/QtCore/qabstractanimation.h \ + ../../../corelib/animation/qabstractanimation.h \ + ../../../../include/QtCore/qanimationgroup.h \ + ../../../corelib/animation/qanimationgroup.h \ + ../../../../include/QtCore/qparallelanimationgroup.h \ + ../../../corelib/animation/qparallelanimationgroup.h \ + ../../../../include/QtCore/qpauseanimation.h \ + ../../../corelib/animation/qpauseanimation.h \ + ../../../../include/QtCore/qpropertyanimation.h \ + ../../../corelib/animation/qpropertyanimation.h \ + ../../../../include/QtCore/qvariantanimation.h \ + ../../../corelib/animation/qvariantanimation.h \ + ../../../../include/QtCore/qeasingcurve.h \ + ../../../corelib/tools/qeasingcurve.h \ + ../../../../include/QtCore/qsequentialanimationgroup.h \ + ../../../corelib/animation/qsequentialanimationgroup.h \ + ../../../../include/QtCore/qtextcodec.h \ + ../../../corelib/codecs/qtextcodec.h \ + ../../../../include/QtCore/qendian.h \ + ../../../corelib/global/qendian.h \ + ../../../../include/QtCore/qlibraryinfo.h \ + ../../../corelib/global/qlibraryinfo.h \ + ../../../../include/QtCore/qdatetime.h \ + ../../../corelib/tools/qdatetime.h \ + ../../../../include/QtCore/qbuffer.h \ + ../../../corelib/io/qbuffer.h \ + ../../../../include/QtCore/qdatastream.h \ + ../../../corelib/io/qdatastream.h \ + ../../../../include/QtCore/qdir.h \ + ../../../corelib/io/qdir.h \ + ../../../../include/QtCore/qfileinfo.h \ + ../../../corelib/io/qfileinfo.h \ + ../../../../include/QtCore/qfile.h \ + ../../../corelib/io/qfile.h \ + ../../../../include/QtCore/qfiledevice.h \ + ../../../corelib/io/qfiledevice.h \ + ../../../../include/QtCore/qdiriterator.h \ + ../../../corelib/io/qdiriterator.h \ + ../../../../include/QtCore/qfileselector.h \ + ../../../corelib/io/qfileselector.h \ + ../../../../include/QtCore/qfilesystemwatcher.h \ + ../../../corelib/io/qfilesystemwatcher.h \ + ../../../../include/QtCore/qlockfile.h \ + ../../../corelib/io/qlockfile.h \ + ../../../../include/QtCore/qloggingcategory.h \ + ../../../corelib/io/qloggingcategory.h \ + ../../../../include/QtCore/qprocess.h \ + ../../../corelib/io/qprocess.h \ + ../../../../include/QtCore/qresource.h \ + ../../../corelib/io/qresource.h \ + ../../../../include/QtCore/qsavefile.h \ + ../../../corelib/io/qsavefile.h \ + ../../../../include/QtCore/qsettings.h \ + ../../../corelib/io/qsettings.h \ + ../../../../include/QtCore/qstandardpaths.h \ + ../../../corelib/io/qstandardpaths.h \ + ../../../../include/QtCore/qstorageinfo.h \ + ../../../corelib/io/qstorageinfo.h \ + ../../../../include/QtCore/qtemporarydir.h \ + ../../../corelib/io/qtemporarydir.h \ + ../../../../include/QtCore/QScopedPointer \ + ../../../../include/QtCore/qtemporaryfile.h \ + ../../../corelib/io/qtemporaryfile.h \ + ../../../../include/QtCore/qurl.h \ + ../../../corelib/io/qurl.h \ + ../../../../include/QtCore/qurlquery.h \ + ../../../corelib/io/qurlquery.h \ + ../../../../include/QtCore/qabstractitemmodel.h \ + ../../../corelib/itemmodels/qabstractitemmodel.h \ + ../../../../include/QtCore/qabstractproxymodel.h \ + ../../../corelib/itemmodels/qabstractproxymodel.h \ + ../../../../include/QtCore/qidentityproxymodel.h \ + ../../../corelib/itemmodels/qidentityproxymodel.h \ + ../../../../include/QtCore/qitemselectionmodel.h \ + ../../../corelib/itemmodels/qitemselectionmodel.h \ + ../../../../include/QtCore/qsortfilterproxymodel.h \ + ../../../corelib/itemmodels/qsortfilterproxymodel.h \ + ../../../../include/QtCore/qstringlistmodel.h \ + ../../../corelib/itemmodels/qstringlistmodel.h \ + ../../../../include/QtCore/qjsonarray.h \ + ../../../corelib/json/qjsonarray.h \ + ../../../../include/QtCore/qjsonvalue.h \ + ../../../corelib/json/qjsonvalue.h \ + ../../../../include/QtCore/qjsondocument.h \ + ../../../corelib/json/qjsondocument.h \ + ../../../../include/QtCore/qjsonobject.h \ + ../../../corelib/json/qjsonobject.h \ + ../../../../include/QtCore/qabstracteventdispatcher.h \ + ../../../corelib/kernel/qabstracteventdispatcher.h \ + ../../../../include/QtCore/qeventloop.h \ + ../../../corelib/kernel/qeventloop.h \ + ../../../../include/QtCore/qabstractnativeeventfilter.h \ + ../../../corelib/kernel/qabstractnativeeventfilter.h \ + ../../../../include/QtCore/qbasictimer.h \ + ../../../corelib/kernel/qbasictimer.h \ + ../../../../include/QtCore/qcoreapplication.h \ + ../../../corelib/kernel/qcoreapplication.h \ + ../../../../include/QtCore/qmath.h \ + ../../../corelib/kernel/qmath.h \ + ../../../../include/QtCore/qmetaobject.h \ + ../../../corelib/kernel/qmetaobject.h \ + ../../../../include/QtCore/qmimedata.h \ + ../../../corelib/kernel/qmimedata.h \ + ../../../../include/QtCore/qobjectcleanuphandler.h \ + ../../../corelib/kernel/qobjectcleanuphandler.h \ + ../../../../include/QtCore/qpointer.h \ + ../../../corelib/kernel/qpointer.h \ + ../../../../include/QtCore/qsharedpointer.h \ + ../../../corelib/tools/qsharedpointer.h \ + ../../../../include/QtCore/qsharedpointer_impl.h \ + ../../../corelib/tools/qsharedpointer_impl.h \ + ../../../../include/QtCore/qsharedmemory.h \ + ../../../corelib/kernel/qsharedmemory.h \ + ../../../../include/QtCore/qsignalmapper.h \ + ../../../corelib/kernel/qsignalmapper.h \ + ../../../../include/QtCore/qsocketnotifier.h \ + ../../../corelib/kernel/qsocketnotifier.h \ + ../../../../include/QtCore/qsystemsemaphore.h \ + ../../../corelib/kernel/qsystemsemaphore.h \ + ../../../../include/QtCore/qtimer.h \ + ../../../corelib/kernel/qtimer.h \ + ../../../../include/QtCore/qtranslator.h \ + ../../../corelib/kernel/qtranslator.h \ + ../../../../include/QtCore/qwineventnotifier.h \ + ../../../corelib/kernel/qwineventnotifier.h \ + ../../../../include/QtCore/qmimedatabase.h \ + ../../../corelib/mimetypes/qmimedatabase.h \ + ../../../../include/QtCore/qmimetype.h \ + ../../../corelib/mimetypes/qmimetype.h \ + ../../../../include/QtCore/qfactoryinterface.h \ + ../../../corelib/plugin/qfactoryinterface.h \ + ../../../../include/QtCore/qlibrary.h \ + ../../../corelib/plugin/qlibrary.h \ + ../../../../include/QtCore/qplugin.h \ + ../../../corelib/plugin/qplugin.h \ + ../../../../include/QtCore/qpluginloader.h \ + ../../../corelib/plugin/qpluginloader.h \ + ../../../../include/QtCore/quuid.h \ + ../../../corelib/plugin/quuid.h \ + ../../../../include/QtCore/qabstractstate.h \ + ../../../corelib/statemachine/qabstractstate.h \ + ../../../../include/QtCore/qabstracttransition.h \ + ../../../corelib/statemachine/qabstracttransition.h \ + ../../../../include/QtCore/qeventtransition.h \ + ../../../corelib/statemachine/qeventtransition.h \ + ../../../../include/QtCore/qfinalstate.h \ + ../../../corelib/statemachine/qfinalstate.h \ + ../../../../include/QtCore/qhistorystate.h \ + ../../../corelib/statemachine/qhistorystate.h \ + ../../../../include/QtCore/qsignaltransition.h \ + ../../../corelib/statemachine/qsignaltransition.h \ + ../../../../include/QtCore/qstate.h \ + ../../../corelib/statemachine/qstate.h \ + ../../../../include/QtCore/qstatemachine.h \ + ../../../corelib/statemachine/qstatemachine.h \ + ../../../../include/QtCore/qexception.h \ + ../../../corelib/thread/qexception.h \ + ../../../../include/QtCore/qfuture.h \ + ../../../corelib/thread/qfuture.h \ + ../../../../include/QtCore/qfutureinterface.h \ + ../../../corelib/thread/qfutureinterface.h \ + ../../../../include/QtCore/qrunnable.h \ + ../../../corelib/thread/qrunnable.h \ + ../../../../include/QtCore/qresultstore.h \ + ../../../corelib/thread/qresultstore.h \ + ../../../../include/QtCore/qfuturesynchronizer.h \ + ../../../corelib/thread/qfuturesynchronizer.h \ + ../../../../include/QtCore/qfuturewatcher.h \ + ../../../corelib/thread/qfuturewatcher.h \ + ../../../../include/QtCore/qreadwritelock.h \ + ../../../corelib/thread/qreadwritelock.h \ + ../../../../include/QtCore/qsemaphore.h \ + ../../../corelib/thread/qsemaphore.h \ + ../../../../include/QtCore/qthread.h \ + ../../../corelib/thread/qthread.h \ + ../../../../include/QtCore/qthreadpool.h \ + ../../../corelib/thread/qthreadpool.h \ + ../../../../include/QtCore/qthreadstorage.h \ + ../../../corelib/thread/qthreadstorage.h \ + ../../../../include/QtCore/qwaitcondition.h \ + ../../../corelib/thread/qwaitcondition.h \ + ../../../../include/QtCore/qarraydataops.h \ + ../../../corelib/tools/qarraydataops.h \ + ../../../../include/QtCore/qarraydatapointer.h \ + ../../../corelib/tools/qarraydatapointer.h \ + ../../../../include/QtCore/qbitarray.h \ + ../../../corelib/tools/qbitarray.h \ + ../../../../include/QtCore/qbytearraymatcher.h \ + ../../../corelib/tools/qbytearraymatcher.h \ + ../../../../include/QtCore/qcache.h \ + ../../../corelib/tools/qcache.h \ + ../../../../include/QtCore/qcollator.h \ + ../../../corelib/tools/qcollator.h \ + ../../../../include/QtCore/qcommandlineoption.h \ + ../../../corelib/tools/qcommandlineoption.h \ + ../../../../include/QtCore/qcommandlineparser.h \ + ../../../corelib/tools/qcommandlineparser.h \ + ../../../../include/QtCore/qcryptographichash.h \ + ../../../corelib/tools/qcryptographichash.h \ + ../../../../include/QtCore/qelapsedtimer.h \ + ../../../corelib/tools/qelapsedtimer.h \ + ../../../../include/QtCore/qline.h \ + ../../../corelib/tools/qline.h \ + ../../../../include/QtCore/qlinkedlist.h \ + ../../../corelib/tools/qlinkedlist.h \ + ../../../../include/QtCore/qmargins.h \ + ../../../corelib/tools/qmargins.h \ + ../../../../include/QtCore/qmessageauthenticationcode.h \ + ../../../corelib/tools/qmessageauthenticationcode.h \ + ../../../../include/QtCore/qqueue.h \ + ../../../corelib/tools/qqueue.h \ + ../../../../include/QtCore/qrect.h \ + ../../../corelib/tools/qrect.h \ + ../../../../include/QtCore/qsize.h \ + ../../../corelib/tools/qsize.h \ + ../../../../include/QtCore/qregularexpression.h \ + ../../../corelib/tools/qregularexpression.h \ + ../../../../include/QtCore/qscopedvaluerollback.h \ + ../../../corelib/tools/qscopedvaluerollback.h \ + ../../../../include/QtCore/qstack.h \ + ../../../corelib/tools/qstack.h \ + ../../../../include/QtCore/qtextboundaryfinder.h \ + ../../../corelib/tools/qtextboundaryfinder.h \ + ../../../../include/QtCore/qtimeline.h \ + ../../../corelib/tools/qtimeline.h \ + ../../../../include/QtCore/qtimezone.h \ + ../../../corelib/tools/qtimezone.h \ + ../../../../include/QtCore/qxmlstream.h \ + ../../../corelib/xml/qxmlstream.h \ + ../../../../include/QtCore/qtcoreversion.h \ + ../../../../include/QtDBus/qdbusabstractadaptor.h \ + ../../../dbus/qdbusabstractadaptor.h \ + ../../../../include/QtDBus/qdbusmacros.h \ + ../../../dbus/qdbusmacros.h \ + ../../../../include/QtDBus/qdbusabstractinterface.h \ + ../../../dbus/qdbusabstractinterface.h \ + ../../../../include/QtDBus/qdbusmessage.h \ + ../../../dbus/qdbusmessage.h \ + ../../../../include/QtDBus/qdbuserror.h \ + ../../../dbus/qdbuserror.h \ + ../../../../include/QtDBus/qdbusextratypes.h \ + ../../../dbus/qdbusextratypes.h \ + ../../../../include/QtDBus/qdbusconnection.h \ + ../../../dbus/qdbusconnection.h \ + ../../../../include/QtDBus/qdbusargument.h \ + ../../../dbus/qdbusargument.h \ + ../../../../include/QtDBus/qdbusconnectioninterface.h \ + ../../../dbus/qdbusconnectioninterface.h \ + ../../../../include/QtDBus/qdbusreply.h \ + ../../../dbus/qdbusreply.h \ + ../../../../include/QtDBus/qdbuspendingreply.h \ + ../../../dbus/qdbuspendingreply.h \ + ../../../../include/QtDBus/qdbuspendingcall.h \ + ../../../dbus/qdbuspendingcall.h \ + ../../../../include/QtDBus/qdbuscontext.h \ + ../../../dbus/qdbuscontext.h \ + ../../../../include/QtDBus/qdbusinterface.h \ + ../../../dbus/qdbusinterface.h \ + ../../../../include/QtDBus/qdbusmetatype.h \ + ../../../dbus/qdbusmetatype.h \ + ../../../../include/QtDBus/qdbusserver.h \ + ../../../dbus/qdbusserver.h \ + ../../../../include/QtDBus/qdbusservicewatcher.h \ + ../../../dbus/qdbusservicewatcher.h \ + ../../../../include/QtDBus/qdbusunixfiledescriptor.h \ + ../../../dbus/qdbusunixfiledescriptor.h \ + ../../../../include/QtDBus/qdbusvirtualobject.h \ + ../../../dbus/qdbusvirtualobject.h \ + ../../../../include/QtDBus/qtdbusversion.h \ + fcitxqtinputmethoditem.h \ + fcitxqtdbusaddons_export.h \ + ../../../../include/QtCore/QMetaType \ + ../../../../include/QtDBus/QDBusArgument + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/fcitxqtinputmethodproxy.o fcitxqtinputmethodproxy.cpp + +.obj/fcitxqtkeyboardlayout.o: fcitxqtkeyboardlayout.cpp ../../../../include/QtDBus/QDBusArgument \ + ../../../../include/QtDBus/qdbusargument.h \ + ../../../dbus/qdbusargument.h \ + ../../../../include/QtCore/qbytearray.h \ + ../../../corelib/tools/qbytearray.h \ + ../../../../include/QtCore/qrefcount.h \ + ../../../corelib/tools/qrefcount.h \ + ../../../../include/QtCore/qatomic.h \ + ../../../corelib/thread/qatomic.h \ + ../../../../include/QtCore/qglobal.h \ + ../../../corelib/global/qglobal.h \ + ../../../../include/QtCore/qconfig.h \ + ../../../corelib/global/qconfig.h \ + ../../../../include/QtCore/qfeatures.h \ + ../../../corelib/global/qfeatures.h \ + ../../../../include/QtCore/qsystemdetection.h \ + ../../../corelib/global/qsystemdetection.h \ + ../../../../include/QtCore/qprocessordetection.h \ + ../../../corelib/global/qprocessordetection.h \ + ../../../../include/QtCore/qcompilerdetection.h \ + ../../../corelib/global/qcompilerdetection.h \ + ../../../../include/QtCore/qtypeinfo.h \ + ../../../corelib/global/qtypeinfo.h \ + ../../../../include/QtCore/qtypetraits.h \ + ../../../corelib/global/qtypetraits.h \ + ../../../../include/QtCore/qsysinfo.h \ + ../../../corelib/global/qsysinfo.h \ + ../../../../include/QtCore/qlogging.h \ + ../../../corelib/global/qlogging.h \ + ../../../../include/QtCore/qflags.h \ + ../../../corelib/global/qflags.h \ + ../../../../include/QtCore/qglobalstatic.h \ + ../../../corelib/global/qglobalstatic.h \ + ../../../../include/QtCore/qmutex.h \ + ../../../corelib/thread/qmutex.h \ + ../../../../include/QtCore/qnumeric.h \ + ../../../corelib/global/qnumeric.h \ + ../../../../include/QtCore/qbasicatomic.h \ + ../../../corelib/thread/qbasicatomic.h \ + ../../../../include/QtCore/qatomic_bootstrap.h \ + ../../../corelib/arch/qatomic_bootstrap.h \ + ../../../../include/QtCore/qgenericatomic.h \ + ../../../corelib/thread/qgenericatomic.h \ + ../../../../include/QtCore/qatomic_cxx11.h \ + ../../../corelib/arch/qatomic_cxx11.h \ + ../../../../include/QtCore/qatomic_gcc.h \ + ../../../corelib/arch/qatomic_gcc.h \ + ../../../../include/QtCore/qatomic_msvc.h \ + ../../../corelib/arch/qatomic_msvc.h \ + ../../../../include/QtCore/qatomic_armv7.h \ + ../../../corelib/arch/qatomic_armv7.h \ + ../../../../include/QtCore/qatomic_armv6.h \ + ../../../corelib/arch/qatomic_armv6.h \ + ../../../../include/QtCore/qatomic_armv5.h \ + ../../../corelib/arch/qatomic_armv5.h \ + ../../../../include/QtCore/qatomic_ia64.h \ + ../../../corelib/arch/qatomic_ia64.h \ + ../../../../include/QtCore/qatomic_mips.h \ + ../../../corelib/arch/qatomic_mips.h \ + ../../../../include/QtCore/qatomic_x86.h \ + ../../../corelib/arch/qatomic_x86.h \ + ../../../../include/QtCore/qatomic_unix.h \ + ../../../corelib/arch/qatomic_unix.h \ + ../../../../include/QtCore/qnamespace.h \ + ../../../corelib/global/qnamespace.h \ + ../../../../include/QtCore/qarraydata.h \ + ../../../corelib/tools/qarraydata.h \ + ../../../../include/QtCore/qstring.h \ + ../../../corelib/tools/qstring.h \ + ../../../../include/QtCore/qchar.h \ + ../../../corelib/tools/qchar.h \ + ../../../../include/QtCore/qstringbuilder.h \ + ../../../corelib/tools/qstringbuilder.h \ + ../../../../include/QtCore/qhash.h \ + ../../../corelib/tools/qhash.h \ + ../../../../include/QtCore/qiterator.h \ + ../../../corelib/tools/qiterator.h \ + ../../../../include/QtCore/qlist.h \ + ../../../corelib/tools/qlist.h \ + ../../../../include/QtCore/qalgorithms.h \ + ../../../corelib/tools/qalgorithms.h \ + ../../../../include/QtCore/qbytearraylist.h \ + ../../../corelib/tools/qbytearraylist.h \ + ../../../../include/QtCore/qstringlist.h \ + ../../../corelib/tools/qstringlist.h \ + ../../../../include/QtCore/qregexp.h \ + ../../../corelib/tools/qregexp.h \ + ../../../../include/QtCore/qstringmatcher.h \ + ../../../corelib/tools/qstringmatcher.h \ + ../../../../include/QtCore/qpair.h \ + ../../../corelib/tools/qpair.h \ + ../../../../include/QtCore/qmap.h \ + ../../../corelib/tools/qmap.h \ + ../../../../include/QtCore/qdebug.h \ + ../../../corelib/io/qdebug.h \ + ../../../../include/QtCore/qtextstream.h \ + ../../../corelib/io/qtextstream.h \ + ../../../../include/QtCore/qiodevice.h \ + ../../../corelib/io/qiodevice.h \ + ../../../../include/QtCore/qobject.h \ + ../../../corelib/kernel/qobject.h \ + ../../../../include/QtCore/qobjectdefs.h \ + ../../../corelib/kernel/qobjectdefs.h \ + ../../../../include/QtCore/qobjectdefs_impl.h \ + ../../../corelib/kernel/qobjectdefs_impl.h \ + ../../../../include/QtCore/qcoreevent.h \ + ../../../corelib/kernel/qcoreevent.h \ + ../../../../include/QtCore/qscopedpointer.h \ + ../../../corelib/tools/qscopedpointer.h \ + ../../../../include/QtCore/qmetatype.h \ + ../../../corelib/kernel/qmetatype.h \ + ../../../../include/QtCore/qvarlengtharray.h \ + ../../../corelib/tools/qvarlengtharray.h \ + ../../../../include/QtCore/qcontainerfwd.h \ + ../../../corelib/tools/qcontainerfwd.h \ + ../../../../include/QtCore/qisenum.h \ + ../../../corelib/global/qisenum.h \ + ../../../../include/QtCore/qobject_impl.h \ + ../../../corelib/kernel/qobject_impl.h \ + ../../../../include/QtCore/qlocale.h \ + ../../../corelib/tools/qlocale.h \ + ../../../../include/QtCore/qvariant.h \ + ../../../corelib/kernel/qvariant.h \ + ../../../../include/QtCore/qshareddata.h \ + ../../../corelib/tools/qshareddata.h \ + ../../../../include/QtCore/qvector.h \ + ../../../corelib/tools/qvector.h \ + ../../../../include/QtCore/qpoint.h \ + ../../../corelib/tools/qpoint.h \ + ../../../../include/QtCore/qset.h \ + ../../../corelib/tools/qset.h \ + ../../../../include/QtCore/qcontiguouscache.h \ + ../../../corelib/tools/qcontiguouscache.h \ + ../../../../include/QtDBus/qdbusextratypes.h \ + ../../../dbus/qdbusextratypes.h \ + ../../../../include/QtDBus/qdbusmacros.h \ + ../../../dbus/qdbusmacros.h \ + ../../../../include/QtDBus/QDBusMetaType \ + ../../../../include/QtDBus/qdbusmetatype.h \ + ../../../dbus/qdbusmetatype.h \ + fcitxqtkeyboardlayout.h \ + fcitxqtdbusaddons_export.h \ + ../../../../include/QtCore/QString \ + ../../../../include/QtCore/QMetaType + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/fcitxqtkeyboardlayout.o fcitxqtkeyboardlayout.cpp + +.obj/fcitxqtkeyboardproxy.o: fcitxqtkeyboardproxy.cpp fcitxqtkeyboardproxy.h \ + ../../../../include/QtCore/QObject \ + ../../../../include/QtCore/qobject.h \ + ../../../corelib/kernel/qobject.h \ + ../../../../include/QtCore/qobjectdefs.h \ + ../../../corelib/kernel/qobjectdefs.h \ + ../../../../include/QtCore/qnamespace.h \ + ../../../corelib/global/qnamespace.h \ + ../../../../include/QtCore/qglobal.h \ + ../../../corelib/global/qglobal.h \ + ../../../../include/QtCore/qconfig.h \ + ../../../corelib/global/qconfig.h \ + ../../../../include/QtCore/qfeatures.h \ + ../../../corelib/global/qfeatures.h \ + ../../../../include/QtCore/qsystemdetection.h \ + ../../../corelib/global/qsystemdetection.h \ + ../../../../include/QtCore/qprocessordetection.h \ + ../../../corelib/global/qprocessordetection.h \ + ../../../../include/QtCore/qcompilerdetection.h \ + ../../../corelib/global/qcompilerdetection.h \ + ../../../../include/QtCore/qtypeinfo.h \ + ../../../corelib/global/qtypeinfo.h \ + ../../../../include/QtCore/qtypetraits.h \ + ../../../corelib/global/qtypetraits.h \ + ../../../../include/QtCore/qsysinfo.h \ + ../../../corelib/global/qsysinfo.h \ + ../../../../include/QtCore/qlogging.h \ + ../../../corelib/global/qlogging.h \ + ../../../../include/QtCore/qflags.h \ + ../../../corelib/global/qflags.h \ + ../../../../include/QtCore/qatomic.h \ + ../../../corelib/thread/qatomic.h \ + ../../../../include/QtCore/qbasicatomic.h \ + ../../../corelib/thread/qbasicatomic.h \ + ../../../../include/QtCore/qatomic_bootstrap.h \ + ../../../corelib/arch/qatomic_bootstrap.h \ + ../../../../include/QtCore/qgenericatomic.h \ + ../../../corelib/thread/qgenericatomic.h \ + ../../../../include/QtCore/qatomic_cxx11.h \ + ../../../corelib/arch/qatomic_cxx11.h \ + ../../../../include/QtCore/qatomic_gcc.h \ + ../../../corelib/arch/qatomic_gcc.h \ + ../../../../include/QtCore/qatomic_msvc.h \ + ../../../corelib/arch/qatomic_msvc.h \ + ../../../../include/QtCore/qatomic_armv7.h \ + ../../../corelib/arch/qatomic_armv7.h \ + ../../../../include/QtCore/qatomic_armv6.h \ + ../../../corelib/arch/qatomic_armv6.h \ + ../../../../include/QtCore/qatomic_armv5.h \ + ../../../corelib/arch/qatomic_armv5.h \ + ../../../../include/QtCore/qatomic_ia64.h \ + ../../../corelib/arch/qatomic_ia64.h \ + ../../../../include/QtCore/qatomic_mips.h \ + ../../../corelib/arch/qatomic_mips.h \ + ../../../../include/QtCore/qatomic_x86.h \ + ../../../corelib/arch/qatomic_x86.h \ + ../../../../include/QtCore/qatomic_unix.h \ + ../../../corelib/arch/qatomic_unix.h \ + ../../../../include/QtCore/qglobalstatic.h \ + ../../../corelib/global/qglobalstatic.h \ + ../../../../include/QtCore/qmutex.h \ + ../../../corelib/thread/qmutex.h \ + ../../../../include/QtCore/qnumeric.h \ + ../../../corelib/global/qnumeric.h \ + ../../../../include/QtCore/qobjectdefs_impl.h \ + ../../../corelib/kernel/qobjectdefs_impl.h \ + ../../../../include/QtCore/qstring.h \ + ../../../corelib/tools/qstring.h \ + ../../../../include/QtCore/qchar.h \ + ../../../corelib/tools/qchar.h \ + ../../../../include/QtCore/qbytearray.h \ + ../../../corelib/tools/qbytearray.h \ + ../../../../include/QtCore/qrefcount.h \ + ../../../corelib/tools/qrefcount.h \ + ../../../../include/QtCore/qarraydata.h \ + ../../../corelib/tools/qarraydata.h \ + ../../../../include/QtCore/qstringbuilder.h \ + ../../../corelib/tools/qstringbuilder.h \ + ../../../../include/QtCore/qlist.h \ + ../../../corelib/tools/qlist.h \ + ../../../../include/QtCore/qalgorithms.h \ + ../../../corelib/tools/qalgorithms.h \ + ../../../../include/QtCore/qiterator.h \ + ../../../corelib/tools/qiterator.h \ + ../../../../include/QtCore/qbytearraylist.h \ + ../../../corelib/tools/qbytearraylist.h \ + ../../../../include/QtCore/qstringlist.h \ + ../../../corelib/tools/qstringlist.h \ + ../../../../include/QtCore/qregexp.h \ + ../../../corelib/tools/qregexp.h \ + ../../../../include/QtCore/qstringmatcher.h \ + ../../../corelib/tools/qstringmatcher.h \ + ../../../../include/QtCore/qcoreevent.h \ + ../../../corelib/kernel/qcoreevent.h \ + ../../../../include/QtCore/qscopedpointer.h \ + ../../../corelib/tools/qscopedpointer.h \ + ../../../../include/QtCore/qmetatype.h \ + ../../../corelib/kernel/qmetatype.h \ + ../../../../include/QtCore/qvarlengtharray.h \ + ../../../corelib/tools/qvarlengtharray.h \ + ../../../../include/QtCore/qcontainerfwd.h \ + ../../../corelib/tools/qcontainerfwd.h \ + ../../../../include/QtCore/qisenum.h \ + ../../../corelib/global/qisenum.h \ + ../../../../include/QtCore/qobject_impl.h \ + ../../../corelib/kernel/qobject_impl.h \ + ../../../../include/QtCore/QByteArray \ + ../../../../include/QtCore/QList \ + ../../../../include/QtCore/QMap \ + ../../../../include/QtCore/qmap.h \ + ../../../corelib/tools/qmap.h \ + ../../../../include/QtCore/qpair.h \ + ../../../corelib/tools/qpair.h \ + ../../../../include/QtCore/qdebug.h \ + ../../../corelib/io/qdebug.h \ + ../../../../include/QtCore/qhash.h \ + ../../../corelib/tools/qhash.h \ + ../../../../include/QtCore/qtextstream.h \ + ../../../corelib/io/qtextstream.h \ + ../../../../include/QtCore/qiodevice.h \ + ../../../corelib/io/qiodevice.h \ + ../../../../include/QtCore/qlocale.h \ + ../../../corelib/tools/qlocale.h \ + ../../../../include/QtCore/qvariant.h \ + ../../../corelib/kernel/qvariant.h \ + ../../../../include/QtCore/qshareddata.h \ + ../../../corelib/tools/qshareddata.h \ + ../../../../include/QtCore/qvector.h \ + ../../../corelib/tools/qvector.h \ + ../../../../include/QtCore/qpoint.h \ + ../../../corelib/tools/qpoint.h \ + ../../../../include/QtCore/qset.h \ + ../../../corelib/tools/qset.h \ + ../../../../include/QtCore/qcontiguouscache.h \ + ../../../corelib/tools/qcontiguouscache.h \ + ../../../../include/QtCore/QString \ + ../../../../include/QtCore/QStringList \ + ../../../../include/QtCore/QVariant \ + ../../../../include/QtDBus/QtDBus \ + ../../../../include/QtDBus/QtDBusDepends \ + ../../../../include/QtCore/QtCore \ + ../../../../include/QtCore/QtCoreDepends \ + ../../../../include/QtCore/qabstractanimation.h \ + ../../../corelib/animation/qabstractanimation.h \ + ../../../../include/QtCore/qanimationgroup.h \ + ../../../corelib/animation/qanimationgroup.h \ + ../../../../include/QtCore/qparallelanimationgroup.h \ + ../../../corelib/animation/qparallelanimationgroup.h \ + ../../../../include/QtCore/qpauseanimation.h \ + ../../../corelib/animation/qpauseanimation.h \ + ../../../../include/QtCore/qpropertyanimation.h \ + ../../../corelib/animation/qpropertyanimation.h \ + ../../../../include/QtCore/qvariantanimation.h \ + ../../../corelib/animation/qvariantanimation.h \ + ../../../../include/QtCore/qeasingcurve.h \ + ../../../corelib/tools/qeasingcurve.h \ + ../../../../include/QtCore/qsequentialanimationgroup.h \ + ../../../corelib/animation/qsequentialanimationgroup.h \ + ../../../../include/QtCore/qtextcodec.h \ + ../../../corelib/codecs/qtextcodec.h \ + ../../../../include/QtCore/qendian.h \ + ../../../corelib/global/qendian.h \ + ../../../../include/QtCore/qlibraryinfo.h \ + ../../../corelib/global/qlibraryinfo.h \ + ../../../../include/QtCore/qdatetime.h \ + ../../../corelib/tools/qdatetime.h \ + ../../../../include/QtCore/qbuffer.h \ + ../../../corelib/io/qbuffer.h \ + ../../../../include/QtCore/qdatastream.h \ + ../../../corelib/io/qdatastream.h \ + ../../../../include/QtCore/qdir.h \ + ../../../corelib/io/qdir.h \ + ../../../../include/QtCore/qfileinfo.h \ + ../../../corelib/io/qfileinfo.h \ + ../../../../include/QtCore/qfile.h \ + ../../../corelib/io/qfile.h \ + ../../../../include/QtCore/qfiledevice.h \ + ../../../corelib/io/qfiledevice.h \ + ../../../../include/QtCore/qdiriterator.h \ + ../../../corelib/io/qdiriterator.h \ + ../../../../include/QtCore/qfileselector.h \ + ../../../corelib/io/qfileselector.h \ + ../../../../include/QtCore/qfilesystemwatcher.h \ + ../../../corelib/io/qfilesystemwatcher.h \ + ../../../../include/QtCore/qlockfile.h \ + ../../../corelib/io/qlockfile.h \ + ../../../../include/QtCore/qloggingcategory.h \ + ../../../corelib/io/qloggingcategory.h \ + ../../../../include/QtCore/qprocess.h \ + ../../../corelib/io/qprocess.h \ + ../../../../include/QtCore/qresource.h \ + ../../../corelib/io/qresource.h \ + ../../../../include/QtCore/qsavefile.h \ + ../../../corelib/io/qsavefile.h \ + ../../../../include/QtCore/qsettings.h \ + ../../../corelib/io/qsettings.h \ + ../../../../include/QtCore/qstandardpaths.h \ + ../../../corelib/io/qstandardpaths.h \ + ../../../../include/QtCore/qstorageinfo.h \ + ../../../corelib/io/qstorageinfo.h \ + ../../../../include/QtCore/qtemporarydir.h \ + ../../../corelib/io/qtemporarydir.h \ + ../../../../include/QtCore/QScopedPointer \ + ../../../../include/QtCore/qtemporaryfile.h \ + ../../../corelib/io/qtemporaryfile.h \ + ../../../../include/QtCore/qurl.h \ + ../../../corelib/io/qurl.h \ + ../../../../include/QtCore/qurlquery.h \ + ../../../corelib/io/qurlquery.h \ + ../../../../include/QtCore/qabstractitemmodel.h \ + ../../../corelib/itemmodels/qabstractitemmodel.h \ + ../../../../include/QtCore/qabstractproxymodel.h \ + ../../../corelib/itemmodels/qabstractproxymodel.h \ + ../../../../include/QtCore/qidentityproxymodel.h \ + ../../../corelib/itemmodels/qidentityproxymodel.h \ + ../../../../include/QtCore/qitemselectionmodel.h \ + ../../../corelib/itemmodels/qitemselectionmodel.h \ + ../../../../include/QtCore/qsortfilterproxymodel.h \ + ../../../corelib/itemmodels/qsortfilterproxymodel.h \ + ../../../../include/QtCore/qstringlistmodel.h \ + ../../../corelib/itemmodels/qstringlistmodel.h \ + ../../../../include/QtCore/qjsonarray.h \ + ../../../corelib/json/qjsonarray.h \ + ../../../../include/QtCore/qjsonvalue.h \ + ../../../corelib/json/qjsonvalue.h \ + ../../../../include/QtCore/qjsondocument.h \ + ../../../corelib/json/qjsondocument.h \ + ../../../../include/QtCore/qjsonobject.h \ + ../../../corelib/json/qjsonobject.h \ + ../../../../include/QtCore/qabstracteventdispatcher.h \ + ../../../corelib/kernel/qabstracteventdispatcher.h \ + ../../../../include/QtCore/qeventloop.h \ + ../../../corelib/kernel/qeventloop.h \ + ../../../../include/QtCore/qabstractnativeeventfilter.h \ + ../../../corelib/kernel/qabstractnativeeventfilter.h \ + ../../../../include/QtCore/qbasictimer.h \ + ../../../corelib/kernel/qbasictimer.h \ + ../../../../include/QtCore/qcoreapplication.h \ + ../../../corelib/kernel/qcoreapplication.h \ + ../../../../include/QtCore/qmath.h \ + ../../../corelib/kernel/qmath.h \ + ../../../../include/QtCore/qmetaobject.h \ + ../../../corelib/kernel/qmetaobject.h \ + ../../../../include/QtCore/qmimedata.h \ + ../../../corelib/kernel/qmimedata.h \ + ../../../../include/QtCore/qobjectcleanuphandler.h \ + ../../../corelib/kernel/qobjectcleanuphandler.h \ + ../../../../include/QtCore/qpointer.h \ + ../../../corelib/kernel/qpointer.h \ + ../../../../include/QtCore/qsharedpointer.h \ + ../../../corelib/tools/qsharedpointer.h \ + ../../../../include/QtCore/qsharedpointer_impl.h \ + ../../../corelib/tools/qsharedpointer_impl.h \ + ../../../../include/QtCore/qsharedmemory.h \ + ../../../corelib/kernel/qsharedmemory.h \ + ../../../../include/QtCore/qsignalmapper.h \ + ../../../corelib/kernel/qsignalmapper.h \ + ../../../../include/QtCore/qsocketnotifier.h \ + ../../../corelib/kernel/qsocketnotifier.h \ + ../../../../include/QtCore/qsystemsemaphore.h \ + ../../../corelib/kernel/qsystemsemaphore.h \ + ../../../../include/QtCore/qtimer.h \ + ../../../corelib/kernel/qtimer.h \ + ../../../../include/QtCore/qtranslator.h \ + ../../../corelib/kernel/qtranslator.h \ + ../../../../include/QtCore/qwineventnotifier.h \ + ../../../corelib/kernel/qwineventnotifier.h \ + ../../../../include/QtCore/qmimedatabase.h \ + ../../../corelib/mimetypes/qmimedatabase.h \ + ../../../../include/QtCore/qmimetype.h \ + ../../../corelib/mimetypes/qmimetype.h \ + ../../../../include/QtCore/qfactoryinterface.h \ + ../../../corelib/plugin/qfactoryinterface.h \ + ../../../../include/QtCore/qlibrary.h \ + ../../../corelib/plugin/qlibrary.h \ + ../../../../include/QtCore/qplugin.h \ + ../../../corelib/plugin/qplugin.h \ + ../../../../include/QtCore/qpluginloader.h \ + ../../../corelib/plugin/qpluginloader.h \ + ../../../../include/QtCore/quuid.h \ + ../../../corelib/plugin/quuid.h \ + ../../../../include/QtCore/qabstractstate.h \ + ../../../corelib/statemachine/qabstractstate.h \ + ../../../../include/QtCore/qabstracttransition.h \ + ../../../corelib/statemachine/qabstracttransition.h \ + ../../../../include/QtCore/qeventtransition.h \ + ../../../corelib/statemachine/qeventtransition.h \ + ../../../../include/QtCore/qfinalstate.h \ + ../../../corelib/statemachine/qfinalstate.h \ + ../../../../include/QtCore/qhistorystate.h \ + ../../../corelib/statemachine/qhistorystate.h \ + ../../../../include/QtCore/qsignaltransition.h \ + ../../../corelib/statemachine/qsignaltransition.h \ + ../../../../include/QtCore/qstate.h \ + ../../../corelib/statemachine/qstate.h \ + ../../../../include/QtCore/qstatemachine.h \ + ../../../corelib/statemachine/qstatemachine.h \ + ../../../../include/QtCore/qexception.h \ + ../../../corelib/thread/qexception.h \ + ../../../../include/QtCore/qfuture.h \ + ../../../corelib/thread/qfuture.h \ + ../../../../include/QtCore/qfutureinterface.h \ + ../../../corelib/thread/qfutureinterface.h \ + ../../../../include/QtCore/qrunnable.h \ + ../../../corelib/thread/qrunnable.h \ + ../../../../include/QtCore/qresultstore.h \ + ../../../corelib/thread/qresultstore.h \ + ../../../../include/QtCore/qfuturesynchronizer.h \ + ../../../corelib/thread/qfuturesynchronizer.h \ + ../../../../include/QtCore/qfuturewatcher.h \ + ../../../corelib/thread/qfuturewatcher.h \ + ../../../../include/QtCore/qreadwritelock.h \ + ../../../corelib/thread/qreadwritelock.h \ + ../../../../include/QtCore/qsemaphore.h \ + ../../../corelib/thread/qsemaphore.h \ + ../../../../include/QtCore/qthread.h \ + ../../../corelib/thread/qthread.h \ + ../../../../include/QtCore/qthreadpool.h \ + ../../../corelib/thread/qthreadpool.h \ + ../../../../include/QtCore/qthreadstorage.h \ + ../../../corelib/thread/qthreadstorage.h \ + ../../../../include/QtCore/qwaitcondition.h \ + ../../../corelib/thread/qwaitcondition.h \ + ../../../../include/QtCore/qarraydataops.h \ + ../../../corelib/tools/qarraydataops.h \ + ../../../../include/QtCore/qarraydatapointer.h \ + ../../../corelib/tools/qarraydatapointer.h \ + ../../../../include/QtCore/qbitarray.h \ + ../../../corelib/tools/qbitarray.h \ + ../../../../include/QtCore/qbytearraymatcher.h \ + ../../../corelib/tools/qbytearraymatcher.h \ + ../../../../include/QtCore/qcache.h \ + ../../../corelib/tools/qcache.h \ + ../../../../include/QtCore/qcollator.h \ + ../../../corelib/tools/qcollator.h \ + ../../../../include/QtCore/qcommandlineoption.h \ + ../../../corelib/tools/qcommandlineoption.h \ + ../../../../include/QtCore/qcommandlineparser.h \ + ../../../corelib/tools/qcommandlineparser.h \ + ../../../../include/QtCore/qcryptographichash.h \ + ../../../corelib/tools/qcryptographichash.h \ + ../../../../include/QtCore/qelapsedtimer.h \ + ../../../corelib/tools/qelapsedtimer.h \ + ../../../../include/QtCore/qline.h \ + ../../../corelib/tools/qline.h \ + ../../../../include/QtCore/qlinkedlist.h \ + ../../../corelib/tools/qlinkedlist.h \ + ../../../../include/QtCore/qmargins.h \ + ../../../corelib/tools/qmargins.h \ + ../../../../include/QtCore/qmessageauthenticationcode.h \ + ../../../corelib/tools/qmessageauthenticationcode.h \ + ../../../../include/QtCore/qqueue.h \ + ../../../corelib/tools/qqueue.h \ + ../../../../include/QtCore/qrect.h \ + ../../../corelib/tools/qrect.h \ + ../../../../include/QtCore/qsize.h \ + ../../../corelib/tools/qsize.h \ + ../../../../include/QtCore/qregularexpression.h \ + ../../../corelib/tools/qregularexpression.h \ + ../../../../include/QtCore/qscopedvaluerollback.h \ + ../../../corelib/tools/qscopedvaluerollback.h \ + ../../../../include/QtCore/qstack.h \ + ../../../corelib/tools/qstack.h \ + ../../../../include/QtCore/qtextboundaryfinder.h \ + ../../../corelib/tools/qtextboundaryfinder.h \ + ../../../../include/QtCore/qtimeline.h \ + ../../../corelib/tools/qtimeline.h \ + ../../../../include/QtCore/qtimezone.h \ + ../../../corelib/tools/qtimezone.h \ + ../../../../include/QtCore/qxmlstream.h \ + ../../../corelib/xml/qxmlstream.h \ + ../../../../include/QtCore/qtcoreversion.h \ + ../../../../include/QtDBus/qdbusabstractadaptor.h \ + ../../../dbus/qdbusabstractadaptor.h \ + ../../../../include/QtDBus/qdbusmacros.h \ + ../../../dbus/qdbusmacros.h \ + ../../../../include/QtDBus/qdbusabstractinterface.h \ + ../../../dbus/qdbusabstractinterface.h \ + ../../../../include/QtDBus/qdbusmessage.h \ + ../../../dbus/qdbusmessage.h \ + ../../../../include/QtDBus/qdbuserror.h \ + ../../../dbus/qdbuserror.h \ + ../../../../include/QtDBus/qdbusextratypes.h \ + ../../../dbus/qdbusextratypes.h \ + ../../../../include/QtDBus/qdbusconnection.h \ + ../../../dbus/qdbusconnection.h \ + ../../../../include/QtDBus/qdbusargument.h \ + ../../../dbus/qdbusargument.h \ + ../../../../include/QtDBus/qdbusconnectioninterface.h \ + ../../../dbus/qdbusconnectioninterface.h \ + ../../../../include/QtDBus/qdbusreply.h \ + ../../../dbus/qdbusreply.h \ + ../../../../include/QtDBus/qdbuspendingreply.h \ + ../../../dbus/qdbuspendingreply.h \ + ../../../../include/QtDBus/qdbuspendingcall.h \ + ../../../dbus/qdbuspendingcall.h \ + ../../../../include/QtDBus/qdbuscontext.h \ + ../../../dbus/qdbuscontext.h \ + ../../../../include/QtDBus/qdbusinterface.h \ + ../../../dbus/qdbusinterface.h \ + ../../../../include/QtDBus/qdbusmetatype.h \ + ../../../dbus/qdbusmetatype.h \ + ../../../../include/QtDBus/qdbusserver.h \ + ../../../dbus/qdbusserver.h \ + ../../../../include/QtDBus/qdbusservicewatcher.h \ + ../../../dbus/qdbusservicewatcher.h \ + ../../../../include/QtDBus/qdbusunixfiledescriptor.h \ + ../../../dbus/qdbusunixfiledescriptor.h \ + ../../../../include/QtDBus/qdbusvirtualobject.h \ + ../../../dbus/qdbusvirtualobject.h \ + ../../../../include/QtDBus/qtdbusversion.h \ + fcitxqtkeyboardlayout.h \ + fcitxqtdbusaddons_export.h \ + ../../../../include/QtCore/QMetaType \ + ../../../../include/QtDBus/QDBusArgument + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/fcitxqtkeyboardproxy.o fcitxqtkeyboardproxy.cpp + +.obj/keyuni.o: keyuni.cpp keyuni.h \ + ../../../../include/QtCore/qglobal.h \ + ../../../corelib/global/qglobal.h \ + ../../../../include/QtCore/qconfig.h \ + ../../../corelib/global/qconfig.h \ + ../../../../include/QtCore/qfeatures.h \ + ../../../corelib/global/qfeatures.h \ + ../../../../include/QtCore/qsystemdetection.h \ + ../../../corelib/global/qsystemdetection.h \ + ../../../../include/QtCore/qprocessordetection.h \ + ../../../corelib/global/qprocessordetection.h \ + ../../../../include/QtCore/qcompilerdetection.h \ + ../../../corelib/global/qcompilerdetection.h \ + ../../../../include/QtCore/qtypeinfo.h \ + ../../../corelib/global/qtypeinfo.h \ + ../../../../include/QtCore/qtypetraits.h \ + ../../../corelib/global/qtypetraits.h \ + ../../../../include/QtCore/qsysinfo.h \ + ../../../corelib/global/qsysinfo.h \ + ../../../../include/QtCore/qlogging.h \ + ../../../corelib/global/qlogging.h \ + ../../../../include/QtCore/qflags.h \ + ../../../corelib/global/qflags.h \ + ../../../../include/QtCore/qatomic.h \ + ../../../corelib/thread/qatomic.h \ + ../../../../include/QtCore/qbasicatomic.h \ + ../../../corelib/thread/qbasicatomic.h \ + ../../../../include/QtCore/qatomic_bootstrap.h \ + ../../../corelib/arch/qatomic_bootstrap.h \ + ../../../../include/QtCore/qgenericatomic.h \ + ../../../corelib/thread/qgenericatomic.h \ + ../../../../include/QtCore/qatomic_cxx11.h \ + ../../../corelib/arch/qatomic_cxx11.h \ + ../../../../include/QtCore/qatomic_gcc.h \ + ../../../corelib/arch/qatomic_gcc.h \ + ../../../../include/QtCore/qatomic_msvc.h \ + ../../../corelib/arch/qatomic_msvc.h \ + ../../../../include/QtCore/qatomic_armv7.h \ + ../../../corelib/arch/qatomic_armv7.h \ + ../../../../include/QtCore/qatomic_armv6.h \ + ../../../corelib/arch/qatomic_armv6.h \ + ../../../../include/QtCore/qatomic_armv5.h \ + ../../../corelib/arch/qatomic_armv5.h \ + ../../../../include/QtCore/qatomic_ia64.h \ + ../../../corelib/arch/qatomic_ia64.h \ + ../../../../include/QtCore/qatomic_mips.h \ + ../../../corelib/arch/qatomic_mips.h \ + ../../../../include/QtCore/qatomic_x86.h \ + ../../../corelib/arch/qatomic_x86.h \ + ../../../../include/QtCore/qatomic_unix.h \ + ../../../corelib/arch/qatomic_unix.h \ + ../../../../include/QtCore/qglobalstatic.h \ + ../../../corelib/global/qglobalstatic.h \ + ../../../../include/QtCore/qmutex.h \ + ../../../corelib/thread/qmutex.h \ + ../../../../include/QtCore/qnumeric.h \ + ../../../corelib/global/qnumeric.h \ + keydata.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/keyuni.o keyuni.cpp + +.obj/main.o: main.cpp main.h \ + ../../../../include/QtGui/5.5.0/QtGui/qpa/qplatforminputcontextplugin_p.h \ + ../../../gui/kernel/qplatforminputcontextplugin_p.h \ + ../../../../include/QtCore/qplugin.h \ + ../../../corelib/plugin/qplugin.h \ + ../../../../include/QtCore/qobject.h \ + ../../../corelib/kernel/qobject.h \ + ../../../../include/QtCore/qobjectdefs.h \ + ../../../corelib/kernel/qobjectdefs.h \ + ../../../../include/QtCore/qnamespace.h \ + ../../../corelib/global/qnamespace.h \ + ../../../../include/QtCore/qglobal.h \ + ../../../corelib/global/qglobal.h \ + ../../../../include/QtCore/qconfig.h \ + ../../../corelib/global/qconfig.h \ + ../../../../include/QtCore/qfeatures.h \ + ../../../corelib/global/qfeatures.h \ + ../../../../include/QtCore/qsystemdetection.h \ + ../../../corelib/global/qsystemdetection.h \ + ../../../../include/QtCore/qprocessordetection.h \ + ../../../corelib/global/qprocessordetection.h \ + ../../../../include/QtCore/qcompilerdetection.h \ + ../../../corelib/global/qcompilerdetection.h \ + ../../../../include/QtCore/qtypeinfo.h \ + ../../../corelib/global/qtypeinfo.h \ + ../../../../include/QtCore/qtypetraits.h \ + ../../../corelib/global/qtypetraits.h \ + ../../../../include/QtCore/qsysinfo.h \ + ../../../corelib/global/qsysinfo.h \ + ../../../../include/QtCore/qlogging.h \ + ../../../corelib/global/qlogging.h \ + ../../../../include/QtCore/qflags.h \ + ../../../corelib/global/qflags.h \ + ../../../../include/QtCore/qatomic.h \ + ../../../corelib/thread/qatomic.h \ + ../../../../include/QtCore/qbasicatomic.h \ + ../../../corelib/thread/qbasicatomic.h \ + ../../../../include/QtCore/qatomic_bootstrap.h \ + ../../../corelib/arch/qatomic_bootstrap.h \ + ../../../../include/QtCore/qgenericatomic.h \ + ../../../corelib/thread/qgenericatomic.h \ + ../../../../include/QtCore/qatomic_cxx11.h \ + ../../../corelib/arch/qatomic_cxx11.h \ + ../../../../include/QtCore/qatomic_gcc.h \ + ../../../corelib/arch/qatomic_gcc.h \ + ../../../../include/QtCore/qatomic_msvc.h \ + ../../../corelib/arch/qatomic_msvc.h \ + ../../../../include/QtCore/qatomic_armv7.h \ + ../../../corelib/arch/qatomic_armv7.h \ + ../../../../include/QtCore/qatomic_armv6.h \ + ../../../corelib/arch/qatomic_armv6.h \ + ../../../../include/QtCore/qatomic_armv5.h \ + ../../../corelib/arch/qatomic_armv5.h \ + ../../../../include/QtCore/qatomic_ia64.h \ + ../../../corelib/arch/qatomic_ia64.h \ + ../../../../include/QtCore/qatomic_mips.h \ + ../../../corelib/arch/qatomic_mips.h \ + ../../../../include/QtCore/qatomic_x86.h \ + ../../../corelib/arch/qatomic_x86.h \ + ../../../../include/QtCore/qatomic_unix.h \ + ../../../corelib/arch/qatomic_unix.h \ + ../../../../include/QtCore/qglobalstatic.h \ + ../../../corelib/global/qglobalstatic.h \ + ../../../../include/QtCore/qmutex.h \ + ../../../corelib/thread/qmutex.h \ + ../../../../include/QtCore/qnumeric.h \ + ../../../corelib/global/qnumeric.h \ + ../../../../include/QtCore/qobjectdefs_impl.h \ + ../../../corelib/kernel/qobjectdefs_impl.h \ + ../../../../include/QtCore/qstring.h \ + ../../../corelib/tools/qstring.h \ + ../../../../include/QtCore/qchar.h \ + ../../../corelib/tools/qchar.h \ + ../../../../include/QtCore/qbytearray.h \ + ../../../corelib/tools/qbytearray.h \ + ../../../../include/QtCore/qrefcount.h \ + ../../../corelib/tools/qrefcount.h \ + ../../../../include/QtCore/qarraydata.h \ + ../../../corelib/tools/qarraydata.h \ + ../../../../include/QtCore/qstringbuilder.h \ + ../../../corelib/tools/qstringbuilder.h \ + ../../../../include/QtCore/qlist.h \ + ../../../corelib/tools/qlist.h \ + ../../../../include/QtCore/qalgorithms.h \ + ../../../corelib/tools/qalgorithms.h \ + ../../../../include/QtCore/qiterator.h \ + ../../../corelib/tools/qiterator.h \ + ../../../../include/QtCore/qbytearraylist.h \ + ../../../corelib/tools/qbytearraylist.h \ + ../../../../include/QtCore/qstringlist.h \ + ../../../corelib/tools/qstringlist.h \ + ../../../../include/QtCore/qregexp.h \ + ../../../corelib/tools/qregexp.h \ + ../../../../include/QtCore/qstringmatcher.h \ + ../../../corelib/tools/qstringmatcher.h \ + ../../../../include/QtCore/qcoreevent.h \ + ../../../corelib/kernel/qcoreevent.h \ + ../../../../include/QtCore/qscopedpointer.h \ + ../../../corelib/tools/qscopedpointer.h \ + ../../../../include/QtCore/qmetatype.h \ + ../../../corelib/kernel/qmetatype.h \ + ../../../../include/QtCore/qvarlengtharray.h \ + ../../../corelib/tools/qvarlengtharray.h \ + ../../../../include/QtCore/qcontainerfwd.h \ + ../../../corelib/tools/qcontainerfwd.h \ + ../../../../include/QtCore/qisenum.h \ + ../../../corelib/global/qisenum.h \ + ../../../../include/QtCore/qobject_impl.h \ + ../../../corelib/kernel/qobject_impl.h \ + ../../../../include/QtCore/qpointer.h \ + ../../../corelib/kernel/qpointer.h \ + ../../../../include/QtCore/qsharedpointer.h \ + ../../../corelib/tools/qsharedpointer.h \ + ../../../../include/QtCore/qshareddata.h \ + ../../../corelib/tools/qshareddata.h \ + ../../../../include/QtCore/qhash.h \ + ../../../corelib/tools/qhash.h \ + ../../../../include/QtCore/qpair.h \ + ../../../corelib/tools/qpair.h \ + ../../../../include/QtCore/qsharedpointer_impl.h \ + ../../../corelib/tools/qsharedpointer_impl.h \ + ../../../../include/QtCore/qjsonobject.h \ + ../../../corelib/json/qjsonobject.h \ + ../../../../include/QtCore/qjsonvalue.h \ + ../../../corelib/json/qjsonvalue.h \ + ../../../../include/QtCore/qfactoryinterface.h \ + ../../../corelib/plugin/qfactoryinterface.h \ + ../../../../include/QtCore/QStringList \ + qfcitxplatforminputcontext.h \ + ../../../../include/QtGui/5.5.0/QtGui/qpa/qplatforminputcontext.h \ + ../../../gui/kernel/qplatforminputcontext.h \ + ../../../../include/QtGui/qinputmethod.h \ + ../../../gui/kernel/qinputmethod.h \ + ../../../../include/QtGui/QWindow \ + ../../../../include/QtGui/qwindow.h \ + ../../../gui/kernel/qwindow.h \ + ../../../../include/QtCore/QObject \ + ../../../../include/QtCore/QEvent \ + ../../../../include/QtCore/QMargins \ + ../../../../include/QtCore/qmargins.h \ + ../../../corelib/tools/qmargins.h \ + ../../../../include/QtCore/QRect \ + ../../../../include/QtCore/qrect.h \ + ../../../corelib/tools/qrect.h \ + ../../../../include/QtCore/qsize.h \ + ../../../corelib/tools/qsize.h \ + ../../../../include/QtCore/qpoint.h \ + ../../../corelib/tools/qpoint.h \ + ../../../../include/QtGui/qsurface.h \ + ../../../gui/kernel/qsurface.h \ + ../../../../include/QtGui/qsurfaceformat.h \ + ../../../gui/kernel/qsurfaceformat.h \ + ../../../../include/QtGui/qwindowdefs.h \ + ../../../gui/kernel/qwindowdefs.h \ + ../../../../include/QtGui/qwindowdefs_win.h \ + ../../../gui/kernel/qwindowdefs_win.h \ + ../../../../include/QtGui/qicon.h \ + ../../../gui/image/qicon.h \ + ../../../../include/QtGui/qpixmap.h \ + ../../../gui/image/qpixmap.h \ + ../../../../include/QtGui/qpaintdevice.h \ + ../../../gui/painting/qpaintdevice.h \ + ../../../../include/QtGui/qcolor.h \ + ../../../gui/painting/qcolor.h \ + ../../../../include/QtGui/qrgb.h \ + ../../../gui/painting/qrgb.h \ + ../../../../include/QtGui/qimage.h \ + ../../../gui/image/qimage.h \ + ../../../../include/QtGui/qtransform.h \ + ../../../gui/painting/qtransform.h \ + ../../../../include/QtGui/qmatrix.h \ + ../../../gui/painting/qmatrix.h \ + ../../../../include/QtGui/qpolygon.h \ + ../../../gui/painting/qpolygon.h \ + ../../../../include/QtCore/qvector.h \ + ../../../corelib/tools/qvector.h \ + ../../../../include/QtGui/qregion.h \ + ../../../gui/painting/qregion.h \ + ../../../../include/QtCore/qdatastream.h \ + ../../../corelib/io/qdatastream.h \ + ../../../../include/QtCore/qiodevice.h \ + ../../../corelib/io/qiodevice.h \ + ../../../../include/QtCore/qline.h \ + ../../../corelib/tools/qline.h \ + ../../../../include/QtGui/qpainterpath.h \ + ../../../gui/painting/qpainterpath.h \ + ../../../../include/QtGui/qpixelformat.h \ + ../../../gui/kernel/qpixelformat.h \ + ../../../../include/QtGui/qcursor.h \ + ../../../gui/kernel/qcursor.h \ + ../../../../include/QtGui/QKeyEvent \ + ../../../../include/QtGui/qevent.h \ + ../../../gui/kernel/qevent.h \ + ../../../../include/QtGui/qkeysequence.h \ + ../../../gui/kernel/qkeysequence.h \ + ../../../../include/QtCore/qvariant.h \ + ../../../corelib/kernel/qvariant.h \ + ../../../../include/QtCore/qmap.h \ + ../../../corelib/tools/qmap.h \ + ../../../../include/QtCore/qdebug.h \ + ../../../corelib/io/qdebug.h \ + ../../../../include/QtCore/qtextstream.h \ + ../../../corelib/io/qtextstream.h \ + ../../../../include/QtCore/qlocale.h \ + ../../../corelib/tools/qlocale.h \ + ../../../../include/QtCore/qset.h \ + ../../../corelib/tools/qset.h \ + ../../../../include/QtCore/qcontiguouscache.h \ + ../../../corelib/tools/qcontiguouscache.h \ + ../../../../include/QtCore/qurl.h \ + ../../../corelib/io/qurl.h \ + ../../../../include/QtCore/qurlquery.h \ + ../../../corelib/io/qurlquery.h \ + ../../../../include/QtCore/qfile.h \ + ../../../corelib/io/qfile.h \ + ../../../../include/QtCore/qfiledevice.h \ + ../../../corelib/io/qfiledevice.h \ + ../../../../include/QtGui/qvector2d.h \ + ../../../gui/math3d/qvector2d.h \ + ../../../../include/QtGui/qtouchdevice.h \ + ../../../gui/kernel/qtouchdevice.h \ + ../../../../include/QtDBus/QDBusConnection \ + ../../../../include/QtDBus/qdbusconnection.h \ + ../../../dbus/qdbusconnection.h \ + ../../../../include/QtDBus/qdbusmacros.h \ + ../../../dbus/qdbusmacros.h \ + ../../../../include/QtDBus/QDBusServiceWatcher \ + ../../../../include/QtDBus/qdbusservicewatcher.h \ + ../../../dbus/qdbusservicewatcher.h \ + ../../../../include/QtCore/QPointer \ + ../../../../include/QtCore/QFileSystemWatcher \ + ../../../../include/QtCore/qfilesystemwatcher.h \ + ../../../corelib/io/qfilesystemwatcher.h \ + fcitxqtformattedpreedit.h \ + fcitxqtdbusaddons_export.h \ + ../../../../include/QtCore/QMetaType \ + ../../../../include/QtDBus/QDBusArgument \ + ../../../../include/QtDBus/qdbusargument.h \ + ../../../dbus/qdbusargument.h \ + ../../../../include/QtDBus/qdbusextratypes.h \ + ../../../dbus/qdbusextratypes.h \ + fcitxqtinputcontextproxy.h \ + ../../../../include/QtCore/QByteArray \ + ../../../../include/QtCore/QList \ + ../../../../include/QtCore/QMap \ + ../../../../include/QtCore/QString \ + ../../../../include/QtCore/QVariant \ + ../../../../include/QtDBus/QtDBus \ + ../../../../include/QtDBus/QtDBusDepends \ + ../../../../include/QtCore/QtCore \ + ../../../../include/QtCore/QtCoreDepends \ + ../../../../include/QtCore/qabstractanimation.h \ + ../../../corelib/animation/qabstractanimation.h \ + ../../../../include/QtCore/qanimationgroup.h \ + ../../../corelib/animation/qanimationgroup.h \ + ../../../../include/QtCore/qparallelanimationgroup.h \ + ../../../corelib/animation/qparallelanimationgroup.h \ + ../../../../include/QtCore/qpauseanimation.h \ + ../../../corelib/animation/qpauseanimation.h \ + ../../../../include/QtCore/qpropertyanimation.h \ + ../../../corelib/animation/qpropertyanimation.h \ + ../../../../include/QtCore/qvariantanimation.h \ + ../../../corelib/animation/qvariantanimation.h \ + ../../../../include/QtCore/qeasingcurve.h \ + ../../../corelib/tools/qeasingcurve.h \ + ../../../../include/QtCore/qsequentialanimationgroup.h \ + ../../../corelib/animation/qsequentialanimationgroup.h \ + ../../../../include/QtCore/qtextcodec.h \ + ../../../corelib/codecs/qtextcodec.h \ + ../../../../include/QtCore/qendian.h \ + ../../../corelib/global/qendian.h \ + ../../../../include/QtCore/qlibraryinfo.h \ + ../../../corelib/global/qlibraryinfo.h \ + ../../../../include/QtCore/qdatetime.h \ + ../../../corelib/tools/qdatetime.h \ + ../../../../include/QtCore/qbuffer.h \ + ../../../corelib/io/qbuffer.h \ + ../../../../include/QtCore/qdir.h \ + ../../../corelib/io/qdir.h \ + ../../../../include/QtCore/qfileinfo.h \ + ../../../corelib/io/qfileinfo.h \ + ../../../../include/QtCore/qdiriterator.h \ + ../../../corelib/io/qdiriterator.h \ + ../../../../include/QtCore/qfileselector.h \ + ../../../corelib/io/qfileselector.h \ + ../../../../include/QtCore/qlockfile.h \ + ../../../corelib/io/qlockfile.h \ + ../../../../include/QtCore/qloggingcategory.h \ + ../../../corelib/io/qloggingcategory.h \ + ../../../../include/QtCore/qprocess.h \ + ../../../corelib/io/qprocess.h \ + ../../../../include/QtCore/qresource.h \ + ../../../corelib/io/qresource.h \ + ../../../../include/QtCore/qsavefile.h \ + ../../../corelib/io/qsavefile.h \ + ../../../../include/QtCore/qsettings.h \ + ../../../corelib/io/qsettings.h \ + ../../../../include/QtCore/qstandardpaths.h \ + ../../../corelib/io/qstandardpaths.h \ + ../../../../include/QtCore/qstorageinfo.h \ + ../../../corelib/io/qstorageinfo.h \ + ../../../../include/QtCore/qtemporarydir.h \ + ../../../corelib/io/qtemporarydir.h \ + ../../../../include/QtCore/QScopedPointer \ + ../../../../include/QtCore/qtemporaryfile.h \ + ../../../corelib/io/qtemporaryfile.h \ + ../../../../include/QtCore/qabstractitemmodel.h \ + ../../../corelib/itemmodels/qabstractitemmodel.h \ + ../../../../include/QtCore/qabstractproxymodel.h \ + ../../../corelib/itemmodels/qabstractproxymodel.h \ + ../../../../include/QtCore/qidentityproxymodel.h \ + ../../../corelib/itemmodels/qidentityproxymodel.h \ + ../../../../include/QtCore/qitemselectionmodel.h \ + ../../../corelib/itemmodels/qitemselectionmodel.h \ + ../../../../include/QtCore/qsortfilterproxymodel.h \ + ../../../corelib/itemmodels/qsortfilterproxymodel.h \ + ../../../../include/QtCore/qstringlistmodel.h \ + ../../../corelib/itemmodels/qstringlistmodel.h \ + ../../../../include/QtCore/qjsonarray.h \ + ../../../corelib/json/qjsonarray.h \ + ../../../../include/QtCore/qjsondocument.h \ + ../../../corelib/json/qjsondocument.h \ + ../../../../include/QtCore/qabstracteventdispatcher.h \ + ../../../corelib/kernel/qabstracteventdispatcher.h \ + ../../../../include/QtCore/qeventloop.h \ + ../../../corelib/kernel/qeventloop.h \ + ../../../../include/QtCore/qabstractnativeeventfilter.h \ + ../../../corelib/kernel/qabstractnativeeventfilter.h \ + ../../../../include/QtCore/qbasictimer.h \ + ../../../corelib/kernel/qbasictimer.h \ + ../../../../include/QtCore/qcoreapplication.h \ + ../../../corelib/kernel/qcoreapplication.h \ + ../../../../include/QtCore/qmath.h \ + ../../../corelib/kernel/qmath.h \ + ../../../../include/QtCore/qmetaobject.h \ + ../../../corelib/kernel/qmetaobject.h \ + ../../../../include/QtCore/qmimedata.h \ + ../../../corelib/kernel/qmimedata.h \ + ../../../../include/QtCore/qobjectcleanuphandler.h \ + ../../../corelib/kernel/qobjectcleanuphandler.h \ + ../../../../include/QtCore/qsharedmemory.h \ + ../../../corelib/kernel/qsharedmemory.h \ + ../../../../include/QtCore/qsignalmapper.h \ + ../../../corelib/kernel/qsignalmapper.h \ + ../../../../include/QtCore/qsocketnotifier.h \ + ../../../corelib/kernel/qsocketnotifier.h \ + ../../../../include/QtCore/qsystemsemaphore.h \ + ../../../corelib/kernel/qsystemsemaphore.h \ + ../../../../include/QtCore/qtimer.h \ + ../../../corelib/kernel/qtimer.h \ + ../../../../include/QtCore/qtranslator.h \ + ../../../corelib/kernel/qtranslator.h \ + ../../../../include/QtCore/qwineventnotifier.h \ + ../../../corelib/kernel/qwineventnotifier.h \ + ../../../../include/QtCore/qmimedatabase.h \ + ../../../corelib/mimetypes/qmimedatabase.h \ + ../../../../include/QtCore/qmimetype.h \ + ../../../corelib/mimetypes/qmimetype.h \ + ../../../../include/QtCore/qlibrary.h \ + ../../../corelib/plugin/qlibrary.h \ + ../../../../include/QtCore/qpluginloader.h \ + ../../../corelib/plugin/qpluginloader.h \ + ../../../../include/QtCore/quuid.h \ + ../../../corelib/plugin/quuid.h \ + ../../../../include/QtCore/qabstractstate.h \ + ../../../corelib/statemachine/qabstractstate.h \ + ../../../../include/QtCore/qabstracttransition.h \ + ../../../corelib/statemachine/qabstracttransition.h \ + ../../../../include/QtCore/qeventtransition.h \ + ../../../corelib/statemachine/qeventtransition.h \ + ../../../../include/QtCore/qfinalstate.h \ + ../../../corelib/statemachine/qfinalstate.h \ + ../../../../include/QtCore/qhistorystate.h \ + ../../../corelib/statemachine/qhistorystate.h \ + ../../../../include/QtCore/qsignaltransition.h \ + ../../../corelib/statemachine/qsignaltransition.h \ + ../../../../include/QtCore/qstate.h \ + ../../../corelib/statemachine/qstate.h \ + ../../../../include/QtCore/qstatemachine.h \ + ../../../corelib/statemachine/qstatemachine.h \ + ../../../../include/QtCore/qexception.h \ + ../../../corelib/thread/qexception.h \ + ../../../../include/QtCore/qfuture.h \ + ../../../corelib/thread/qfuture.h \ + ../../../../include/QtCore/qfutureinterface.h \ + ../../../corelib/thread/qfutureinterface.h \ + ../../../../include/QtCore/qrunnable.h \ + ../../../corelib/thread/qrunnable.h \ + ../../../../include/QtCore/qresultstore.h \ + ../../../corelib/thread/qresultstore.h \ + ../../../../include/QtCore/qfuturesynchronizer.h \ + ../../../corelib/thread/qfuturesynchronizer.h \ + ../../../../include/QtCore/qfuturewatcher.h \ + ../../../corelib/thread/qfuturewatcher.h \ + ../../../../include/QtCore/qreadwritelock.h \ + ../../../corelib/thread/qreadwritelock.h \ + ../../../../include/QtCore/qsemaphore.h \ + ../../../corelib/thread/qsemaphore.h \ + ../../../../include/QtCore/qthread.h \ + ../../../corelib/thread/qthread.h \ + ../../../../include/QtCore/qthreadpool.h \ + ../../../corelib/thread/qthreadpool.h \ + ../../../../include/QtCore/qthreadstorage.h \ + ../../../corelib/thread/qthreadstorage.h \ + ../../../../include/QtCore/qwaitcondition.h \ + ../../../corelib/thread/qwaitcondition.h \ + ../../../../include/QtCore/qarraydataops.h \ + ../../../corelib/tools/qarraydataops.h \ + ../../../../include/QtCore/qarraydatapointer.h \ + ../../../corelib/tools/qarraydatapointer.h \ + ../../../../include/QtCore/qbitarray.h \ + ../../../corelib/tools/qbitarray.h \ + ../../../../include/QtCore/qbytearraymatcher.h \ + ../../../corelib/tools/qbytearraymatcher.h \ + ../../../../include/QtCore/qcache.h \ + ../../../corelib/tools/qcache.h \ + ../../../../include/QtCore/qcollator.h \ + ../../../corelib/tools/qcollator.h \ + ../../../../include/QtCore/qcommandlineoption.h \ + ../../../corelib/tools/qcommandlineoption.h \ + ../../../../include/QtCore/qcommandlineparser.h \ + ../../../corelib/tools/qcommandlineparser.h \ + ../../../../include/QtCore/qcryptographichash.h \ + ../../../corelib/tools/qcryptographichash.h \ + ../../../../include/QtCore/qelapsedtimer.h \ + ../../../corelib/tools/qelapsedtimer.h \ + ../../../../include/QtCore/qlinkedlist.h \ + ../../../corelib/tools/qlinkedlist.h \ + ../../../../include/QtCore/qmessageauthenticationcode.h \ + ../../../corelib/tools/qmessageauthenticationcode.h \ + ../../../../include/QtCore/qqueue.h \ + ../../../corelib/tools/qqueue.h \ + ../../../../include/QtCore/qregularexpression.h \ + ../../../corelib/tools/qregularexpression.h \ + ../../../../include/QtCore/qscopedvaluerollback.h \ + ../../../corelib/tools/qscopedvaluerollback.h \ + ../../../../include/QtCore/qstack.h \ + ../../../corelib/tools/qstack.h \ + ../../../../include/QtCore/qtextboundaryfinder.h \ + ../../../corelib/tools/qtextboundaryfinder.h \ + ../../../../include/QtCore/qtimeline.h \ + ../../../corelib/tools/qtimeline.h \ + ../../../../include/QtCore/qtimezone.h \ + ../../../corelib/tools/qtimezone.h \ + ../../../../include/QtCore/qxmlstream.h \ + ../../../corelib/xml/qxmlstream.h \ + ../../../../include/QtCore/qtcoreversion.h \ + ../../../../include/QtDBus/qdbusabstractadaptor.h \ + ../../../dbus/qdbusabstractadaptor.h \ + ../../../../include/QtDBus/qdbusabstractinterface.h \ + ../../../dbus/qdbusabstractinterface.h \ + ../../../../include/QtDBus/qdbusmessage.h \ + ../../../dbus/qdbusmessage.h \ + ../../../../include/QtDBus/qdbuserror.h \ + ../../../dbus/qdbuserror.h \ + ../../../../include/QtDBus/qdbusconnectioninterface.h \ + ../../../dbus/qdbusconnectioninterface.h \ + ../../../../include/QtDBus/qdbusreply.h \ + ../../../dbus/qdbusreply.h \ + ../../../../include/QtDBus/qdbuspendingreply.h \ + ../../../dbus/qdbuspendingreply.h \ + ../../../../include/QtDBus/qdbuspendingcall.h \ + ../../../dbus/qdbuspendingcall.h \ + ../../../../include/QtDBus/qdbuscontext.h \ + ../../../dbus/qdbuscontext.h \ + ../../../../include/QtDBus/qdbusinterface.h \ + ../../../dbus/qdbusinterface.h \ + ../../../../include/QtDBus/qdbusmetatype.h \ + ../../../dbus/qdbusmetatype.h \ + ../../../../include/QtDBus/qdbusserver.h \ + ../../../dbus/qdbusserver.h \ + ../../../../include/QtDBus/qdbusunixfiledescriptor.h \ + ../../../dbus/qdbusunixfiledescriptor.h \ + ../../../../include/QtDBus/qdbusvirtualobject.h \ + ../../../dbus/qdbusvirtualobject.h \ + ../../../../include/QtDBus/qtdbusversion.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/main.o main.cpp + +.obj/qfcitxplatforminputcontext.o: qfcitxplatforminputcontext.cpp ../../../../include/QtGui/QKeyEvent \ + ../../../../include/QtGui/qevent.h \ + ../../../gui/kernel/qevent.h \ + ../../../../include/QtGui/qwindowdefs.h \ + ../../../gui/kernel/qwindowdefs.h \ + ../../../../include/QtCore/qglobal.h \ + ../../../corelib/global/qglobal.h \ + ../../../../include/QtCore/qconfig.h \ + ../../../corelib/global/qconfig.h \ + ../../../../include/QtCore/qfeatures.h \ + ../../../corelib/global/qfeatures.h \ + ../../../../include/QtCore/qsystemdetection.h \ + ../../../corelib/global/qsystemdetection.h \ + ../../../../include/QtCore/qprocessordetection.h \ + ../../../corelib/global/qprocessordetection.h \ + ../../../../include/QtCore/qcompilerdetection.h \ + ../../../corelib/global/qcompilerdetection.h \ + ../../../../include/QtCore/qtypeinfo.h \ + ../../../corelib/global/qtypeinfo.h \ + ../../../../include/QtCore/qtypetraits.h \ + ../../../corelib/global/qtypetraits.h \ + ../../../../include/QtCore/qsysinfo.h \ + ../../../corelib/global/qsysinfo.h \ + ../../../../include/QtCore/qlogging.h \ + ../../../corelib/global/qlogging.h \ + ../../../../include/QtCore/qflags.h \ + ../../../corelib/global/qflags.h \ + ../../../../include/QtCore/qatomic.h \ + ../../../corelib/thread/qatomic.h \ + ../../../../include/QtCore/qbasicatomic.h \ + ../../../corelib/thread/qbasicatomic.h \ + ../../../../include/QtCore/qatomic_bootstrap.h \ + ../../../corelib/arch/qatomic_bootstrap.h \ + ../../../../include/QtCore/qgenericatomic.h \ + ../../../corelib/thread/qgenericatomic.h \ + ../../../../include/QtCore/qatomic_cxx11.h \ + ../../../corelib/arch/qatomic_cxx11.h \ + ../../../../include/QtCore/qatomic_gcc.h \ + ../../../corelib/arch/qatomic_gcc.h \ + ../../../../include/QtCore/qatomic_msvc.h \ + ../../../corelib/arch/qatomic_msvc.h \ + ../../../../include/QtCore/qatomic_armv7.h \ + ../../../corelib/arch/qatomic_armv7.h \ + ../../../../include/QtCore/qatomic_armv6.h \ + ../../../corelib/arch/qatomic_armv6.h \ + ../../../../include/QtCore/qatomic_armv5.h \ + ../../../corelib/arch/qatomic_armv5.h \ + ../../../../include/QtCore/qatomic_ia64.h \ + ../../../corelib/arch/qatomic_ia64.h \ + ../../../../include/QtCore/qatomic_mips.h \ + ../../../corelib/arch/qatomic_mips.h \ + ../../../../include/QtCore/qatomic_x86.h \ + ../../../corelib/arch/qatomic_x86.h \ + ../../../../include/QtCore/qatomic_unix.h \ + ../../../corelib/arch/qatomic_unix.h \ + ../../../../include/QtCore/qglobalstatic.h \ + ../../../corelib/global/qglobalstatic.h \ + ../../../../include/QtCore/qmutex.h \ + ../../../corelib/thread/qmutex.h \ + ../../../../include/QtCore/qnumeric.h \ + ../../../corelib/global/qnumeric.h \ + ../../../../include/QtCore/qobjectdefs.h \ + ../../../corelib/kernel/qobjectdefs.h \ + ../../../../include/QtCore/qnamespace.h \ + ../../../corelib/global/qnamespace.h \ + ../../../../include/QtCore/qobjectdefs_impl.h \ + ../../../corelib/kernel/qobjectdefs_impl.h \ + ../../../../include/QtGui/qwindowdefs_win.h \ + ../../../gui/kernel/qwindowdefs_win.h \ + ../../../../include/QtCore/qobject.h \ + ../../../corelib/kernel/qobject.h \ + ../../../../include/QtCore/qstring.h \ + ../../../corelib/tools/qstring.h \ + ../../../../include/QtCore/qchar.h \ + ../../../corelib/tools/qchar.h \ + ../../../../include/QtCore/qbytearray.h \ + ../../../corelib/tools/qbytearray.h \ + ../../../../include/QtCore/qrefcount.h \ + ../../../corelib/tools/qrefcount.h \ + ../../../../include/QtCore/qarraydata.h \ + ../../../corelib/tools/qarraydata.h \ + ../../../../include/QtCore/qstringbuilder.h \ + ../../../corelib/tools/qstringbuilder.h \ + ../../../../include/QtCore/qlist.h \ + ../../../corelib/tools/qlist.h \ + ../../../../include/QtCore/qalgorithms.h \ + ../../../corelib/tools/qalgorithms.h \ + ../../../../include/QtCore/qiterator.h \ + ../../../corelib/tools/qiterator.h \ + ../../../../include/QtCore/qbytearraylist.h \ + ../../../corelib/tools/qbytearraylist.h \ + ../../../../include/QtCore/qstringlist.h \ + ../../../corelib/tools/qstringlist.h \ + ../../../../include/QtCore/qregexp.h \ + ../../../corelib/tools/qregexp.h \ + ../../../../include/QtCore/qstringmatcher.h \ + ../../../corelib/tools/qstringmatcher.h \ + ../../../../include/QtCore/qcoreevent.h \ + ../../../corelib/kernel/qcoreevent.h \ + ../../../../include/QtCore/qscopedpointer.h \ + ../../../corelib/tools/qscopedpointer.h \ + ../../../../include/QtCore/qmetatype.h \ + ../../../corelib/kernel/qmetatype.h \ + ../../../../include/QtCore/qvarlengtharray.h \ + ../../../corelib/tools/qvarlengtharray.h \ + ../../../../include/QtCore/qcontainerfwd.h \ + ../../../corelib/tools/qcontainerfwd.h \ + ../../../../include/QtCore/qisenum.h \ + ../../../corelib/global/qisenum.h \ + ../../../../include/QtCore/qobject_impl.h \ + ../../../corelib/kernel/qobject_impl.h \ + ../../../../include/QtGui/qregion.h \ + ../../../gui/painting/qregion.h \ + ../../../../include/QtCore/qrect.h \ + ../../../corelib/tools/qrect.h \ + ../../../../include/QtCore/qmargins.h \ + ../../../corelib/tools/qmargins.h \ + ../../../../include/QtCore/qsize.h \ + ../../../corelib/tools/qsize.h \ + ../../../../include/QtCore/qpoint.h \ + ../../../corelib/tools/qpoint.h \ + ../../../../include/QtCore/qdatastream.h \ + ../../../corelib/io/qdatastream.h \ + ../../../../include/QtCore/qiodevice.h \ + ../../../corelib/io/qiodevice.h \ + ../../../../include/QtCore/qpair.h \ + ../../../corelib/tools/qpair.h \ + ../../../../include/QtGui/qkeysequence.h \ + ../../../gui/kernel/qkeysequence.h \ + ../../../../include/QtCore/qvariant.h \ + ../../../corelib/kernel/qvariant.h \ + ../../../../include/QtCore/qmap.h \ + ../../../corelib/tools/qmap.h \ + ../../../../include/QtCore/qdebug.h \ + ../../../corelib/io/qdebug.h \ + ../../../../include/QtCore/qhash.h \ + ../../../corelib/tools/qhash.h \ + ../../../../include/QtCore/qtextstream.h \ + ../../../corelib/io/qtextstream.h \ + ../../../../include/QtCore/qlocale.h \ + ../../../corelib/tools/qlocale.h \ + ../../../../include/QtCore/qshareddata.h \ + ../../../corelib/tools/qshareddata.h \ + ../../../../include/QtCore/qvector.h \ + ../../../corelib/tools/qvector.h \ + ../../../../include/QtCore/qset.h \ + ../../../corelib/tools/qset.h \ + ../../../../include/QtCore/qcontiguouscache.h \ + ../../../corelib/tools/qcontiguouscache.h \ + ../../../../include/QtCore/qurl.h \ + ../../../corelib/io/qurl.h \ + ../../../../include/QtCore/qurlquery.h \ + ../../../corelib/io/qurlquery.h \ + ../../../../include/QtCore/qfile.h \ + ../../../corelib/io/qfile.h \ + ../../../../include/QtCore/qfiledevice.h \ + ../../../corelib/io/qfiledevice.h \ + ../../../../include/QtGui/qvector2d.h \ + ../../../gui/math3d/qvector2d.h \ + ../../../../include/QtGui/qtouchdevice.h \ + ../../../gui/kernel/qtouchdevice.h \ + ../../../../include/QtDBus/QDBusConnection \ + ../../../../include/QtDBus/qdbusconnection.h \ + ../../../dbus/qdbusconnection.h \ + ../../../../include/QtDBus/qdbusmacros.h \ + ../../../dbus/qdbusmacros.h \ + ../../../../include/QtGui/QGuiApplication \ + ../../../../include/QtGui/qguiapplication.h \ + ../../../gui/kernel/qguiapplication.h \ + ../../../../include/QtCore/qcoreapplication.h \ + ../../../corelib/kernel/qcoreapplication.h \ + ../../../../include/QtCore/qeventloop.h \ + ../../../corelib/kernel/qeventloop.h \ + ../../../../include/QtGui/qinputmethod.h \ + ../../../gui/kernel/qinputmethod.h \ + ../../../../include/QtGui/QInputMethod \ + ../../../../include/QtGui/QTextCharFormat \ + ../../../../include/QtGui/qtextformat.h \ + ../../../gui/text/qtextformat.h \ + ../../../../include/QtGui/qcolor.h \ + ../../../gui/painting/qcolor.h \ + ../../../../include/QtGui/qrgb.h \ + ../../../gui/painting/qrgb.h \ + ../../../../include/QtGui/qfont.h \ + ../../../gui/text/qfont.h \ + ../../../../include/QtCore/qsharedpointer.h \ + ../../../corelib/tools/qsharedpointer.h \ + ../../../../include/QtCore/qsharedpointer_impl.h \ + ../../../corelib/tools/qsharedpointer_impl.h \ + ../../../../include/QtGui/qpen.h \ + ../../../gui/painting/qpen.h \ + ../../../../include/QtGui/qbrush.h \ + ../../../gui/painting/qbrush.h \ + ../../../../include/QtGui/qmatrix.h \ + ../../../gui/painting/qmatrix.h \ + ../../../../include/QtGui/qpolygon.h \ + ../../../gui/painting/qpolygon.h \ + ../../../../include/QtCore/qline.h \ + ../../../corelib/tools/qline.h \ + ../../../../include/QtGui/qtransform.h \ + ../../../gui/painting/qtransform.h \ + ../../../../include/QtGui/qpainterpath.h \ + ../../../gui/painting/qpainterpath.h \ + ../../../../include/QtGui/qimage.h \ + ../../../gui/image/qimage.h \ + ../../../../include/QtGui/qpaintdevice.h \ + ../../../gui/painting/qpaintdevice.h \ + ../../../../include/QtGui/qpixelformat.h \ + ../../../gui/kernel/qpixelformat.h \ + ../../../../include/QtGui/qpixmap.h \ + ../../../gui/image/qpixmap.h \ + ../../../../include/QtGui/qtextoption.h \ + ../../../gui/text/qtextoption.h \ + ../../../../include/QtGui/QPalette \ + ../../../../include/QtGui/qpalette.h \ + ../../../gui/kernel/qpalette.h \ + ../../../../include/QtGui/QWindow \ + ../../../../include/QtGui/qwindow.h \ + ../../../gui/kernel/qwindow.h \ + ../../../../include/QtCore/QObject \ + ../../../../include/QtCore/QEvent \ + ../../../../include/QtCore/QMargins \ + ../../../../include/QtCore/QRect \ + ../../../../include/QtGui/qsurface.h \ + ../../../gui/kernel/qsurface.h \ + ../../../../include/QtGui/qsurfaceformat.h \ + ../../../gui/kernel/qsurfaceformat.h \ + ../../../../include/QtGui/qicon.h \ + ../../../gui/image/qicon.h \ + ../../../../include/QtGui/qcursor.h \ + ../../../gui/kernel/qcursor.h \ + ../../../../include/QtGui/5.5.0/QtGui/qpa/qplatformscreen.h \ + ../../../gui/kernel/qplatformscreen.h \ + ../../../../include/QtGui/5.5.0/QtGui/qpa/qplatformpixmap.h \ + ../../../gui/image/qplatformpixmap.h \ + ../../../../include/QtGui/5.5.0/QtGui/qpa/qplatformcursor.h \ + ../../../gui/kernel/qplatformcursor.h \ + ../../../../include/QtCore/QList \ + ../../../../include/QtGui/QImage \ + ../../../../include/QtGui/QMouseEvent \ + ../../../../include/QtCore/QWeakPointer \ + ../../../../include/QtGui/QCursor \ + ../../../../include/QtGui/5.5.0/QtGui/qpa/qwindowsysteminterface.h \ + ../../../gui/kernel/qwindowsysteminterface.h \ + ../../../../include/QtCore/QTime \ + ../../../../include/QtCore/qdatetime.h \ + ../../../corelib/tools/qdatetime.h \ + ../../../../include/QtCore/QAbstractEventDispatcher \ + ../../../../include/QtCore/qabstracteventdispatcher.h \ + ../../../corelib/kernel/qabstracteventdispatcher.h \ + ../../../../include/QtGui/QScreen \ + ../../../../include/QtGui/qscreen.h \ + ../../../gui/kernel/qscreen.h \ + ../../../../include/QtCore/QSize \ + ../../../../include/QtCore/QSizeF \ + ../../../../include/QtGui/QTransform \ + ../../../../include/QtCore/QMutex \ + ../../../../include/QtGui/QTouchEvent \ + ../../../../include/QtCore/QEventLoop \ + ../../../../include/QtGui/QVector2D \ + keyserver_x11.h \ + qfcitxplatforminputcontext.h \ + ../../../../include/QtGui/5.5.0/QtGui/qpa/qplatforminputcontext.h \ + ../../../gui/kernel/qplatforminputcontext.h \ + ../../../../include/QtDBus/QDBusServiceWatcher \ + ../../../../include/QtDBus/qdbusservicewatcher.h \ + ../../../dbus/qdbusservicewatcher.h \ + ../../../../include/QtCore/QPointer \ + ../../../../include/QtCore/qpointer.h \ + ../../../corelib/kernel/qpointer.h \ + ../../../../include/QtCore/QFileSystemWatcher \ + ../../../../include/QtCore/qfilesystemwatcher.h \ + ../../../corelib/io/qfilesystemwatcher.h \ + fcitxqtformattedpreedit.h \ + fcitxqtdbusaddons_export.h \ + ../../../../include/QtCore/QMetaType \ + ../../../../include/QtDBus/QDBusArgument \ + ../../../../include/QtDBus/qdbusargument.h \ + ../../../dbus/qdbusargument.h \ + ../../../../include/QtDBus/qdbusextratypes.h \ + ../../../dbus/qdbusextratypes.h \ + fcitxqtinputcontextproxy.h \ + ../../../../include/QtCore/QByteArray \ + ../../../../include/QtCore/QMap \ + ../../../../include/QtCore/QString \ + ../../../../include/QtCore/QStringList \ + ../../../../include/QtCore/QVariant \ + ../../../../include/QtDBus/QtDBus \ + ../../../../include/QtDBus/QtDBusDepends \ + ../../../../include/QtCore/QtCore \ + ../../../../include/QtCore/QtCoreDepends \ + ../../../../include/QtCore/qabstractanimation.h \ + ../../../corelib/animation/qabstractanimation.h \ + ../../../../include/QtCore/qanimationgroup.h \ + ../../../corelib/animation/qanimationgroup.h \ + ../../../../include/QtCore/qparallelanimationgroup.h \ + ../../../corelib/animation/qparallelanimationgroup.h \ + ../../../../include/QtCore/qpauseanimation.h \ + ../../../corelib/animation/qpauseanimation.h \ + ../../../../include/QtCore/qpropertyanimation.h \ + ../../../corelib/animation/qpropertyanimation.h \ + ../../../../include/QtCore/qvariantanimation.h \ + ../../../corelib/animation/qvariantanimation.h \ + ../../../../include/QtCore/qeasingcurve.h \ + ../../../corelib/tools/qeasingcurve.h \ + ../../../../include/QtCore/qsequentialanimationgroup.h \ + ../../../corelib/animation/qsequentialanimationgroup.h \ + ../../../../include/QtCore/qtextcodec.h \ + ../../../corelib/codecs/qtextcodec.h \ + ../../../../include/QtCore/qendian.h \ + ../../../corelib/global/qendian.h \ + ../../../../include/QtCore/qlibraryinfo.h \ + ../../../corelib/global/qlibraryinfo.h \ + ../../../../include/QtCore/qbuffer.h \ + ../../../corelib/io/qbuffer.h \ + ../../../../include/QtCore/qdir.h \ + ../../../corelib/io/qdir.h \ + ../../../../include/QtCore/qfileinfo.h \ + ../../../corelib/io/qfileinfo.h \ + ../../../../include/QtCore/qdiriterator.h \ + ../../../corelib/io/qdiriterator.h \ + ../../../../include/QtCore/qfileselector.h \ + ../../../corelib/io/qfileselector.h \ + ../../../../include/QtCore/qlockfile.h \ + ../../../corelib/io/qlockfile.h \ + ../../../../include/QtCore/qloggingcategory.h \ + ../../../corelib/io/qloggingcategory.h \ + ../../../../include/QtCore/qprocess.h \ + ../../../corelib/io/qprocess.h \ + ../../../../include/QtCore/qresource.h \ + ../../../corelib/io/qresource.h \ + ../../../../include/QtCore/qsavefile.h \ + ../../../corelib/io/qsavefile.h \ + ../../../../include/QtCore/qsettings.h \ + ../../../corelib/io/qsettings.h \ + ../../../../include/QtCore/qstandardpaths.h \ + ../../../corelib/io/qstandardpaths.h \ + ../../../../include/QtCore/qstorageinfo.h \ + ../../../corelib/io/qstorageinfo.h \ + ../../../../include/QtCore/qtemporarydir.h \ + ../../../corelib/io/qtemporarydir.h \ + ../../../../include/QtCore/QScopedPointer \ + ../../../../include/QtCore/qtemporaryfile.h \ + ../../../corelib/io/qtemporaryfile.h \ + ../../../../include/QtCore/qabstractitemmodel.h \ + ../../../corelib/itemmodels/qabstractitemmodel.h \ + ../../../../include/QtCore/qabstractproxymodel.h \ + ../../../corelib/itemmodels/qabstractproxymodel.h \ + ../../../../include/QtCore/qidentityproxymodel.h \ + ../../../corelib/itemmodels/qidentityproxymodel.h \ + ../../../../include/QtCore/qitemselectionmodel.h \ + ../../../corelib/itemmodels/qitemselectionmodel.h \ + ../../../../include/QtCore/qsortfilterproxymodel.h \ + ../../../corelib/itemmodels/qsortfilterproxymodel.h \ + ../../../../include/QtCore/qstringlistmodel.h \ + ../../../corelib/itemmodels/qstringlistmodel.h \ + ../../../../include/QtCore/qjsonarray.h \ + ../../../corelib/json/qjsonarray.h \ + ../../../../include/QtCore/qjsonvalue.h \ + ../../../corelib/json/qjsonvalue.h \ + ../../../../include/QtCore/qjsondocument.h \ + ../../../corelib/json/qjsondocument.h \ + ../../../../include/QtCore/qjsonobject.h \ + ../../../corelib/json/qjsonobject.h \ + ../../../../include/QtCore/qabstractnativeeventfilter.h \ + ../../../corelib/kernel/qabstractnativeeventfilter.h \ + ../../../../include/QtCore/qbasictimer.h \ + ../../../corelib/kernel/qbasictimer.h \ + ../../../../include/QtCore/qmath.h \ + ../../../corelib/kernel/qmath.h \ + ../../../../include/QtCore/qmetaobject.h \ + ../../../corelib/kernel/qmetaobject.h \ + ../../../../include/QtCore/qmimedata.h \ + ../../../corelib/kernel/qmimedata.h \ + ../../../../include/QtCore/qobjectcleanuphandler.h \ + ../../../corelib/kernel/qobjectcleanuphandler.h \ + ../../../../include/QtCore/qsharedmemory.h \ + ../../../corelib/kernel/qsharedmemory.h \ + ../../../../include/QtCore/qsignalmapper.h \ + ../../../corelib/kernel/qsignalmapper.h \ + ../../../../include/QtCore/qsocketnotifier.h \ + ../../../corelib/kernel/qsocketnotifier.h \ + ../../../../include/QtCore/qsystemsemaphore.h \ + ../../../corelib/kernel/qsystemsemaphore.h \ + ../../../../include/QtCore/qtimer.h \ + ../../../corelib/kernel/qtimer.h \ + ../../../../include/QtCore/qtranslator.h \ + ../../../corelib/kernel/qtranslator.h \ + ../../../../include/QtCore/qwineventnotifier.h \ + ../../../corelib/kernel/qwineventnotifier.h \ + ../../../../include/QtCore/qmimedatabase.h \ + ../../../corelib/mimetypes/qmimedatabase.h \ + ../../../../include/QtCore/qmimetype.h \ + ../../../corelib/mimetypes/qmimetype.h \ + ../../../../include/QtCore/qfactoryinterface.h \ + ../../../corelib/plugin/qfactoryinterface.h \ + ../../../../include/QtCore/qlibrary.h \ + ../../../corelib/plugin/qlibrary.h \ + ../../../../include/QtCore/qplugin.h \ + ../../../corelib/plugin/qplugin.h \ + ../../../../include/QtCore/qpluginloader.h \ + ../../../corelib/plugin/qpluginloader.h \ + ../../../../include/QtCore/quuid.h \ + ../../../corelib/plugin/quuid.h \ + ../../../../include/QtCore/qabstractstate.h \ + ../../../corelib/statemachine/qabstractstate.h \ + ../../../../include/QtCore/qabstracttransition.h \ + ../../../corelib/statemachine/qabstracttransition.h \ + ../../../../include/QtCore/qeventtransition.h \ + ../../../corelib/statemachine/qeventtransition.h \ + ../../../../include/QtCore/qfinalstate.h \ + ../../../corelib/statemachine/qfinalstate.h \ + ../../../../include/QtCore/qhistorystate.h \ + ../../../corelib/statemachine/qhistorystate.h \ + ../../../../include/QtCore/qsignaltransition.h \ + ../../../corelib/statemachine/qsignaltransition.h \ + ../../../../include/QtCore/qstate.h \ + ../../../corelib/statemachine/qstate.h \ + ../../../../include/QtCore/qstatemachine.h \ + ../../../corelib/statemachine/qstatemachine.h \ + ../../../../include/QtCore/qexception.h \ + ../../../corelib/thread/qexception.h \ + ../../../../include/QtCore/qfuture.h \ + ../../../corelib/thread/qfuture.h \ + ../../../../include/QtCore/qfutureinterface.h \ + ../../../corelib/thread/qfutureinterface.h \ + ../../../../include/QtCore/qrunnable.h \ + ../../../corelib/thread/qrunnable.h \ + ../../../../include/QtCore/qresultstore.h \ + ../../../corelib/thread/qresultstore.h \ + ../../../../include/QtCore/qfuturesynchronizer.h \ + ../../../corelib/thread/qfuturesynchronizer.h \ + ../../../../include/QtCore/qfuturewatcher.h \ + ../../../corelib/thread/qfuturewatcher.h \ + ../../../../include/QtCore/qreadwritelock.h \ + ../../../corelib/thread/qreadwritelock.h \ + ../../../../include/QtCore/qsemaphore.h \ + ../../../corelib/thread/qsemaphore.h \ + ../../../../include/QtCore/qthread.h \ + ../../../corelib/thread/qthread.h \ + ../../../../include/QtCore/qthreadpool.h \ + ../../../corelib/thread/qthreadpool.h \ + ../../../../include/QtCore/qthreadstorage.h \ + ../../../corelib/thread/qthreadstorage.h \ + ../../../../include/QtCore/qwaitcondition.h \ + ../../../corelib/thread/qwaitcondition.h \ + ../../../../include/QtCore/qarraydataops.h \ + ../../../corelib/tools/qarraydataops.h \ + ../../../../include/QtCore/qarraydatapointer.h \ + ../../../corelib/tools/qarraydatapointer.h \ + ../../../../include/QtCore/qbitarray.h \ + ../../../corelib/tools/qbitarray.h \ + ../../../../include/QtCore/qbytearraymatcher.h \ + ../../../corelib/tools/qbytearraymatcher.h \ + ../../../../include/QtCore/qcache.h \ + ../../../corelib/tools/qcache.h \ + ../../../../include/QtCore/qcollator.h \ + ../../../corelib/tools/qcollator.h \ + ../../../../include/QtCore/qcommandlineoption.h \ + ../../../corelib/tools/qcommandlineoption.h \ + ../../../../include/QtCore/qcommandlineparser.h \ + ../../../corelib/tools/qcommandlineparser.h \ + ../../../../include/QtCore/qcryptographichash.h \ + ../../../corelib/tools/qcryptographichash.h \ + ../../../../include/QtCore/qelapsedtimer.h \ + ../../../corelib/tools/qelapsedtimer.h \ + ../../../../include/QtCore/qlinkedlist.h \ + ../../../corelib/tools/qlinkedlist.h \ + ../../../../include/QtCore/qmessageauthenticationcode.h \ + ../../../corelib/tools/qmessageauthenticationcode.h \ + ../../../../include/QtCore/qqueue.h \ + ../../../corelib/tools/qqueue.h \ + ../../../../include/QtCore/qregularexpression.h \ + ../../../corelib/tools/qregularexpression.h \ + ../../../../include/QtCore/qscopedvaluerollback.h \ + ../../../corelib/tools/qscopedvaluerollback.h \ + ../../../../include/QtCore/qstack.h \ + ../../../corelib/tools/qstack.h \ + ../../../../include/QtCore/qtextboundaryfinder.h \ + ../../../corelib/tools/qtextboundaryfinder.h \ + ../../../../include/QtCore/qtimeline.h \ + ../../../corelib/tools/qtimeline.h \ + ../../../../include/QtCore/qtimezone.h \ + ../../../corelib/tools/qtimezone.h \ + ../../../../include/QtCore/qxmlstream.h \ + ../../../corelib/xml/qxmlstream.h \ + ../../../../include/QtCore/qtcoreversion.h \ + ../../../../include/QtDBus/qdbusabstractadaptor.h \ + ../../../dbus/qdbusabstractadaptor.h \ + ../../../../include/QtDBus/qdbusabstractinterface.h \ + ../../../dbus/qdbusabstractinterface.h \ + ../../../../include/QtDBus/qdbusmessage.h \ + ../../../dbus/qdbusmessage.h \ + ../../../../include/QtDBus/qdbuserror.h \ + ../../../dbus/qdbuserror.h \ + ../../../../include/QtDBus/qdbusconnectioninterface.h \ + ../../../dbus/qdbusconnectioninterface.h \ + ../../../../include/QtDBus/qdbusreply.h \ + ../../../dbus/qdbusreply.h \ + ../../../../include/QtDBus/qdbuspendingreply.h \ + ../../../dbus/qdbuspendingreply.h \ + ../../../../include/QtDBus/qdbuspendingcall.h \ + ../../../dbus/qdbuspendingcall.h \ + ../../../../include/QtDBus/qdbuscontext.h \ + ../../../dbus/qdbuscontext.h \ + ../../../../include/QtDBus/qdbusinterface.h \ + ../../../dbus/qdbusinterface.h \ + ../../../../include/QtDBus/qdbusmetatype.h \ + ../../../dbus/qdbusmetatype.h \ + ../../../../include/QtDBus/qdbusserver.h \ + ../../../dbus/qdbusserver.h \ + ../../../../include/QtDBus/qdbusunixfiledescriptor.h \ + ../../../dbus/qdbusunixfiledescriptor.h \ + ../../../../include/QtDBus/qdbusvirtualobject.h \ + ../../../dbus/qdbusvirtualobject.h \ + ../../../../include/QtDBus/qtdbusversion.h \ + fcitxqtinputmethodproxy.h \ + fcitxqtinputmethoditem.h \ + fcitxqtconnection.h \ + keyuni.h \ + utils.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/qfcitxplatforminputcontext.o qfcitxplatforminputcontext.cpp + +.obj/utils.o: utils.cpp utils.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/utils.o utils.cpp + +.obj/moc_fcitxqtconnection.o: .moc/moc_fcitxqtconnection.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_fcitxqtconnection.o .moc/moc_fcitxqtconnection.cpp + +.obj/moc_fcitxqtconnection_p.o: .moc/moc_fcitxqtconnection_p.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_fcitxqtconnection_p.o .moc/moc_fcitxqtconnection_p.cpp + +.obj/moc_fcitxqtinputcontextproxy.o: .moc/moc_fcitxqtinputcontextproxy.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_fcitxqtinputcontextproxy.o .moc/moc_fcitxqtinputcontextproxy.cpp + +.obj/moc_fcitxqtinputmethodproxy.o: .moc/moc_fcitxqtinputmethodproxy.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_fcitxqtinputmethodproxy.o .moc/moc_fcitxqtinputmethodproxy.cpp + +.obj/moc_fcitxqtkeyboardproxy.o: .moc/moc_fcitxqtkeyboardproxy.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_fcitxqtkeyboardproxy.o .moc/moc_fcitxqtkeyboardproxy.cpp + +.obj/moc_main.o: .moc/moc_main.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_main.o .moc/moc_main.cpp + +.obj/moc_qfcitxplatforminputcontext.o: .moc/moc_qfcitxplatforminputcontext.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_qfcitxplatforminputcontext.o .moc/moc_qfcitxplatforminputcontext.cpp + +####### Install + +install_pritarget: first FORCE + @test -d $(INSTALL_ROOT)/usr/local/Qt-5.5.0/mkspecs/modules || mkdir -p $(INSTALL_ROOT)/usr/local/Qt-5.5.0/mkspecs/modules + -$(INSTALL_FILE) /home/antanubis/TBuild/Libraries/QtStatic/qtbase/mkspecs/modules-inst/qt_plugin_fcitxplatforminputcontextplugin.pri $(INSTALL_ROOT)/usr/local/Qt-5.5.0/mkspecs/modules/ + +uninstall_pritarget: FORCE + -$(DEL_FILE) -r $(INSTALL_ROOT)/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_fcitxplatforminputcontextplugin.pri + -$(DEL_DIR) $(INSTALL_ROOT)/usr/local/Qt-5.5.0/mkspecs/modules/ + + +install_target: first FORCE + @test -d $(INSTALL_ROOT)/usr/local/Qt-5.5.0/plugins/platforminputcontexts || mkdir -p $(INSTALL_ROOT)/usr/local/Qt-5.5.0/plugins/platforminputcontexts + -$(INSTALL_FILE) ../../../../plugins/platforminputcontexts/$(TARGET) $(INSTALL_ROOT)/usr/local/Qt-5.5.0/plugins/platforminputcontexts/$(TARGET) + @test -d $(INSTALL_ROOT)/usr/local/Qt-5.5.0/plugins/platforminputcontexts || mkdir -p $(INSTALL_ROOT)/usr/local/Qt-5.5.0/plugins/platforminputcontexts + -$(SED) -e 's,/home/antanubis/TBuild/Libraries/QtStatic/[^/][^/]*/lib,$$$$[QT_INSTALL_LIBS],g' ../../../../plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.prl > $(INSTALL_ROOT)/usr/local/Qt-5.5.0/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.prl + +uninstall_target: FORCE + -$(DEL_FILE) $(INSTALL_ROOT)/usr/local/Qt-5.5.0/plugins/platforminputcontexts/$(TARGET) + -$(DEL_FILE) $(INSTALL_ROOT)/usr/local/Qt-5.5.0/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.prl + -$(DEL_DIR) $(INSTALL_ROOT)/usr/local/Qt-5.5.0/plugins/platforminputcontexts/ + + +install_cmake_qt5_plugin_file: first FORCE + @test -d $(INSTALL_ROOT)/usr/local/Qt-5.5.0/lib/cmake/Qt5Gui || mkdir -p $(INSTALL_ROOT)/usr/local/Qt-5.5.0/lib/cmake/Qt5Gui + -$(INSTALL_FILE) /home/antanubis/TBuild/Libraries/QtStatic/qtbase/lib/cmake/Qt5Gui/Qt5Gui_QFcitxPlatformInputContextPlugin.cmake $(INSTALL_ROOT)/usr/local/Qt-5.5.0/lib/cmake/Qt5Gui/ + +uninstall_cmake_qt5_plugin_file: FORCE + -$(DEL_FILE) -r $(INSTALL_ROOT)/usr/local/Qt-5.5.0/lib/cmake/Qt5Gui/Qt5Gui_QFcitxPlatformInputContextPlugin.cmake + -$(DEL_DIR) $(INSTALL_ROOT)/usr/local/Qt-5.5.0/lib/cmake/Qt5Gui/ + + +install: install_pritarget install_target install_cmake_qt5_plugin_file FORCE + +uninstall: uninstall_pritarget uninstall_target uninstall_cmake_qt5_plugin_file FORCE + +FORCE: + diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.json b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.json new file mode 100644 index 000000000..6d2b389df --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.json @@ -0,0 +1,3 @@ +{ + "Keys": [ "fcitx" ] +} \ No newline at end of file diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.pro b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.pro new file mode 100644 index 000000000..4a2783cd8 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.pro @@ -0,0 +1,38 @@ +TARGET = fcitxplatforminputcontextplugin + +PLUGIN_TYPE = platforminputcontexts +PLUGIN_EXTENDS = - +PLUGIN_CLASS_NAME = QFcitxPlatformInputContextPlugin +load(qt_plugin) + +QT += dbus gui-private +SOURCES += $$PWD/fcitxqtconnection.cpp \ + $$PWD/fcitxqtformattedpreedit.cpp \ + $$PWD/fcitxqtinputcontextproxy.cpp \ + $$PWD/fcitxqtinputmethoditem.cpp \ + $$PWD/fcitxqtinputmethodproxy.cpp \ + $$PWD/fcitxqtkeyboardlayout.cpp \ + $$PWD/fcitxqtkeyboardproxy.cpp \ + $$PWD/keyuni.cpp \ + $$PWD/main.cpp \ + $$PWD/qfcitxplatforminputcontext.cpp \ + $$PWD/utils.cpp + +HEADERS += $$PWD/fcitxqtconnection.h \ + $$PWD/fcitxqtconnection_p.h \ + $$PWD/fcitxqtdbusaddons_export.h \ + $$PWD/fcitxqtdbusaddons_version.h \ + $$PWD/fcitxqtformattedpreedit.h \ + $$PWD/fcitxqtinputcontextproxy.h \ + $$PWD/fcitxqtinputmethoditem.h \ + $$PWD/fcitxqtinputmethodproxy.h \ + $$PWD/fcitxqtkeyboardlayout.h \ + $$PWD/fcitxqtkeyboardproxy.h \ + $$PWD/keydata.h \ + $$PWD/keyserver_x11.h \ + $$PWD/keyuni.h \ + $$PWD/main.h \ + $$PWD/qfcitxplatforminputcontext.h \ + $$PWD/utils.h + +OTHER_FILES += $$PWD/fcitx.jsn diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.cpp new file mode 100644 index 000000000..a50178a44 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.cpp @@ -0,0 +1,369 @@ +/*************************************************************************** + * Copyright (C) 2012~2012 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include "fcitxqtconnection_p.h" +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +// utils function in fcitx-utils and fcitx-config +bool _pid_exists(pid_t pid) { + if (pid <= 0) + return 0; + return !(kill(pid, 0) && (errno == ESRCH)); +} + + +FcitxQtConnection::FcitxQtConnection(QObject* parent): QObject(parent) + ,d_ptr(new FcitxQtConnectionPrivate(this)) +{ +} + +void FcitxQtConnection::startConnection() +{ + Q_D(FcitxQtConnection); + if (!d->m_initialized) { + d->initialize(); + d->createConnection(); + } +} + +void FcitxQtConnection::endConnection() +{ + Q_D(FcitxQtConnection); + d->cleanUp(); + d->finalize(); + d->m_connectedOnce = false; +} + +bool FcitxQtConnection::autoReconnect() +{ + Q_D(FcitxQtConnection); + return d->m_autoReconnect; +} + +void FcitxQtConnection::setAutoReconnect(bool a) +{ + Q_D(FcitxQtConnection); + d->m_autoReconnect = a; +} + +QDBusConnection* FcitxQtConnection::connection() +{ + Q_D(FcitxQtConnection); + return d->m_connection; +} + +const QString& FcitxQtConnection::serviceName() +{ + Q_D(FcitxQtConnection); + return d->m_serviceName; +} + +bool FcitxQtConnection::isConnected() +{ + Q_D(FcitxQtConnection); + return d->isConnected(); +} + + + +FcitxQtConnection::~FcitxQtConnection() +{ +} + +FcitxQtConnectionPrivate::FcitxQtConnectionPrivate(FcitxQtConnection* conn) : QObject(conn) + ,q_ptr(conn) + ,m_displayNumber(-1) + ,m_serviceName(QString("%1-%2").arg("org.fcitx.Fcitx").arg(displayNumber())) + ,m_connection(0) + ,m_serviceWatcher(new QDBusServiceWatcher(conn)) + ,m_watcher(new QFileSystemWatcher(this)) + ,m_autoReconnect(true) + ,m_connectedOnce(false) + ,m_initialized(false) +{ +} + +FcitxQtConnectionPrivate::~FcitxQtConnectionPrivate() +{ + if (m_connection) + delete m_connection; +} + +void FcitxQtConnectionPrivate::initialize() { + m_serviceWatcher->setConnection(QDBusConnection::sessionBus()); + m_serviceWatcher->addWatchedService(m_serviceName); + + QFileInfo info(socketFile()); + QDir dir(info.path()); + if (!dir.exists()) { + QDir rt(QDir::root()); + rt.mkpath(info.path()); + } + m_watcher->addPath(info.path()); + if (info.exists()) { + m_watcher->addPath(info.filePath()); + } + + connect(m_watcher, SIGNAL(fileChanged(QString)), this, SLOT(socketFileChanged())); + connect(m_watcher, SIGNAL(directoryChanged(QString)), this, SLOT(socketFileChanged())); + m_initialized = true; +} + +void FcitxQtConnectionPrivate::finalize() { + m_serviceWatcher->removeWatchedService(m_serviceName); + m_watcher->removePaths(m_watcher->files()); + m_watcher->removePaths(m_watcher->directories()); + m_watcher->disconnect(SIGNAL(fileChanged(QString))); + m_watcher->disconnect(SIGNAL(directoryChanged(QString))); + m_initialized = false; +} + +void FcitxQtConnectionPrivate::socketFileChanged() { + QFileInfo info(socketFile()); + if (info.exists()) { + if (m_watcher->files().indexOf(info.filePath()) == -1) + m_watcher->addPath(info.filePath()); + } + + QString addr = address(); + if (addr.isNull()) + return; + + cleanUp(); + createConnection(); +} + +QByteArray FcitxQtConnectionPrivate::localMachineId() +{ +#if QT_VERSION >= QT_VERSION_CHECK(4, 8, 0) + return QDBusConnection::localMachineId(); +#else + QFile file1("/var/lib/dbus/machine-id"); + QFile file2("/etc/machine-id"); + QFile* fileToRead = NULL; + if (file1.open(QIODevice::ReadOnly)) { + fileToRead = &file1; + } + else if (file2.open(QIODevice::ReadOnly)) { + fileToRead = &file2; + } + if (fileToRead) { + QByteArray result = fileToRead->readLine(1024); + fileToRead->close(); + result = result.trimmed(); + if (!result.isEmpty()) + return result; + } + return "machine-id"; +#endif +} + +int FcitxQtConnectionPrivate::displayNumber() { + if (m_displayNumber < 0) { + QByteArray displayNumber("0"); + QByteArray display(qgetenv("DISPLAY")); + int pos = display.indexOf(':'); + + if (pos >= 0) { + ++pos; + int pos2 = display.indexOf('.', pos); + if (pos2 > 0) { + displayNumber = display.mid(pos, pos2 - pos); + } else { + displayNumber = display.mid(pos); + } + } + + bool ok; + int d = displayNumber.toInt(&ok); + if (ok) { + m_displayNumber = d; + } else { + m_displayNumber = 0; + } + } + + return m_displayNumber; +} + +const QString& FcitxQtConnectionPrivate::socketFile() +{ + if (!m_socketFile.isEmpty()) + return m_socketFile; + + QString filename = QString("%1-%2").arg(QString::fromLatin1(QDBusConnection::localMachineId())).arg(displayNumber()); + + QString home = QString::fromLocal8Bit(qgetenv("XDG_CONFIG_HOME")); + if (home.isEmpty()) { + home = QDir::homePath().append(QLatin1Literal("/.config")); + } + m_socketFile = QString("%1/fcitx/dbus/%2").arg(home).arg(filename); + + return m_socketFile; +} + +QString FcitxQtConnectionPrivate::address() +{ + QString addr; + QByteArray addrVar = qgetenv("FCITX_DBUS_ADDRESS"); + if (!addrVar.isNull()) + return QString::fromLocal8Bit(addrVar); + + QFile file(socketFile()); + if (!file.open(QIODevice::ReadOnly)) + return QString(); + + const int BUFSIZE = 1024; + + char buffer[BUFSIZE]; + size_t sz = file.read(buffer, BUFSIZE); + file.close(); + if (sz == 0) + return QString(); + char* p = buffer; + while(*p) + p++; + size_t addrlen = p - buffer; + if (sz != addrlen + 2 * sizeof(pid_t) + 1) + return QString(); + + /* skip '\0' */ + p++; + pid_t *ppid = (pid_t*) p; + pid_t daemonpid = ppid[0]; + pid_t fcitxpid = ppid[1]; + + if (!_pid_exists(daemonpid) + || !_pid_exists(fcitxpid)) + return QString(); + + addr = QLatin1String(buffer); + + return addr; +} + +void FcitxQtConnectionPrivate::createConnection() { + if (m_connectedOnce && !m_autoReconnect) { + return; + } + + m_serviceWatcher->disconnect(SIGNAL(serviceOwnerChanged(QString,QString,QString))); + QString addr = address(); + if (!addr.isNull()) { + QDBusConnection connection(QDBusConnection::connectToBus(addr, "fcitx")); + if (connection.isConnected()) { + // qDebug() << "create private"; + m_connection = new QDBusConnection(connection); + } + else + QDBusConnection::disconnectFromBus("fcitx"); + } + + if (!m_connection) { + QDBusConnection* connection = new QDBusConnection(QDBusConnection::sessionBus()); + connect(m_serviceWatcher, SIGNAL(serviceOwnerChanged(QString,QString,QString)), this, SLOT(imChanged(QString,QString,QString))); + QDBusReply registered = connection->interface()->isServiceRegistered(m_serviceName); + if (!registered.isValid() || !registered.value()) { + delete connection; + } + else { + m_connection = connection; + } + } + + Q_Q(FcitxQtConnection); + if (m_connection) { + + m_connection->connect ("org.freedesktop.DBus.Local", + "/org/freedesktop/DBus/Local", + "org.freedesktop.DBus.Local", + "Disconnected", + this, + SLOT (dbusDisconnected ())); + m_connectedOnce = true; + emit q->connected(); + } +} + + +void FcitxQtConnectionPrivate::dbusDisconnected() +{ + cleanUp(); + + createConnection(); +} + +void FcitxQtConnectionPrivate::imChanged(const QString& service, const QString& oldowner, const QString& newowner) +{ + if (service == m_serviceName) { + /* old die */ + if (oldowner.length() > 0 || newowner.length() > 0) + cleanUp(); + + /* new rise */ + if (newowner.length() > 0) { + QTimer::singleShot(100, this, SLOT(newServiceAppear())); + } + } +} + +void FcitxQtConnectionPrivate::cleanUp() +{ + Q_Q(FcitxQtConnection); + bool doemit = false; + QDBusConnection::disconnectFromBus("fcitx"); + if (m_connection) { + delete m_connection; + m_connection = 0; + doemit = true; + } + + if (!m_autoReconnect && m_connectedOnce) + finalize(); + + /* we want m_connection and finalize being called before the signal + * thus isConnected will return false in slot + * and startConnection can be called in slot + */ + if (doemit) + emit q->disconnected(); +} + +bool FcitxQtConnectionPrivate::isConnected() +{ + return m_connection && m_connection->isConnected(); +} + +void FcitxQtConnectionPrivate::newServiceAppear() { + if (!isConnected()) { + cleanUp(); + + createConnection(); + } +} diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.h new file mode 100644 index 000000000..efe255f90 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.h @@ -0,0 +1,111 @@ +/*************************************************************************** + * Copyright (C) 2012~2012 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef FCITXQTCONNECTION_H +#define FCITXQTCONNECTION_H + +#include "fcitxqtdbusaddons_export.h" + +#include + +class QDBusConnection; + +class FcitxQtConnectionPrivate; + + +/** + * dbus connection to fcitx + **/ +class FCITXQTDBUSADDONS_EXPORT FcitxQtConnection : public QObject { + Q_OBJECT + Q_PROPERTY(bool autoReconnect READ autoReconnect WRITE setAutoReconnect) + Q_PROPERTY(bool connected READ isConnected) + Q_PROPERTY(QDBusConnection* connection READ connection) + Q_PROPERTY(QString serviceName READ serviceName) +public: + /** + * create a new connection + * + * @param parent + **/ + explicit FcitxQtConnection(QObject* parent = 0); + + /** + * destroy the connection + **/ + virtual ~FcitxQtConnection(); + + /** + * the connection will not start to work until you call this function + * you may want to connect to the signal before you call this function + **/ + void startConnection(); + void endConnection(); + /** + * automatically reconnect if fcitx disappeared + * + * @param a ... + * @return void + **/ + void setAutoReconnect(bool a); + + /** + * check this connection is doing automatical reconnect or not + * + * default value is true + **/ + bool autoReconnect(); + + /** + * return the current dbus connection to fcitx, notice, the object return + * by this function might be deteled if fcitx disappear, or might return 0 + * if fcitx is not running + * + * @return QDBusConnection* + **/ + QDBusConnection* connection(); + /** + * current fcitx dbus service name, can be used for create DBus proxy + * + * @return service name + **/ + const QString& serviceName(); + /** + * check its connected or not + **/ + bool isConnected(); + +Q_SIGNALS: + /** + * this signal will be emitted upon fcitx appears + **/ + void connected(); + /** + * this signal will be emitted upon fcitx disappears + * + * it will come with connected in pair + **/ + void disconnected(); + +private: + FcitxQtConnectionPrivate * const d_ptr; + Q_DECLARE_PRIVATE(FcitxQtConnection); +}; + +#endif // FCITXCONNECTION_H diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection_p.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection_p.h new file mode 100644 index 000000000..dda726ac6 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection_p.h @@ -0,0 +1,68 @@ +/*************************************************************************** + * Copyright (C) 2012~2012 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef FCITXQTCONNECTION_P_H +#define FCITXQTCONNECTION_P_H + +#include "fcitxqtconnection.h" +#include +#include + +class QDBusConnection; +class QDBusServiceWatcher; + +class FcitxQtConnectionPrivate : public QObject { + Q_OBJECT +public: + FcitxQtConnectionPrivate(FcitxQtConnection* conn); + virtual ~FcitxQtConnectionPrivate(); + FcitxQtConnection * const q_ptr; + Q_DECLARE_PUBLIC(FcitxQtConnection); + +private Q_SLOTS: + void imChanged(const QString& service, const QString& oldowner, const QString& newowner); + void dbusDisconnected(); + void cleanUp(); + void newServiceAppear(); + void socketFileChanged(); + +private: + bool isConnected(); + + static QByteArray localMachineId(); + const QString& socketFile(); + void createConnection(); + QString address(); + int displayNumber(); + void initialize(); + void finalize(); + + int m_displayNumber; + QString m_serviceName; + QDBusConnection* m_connection; + QDBusServiceWatcher* m_serviceWatcher; + QFileSystemWatcher* m_watcher; + QString m_socketFile; + bool m_autoReconnect; + bool m_connectedOnce; + bool m_initialized; +}; + + +#endif // FCITXCONNECTION_P_H diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_export.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_export.h new file mode 100644 index 000000000..3fabfb999 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_export.h @@ -0,0 +1,41 @@ + +#ifndef FCITXQTDBUSADDONS_EXPORT_H +#define FCITXQTDBUSADDONS_EXPORT_H + +#ifdef FCITXQTDBUSADDONS_STATIC_DEFINE +# define FCITXQTDBUSADDONS_EXPORT +# define FCITXQTDBUSADDONS_NO_EXPORT +#else +# ifndef FCITXQTDBUSADDONS_EXPORT +# ifdef FcitxQt5DBusAddons_EXPORTS + /* We are building this library */ +# define FCITXQTDBUSADDONS_EXPORT __attribute__((visibility("default"))) +# else + /* We are using this library */ +# define FCITXQTDBUSADDONS_EXPORT __attribute__((visibility("default"))) +# endif +# endif + +# ifndef FCITXQTDBUSADDONS_NO_EXPORT +# define FCITXQTDBUSADDONS_NO_EXPORT __attribute__((visibility("hidden"))) +# endif +#endif + +#ifndef FCITXQTDBUSADDONS_DEPRECATED +# define FCITXQTDBUSADDONS_DEPRECATED __attribute__ ((__deprecated__)) +#endif + +#ifndef FCITXQTDBUSADDONS_DEPRECATED_EXPORT +# define FCITXQTDBUSADDONS_DEPRECATED_EXPORT FCITXQTDBUSADDONS_EXPORT FCITXQTDBUSADDONS_DEPRECATED +#endif + +#ifndef FCITXQTDBUSADDONS_DEPRECATED_NO_EXPORT +# define FCITXQTDBUSADDONS_DEPRECATED_NO_EXPORT FCITXQTDBUSADDONS_NO_EXPORT FCITXQTDBUSADDONS_DEPRECATED +#endif + +#define DEFINE_NO_DEPRECATED 0 +#if DEFINE_NO_DEPRECATED +# define FCITXQTDBUSADDONS_NO_DEPRECATED +#endif + +#endif diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_version.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_version.h new file mode 100644 index 000000000..7b6dbf477 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_version.h @@ -0,0 +1,11 @@ + +#ifndef FCITXQT5DBUSADDONS_VERSION_H +#define FCITXQT5DBUSADDONS_VERSION_H + +#define FCITXQT5DBUSADDONS_VERSION_STRING "1.0.0" +#define FCITXQT5DBUSADDONS_VERSION_MAJOR 1 +#define FCITXQT5DBUSADDONS_VERSION_MINOR 0 +#define FCITXQT5DBUSADDONS_VERSION_PATCH 0 +#define FCITXQT5DBUSADDONS_VERSION ((1<<16)|(0<<8)|(0)) + +#endif diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.cpp new file mode 100644 index 000000000..c6af84547 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.cpp @@ -0,0 +1,78 @@ +/*************************************************************************** + * Copyright (C) 2012~2012 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include + +#include "fcitxqtformattedpreedit.h" + +void FcitxQtFormattedPreedit::registerMetaType() +{ + qRegisterMetaType("FcitxQtFormattedPreedit"); + qDBusRegisterMetaType(); + qRegisterMetaType("FcitxQtFormattedPreeditList"); + qDBusRegisterMetaType(); +} + +qint32 FcitxQtFormattedPreedit::format() const +{ + return m_format; +} + +const QString& FcitxQtFormattedPreedit::string() const +{ + return m_string; +} + +void FcitxQtFormattedPreedit::setFormat(qint32 format) +{ + m_format = format; +} + +void FcitxQtFormattedPreedit::setString(const QString& str) +{ + m_string = str; +} + +bool FcitxQtFormattedPreedit::operator==(const FcitxQtFormattedPreedit& preedit) const +{ + return (preedit.m_format == m_format) && (preedit.m_string == m_string); +} + +FCITXQTDBUSADDONS_EXPORT +QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtFormattedPreedit& preedit) +{ + argument.beginStructure(); + argument << preedit.string(); + argument << preedit.format(); + argument.endStructure(); + return argument; +} + +FCITXQTDBUSADDONS_EXPORT +const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtFormattedPreedit& preedit) +{ + QString str; + qint32 format; + argument.beginStructure(); + argument >> str >> format; + argument.endStructure(); + preedit.setString(str); + preedit.setFormat(format); + return argument; +} diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.h new file mode 100644 index 000000000..a00355c6f --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.h @@ -0,0 +1,51 @@ +/*************************************************************************** + * Copyright (C) 2012~2012 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef FCITX_QT_FORMATTED_PREEDIT_H +#define FCITX_QT_FORMATTED_PREEDIT_H + +#include "fcitxqtdbusaddons_export.h" + +#include +#include + +class FCITXQTDBUSADDONS_EXPORT FcitxQtFormattedPreedit { +public: + const QString& string() const; + qint32 format() const; + void setString(const QString& str); + void setFormat(qint32 format); + + static void registerMetaType(); + + bool operator ==(const FcitxQtFormattedPreedit& preedit) const; +private: + QString m_string; + qint32 m_format; +}; + +typedef QList FcitxQtFormattedPreeditList; + +QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtFormattedPreedit& im); +const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtFormattedPreedit& im); + +Q_DECLARE_METATYPE(FcitxQtFormattedPreedit) +Q_DECLARE_METATYPE(FcitxQtFormattedPreeditList) + +#endif diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.cpp new file mode 100644 index 000000000..b47d332cd --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.cpp @@ -0,0 +1,26 @@ +/* + * This file was generated by qdbusxml2cpp version 0.8 + * Command line was: qdbusxml2cpp -N -p fcitxqtinputcontextproxy -c FcitxQtInputContextProxy interfaces/org.fcitx.Fcitx.InputContext.xml -i fcitxqtformattedpreedit.h -i fcitxqt_export.h + * + * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). + * + * This is an auto-generated file. + * This file may have been hand-edited. Look for HAND-EDIT comments + * before re-generating it. + */ + +#include "fcitxqtinputcontextproxy.h" + +/* + * Implementation of interface class FcitxQtInputContextProxy + */ + +FcitxQtInputContextProxy::FcitxQtInputContextProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent) + : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent) +{ +} + +FcitxQtInputContextProxy::~FcitxQtInputContextProxy() +{ +} + diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.h new file mode 100644 index 000000000..19874dc45 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.h @@ -0,0 +1,136 @@ +/* + * This file was generated by qdbusxml2cpp version 0.8 + * Command line was: qdbusxml2cpp -N -p fcitxqtinputcontextproxy -c FcitxQtInputContextProxy interfaces/org.fcitx.Fcitx.InputContext.xml -i fcitxqtformattedpreedit.h -i fcitxqt_export.h + * + * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). + * + * This is an auto-generated file. + * Do not edit! All changes made to it will be lost. + */ + +#ifndef FCITXQTINPUTCONTEXTPROXY_H_1409252990 +#define FCITXQTINPUTCONTEXTPROXY_H_1409252990 + +#include +#include +#include +#include +#include +#include +#include +#include +#include "fcitxqtformattedpreedit.h" +#include "fcitxqtdbusaddons_export.h" + +/* + * Proxy class for interface org.fcitx.Fcitx.InputContext + */ +class FCITXQTDBUSADDONS_EXPORT FcitxQtInputContextProxy: public QDBusAbstractInterface +{ + Q_OBJECT +public: + static inline const char *staticInterfaceName() + { return "org.fcitx.Fcitx.InputContext"; } + +public: + FcitxQtInputContextProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0); + + ~FcitxQtInputContextProxy(); + +public Q_SLOTS: // METHODS + inline QDBusPendingReply<> CloseIC() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("CloseIC"), argumentList); + } + + inline QDBusPendingReply<> DestroyIC() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("DestroyIC"), argumentList); + } + + inline QDBusPendingReply<> EnableIC() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("EnableIC"), argumentList); + } + + inline QDBusPendingReply<> FocusIn() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("FocusIn"), argumentList); + } + + inline QDBusPendingReply<> FocusOut() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("FocusOut"), argumentList); + } + + inline QDBusPendingReply<> MouseEvent(int x) + { + QList argumentList; + argumentList << QVariant::fromValue(x); + return asyncCallWithArgumentList(QLatin1String("MouseEvent"), argumentList); + } + + inline QDBusPendingReply ProcessKeyEvent(uint keyval, uint keycode, uint state, int type, uint time) + { + QList argumentList; + argumentList << QVariant::fromValue(keyval) << QVariant::fromValue(keycode) << QVariant::fromValue(state) << QVariant::fromValue(type) << QVariant::fromValue(time); + return asyncCallWithArgumentList(QLatin1String("ProcessKeyEvent"), argumentList); + } + + inline QDBusPendingReply<> Reset() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("Reset"), argumentList); + } + + inline QDBusPendingReply<> SetCapacity(uint caps) + { + QList argumentList; + argumentList << QVariant::fromValue(caps); + return asyncCallWithArgumentList(QLatin1String("SetCapacity"), argumentList); + } + + inline QDBusPendingReply<> SetCursorLocation(int x, int y) + { + QList argumentList; + argumentList << QVariant::fromValue(x) << QVariant::fromValue(y); + return asyncCallWithArgumentList(QLatin1String("SetCursorLocation"), argumentList); + } + + inline QDBusPendingReply<> SetCursorRect(int x, int y, int w, int h) + { + QList argumentList; + argumentList << QVariant::fromValue(x) << QVariant::fromValue(y) << QVariant::fromValue(w) << QVariant::fromValue(h); + return asyncCallWithArgumentList(QLatin1String("SetCursorRect"), argumentList); + } + + inline QDBusPendingReply<> SetSurroundingText(const QString &text, uint cursor, uint anchor) + { + QList argumentList; + argumentList << QVariant::fromValue(text) << QVariant::fromValue(cursor) << QVariant::fromValue(anchor); + return asyncCallWithArgumentList(QLatin1String("SetSurroundingText"), argumentList); + } + + inline QDBusPendingReply<> SetSurroundingTextPosition(uint cursor, uint anchor) + { + QList argumentList; + argumentList << QVariant::fromValue(cursor) << QVariant::fromValue(anchor); + return asyncCallWithArgumentList(QLatin1String("SetSurroundingTextPosition"), argumentList); + } + +Q_SIGNALS: // SIGNALS + void CloseIM(); + void CommitString(const QString &str); + void DeleteSurroundingText(int offset, uint nchar); + void EnableIM(); + void ForwardKey(uint keyval, uint state, int type); + void UpdateClientSideUI(const QString &auxup, const QString &auxdown, const QString &preedit, const QString &candidateword, const QString &imname, int cursorpos); + void UpdateFormattedPreedit(FcitxQtFormattedPreeditList str, int cursorpos); +}; + +#endif diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.cpp new file mode 100644 index 000000000..d28ed1149 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.cpp @@ -0,0 +1,95 @@ +/*************************************************************************** + * Copyright (C) 2011~2012 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +// Qt +#include +#include + +// self +#include "fcitxqtinputmethoditem.h" + +bool FcitxQtInputMethodItem::enabled() const +{ + return m_enabled; +} +const QString& FcitxQtInputMethodItem::langCode() const +{ + return m_langCode; +} +const QString& FcitxQtInputMethodItem::name() const +{ + return m_name; +} +const QString& FcitxQtInputMethodItem::uniqueName() const +{ + return m_uniqueName; +} +void FcitxQtInputMethodItem::setEnabled(bool enable) +{ + m_enabled = enable; +} +void FcitxQtInputMethodItem::setLangCode(const QString& lang) +{ + m_langCode = lang; +} +void FcitxQtInputMethodItem::setName(const QString& name) +{ + m_name = name; +} +void FcitxQtInputMethodItem::setUniqueName(const QString& name) +{ + m_uniqueName = name; +} + +void FcitxQtInputMethodItem::registerMetaType() +{ + qRegisterMetaType("FcitxQtInputMethodItem"); + qDBusRegisterMetaType(); + qRegisterMetaType("FcitxQtInputMethodItemList"); + qDBusRegisterMetaType(); +} + +FCITXQTDBUSADDONS_EXPORT +QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtInputMethodItem& im) +{ + argument.beginStructure(); + argument << im.name(); + argument << im.uniqueName(); + argument << im.langCode(); + argument << im.enabled(); + argument.endStructure(); + return argument; +} + +FCITXQTDBUSADDONS_EXPORT +const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtInputMethodItem& im) +{ + QString name; + QString uniqueName; + QString langCode; + bool enabled; + argument.beginStructure(); + argument >> name >> uniqueName >> langCode >> enabled; + argument.endStructure(); + im.setName(name); + im.setUniqueName(uniqueName); + im.setLangCode(langCode); + im.setEnabled(enabled); + return argument; +} diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.h new file mode 100644 index 000000000..6b8c7805c --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.h @@ -0,0 +1,64 @@ +/*************************************************************************** + * Copyright (C) 2011~2012 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef FCITX_QT_INPUT_METHOD_ITEM_H +#define FCITX_QT_INPUT_METHOD_ITEM_H + +#include "fcitxqtdbusaddons_export.h" + +// Qt +#include +#include +#include + +class FCITXQTDBUSADDONS_EXPORT FcitxQtInputMethodItem +{ +public: + const QString& name() const; + const QString& uniqueName() const; + const QString& langCode() const; + bool enabled() const; + + void setName(const QString& name); + void setUniqueName(const QString& name); + void setLangCode(const QString& name); + void setEnabled(bool name); + static void registerMetaType(); + + inline bool operator < (const FcitxQtInputMethodItem& im) const { + if (m_enabled == true && im.m_enabled == false) + return true; + return false; + } +private: + QString m_name; + QString m_uniqueName; + QString m_langCode; + bool m_enabled; +}; + +typedef QList FcitxQtInputMethodItemList; + +QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtInputMethodItem& im); +const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtInputMethodItem& im); + +Q_DECLARE_METATYPE(FcitxQtInputMethodItem) +Q_DECLARE_METATYPE(FcitxQtInputMethodItemList) + +#endif diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.cpp new file mode 100644 index 000000000..068f4c2ee --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.cpp @@ -0,0 +1,26 @@ +/* + * This file was generated by qdbusxml2cpp version 0.8 + * Command line was: qdbusxml2cpp -N -p fcitxqtinputmethodproxy -c FcitxQtInputMethodProxy interfaces/org.fcitx.Fcitx.InputMethod.xml -i fcitxqtinputmethoditem.h -i fcitxqt_export.h + * + * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). + * + * This is an auto-generated file. + * This file may have been hand-edited. Look for HAND-EDIT comments + * before re-generating it. + */ + +#include "fcitxqtinputmethodproxy.h" + +/* + * Implementation of interface class FcitxQtInputMethodProxy + */ + +FcitxQtInputMethodProxy::FcitxQtInputMethodProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent) + : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent) +{ +} + +FcitxQtInputMethodProxy::~FcitxQtInputMethodProxy() +{ +} + diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.h new file mode 100644 index 000000000..7aa37e22b --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.h @@ -0,0 +1,217 @@ +/* + * This file was generated by qdbusxml2cpp version 0.8 + * Command line was: qdbusxml2cpp -N -p fcitxqtinputmethodproxy -c FcitxQtInputMethodProxy interfaces/org.fcitx.Fcitx.InputMethod.xml -i fcitxqtinputmethoditem.h -i fcitxqt_export.h + * + * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). + * + * This is an auto-generated file. + * Do not edit! All changes made to it will be lost. + */ + +#ifndef FCITXQTINPUTMETHODPROXY_H_1409252990 +#define FCITXQTINPUTMETHODPROXY_H_1409252990 + +#include +#include +#include +#include +#include +#include +#include +#include +#include "fcitxqtinputmethoditem.h" +#include "fcitxqtdbusaddons_export.h" + +/* + * Proxy class for interface org.fcitx.Fcitx.InputMethod + */ +class FCITXQTDBUSADDONS_EXPORT FcitxQtInputMethodProxy: public QDBusAbstractInterface +{ + Q_OBJECT +public: + static inline const char *staticInterfaceName() + { return "org.fcitx.Fcitx.InputMethod"; } + +public: + FcitxQtInputMethodProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0); + + ~FcitxQtInputMethodProxy(); + + Q_PROPERTY(QString CurrentIM READ currentIM WRITE setCurrentIM) + inline QString currentIM() const + { return qvariant_cast< QString >(property("CurrentIM")); } + inline void setCurrentIM(const QString &value) + { setProperty("CurrentIM", QVariant::fromValue(value)); } + + Q_PROPERTY(FcitxQtInputMethodItemList IMList READ iMList WRITE setIMList) + inline FcitxQtInputMethodItemList iMList() const + { return qvariant_cast< FcitxQtInputMethodItemList >(property("IMList")); } + inline void setIMList(FcitxQtInputMethodItemList value) + { setProperty("IMList", QVariant::fromValue(value)); } + +public Q_SLOTS: // METHODS + inline QDBusPendingReply<> ActivateIM() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("ActivateIM"), argumentList); + } + + inline QDBusPendingReply<> Configure() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("Configure"), argumentList); + } + + inline QDBusPendingReply<> ConfigureAddon(const QString &addon) + { + QList argumentList; + argumentList << QVariant::fromValue(addon); + return asyncCallWithArgumentList(QLatin1String("ConfigureAddon"), argumentList); + } + + inline QDBusPendingReply<> ConfigureIM(const QString &im) + { + QList argumentList; + argumentList << QVariant::fromValue(im); + return asyncCallWithArgumentList(QLatin1String("ConfigureIM"), argumentList); + } + + inline QDBusPendingReply CreateIC() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("CreateIC"), argumentList); + } + inline QDBusReply CreateIC(uint &keyval1, uint &state1, uint &keyval2, uint &state2) + { + QList argumentList; + QDBusMessage reply = callWithArgumentList(QDBus::Block, QLatin1String("CreateIC"), argumentList); + if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 5) { + keyval1 = qdbus_cast(reply.arguments().at(1)); + state1 = qdbus_cast(reply.arguments().at(2)); + keyval2 = qdbus_cast(reply.arguments().at(3)); + state2 = qdbus_cast(reply.arguments().at(4)); + } + return reply; + } + + inline QDBusPendingReply CreateICv2(const QString &appname) + { + QList argumentList; + argumentList << QVariant::fromValue(appname); + return asyncCallWithArgumentList(QLatin1String("CreateICv2"), argumentList); + } + inline QDBusReply CreateICv2(const QString &appname, bool &enable, uint &keyval1, uint &state1, uint &keyval2, uint &state2) + { + QList argumentList; + argumentList << QVariant::fromValue(appname); + QDBusMessage reply = callWithArgumentList(QDBus::Block, QLatin1String("CreateICv2"), argumentList); + if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 6) { + enable = qdbus_cast(reply.arguments().at(1)); + keyval1 = qdbus_cast(reply.arguments().at(2)); + state1 = qdbus_cast(reply.arguments().at(3)); + keyval2 = qdbus_cast(reply.arguments().at(4)); + state2 = qdbus_cast(reply.arguments().at(5)); + } + return reply; + } + + inline QDBusPendingReply CreateICv3(const QString &appname, int pid) + { + QList argumentList; + argumentList << QVariant::fromValue(appname) << QVariant::fromValue(pid); + return asyncCallWithArgumentList(QLatin1String("CreateICv3"), argumentList); + } + inline QDBusReply CreateICv3(const QString &appname, int pid, bool &enable, uint &keyval1, uint &state1, uint &keyval2, uint &state2) + { + QList argumentList; + argumentList << QVariant::fromValue(appname) << QVariant::fromValue(pid); + QDBusMessage reply = callWithArgumentList(QDBus::Block, QLatin1String("CreateICv3"), argumentList); + if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 6) { + enable = qdbus_cast(reply.arguments().at(1)); + keyval1 = qdbus_cast(reply.arguments().at(2)); + state1 = qdbus_cast(reply.arguments().at(3)); + keyval2 = qdbus_cast(reply.arguments().at(4)); + state2 = qdbus_cast(reply.arguments().at(5)); + } + return reply; + } + + inline QDBusPendingReply<> Exit() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("Exit"), argumentList); + } + + inline QDBusPendingReply GetCurrentIM() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("GetCurrentIM"), argumentList); + } + + inline QDBusPendingReply GetCurrentState() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("GetCurrentState"), argumentList); + } + + inline QDBusPendingReply GetCurrentUI() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("GetCurrentUI"), argumentList); + } + + inline QDBusPendingReply GetIMAddon(const QString &im) + { + QList argumentList; + argumentList << QVariant::fromValue(im); + return asyncCallWithArgumentList(QLatin1String("GetIMAddon"), argumentList); + } + + inline QDBusPendingReply<> InactivateIM() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("InactivateIM"), argumentList); + } + + inline QDBusPendingReply<> ReloadAddonConfig(const QString &addon) + { + QList argumentList; + argumentList << QVariant::fromValue(addon); + return asyncCallWithArgumentList(QLatin1String("ReloadAddonConfig"), argumentList); + } + + inline QDBusPendingReply<> ReloadConfig() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("ReloadConfig"), argumentList); + } + + inline QDBusPendingReply<> ResetIMList() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("ResetIMList"), argumentList); + } + + inline QDBusPendingReply<> Restart() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("Restart"), argumentList); + } + + inline QDBusPendingReply<> SetCurrentIM(const QString &im) + { + QList argumentList; + argumentList << QVariant::fromValue(im); + return asyncCallWithArgumentList(QLatin1String("SetCurrentIM"), argumentList); + } + + inline QDBusPendingReply<> ToggleIM() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("ToggleIM"), argumentList); + } + +Q_SIGNALS: // SIGNALS +}; + +#endif diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.cpp new file mode 100644 index 000000000..32cd981ea --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.cpp @@ -0,0 +1,100 @@ +/*************************************************************************** + * Copyright (C) 2011~2012 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +// Qt +#include +#include + +// self +#include "fcitxqtkeyboardlayout.h" + +const QString& FcitxQtKeyboardLayout::layout() const +{ + return m_layout; +} +const QString& FcitxQtKeyboardLayout::langCode() const +{ + return m_langCode; +} +const QString& FcitxQtKeyboardLayout::name() const +{ + return m_name; +} + +const QString& FcitxQtKeyboardLayout::variant() const +{ + return m_variant; +} + +void FcitxQtKeyboardLayout::setLayout(const QString& layout) +{ + m_layout = layout; +} + +void FcitxQtKeyboardLayout::setLangCode(const QString& lang) +{ + m_langCode = lang; +} + +void FcitxQtKeyboardLayout::setName(const QString& name) +{ + m_name = name; +} + +void FcitxQtKeyboardLayout::setVariant(const QString& variant) +{ + m_variant = variant; +} + +void FcitxQtKeyboardLayout::registerMetaType() +{ + qRegisterMetaType("FcitxQtKeyboardLayout"); + qDBusRegisterMetaType(); + qRegisterMetaType("FcitxQtKeyboardLayoutList"); + qDBusRegisterMetaType(); +} + +FCITXQTDBUSADDONS_EXPORT +QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtKeyboardLayout& layout) +{ + argument.beginStructure(); + argument << layout.layout(); + argument << layout.variant(); + argument << layout.name(); + argument << layout.langCode(); + argument.endStructure(); + return argument; +} + +FCITXQTDBUSADDONS_EXPORT +const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtKeyboardLayout& layout) +{ + QString l; + QString variant; + QString name; + QString langCode; + argument.beginStructure(); + argument >> l >> variant >> name >> langCode; + argument.endStructure(); + layout.setLayout(l); + layout.setVariant(variant); + layout.setName(name); + layout.setLangCode(langCode); + return argument; +} diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.h new file mode 100644 index 000000000..d33438dce --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.h @@ -0,0 +1,58 @@ +/*************************************************************************** + * Copyright (C) 2011~2012 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef FCITX_QT_KEYBOARD_LAYOUT_H +#define FCITX_QT_KEYBOARD_LAYOUT_H + +#include "fcitxqtdbusaddons_export.h" + +// Qt +#include +#include +#include + +class FCITXQTDBUSADDONS_EXPORT FcitxQtKeyboardLayout +{ +public: + const QString& layout() const; + const QString& variant() const; + const QString& name() const; + const QString& langCode() const; + void setLayout(const QString& layout); + void setLangCode(const QString& lang); + void setName(const QString& name); + void setVariant(const QString& variant); + + static void registerMetaType(); +private: + QString m_layout; + QString m_variant; + QString m_name; + QString m_langCode; +}; + +typedef QList FcitxQtKeyboardLayoutList; + +QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtKeyboardLayout& l); +const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtKeyboardLayout& l); + +Q_DECLARE_METATYPE(FcitxQtKeyboardLayout) +Q_DECLARE_METATYPE(FcitxQtKeyboardLayoutList) + +#endif diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.cpp new file mode 100644 index 000000000..7523a9206 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.cpp @@ -0,0 +1,26 @@ +/* + * This file was generated by qdbusxml2cpp version 0.8 + * Command line was: qdbusxml2cpp -N -p fcitxqtkeyboardproxy -c FcitxQtKeyboardProxy interfaces/org.fcitx.Fcitx.Keyboard.xml -i fcitxqtkeyboardlayout.h -i fcitxqt_export.h + * + * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). + * + * This is an auto-generated file. + * This file may have been hand-edited. Look for HAND-EDIT comments + * before re-generating it. + */ + +#include "fcitxqtkeyboardproxy.h" + +/* + * Implementation of interface class FcitxQtKeyboardProxy + */ + +FcitxQtKeyboardProxy::FcitxQtKeyboardProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent) + : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent) +{ +} + +FcitxQtKeyboardProxy::~FcitxQtKeyboardProxy() +{ +} + diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.h new file mode 100644 index 000000000..42a6561f3 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.h @@ -0,0 +1,74 @@ +/* + * This file was generated by qdbusxml2cpp version 0.8 + * Command line was: qdbusxml2cpp -N -p fcitxqtkeyboardproxy -c FcitxQtKeyboardProxy interfaces/org.fcitx.Fcitx.Keyboard.xml -i fcitxqtkeyboardlayout.h -i fcitxqt_export.h + * + * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). + * + * This is an auto-generated file. + * Do not edit! All changes made to it will be lost. + */ + +#ifndef FCITXQTKEYBOARDPROXY_H_1409252990 +#define FCITXQTKEYBOARDPROXY_H_1409252990 + +#include +#include +#include +#include +#include +#include +#include +#include +#include "fcitxqtkeyboardlayout.h" +#include "fcitxqtdbusaddons_export.h" + +/* + * Proxy class for interface org.fcitx.Fcitx.Keyboard + */ +class FCITXQTDBUSADDONS_EXPORT FcitxQtKeyboardProxy: public QDBusAbstractInterface +{ + Q_OBJECT +public: + static inline const char *staticInterfaceName() + { return "org.fcitx.Fcitx.Keyboard"; } + +public: + FcitxQtKeyboardProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0); + + ~FcitxQtKeyboardProxy(); + +public Q_SLOTS: // METHODS + inline QDBusPendingReply GetLayoutForIM(const QString &im) + { + QList argumentList; + argumentList << QVariant::fromValue(im); + return asyncCallWithArgumentList(QLatin1String("GetLayoutForIM"), argumentList); + } + inline QDBusReply GetLayoutForIM(const QString &im, QString &variant) + { + QList argumentList; + argumentList << QVariant::fromValue(im); + QDBusMessage reply = callWithArgumentList(QDBus::Block, QLatin1String("GetLayoutForIM"), argumentList); + if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 2) { + variant = qdbus_cast(reply.arguments().at(1)); + } + return reply; + } + + inline QDBusPendingReply GetLayouts() + { + QList argumentList; + return asyncCallWithArgumentList(QLatin1String("GetLayouts"), argumentList); + } + + inline QDBusPendingReply<> SetLayoutForIM(const QString &im, const QString &layout, const QString &variant) + { + QList argumentList; + argumentList << QVariant::fromValue(im) << QVariant::fromValue(layout) << QVariant::fromValue(variant); + return asyncCallWithArgumentList(QLatin1String("SetLayoutForIM"), argumentList); + } + +Q_SIGNALS: // SIGNALS +}; + +#endif diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputContext.xml b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputContext.xml new file mode 100644 index 000000000..1423d69ac --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputContext.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputMethod.xml b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputMethod.xml new file mode 100644 index 000000000..00dc20ab7 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputMethod.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.Keyboard.xml b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.Keyboard.xml new file mode 100644 index 000000000..28ffa538f --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.Keyboard.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keydata.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keydata.h new file mode 100644 index 000000000..5cee56558 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keydata.h @@ -0,0 +1,1612 @@ +/*************************************************************************** + * Copyright (C) 2012~2013 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef KEYDATA_H +#define KEYDATA_H + +struct _FcitxKeySymToUnicode{ + uint16_t keysym; + uint16_t ucs; +}; + +struct _FcitxUnicodeToKeySym { + uint16_t keysym; + uint16_t ucs; +}; + +static const struct _FcitxKeySymToUnicode gdk_keysym_to_unicode_tab[] = { + { 0x01a1, 0x0104 }, /* Aogonek Ą LATIN CAPITAL LETTER A WITH OGONEK */ + { 0x01a2, 0x02d8 }, /* breve ˘ BREVE */ + { 0x01a3, 0x0141 }, /* Lstroke Ł LATIN CAPITAL LETTER L WITH STROKE */ + { 0x01a5, 0x013d }, /* Lcaron Ľ LATIN CAPITAL LETTER L WITH CARON */ + { 0x01a6, 0x015a }, /* Sacute Ś LATIN CAPITAL LETTER S WITH ACUTE */ + { 0x01a9, 0x0160 }, /* Scaron Š LATIN CAPITAL LETTER S WITH CARON */ + { 0x01aa, 0x015e }, /* Scedilla Ş LATIN CAPITAL LETTER S WITH CEDILLA */ + { 0x01ab, 0x0164 }, /* Tcaron Ť LATIN CAPITAL LETTER T WITH CARON */ + { 0x01ac, 0x0179 }, /* Zacute Ź LATIN CAPITAL LETTER Z WITH ACUTE */ + { 0x01ae, 0x017d }, /* Zcaron Ž LATIN CAPITAL LETTER Z WITH CARON */ + { 0x01af, 0x017b }, /* Zabovedot Ż LATIN CAPITAL LETTER Z WITH DOT ABOVE */ + { 0x01b1, 0x0105 }, /* aogonek ą LATIN SMALL LETTER A WITH OGONEK */ + { 0x01b2, 0x02db }, /* ogonek ˛ OGONEK */ + { 0x01b3, 0x0142 }, /* lstroke ł LATIN SMALL LETTER L WITH STROKE */ + { 0x01b5, 0x013e }, /* lcaron ľ LATIN SMALL LETTER L WITH CARON */ + { 0x01b6, 0x015b }, /* sacute ś LATIN SMALL LETTER S WITH ACUTE */ + { 0x01b7, 0x02c7 }, /* caron ˇ CARON */ + { 0x01b9, 0x0161 }, /* scaron š LATIN SMALL LETTER S WITH CARON */ + { 0x01ba, 0x015f }, /* scedilla ş LATIN SMALL LETTER S WITH CEDILLA */ + { 0x01bb, 0x0165 }, /* tcaron ť LATIN SMALL LETTER T WITH CARON */ + { 0x01bc, 0x017a }, /* zacute ź LATIN SMALL LETTER Z WITH ACUTE */ + { 0x01bd, 0x02dd }, /* doubleacute ˝ DOUBLE ACUTE ACCENT */ + { 0x01be, 0x017e }, /* zcaron ž LATIN SMALL LETTER Z WITH CARON */ + { 0x01bf, 0x017c }, /* zabovedot ż LATIN SMALL LETTER Z WITH DOT ABOVE */ + { 0x01c0, 0x0154 }, /* Racute Ŕ LATIN CAPITAL LETTER R WITH ACUTE */ + { 0x01c3, 0x0102 }, /* Abreve Ă LATIN CAPITAL LETTER A WITH BREVE */ + { 0x01c5, 0x0139 }, /* Lacute Ĺ LATIN CAPITAL LETTER L WITH ACUTE */ + { 0x01c6, 0x0106 }, /* Cacute Ć LATIN CAPITAL LETTER C WITH ACUTE */ + { 0x01c8, 0x010c }, /* Ccaron Č LATIN CAPITAL LETTER C WITH CARON */ + { 0x01ca, 0x0118 }, /* Eogonek Ę LATIN CAPITAL LETTER E WITH OGONEK */ + { 0x01cc, 0x011a }, /* Ecaron Ě LATIN CAPITAL LETTER E WITH CARON */ + { 0x01cf, 0x010e }, /* Dcaron Ď LATIN CAPITAL LETTER D WITH CARON */ + { 0x01d0, 0x0110 }, /* Dstroke Đ LATIN CAPITAL LETTER D WITH STROKE */ + { 0x01d1, 0x0143 }, /* Nacute Ń LATIN CAPITAL LETTER N WITH ACUTE */ + { 0x01d2, 0x0147 }, /* Ncaron Ň LATIN CAPITAL LETTER N WITH CARON */ + { 0x01d5, 0x0150 }, /* Odoubleacute Ő LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */ + { 0x01d8, 0x0158 }, /* Rcaron Ř LATIN CAPITAL LETTER R WITH CARON */ + { 0x01d9, 0x016e }, /* Uring Ů LATIN CAPITAL LETTER U WITH RING ABOVE */ + { 0x01db, 0x0170 }, /* Udoubleacute Ű LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */ + { 0x01de, 0x0162 }, /* Tcedilla Ţ LATIN CAPITAL LETTER T WITH CEDILLA */ + { 0x01e0, 0x0155 }, /* racute ŕ LATIN SMALL LETTER R WITH ACUTE */ + { 0x01e3, 0x0103 }, /* abreve ă LATIN SMALL LETTER A WITH BREVE */ + { 0x01e5, 0x013a }, /* lacute ĺ LATIN SMALL LETTER L WITH ACUTE */ + { 0x01e6, 0x0107 }, /* cacute ć LATIN SMALL LETTER C WITH ACUTE */ + { 0x01e8, 0x010d }, /* ccaron č LATIN SMALL LETTER C WITH CARON */ + { 0x01ea, 0x0119 }, /* eogonek ę LATIN SMALL LETTER E WITH OGONEK */ + { 0x01ec, 0x011b }, /* ecaron ě LATIN SMALL LETTER E WITH CARON */ + { 0x01ef, 0x010f }, /* dcaron ď LATIN SMALL LETTER D WITH CARON */ + { 0x01f0, 0x0111 }, /* dstroke đ LATIN SMALL LETTER D WITH STROKE */ + { 0x01f1, 0x0144 }, /* nacute ń LATIN SMALL LETTER N WITH ACUTE */ + { 0x01f2, 0x0148 }, /* ncaron ň LATIN SMALL LETTER N WITH CARON */ + { 0x01f5, 0x0151 }, /* odoubleacute ő LATIN SMALL LETTER O WITH DOUBLE ACUTE */ + { 0x01f8, 0x0159 }, /* rcaron ř LATIN SMALL LETTER R WITH CARON */ + { 0x01f9, 0x016f }, /* uring ů LATIN SMALL LETTER U WITH RING ABOVE */ + { 0x01fb, 0x0171 }, /* udoubleacute ű LATIN SMALL LETTER U WITH DOUBLE ACUTE */ + { 0x01fe, 0x0163 }, /* tcedilla ţ LATIN SMALL LETTER T WITH CEDILLA */ + { 0x01ff, 0x02d9 }, /* abovedot ˙ DOT ABOVE */ + { 0x02a1, 0x0126 }, /* Hstroke Ħ LATIN CAPITAL LETTER H WITH STROKE */ + { 0x02a6, 0x0124 }, /* Hcircumflex Ĥ LATIN CAPITAL LETTER H WITH CIRCUMFLEX */ + { 0x02a9, 0x0130 }, /* Iabovedot İ LATIN CAPITAL LETTER I WITH DOT ABOVE */ + { 0x02ab, 0x011e }, /* Gbreve Ğ LATIN CAPITAL LETTER G WITH BREVE */ + { 0x02ac, 0x0134 }, /* Jcircumflex Ĵ LATIN CAPITAL LETTER J WITH CIRCUMFLEX */ + { 0x02b1, 0x0127 }, /* hstroke ħ LATIN SMALL LETTER H WITH STROKE */ + { 0x02b6, 0x0125 }, /* hcircumflex ĥ LATIN SMALL LETTER H WITH CIRCUMFLEX */ + { 0x02b9, 0x0131 }, /* idotless ı LATIN SMALL LETTER DOTLESS I */ + { 0x02bb, 0x011f }, /* gbreve ğ LATIN SMALL LETTER G WITH BREVE */ + { 0x02bc, 0x0135 }, /* jcircumflex ĵ LATIN SMALL LETTER J WITH CIRCUMFLEX */ + { 0x02c5, 0x010a }, /* Cabovedot Ċ LATIN CAPITAL LETTER C WITH DOT ABOVE */ + { 0x02c6, 0x0108 }, /* Ccircumflex Ĉ LATIN CAPITAL LETTER C WITH CIRCUMFLEX */ + { 0x02d5, 0x0120 }, /* Gabovedot Ġ LATIN CAPITAL LETTER G WITH DOT ABOVE */ + { 0x02d8, 0x011c }, /* Gcircumflex Ĝ LATIN CAPITAL LETTER G WITH CIRCUMFLEX */ + { 0x02dd, 0x016c }, /* Ubreve Ŭ LATIN CAPITAL LETTER U WITH BREVE */ + { 0x02de, 0x015c }, /* Scircumflex Ŝ LATIN CAPITAL LETTER S WITH CIRCUMFLEX */ + { 0x02e5, 0x010b }, /* cabovedot ċ LATIN SMALL LETTER C WITH DOT ABOVE */ + { 0x02e6, 0x0109 }, /* ccircumflex ĉ LATIN SMALL LETTER C WITH CIRCUMFLEX */ + { 0x02f5, 0x0121 }, /* gabovedot ġ LATIN SMALL LETTER G WITH DOT ABOVE */ + { 0x02f8, 0x011d }, /* gcircumflex ĝ LATIN SMALL LETTER G WITH CIRCUMFLEX */ + { 0x02fd, 0x016d }, /* ubreve ŭ LATIN SMALL LETTER U WITH BREVE */ + { 0x02fe, 0x015d }, /* scircumflex ŝ LATIN SMALL LETTER S WITH CIRCUMFLEX */ + { 0x03a2, 0x0138 }, /* kra ĸ LATIN SMALL LETTER KRA */ + { 0x03a3, 0x0156 }, /* Rcedilla Ŗ LATIN CAPITAL LETTER R WITH CEDILLA */ + { 0x03a5, 0x0128 }, /* Itilde Ĩ LATIN CAPITAL LETTER I WITH TILDE */ + { 0x03a6, 0x013b }, /* Lcedilla Ļ LATIN CAPITAL LETTER L WITH CEDILLA */ + { 0x03aa, 0x0112 }, /* Emacron Ē LATIN CAPITAL LETTER E WITH MACRON */ + { 0x03ab, 0x0122 }, /* Gcedilla Ģ LATIN CAPITAL LETTER G WITH CEDILLA */ + { 0x03ac, 0x0166 }, /* Tslash Ŧ LATIN CAPITAL LETTER T WITH STROKE */ + { 0x03b3, 0x0157 }, /* rcedilla ŗ LATIN SMALL LETTER R WITH CEDILLA */ + { 0x03b5, 0x0129 }, /* itilde ĩ LATIN SMALL LETTER I WITH TILDE */ + { 0x03b6, 0x013c }, /* lcedilla ļ LATIN SMALL LETTER L WITH CEDILLA */ + { 0x03ba, 0x0113 }, /* emacron ē LATIN SMALL LETTER E WITH MACRON */ + { 0x03bb, 0x0123 }, /* gcedilla ģ LATIN SMALL LETTER G WITH CEDILLA */ + { 0x03bc, 0x0167 }, /* tslash ŧ LATIN SMALL LETTER T WITH STROKE */ + { 0x03bd, 0x014a }, /* ENG Ŋ LATIN CAPITAL LETTER ENG */ + { 0x03bf, 0x014b }, /* eng ŋ LATIN SMALL LETTER ENG */ + { 0x03c0, 0x0100 }, /* Amacron Ā LATIN CAPITAL LETTER A WITH MACRON */ + { 0x03c7, 0x012e }, /* Iogonek Į LATIN CAPITAL LETTER I WITH OGONEK */ + { 0x03cc, 0x0116 }, /* Eabovedot Ė LATIN CAPITAL LETTER E WITH DOT ABOVE */ + { 0x03cf, 0x012a }, /* Imacron Ī LATIN CAPITAL LETTER I WITH MACRON */ + { 0x03d1, 0x0145 }, /* Ncedilla Ņ LATIN CAPITAL LETTER N WITH CEDILLA */ + { 0x03d2, 0x014c }, /* Omacron Ō LATIN CAPITAL LETTER O WITH MACRON */ + { 0x03d3, 0x0136 }, /* Kcedilla Ķ LATIN CAPITAL LETTER K WITH CEDILLA */ + { 0x03d9, 0x0172 }, /* Uogonek Ų LATIN CAPITAL LETTER U WITH OGONEK */ + { 0x03dd, 0x0168 }, /* Utilde Ũ LATIN CAPITAL LETTER U WITH TILDE */ + { 0x03de, 0x016a }, /* Umacron Ū LATIN CAPITAL LETTER U WITH MACRON */ + { 0x03e0, 0x0101 }, /* amacron ā LATIN SMALL LETTER A WITH MACRON */ + { 0x03e7, 0x012f }, /* iogonek į LATIN SMALL LETTER I WITH OGONEK */ + { 0x03ec, 0x0117 }, /* eabovedot ė LATIN SMALL LETTER E WITH DOT ABOVE */ + { 0x03ef, 0x012b }, /* imacron ī LATIN SMALL LETTER I WITH MACRON */ + { 0x03f1, 0x0146 }, /* ncedilla ņ LATIN SMALL LETTER N WITH CEDILLA */ + { 0x03f2, 0x014d }, /* omacron ō LATIN SMALL LETTER O WITH MACRON */ + { 0x03f3, 0x0137 }, /* kcedilla ķ LATIN SMALL LETTER K WITH CEDILLA */ + { 0x03f9, 0x0173 }, /* uogonek ų LATIN SMALL LETTER U WITH OGONEK */ + { 0x03fd, 0x0169 }, /* utilde ũ LATIN SMALL LETTER U WITH TILDE */ + { 0x03fe, 0x016b }, /* umacron ū LATIN SMALL LETTER U WITH MACRON */ + { 0x047e, 0x203e }, /* overline ‾ OVERLINE */ + { 0x04a1, 0x3002 }, /* kana_fullstop 。 IDEOGRAPHIC FULL STOP */ + { 0x04a2, 0x300c }, /* kana_openingbracket 「 LEFT CORNER BRACKET */ + { 0x04a3, 0x300d }, /* kana_closingbracket 」 RIGHT CORNER BRACKET */ + { 0x04a4, 0x3001 }, /* kana_comma 、 IDEOGRAPHIC COMMA */ + { 0x04a5, 0x30fb }, /* kana_conjunctive ・ KATAKANA MIDDLE DOT */ + { 0x04a6, 0x30f2 }, /* kana_WO ヲ KATAKANA LETTER WO */ + { 0x04a7, 0x30a1 }, /* kana_a ァ KATAKANA LETTER SMALL A */ + { 0x04a8, 0x30a3 }, /* kana_i ィ KATAKANA LETTER SMALL I */ + { 0x04a9, 0x30a5 }, /* kana_u ゥ KATAKANA LETTER SMALL U */ + { 0x04aa, 0x30a7 }, /* kana_e ェ KATAKANA LETTER SMALL E */ + { 0x04ab, 0x30a9 }, /* kana_o ォ KATAKANA LETTER SMALL O */ + { 0x04ac, 0x30e3 }, /* kana_ya ャ KATAKANA LETTER SMALL YA */ + { 0x04ad, 0x30e5 }, /* kana_yu ュ KATAKANA LETTER SMALL YU */ + { 0x04ae, 0x30e7 }, /* kana_yo ョ KATAKANA LETTER SMALL YO */ + { 0x04af, 0x30c3 }, /* kana_tsu ッ KATAKANA LETTER SMALL TU */ + { 0x04b0, 0x30fc }, /* prolongedsound ー KATAKANA-HIRAGANA PROLONGED SOUND MARK */ + { 0x04b1, 0x30a2 }, /* kana_A ア KATAKANA LETTER A */ + { 0x04b2, 0x30a4 }, /* kana_I イ KATAKANA LETTER I */ + { 0x04b3, 0x30a6 }, /* kana_U ウ KATAKANA LETTER U */ + { 0x04b4, 0x30a8 }, /* kana_E エ KATAKANA LETTER E */ + { 0x04b5, 0x30aa }, /* kana_O オ KATAKANA LETTER O */ + { 0x04b6, 0x30ab }, /* kana_KA カ KATAKANA LETTER KA */ + { 0x04b7, 0x30ad }, /* kana_KI キ KATAKANA LETTER KI */ + { 0x04b8, 0x30af }, /* kana_KU ク KATAKANA LETTER KU */ + { 0x04b9, 0x30b1 }, /* kana_KE ケ KATAKANA LETTER KE */ + { 0x04ba, 0x30b3 }, /* kana_KO コ KATAKANA LETTER KO */ + { 0x04bb, 0x30b5 }, /* kana_SA サ KATAKANA LETTER SA */ + { 0x04bc, 0x30b7 }, /* kana_SHI シ KATAKANA LETTER SI */ + { 0x04bd, 0x30b9 }, /* kana_SU ス KATAKANA LETTER SU */ + { 0x04be, 0x30bb }, /* kana_SE セ KATAKANA LETTER SE */ + { 0x04bf, 0x30bd }, /* kana_SO ソ KATAKANA LETTER SO */ + { 0x04c0, 0x30bf }, /* kana_TA タ KATAKANA LETTER TA */ + { 0x04c1, 0x30c1 }, /* kana_CHI チ KATAKANA LETTER TI */ + { 0x04c2, 0x30c4 }, /* kana_TSU ツ KATAKANA LETTER TU */ + { 0x04c3, 0x30c6 }, /* kana_TE テ KATAKANA LETTER TE */ + { 0x04c4, 0x30c8 }, /* kana_TO ト KATAKANA LETTER TO */ + { 0x04c5, 0x30ca }, /* kana_NA ナ KATAKANA LETTER NA */ + { 0x04c6, 0x30cb }, /* kana_NI ニ KATAKANA LETTER NI */ + { 0x04c7, 0x30cc }, /* kana_NU ヌ KATAKANA LETTER NU */ + { 0x04c8, 0x30cd }, /* kana_NE ネ KATAKANA LETTER NE */ + { 0x04c9, 0x30ce }, /* kana_NO ノ KATAKANA LETTER NO */ + { 0x04ca, 0x30cf }, /* kana_HA ハ KATAKANA LETTER HA */ + { 0x04cb, 0x30d2 }, /* kana_HI ヒ KATAKANA LETTER HI */ + { 0x04cc, 0x30d5 }, /* kana_FU フ KATAKANA LETTER HU */ + { 0x04cd, 0x30d8 }, /* kana_HE ヘ KATAKANA LETTER HE */ + { 0x04ce, 0x30db }, /* kana_HO ホ KATAKANA LETTER HO */ + { 0x04cf, 0x30de }, /* kana_MA マ KATAKANA LETTER MA */ + { 0x04d0, 0x30df }, /* kana_MI ミ KATAKANA LETTER MI */ + { 0x04d1, 0x30e0 }, /* kana_MU ム KATAKANA LETTER MU */ + { 0x04d2, 0x30e1 }, /* kana_ME メ KATAKANA LETTER ME */ + { 0x04d3, 0x30e2 }, /* kana_MO モ KATAKANA LETTER MO */ + { 0x04d4, 0x30e4 }, /* kana_YA ヤ KATAKANA LETTER YA */ + { 0x04d5, 0x30e6 }, /* kana_YU ユ KATAKANA LETTER YU */ + { 0x04d6, 0x30e8 }, /* kana_YO ヨ KATAKANA LETTER YO */ + { 0x04d7, 0x30e9 }, /* kana_RA ラ KATAKANA LETTER RA */ + { 0x04d8, 0x30ea }, /* kana_RI リ KATAKANA LETTER RI */ + { 0x04d9, 0x30eb }, /* kana_RU ル KATAKANA LETTER RU */ + { 0x04da, 0x30ec }, /* kana_RE レ KATAKANA LETTER RE */ + { 0x04db, 0x30ed }, /* kana_RO ロ KATAKANA LETTER RO */ + { 0x04dc, 0x30ef }, /* kana_WA ワ KATAKANA LETTER WA */ + { 0x04dd, 0x30f3 }, /* kana_N ン KATAKANA LETTER N */ + { 0x04de, 0x309b }, /* voicedsound ゛ KATAKANA-HIRAGANA VOICED SOUND MARK */ + { 0x04df, 0x309c }, /* semivoicedsound ゜ KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */ + { 0x05ac, 0x060c }, /* Arabic_comma ، ARABIC COMMA */ + { 0x05bb, 0x061b }, /* Arabic_semicolon ؛ ARABIC SEMICOLON */ + { 0x05bf, 0x061f }, /* Arabic_question_mark ؟ ARABIC QUESTION MARK */ + { 0x05c1, 0x0621 }, /* Arabic_hamza ء ARABIC LETTER HAMZA */ + { 0x05c2, 0x0622 }, /* Arabic_maddaonalef آ ARABIC LETTER ALEF WITH MADDA ABOVE */ + { 0x05c3, 0x0623 }, /* Arabic_hamzaonalef أ ARABIC LETTER ALEF WITH HAMZA ABOVE */ + { 0x05c4, 0x0624 }, /* Arabic_hamzaonwaw ؤ ARABIC LETTER WAW WITH HAMZA ABOVE */ + { 0x05c5, 0x0625 }, /* Arabic_hamzaunderalef إ ARABIC LETTER ALEF WITH HAMZA BELOW */ + { 0x05c6, 0x0626 }, /* Arabic_hamzaonyeh ئ ARABIC LETTER YEH WITH HAMZA ABOVE */ + { 0x05c7, 0x0627 }, /* Arabic_alef ا ARABIC LETTER ALEF */ + { 0x05c8, 0x0628 }, /* Arabic_beh ب ARABIC LETTER BEH */ + { 0x05c9, 0x0629 }, /* Arabic_tehmarbuta ة ARABIC LETTER TEH MARBUTA */ + { 0x05ca, 0x062a }, /* Arabic_teh ت ARABIC LETTER TEH */ + { 0x05cb, 0x062b }, /* Arabic_theh ث ARABIC LETTER THEH */ + { 0x05cc, 0x062c }, /* Arabic_jeem ج ARABIC LETTER JEEM */ + { 0x05cd, 0x062d }, /* Arabic_hah ح ARABIC LETTER HAH */ + { 0x05ce, 0x062e }, /* Arabic_khah خ ARABIC LETTER KHAH */ + { 0x05cf, 0x062f }, /* Arabic_dal د ARABIC LETTER DAL */ + { 0x05d0, 0x0630 }, /* Arabic_thal ذ ARABIC LETTER THAL */ + { 0x05d1, 0x0631 }, /* Arabic_ra ر ARABIC LETTER REH */ + { 0x05d2, 0x0632 }, /* Arabic_zain ز ARABIC LETTER ZAIN */ + { 0x05d3, 0x0633 }, /* Arabic_seen س ARABIC LETTER SEEN */ + { 0x05d4, 0x0634 }, /* Arabic_sheen ش ARABIC LETTER SHEEN */ + { 0x05d5, 0x0635 }, /* Arabic_sad ص ARABIC LETTER SAD */ + { 0x05d6, 0x0636 }, /* Arabic_dad ض ARABIC LETTER DAD */ + { 0x05d7, 0x0637 }, /* Arabic_tah ط ARABIC LETTER TAH */ + { 0x05d8, 0x0638 }, /* Arabic_zah ظ ARABIC LETTER ZAH */ + { 0x05d9, 0x0639 }, /* Arabic_ain ع ARABIC LETTER AIN */ + { 0x05da, 0x063a }, /* Arabic_ghain غ ARABIC LETTER GHAIN */ + { 0x05e0, 0x0640 }, /* Arabic_tatweel ـ ARABIC TATWEEL */ + { 0x05e1, 0x0641 }, /* Arabic_feh ف ARABIC LETTER FEH */ + { 0x05e2, 0x0642 }, /* Arabic_qaf ق ARABIC LETTER QAF */ + { 0x05e3, 0x0643 }, /* Arabic_kaf ك ARABIC LETTER KAF */ + { 0x05e4, 0x0644 }, /* Arabic_lam ل ARABIC LETTER LAM */ + { 0x05e5, 0x0645 }, /* Arabic_meem م ARABIC LETTER MEEM */ + { 0x05e6, 0x0646 }, /* Arabic_noon ن ARABIC LETTER NOON */ + { 0x05e7, 0x0647 }, /* Arabic_ha ه ARABIC LETTER HEH */ + { 0x05e8, 0x0648 }, /* Arabic_waw و ARABIC LETTER WAW */ + { 0x05e9, 0x0649 }, /* Arabic_alefmaksura ى ARABIC LETTER ALEF MAKSURA */ + { 0x05ea, 0x064a }, /* Arabic_yeh ي ARABIC LETTER YEH */ + { 0x05eb, 0x064b }, /* Arabic_fathatan ً ARABIC FATHATAN */ + { 0x05ec, 0x064c }, /* Arabic_dammatan ٌ ARABIC DAMMATAN */ + { 0x05ed, 0x064d }, /* Arabic_kasratan ٍ ARABIC KASRATAN */ + { 0x05ee, 0x064e }, /* Arabic_fatha َ ARABIC FATHA */ + { 0x05ef, 0x064f }, /* Arabic_damma ُ ARABIC DAMMA */ + { 0x05f0, 0x0650 }, /* Arabic_kasra ِ ARABIC KASRA */ + { 0x05f1, 0x0651 }, /* Arabic_shadda ّ ARABIC SHADDA */ + { 0x05f2, 0x0652 }, /* Arabic_sukun ْ ARABIC SUKUN */ + { 0x06a1, 0x0452 }, /* Serbian_dje ђ CYRILLIC SMALL LETTER DJE */ + { 0x06a2, 0x0453 }, /* Macedonia_gje ѓ CYRILLIC SMALL LETTER GJE */ + { 0x06a3, 0x0451 }, /* Cyrillic_io ё CYRILLIC SMALL LETTER IO */ + { 0x06a4, 0x0454 }, /* Ukrainian_ie є CYRILLIC SMALL LETTER UKRAINIAN IE */ + { 0x06a5, 0x0455 }, /* Macedonia_dse ѕ CYRILLIC SMALL LETTER DZE */ + { 0x06a6, 0x0456 }, /* Ukrainian_i і CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */ + { 0x06a7, 0x0457 }, /* Ukrainian_yi ї CYRILLIC SMALL LETTER YI */ + { 0x06a8, 0x0458 }, /* Cyrillic_je ј CYRILLIC SMALL LETTER JE */ + { 0x06a9, 0x0459 }, /* Cyrillic_lje љ CYRILLIC SMALL LETTER LJE */ + { 0x06aa, 0x045a }, /* Cyrillic_nje њ CYRILLIC SMALL LETTER NJE */ + { 0x06ab, 0x045b }, /* Serbian_tshe ћ CYRILLIC SMALL LETTER TSHE */ + { 0x06ac, 0x045c }, /* Macedonia_kje ќ CYRILLIC SMALL LETTER KJE */ + { 0x06ad, 0x0491 }, /* Ukrainian_ghe_with_upturn ґ CYRILLIC SMALL LETTER GHE WITH UPTURN */ + { 0x06ae, 0x045e }, /* Byelorussian_shortu ў CYRILLIC SMALL LETTER SHORT U */ + { 0x06af, 0x045f }, /* Cyrillic_dzhe џ CYRILLIC SMALL LETTER DZHE */ + { 0x06b0, 0x2116 }, /* numerosign № NUMERO SIGN */ + { 0x06b1, 0x0402 }, /* Serbian_DJE Ђ CYRILLIC CAPITAL LETTER DJE */ + { 0x06b2, 0x0403 }, /* Macedonia_GJE Ѓ CYRILLIC CAPITAL LETTER GJE */ + { 0x06b3, 0x0401 }, /* Cyrillic_IO Ё CYRILLIC CAPITAL LETTER IO */ + { 0x06b4, 0x0404 }, /* Ukrainian_IE Є CYRILLIC CAPITAL LETTER UKRAINIAN IE */ + { 0x06b5, 0x0405 }, /* Macedonia_DSE Ѕ CYRILLIC CAPITAL LETTER DZE */ + { 0x06b6, 0x0406 }, /* Ukrainian_I І CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */ + { 0x06b7, 0x0407 }, /* Ukrainian_YI Ї CYRILLIC CAPITAL LETTER YI */ + { 0x06b8, 0x0408 }, /* Cyrillic_JE Ј CYRILLIC CAPITAL LETTER JE */ + { 0x06b9, 0x0409 }, /* Cyrillic_LJE Љ CYRILLIC CAPITAL LETTER LJE */ + { 0x06ba, 0x040a }, /* Cyrillic_NJE Њ CYRILLIC CAPITAL LETTER NJE */ + { 0x06bb, 0x040b }, /* Serbian_TSHE Ћ CYRILLIC CAPITAL LETTER TSHE */ + { 0x06bc, 0x040c }, /* Macedonia_KJE Ќ CYRILLIC CAPITAL LETTER KJE */ + { 0x06bd, 0x0490 }, /* Ukrainian_GHE_WITH_UPTURN Ґ CYRILLIC CAPITAL LETTER GHE WITH UPTURN */ + { 0x06be, 0x040e }, /* Byelorussian_SHORTU Ў CYRILLIC CAPITAL LETTER SHORT U */ + { 0x06bf, 0x040f }, /* Cyrillic_DZHE Џ CYRILLIC CAPITAL LETTER DZHE */ + { 0x06c0, 0x044e }, /* Cyrillic_yu ю CYRILLIC SMALL LETTER YU */ + { 0x06c1, 0x0430 }, /* Cyrillic_a а CYRILLIC SMALL LETTER A */ + { 0x06c2, 0x0431 }, /* Cyrillic_be б CYRILLIC SMALL LETTER BE */ + { 0x06c3, 0x0446 }, /* Cyrillic_tse ц CYRILLIC SMALL LETTER TSE */ + { 0x06c4, 0x0434 }, /* Cyrillic_de д CYRILLIC SMALL LETTER DE */ + { 0x06c5, 0x0435 }, /* Cyrillic_ie е CYRILLIC SMALL LETTER IE */ + { 0x06c6, 0x0444 }, /* Cyrillic_ef ф CYRILLIC SMALL LETTER EF */ + { 0x06c7, 0x0433 }, /* Cyrillic_ghe г CYRILLIC SMALL LETTER GHE */ + { 0x06c8, 0x0445 }, /* Cyrillic_ha х CYRILLIC SMALL LETTER HA */ + { 0x06c9, 0x0438 }, /* Cyrillic_i и CYRILLIC SMALL LETTER I */ + { 0x06ca, 0x0439 }, /* Cyrillic_shorti й CYRILLIC SMALL LETTER SHORT I */ + { 0x06cb, 0x043a }, /* Cyrillic_ka к CYRILLIC SMALL LETTER KA */ + { 0x06cc, 0x043b }, /* Cyrillic_el л CYRILLIC SMALL LETTER EL */ + { 0x06cd, 0x043c }, /* Cyrillic_em м CYRILLIC SMALL LETTER EM */ + { 0x06ce, 0x043d }, /* Cyrillic_en н CYRILLIC SMALL LETTER EN */ + { 0x06cf, 0x043e }, /* Cyrillic_o о CYRILLIC SMALL LETTER O */ + { 0x06d0, 0x043f }, /* Cyrillic_pe п CYRILLIC SMALL LETTER PE */ + { 0x06d1, 0x044f }, /* Cyrillic_ya я CYRILLIC SMALL LETTER YA */ + { 0x06d2, 0x0440 }, /* Cyrillic_er р CYRILLIC SMALL LETTER ER */ + { 0x06d3, 0x0441 }, /* Cyrillic_es с CYRILLIC SMALL LETTER ES */ + { 0x06d4, 0x0442 }, /* Cyrillic_te т CYRILLIC SMALL LETTER TE */ + { 0x06d5, 0x0443 }, /* Cyrillic_u у CYRILLIC SMALL LETTER U */ + { 0x06d6, 0x0436 }, /* Cyrillic_zhe ж CYRILLIC SMALL LETTER ZHE */ + { 0x06d7, 0x0432 }, /* Cyrillic_ve в CYRILLIC SMALL LETTER VE */ + { 0x06d8, 0x044c }, /* Cyrillic_softsign ь CYRILLIC SMALL LETTER SOFT SIGN */ + { 0x06d9, 0x044b }, /* Cyrillic_yeru ы CYRILLIC SMALL LETTER YERU */ + { 0x06da, 0x0437 }, /* Cyrillic_ze з CYRILLIC SMALL LETTER ZE */ + { 0x06db, 0x0448 }, /* Cyrillic_sha ш CYRILLIC SMALL LETTER SHA */ + { 0x06dc, 0x044d }, /* Cyrillic_e э CYRILLIC SMALL LETTER E */ + { 0x06dd, 0x0449 }, /* Cyrillic_shcha щ CYRILLIC SMALL LETTER SHCHA */ + { 0x06de, 0x0447 }, /* Cyrillic_che ч CYRILLIC SMALL LETTER CHE */ + { 0x06df, 0x044a }, /* Cyrillic_hardsign ъ CYRILLIC SMALL LETTER HARD SIGN */ + { 0x06e0, 0x042e }, /* Cyrillic_YU Ю CYRILLIC CAPITAL LETTER YU */ + { 0x06e1, 0x0410 }, /* Cyrillic_A А CYRILLIC CAPITAL LETTER A */ + { 0x06e2, 0x0411 }, /* Cyrillic_BE Б CYRILLIC CAPITAL LETTER BE */ + { 0x06e3, 0x0426 }, /* Cyrillic_TSE Ц CYRILLIC CAPITAL LETTER TSE */ + { 0x06e4, 0x0414 }, /* Cyrillic_DE Д CYRILLIC CAPITAL LETTER DE */ + { 0x06e5, 0x0415 }, /* Cyrillic_IE Е CYRILLIC CAPITAL LETTER IE */ + { 0x06e6, 0x0424 }, /* Cyrillic_EF Ф CYRILLIC CAPITAL LETTER EF */ + { 0x06e7, 0x0413 }, /* Cyrillic_GHE Г CYRILLIC CAPITAL LETTER GHE */ + { 0x06e8, 0x0425 }, /* Cyrillic_HA Х CYRILLIC CAPITAL LETTER HA */ + { 0x06e9, 0x0418 }, /* Cyrillic_I И CYRILLIC CAPITAL LETTER I */ + { 0x06ea, 0x0419 }, /* Cyrillic_SHORTI Й CYRILLIC CAPITAL LETTER SHORT I */ + { 0x06eb, 0x041a }, /* Cyrillic_KA К CYRILLIC CAPITAL LETTER KA */ + { 0x06ec, 0x041b }, /* Cyrillic_EL Л CYRILLIC CAPITAL LETTER EL */ + { 0x06ed, 0x041c }, /* Cyrillic_EM М CYRILLIC CAPITAL LETTER EM */ + { 0x06ee, 0x041d }, /* Cyrillic_EN Н CYRILLIC CAPITAL LETTER EN */ + { 0x06ef, 0x041e }, /* Cyrillic_O О CYRILLIC CAPITAL LETTER O */ + { 0x06f0, 0x041f }, /* Cyrillic_PE П CYRILLIC CAPITAL LETTER PE */ + { 0x06f1, 0x042f }, /* Cyrillic_YA Я CYRILLIC CAPITAL LETTER YA */ + { 0x06f2, 0x0420 }, /* Cyrillic_ER Р CYRILLIC CAPITAL LETTER ER */ + { 0x06f3, 0x0421 }, /* Cyrillic_ES С CYRILLIC CAPITAL LETTER ES */ + { 0x06f4, 0x0422 }, /* Cyrillic_TE Т CYRILLIC CAPITAL LETTER TE */ + { 0x06f5, 0x0423 }, /* Cyrillic_U У CYRILLIC CAPITAL LETTER U */ + { 0x06f6, 0x0416 }, /* Cyrillic_ZHE Ж CYRILLIC CAPITAL LETTER ZHE */ + { 0x06f7, 0x0412 }, /* Cyrillic_VE В CYRILLIC CAPITAL LETTER VE */ + { 0x06f8, 0x042c }, /* Cyrillic_SOFTSIGN Ь CYRILLIC CAPITAL LETTER SOFT SIGN */ + { 0x06f9, 0x042b }, /* Cyrillic_YERU Ы CYRILLIC CAPITAL LETTER YERU */ + { 0x06fa, 0x0417 }, /* Cyrillic_ZE З CYRILLIC CAPITAL LETTER ZE */ + { 0x06fb, 0x0428 }, /* Cyrillic_SHA Ш CYRILLIC CAPITAL LETTER SHA */ + { 0x06fc, 0x042d }, /* Cyrillic_E Э CYRILLIC CAPITAL LETTER E */ + { 0x06fd, 0x0429 }, /* Cyrillic_SHCHA Щ CYRILLIC CAPITAL LETTER SHCHA */ + { 0x06fe, 0x0427 }, /* Cyrillic_CHE Ч CYRILLIC CAPITAL LETTER CHE */ + { 0x06ff, 0x042a }, /* Cyrillic_HARDSIGN Ъ CYRILLIC CAPITAL LETTER HARD SIGN */ + { 0x07a1, 0x0386 }, /* Greek_ALPHAaccent Ά GREEK CAPITAL LETTER ALPHA WITH TONOS */ + { 0x07a2, 0x0388 }, /* Greek_EPSILONaccent Έ GREEK CAPITAL LETTER EPSILON WITH TONOS */ + { 0x07a3, 0x0389 }, /* Greek_ETAaccent Ή GREEK CAPITAL LETTER ETA WITH TONOS */ + { 0x07a4, 0x038a }, /* Greek_IOTAaccent Ί GREEK CAPITAL LETTER IOTA WITH TONOS */ + { 0x07a5, 0x03aa }, /* Greek_IOTAdieresis Ϊ GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */ + { 0x07a7, 0x038c }, /* Greek_OMICRONaccent Ό GREEK CAPITAL LETTER OMICRON WITH TONOS */ + { 0x07a8, 0x038e }, /* Greek_UPSILONaccent Ύ GREEK CAPITAL LETTER UPSILON WITH TONOS */ + { 0x07a9, 0x03ab }, /* Greek_UPSILONdieresis Ϋ GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */ + { 0x07ab, 0x038f }, /* Greek_OMEGAaccent Ώ GREEK CAPITAL LETTER OMEGA WITH TONOS */ + { 0x07ae, 0x0385 }, /* Greek_accentdieresis ΅ GREEK DIALYTIKA TONOS */ + { 0x07af, 0x2015 }, /* Greek_horizbar ― HORIZONTAL BAR */ + { 0x07b1, 0x03ac }, /* Greek_alphaaccent ά GREEK SMALL LETTER ALPHA WITH TONOS */ + { 0x07b2, 0x03ad }, /* Greek_epsilonaccent έ GREEK SMALL LETTER EPSILON WITH TONOS */ + { 0x07b3, 0x03ae }, /* Greek_etaaccent ή GREEK SMALL LETTER ETA WITH TONOS */ + { 0x07b4, 0x03af }, /* Greek_iotaaccent ί GREEK SMALL LETTER IOTA WITH TONOS */ + { 0x07b5, 0x03ca }, /* Greek_iotadieresis ϊ GREEK SMALL LETTER IOTA WITH DIALYTIKA */ + { 0x07b6, 0x0390 }, /* Greek_iotaaccentdieresis ΐ GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ + { 0x07b7, 0x03cc }, /* Greek_omicronaccent ό GREEK SMALL LETTER OMICRON WITH TONOS */ + { 0x07b8, 0x03cd }, /* Greek_upsilonaccent ύ GREEK SMALL LETTER UPSILON WITH TONOS */ + { 0x07b9, 0x03cb }, /* Greek_upsilondieresis ϋ GREEK SMALL LETTER UPSILON WITH DIALYTIKA */ + { 0x07ba, 0x03b0 }, /* Greek_upsilonaccentdieresis ΰ GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */ + { 0x07bb, 0x03ce }, /* Greek_omegaaccent ώ GREEK SMALL LETTER OMEGA WITH TONOS */ + { 0x07c1, 0x0391 }, /* Greek_ALPHA Α GREEK CAPITAL LETTER ALPHA */ + { 0x07c2, 0x0392 }, /* Greek_BETA Β GREEK CAPITAL LETTER BETA */ + { 0x07c3, 0x0393 }, /* Greek_GAMMA Γ GREEK CAPITAL LETTER GAMMA */ + { 0x07c4, 0x0394 }, /* Greek_DELTA Δ GREEK CAPITAL LETTER DELTA */ + { 0x07c5, 0x0395 }, /* Greek_EPSILON Ε GREEK CAPITAL LETTER EPSILON */ + { 0x07c6, 0x0396 }, /* Greek_ZETA Ζ GREEK CAPITAL LETTER ZETA */ + { 0x07c7, 0x0397 }, /* Greek_ETA Η GREEK CAPITAL LETTER ETA */ + { 0x07c8, 0x0398 }, /* Greek_THETA Θ GREEK CAPITAL LETTER THETA */ + { 0x07c9, 0x0399 }, /* Greek_IOTA Ι GREEK CAPITAL LETTER IOTA */ + { 0x07ca, 0x039a }, /* Greek_KAPPA Κ GREEK CAPITAL LETTER KAPPA */ + { 0x07cb, 0x039b }, /* Greek_LAMBDA Λ GREEK CAPITAL LETTER LAMDA */ + { 0x07cc, 0x039c }, /* Greek_MU Μ GREEK CAPITAL LETTER MU */ + { 0x07cd, 0x039d }, /* Greek_NU Ν GREEK CAPITAL LETTER NU */ + { 0x07ce, 0x039e }, /* Greek_XI Ξ GREEK CAPITAL LETTER XI */ + { 0x07cf, 0x039f }, /* Greek_OMICRON Ο GREEK CAPITAL LETTER OMICRON */ + { 0x07d0, 0x03a0 }, /* Greek_PI Π GREEK CAPITAL LETTER PI */ + { 0x07d1, 0x03a1 }, /* Greek_RHO Ρ GREEK CAPITAL LETTER RHO */ + { 0x07d2, 0x03a3 }, /* Greek_SIGMA Σ GREEK CAPITAL LETTER SIGMA */ + { 0x07d4, 0x03a4 }, /* Greek_TAU Τ GREEK CAPITAL LETTER TAU */ + { 0x07d5, 0x03a5 }, /* Greek_UPSILON Υ GREEK CAPITAL LETTER UPSILON */ + { 0x07d6, 0x03a6 }, /* Greek_PHI Φ GREEK CAPITAL LETTER PHI */ + { 0x07d7, 0x03a7 }, /* Greek_CHI Χ GREEK CAPITAL LETTER CHI */ + { 0x07d8, 0x03a8 }, /* Greek_PSI Ψ GREEK CAPITAL LETTER PSI */ + { 0x07d9, 0x03a9 }, /* Greek_OMEGA Ω GREEK CAPITAL LETTER OMEGA */ + { 0x07e1, 0x03b1 }, /* Greek_alpha α GREEK SMALL LETTER ALPHA */ + { 0x07e2, 0x03b2 }, /* Greek_beta β GREEK SMALL LETTER BETA */ + { 0x07e3, 0x03b3 }, /* Greek_gamma γ GREEK SMALL LETTER GAMMA */ + { 0x07e4, 0x03b4 }, /* Greek_delta δ GREEK SMALL LETTER DELTA */ + { 0x07e5, 0x03b5 }, /* Greek_epsilon ε GREEK SMALL LETTER EPSILON */ + { 0x07e6, 0x03b6 }, /* Greek_zeta ζ GREEK SMALL LETTER ZETA */ + { 0x07e7, 0x03b7 }, /* Greek_eta η GREEK SMALL LETTER ETA */ + { 0x07e8, 0x03b8 }, /* Greek_theta θ GREEK SMALL LETTER THETA */ + { 0x07e9, 0x03b9 }, /* Greek_iota ι GREEK SMALL LETTER IOTA */ + { 0x07ea, 0x03ba }, /* Greek_kappa κ GREEK SMALL LETTER KAPPA */ + { 0x07eb, 0x03bb }, /* Greek_lambda λ GREEK SMALL LETTER LAMDA */ + { 0x07ec, 0x03bc }, /* Greek_mu μ GREEK SMALL LETTER MU */ + { 0x07ed, 0x03bd }, /* Greek_nu ν GREEK SMALL LETTER NU */ + { 0x07ee, 0x03be }, /* Greek_xi ξ GREEK SMALL LETTER XI */ + { 0x07ef, 0x03bf }, /* Greek_omicron ο GREEK SMALL LETTER OMICRON */ + { 0x07f0, 0x03c0 }, /* Greek_pi π GREEK SMALL LETTER PI */ + { 0x07f1, 0x03c1 }, /* Greek_rho ρ GREEK SMALL LETTER RHO */ + { 0x07f2, 0x03c3 }, /* Greek_sigma σ GREEK SMALL LETTER SIGMA */ + { 0x07f3, 0x03c2 }, /* Greek_finalsmallsigma ς GREEK SMALL LETTER FINAL SIGMA */ + { 0x07f4, 0x03c4 }, /* Greek_tau τ GREEK SMALL LETTER TAU */ + { 0x07f5, 0x03c5 }, /* Greek_upsilon υ GREEK SMALL LETTER UPSILON */ + { 0x07f6, 0x03c6 }, /* Greek_phi φ GREEK SMALL LETTER PHI */ + { 0x07f7, 0x03c7 }, /* Greek_chi χ GREEK SMALL LETTER CHI */ + { 0x07f8, 0x03c8 }, /* Greek_psi ψ GREEK SMALL LETTER PSI */ + { 0x07f9, 0x03c9 }, /* Greek_omega ω GREEK SMALL LETTER OMEGA */ + /* 0x08a1 leftradical ? ??? */ + /* 0x08a2 topleftradical ? ??? */ + /* 0x08a3 horizconnector ? ??? */ + { 0x08a4, 0x2320 }, /* topintegral ⌠ TOP HALF INTEGRAL */ + { 0x08a5, 0x2321 }, /* botintegral ⌡ BOTTOM HALF INTEGRAL */ + { 0x08a6, 0x2502 }, /* vertconnector │ BOX DRAWINGS LIGHT VERTICAL */ + /* 0x08a7 topleftsqbracket ? ??? */ + /* 0x08a8 botleftsqbracket ? ??? */ + /* 0x08a9 toprightsqbracket ? ??? */ + /* 0x08aa botrightsqbracket ? ??? */ + /* 0x08ab topleftparens ? ??? */ + /* 0x08ac botleftparens ? ??? */ + /* 0x08ad toprightparens ? ??? */ + /* 0x08ae botrightparens ? ??? */ + /* 0x08af leftmiddlecurlybrace ? ??? */ + /* 0x08b0 rightmiddlecurlybrace ? ??? */ + /* 0x08b1 topleftsummation ? ??? */ + /* 0x08b2 botleftsummation ? ??? */ + /* 0x08b3 topvertsummationconnector ? ??? */ + /* 0x08b4 botvertsummationconnector ? ??? */ + /* 0x08b5 toprightsummation ? ??? */ + /* 0x08b6 botrightsummation ? ??? */ + /* 0x08b7 rightmiddlesummation ? ??? */ + { 0x08bc, 0x2264 }, /* lessthanequal ≤ LESS-THAN OR EQUAL TO */ + { 0x08bd, 0x2260 }, /* notequal ≠ NOT EQUAL TO */ + { 0x08be, 0x2265 }, /* greaterthanequal ≥ GREATER-THAN OR EQUAL TO */ + { 0x08bf, 0x222b }, /* integral ∫ INTEGRAL */ + { 0x08c0, 0x2234 }, /* therefore ∴ THEREFORE */ + { 0x08c1, 0x221d }, /* variation ∝ PROPORTIONAL TO */ + { 0x08c2, 0x221e }, /* infinity ∞ INFINITY */ + { 0x08c5, 0x2207 }, /* nabla ∇ NABLA */ + { 0x08c8, 0x2245 }, /* approximate ≅ APPROXIMATELY EQUAL TO */ + /* 0x08c9 similarequal ? ??? */ + { 0x08cd, 0x21d4 }, /* ifonlyif ⇔ LEFT RIGHT DOUBLE ARROW */ + { 0x08ce, 0x21d2 }, /* implies ⇒ RIGHTWARDS DOUBLE ARROW */ + { 0x08cf, 0x2261 }, /* identical ≡ IDENTICAL TO */ + { 0x08d6, 0x221a }, /* radical √ SQUARE ROOT */ + { 0x08da, 0x2282 }, /* includedin ⊂ SUBSET OF */ + { 0x08db, 0x2283 }, /* includes ⊃ SUPERSET OF */ + { 0x08dc, 0x2229 }, /* intersection ∩ INTERSECTION */ + { 0x08dd, 0x222a }, /* union ∪ UNION */ + { 0x08de, 0x2227 }, /* logicaland ∧ LOGICAL AND */ + { 0x08df, 0x2228 }, /* logicalor ∨ LOGICAL OR */ + { 0x08ef, 0x2202 }, /* partialderivative ∂ PARTIAL DIFFERENTIAL */ + { 0x08f6, 0x0192 }, /* function ƒ LATIN SMALL LETTER F WITH HOOK */ + { 0x08fb, 0x2190 }, /* leftarrow ← LEFTWARDS ARROW */ + { 0x08fc, 0x2191 }, /* uparrow ↑ UPWARDS ARROW */ + { 0x08fd, 0x2192 }, /* rightarrow → RIGHTWARDS ARROW */ + { 0x08fe, 0x2193 }, /* downarrow ↓ DOWNWARDS ARROW */ + { 0x09df, 0x2422 }, /* blank ␢ BLANK SYMBOL */ + { 0x09e0, 0x25c6 }, /* soliddiamond ◆ BLACK DIAMOND */ + { 0x09e1, 0x2592 }, /* checkerboard ▒ MEDIUM SHADE */ + { 0x09e2, 0x2409 }, /* ht ␉ SYMBOL FOR HORIZONTAL TABULATION */ + { 0x09e3, 0x240c }, /* ff ␌ SYMBOL FOR FORM FEED */ + { 0x09e4, 0x240d }, /* cr ␍ SYMBOL FOR CARRIAGE RETURN */ + { 0x09e5, 0x240a }, /* lf ␊ SYMBOL FOR LINE FEED */ + { 0x09e8, 0x2424 }, /* nl ␤ SYMBOL FOR NEWLINE */ + { 0x09e9, 0x240b }, /* vt ␋ SYMBOL FOR VERTICAL TABULATION */ + { 0x09ea, 0x2518 }, /* lowrightcorner ┘ BOX DRAWINGS LIGHT UP AND LEFT */ + { 0x09eb, 0x2510 }, /* uprightcorner ┐ BOX DRAWINGS LIGHT DOWN AND LEFT */ + { 0x09ec, 0x250c }, /* upleftcorner ┌ BOX DRAWINGS LIGHT DOWN AND RIGHT */ + { 0x09ed, 0x2514 }, /* lowleftcorner └ BOX DRAWINGS LIGHT UP AND RIGHT */ + { 0x09ee, 0x253c }, /* crossinglines ┼ BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */ + /* 0x09ef horizlinescan1 ? ??? */ + /* 0x09f0 horizlinescan3 ? ??? */ + { 0x09f1, 0x2500 }, /* horizlinescan5 ─ BOX DRAWINGS LIGHT HORIZONTAL */ + /* 0x09f2 horizlinescan7 ? ??? */ + /* 0x09f3 horizlinescan9 ? ??? */ + { 0x09f4, 0x251c }, /* leftt ├ BOX DRAWINGS LIGHT VERTICAL AND RIGHT */ + { 0x09f5, 0x2524 }, /* rightt ┤ BOX DRAWINGS LIGHT VERTICAL AND LEFT */ + { 0x09f6, 0x2534 }, /* bott ┴ BOX DRAWINGS LIGHT UP AND HORIZONTAL */ + { 0x09f7, 0x252c }, /* topt ┬ BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */ + { 0x09f8, 0x2502 }, /* vertbar │ BOX DRAWINGS LIGHT VERTICAL */ + { 0x0aa1, 0x2003 }, /* emspace   EM SPACE */ + { 0x0aa2, 0x2002 }, /* enspace   EN SPACE */ + { 0x0aa3, 0x2004 }, /* em3space   THREE-PER-EM SPACE */ + { 0x0aa4, 0x2005 }, /* em4space   FOUR-PER-EM SPACE */ + { 0x0aa5, 0x2007 }, /* digitspace   FIGURE SPACE */ + { 0x0aa6, 0x2008 }, /* punctspace   PUNCTUATION SPACE */ + { 0x0aa7, 0x2009 }, /* thinspace   THIN SPACE */ + { 0x0aa8, 0x200a }, /* hairspace   HAIR SPACE */ + { 0x0aa9, 0x2014 }, /* emdash — EM DASH */ + { 0x0aaa, 0x2013 }, /* endash – EN DASH */ + /* 0x0aac signifblank ? ??? */ + { 0x0aae, 0x2026 }, /* ellipsis … HORIZONTAL ELLIPSIS */ + /* 0x0aaf doubbaselinedot ? ??? */ + { 0x0ab0, 0x2153 }, /* onethird ⅓ VULGAR FRACTION ONE THIRD */ + { 0x0ab1, 0x2154 }, /* twothirds ⅔ VULGAR FRACTION TWO THIRDS */ + { 0x0ab2, 0x2155 }, /* onefifth ⅕ VULGAR FRACTION ONE FIFTH */ + { 0x0ab3, 0x2156 }, /* twofifths ⅖ VULGAR FRACTION TWO FIFTHS */ + { 0x0ab4, 0x2157 }, /* threefifths ⅗ VULGAR FRACTION THREE FIFTHS */ + { 0x0ab5, 0x2158 }, /* fourfifths ⅘ VULGAR FRACTION FOUR FIFTHS */ + { 0x0ab6, 0x2159 }, /* onesixth ⅙ VULGAR FRACTION ONE SIXTH */ + { 0x0ab7, 0x215a }, /* fivesixths ⅚ VULGAR FRACTION FIVE SIXTHS */ + { 0x0ab8, 0x2105 }, /* careof ℅ CARE OF */ + { 0x0abb, 0x2012 }, /* figdash ‒ FIGURE DASH */ + { 0x0abc, 0x2329 }, /* leftanglebracket 〈 LEFT-POINTING ANGLE BRACKET */ + { 0x0abd, 0x002e }, /* decimalpoint . FULL STOP */ + { 0x0abe, 0x232a }, /* rightanglebracket 〉 RIGHT-POINTING ANGLE BRACKET */ + /* 0x0abf marker ? ??? */ + { 0x0ac3, 0x215b }, /* oneeighth ⅛ VULGAR FRACTION ONE EIGHTH */ + { 0x0ac4, 0x215c }, /* threeeighths ⅜ VULGAR FRACTION THREE EIGHTHS */ + { 0x0ac5, 0x215d }, /* fiveeighths ⅝ VULGAR FRACTION FIVE EIGHTHS */ + { 0x0ac6, 0x215e }, /* seveneighths ⅞ VULGAR FRACTION SEVEN EIGHTHS */ + { 0x0ac9, 0x2122 }, /* trademark ™ TRADE MARK SIGN */ + { 0x0aca, 0x2613 }, /* signaturemark ☓ SALTIRE */ + /* 0x0acb trademarkincircle ? ??? */ + { 0x0acc, 0x25c1 }, /* leftopentriangle ◁ WHITE LEFT-POINTING TRIANGLE */ + { 0x0acd, 0x25b7 }, /* rightopentriangle ▷ WHITE RIGHT-POINTING TRIANGLE */ + { 0x0ace, 0x25cb }, /* emopencircle ○ WHITE CIRCLE */ + { 0x0acf, 0x25a1 }, /* emopenrectangle □ WHITE SQUARE */ + { 0x0ad0, 0x2018 }, /* leftsinglequotemark ‘ LEFT SINGLE QUOTATION MARK */ + { 0x0ad1, 0x2019 }, /* rightsinglequotemark ’ RIGHT SINGLE QUOTATION MARK */ + { 0x0ad2, 0x201c }, /* leftdoublequotemark “ LEFT DOUBLE QUOTATION MARK */ + { 0x0ad3, 0x201d }, /* rightdoublequotemark ” RIGHT DOUBLE QUOTATION MARK */ + { 0x0ad4, 0x211e }, /* prescription ℞ PRESCRIPTION TAKE */ + { 0x0ad6, 0x2032 }, /* minutes ′ PRIME */ + { 0x0ad7, 0x2033 }, /* seconds ″ DOUBLE PRIME */ + { 0x0ad9, 0x271d }, /* latincross ✝ LATIN CROSS */ + /* 0x0ada hexagram ? ??? */ + { 0x0adb, 0x25ac }, /* filledrectbullet ▬ BLACK RECTANGLE */ + { 0x0adc, 0x25c0 }, /* filledlefttribullet ◀ BLACK LEFT-POINTING TRIANGLE */ + { 0x0add, 0x25b6 }, /* filledrighttribullet ▶ BLACK RIGHT-POINTING TRIANGLE */ + { 0x0ade, 0x25cf }, /* emfilledcircle ● BLACK CIRCLE */ + { 0x0adf, 0x25a0 }, /* emfilledrect ■ BLACK SQUARE */ + { 0x0ae0, 0x25e6 }, /* enopencircbullet ◦ WHITE BULLET */ + { 0x0ae1, 0x25ab }, /* enopensquarebullet ▫ WHITE SMALL SQUARE */ + { 0x0ae2, 0x25ad }, /* openrectbullet ▭ WHITE RECTANGLE */ + { 0x0ae3, 0x25b3 }, /* opentribulletup △ WHITE UP-POINTING TRIANGLE */ + { 0x0ae4, 0x25bd }, /* opentribulletdown ▽ WHITE DOWN-POINTING TRIANGLE */ + { 0x0ae5, 0x2606 }, /* openstar ☆ WHITE STAR */ + { 0x0ae6, 0x2022 }, /* enfilledcircbullet • BULLET */ + { 0x0ae7, 0x25aa }, /* enfilledsqbullet ▪ BLACK SMALL SQUARE */ + { 0x0ae8, 0x25b2 }, /* filledtribulletup ▲ BLACK UP-POINTING TRIANGLE */ + { 0x0ae9, 0x25bc }, /* filledtribulletdown ▼ BLACK DOWN-POINTING TRIANGLE */ + { 0x0aea, 0x261c }, /* leftpointer ☜ WHITE LEFT POINTING INDEX */ + { 0x0aeb, 0x261e }, /* rightpointer ☞ WHITE RIGHT POINTING INDEX */ + { 0x0aec, 0x2663 }, /* club ♣ BLACK CLUB SUIT */ + { 0x0aed, 0x2666 }, /* diamond ♦ BLACK DIAMOND SUIT */ + { 0x0aee, 0x2665 }, /* heart ♥ BLACK HEART SUIT */ + { 0x0af0, 0x2720 }, /* maltesecross ✠ MALTESE CROSS */ + { 0x0af1, 0x2020 }, /* dagger † DAGGER */ + { 0x0af2, 0x2021 }, /* doubledagger ‡ DOUBLE DAGGER */ + { 0x0af3, 0x2713 }, /* checkmark ✓ CHECK MARK */ + { 0x0af4, 0x2717 }, /* ballotcross ✗ BALLOT X */ + { 0x0af5, 0x266f }, /* musicalsharp ♯ MUSIC SHARP SIGN */ + { 0x0af6, 0x266d }, /* musicalflat ♭ MUSIC FLAT SIGN */ + { 0x0af7, 0x2642 }, /* malesymbol ♂ MALE SIGN */ + { 0x0af8, 0x2640 }, /* femalesymbol ♀ FEMALE SIGN */ + { 0x0af9, 0x260e }, /* telephone ☎ BLACK TELEPHONE */ + { 0x0afa, 0x2315 }, /* telephonerecorder ⌕ TELEPHONE RECORDER */ + { 0x0afb, 0x2117 }, /* phonographcopyright ℗ SOUND RECORDING COPYRIGHT */ + { 0x0afc, 0x2038 }, /* caret ‸ CARET */ + { 0x0afd, 0x201a }, /* singlelowquotemark ‚ SINGLE LOW-9 QUOTATION MARK */ + { 0x0afe, 0x201e }, /* doublelowquotemark „ DOUBLE LOW-9 QUOTATION MARK */ + /* 0x0aff cursor ? ??? */ + { 0x0ba3, 0x003c }, /* leftcaret < LESS-THAN SIGN */ + { 0x0ba6, 0x003e }, /* rightcaret > GREATER-THAN SIGN */ + { 0x0ba8, 0x2228 }, /* downcaret ∨ LOGICAL OR */ + { 0x0ba9, 0x2227 }, /* upcaret ∧ LOGICAL AND */ + { 0x0bc0, 0x00af }, /* overbar ¯ MACRON */ + { 0x0bc2, 0x22a4 }, /* downtack ⊤ DOWN TACK */ + { 0x0bc3, 0x2229 }, /* upshoe ∩ INTERSECTION */ + { 0x0bc4, 0x230a }, /* downstile ⌊ LEFT FLOOR */ + { 0x0bc6, 0x005f }, /* underbar _ LOW LINE */ + { 0x0bca, 0x2218 }, /* jot ∘ RING OPERATOR */ + { 0x0bcc, 0x2395 }, /* quad ⎕ APL FUNCTIONAL SYMBOL QUAD (Unicode 3.0) */ + { 0x0bce, 0x22a5 }, /* uptack ⊥ UP TACK */ + { 0x0bcf, 0x25cb }, /* circle ○ WHITE CIRCLE */ + { 0x0bd3, 0x2308 }, /* upstile ⌈ LEFT CEILING */ + { 0x0bd6, 0x222a }, /* downshoe ∪ UNION */ + { 0x0bd8, 0x2283 }, /* rightshoe ⊃ SUPERSET OF */ + { 0x0bda, 0x2282 }, /* leftshoe ⊂ SUBSET OF */ + { 0x0bdc, 0x22a3 }, /* lefttack ⊣ LEFT TACK */ + { 0x0bfc, 0x22a2 }, /* righttack ⊢ RIGHT TACK */ + { 0x0cdf, 0x2017 }, /* hebrew_doublelowline ‗ DOUBLE LOW LINE */ + { 0x0ce0, 0x05d0 }, /* hebrew_aleph א HEBREW LETTER ALEF */ + { 0x0ce1, 0x05d1 }, /* hebrew_bet ב HEBREW LETTER BET */ + { 0x0ce2, 0x05d2 }, /* hebrew_gimel ג HEBREW LETTER GIMEL */ + { 0x0ce3, 0x05d3 }, /* hebrew_dalet ד HEBREW LETTER DALET */ + { 0x0ce4, 0x05d4 }, /* hebrew_he ה HEBREW LETTER HE */ + { 0x0ce5, 0x05d5 }, /* hebrew_waw ו HEBREW LETTER VAV */ + { 0x0ce6, 0x05d6 }, /* hebrew_zain ז HEBREW LETTER ZAYIN */ + { 0x0ce7, 0x05d7 }, /* hebrew_chet ח HEBREW LETTER HET */ + { 0x0ce8, 0x05d8 }, /* hebrew_tet ט HEBREW LETTER TET */ + { 0x0ce9, 0x05d9 }, /* hebrew_yod י HEBREW LETTER YOD */ + { 0x0cea, 0x05da }, /* hebrew_finalkaph ך HEBREW LETTER FINAL KAF */ + { 0x0ceb, 0x05db }, /* hebrew_kaph כ HEBREW LETTER KAF */ + { 0x0cec, 0x05dc }, /* hebrew_lamed ל HEBREW LETTER LAMED */ + { 0x0ced, 0x05dd }, /* hebrew_finalmem ם HEBREW LETTER FINAL MEM */ + { 0x0cee, 0x05de }, /* hebrew_mem מ HEBREW LETTER MEM */ + { 0x0cef, 0x05df }, /* hebrew_finalnun ן HEBREW LETTER FINAL NUN */ + { 0x0cf0, 0x05e0 }, /* hebrew_nun נ HEBREW LETTER NUN */ + { 0x0cf1, 0x05e1 }, /* hebrew_samech ס HEBREW LETTER SAMEKH */ + { 0x0cf2, 0x05e2 }, /* hebrew_ayin ע HEBREW LETTER AYIN */ + { 0x0cf3, 0x05e3 }, /* hebrew_finalpe ף HEBREW LETTER FINAL PE */ + { 0x0cf4, 0x05e4 }, /* hebrew_pe פ HEBREW LETTER PE */ + { 0x0cf5, 0x05e5 }, /* hebrew_finalzade ץ HEBREW LETTER FINAL TSADI */ + { 0x0cf6, 0x05e6 }, /* hebrew_zade צ HEBREW LETTER TSADI */ + { 0x0cf7, 0x05e7 }, /* hebrew_qoph ק HEBREW LETTER QOF */ + { 0x0cf8, 0x05e8 }, /* hebrew_resh ר HEBREW LETTER RESH */ + { 0x0cf9, 0x05e9 }, /* hebrew_shin ש HEBREW LETTER SHIN */ + { 0x0cfa, 0x05ea }, /* hebrew_taw ת HEBREW LETTER TAV */ + { 0x0da1, 0x0e01 }, /* Thai_kokai ก THAI CHARACTER KO KAI */ + { 0x0da2, 0x0e02 }, /* Thai_khokhai ข THAI CHARACTER KHO KHAI */ + { 0x0da3, 0x0e03 }, /* Thai_khokhuat ฃ THAI CHARACTER KHO KHUAT */ + { 0x0da4, 0x0e04 }, /* Thai_khokhwai ค THAI CHARACTER KHO KHWAI */ + { 0x0da5, 0x0e05 }, /* Thai_khokhon ฅ THAI CHARACTER KHO KHON */ + { 0x0da6, 0x0e06 }, /* Thai_khorakhang ฆ THAI CHARACTER KHO RAKHANG */ + { 0x0da7, 0x0e07 }, /* Thai_ngongu ง THAI CHARACTER NGO NGU */ + { 0x0da8, 0x0e08 }, /* Thai_chochan จ THAI CHARACTER CHO CHAN */ + { 0x0da9, 0x0e09 }, /* Thai_choching ฉ THAI CHARACTER CHO CHING */ + { 0x0daa, 0x0e0a }, /* Thai_chochang ช THAI CHARACTER CHO CHANG */ + { 0x0dab, 0x0e0b }, /* Thai_soso ซ THAI CHARACTER SO SO */ + { 0x0dac, 0x0e0c }, /* Thai_chochoe ฌ THAI CHARACTER CHO CHOE */ + { 0x0dad, 0x0e0d }, /* Thai_yoying ญ THAI CHARACTER YO YING */ + { 0x0dae, 0x0e0e }, /* Thai_dochada ฎ THAI CHARACTER DO CHADA */ + { 0x0daf, 0x0e0f }, /* Thai_topatak ฏ THAI CHARACTER TO PATAK */ + { 0x0db0, 0x0e10 }, /* Thai_thothan ฐ THAI CHARACTER THO THAN */ + { 0x0db1, 0x0e11 }, /* Thai_thonangmontho ฑ THAI CHARACTER THO NANGMONTHO */ + { 0x0db2, 0x0e12 }, /* Thai_thophuthao ฒ THAI CHARACTER THO PHUTHAO */ + { 0x0db3, 0x0e13 }, /* Thai_nonen ณ THAI CHARACTER NO NEN */ + { 0x0db4, 0x0e14 }, /* Thai_dodek ด THAI CHARACTER DO DEK */ + { 0x0db5, 0x0e15 }, /* Thai_totao ต THAI CHARACTER TO TAO */ + { 0x0db6, 0x0e16 }, /* Thai_thothung ถ THAI CHARACTER THO THUNG */ + { 0x0db7, 0x0e17 }, /* Thai_thothahan ท THAI CHARACTER THO THAHAN */ + { 0x0db8, 0x0e18 }, /* Thai_thothong ธ THAI CHARACTER THO THONG */ + { 0x0db9, 0x0e19 }, /* Thai_nonu น THAI CHARACTER NO NU */ + { 0x0dba, 0x0e1a }, /* Thai_bobaimai บ THAI CHARACTER BO BAIMAI */ + { 0x0dbb, 0x0e1b }, /* Thai_popla ป THAI CHARACTER PO PLA */ + { 0x0dbc, 0x0e1c }, /* Thai_phophung ผ THAI CHARACTER PHO PHUNG */ + { 0x0dbd, 0x0e1d }, /* Thai_fofa ฝ THAI CHARACTER FO FA */ + { 0x0dbe, 0x0e1e }, /* Thai_phophan พ THAI CHARACTER PHO PHAN */ + { 0x0dbf, 0x0e1f }, /* Thai_fofan ฟ THAI CHARACTER FO FAN */ + { 0x0dc0, 0x0e20 }, /* Thai_phosamphao ภ THAI CHARACTER PHO SAMPHAO */ + { 0x0dc1, 0x0e21 }, /* Thai_moma ม THAI CHARACTER MO MA */ + { 0x0dc2, 0x0e22 }, /* Thai_yoyak ย THAI CHARACTER YO YAK */ + { 0x0dc3, 0x0e23 }, /* Thai_rorua ร THAI CHARACTER RO RUA */ + { 0x0dc4, 0x0e24 }, /* Thai_ru ฤ THAI CHARACTER RU */ + { 0x0dc5, 0x0e25 }, /* Thai_loling ล THAI CHARACTER LO LING */ + { 0x0dc6, 0x0e26 }, /* Thai_lu ฦ THAI CHARACTER LU */ + { 0x0dc7, 0x0e27 }, /* Thai_wowaen ว THAI CHARACTER WO WAEN */ + { 0x0dc8, 0x0e28 }, /* Thai_sosala ศ THAI CHARACTER SO SALA */ + { 0x0dc9, 0x0e29 }, /* Thai_sorusi ษ THAI CHARACTER SO RUSI */ + { 0x0dca, 0x0e2a }, /* Thai_sosua ส THAI CHARACTER SO SUA */ + { 0x0dcb, 0x0e2b }, /* Thai_hohip ห THAI CHARACTER HO HIP */ + { 0x0dcc, 0x0e2c }, /* Thai_lochula ฬ THAI CHARACTER LO CHULA */ + { 0x0dcd, 0x0e2d }, /* Thai_oang อ THAI CHARACTER O ANG */ + { 0x0dce, 0x0e2e }, /* Thai_honokhuk ฮ THAI CHARACTER HO NOKHUK */ + { 0x0dcf, 0x0e2f }, /* Thai_paiyannoi ฯ THAI CHARACTER PAIYANNOI */ + { 0x0dd0, 0x0e30 }, /* Thai_saraa ะ THAI CHARACTER SARA A */ + { 0x0dd1, 0x0e31 }, /* Thai_maihanakat ั THAI CHARACTER MAI HAN-AKAT */ + { 0x0dd2, 0x0e32 }, /* Thai_saraaa า THAI CHARACTER SARA AA */ + { 0x0dd3, 0x0e33 }, /* Thai_saraam ำ THAI CHARACTER SARA AM */ + { 0x0dd4, 0x0e34 }, /* Thai_sarai ิ THAI CHARACTER SARA I */ + { 0x0dd5, 0x0e35 }, /* Thai_saraii ี THAI CHARACTER SARA II */ + { 0x0dd6, 0x0e36 }, /* Thai_saraue ึ THAI CHARACTER SARA UE */ + { 0x0dd7, 0x0e37 }, /* Thai_sarauee ื THAI CHARACTER SARA UEE */ + { 0x0dd8, 0x0e38 }, /* Thai_sarau ุ THAI CHARACTER SARA U */ + { 0x0dd9, 0x0e39 }, /* Thai_sarauu ู THAI CHARACTER SARA UU */ + { 0x0dda, 0x0e3a }, /* Thai_phinthu ฺ THAI CHARACTER PHINTHU */ + { 0x0dde, 0x0e3e }, /* Thai_maihanakat_maitho ฾ ??? */ + { 0x0ddf, 0x0e3f }, /* Thai_baht ฿ THAI CURRENCY SYMBOL BAHT */ + { 0x0de0, 0x0e40 }, /* Thai_sarae เ THAI CHARACTER SARA E */ + { 0x0de1, 0x0e41 }, /* Thai_saraae แ THAI CHARACTER SARA AE */ + { 0x0de2, 0x0e42 }, /* Thai_sarao โ THAI CHARACTER SARA O */ + { 0x0de3, 0x0e43 }, /* Thai_saraaimaimuan ใ THAI CHARACTER SARA AI MAIMUAN */ + { 0x0de4, 0x0e44 }, /* Thai_saraaimaimalai ไ THAI CHARACTER SARA AI MAIMALAI */ + { 0x0de5, 0x0e45 }, /* Thai_lakkhangyao ๅ THAI CHARACTER LAKKHANGYAO */ + { 0x0de6, 0x0e46 }, /* Thai_maiyamok ๆ THAI CHARACTER MAIYAMOK */ + { 0x0de7, 0x0e47 }, /* Thai_maitaikhu ็ THAI CHARACTER MAITAIKHU */ + { 0x0de8, 0x0e48 }, /* Thai_maiek ่ THAI CHARACTER MAI EK */ + { 0x0de9, 0x0e49 }, /* Thai_maitho ้ THAI CHARACTER MAI THO */ + { 0x0dea, 0x0e4a }, /* Thai_maitri ๊ THAI CHARACTER MAI TRI */ + { 0x0deb, 0x0e4b }, /* Thai_maichattawa ๋ THAI CHARACTER MAI CHATTAWA */ + { 0x0dec, 0x0e4c }, /* Thai_thanthakhat ์ THAI CHARACTER THANTHAKHAT */ + { 0x0ded, 0x0e4d }, /* Thai_nikhahit ํ THAI CHARACTER NIKHAHIT */ + { 0x0df0, 0x0e50 }, /* Thai_leksun ๐ THAI DIGIT ZERO */ + { 0x0df1, 0x0e51 }, /* Thai_leknung ๑ THAI DIGIT ONE */ + { 0x0df2, 0x0e52 }, /* Thai_leksong ๒ THAI DIGIT TWO */ + { 0x0df3, 0x0e53 }, /* Thai_leksam ๓ THAI DIGIT THREE */ + { 0x0df4, 0x0e54 }, /* Thai_leksi ๔ THAI DIGIT FOUR */ + { 0x0df5, 0x0e55 }, /* Thai_lekha ๕ THAI DIGIT FIVE */ + { 0x0df6, 0x0e56 }, /* Thai_lekhok ๖ THAI DIGIT SIX */ + { 0x0df7, 0x0e57 }, /* Thai_lekchet ๗ THAI DIGIT SEVEN */ + { 0x0df8, 0x0e58 }, /* Thai_lekpaet ๘ THAI DIGIT EIGHT */ + { 0x0df9, 0x0e59 }, /* Thai_lekkao ๙ THAI DIGIT NINE */ + { 0x0ea1, 0x3131 }, /* Hangul_Kiyeog ㄱ HANGUL LETTER KIYEOK */ + { 0x0ea2, 0x3132 }, /* Hangul_SsangKiyeog ㄲ HANGUL LETTER SSANGKIYEOK */ + { 0x0ea3, 0x3133 }, /* Hangul_KiyeogSios ㄳ HANGUL LETTER KIYEOK-SIOS */ + { 0x0ea4, 0x3134 }, /* Hangul_Nieun ㄴ HANGUL LETTER NIEUN */ + { 0x0ea5, 0x3135 }, /* Hangul_NieunJieuj ㄵ HANGUL LETTER NIEUN-CIEUC */ + { 0x0ea6, 0x3136 }, /* Hangul_NieunHieuh ㄶ HANGUL LETTER NIEUN-HIEUH */ + { 0x0ea7, 0x3137 }, /* Hangul_Dikeud ㄷ HANGUL LETTER TIKEUT */ + { 0x0ea8, 0x3138 }, /* Hangul_SsangDikeud ㄸ HANGUL LETTER SSANGTIKEUT */ + { 0x0ea9, 0x3139 }, /* Hangul_Rieul ㄹ HANGUL LETTER RIEUL */ + { 0x0eaa, 0x313a }, /* Hangul_RieulKiyeog ㄺ HANGUL LETTER RIEUL-KIYEOK */ + { 0x0eab, 0x313b }, /* Hangul_RieulMieum ㄻ HANGUL LETTER RIEUL-MIEUM */ + { 0x0eac, 0x313c }, /* Hangul_RieulPieub ㄼ HANGUL LETTER RIEUL-PIEUP */ + { 0x0ead, 0x313d }, /* Hangul_RieulSios ㄽ HANGUL LETTER RIEUL-SIOS */ + { 0x0eae, 0x313e }, /* Hangul_RieulTieut ㄾ HANGUL LETTER RIEUL-THIEUTH */ + { 0x0eaf, 0x313f }, /* Hangul_RieulPhieuf ㄿ HANGUL LETTER RIEUL-PHIEUPH */ + { 0x0eb0, 0x3140 }, /* Hangul_RieulHieuh ㅀ HANGUL LETTER RIEUL-HIEUH */ + { 0x0eb1, 0x3141 }, /* Hangul_Mieum ㅁ HANGUL LETTER MIEUM */ + { 0x0eb2, 0x3142 }, /* Hangul_Pieub ㅂ HANGUL LETTER PIEUP */ + { 0x0eb3, 0x3143 }, /* Hangul_SsangPieub ㅃ HANGUL LETTER SSANGPIEUP */ + { 0x0eb4, 0x3144 }, /* Hangul_PieubSios ㅄ HANGUL LETTER PIEUP-SIOS */ + { 0x0eb5, 0x3145 }, /* Hangul_Sios ㅅ HANGUL LETTER SIOS */ + { 0x0eb6, 0x3146 }, /* Hangul_SsangSios ㅆ HANGUL LETTER SSANGSIOS */ + { 0x0eb7, 0x3147 }, /* Hangul_Ieung ㅇ HANGUL LETTER IEUNG */ + { 0x0eb8, 0x3148 }, /* Hangul_Jieuj ㅈ HANGUL LETTER CIEUC */ + { 0x0eb9, 0x3149 }, /* Hangul_SsangJieuj ㅉ HANGUL LETTER SSANGCIEUC */ + { 0x0eba, 0x314a }, /* Hangul_Cieuc ㅊ HANGUL LETTER CHIEUCH */ + { 0x0ebb, 0x314b }, /* Hangul_Khieuq ㅋ HANGUL LETTER KHIEUKH */ + { 0x0ebc, 0x314c }, /* Hangul_Tieut ㅌ HANGUL LETTER THIEUTH */ + { 0x0ebd, 0x314d }, /* Hangul_Phieuf ㅍ HANGUL LETTER PHIEUPH */ + { 0x0ebe, 0x314e }, /* Hangul_Hieuh ㅎ HANGUL LETTER HIEUH */ + { 0x0ebf, 0x314f }, /* Hangul_A ㅏ HANGUL LETTER A */ + { 0x0ec0, 0x3150 }, /* Hangul_AE ㅐ HANGUL LETTER AE */ + { 0x0ec1, 0x3151 }, /* Hangul_YA ㅑ HANGUL LETTER YA */ + { 0x0ec2, 0x3152 }, /* Hangul_YAE ㅒ HANGUL LETTER YAE */ + { 0x0ec3, 0x3153 }, /* Hangul_EO ㅓ HANGUL LETTER EO */ + { 0x0ec4, 0x3154 }, /* Hangul_E ㅔ HANGUL LETTER E */ + { 0x0ec5, 0x3155 }, /* Hangul_YEO ㅕ HANGUL LETTER YEO */ + { 0x0ec6, 0x3156 }, /* Hangul_YE ㅖ HANGUL LETTER YE */ + { 0x0ec7, 0x3157 }, /* Hangul_O ㅗ HANGUL LETTER O */ + { 0x0ec8, 0x3158 }, /* Hangul_WA ㅘ HANGUL LETTER WA */ + { 0x0ec9, 0x3159 }, /* Hangul_WAE ㅙ HANGUL LETTER WAE */ + { 0x0eca, 0x315a }, /* Hangul_OE ㅚ HANGUL LETTER OE */ + { 0x0ecb, 0x315b }, /* Hangul_YO ㅛ HANGUL LETTER YO */ + { 0x0ecc, 0x315c }, /* Hangul_U ㅜ HANGUL LETTER U */ + { 0x0ecd, 0x315d }, /* Hangul_WEO ㅝ HANGUL LETTER WEO */ + { 0x0ece, 0x315e }, /* Hangul_WE ㅞ HANGUL LETTER WE */ + { 0x0ecf, 0x315f }, /* Hangul_WI ㅟ HANGUL LETTER WI */ + { 0x0ed0, 0x3160 }, /* Hangul_YU ㅠ HANGUL LETTER YU */ + { 0x0ed1, 0x3161 }, /* Hangul_EU ㅡ HANGUL LETTER EU */ + { 0x0ed2, 0x3162 }, /* Hangul_YI ㅢ HANGUL LETTER YI */ + { 0x0ed3, 0x3163 }, /* Hangul_I ㅣ HANGUL LETTER I */ + { 0x0ed4, 0x11a8 }, /* Hangul_J_Kiyeog ᆨ HANGUL JONGSEONG KIYEOK */ + { 0x0ed5, 0x11a9 }, /* Hangul_J_SsangKiyeog ᆩ HANGUL JONGSEONG SSANGKIYEOK */ + { 0x0ed6, 0x11aa }, /* Hangul_J_KiyeogSios ᆪ HANGUL JONGSEONG KIYEOK-SIOS */ + { 0x0ed7, 0x11ab }, /* Hangul_J_Nieun ᆫ HANGUL JONGSEONG NIEUN */ + { 0x0ed8, 0x11ac }, /* Hangul_J_NieunJieuj ᆬ HANGUL JONGSEONG NIEUN-CIEUC */ + { 0x0ed9, 0x11ad }, /* Hangul_J_NieunHieuh ᆭ HANGUL JONGSEONG NIEUN-HIEUH */ + { 0x0eda, 0x11ae }, /* Hangul_J_Dikeud ᆮ HANGUL JONGSEONG TIKEUT */ + { 0x0edb, 0x11af }, /* Hangul_J_Rieul ᆯ HANGUL JONGSEONG RIEUL */ + { 0x0edc, 0x11b0 }, /* Hangul_J_RieulKiyeog ᆰ HANGUL JONGSEONG RIEUL-KIYEOK */ + { 0x0edd, 0x11b1 }, /* Hangul_J_RieulMieum ᆱ HANGUL JONGSEONG RIEUL-MIEUM */ + { 0x0ede, 0x11b2 }, /* Hangul_J_RieulPieub ᆲ HANGUL JONGSEONG RIEUL-PIEUP */ + { 0x0edf, 0x11b3 }, /* Hangul_J_RieulSios ᆳ HANGUL JONGSEONG RIEUL-SIOS */ + { 0x0ee0, 0x11b4 }, /* Hangul_J_RieulTieut ᆴ HANGUL JONGSEONG RIEUL-THIEUTH */ + { 0x0ee1, 0x11b5 }, /* Hangul_J_RieulPhieuf ᆵ HANGUL JONGSEONG RIEUL-PHIEUPH */ + { 0x0ee2, 0x11b6 }, /* Hangul_J_RieulHieuh ᆶ HANGUL JONGSEONG RIEUL-HIEUH */ + { 0x0ee3, 0x11b7 }, /* Hangul_J_Mieum ᆷ HANGUL JONGSEONG MIEUM */ + { 0x0ee4, 0x11b8 }, /* Hangul_J_Pieub ᆸ HANGUL JONGSEONG PIEUP */ + { 0x0ee5, 0x11b9 }, /* Hangul_J_PieubSios ᆹ HANGUL JONGSEONG PIEUP-SIOS */ + { 0x0ee6, 0x11ba }, /* Hangul_J_Sios ᆺ HANGUL JONGSEONG SIOS */ + { 0x0ee7, 0x11bb }, /* Hangul_J_SsangSios ᆻ HANGUL JONGSEONG SSANGSIOS */ + { 0x0ee8, 0x11bc }, /* Hangul_J_Ieung ᆼ HANGUL JONGSEONG IEUNG */ + { 0x0ee9, 0x11bd }, /* Hangul_J_Jieuj ᆽ HANGUL JONGSEONG CIEUC */ + { 0x0eea, 0x11be }, /* Hangul_J_Cieuc ᆾ HANGUL JONGSEONG CHIEUCH */ + { 0x0eeb, 0x11bf }, /* Hangul_J_Khieuq ᆿ HANGUL JONGSEONG KHIEUKH */ + { 0x0eec, 0x11c0 }, /* Hangul_J_Tieut ᇀ HANGUL JONGSEONG THIEUTH */ + { 0x0eed, 0x11c1 }, /* Hangul_J_Phieuf ᇁ HANGUL JONGSEONG PHIEUPH */ + { 0x0eee, 0x11c2 }, /* Hangul_J_Hieuh ᇂ HANGUL JONGSEONG HIEUH */ + { 0x0eef, 0x316d }, /* Hangul_RieulYeorinHieuh ㅭ HANGUL LETTER RIEUL-YEORINHIEUH */ + { 0x0ef0, 0x3171 }, /* Hangul_SunkyeongeumMieum ㅱ HANGUL LETTER KAPYEOUNMIEUM */ + { 0x0ef1, 0x3178 }, /* Hangul_SunkyeongeumPieub ㅸ HANGUL LETTER KAPYEOUNPIEUP */ + { 0x0ef2, 0x317f }, /* Hangul_PanSios ㅿ HANGUL LETTER PANSIOS */ + /* 0x0ef3 Hangul_KkogjiDalrinIeung ? ??? */ + { 0x0ef4, 0x3184 }, /* Hangul_SunkyeongeumPhieuf ㆄ HANGUL LETTER KAPYEOUNPHIEUPH */ + { 0x0ef5, 0x3186 }, /* Hangul_YeorinHieuh ㆆ HANGUL LETTER YEORINHIEUH */ + { 0x0ef6, 0x318d }, /* Hangul_AraeA ㆍ HANGUL LETTER ARAEA */ + { 0x0ef7, 0x318e }, /* Hangul_AraeAE ㆎ HANGUL LETTER ARAEAE */ + { 0x0ef8, 0x11eb }, /* Hangul_J_PanSios ᇫ HANGUL JONGSEONG PANSIOS */ + /* 0x0ef9 Hangul_J_KkogjiDalrinIeung ? ??? */ + { 0x0efa, 0x11f9 }, /* Hangul_J_YeorinHieuh ᇹ HANGUL JONGSEONG YEORINHIEUH */ + { 0x0eff, 0x20a9 }, /* Korean_Won ₩ WON SIGN */ + { 0x13bc, 0x0152 }, /* OE Œ LATIN CAPITAL LIGATURE OE */ + { 0x13bd, 0x0153 }, /* oe œ LATIN SMALL LIGATURE OE */ + { 0x13be, 0x0178 }, /* Ydiaeresis Ÿ LATIN CAPITAL LETTER Y WITH DIAERESIS */ + { 0x20a0, 0x20a0 }, /* EcuSign ₠ EURO-CURRENCY SIGN */ + { 0x20a1, 0x20a1 }, /* ColonSign ₡ COLON SIGN */ + { 0x20a2, 0x20a2 }, /* CruzeiroSign ₢ CRUZEIRO SIGN */ + { 0x20a3, 0x20a3 }, /* FFrancSign ₣ FRENCH FRANC SIGN */ + { 0x20a4, 0x20a4 }, /* LiraSign ₤ LIRA SIGN */ + { 0x20a5, 0x20a5 }, /* MillSign ₥ MILL SIGN */ + { 0x20a6, 0x20a6 }, /* NairaSign ₦ NAIRA SIGN */ + { 0x20a7, 0x20a7 }, /* PesetaSign ₧ PESETA SIGN */ + { 0x20a8, 0x20a8 }, /* RupeeSign ₨ RUPEE SIGN */ + { 0x20a9, 0x20a9 }, /* WonSign ₩ WON SIGN */ + { 0x20aa, 0x20aa }, /* NewSheqelSign ₪ NEW SHEQEL SIGN */ + { 0x20ab, 0x20ab }, /* DongSign ₫ DONG SIGN */ + { 0x20ac, 0x20ac }, /* EuroSign € EURO SIGN */ + + + /* Following items added to GTK, not in the xterm table */ + + /* A few ASCII control characters */ + + { 0xFF08 /* Backspace */, '\b' }, + { 0xFF09 /* Tab */, '\t' }, + { 0xFF0A /* Linefeed */, '\n' }, + { 0xFF0B /* Vert. Tab */, '\v' }, + { 0xFF0D /* Return */, '\r' }, + { 0xFF1B /* Escape */, '\033' }, + + /* Numeric keypad */ + + { 0xFF80 /* Space */, ' ' }, + { 0xFFAA /* Multiply */, '*' }, + { 0xFFAB /* Add */, '+' }, + { 0xFFAC /* Separator */, ',' }, + { 0xFFAD /* Subtract */, '-' }, + { 0xFFAE /* Decimal */, '.' }, + { 0xFFAF /* Divide */, '/' }, + { 0xFFB0 /* 0 */, '0' }, + { 0xFFB1 /* 1 */, '1' }, + { 0xFFB2 /* 2 */, '2' }, + { 0xFFB3 /* 3 */, '3' }, + { 0xFFB4 /* 4 */, '4' }, + { 0xFFB5 /* 5 */, '5' }, + { 0xFFB6 /* 6 */, '6' }, + { 0xFFB7 /* 7 */, '7' }, + { 0xFFB8 /* 8 */, '8' }, + { 0xFFB9 /* 9 */, '9' }, + { 0xFFBD /* Equal */, '=' }, + + /* End numeric keypad */ + + { 0xFFFF /* Delete */, '\177' } +}; + +static const struct _FcitxUnicodeToKeySym gdk_unicode_to_keysym_tab[] = { + { 0x0abd, 0x002e }, /* decimalpoint . FULL STOP */ + { 0x0ba3, 0x003c }, /* leftcaret < LESS-THAN SIGN */ + { 0x0ba6, 0x003e }, /* rightcaret > GREATER-THAN SIGN */ + { 0x0bc6, 0x005f }, /* underbar _ LOW LINE */ + { 0x0bc0, 0x00af }, /* overbar ¯ MACRON */ + { 0x03c0, 0x0100 }, /* Amacron Ā LATIN CAPITAL LETTER A WITH MACRON */ + { 0x03e0, 0x0101 }, /* amacron ā LATIN SMALL LETTER A WITH MACRON */ + { 0x01c3, 0x0102 }, /* Abreve Ă LATIN CAPITAL LETTER A WITH BREVE */ + { 0x01e3, 0x0103 }, /* abreve ă LATIN SMALL LETTER A WITH BREVE */ + { 0x01a1, 0x0104 }, /* Aogonek Ą LATIN CAPITAL LETTER A WITH OGONEK */ + { 0x01b1, 0x0105 }, /* aogonek ą LATIN SMALL LETTER A WITH OGONEK */ + { 0x01c6, 0x0106 }, /* Cacute Ć LATIN CAPITAL LETTER C WITH ACUTE */ + { 0x01e6, 0x0107 }, /* cacute ć LATIN SMALL LETTER C WITH ACUTE */ + { 0x02c6, 0x0108 }, /* Ccircumflex Ĉ LATIN CAPITAL LETTER C WITH CIRCUMFLEX */ + { 0x02e6, 0x0109 }, /* ccircumflex ĉ LATIN SMALL LETTER C WITH CIRCUMFLEX */ + { 0x02c5, 0x010a }, /* Cabovedot Ċ LATIN CAPITAL LETTER C WITH DOT ABOVE */ + { 0x02e5, 0x010b }, /* cabovedot ċ LATIN SMALL LETTER C WITH DOT ABOVE */ + { 0x01c8, 0x010c }, /* Ccaron Č LATIN CAPITAL LETTER C WITH CARON */ + { 0x01e8, 0x010d }, /* ccaron č LATIN SMALL LETTER C WITH CARON */ + { 0x01cf, 0x010e }, /* Dcaron Ď LATIN CAPITAL LETTER D WITH CARON */ + { 0x01ef, 0x010f }, /* dcaron ď LATIN SMALL LETTER D WITH CARON */ + { 0x01d0, 0x0110 }, /* Dstroke Đ LATIN CAPITAL LETTER D WITH STROKE */ + { 0x01f0, 0x0111 }, /* dstroke đ LATIN SMALL LETTER D WITH STROKE */ + { 0x03aa, 0x0112 }, /* Emacron Ē LATIN CAPITAL LETTER E WITH MACRON */ + { 0x03ba, 0x0113 }, /* emacron ē LATIN SMALL LETTER E WITH MACRON */ + { 0x03cc, 0x0116 }, /* Eabovedot Ė LATIN CAPITAL LETTER E WITH DOT ABOVE */ + { 0x03ec, 0x0117 }, /* eabovedot ė LATIN SMALL LETTER E WITH DOT ABOVE */ + { 0x01ca, 0x0118 }, /* Eogonek Ę LATIN CAPITAL LETTER E WITH OGONEK */ + { 0x01ea, 0x0119 }, /* eogonek ę LATIN SMALL LETTER E WITH OGONEK */ + { 0x01cc, 0x011a }, /* Ecaron Ě LATIN CAPITAL LETTER E WITH CARON */ + { 0x01ec, 0x011b }, /* ecaron ě LATIN SMALL LETTER E WITH CARON */ + { 0x02d8, 0x011c }, /* Gcircumflex Ĝ LATIN CAPITAL LETTER G WITH CIRCUMFLEX */ + { 0x02f8, 0x011d }, /* gcircumflex ĝ LATIN SMALL LETTER G WITH CIRCUMFLEX */ + { 0x02ab, 0x011e }, /* Gbreve Ğ LATIN CAPITAL LETTER G WITH BREVE */ + { 0x02bb, 0x011f }, /* gbreve ğ LATIN SMALL LETTER G WITH BREVE */ + { 0x02d5, 0x0120 }, /* Gabovedot Ġ LATIN CAPITAL LETTER G WITH DOT ABOVE */ + { 0x02f5, 0x0121 }, /* gabovedot ġ LATIN SMALL LETTER G WITH DOT ABOVE */ + { 0x03ab, 0x0122 }, /* Gcedilla Ģ LATIN CAPITAL LETTER G WITH CEDILLA */ + { 0x03bb, 0x0123 }, /* gcedilla ģ LATIN SMALL LETTER G WITH CEDILLA */ + { 0x02a6, 0x0124 }, /* Hcircumflex Ĥ LATIN CAPITAL LETTER H WITH CIRCUMFLEX */ + { 0x02b6, 0x0125 }, /* hcircumflex ĥ LATIN SMALL LETTER H WITH CIRCUMFLEX */ + { 0x02a1, 0x0126 }, /* Hstroke Ħ LATIN CAPITAL LETTER H WITH STROKE */ + { 0x02b1, 0x0127 }, /* hstroke ħ LATIN SMALL LETTER H WITH STROKE */ + { 0x03a5, 0x0128 }, /* Itilde Ĩ LATIN CAPITAL LETTER I WITH TILDE */ + { 0x03b5, 0x0129 }, /* itilde ĩ LATIN SMALL LETTER I WITH TILDE */ + { 0x03cf, 0x012a }, /* Imacron Ī LATIN CAPITAL LETTER I WITH MACRON */ + { 0x03ef, 0x012b }, /* imacron ī LATIN SMALL LETTER I WITH MACRON */ + { 0x03c7, 0x012e }, /* Iogonek Į LATIN CAPITAL LETTER I WITH OGONEK */ + { 0x03e7, 0x012f }, /* iogonek į LATIN SMALL LETTER I WITH OGONEK */ + { 0x02a9, 0x0130 }, /* Iabovedot İ LATIN CAPITAL LETTER I WITH DOT ABOVE */ + { 0x02b9, 0x0131 }, /* idotless ı LATIN SMALL LETTER DOTLESS I */ + { 0x02ac, 0x0134 }, /* Jcircumflex Ĵ LATIN CAPITAL LETTER J WITH CIRCUMFLEX */ + { 0x02bc, 0x0135 }, /* jcircumflex ĵ LATIN SMALL LETTER J WITH CIRCUMFLEX */ + { 0x03d3, 0x0136 }, /* Kcedilla Ķ LATIN CAPITAL LETTER K WITH CEDILLA */ + { 0x03f3, 0x0137 }, /* kcedilla ķ LATIN SMALL LETTER K WITH CEDILLA */ + { 0x03a2, 0x0138 }, /* kra ĸ LATIN SMALL LETTER KRA */ + { 0x01c5, 0x0139 }, /* Lacute Ĺ LATIN CAPITAL LETTER L WITH ACUTE */ + { 0x01e5, 0x013a }, /* lacute ĺ LATIN SMALL LETTER L WITH ACUTE */ + { 0x03a6, 0x013b }, /* Lcedilla Ļ LATIN CAPITAL LETTER L WITH CEDILLA */ + { 0x03b6, 0x013c }, /* lcedilla ļ LATIN SMALL LETTER L WITH CEDILLA */ + { 0x01a5, 0x013d }, /* Lcaron Ľ LATIN CAPITAL LETTER L WITH CARON */ + { 0x01b5, 0x013e }, /* lcaron ľ LATIN SMALL LETTER L WITH CARON */ + { 0x01a3, 0x0141 }, /* Lstroke Ł LATIN CAPITAL LETTER L WITH STROKE */ + { 0x01b3, 0x0142 }, /* lstroke ł LATIN SMALL LETTER L WITH STROKE */ + { 0x01d1, 0x0143 }, /* Nacute Ń LATIN CAPITAL LETTER N WITH ACUTE */ + { 0x01f1, 0x0144 }, /* nacute ń LATIN SMALL LETTER N WITH ACUTE */ + { 0x03d1, 0x0145 }, /* Ncedilla Ņ LATIN CAPITAL LETTER N WITH CEDILLA */ + { 0x03f1, 0x0146 }, /* ncedilla ņ LATIN SMALL LETTER N WITH CEDILLA */ + { 0x01d2, 0x0147 }, /* Ncaron Ň LATIN CAPITAL LETTER N WITH CARON */ + { 0x01f2, 0x0148 }, /* ncaron ň LATIN SMALL LETTER N WITH CARON */ + { 0x03bd, 0x014a }, /* ENG Ŋ LATIN CAPITAL LETTER ENG */ + { 0x03bf, 0x014b }, /* eng ŋ LATIN SMALL LETTER ENG */ + { 0x03d2, 0x014c }, /* Omacron Ō LATIN CAPITAL LETTER O WITH MACRON */ + { 0x03f2, 0x014d }, /* omacron ō LATIN SMALL LETTER O WITH MACRON */ + { 0x01d5, 0x0150 }, /* Odoubleacute Ő LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */ + { 0x01f5, 0x0151 }, /* odoubleacute ő LATIN SMALL LETTER O WITH DOUBLE ACUTE */ + { 0x13bc, 0x0152 }, /* OE Œ LATIN CAPITAL LIGATURE OE */ + { 0x13bd, 0x0153 }, /* oe œ LATIN SMALL LIGATURE OE */ + { 0x01c0, 0x0154 }, /* Racute Ŕ LATIN CAPITAL LETTER R WITH ACUTE */ + { 0x01e0, 0x0155 }, /* racute ŕ LATIN SMALL LETTER R WITH ACUTE */ + { 0x03a3, 0x0156 }, /* Rcedilla Ŗ LATIN CAPITAL LETTER R WITH CEDILLA */ + { 0x03b3, 0x0157 }, /* rcedilla ŗ LATIN SMALL LETTER R WITH CEDILLA */ + { 0x01d8, 0x0158 }, /* Rcaron Ř LATIN CAPITAL LETTER R WITH CARON */ + { 0x01f8, 0x0159 }, /* rcaron ř LATIN SMALL LETTER R WITH CARON */ + { 0x01a6, 0x015a }, /* Sacute Ś LATIN CAPITAL LETTER S WITH ACUTE */ + { 0x01b6, 0x015b }, /* sacute ś LATIN SMALL LETTER S WITH ACUTE */ + { 0x02de, 0x015c }, /* Scircumflex Ŝ LATIN CAPITAL LETTER S WITH CIRCUMFLEX */ + { 0x02fe, 0x015d }, /* scircumflex ŝ LATIN SMALL LETTER S WITH CIRCUMFLEX */ + { 0x01aa, 0x015e }, /* Scedilla Ş LATIN CAPITAL LETTER S WITH CEDILLA */ + { 0x01ba, 0x015f }, /* scedilla ş LATIN SMALL LETTER S WITH CEDILLA */ + { 0x01a9, 0x0160 }, /* Scaron Š LATIN CAPITAL LETTER S WITH CARON */ + { 0x01b9, 0x0161 }, /* scaron š LATIN SMALL LETTER S WITH CARON */ + { 0x01de, 0x0162 }, /* Tcedilla Ţ LATIN CAPITAL LETTER T WITH CEDILLA */ + { 0x01fe, 0x0163 }, /* tcedilla ţ LATIN SMALL LETTER T WITH CEDILLA */ + { 0x01ab, 0x0164 }, /* Tcaron Ť LATIN CAPITAL LETTER T WITH CARON */ + { 0x01bb, 0x0165 }, /* tcaron ť LATIN SMALL LETTER T WITH CARON */ + { 0x03ac, 0x0166 }, /* Tslash Ŧ LATIN CAPITAL LETTER T WITH STROKE */ + { 0x03bc, 0x0167 }, /* tslash ŧ LATIN SMALL LETTER T WITH STROKE */ + { 0x03dd, 0x0168 }, /* Utilde Ũ LATIN CAPITAL LETTER U WITH TILDE */ + { 0x03fd, 0x0169 }, /* utilde ũ LATIN SMALL LETTER U WITH TILDE */ + { 0x03de, 0x016a }, /* Umacron Ū LATIN CAPITAL LETTER U WITH MACRON */ + { 0x03fe, 0x016b }, /* umacron ū LATIN SMALL LETTER U WITH MACRON */ + { 0x02dd, 0x016c }, /* Ubreve Ŭ LATIN CAPITAL LETTER U WITH BREVE */ + { 0x02fd, 0x016d }, /* ubreve ŭ LATIN SMALL LETTER U WITH BREVE */ + { 0x01d9, 0x016e }, /* Uring Ů LATIN CAPITAL LETTER U WITH RING ABOVE */ + { 0x01f9, 0x016f }, /* uring ů LATIN SMALL LETTER U WITH RING ABOVE */ + { 0x01db, 0x0170 }, /* Udoubleacute Ű LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */ + { 0x01fb, 0x0171 }, /* udoubleacute ű LATIN SMALL LETTER U WITH DOUBLE ACUTE */ + { 0x03d9, 0x0172 }, /* Uogonek Ų LATIN CAPITAL LETTER U WITH OGONEK */ + { 0x03f9, 0x0173 }, /* uogonek ų LATIN SMALL LETTER U WITH OGONEK */ + { 0x13be, 0x0178 }, /* Ydiaeresis Ÿ LATIN CAPITAL LETTER Y WITH DIAERESIS */ + { 0x01ac, 0x0179 }, /* Zacute Ź LATIN CAPITAL LETTER Z WITH ACUTE */ + { 0x01bc, 0x017a }, /* zacute ź LATIN SMALL LETTER Z WITH ACUTE */ + { 0x01af, 0x017b }, /* Zabovedot Ż LATIN CAPITAL LETTER Z WITH DOT ABOVE */ + { 0x01bf, 0x017c }, /* zabovedot ż LATIN SMALL LETTER Z WITH DOT ABOVE */ + { 0x01ae, 0x017d }, /* Zcaron Ž LATIN CAPITAL LETTER Z WITH CARON */ + { 0x01be, 0x017e }, /* zcaron ž LATIN SMALL LETTER Z WITH CARON */ + { 0x08f6, 0x0192 }, /* function ƒ LATIN SMALL LETTER F WITH HOOK */ + { 0x01b7, 0x02c7 }, /* caron ˇ CARON */ + { 0x01a2, 0x02d8 }, /* breve ˘ BREVE */ + { 0x01ff, 0x02d9 }, /* abovedot ˙ DOT ABOVE */ + { 0x01b2, 0x02db }, /* ogonek ˛ OGONEK */ + { 0x01bd, 0x02dd }, /* doubleacute ˝ DOUBLE ACUTE ACCENT */ + { 0x07ae, 0x0385 }, /* Greek_accentdieresis ΅ GREEK DIALYTIKA TONOS */ + { 0x07a1, 0x0386 }, /* Greek_ALPHAaccent Ά GREEK CAPITAL LETTER ALPHA WITH TONOS */ + { 0x07a2, 0x0388 }, /* Greek_EPSILONaccent Έ GREEK CAPITAL LETTER EPSILON WITH TONOS */ + { 0x07a3, 0x0389 }, /* Greek_ETAaccent Ή GREEK CAPITAL LETTER ETA WITH TONOS */ + { 0x07a4, 0x038a }, /* Greek_IOTAaccent Ί GREEK CAPITAL LETTER IOTA WITH TONOS */ + { 0x07a7, 0x038c }, /* Greek_OMICRONaccent Ό GREEK CAPITAL LETTER OMICRON WITH TONOS */ + { 0x07a8, 0x038e }, /* Greek_UPSILONaccent Ύ GREEK CAPITAL LETTER UPSILON WITH TONOS */ + { 0x07ab, 0x038f }, /* Greek_OMEGAaccent Ώ GREEK CAPITAL LETTER OMEGA WITH TONOS */ + { 0x07b6, 0x0390 }, /* Greek_iotaaccentdieresis ΐ GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ + { 0x07c1, 0x0391 }, /* Greek_ALPHA Α GREEK CAPITAL LETTER ALPHA */ + { 0x07c2, 0x0392 }, /* Greek_BETA Β GREEK CAPITAL LETTER BETA */ + { 0x07c3, 0x0393 }, /* Greek_GAMMA Γ GREEK CAPITAL LETTER GAMMA */ + { 0x07c4, 0x0394 }, /* Greek_DELTA Δ GREEK CAPITAL LETTER DELTA */ + { 0x07c5, 0x0395 }, /* Greek_EPSILON Ε GREEK CAPITAL LETTER EPSILON */ + { 0x07c6, 0x0396 }, /* Greek_ZETA Ζ GREEK CAPITAL LETTER ZETA */ + { 0x07c7, 0x0397 }, /* Greek_ETA Η GREEK CAPITAL LETTER ETA */ + { 0x07c8, 0x0398 }, /* Greek_THETA Θ GREEK CAPITAL LETTER THETA */ + { 0x07c9, 0x0399 }, /* Greek_IOTA Ι GREEK CAPITAL LETTER IOTA */ + { 0x07ca, 0x039a }, /* Greek_KAPPA Κ GREEK CAPITAL LETTER KAPPA */ + { 0x07cb, 0x039b }, /* Greek_LAMBDA Λ GREEK CAPITAL LETTER LAMDA */ + { 0x07cc, 0x039c }, /* Greek_MU Μ GREEK CAPITAL LETTER MU */ + { 0x07cd, 0x039d }, /* Greek_NU Ν GREEK CAPITAL LETTER NU */ + { 0x07ce, 0x039e }, /* Greek_XI Ξ GREEK CAPITAL LETTER XI */ + { 0x07cf, 0x039f }, /* Greek_OMICRON Ο GREEK CAPITAL LETTER OMICRON */ + { 0x07d0, 0x03a0 }, /* Greek_PI Π GREEK CAPITAL LETTER PI */ + { 0x07d1, 0x03a1 }, /* Greek_RHO Ρ GREEK CAPITAL LETTER RHO */ + { 0x07d2, 0x03a3 }, /* Greek_SIGMA Σ GREEK CAPITAL LETTER SIGMA */ + { 0x07d4, 0x03a4 }, /* Greek_TAU Τ GREEK CAPITAL LETTER TAU */ + { 0x07d5, 0x03a5 }, /* Greek_UPSILON Υ GREEK CAPITAL LETTER UPSILON */ + { 0x07d6, 0x03a6 }, /* Greek_PHI Φ GREEK CAPITAL LETTER PHI */ + { 0x07d7, 0x03a7 }, /* Greek_CHI Χ GREEK CAPITAL LETTER CHI */ + { 0x07d8, 0x03a8 }, /* Greek_PSI Ψ GREEK CAPITAL LETTER PSI */ + { 0x07d9, 0x03a9 }, /* Greek_OMEGA Ω GREEK CAPITAL LETTER OMEGA */ + { 0x07a5, 0x03aa }, /* Greek_IOTAdieresis Ϊ GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */ + { 0x07a9, 0x03ab }, /* Greek_UPSILONdieresis Ϋ GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */ + { 0x07b1, 0x03ac }, /* Greek_alphaaccent ά GREEK SMALL LETTER ALPHA WITH TONOS */ + { 0x07b2, 0x03ad }, /* Greek_epsilonaccent έ GREEK SMALL LETTER EPSILON WITH TONOS */ + { 0x07b3, 0x03ae }, /* Greek_etaaccent ή GREEK SMALL LETTER ETA WITH TONOS */ + { 0x07b4, 0x03af }, /* Greek_iotaaccent ί GREEK SMALL LETTER IOTA WITH TONOS */ + { 0x07ba, 0x03b0 }, /* Greek_upsilonaccentdieresis ΰ GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */ + { 0x07e1, 0x03b1 }, /* Greek_alpha α GREEK SMALL LETTER ALPHA */ + { 0x07e2, 0x03b2 }, /* Greek_beta β GREEK SMALL LETTER BETA */ + { 0x07e3, 0x03b3 }, /* Greek_gamma γ GREEK SMALL LETTER GAMMA */ + { 0x07e4, 0x03b4 }, /* Greek_delta δ GREEK SMALL LETTER DELTA */ + { 0x07e5, 0x03b5 }, /* Greek_epsilon ε GREEK SMALL LETTER EPSILON */ + { 0x07e6, 0x03b6 }, /* Greek_zeta ζ GREEK SMALL LETTER ZETA */ + { 0x07e7, 0x03b7 }, /* Greek_eta η GREEK SMALL LETTER ETA */ + { 0x07e8, 0x03b8 }, /* Greek_theta θ GREEK SMALL LETTER THETA */ + { 0x07e9, 0x03b9 }, /* Greek_iota ι GREEK SMALL LETTER IOTA */ + { 0x07ea, 0x03ba }, /* Greek_kappa κ GREEK SMALL LETTER KAPPA */ + { 0x07eb, 0x03bb }, /* Greek_lambda λ GREEK SMALL LETTER LAMDA */ + { 0x07ec, 0x03bc }, /* Greek_mu μ GREEK SMALL LETTER MU */ + { 0x07ed, 0x03bd }, /* Greek_nu ν GREEK SMALL LETTER NU */ + { 0x07ee, 0x03be }, /* Greek_xi ξ GREEK SMALL LETTER XI */ + { 0x07ef, 0x03bf }, /* Greek_omicron ο GREEK SMALL LETTER OMICRON */ + { 0x07f0, 0x03c0 }, /* Greek_pi π GREEK SMALL LETTER PI */ + { 0x07f1, 0x03c1 }, /* Greek_rho ρ GREEK SMALL LETTER RHO */ + { 0x07f3, 0x03c2 }, /* Greek_finalsmallsigma ς GREEK SMALL LETTER FINAL SIGMA */ + { 0x07f2, 0x03c3 }, /* Greek_sigma σ GREEK SMALL LETTER SIGMA */ + { 0x07f4, 0x03c4 }, /* Greek_tau τ GREEK SMALL LETTER TAU */ + { 0x07f5, 0x03c5 }, /* Greek_upsilon υ GREEK SMALL LETTER UPSILON */ + { 0x07f6, 0x03c6 }, /* Greek_phi φ GREEK SMALL LETTER PHI */ + { 0x07f7, 0x03c7 }, /* Greek_chi χ GREEK SMALL LETTER CHI */ + { 0x07f8, 0x03c8 }, /* Greek_psi ψ GREEK SMALL LETTER PSI */ + { 0x07f9, 0x03c9 }, /* Greek_omega ω GREEK SMALL LETTER OMEGA */ + { 0x07b5, 0x03ca }, /* Greek_iotadieresis ϊ GREEK SMALL LETTER IOTA WITH DIALYTIKA */ + { 0x07b9, 0x03cb }, /* Greek_upsilondieresis ϋ GREEK SMALL LETTER UPSILON WITH DIALYTIKA */ + { 0x07b7, 0x03cc }, /* Greek_omicronaccent ό GREEK SMALL LETTER OMICRON WITH TONOS */ + { 0x07b8, 0x03cd }, /* Greek_upsilonaccent ύ GREEK SMALL LETTER UPSILON WITH TONOS */ + { 0x07bb, 0x03ce }, /* Greek_omegaaccent ώ GREEK SMALL LETTER OMEGA WITH TONOS */ + { 0x06b3, 0x0401 }, /* Cyrillic_IO Ё CYRILLIC CAPITAL LETTER IO */ + { 0x06b1, 0x0402 }, /* Serbian_DJE Ђ CYRILLIC CAPITAL LETTER DJE */ + { 0x06b2, 0x0403 }, /* Macedonia_GJE Ѓ CYRILLIC CAPITAL LETTER GJE */ + { 0x06b4, 0x0404 }, /* Ukrainian_IE Є CYRILLIC CAPITAL LETTER UKRAINIAN IE */ + { 0x06b5, 0x0405 }, /* Macedonia_DSE Ѕ CYRILLIC CAPITAL LETTER DZE */ + { 0x06b6, 0x0406 }, /* Ukrainian_I І CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */ + { 0x06b7, 0x0407 }, /* Ukrainian_YI Ї CYRILLIC CAPITAL LETTER YI */ + { 0x06b8, 0x0408 }, /* Cyrillic_JE Ј CYRILLIC CAPITAL LETTER JE */ + { 0x06b9, 0x0409 }, /* Cyrillic_LJE Љ CYRILLIC CAPITAL LETTER LJE */ + { 0x06ba, 0x040a }, /* Cyrillic_NJE Њ CYRILLIC CAPITAL LETTER NJE */ + { 0x06bb, 0x040b }, /* Serbian_TSHE Ћ CYRILLIC CAPITAL LETTER TSHE */ + { 0x06bc, 0x040c }, /* Macedonia_KJE Ќ CYRILLIC CAPITAL LETTER KJE */ + { 0x06be, 0x040e }, /* Byelorussian_SHORTU Ў CYRILLIC CAPITAL LETTER SHORT U */ + { 0x06bf, 0x040f }, /* Cyrillic_DZHE Џ CYRILLIC CAPITAL LETTER DZHE */ + { 0x06e1, 0x0410 }, /* Cyrillic_A А CYRILLIC CAPITAL LETTER A */ + { 0x06e2, 0x0411 }, /* Cyrillic_BE Б CYRILLIC CAPITAL LETTER BE */ + { 0x06f7, 0x0412 }, /* Cyrillic_VE В CYRILLIC CAPITAL LETTER VE */ + { 0x06e7, 0x0413 }, /* Cyrillic_GHE Г CYRILLIC CAPITAL LETTER GHE */ + { 0x06e4, 0x0414 }, /* Cyrillic_DE Д CYRILLIC CAPITAL LETTER DE */ + { 0x06e5, 0x0415 }, /* Cyrillic_IE Е CYRILLIC CAPITAL LETTER IE */ + { 0x06f6, 0x0416 }, /* Cyrillic_ZHE Ж CYRILLIC CAPITAL LETTER ZHE */ + { 0x06fa, 0x0417 }, /* Cyrillic_ZE З CYRILLIC CAPITAL LETTER ZE */ + { 0x06e9, 0x0418 }, /* Cyrillic_I И CYRILLIC CAPITAL LETTER I */ + { 0x06ea, 0x0419 }, /* Cyrillic_SHORTI Й CYRILLIC CAPITAL LETTER SHORT I */ + { 0x06eb, 0x041a }, /* Cyrillic_KA К CYRILLIC CAPITAL LETTER KA */ + { 0x06ec, 0x041b }, /* Cyrillic_EL Л CYRILLIC CAPITAL LETTER EL */ + { 0x06ed, 0x041c }, /* Cyrillic_EM М CYRILLIC CAPITAL LETTER EM */ + { 0x06ee, 0x041d }, /* Cyrillic_EN Н CYRILLIC CAPITAL LETTER EN */ + { 0x06ef, 0x041e }, /* Cyrillic_O О CYRILLIC CAPITAL LETTER O */ + { 0x06f0, 0x041f }, /* Cyrillic_PE П CYRILLIC CAPITAL LETTER PE */ + { 0x06f2, 0x0420 }, /* Cyrillic_ER Р CYRILLIC CAPITAL LETTER ER */ + { 0x06f3, 0x0421 }, /* Cyrillic_ES С CYRILLIC CAPITAL LETTER ES */ + { 0x06f4, 0x0422 }, /* Cyrillic_TE Т CYRILLIC CAPITAL LETTER TE */ + { 0x06f5, 0x0423 }, /* Cyrillic_U У CYRILLIC CAPITAL LETTER U */ + { 0x06e6, 0x0424 }, /* Cyrillic_EF Ф CYRILLIC CAPITAL LETTER EF */ + { 0x06e8, 0x0425 }, /* Cyrillic_HA Х CYRILLIC CAPITAL LETTER HA */ + { 0x06e3, 0x0426 }, /* Cyrillic_TSE Ц CYRILLIC CAPITAL LETTER TSE */ + { 0x06fe, 0x0427 }, /* Cyrillic_CHE Ч CYRILLIC CAPITAL LETTER CHE */ + { 0x06fb, 0x0428 }, /* Cyrillic_SHA Ш CYRILLIC CAPITAL LETTER SHA */ + { 0x06fd, 0x0429 }, /* Cyrillic_SHCHA Щ CYRILLIC CAPITAL LETTER SHCHA */ + { 0x06ff, 0x042a }, /* Cyrillic_HARDSIGN Ъ CYRILLIC CAPITAL LETTER HARD SIGN */ + { 0x06f9, 0x042b }, /* Cyrillic_YERU Ы CYRILLIC CAPITAL LETTER YERU */ + { 0x06f8, 0x042c }, /* Cyrillic_SOFTSIGN Ь CYRILLIC CAPITAL LETTER SOFT SIGN */ + { 0x06fc, 0x042d }, /* Cyrillic_E Э CYRILLIC CAPITAL LETTER E */ + { 0x06e0, 0x042e }, /* Cyrillic_YU Ю CYRILLIC CAPITAL LETTER YU */ + { 0x06f1, 0x042f }, /* Cyrillic_YA Я CYRILLIC CAPITAL LETTER YA */ + { 0x06c1, 0x0430 }, /* Cyrillic_a а CYRILLIC SMALL LETTER A */ + { 0x06c2, 0x0431 }, /* Cyrillic_be б CYRILLIC SMALL LETTER BE */ + { 0x06d7, 0x0432 }, /* Cyrillic_ve в CYRILLIC SMALL LETTER VE */ + { 0x06c7, 0x0433 }, /* Cyrillic_ghe г CYRILLIC SMALL LETTER GHE */ + { 0x06c4, 0x0434 }, /* Cyrillic_de д CYRILLIC SMALL LETTER DE */ + { 0x06c5, 0x0435 }, /* Cyrillic_ie е CYRILLIC SMALL LETTER IE */ + { 0x06d6, 0x0436 }, /* Cyrillic_zhe ж CYRILLIC SMALL LETTER ZHE */ + { 0x06da, 0x0437 }, /* Cyrillic_ze з CYRILLIC SMALL LETTER ZE */ + { 0x06c9, 0x0438 }, /* Cyrillic_i и CYRILLIC SMALL LETTER I */ + { 0x06ca, 0x0439 }, /* Cyrillic_shorti й CYRILLIC SMALL LETTER SHORT I */ + { 0x06cb, 0x043a }, /* Cyrillic_ka к CYRILLIC SMALL LETTER KA */ + { 0x06cc, 0x043b }, /* Cyrillic_el л CYRILLIC SMALL LETTER EL */ + { 0x06cd, 0x043c }, /* Cyrillic_em м CYRILLIC SMALL LETTER EM */ + { 0x06ce, 0x043d }, /* Cyrillic_en н CYRILLIC SMALL LETTER EN */ + { 0x06cf, 0x043e }, /* Cyrillic_o о CYRILLIC SMALL LETTER O */ + { 0x06d0, 0x043f }, /* Cyrillic_pe п CYRILLIC SMALL LETTER PE */ + { 0x06d2, 0x0440 }, /* Cyrillic_er р CYRILLIC SMALL LETTER ER */ + { 0x06d3, 0x0441 }, /* Cyrillic_es с CYRILLIC SMALL LETTER ES */ + { 0x06d4, 0x0442 }, /* Cyrillic_te т CYRILLIC SMALL LETTER TE */ + { 0x06d5, 0x0443 }, /* Cyrillic_u у CYRILLIC SMALL LETTER U */ + { 0x06c6, 0x0444 }, /* Cyrillic_ef ф CYRILLIC SMALL LETTER EF */ + { 0x06c8, 0x0445 }, /* Cyrillic_ha х CYRILLIC SMALL LETTER HA */ + { 0x06c3, 0x0446 }, /* Cyrillic_tse ц CYRILLIC SMALL LETTER TSE */ + { 0x06de, 0x0447 }, /* Cyrillic_che ч CYRILLIC SMALL LETTER CHE */ + { 0x06db, 0x0448 }, /* Cyrillic_sha ш CYRILLIC SMALL LETTER SHA */ + { 0x06dd, 0x0449 }, /* Cyrillic_shcha щ CYRILLIC SMALL LETTER SHCHA */ + { 0x06df, 0x044a }, /* Cyrillic_hardsign ъ CYRILLIC SMALL LETTER HARD SIGN */ + { 0x06d9, 0x044b }, /* Cyrillic_yeru ы CYRILLIC SMALL LETTER YERU */ + { 0x06d8, 0x044c }, /* Cyrillic_softsign ь CYRILLIC SMALL LETTER SOFT SIGN */ + { 0x06dc, 0x044d }, /* Cyrillic_e э CYRILLIC SMALL LETTER E */ + { 0x06c0, 0x044e }, /* Cyrillic_yu ю CYRILLIC SMALL LETTER YU */ + { 0x06d1, 0x044f }, /* Cyrillic_ya я CYRILLIC SMALL LETTER YA */ + { 0x06a3, 0x0451 }, /* Cyrillic_io ё CYRILLIC SMALL LETTER IO */ + { 0x06a1, 0x0452 }, /* Serbian_dje ђ CYRILLIC SMALL LETTER DJE */ + { 0x06a2, 0x0453 }, /* Macedonia_gje ѓ CYRILLIC SMALL LETTER GJE */ + { 0x06a4, 0x0454 }, /* Ukrainian_ie є CYRILLIC SMALL LETTER UKRAINIAN IE */ + { 0x06a5, 0x0455 }, /* Macedonia_dse ѕ CYRILLIC SMALL LETTER DZE */ + { 0x06a6, 0x0456 }, /* Ukrainian_i і CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */ + { 0x06a7, 0x0457 }, /* Ukrainian_yi ї CYRILLIC SMALL LETTER YI */ + { 0x06a8, 0x0458 }, /* Cyrillic_je ј CYRILLIC SMALL LETTER JE */ + { 0x06a9, 0x0459 }, /* Cyrillic_lje љ CYRILLIC SMALL LETTER LJE */ + { 0x06aa, 0x045a }, /* Cyrillic_nje њ CYRILLIC SMALL LETTER NJE */ + { 0x06ab, 0x045b }, /* Serbian_tshe ћ CYRILLIC SMALL LETTER TSHE */ + { 0x06ac, 0x045c }, /* Macedonia_kje ќ CYRILLIC SMALL LETTER KJE */ + { 0x06ae, 0x045e }, /* Byelorussian_shortu ў CYRILLIC SMALL LETTER SHORT U */ + { 0x06af, 0x045f }, /* Cyrillic_dzhe џ CYRILLIC SMALL LETTER DZHE */ + { 0x0ce0, 0x05d0 }, /* hebrew_aleph א HEBREW LETTER ALEF */ + { 0x0ce1, 0x05d1 }, /* hebrew_bet ב HEBREW LETTER BET */ + { 0x0ce2, 0x05d2 }, /* hebrew_gimel ג HEBREW LETTER GIMEL */ + { 0x0ce3, 0x05d3 }, /* hebrew_dalet ד HEBREW LETTER DALET */ + { 0x0ce4, 0x05d4 }, /* hebrew_he ה HEBREW LETTER HE */ + { 0x0ce5, 0x05d5 }, /* hebrew_waw ו HEBREW LETTER VAV */ + { 0x0ce6, 0x05d6 }, /* hebrew_zain ז HEBREW LETTER ZAYIN */ + { 0x0ce7, 0x05d7 }, /* hebrew_chet ח HEBREW LETTER HET */ + { 0x0ce8, 0x05d8 }, /* hebrew_tet ט HEBREW LETTER TET */ + { 0x0ce9, 0x05d9 }, /* hebrew_yod י HEBREW LETTER YOD */ + { 0x0cea, 0x05da }, /* hebrew_finalkaph ך HEBREW LETTER FINAL KAF */ + { 0x0ceb, 0x05db }, /* hebrew_kaph כ HEBREW LETTER KAF */ + { 0x0cec, 0x05dc }, /* hebrew_lamed ל HEBREW LETTER LAMED */ + { 0x0ced, 0x05dd }, /* hebrew_finalmem ם HEBREW LETTER FINAL MEM */ + { 0x0cee, 0x05de }, /* hebrew_mem מ HEBREW LETTER MEM */ + { 0x0cef, 0x05df }, /* hebrew_finalnun ן HEBREW LETTER FINAL NUN */ + { 0x0cf0, 0x05e0 }, /* hebrew_nun נ HEBREW LETTER NUN */ + { 0x0cf1, 0x05e1 }, /* hebrew_samech ס HEBREW LETTER SAMEKH */ + { 0x0cf2, 0x05e2 }, /* hebrew_ayin ע HEBREW LETTER AYIN */ + { 0x0cf3, 0x05e3 }, /* hebrew_finalpe ף HEBREW LETTER FINAL PE */ + { 0x0cf4, 0x05e4 }, /* hebrew_pe פ HEBREW LETTER PE */ + { 0x0cf5, 0x05e5 }, /* hebrew_finalzade ץ HEBREW LETTER FINAL TSADI */ + { 0x0cf6, 0x05e6 }, /* hebrew_zade צ HEBREW LETTER TSADI */ + { 0x0cf7, 0x05e7 }, /* hebrew_qoph ק HEBREW LETTER QOF */ + { 0x0cf8, 0x05e8 }, /* hebrew_resh ר HEBREW LETTER RESH */ + { 0x0cf9, 0x05e9 }, /* hebrew_shin ש HEBREW LETTER SHIN */ + { 0x0cfa, 0x05ea }, /* hebrew_taw ת HEBREW LETTER TAV */ + { 0x05ac, 0x060c }, /* Arabic_comma ، ARABIC COMMA */ + { 0x05bb, 0x061b }, /* Arabic_semicolon ؛ ARABIC SEMICOLON */ + { 0x05bf, 0x061f }, /* Arabic_question_mark ؟ ARABIC QUESTION MARK */ + { 0x05c1, 0x0621 }, /* Arabic_hamza ء ARABIC LETTER HAMZA */ + { 0x05c2, 0x0622 }, /* Arabic_maddaonalef آ ARABIC LETTER ALEF WITH MADDA ABOVE */ + { 0x05c3, 0x0623 }, /* Arabic_hamzaonalef أ ARABIC LETTER ALEF WITH HAMZA ABOVE */ + { 0x05c4, 0x0624 }, /* Arabic_hamzaonwaw ؤ ARABIC LETTER WAW WITH HAMZA ABOVE */ + { 0x05c5, 0x0625 }, /* Arabic_hamzaunderalef إ ARABIC LETTER ALEF WITH HAMZA BELOW */ + { 0x05c6, 0x0626 }, /* Arabic_hamzaonyeh ئ ARABIC LETTER YEH WITH HAMZA ABOVE */ + { 0x05c7, 0x0627 }, /* Arabic_alef ا ARABIC LETTER ALEF */ + { 0x05c8, 0x0628 }, /* Arabic_beh ب ARABIC LETTER BEH */ + { 0x05c9, 0x0629 }, /* Arabic_tehmarbuta ة ARABIC LETTER TEH MARBUTA */ + { 0x05ca, 0x062a }, /* Arabic_teh ت ARABIC LETTER TEH */ + { 0x05cb, 0x062b }, /* Arabic_theh ث ARABIC LETTER THEH */ + { 0x05cc, 0x062c }, /* Arabic_jeem ج ARABIC LETTER JEEM */ + { 0x05cd, 0x062d }, /* Arabic_hah ح ARABIC LETTER HAH */ + { 0x05ce, 0x062e }, /* Arabic_khah خ ARABIC LETTER KHAH */ + { 0x05cf, 0x062f }, /* Arabic_dal د ARABIC LETTER DAL */ + { 0x05d0, 0x0630 }, /* Arabic_thal ذ ARABIC LETTER THAL */ + { 0x05d1, 0x0631 }, /* Arabic_ra ر ARABIC LETTER REH */ + { 0x05d2, 0x0632 }, /* Arabic_zain ز ARABIC LETTER ZAIN */ + { 0x05d3, 0x0633 }, /* Arabic_seen س ARABIC LETTER SEEN */ + { 0x05d4, 0x0634 }, /* Arabic_sheen ش ARABIC LETTER SHEEN */ + { 0x05d5, 0x0635 }, /* Arabic_sad ص ARABIC LETTER SAD */ + { 0x05d6, 0x0636 }, /* Arabic_dad ض ARABIC LETTER DAD */ + { 0x05d7, 0x0637 }, /* Arabic_tah ط ARABIC LETTER TAH */ + { 0x05d8, 0x0638 }, /* Arabic_zah ظ ARABIC LETTER ZAH */ + { 0x05d9, 0x0639 }, /* Arabic_ain ع ARABIC LETTER AIN */ + { 0x05da, 0x063a }, /* Arabic_ghain غ ARABIC LETTER GHAIN */ + { 0x05e0, 0x0640 }, /* Arabic_tatweel ـ ARABIC TATWEEL */ + { 0x05e1, 0x0641 }, /* Arabic_feh ف ARABIC LETTER FEH */ + { 0x05e2, 0x0642 }, /* Arabic_qaf ق ARABIC LETTER QAF */ + { 0x05e3, 0x0643 }, /* Arabic_kaf ك ARABIC LETTER KAF */ + { 0x05e4, 0x0644 }, /* Arabic_lam ل ARABIC LETTER LAM */ + { 0x05e5, 0x0645 }, /* Arabic_meem م ARABIC LETTER MEEM */ + { 0x05e6, 0x0646 }, /* Arabic_noon ن ARABIC LETTER NOON */ + { 0x05e7, 0x0647 }, /* Arabic_ha ه ARABIC LETTER HEH */ + { 0x05e8, 0x0648 }, /* Arabic_waw و ARABIC LETTER WAW */ + { 0x05e9, 0x0649 }, /* Arabic_alefmaksura ى ARABIC LETTER ALEF MAKSURA */ + { 0x05ea, 0x064a }, /* Arabic_yeh ي ARABIC LETTER YEH */ + { 0x05eb, 0x064b }, /* Arabic_fathatan ً ARABIC FATHATAN */ + { 0x05ec, 0x064c }, /* Arabic_dammatan ٌ ARABIC DAMMATAN */ + { 0x05ed, 0x064d }, /* Arabic_kasratan ٍ ARABIC KASRATAN */ + { 0x05ee, 0x064e }, /* Arabic_fatha َ ARABIC FATHA */ + { 0x05ef, 0x064f }, /* Arabic_damma ُ ARABIC DAMMA */ + { 0x05f0, 0x0650 }, /* Arabic_kasra ِ ARABIC KASRA */ + { 0x05f1, 0x0651 }, /* Arabic_shadda ّ ARABIC SHADDA */ + { 0x05f2, 0x0652 }, /* Arabic_sukun ْ ARABIC SUKUN */ + { 0x0da1, 0x0e01 }, /* Thai_kokai ก THAI CHARACTER KO KAI */ + { 0x0da2, 0x0e02 }, /* Thai_khokhai ข THAI CHARACTER KHO KHAI */ + { 0x0da3, 0x0e03 }, /* Thai_khokhuat ฃ THAI CHARACTER KHO KHUAT */ + { 0x0da4, 0x0e04 }, /* Thai_khokhwai ค THAI CHARACTER KHO KHWAI */ + { 0x0da5, 0x0e05 }, /* Thai_khokhon ฅ THAI CHARACTER KHO KHON */ + { 0x0da6, 0x0e06 }, /* Thai_khorakhang ฆ THAI CHARACTER KHO RAKHANG */ + { 0x0da7, 0x0e07 }, /* Thai_ngongu ง THAI CHARACTER NGO NGU */ + { 0x0da8, 0x0e08 }, /* Thai_chochan จ THAI CHARACTER CHO CHAN */ + { 0x0da9, 0x0e09 }, /* Thai_choching ฉ THAI CHARACTER CHO CHING */ + { 0x0daa, 0x0e0a }, /* Thai_chochang ช THAI CHARACTER CHO CHANG */ + { 0x0dab, 0x0e0b }, /* Thai_soso ซ THAI CHARACTER SO SO */ + { 0x0dac, 0x0e0c }, /* Thai_chochoe ฌ THAI CHARACTER CHO CHOE */ + { 0x0dad, 0x0e0d }, /* Thai_yoying ญ THAI CHARACTER YO YING */ + { 0x0dae, 0x0e0e }, /* Thai_dochada ฎ THAI CHARACTER DO CHADA */ + { 0x0daf, 0x0e0f }, /* Thai_topatak ฏ THAI CHARACTER TO PATAK */ + { 0x0db0, 0x0e10 }, /* Thai_thothan ฐ THAI CHARACTER THO THAN */ + { 0x0db1, 0x0e11 }, /* Thai_thonangmontho ฑ THAI CHARACTER THO NANGMONTHO */ + { 0x0db2, 0x0e12 }, /* Thai_thophuthao ฒ THAI CHARACTER THO PHUTHAO */ + { 0x0db3, 0x0e13 }, /* Thai_nonen ณ THAI CHARACTER NO NEN */ + { 0x0db4, 0x0e14 }, /* Thai_dodek ด THAI CHARACTER DO DEK */ + { 0x0db5, 0x0e15 }, /* Thai_totao ต THAI CHARACTER TO TAO */ + { 0x0db6, 0x0e16 }, /* Thai_thothung ถ THAI CHARACTER THO THUNG */ + { 0x0db7, 0x0e17 }, /* Thai_thothahan ท THAI CHARACTER THO THAHAN */ + { 0x0db8, 0x0e18 }, /* Thai_thothong ธ THAI CHARACTER THO THONG */ + { 0x0db9, 0x0e19 }, /* Thai_nonu น THAI CHARACTER NO NU */ + { 0x0dba, 0x0e1a }, /* Thai_bobaimai บ THAI CHARACTER BO BAIMAI */ + { 0x0dbb, 0x0e1b }, /* Thai_popla ป THAI CHARACTER PO PLA */ + { 0x0dbc, 0x0e1c }, /* Thai_phophung ผ THAI CHARACTER PHO PHUNG */ + { 0x0dbd, 0x0e1d }, /* Thai_fofa ฝ THAI CHARACTER FO FA */ + { 0x0dbe, 0x0e1e }, /* Thai_phophan พ THAI CHARACTER PHO PHAN */ + { 0x0dbf, 0x0e1f }, /* Thai_fofan ฟ THAI CHARACTER FO FAN */ + { 0x0dc0, 0x0e20 }, /* Thai_phosamphao ภ THAI CHARACTER PHO SAMPHAO */ + { 0x0dc1, 0x0e21 }, /* Thai_moma ม THAI CHARACTER MO MA */ + { 0x0dc2, 0x0e22 }, /* Thai_yoyak ย THAI CHARACTER YO YAK */ + { 0x0dc3, 0x0e23 }, /* Thai_rorua ร THAI CHARACTER RO RUA */ + { 0x0dc4, 0x0e24 }, /* Thai_ru ฤ THAI CHARACTER RU */ + { 0x0dc5, 0x0e25 }, /* Thai_loling ล THAI CHARACTER LO LING */ + { 0x0dc6, 0x0e26 }, /* Thai_lu ฦ THAI CHARACTER LU */ + { 0x0dc7, 0x0e27 }, /* Thai_wowaen ว THAI CHARACTER WO WAEN */ + { 0x0dc8, 0x0e28 }, /* Thai_sosala ศ THAI CHARACTER SO SALA */ + { 0x0dc9, 0x0e29 }, /* Thai_sorusi ษ THAI CHARACTER SO RUSI */ + { 0x0dca, 0x0e2a }, /* Thai_sosua ส THAI CHARACTER SO SUA */ + { 0x0dcb, 0x0e2b }, /* Thai_hohip ห THAI CHARACTER HO HIP */ + { 0x0dcc, 0x0e2c }, /* Thai_lochula ฬ THAI CHARACTER LO CHULA */ + { 0x0dcd, 0x0e2d }, /* Thai_oang อ THAI CHARACTER O ANG */ + { 0x0dce, 0x0e2e }, /* Thai_honokhuk ฮ THAI CHARACTER HO NOKHUK */ + { 0x0dcf, 0x0e2f }, /* Thai_paiyannoi ฯ THAI CHARACTER PAIYANNOI */ + { 0x0dd0, 0x0e30 }, /* Thai_saraa ะ THAI CHARACTER SARA A */ + { 0x0dd1, 0x0e31 }, /* Thai_maihanakat ั THAI CHARACTER MAI HAN-AKAT */ + { 0x0dd2, 0x0e32 }, /* Thai_saraaa า THAI CHARACTER SARA AA */ + { 0x0dd3, 0x0e33 }, /* Thai_saraam ำ THAI CHARACTER SARA AM */ + { 0x0dd4, 0x0e34 }, /* Thai_sarai ิ THAI CHARACTER SARA I */ + { 0x0dd5, 0x0e35 }, /* Thai_saraii ี THAI CHARACTER SARA II */ + { 0x0dd6, 0x0e36 }, /* Thai_saraue ึ THAI CHARACTER SARA UE */ + { 0x0dd7, 0x0e37 }, /* Thai_sarauee ื THAI CHARACTER SARA UEE */ + { 0x0dd8, 0x0e38 }, /* Thai_sarau ุ THAI CHARACTER SARA U */ + { 0x0dd9, 0x0e39 }, /* Thai_sarauu ู THAI CHARACTER SARA UU */ + { 0x0dda, 0x0e3a }, /* Thai_phinthu ฺ THAI CHARACTER PHINTHU */ + { 0x0ddf, 0x0e3f }, /* Thai_baht ฿ THAI CURRENCY SYMBOL BAHT */ + { 0x0de0, 0x0e40 }, /* Thai_sarae เ THAI CHARACTER SARA E */ + { 0x0de1, 0x0e41 }, /* Thai_saraae แ THAI CHARACTER SARA AE */ + { 0x0de2, 0x0e42 }, /* Thai_sarao โ THAI CHARACTER SARA O */ + { 0x0de3, 0x0e43 }, /* Thai_saraaimaimuan ใ THAI CHARACTER SARA AI MAIMUAN */ + { 0x0de4, 0x0e44 }, /* Thai_saraaimaimalai ไ THAI CHARACTER SARA AI MAIMALAI */ + { 0x0de5, 0x0e45 }, /* Thai_lakkhangyao ๅ THAI CHARACTER LAKKHANGYAO */ + { 0x0de6, 0x0e46 }, /* Thai_maiyamok ๆ THAI CHARACTER MAIYAMOK */ + { 0x0de7, 0x0e47 }, /* Thai_maitaikhu ็ THAI CHARACTER MAITAIKHU */ + { 0x0de8, 0x0e48 }, /* Thai_maiek ่ THAI CHARACTER MAI EK */ + { 0x0de9, 0x0e49 }, /* Thai_maitho ้ THAI CHARACTER MAI THO */ + { 0x0dea, 0x0e4a }, /* Thai_maitri ๊ THAI CHARACTER MAI TRI */ + { 0x0deb, 0x0e4b }, /* Thai_maichattawa ๋ THAI CHARACTER MAI CHATTAWA */ + { 0x0dec, 0x0e4c }, /* Thai_thanthakhat ์ THAI CHARACTER THANTHAKHAT */ + { 0x0ded, 0x0e4d }, /* Thai_nikhahit ํ THAI CHARACTER NIKHAHIT */ + { 0x0df0, 0x0e50 }, /* Thai_leksun ๐ THAI DIGIT ZERO */ + { 0x0df1, 0x0e51 }, /* Thai_leknung ๑ THAI DIGIT ONE */ + { 0x0df2, 0x0e52 }, /* Thai_leksong ๒ THAI DIGIT TWO */ + { 0x0df3, 0x0e53 }, /* Thai_leksam ๓ THAI DIGIT THREE */ + { 0x0df4, 0x0e54 }, /* Thai_leksi ๔ THAI DIGIT FOUR */ + { 0x0df5, 0x0e55 }, /* Thai_lekha ๕ THAI DIGIT FIVE */ + { 0x0df6, 0x0e56 }, /* Thai_lekhok ๖ THAI DIGIT SIX */ + { 0x0df7, 0x0e57 }, /* Thai_lekchet ๗ THAI DIGIT SEVEN */ + { 0x0df8, 0x0e58 }, /* Thai_lekpaet ๘ THAI DIGIT EIGHT */ + { 0x0df9, 0x0e59 }, /* Thai_lekkao ๙ THAI DIGIT NINE */ + { 0x0ed4, 0x11a8 }, /* Hangul_J_Kiyeog ᆨ HANGUL JONGSEONG KIYEOK */ + { 0x0ed5, 0x11a9 }, /* Hangul_J_SsangKiyeog ᆩ HANGUL JONGSEONG SSANGKIYEOK */ + { 0x0ed6, 0x11aa }, /* Hangul_J_KiyeogSios ᆪ HANGUL JONGSEONG KIYEOK-SIOS */ + { 0x0ed7, 0x11ab }, /* Hangul_J_Nieun ᆫ HANGUL JONGSEONG NIEUN */ + { 0x0ed8, 0x11ac }, /* Hangul_J_NieunJieuj ᆬ HANGUL JONGSEONG NIEUN-CIEUC */ + { 0x0ed9, 0x11ad }, /* Hangul_J_NieunHieuh ᆭ HANGUL JONGSEONG NIEUN-HIEUH */ + { 0x0eda, 0x11ae }, /* Hangul_J_Dikeud ᆮ HANGUL JONGSEONG TIKEUT */ + { 0x0edb, 0x11af }, /* Hangul_J_Rieul ᆯ HANGUL JONGSEONG RIEUL */ + { 0x0edc, 0x11b0 }, /* Hangul_J_RieulKiyeog ᆰ HANGUL JONGSEONG RIEUL-KIYEOK */ + { 0x0edd, 0x11b1 }, /* Hangul_J_RieulMieum ᆱ HANGUL JONGSEONG RIEUL-MIEUM */ + { 0x0ede, 0x11b2 }, /* Hangul_J_RieulPieub ᆲ HANGUL JONGSEONG RIEUL-PIEUP */ + { 0x0edf, 0x11b3 }, /* Hangul_J_RieulSios ᆳ HANGUL JONGSEONG RIEUL-SIOS */ + { 0x0ee0, 0x11b4 }, /* Hangul_J_RieulTieut ᆴ HANGUL JONGSEONG RIEUL-THIEUTH */ + { 0x0ee1, 0x11b5 }, /* Hangul_J_RieulPhieuf ᆵ HANGUL JONGSEONG RIEUL-PHIEUPH */ + { 0x0ee2, 0x11b6 }, /* Hangul_J_RieulHieuh ᆶ HANGUL JONGSEONG RIEUL-HIEUH */ + { 0x0ee3, 0x11b7 }, /* Hangul_J_Mieum ᆷ HANGUL JONGSEONG MIEUM */ + { 0x0ee4, 0x11b8 }, /* Hangul_J_Pieub ᆸ HANGUL JONGSEONG PIEUP */ + { 0x0ee5, 0x11b9 }, /* Hangul_J_PieubSios ᆹ HANGUL JONGSEONG PIEUP-SIOS */ + { 0x0ee6, 0x11ba }, /* Hangul_J_Sios ᆺ HANGUL JONGSEONG SIOS */ + { 0x0ee7, 0x11bb }, /* Hangul_J_SsangSios ᆻ HANGUL JONGSEONG SSANGSIOS */ + { 0x0ee8, 0x11bc }, /* Hangul_J_Ieung ᆼ HANGUL JONGSEONG IEUNG */ + { 0x0ee9, 0x11bd }, /* Hangul_J_Jieuj ᆽ HANGUL JONGSEONG CIEUC */ + { 0x0eea, 0x11be }, /* Hangul_J_Cieuc ᆾ HANGUL JONGSEONG CHIEUCH */ + { 0x0eeb, 0x11bf }, /* Hangul_J_Khieuq ᆿ HANGUL JONGSEONG KHIEUKH */ + { 0x0eec, 0x11c0 }, /* Hangul_J_Tieut ᇀ HANGUL JONGSEONG THIEUTH */ + { 0x0eed, 0x11c1 }, /* Hangul_J_Phieuf ᇁ HANGUL JONGSEONG PHIEUPH */ + { 0x0eee, 0x11c2 }, /* Hangul_J_Hieuh ᇂ HANGUL JONGSEONG HIEUH */ + { 0x0ef8, 0x11eb }, /* Hangul_J_PanSios ᇫ HANGUL JONGSEONG PANSIOS */ + { 0x0efa, 0x11f9 }, /* Hangul_J_YeorinHieuh ᇹ HANGUL JONGSEONG YEORINHIEUH */ + { 0x0aa2, 0x2002 }, /* enspace   EN SPACE */ + { 0x0aa1, 0x2003 }, /* emspace   EM SPACE */ + { 0x0aa3, 0x2004 }, /* em3space   THREE-PER-EM SPACE */ + { 0x0aa4, 0x2005 }, /* em4space   FOUR-PER-EM SPACE */ + { 0x0aa5, 0x2007 }, /* digitspace   FIGURE SPACE */ + { 0x0aa6, 0x2008 }, /* punctspace   PUNCTUATION SPACE */ + { 0x0aa7, 0x2009 }, /* thinspace   THIN SPACE */ + { 0x0aa8, 0x200a }, /* hairspace   HAIR SPACE */ + { 0x0abb, 0x2012 }, /* figdash ‒ FIGURE DASH */ + { 0x0aaa, 0x2013 }, /* endash – EN DASH */ + { 0x0aa9, 0x2014 }, /* emdash — EM DASH */ + { 0x07af, 0x2015 }, /* Greek_horizbar ― HORIZONTAL BAR */ + { 0x0cdf, 0x2017 }, /* hebrew_doublelowline ‗ DOUBLE LOW LINE */ + { 0x0ad0, 0x2018 }, /* leftsinglequotemark ‘ LEFT SINGLE QUOTATION MARK */ + { 0x0ad1, 0x2019 }, /* rightsinglequotemark ’ RIGHT SINGLE QUOTATION MARK */ + { 0x0afd, 0x201a }, /* singlelowquotemark ‚ SINGLE LOW-9 QUOTATION MARK */ + { 0x0ad2, 0x201c }, /* leftdoublequotemark “ LEFT DOUBLE QUOTATION MARK */ + { 0x0ad3, 0x201d }, /* rightdoublequotemark ” RIGHT DOUBLE QUOTATION MARK */ + { 0x0afe, 0x201e }, /* doublelowquotemark „ DOUBLE LOW-9 QUOTATION MARK */ + { 0x0af1, 0x2020 }, /* dagger † DAGGER */ + { 0x0af2, 0x2021 }, /* doubledagger ‡ DOUBLE DAGGER */ + { 0x0ae6, 0x2022 }, /* enfilledcircbullet • BULLET */ + { 0x0aae, 0x2026 }, /* ellipsis … HORIZONTAL ELLIPSIS */ + { 0x0ad6, 0x2032 }, /* minutes ′ PRIME */ + { 0x0ad7, 0x2033 }, /* seconds ″ DOUBLE PRIME */ + { 0x0afc, 0x2038 }, /* caret ‸ CARET */ + { 0x047e, 0x203e }, /* overline ‾ OVERLINE */ + { 0x20a0, 0x20a0 }, /* EcuSign ₠ EURO-CURRENCY SIGN */ + { 0x20a1, 0x20a1 }, /* ColonSign ₡ COLON SIGN */ + { 0x20a2, 0x20a2 }, /* CruzeiroSign ₢ CRUZEIRO SIGN */ + { 0x20a3, 0x20a3 }, /* FFrancSign ₣ FRENCH FRANC SIGN */ + { 0x20a4, 0x20a4 }, /* LiraSign ₤ LIRA SIGN */ + { 0x20a5, 0x20a5 }, /* MillSign ₥ MILL SIGN */ + { 0x20a6, 0x20a6 }, /* NairaSign ₦ NAIRA SIGN */ + { 0x20a7, 0x20a7 }, /* PesetaSign ₧ PESETA SIGN */ + { 0x20a8, 0x20a8 }, /* RupeeSign ₨ RUPEE SIGN */ + { 0x0eff, 0x20a9 }, /* Korean_Won ₩ WON SIGN */ + { 0x20a9, 0x20a9 }, /* WonSign ₩ WON SIGN */ + { 0x20aa, 0x20aa }, /* NewSheqelSign ₪ NEW SHEQEL SIGN */ + { 0x20ab, 0x20ab }, /* DongSign ₫ DONG SIGN */ + { 0x20ac, 0x20ac }, /* EuroSign € EURO SIGN */ + { 0x0ab8, 0x2105 }, /* careof ℅ CARE OF */ + { 0x06b0, 0x2116 }, /* numerosign № NUMERO SIGN */ + { 0x0afb, 0x2117 }, /* phonographcopyright ℗ SOUND RECORDING COPYRIGHT */ + { 0x0ad4, 0x211e }, /* prescription ℞ PRESCRIPTION TAKE */ + { 0x0ac9, 0x2122 }, /* trademark ™ TRADE MARK SIGN */ + { 0x0ab0, 0x2153 }, /* onethird ⅓ VULGAR FRACTION ONE THIRD */ + { 0x0ab1, 0x2154 }, /* twothirds ⅔ VULGAR FRACTION TWO THIRDS */ + { 0x0ab2, 0x2155 }, /* onefifth ⅕ VULGAR FRACTION ONE FIFTH */ + { 0x0ab3, 0x2156 }, /* twofifths ⅖ VULGAR FRACTION TWO FIFTHS */ + { 0x0ab4, 0x2157 }, /* threefifths ⅗ VULGAR FRACTION THREE FIFTHS */ + { 0x0ab5, 0x2158 }, /* fourfifths ⅘ VULGAR FRACTION FOUR FIFTHS */ + { 0x0ab6, 0x2159 }, /* onesixth ⅙ VULGAR FRACTION ONE SIXTH */ + { 0x0ab7, 0x215a }, /* fivesixths ⅚ VULGAR FRACTION FIVE SIXTHS */ + { 0x0ac3, 0x215b }, /* oneeighth ⅛ VULGAR FRACTION ONE EIGHTH */ + { 0x0ac4, 0x215c }, /* threeeighths ⅜ VULGAR FRACTION THREE EIGHTHS */ + { 0x0ac5, 0x215d }, /* fiveeighths ⅝ VULGAR FRACTION FIVE EIGHTHS */ + { 0x0ac6, 0x215e }, /* seveneighths ⅞ VULGAR FRACTION SEVEN EIGHTHS */ + { 0x08fb, 0x2190 }, /* leftarrow ← LEFTWARDS ARROW */ + { 0x08fc, 0x2191 }, /* uparrow ↑ UPWARDS ARROW */ + { 0x08fd, 0x2192 }, /* rightarrow → RIGHTWARDS ARROW */ + { 0x08fe, 0x2193 }, /* downarrow ↓ DOWNWARDS ARROW */ + { 0x08ce, 0x21d2 }, /* implies ⇒ RIGHTWARDS DOUBLE ARROW */ + { 0x08cd, 0x21d4 }, /* ifonlyif ⇔ LEFT RIGHT DOUBLE ARROW */ + { 0x08ef, 0x2202 }, /* partialderivative ∂ PARTIAL DIFFERENTIAL */ + { 0x08c5, 0x2207 }, /* nabla ∇ NABLA */ + { 0x0bca, 0x2218 }, /* jot ∘ RING OPERATOR */ + { 0x08d6, 0x221a }, /* radical √ SQUARE ROOT */ + { 0x08c1, 0x221d }, /* variation ∝ PROPORTIONAL TO */ + { 0x08c2, 0x221e }, /* infinity ∞ INFINITY */ + { 0x08de, 0x2227 }, /* logicaland ∧ LOGICAL AND */ + { 0x0ba9, 0x2227 }, /* upcaret ∧ LOGICAL AND */ + { 0x08df, 0x2228 }, /* logicalor ∨ LOGICAL OR */ + { 0x0ba8, 0x2228 }, /* downcaret ∨ LOGICAL OR */ + { 0x08dc, 0x2229 }, /* intersection ∩ INTERSECTION */ + { 0x0bc3, 0x2229 }, /* upshoe ∩ INTERSECTION */ + { 0x08dd, 0x222a }, /* union ∪ UNION */ + { 0x0bd6, 0x222a }, /* downshoe ∪ UNION */ + { 0x08bf, 0x222b }, /* integral ∫ INTEGRAL */ + { 0x08c0, 0x2234 }, /* therefore ∴ THEREFORE */ + { 0x08c8, 0x2245 }, /* approximate ≅ APPROXIMATELY EQUAL TO */ + { 0x08bd, 0x2260 }, /* notequal ≠ NOT EQUAL TO */ + { 0x08cf, 0x2261 }, /* identical ≡ IDENTICAL TO */ + { 0x08bc, 0x2264 }, /* lessthanequal ≤ LESS-THAN OR EQUAL TO */ + { 0x08be, 0x2265 }, /* greaterthanequal ≥ GREATER-THAN OR EQUAL TO */ + { 0x08da, 0x2282 }, /* includedin ⊂ SUBSET OF */ + { 0x0bda, 0x2282 }, /* leftshoe ⊂ SUBSET OF */ + { 0x08db, 0x2283 }, /* includes ⊃ SUPERSET OF */ + { 0x0bd8, 0x2283 }, /* rightshoe ⊃ SUPERSET OF */ + { 0x0bfc, 0x22a2 }, /* righttack ⊢ RIGHT TACK */ + { 0x0bdc, 0x22a3 }, /* lefttack ⊣ LEFT TACK */ + { 0x0bc2, 0x22a4 }, /* downtack ⊤ DOWN TACK */ + { 0x0bce, 0x22a5 }, /* uptack ⊥ UP TACK */ + { 0x0bd3, 0x2308 }, /* upstile ⌈ LEFT CEILING */ + { 0x0bc4, 0x230a }, /* downstile ⌊ LEFT FLOOR */ + { 0x0afa, 0x2315 }, /* telephonerecorder ⌕ TELEPHONE RECORDER */ + { 0x08a4, 0x2320 }, /* topintegral ⌠ TOP HALF INTEGRAL */ + { 0x08a5, 0x2321 }, /* botintegral ⌡ BOTTOM HALF INTEGRAL */ + { 0x0abc, 0x2329 }, /* leftanglebracket 〈 LEFT-POINTING ANGLE BRACKET */ + { 0x0abe, 0x232a }, /* rightanglebracket 〉 RIGHT-POINTING ANGLE BRACKET */ + { 0x0bcc, 0x2395 }, /* quad ⎕ APL FUNCTIONAL SYMBOL QUAD (Unicode 3.0) */ + { 0x09e2, 0x2409 }, /* ht ␉ SYMBOL FOR HORIZONTAL TABULATION */ + { 0x09e5, 0x240a }, /* lf ␊ SYMBOL FOR LINE FEED */ + { 0x09e9, 0x240b }, /* vt ␋ SYMBOL FOR VERTICAL TABULATION */ + { 0x09e3, 0x240c }, /* ff ␌ SYMBOL FOR FORM FEED */ + { 0x09e4, 0x240d }, /* cr ␍ SYMBOL FOR CARRIAGE RETURN */ + { 0x09df, 0x2422 }, /* blank ␢ BLANK SYMBOL */ + { 0x09e8, 0x2424 }, /* nl ␤ SYMBOL FOR NEWLINE */ + { 0x09f1, 0x2500 }, /* horizlinescan5 ─ BOX DRAWINGS LIGHT HORIZONTAL */ + { 0x08a6, 0x2502 }, /* vertconnector │ BOX DRAWINGS LIGHT VERTICAL */ + { 0x09f8, 0x2502 }, /* vertbar │ BOX DRAWINGS LIGHT VERTICAL */ + { 0x09ec, 0x250c }, /* upleftcorner ┌ BOX DRAWINGS LIGHT DOWN AND RIGHT */ + { 0x09eb, 0x2510 }, /* uprightcorner ┐ BOX DRAWINGS LIGHT DOWN AND LEFT */ + { 0x09ed, 0x2514 }, /* lowleftcorner └ BOX DRAWINGS LIGHT UP AND RIGHT */ + { 0x09ea, 0x2518 }, /* lowrightcorner ┘ BOX DRAWINGS LIGHT UP AND LEFT */ + { 0x09f4, 0x251c }, /* leftt ├ BOX DRAWINGS LIGHT VERTICAL AND RIGHT */ + { 0x09f5, 0x2524 }, /* rightt ┤ BOX DRAWINGS LIGHT VERTICAL AND LEFT */ + { 0x09f7, 0x252c }, /* topt ┬ BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */ + { 0x09f6, 0x2534 }, /* bott ┴ BOX DRAWINGS LIGHT UP AND HORIZONTAL */ + { 0x09ee, 0x253c }, /* crossinglines ┼ BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */ + { 0x09e1, 0x2592 }, /* checkerboard ▒ MEDIUM SHADE */ + { 0x0adf, 0x25a0 }, /* emfilledrect ■ BLACK SQUARE */ + { 0x0acf, 0x25a1 }, /* emopenrectangle □ WHITE SQUARE */ + { 0x0ae7, 0x25aa }, /* enfilledsqbullet ▪ BLACK SMALL SQUARE */ + { 0x0ae1, 0x25ab }, /* enopensquarebullet ▫ WHITE SMALL SQUARE */ + { 0x0adb, 0x25ac }, /* filledrectbullet ▬ BLACK RECTANGLE */ + { 0x0ae2, 0x25ad }, /* openrectbullet ▭ WHITE RECTANGLE */ + { 0x0ae8, 0x25b2 }, /* filledtribulletup ▲ BLACK UP-POINTING TRIANGLE */ + { 0x0ae3, 0x25b3 }, /* opentribulletup △ WHITE UP-POINTING TRIANGLE */ + { 0x0add, 0x25b6 }, /* filledrighttribullet ▶ BLACK RIGHT-POINTING TRIANGLE */ + { 0x0acd, 0x25b7 }, /* rightopentriangle ▷ WHITE RIGHT-POINTING TRIANGLE */ + { 0x0ae9, 0x25bc }, /* filledtribulletdown ▼ BLACK DOWN-POINTING TRIANGLE */ + { 0x0ae4, 0x25bd }, /* opentribulletdown ▽ WHITE DOWN-POINTING TRIANGLE */ + { 0x0adc, 0x25c0 }, /* filledlefttribullet ◀ BLACK LEFT-POINTING TRIANGLE */ + { 0x0acc, 0x25c1 }, /* leftopentriangle ◁ WHITE LEFT-POINTING TRIANGLE */ + { 0x09e0, 0x25c6 }, /* soliddiamond ◆ BLACK DIAMOND */ + { 0x0ace, 0x25cb }, /* emopencircle ○ WHITE CIRCLE */ + { 0x0bcf, 0x25cb }, /* circle ○ WHITE CIRCLE */ + { 0x0ade, 0x25cf }, /* emfilledcircle ● BLACK CIRCLE */ + { 0x0ae0, 0x25e6 }, /* enopencircbullet ◦ WHITE BULLET */ + { 0x0ae5, 0x2606 }, /* openstar ☆ WHITE STAR */ + { 0x0af9, 0x260e }, /* telephone ☎ BLACK TELEPHONE */ + { 0x0aca, 0x2613 }, /* signaturemark ☓ SALTIRE */ + { 0x0aea, 0x261c }, /* leftpointer ☜ WHITE LEFT POINTING INDEX */ + { 0x0aeb, 0x261e }, /* rightpointer ☞ WHITE RIGHT POINTING INDEX */ + { 0x0af8, 0x2640 }, /* femalesymbol ♀ FEMALE SIGN */ + { 0x0af7, 0x2642 }, /* malesymbol ♂ MALE SIGN */ + { 0x0aec, 0x2663 }, /* club ♣ BLACK CLUB SUIT */ + { 0x0aee, 0x2665 }, /* heart ♥ BLACK HEART SUIT */ + { 0x0aed, 0x2666 }, /* diamond ♦ BLACK DIAMOND SUIT */ + { 0x0af6, 0x266d }, /* musicalflat ♭ MUSIC FLAT SIGN */ + { 0x0af5, 0x266f }, /* musicalsharp ♯ MUSIC SHARP SIGN */ + { 0x0af3, 0x2713 }, /* checkmark ✓ CHECK MARK */ + { 0x0af4, 0x2717 }, /* ballotcross ✗ BALLOT X */ + { 0x0ad9, 0x271d }, /* latincross ✝ LATIN CROSS */ + { 0x0af0, 0x2720 }, /* maltesecross ✠ MALTESE CROSS */ + { 0x04a4, 0x3001 }, /* kana_comma 、 IDEOGRAPHIC COMMA */ + { 0x04a1, 0x3002 }, /* kana_fullstop 。 IDEOGRAPHIC FULL STOP */ + { 0x04a2, 0x300c }, /* kana_openingbracket 「 LEFT CORNER BRACKET */ + { 0x04a3, 0x300d }, /* kana_closingbracket 」 RIGHT CORNER BRACKET */ + { 0x04de, 0x309b }, /* voicedsound ゛ KATAKANA-HIRAGANA VOICED SOUND MARK */ + { 0x04df, 0x309c }, /* semivoicedsound ゜ KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */ + { 0x04a7, 0x30a1 }, /* kana_a ァ KATAKANA LETTER SMALL A */ + { 0x04b1, 0x30a2 }, /* kana_A ア KATAKANA LETTER A */ + { 0x04a8, 0x30a3 }, /* kana_i ィ KATAKANA LETTER SMALL I */ + { 0x04b2, 0x30a4 }, /* kana_I イ KATAKANA LETTER I */ + { 0x04a9, 0x30a5 }, /* kana_u ゥ KATAKANA LETTER SMALL U */ + { 0x04b3, 0x30a6 }, /* kana_U ウ KATAKANA LETTER U */ + { 0x04aa, 0x30a7 }, /* kana_e ェ KATAKANA LETTER SMALL E */ + { 0x04b4, 0x30a8 }, /* kana_E エ KATAKANA LETTER E */ + { 0x04ab, 0x30a9 }, /* kana_o ォ KATAKANA LETTER SMALL O */ + { 0x04b5, 0x30aa }, /* kana_O オ KATAKANA LETTER O */ + { 0x04b6, 0x30ab }, /* kana_KA カ KATAKANA LETTER KA */ + { 0x04b7, 0x30ad }, /* kana_KI キ KATAKANA LETTER KI */ + { 0x04b8, 0x30af }, /* kana_KU ク KATAKANA LETTER KU */ + { 0x04b9, 0x30b1 }, /* kana_KE ケ KATAKANA LETTER KE */ + { 0x04ba, 0x30b3 }, /* kana_KO コ KATAKANA LETTER KO */ + { 0x04bb, 0x30b5 }, /* kana_SA サ KATAKANA LETTER SA */ + { 0x04bc, 0x30b7 }, /* kana_SHI シ KATAKANA LETTER SI */ + { 0x04bd, 0x30b9 }, /* kana_SU ス KATAKANA LETTER SU */ + { 0x04be, 0x30bb }, /* kana_SE セ KATAKANA LETTER SE */ + { 0x04bf, 0x30bd }, /* kana_SO ソ KATAKANA LETTER SO */ + { 0x04c0, 0x30bf }, /* kana_TA タ KATAKANA LETTER TA */ + { 0x04c1, 0x30c1 }, /* kana_CHI チ KATAKANA LETTER TI */ + { 0x04af, 0x30c3 }, /* kana_tsu ッ KATAKANA LETTER SMALL TU */ + { 0x04c2, 0x30c4 }, /* kana_TSU ツ KATAKANA LETTER TU */ + { 0x04c3, 0x30c6 }, /* kana_TE テ KATAKANA LETTER TE */ + { 0x04c4, 0x30c8 }, /* kana_TO ト KATAKANA LETTER TO */ + { 0x04c5, 0x30ca }, /* kana_NA ナ KATAKANA LETTER NA */ + { 0x04c6, 0x30cb }, /* kana_NI ニ KATAKANA LETTER NI */ + { 0x04c7, 0x30cc }, /* kana_NU ヌ KATAKANA LETTER NU */ + { 0x04c8, 0x30cd }, /* kana_NE ネ KATAKANA LETTER NE */ + { 0x04c9, 0x30ce }, /* kana_NO ノ KATAKANA LETTER NO */ + { 0x04ca, 0x30cf }, /* kana_HA ハ KATAKANA LETTER HA */ + { 0x04cb, 0x30d2 }, /* kana_HI ヒ KATAKANA LETTER HI */ + { 0x04cc, 0x30d5 }, /* kana_FU フ KATAKANA LETTER HU */ + { 0x04cd, 0x30d8 }, /* kana_HE ヘ KATAKANA LETTER HE */ + { 0x04ce, 0x30db }, /* kana_HO ホ KATAKANA LETTER HO */ + { 0x04cf, 0x30de }, /* kana_MA マ KATAKANA LETTER MA */ + { 0x04d0, 0x30df }, /* kana_MI ミ KATAKANA LETTER MI */ + { 0x04d1, 0x30e0 }, /* kana_MU ム KATAKANA LETTER MU */ + { 0x04d2, 0x30e1 }, /* kana_ME メ KATAKANA LETTER ME */ + { 0x04d3, 0x30e2 }, /* kana_MO モ KATAKANA LETTER MO */ + { 0x04ac, 0x30e3 }, /* kana_ya ャ KATAKANA LETTER SMALL YA */ + { 0x04d4, 0x30e4 }, /* kana_YA ヤ KATAKANA LETTER YA */ + { 0x04ad, 0x30e5 }, /* kana_yu ュ KATAKANA LETTER SMALL YU */ + { 0x04d5, 0x30e6 }, /* kana_YU ユ KATAKANA LETTER YU */ + { 0x04ae, 0x30e7 }, /* kana_yo ョ KATAKANA LETTER SMALL YO */ + { 0x04d6, 0x30e8 }, /* kana_YO ヨ KATAKANA LETTER YO */ + { 0x04d7, 0x30e9 }, /* kana_RA ラ KATAKANA LETTER RA */ + { 0x04d8, 0x30ea }, /* kana_RI リ KATAKANA LETTER RI */ + { 0x04d9, 0x30eb }, /* kana_RU ル KATAKANA LETTER RU */ + { 0x04da, 0x30ec }, /* kana_RE レ KATAKANA LETTER RE */ + { 0x04db, 0x30ed }, /* kana_RO ロ KATAKANA LETTER RO */ + { 0x04dc, 0x30ef }, /* kana_WA ワ KATAKANA LETTER WA */ + { 0x04a6, 0x30f2 }, /* kana_WO ヲ KATAKANA LETTER WO */ + { 0x04dd, 0x30f3 }, /* kana_N ン KATAKANA LETTER N */ + { 0x04a5, 0x30fb }, /* kana_conjunctive ・ KATAKANA MIDDLE DOT */ + { 0x04b0, 0x30fc }, /* prolongedsound ー KATAKANA-HIRAGANA PROLONGED SOUND MARK */ + { 0x0ea1, 0x3131 }, /* Hangul_Kiyeog ㄱ HANGUL LETTER KIYEOK */ + { 0x0ea2, 0x3132 }, /* Hangul_SsangKiyeog ㄲ HANGUL LETTER SSANGKIYEOK */ + { 0x0ea3, 0x3133 }, /* Hangul_KiyeogSios ㄳ HANGUL LETTER KIYEOK-SIOS */ + { 0x0ea4, 0x3134 }, /* Hangul_Nieun ㄴ HANGUL LETTER NIEUN */ + { 0x0ea5, 0x3135 }, /* Hangul_NieunJieuj ㄵ HANGUL LETTER NIEUN-CIEUC */ + { 0x0ea6, 0x3136 }, /* Hangul_NieunHieuh ㄶ HANGUL LETTER NIEUN-HIEUH */ + { 0x0ea7, 0x3137 }, /* Hangul_Dikeud ㄷ HANGUL LETTER TIKEUT */ + { 0x0ea8, 0x3138 }, /* Hangul_SsangDikeud ㄸ HANGUL LETTER SSANGTIKEUT */ + { 0x0ea9, 0x3139 }, /* Hangul_Rieul ㄹ HANGUL LETTER RIEUL */ + { 0x0eaa, 0x313a }, /* Hangul_RieulKiyeog ㄺ HANGUL LETTER RIEUL-KIYEOK */ + { 0x0eab, 0x313b }, /* Hangul_RieulMieum ㄻ HANGUL LETTER RIEUL-MIEUM */ + { 0x0eac, 0x313c }, /* Hangul_RieulPieub ㄼ HANGUL LETTER RIEUL-PIEUP */ + { 0x0ead, 0x313d }, /* Hangul_RieulSios ㄽ HANGUL LETTER RIEUL-SIOS */ + { 0x0eae, 0x313e }, /* Hangul_RieulTieut ㄾ HANGUL LETTER RIEUL-THIEUTH */ + { 0x0eaf, 0x313f }, /* Hangul_RieulPhieuf ㄿ HANGUL LETTER RIEUL-PHIEUPH */ + { 0x0eb0, 0x3140 }, /* Hangul_RieulHieuh ㅀ HANGUL LETTER RIEUL-HIEUH */ + { 0x0eb1, 0x3141 }, /* Hangul_Mieum ㅁ HANGUL LETTER MIEUM */ + { 0x0eb2, 0x3142 }, /* Hangul_Pieub ㅂ HANGUL LETTER PIEUP */ + { 0x0eb3, 0x3143 }, /* Hangul_SsangPieub ㅃ HANGUL LETTER SSANGPIEUP */ + { 0x0eb4, 0x3144 }, /* Hangul_PieubSios ㅄ HANGUL LETTER PIEUP-SIOS */ + { 0x0eb5, 0x3145 }, /* Hangul_Sios ㅅ HANGUL LETTER SIOS */ + { 0x0eb6, 0x3146 }, /* Hangul_SsangSios ㅆ HANGUL LETTER SSANGSIOS */ + { 0x0eb7, 0x3147 }, /* Hangul_Ieung ㅇ HANGUL LETTER IEUNG */ + { 0x0eb8, 0x3148 }, /* Hangul_Jieuj ㅈ HANGUL LETTER CIEUC */ + { 0x0eb9, 0x3149 }, /* Hangul_SsangJieuj ㅉ HANGUL LETTER SSANGCIEUC */ + { 0x0eba, 0x314a }, /* Hangul_Cieuc ㅊ HANGUL LETTER CHIEUCH */ + { 0x0ebb, 0x314b }, /* Hangul_Khieuq ㅋ HANGUL LETTER KHIEUKH */ + { 0x0ebc, 0x314c }, /* Hangul_Tieut ㅌ HANGUL LETTER THIEUTH */ + { 0x0ebd, 0x314d }, /* Hangul_Phieuf ㅍ HANGUL LETTER PHIEUPH */ + { 0x0ebe, 0x314e }, /* Hangul_Hieuh ㅎ HANGUL LETTER HIEUH */ + { 0x0ebf, 0x314f }, /* Hangul_A ㅏ HANGUL LETTER A */ + { 0x0ec0, 0x3150 }, /* Hangul_AE ㅐ HANGUL LETTER AE */ + { 0x0ec1, 0x3151 }, /* Hangul_YA ㅑ HANGUL LETTER YA */ + { 0x0ec2, 0x3152 }, /* Hangul_YAE ㅒ HANGUL LETTER YAE */ + { 0x0ec3, 0x3153 }, /* Hangul_EO ㅓ HANGUL LETTER EO */ + { 0x0ec4, 0x3154 }, /* Hangul_E ㅔ HANGUL LETTER E */ + { 0x0ec5, 0x3155 }, /* Hangul_YEO ㅕ HANGUL LETTER YEO */ + { 0x0ec6, 0x3156 }, /* Hangul_YE ㅖ HANGUL LETTER YE */ + { 0x0ec7, 0x3157 }, /* Hangul_O ㅗ HANGUL LETTER O */ + { 0x0ec8, 0x3158 }, /* Hangul_WA ㅘ HANGUL LETTER WA */ + { 0x0ec9, 0x3159 }, /* Hangul_WAE ㅙ HANGUL LETTER WAE */ + { 0x0eca, 0x315a }, /* Hangul_OE ㅚ HANGUL LETTER OE */ + { 0x0ecb, 0x315b }, /* Hangul_YO ㅛ HANGUL LETTER YO */ + { 0x0ecc, 0x315c }, /* Hangul_U ㅜ HANGUL LETTER U */ + { 0x0ecd, 0x315d }, /* Hangul_WEO ㅝ HANGUL LETTER WEO */ + { 0x0ece, 0x315e }, /* Hangul_WE ㅞ HANGUL LETTER WE */ + { 0x0ecf, 0x315f }, /* Hangul_WI ㅟ HANGUL LETTER WI */ + { 0x0ed0, 0x3160 }, /* Hangul_YU ㅠ HANGUL LETTER YU */ + { 0x0ed1, 0x3161 }, /* Hangul_EU ㅡ HANGUL LETTER EU */ + { 0x0ed2, 0x3162 }, /* Hangul_YI ㅢ HANGUL LETTER YI */ + { 0x0ed3, 0x3163 }, /* Hangul_I ㅣ HANGUL LETTER I */ + { 0x0eef, 0x316d }, /* Hangul_RieulYeorinHieuh ㅭ HANGUL LETTER RIEUL-YEORINHIEUH */ + { 0x0ef0, 0x3171 }, /* Hangul_SunkyeongeumMieum ㅱ HANGUL LETTER KAPYEOUNMIEUM */ + { 0x0ef1, 0x3178 }, /* Hangul_SunkyeongeumPieub ㅸ HANGUL LETTER KAPYEOUNPIEUP */ + { 0x0ef2, 0x317f }, /* Hangul_PanSios ㅿ HANGUL LETTER PANSIOS */ + { 0x0ef4, 0x3184 }, /* Hangul_SunkyeongeumPhieuf ㆄ HANGUL LETTER KAPYEOUNPHIEUPH */ + { 0x0ef5, 0x3186 }, /* Hangul_YeorinHieuh ㆆ HANGUL LETTER YEORINHIEUH */ + { 0x0ef6, 0x318d }, /* Hangul_AraeA ㆍ HANGUL LETTER ARAEA */ + { 0x0ef7, 0x318e }, /* Hangul_AraeAE ㆎ HANGUL LETTER ARAEAE */ +}; + +#endif // KEYDATA_H diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keyserver_x11.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keyserver_x11.h new file mode 100644 index 000000000..e735210e3 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keyserver_x11.h @@ -0,0 +1,173 @@ +/* + Copyright (C) 2001 Ellis Whitehead + + Win32 port: + Copyright (C) 2004 Jaroslaw Staniek + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + */ + +#ifndef KEYSERVER_X11_H +#define KEYSERVER_X11_H + +#include + +struct TransKey { + int keySymQt; + uint keySymX; +}; + +static const TransKey g_rgQtToSymX[] = { + { Qt::Key_Escape, XK_Escape }, + { Qt::Key_Tab, XK_Tab }, + { Qt::Key_Backtab, XK_ISO_Left_Tab }, + { Qt::Key_Backspace, XK_BackSpace }, + { Qt::Key_Return, XK_Return }, + { Qt::Key_Enter, XK_KP_Enter }, + { Qt::Key_Insert, XK_Insert }, + { Qt::Key_Delete, XK_Delete }, + { Qt::Key_Pause, XK_Pause }, +#ifdef sun + { Qt::Key_Print, XK_F22 }, +#else + { Qt::Key_Print, XK_Print }, +#endif + { Qt::Key_SysReq, XK_Sys_Req }, + { Qt::Key_Home, XK_Home }, + { Qt::Key_End, XK_End }, + { Qt::Key_Left, XK_Left }, + { Qt::Key_Up, XK_Up }, + { Qt::Key_Right, XK_Right }, + { Qt::Key_Down, XK_Down }, + //{ Qt::Key_Shift, 0 }, + //{ Qt::Key_Control, 0 }, + //{ Qt::Key_Meta, 0 }, + //{ Qt::Key_Alt, 0 }, + { Qt::Key_CapsLock, XK_Caps_Lock }, + { Qt::Key_NumLock, XK_Num_Lock }, + { Qt::Key_ScrollLock, XK_Scroll_Lock }, + { Qt::Key_F1, XK_F1 }, + { Qt::Key_F2, XK_F2 }, + { Qt::Key_F3, XK_F3 }, + { Qt::Key_F4, XK_F4 }, + { Qt::Key_F5, XK_F5 }, + { Qt::Key_F6, XK_F6 }, + { Qt::Key_F7, XK_F7 }, + { Qt::Key_F8, XK_F8 }, + { Qt::Key_F9, XK_F9 }, + { Qt::Key_F10, XK_F10 }, + { Qt::Key_F11, XK_F11 }, + { Qt::Key_F12, XK_F12 }, + { Qt::Key_F13, XK_F13 }, + { Qt::Key_F14, XK_F14 }, + { Qt::Key_F15, XK_F15 }, + { Qt::Key_F16, XK_F16 }, + { Qt::Key_F17, XK_F17 }, + { Qt::Key_F18, XK_F18 }, + { Qt::Key_F19, XK_F19 }, + { Qt::Key_F20, XK_F20 }, + { Qt::Key_F21, XK_F21 }, + { Qt::Key_F22, XK_F22 }, + { Qt::Key_F23, XK_F23 }, + { Qt::Key_F24, XK_F24 }, + { Qt::Key_F25, XK_F25 }, + { Qt::Key_F26, XK_F26 }, + { Qt::Key_F27, XK_F27 }, + { Qt::Key_F28, XK_F28 }, + { Qt::Key_F29, XK_F29 }, + { Qt::Key_F30, XK_F30 }, + { Qt::Key_F31, XK_F31 }, + { Qt::Key_F32, XK_F32 }, + { Qt::Key_F33, XK_F33 }, + { Qt::Key_F34, XK_F34 }, + { Qt::Key_F35, XK_F35 }, + { Qt::Key_Super_L, XK_Super_L }, + { Qt::Key_Super_R, XK_Super_R }, + { Qt::Key_Menu, XK_Menu }, + { Qt::Key_Hyper_L, XK_Hyper_L }, + { Qt::Key_Hyper_R, XK_Hyper_R }, + { Qt::Key_Help, XK_Help }, + + { '/', XK_KP_Divide }, + { '*', XK_KP_Multiply }, + { '-', XK_KP_Subtract }, + { '+', XK_KP_Add }, + { Qt::Key_Return, XK_KP_Enter }, + {Qt::Key_Multi_key, XK_Multi_key}, + {Qt::Key_Codeinput, XK_Codeinput}, + {Qt::Key_SingleCandidate, XK_SingleCandidate}, + {Qt::Key_MultipleCandidate, XK_MultipleCandidate}, + {Qt::Key_PreviousCandidate, XK_PreviousCandidate}, + {Qt::Key_Mode_switch, XK_Mode_switch}, + {Qt::Key_Kanji, XK_Kanji}, + {Qt::Key_Muhenkan, XK_Muhenkan}, + {Qt::Key_Henkan, XK_Henkan}, + {Qt::Key_Romaji, XK_Romaji}, + {Qt::Key_Hiragana, XK_Hiragana}, + {Qt::Key_Katakana, XK_Katakana}, + {Qt::Key_Hiragana_Katakana, XK_Hiragana_Katakana}, + {Qt::Key_Zenkaku, XK_Zenkaku}, + {Qt::Key_Hankaku, XK_Hankaku}, + {Qt::Key_Zenkaku_Hankaku, XK_Zenkaku_Hankaku}, + {Qt::Key_Touroku, XK_Touroku}, + {Qt::Key_Massyo, XK_Massyo}, + {Qt::Key_Kana_Lock, XK_Kana_Lock}, + {Qt::Key_Kana_Shift, XK_Kana_Shift}, + {Qt::Key_Eisu_Shift, XK_Eisu_Shift}, + {Qt::Key_Eisu_toggle, XK_Eisu_toggle}, + {Qt::Key_Hangul, XK_Hangul}, + {Qt::Key_Hangul_Start, XK_Hangul_Start}, + {Qt::Key_Hangul_End, XK_Hangul_End}, + {Qt::Key_Hangul_Hanja, XK_Hangul_Hanja}, + {Qt::Key_Hangul_Jamo, XK_Hangul_Jamo}, + {Qt::Key_Hangul_Romaja, XK_Hangul_Romaja}, + {Qt::Key_Hangul_Jeonja, XK_Hangul_Jeonja}, + {Qt::Key_Hangul_Banja, XK_Hangul_Banja}, + {Qt::Key_Hangul_PreHanja, XK_Hangul_PreHanja}, + {Qt::Key_Hangul_PostHanja, XK_Hangul_PostHanja}, + {Qt::Key_Hangul_Special, XK_Hangul_Special}, +}; + +#include + +inline int map_sym_to_qt(uint keySym) +{ + if (keySym < 0x1000) { + if (keySym >= 'a' && keySym <= 'z') + return QChar(keySym).toUpper().unicode(); + return keySym; + } +#ifdef Q_WS_WIN + if (keySym < 0x3000) + return keySym; +#else + if (keySym < 0x3000) + return keySym | Qt::UNICODE_ACCEL; + + for (uint i = 0; i < sizeof(g_rgQtToSymX) / sizeof(TransKey); i++) + if (g_rgQtToSymX[i].keySymX == keySym) + return g_rgQtToSymX[i].keySymQt; +#endif + return Qt::Key_unknown; +} + +static bool symToKeyQt(uint keySym, int& keyQt) +{ + keyQt = map_sym_to_qt(keySym); + return (keyQt != Qt::Key_unknown); +} + +#endif diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.cpp new file mode 100644 index 000000000..a4dec94c7 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.cpp @@ -0,0 +1,56 @@ +/*************************************************************************** + * Copyright (C) 2012~2013 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include "keyuni.h" +#include "keydata.h" + +uint32_t +FcitxKeySymToUnicode (uint32_t keyval) +{ + int min = 0; + int max = sizeof (gdk_keysym_to_unicode_tab) / sizeof(gdk_keysym_to_unicode_tab[0]) - 1; + int mid; + + /* First check for Latin-1 characters (1:1 mapping) */ + if ((keyval >= 0x0020 && keyval <= 0x007e) || + (keyval >= 0x00a0 && keyval <= 0x00ff)) + return keyval; + + /* Also check for directly encoded 24-bit UCS characters: + */ + if ((keyval & 0xff000000) == 0x01000000) + return keyval & 0x00ffffff; + + /* binary search in table */ + while (max >= min) { + mid = (min + max) / 2; + if (gdk_keysym_to_unicode_tab[mid].keysym < keyval) + min = mid + 1; + else if (gdk_keysym_to_unicode_tab[mid].keysym > keyval) + max = mid - 1; + else { + /* found it */ + return gdk_keysym_to_unicode_tab[mid].ucs; + } + } + + /* No matching Unicode value found */ + return 0; +} diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.h new file mode 100644 index 000000000..02af14d12 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.h @@ -0,0 +1,29 @@ +/*************************************************************************** + * Copyright (C) 2012~2013 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef KEYUNI_H +#define KEYUNI_H + +#include + +quint32 +FcitxKeySymToUnicode (quint32 keyval); + + +#endif // KEYUNI_H diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/main.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/main.cpp new file mode 100644 index 000000000..d522818f9 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/main.cpp @@ -0,0 +1,35 @@ +/*************************************************************************** + * Copyright (C) 2012~2013 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include "main.h" + + +QStringList QFcitxPlatformInputContextPlugin::keys() const +{ + return QStringList(QStringLiteral("fcitx")); + +} + +QFcitxPlatformInputContext *QFcitxPlatformInputContextPlugin::create(const QString& system, const QStringList& paramList) +{ + Q_UNUSED(paramList); + if (system.compare(system, QStringLiteral("fcitx"), Qt::CaseInsensitive) == 0) + return new QFcitxPlatformInputContext; + return 0; +} diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/main.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/main.h new file mode 100644 index 000000000..9938da17b --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/main.h @@ -0,0 +1,37 @@ +/*************************************************************************** + * Copyright (C) 2012~2013 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef MAIN_H +#define MAIN_H + +#include +#include + +#include "qfcitxplatforminputcontext.h" + +class QFcitxPlatformInputContextPlugin : public QPlatformInputContextPlugin +{ + Q_OBJECT +public: + Q_PLUGIN_METADATA(IID QPlatformInputContextFactoryInterface_iid FILE "fcitx.json") + QStringList keys() const; + QFcitxPlatformInputContext *create(const QString& system, const QStringList& paramList); +}; + +#endif // MAIN_H diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.cpp new file mode 100644 index 000000000..adbf1bdb9 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.cpp @@ -0,0 +1,770 @@ +/*************************************************************************** + * Copyright (C) 2011~2013 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "keyserver_x11.h" + +#include "qfcitxplatforminputcontext.h" +#include "fcitxqtinputcontextproxy.h" +#include "fcitxqtinputmethodproxy.h" +#include "fcitxqtconnection.h" +#include "keyuni.h" +#include "utils.h" + +static bool key_filtered = false; + +static bool +get_boolean_env(const char *name, + bool defval) +{ + const char *value = getenv(name); + + if (value == NULL) + return defval; + + if (strcmp(value, "") == 0 || + strcmp(value, "0") == 0 || + strcmp(value, "false") == 0 || + strcmp(value, "False") == 0 || + strcmp(value, "FALSE") == 0) + return false; + + return true; +} + +static inline const char* +get_locale() +{ + const char* locale = getenv("LC_ALL"); + if (!locale) + locale = getenv("LC_CTYPE"); + if (!locale) + locale = getenv("LANG"); + if (!locale) + locale = "C"; + + return locale; +} + +struct xkb_context* _xkb_context_new_helper() +{ + struct xkb_context* context = xkb_context_new(XKB_CONTEXT_NO_FLAGS); + if (context) { + xkb_context_set_log_level(context, XKB_LOG_LEVEL_CRITICAL); + } + + return context; +} + +QFcitxPlatformInputContext::QFcitxPlatformInputContext() : + m_connection(new FcitxQtConnection(this)), + m_improxy(0), + m_n_compose(0), + m_cursorPos(0), + m_useSurroundingText(false), + m_syncMode(true), + m_lastWId(0), + m_destroy(false), + m_xkbContext(_xkb_context_new_helper()), + m_xkbComposeTable(m_xkbContext ? xkb_compose_table_new_from_locale(m_xkbContext.data(), get_locale(), XKB_COMPOSE_COMPILE_NO_FLAGS) : 0), + m_xkbComposeState(m_xkbComposeTable ? xkb_compose_state_new(m_xkbComposeTable.data(), XKB_COMPOSE_STATE_NO_FLAGS) : 0) +{ + FcitxQtFormattedPreedit::registerMetaType(); + + memset(m_compose_buffer, 0, sizeof(uint) * (MAX_COMPOSE_LEN + 1)); + connect(m_connection, SIGNAL(connected()), this, SLOT(connected())); + connect(m_connection, SIGNAL(disconnected()), this, SLOT(cleanUp())); + + m_connection->startConnection(); +} + +QFcitxPlatformInputContext::~QFcitxPlatformInputContext() +{ + m_destroy = true; + cleanUp(); +} + +void QFcitxPlatformInputContext::connected() +{ + if (!m_connection->isConnected()) + return; + + // qDebug() << "create Input Context" << m_connection->name(); + if (m_improxy) { + delete m_improxy; + m_improxy = 0; + } + m_improxy = new FcitxQtInputMethodProxy(m_connection->serviceName(), QLatin1String("/inputmethod"), *m_connection->connection(), this); + + QWindow* w = qApp->focusWindow(); + if (w) + createICData(w); +} + +void QFcitxPlatformInputContext::cleanUp() +{ + for(QHash::const_iterator i = m_icMap.constBegin(), + e = m_icMap.constEnd(); i != e; ++i) { + FcitxQtICData* data = i.value(); + + if (data->proxy) + delete data->proxy; + } + + m_icMap.clear(); + + if (m_improxy) { + delete m_improxy; + m_improxy = 0; + } + + if (!m_destroy) { + commitPreedit(); + } +} + +bool QFcitxPlatformInputContext::isValid() const +{ + return true; +} + +void QFcitxPlatformInputContext::invokeAction(QInputMethod::Action action, int cursorPosition) +{ + if (action == QInputMethod::Click + && (cursorPosition <= 0 || cursorPosition >= m_preedit.length()) + ) + { + // qDebug() << action << cursorPosition; + commitPreedit(); + } +} + +void QFcitxPlatformInputContext::commitPreedit() +{ + QObject *input = qApp->focusObject(); + if (!input) + return; + if (m_commitPreedit.length() <= 0) + return; + QInputMethodEvent e; + e.setCommitString(m_commitPreedit); + QCoreApplication::sendEvent(input, &e); + m_commitPreedit.clear(); +} + + +void QFcitxPlatformInputContext::reset() +{ + commitPreedit(); + FcitxQtInputContextProxy* proxy = validIC(); + if (proxy) + proxy->Reset(); + if (m_xkbComposeState) { + xkb_compose_state_reset(m_xkbComposeState.data()); + } + QPlatformInputContext::reset(); +} + +void QFcitxPlatformInputContext::update(Qt::InputMethodQueries queries ) +{ + QWindow* window = qApp->focusWindow(); + FcitxQtInputContextProxy* proxy = validICByWindow(window); + if (!proxy) + return; + + FcitxQtICData* data = m_icMap.value(window->winId()); + + QInputMethod *method = qApp->inputMethod(); + QObject *input = qApp->focusObject(); + if (!input) + return; + + QInputMethodQueryEvent query(queries); + QGuiApplication::sendEvent(input, &query); + + if (queries & Qt::ImCursorRectangle) { + cursorRectChanged(); + } + + if (queries & Qt::ImHints) { + Qt::InputMethodHints hints = Qt::InputMethodHints(query.value(Qt::ImHints).toUInt()); + + +#define CHECK_HINTS(_HINTS, _CAPACITY) \ + if (hints & _HINTS) \ + addCapacity(data, _CAPACITY); \ + else \ + removeCapacity(data, _CAPACITY); + + CHECK_HINTS(Qt::ImhNoAutoUppercase, CAPACITY_NOAUTOUPPERCASE) + CHECK_HINTS(Qt::ImhPreferNumbers, CAPACITY_NUMBER) + CHECK_HINTS(Qt::ImhPreferUppercase, CAPACITY_UPPERCASE) + CHECK_HINTS(Qt::ImhPreferLowercase, CAPACITY_LOWERCASE) + CHECK_HINTS(Qt::ImhNoPredictiveText, CAPACITY_NO_SPELLCHECK) + CHECK_HINTS(Qt::ImhDigitsOnly, CAPACITY_DIGIT) + CHECK_HINTS(Qt::ImhFormattedNumbersOnly, CAPACITY_NUMBER) + CHECK_HINTS(Qt::ImhUppercaseOnly, CAPACITY_UPPERCASE) + CHECK_HINTS(Qt::ImhLowercaseOnly, CAPACITY_LOWERCASE) + CHECK_HINTS(Qt::ImhDialableCharactersOnly, CAPACITY_DIALABLE) + CHECK_HINTS(Qt::ImhEmailCharactersOnly, CAPACITY_EMAIL) + } + + bool setSurrounding = false; + do { + if (!m_useSurroundingText) + break; + if (!((queries & Qt::ImSurroundingText) && (queries & Qt::ImCursorPosition))) + break; + if (data->capacity.testFlag(CAPACITY_PASSWORD)) + break; + QVariant var = query.value(Qt::ImSurroundingText); + QVariant var1 = query.value(Qt::ImCursorPosition); + QVariant var2 = query.value(Qt::ImAnchorPosition); + if (!var.isValid() || !var1.isValid()) + break; + QString text = var.toString(); + /* we don't want to waste too much memory here */ +#define SURROUNDING_THRESHOLD 4096 + if (text.length() < SURROUNDING_THRESHOLD) { + if (_utf8_check_string(text.toUtf8().data())) { + addCapacity(data, CAPACITY_SURROUNDING_TEXT); + + int cursor = var1.toInt(); + int anchor; + if (var2.isValid()) + anchor = var2.toInt(); + else + anchor = cursor; + if (data->surroundingText != text) { + data->surroundingText = text; + proxy->SetSurroundingText(text, cursor, anchor); + } + else { + if (data->surroundingAnchor != anchor || + data->surroundingCursor != cursor) + proxy->SetSurroundingTextPosition(cursor, anchor); + } + data->surroundingCursor = cursor; + data->surroundingAnchor = anchor; + setSurrounding = true; + } + } + if (!setSurrounding) { + data->surroundingAnchor = -1; + data->surroundingCursor = -1; + data->surroundingText = QString::null; + removeCapacity(data, CAPACITY_SURROUNDING_TEXT); + } + } while(0); +} + +void QFcitxPlatformInputContext::commit() +{ + QPlatformInputContext::commit(); +} + +void QFcitxPlatformInputContext::setFocusObject(QObject* object) +{ + FcitxQtInputContextProxy* proxy = validICByWId(m_lastWId); + if (proxy) { + proxy->FocusOut(); + } + + QWindow *window = qApp->focusWindow(); + if (window) { + m_lastWId = window->winId(); + } else { + m_lastWId = 0; + return; + } + proxy = validICByWindow(window); + if (proxy) + proxy->FocusIn(); + else { + FcitxQtICData* data = m_icMap.value(window->winId()); + if (!data) { + createICData(window); + return; + } + } +} + +void QFcitxPlatformInputContext::windowDestroyed(QObject* object) +{ + /* access QWindow is not possible here, so we use our own map to do so */ + WId wid = m_windowToWidMap.take(object); + if (!wid) + return; + FcitxQtICData* data = m_icMap.take(wid); + if (!data) + return; + + delete data; + // qDebug() << "Window Destroyed and we destroy IC correctly, horray!"; +} + +void QFcitxPlatformInputContext::cursorRectChanged() +{ + QWindow *inputWindow = qApp->focusWindow(); + if (!inputWindow) + return; + FcitxQtInputContextProxy* proxy = validICByWindow(inputWindow); + if (!proxy) + return; + + FcitxQtICData* data = m_icMap.value(inputWindow->winId()); + + QRect r = qApp->inputMethod()->cursorRectangle().toRect(); + if(!r.isValid()) + return; + + r.moveTopLeft(inputWindow->mapToGlobal(r.topLeft())); + + qreal scale = inputWindow->devicePixelRatio(); + if (data->rect != r) { + data->rect = r; + proxy->SetCursorRect(r.x() * scale, r.y() * scale, + r.width() * scale, r.height() * scale); + } +} + +void QFcitxPlatformInputContext::createInputContext(WId w) +{ + if (!m_connection->isConnected()) + return; + + // qDebug() << "create Input Context" << m_connection->connection()->name(); + + if (m_improxy) { + delete m_improxy; + m_improxy = NULL; + } + m_improxy = new FcitxQtInputMethodProxy(m_connection->serviceName(), QLatin1String("/inputmethod"), *m_connection->connection(), this); + + if (!m_improxy->isValid()) + return; + + QFileInfo info(QCoreApplication::applicationFilePath()); + QDBusPendingReply< int, bool, uint, uint, uint, uint > result = m_improxy->CreateICv3(info.fileName(), QCoreApplication::applicationPid()); + QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(result); + watcher->setProperty("wid", (qulonglong) w); + connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), this, SLOT(createInputContextFinished(QDBusPendingCallWatcher*))); +} + +void QFcitxPlatformInputContext::createInputContextFinished(QDBusPendingCallWatcher* watcher) +{ + WId w = watcher->property("wid").toULongLong(); + FcitxQtICData* data = m_icMap.value(w); + if (!data) + return; + + QDBusPendingReply< int, bool, uint, uint, uint, uint > result = *watcher; + + do { + if (result.isError()) { + break; + } + + if (!m_connection->isConnected()) + break; + + int id = qdbus_cast(result.argumentAt(0)); + QString path = QString("/inputcontext_%1").arg(id); + if (data->proxy) { + delete data->proxy; + } + data->proxy = new FcitxQtInputContextProxy(m_connection->serviceName(), path, *m_connection->connection(), this); + connect(data->proxy, SIGNAL(CommitString(QString)), this, SLOT(commitString(QString))); + connect(data->proxy, SIGNAL(ForwardKey(uint, uint, int)), this, SLOT(forwardKey(uint, uint, int))); + connect(data->proxy, SIGNAL(UpdateFormattedPreedit(FcitxQtFormattedPreeditList,int)), this, SLOT(updateFormattedPreedit(FcitxQtFormattedPreeditList,int))); + connect(data->proxy, SIGNAL(DeleteSurroundingText(int,uint)), this, SLOT(deleteSurroundingText(int,uint))); + + if (data->proxy->isValid()) { + QWindow* window = qApp->focusWindow(); + if (window && window->winId() == w) + data->proxy->FocusIn(); + } + + QFlags flag; + flag |= CAPACITY_PREEDIT; + flag |= CAPACITY_FORMATTED_PREEDIT; + flag |= CAPACITY_CLIENT_UNFOCUS_COMMIT; + m_useSurroundingText = get_boolean_env("FCITX_QT_ENABLE_SURROUNDING_TEXT", true); + if (m_useSurroundingText) + flag |= CAPACITY_SURROUNDING_TEXT; + + /* + * event loop will cause some problem, so we tries to use async way. + */ + m_syncMode = get_boolean_env("FCITX_QT_USE_SYNC", false); + + addCapacity(data, flag, true); + } while(0); + delete watcher; +} + +void QFcitxPlatformInputContext::updateCapacity(FcitxQtICData* data) +{ + if (!data->proxy || !data->proxy->isValid()) + return; + + QDBusPendingReply< void > result = data->proxy->SetCapacity((uint) data->capacity); +} + +void QFcitxPlatformInputContext::commitString(const QString& str) +{ + m_cursorPos = 0; + m_preeditList.clear(); + m_commitPreedit.clear(); + QObject *input = qApp->focusObject(); + if (!input) + return; + + QInputMethodEvent event; + event.setCommitString(str); + QCoreApplication::sendEvent(input, &event); +} + +void QFcitxPlatformInputContext::updateFormattedPreedit(const FcitxQtFormattedPreeditList& preeditList, int cursorPos) +{ + QObject *input = qApp->focusObject(); + if (!input) + return; + if (cursorPos == m_cursorPos && preeditList == m_preeditList) + return; + m_preeditList = preeditList; + m_cursorPos = cursorPos; + QString str, commitStr; + int pos = 0; + QList attrList; + Q_FOREACH(const FcitxQtFormattedPreedit& preedit, preeditList) + { + str += preedit.string(); + if (!(preedit.format() & MSG_DONOT_COMMIT_WHEN_UNFOCUS)) + commitStr += preedit.string(); + QTextCharFormat format; + if ((preedit.format() & MSG_NOUNDERLINE) == 0) { + format.setUnderlineStyle(QTextCharFormat::DashUnderline); + } + if (preedit.format() & MSG_HIGHLIGHT) { + QBrush brush; + QPalette palette; + palette = QGuiApplication::palette(); + format.setBackground(QBrush(QColor(palette.color(QPalette::Active, QPalette::Highlight)))); + format.setForeground(QBrush(QColor(palette.color(QPalette::Active, QPalette::HighlightedText)))); + } + attrList.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, pos, preedit.string().length(), format)); + pos += preedit.string().length(); + } + + QByteArray array = str.toUtf8(); + array.truncate(cursorPos); + cursorPos = QString::fromUtf8(array).length(); + + attrList.append(QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, cursorPos, 1, 0)); + m_preedit = str; + m_commitPreedit = commitStr; + QInputMethodEvent event(str, attrList); + QCoreApplication::sendEvent(input, &event); + update(Qt::ImCursorRectangle); +} + +void QFcitxPlatformInputContext::deleteSurroundingText(int offset, uint nchar) +{ + QObject *input = qApp->focusObject(); + if (!input) + return; + + QInputMethodEvent event; + event.setCommitString("", offset, nchar); + QCoreApplication::sendEvent(input, &event); +} + +void QFcitxPlatformInputContext::forwardKey(uint keyval, uint state, int type) +{ + QObject *input = qApp->focusObject(); + if (input != NULL) { + key_filtered = true; + QKeyEvent *keyevent = createKeyEvent(keyval, state, type); + QCoreApplication::sendEvent(input, keyevent); + delete keyevent; + key_filtered = false; + } +} + +void QFcitxPlatformInputContext::createICData(QWindow* w) +{ + FcitxQtICData* data = m_icMap.value(w->winId()); + if (!data) { + data = new FcitxQtICData; + m_icMap[w->winId()] = data; + m_windowToWidMap[w] = w->winId(); + connect(w, SIGNAL(destroyed(QObject*)), this, SLOT(windowDestroyed(QObject*))); + } + createInputContext(w->winId()); +} + +QKeyEvent* QFcitxPlatformInputContext::createKeyEvent(uint keyval, uint state, int type) +{ + Qt::KeyboardModifiers qstate = Qt::NoModifier; + + int count = 1; + if (state & FcitxKeyState_Alt) { + qstate |= Qt::AltModifier; + count ++; + } + + if (state & FcitxKeyState_Shift) { + qstate |= Qt::ShiftModifier; + count ++; + } + + if (state & FcitxKeyState_Ctrl) { + qstate |= Qt::ControlModifier; + count ++; + } + + int key; + symToKeyQt(keyval, key); + + QKeyEvent* keyevent = new QKeyEvent( + (type == FCITX_PRESS_KEY) ? (QEvent::KeyPress) : (QEvent::KeyRelease), + key, + qstate, + QString(), + false, + count + ); + + return keyevent; +} + +bool QFcitxPlatformInputContext::filterEvent(const QEvent* event) +{ + do { + if (event->type() != QEvent::KeyPress && event->type() != QEvent::KeyRelease) { + break; + } + + const QKeyEvent* keyEvent = static_cast(event); + quint32 keyval = keyEvent->nativeVirtualKey(); + quint32 keycode = keyEvent->nativeScanCode(); + quint32 state = keyEvent->nativeModifiers(); + bool press = keyEvent->type() == QEvent::KeyPress; + + if (key_filtered) { + break; + } + + if (!inputMethodAccepted()) + break; + + QObject *input = qApp->focusObject(); + + if (!input) { + break; + } + + FcitxQtInputContextProxy* proxy = validICByWindow(qApp->focusWindow()); + + if (!proxy) { + if (filterEventFallback(keyval, keycode, state, press)) { + return true; + } else { + break; + } + } + + proxy->FocusIn(); + + QDBusPendingReply< int > reply = proxy->ProcessKeyEvent(keyval, + keycode, + state, + (press) ? FCITX_PRESS_KEY : FCITX_RELEASE_KEY, + QDateTime::currentDateTime().toTime_t()); + + + if (Q_UNLIKELY(m_syncMode)) { + reply.waitForFinished(); + + if (!m_connection->isConnected() || !reply.isFinished() || reply.isError() || reply.value() <= 0) { + if (filterEventFallback(keyval, keycode, state, press)) { + return true; + } else { + break; + } + } else { + update(Qt::ImCursorRectangle); + return true; + } + } + else { + ProcessKeyWatcher* watcher = new ProcessKeyWatcher(*keyEvent, qApp->focusWindow(), reply, this); + connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), + this, SLOT(processKeyEventFinished(QDBusPendingCallWatcher*))); + return true; + } + } while(0); + return QPlatformInputContext::filterEvent(event); +} + +void QFcitxPlatformInputContext::processKeyEventFinished(QDBusPendingCallWatcher* w) +{ + ProcessKeyWatcher* watcher = static_cast(w); + QDBusPendingReply< int > result(*watcher); + bool filtered = false; + + QWindow* window = watcher->window(); + // if window is already destroyed, we can only throw this event away. + if (!window) { + return; + } + + const QKeyEvent& keyEvent = watcher->event(); + + // use same variable name as in QXcbKeyboard::handleKeyEvent + QEvent::Type type = keyEvent.type(); + int qtcode = keyEvent.key(); + Qt::KeyboardModifiers modifiers = keyEvent.modifiers(); + quint32 code = keyEvent.nativeScanCode(); + quint32 sym = keyEvent.nativeVirtualKey(); + quint32 state = keyEvent.nativeModifiers(); + QString string = keyEvent.text(); + bool isAutoRepeat = keyEvent.isAutoRepeat(); + ulong time = keyEvent.timestamp(); + + if (result.isError() || result.value() <= 0) { + filtered = filterEventFallback(sym, code, state, type == QEvent::KeyPress); + } else { + filtered = true; + } + + if (!result.isError()) { + update(Qt::ImCursorRectangle); + } + + if (!filtered) { + // copied from QXcbKeyboard::handleKeyEvent() + if (type == QEvent::KeyPress && qtcode == Qt::Key_Menu) { + const QPoint globalPos = window->screen()->handle()->cursor()->pos(); + const QPoint pos = window->mapFromGlobal(globalPos); QWindowSystemInterface::handleContextMenuEvent(window, false, pos, globalPos, modifiers); + } + QWindowSystemInterface::handleExtendedKeyEvent(window, time, type, qtcode, modifiers, + code, sym, state, string, isAutoRepeat); + } + + delete watcher; +} + + +bool QFcitxPlatformInputContext::filterEventFallback(uint keyval, uint keycode, uint state, bool press) +{ + Q_UNUSED(keycode); + if (processCompose(keyval, state, (press) ? FCITX_PRESS_KEY : FCITX_RELEASE_KEY)) { + return true; + } + return false; +} + +FcitxQtInputContextProxy* QFcitxPlatformInputContext::validIC() +{ + if (m_icMap.isEmpty()) { + return 0; + } + QWindow* window = qApp->focusWindow(); + return validICByWindow(window); +} + +FcitxQtInputContextProxy* QFcitxPlatformInputContext::validICByWId(WId wid) +{ + if (m_icMap.isEmpty()) { + return 0; + } + FcitxQtICData* icData = m_icMap.value(wid); + if (!icData) + return 0; + if (icData->proxy.isNull()) { + return 0; + } else if (icData->proxy->isValid()) { + return icData->proxy.data(); + } + return 0; +} + +FcitxQtInputContextProxy* QFcitxPlatformInputContext::validICByWindow(QWindow* w) +{ + if (!w) { + return 0; + } + + if (m_icMap.isEmpty()) { + return 0; + } + return validICByWId(w->winId()); +} + + +bool QFcitxPlatformInputContext::processCompose(uint keyval, uint state, FcitxKeyEventType event) +{ + Q_UNUSED(state); + + if (!m_xkbComposeTable || event == FCITX_RELEASE_KEY) + return false; + + struct xkb_compose_state* xkbComposeState = m_xkbComposeState.data(); + + enum xkb_compose_feed_result result = xkb_compose_state_feed(xkbComposeState, keyval); + if (result == XKB_COMPOSE_FEED_IGNORED) { + return false; + } + + enum xkb_compose_status status = xkb_compose_state_get_status(xkbComposeState); + if (status == XKB_COMPOSE_NOTHING) { + return 0; + } else if (status == XKB_COMPOSE_COMPOSED) { + char buffer[] = {'\0', '\0', '\0', '\0', '\0', '\0', '\0'}; + int length = xkb_compose_state_get_utf8(xkbComposeState, buffer, sizeof(buffer)); + xkb_compose_state_reset(xkbComposeState); + if (length != 0) { + commitString(QString::fromUtf8(buffer)); + } + + } else if (status == XKB_COMPOSE_CANCELLED) { + xkb_compose_state_reset(xkbComposeState); + } + + return true; +} + + +// kate: indent-mode cstyle; space-indent on; indent-width 0; diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.h new file mode 100644 index 000000000..137127891 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.h @@ -0,0 +1,269 @@ +/*************************************************************************** + * Copyright (C) 2012~2013 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef QFCITXPLATFORMINPUTCONTEXT_H +#define QFCITXPLATFORMINPUTCONTEXT_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "fcitxqtformattedpreedit.h" +#include "fcitxqtinputcontextproxy.h" + +#define MAX_COMPOSE_LEN 7 + +class FcitxQtConnection; +class QFileSystemWatcher; +enum FcitxKeyEventType { + FCITX_PRESS_KEY, + FCITX_RELEASE_KEY +}; + +enum FcitxCapacityFlags { + CAPACITY_NONE = 0, + CAPACITY_CLIENT_SIDE_UI = (1 << 0), + CAPACITY_PREEDIT = (1 << 1), + CAPACITY_CLIENT_SIDE_CONTROL_STATE = (1 << 2), + CAPACITY_PASSWORD = (1 << 3), + CAPACITY_FORMATTED_PREEDIT = (1 << 4), + CAPACITY_CLIENT_UNFOCUS_COMMIT = (1 << 5), + CAPACITY_SURROUNDING_TEXT = (1 << 6), + CAPACITY_EMAIL = (1 << 7), + CAPACITY_DIGIT = (1 << 8), + CAPACITY_UPPERCASE = (1 << 9), + CAPACITY_LOWERCASE = (1 << 10), + CAPACITY_NOAUTOUPPERCASE = (1 << 11), + CAPACITY_URL = (1 << 12), + CAPACITY_DIALABLE = (1 << 13), + CAPACITY_NUMBER = (1 << 14), + CAPACITY_NO_ON_SCREEN_KEYBOARD = (1 << 15), + CAPACITY_SPELLCHECK = (1 << 16), + CAPACITY_NO_SPELLCHECK = (1 << 17), + CAPACITY_WORD_COMPLETION = (1 << 18), + CAPACITY_UPPERCASE_WORDS = (1 << 19), + CAPACITY_UPPERCASE_SENTENCES = (1 << 20), + CAPACITY_ALPHA = (1 << 21), + CAPACITY_NAME = (1 << 22) +} ; + +/** message type and flags */ +enum FcitxMessageType { + MSG_TYPE_FIRST = 0, + MSG_TYPE_LAST = 6, + MSG_TIPS = 0, /**< Hint Text */ + MSG_INPUT = 1, /**< User Input */ + MSG_INDEX = 2, /**< Index Number */ + MSG_FIRSTCAND = 3, /**< First candidate */ + MSG_USERPHR = 4, /**< User Phrase */ + MSG_CODE = 5, /**< Typed character */ + MSG_OTHER = 6, /**< Other Text */ + MSG_NOUNDERLINE = (1 << 3), /**< backward compatible, no underline is a flag */ + MSG_HIGHLIGHT = (1 << 4), /**< highlight the preedit */ + MSG_DONOT_COMMIT_WHEN_UNFOCUS = (1 << 5), /**< backward compatible */ + MSG_REGULAR_MASK = 0x7 /**< regular color type mask */ +}; + + +enum FcitxKeyState { + FcitxKeyState_None = 0, + FcitxKeyState_Shift = 1 << 0, + FcitxKeyState_CapsLock = 1 << 1, + FcitxKeyState_Ctrl = 1 << 2, + FcitxKeyState_Alt = 1 << 3, + FcitxKeyState_Alt_Shift = FcitxKeyState_Alt | FcitxKeyState_Shift, + FcitxKeyState_Ctrl_Shift = FcitxKeyState_Ctrl | FcitxKeyState_Shift, + FcitxKeyState_Ctrl_Alt = FcitxKeyState_Ctrl | FcitxKeyState_Alt, + FcitxKeyState_Ctrl_Alt_Shift = FcitxKeyState_Ctrl | FcitxKeyState_Alt | FcitxKeyState_Shift, + FcitxKeyState_NumLock = 1 << 4, + FcitxKeyState_Super = 1 << 6, + FcitxKeyState_ScrollLock = 1 << 7, + FcitxKeyState_MousePressed = 1 << 8, + FcitxKeyState_HandledMask = 1 << 24, + FcitxKeyState_IgnoredMask = 1 << 25, + FcitxKeyState_Super2 = 1 << 26, + FcitxKeyState_Hyper = 1 << 27, + FcitxKeyState_Meta = 1 << 28, + FcitxKeyState_UsedMask = 0x5c001fff +}; + +struct FcitxQtICData { + FcitxQtICData() : capacity(0), proxy(0), surroundingAnchor(-1), surroundingCursor(-1) {} + ~FcitxQtICData() { + if (proxy && proxy->isValid()) { + proxy->DestroyIC(); + delete proxy; + } + } + QFlags capacity; + QPointer proxy; + QRect rect; + QString surroundingText; + int surroundingAnchor; + int surroundingCursor; +}; + + +class ProcessKeyWatcher : public QDBusPendingCallWatcher +{ + Q_OBJECT +public: + ProcessKeyWatcher(const QKeyEvent& event, QWindow* window, const QDBusPendingCall &call, QObject *parent = 0) : + QDBusPendingCallWatcher(call, parent) + ,m_event(event.type(), event.key(), event.modifiers(), + event.nativeScanCode(), event.nativeVirtualKey(), event.nativeModifiers(), + event.text(), event.isAutoRepeat(), event.count()) + ,m_window(window) + { + } + + virtual ~ProcessKeyWatcher() { + } + + const QKeyEvent& event() { + return m_event; + } + + QWindow* window() { + return m_window.data(); + } + +private: + QKeyEvent m_event; + QPointer m_window; +}; + +struct XkbContextDeleter +{ + static inline void cleanup(struct xkb_context* pointer) + { + if (pointer) xkb_context_unref(pointer); + } +}; + +struct XkbComposeTableDeleter +{ + static inline void cleanup(struct xkb_compose_table* pointer) + { + if (pointer) xkb_compose_table_unref(pointer); + } +}; + +struct XkbComposeStateDeleter +{ + static inline void cleanup(struct xkb_compose_state* pointer) + { + if (pointer) xkb_compose_state_unref(pointer); + } +}; + +class FcitxQtInputMethodProxy; + +class QFcitxPlatformInputContext : public QPlatformInputContext +{ + Q_OBJECT +public: + QFcitxPlatformInputContext(); + virtual ~QFcitxPlatformInputContext(); + + virtual bool filterEvent(const QEvent* event); + virtual bool isValid() const; + virtual void invokeAction(QInputMethod::Action , int cursorPosition); + virtual void reset(); + virtual void commit(); + virtual void update(Qt::InputMethodQueries quries ); + virtual void setFocusObject(QObject* object); + + +public Q_SLOTS: + void cursorRectChanged(); + void commitString(const QString& str); + void updateFormattedPreedit(const FcitxQtFormattedPreeditList& preeditList, int cursorPos); + void deleteSurroundingText(int offset, uint nchar); + void forwardKey(uint keyval, uint state, int type); + void createInputContextFinished(QDBusPendingCallWatcher* watcher); + void connected(); + void cleanUp(); + void windowDestroyed(QObject* object); + + +private: + void createInputContext(WId w); + bool processCompose(uint keyval, uint state, FcitxKeyEventType event); + bool checkAlgorithmically(); + bool checkCompactTable(const struct _FcitxComposeTableCompact *table); + QKeyEvent* createKeyEvent(uint keyval, uint state, int type); + + + void addCapacity(FcitxQtICData* data, QFlags capacity, bool forceUpdate = false) + { + QFlags< FcitxCapacityFlags > newcaps = data->capacity | capacity; + if (data->capacity != newcaps || forceUpdate) { + data->capacity = newcaps; + updateCapacity(data); + } + } + + void removeCapacity(FcitxQtICData* data, QFlags capacity, bool forceUpdate = false) + { + QFlags< FcitxCapacityFlags > newcaps = data->capacity & (~capacity); + if (data->capacity != newcaps || forceUpdate) { + data->capacity = newcaps; + updateCapacity(data); + } + } + + void updateCapacity(FcitxQtICData* data); + void commitPreedit(); + void createICData(QWindow* w); + FcitxQtInputContextProxy* validIC(); + FcitxQtInputContextProxy* validICByWindow(QWindow* window); + FcitxQtInputContextProxy* validICByWId(WId wid); + bool filterEventFallback(uint keyval, uint keycode, uint state, bool press); + + FcitxQtInputMethodProxy* m_improxy; + uint m_compose_buffer[MAX_COMPOSE_LEN + 1]; + int m_n_compose; + QString m_preedit; + QString m_commitPreedit; + FcitxQtFormattedPreeditList m_preeditList; + int m_cursorPos; + bool m_useSurroundingText; + bool m_syncMode; + FcitxQtConnection* m_connection; + QString m_lastSurroundingText; + int m_lastSurroundingAnchor; + int m_lastSurroundingCursor; + QHash m_icMap; + QHash m_windowToWidMap; + WId m_lastWId; + bool m_destroy; + QScopedPointer m_xkbContext; + QScopedPointer m_xkbComposeTable; + QScopedPointer m_xkbComposeState; +private slots: + void processKeyEventFinished(QDBusPendingCallWatcher*); +}; + +#endif // QFCITXPLATFORMINPUTCONTEXT_H diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/utils.cpp b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/utils.cpp new file mode 100644 index 000000000..fe4eda1d0 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/utils.cpp @@ -0,0 +1,177 @@ +/*************************************************************************** + * Copyright (C) 2012~2013 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include "utils.h" +/** check utf8 character */ +#define ISUTF8_CB(c) (((c)&0xc0) == 0x80) + +#define CONT(i) ISUTF8_CB(in[i]) +#define VAL(i, s) ((in[i]&0x3f) << s) + +#define UTF8_LENGTH(Char) \ + ((Char) < 0x80 ? 1 : \ + ((Char) < 0x800 ? 2 : \ + ((Char) < 0x10000 ? 3 : \ + ((Char) < 0x200000 ? 4 : \ + ((Char) < 0x4000000 ? 5 : 6))))) + +#define UNICODE_VALID(Char) \ + ((Char) < 0x110000 && \ + (((Char) & 0xFFFFF800) != 0xD800) && \ + ((Char) < 0xFDD0 || (Char) > 0xFDEF) && \ + ((Char) & 0xFFFE) != 0xFFFE) + +int +_utf8_get_char_extended(const char *s, + int max_len) +{ + const unsigned char*p = (const unsigned char*)s; + int i, len; + unsigned int wc = (unsigned char) * p; + + if (wc < 0x80) { + return wc; + } else if (wc < 0xc0) { + return (unsigned int) - 1; + } else if (wc < 0xe0) { + len = 2; + wc &= 0x1f; + } else if (wc < 0xf0) { + len = 3; + wc &= 0x0f; + } else if (wc < 0xf8) { + len = 4; + wc &= 0x07; + } else if (wc < 0xfc) { + len = 5; + wc &= 0x03; + } else if (wc < 0xfe) { + len = 6; + wc &= 0x01; + } else { + return (unsigned int) - 1; + } + + if (max_len >= 0 && len > max_len) { + for (i = 1; i < max_len; i++) { + if ((((unsigned char *)p)[i] & 0xc0) != 0x80) + return (unsigned int) - 1; + } + + return (unsigned int) - 2; + } + + for (i = 1; i < len; ++i) { + unsigned int ch = ((unsigned char *)p)[i]; + + if ((ch & 0xc0) != 0x80) { + if (ch) + return (unsigned int) - 1; + else + return (unsigned int) - 2; + } + + wc <<= 6; + + wc |= (ch & 0x3f); + } + + if (UTF8_LENGTH(wc) != len) + return (unsigned int) - 1; + + return wc; +} + +int _utf8_get_char_validated(const char *p, + int max_len) +{ + int result; + + if (max_len == 0) + return -2; + + result = _utf8_get_char_extended(p, max_len); + + if (result & 0x80000000) + return result; + else if (!UNICODE_VALID(result)) + return -1; + else + return result; +} + + +char * +_utf8_get_char(const char *i, uint32_t *chr) +{ + const unsigned char* in = (const unsigned char *)i; + if (!(in[0] & 0x80)) { + *(chr) = *(in); + return (char *)in + 1; + } + + /* 2-byte, 0x80-0x7ff */ + if ((in[0] & 0xe0) == 0xc0 && CONT(1)) { + *chr = ((in[0] & 0x1f) << 6) | VAL(1, 0); + return (char *)in + 2; + } + + /* 3-byte, 0x800-0xffff */ + if ((in[0] & 0xf0) == 0xe0 && CONT(1) && CONT(2)) { + *chr = ((in[0] & 0xf) << 12) | VAL(1, 6) | VAL(2, 0); + return (char *)in + 3; + } + + /* 4-byte, 0x10000-0x1FFFFF */ + if ((in[0] & 0xf8) == 0xf0 && CONT(1) && CONT(2) && CONT(3)) { + *chr = ((in[0] & 0x7) << 18) | VAL(1, 12) | VAL(2, 6) | VAL(3, 0); + return (char *)in + 4; + } + + /* 5-byte, 0x200000-0x3FFFFFF */ + if ((in[0] & 0xfc) == 0xf8 && CONT(1) && CONT(2) && CONT(3) && CONT(4)) { + *chr = ((in[0] & 0x3) << 24) | VAL(1, 18) | VAL(2, 12) | VAL(3, 6) | VAL(4, 0); + return (char *)in + 5; + } + + /* 6-byte, 0x400000-0x7FFFFFF */ + if ((in[0] & 0xfe) == 0xfc && CONT(1) && CONT(2) && CONT(3) && CONT(4) && CONT(5)) { + *chr = ((in[0] & 0x1) << 30) | VAL(1, 24) | VAL(2, 18) | VAL(3, 12) | VAL(4, 6) | VAL(5, 0); + return (char *)in + 6; + } + + *chr = *in; + + return (char *)in + 1; +} + + +int _utf8_check_string(const char *s) +{ + while (*s) { + uint32_t chr; + + if (_utf8_get_char_validated(s, 6) < 0) + return 0; + + s = _utf8_get_char(s, &chr); + } + + return 1; +} diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/utils.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/utils.h new file mode 100644 index 000000000..ae0c79cd1 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/utils.h @@ -0,0 +1,35 @@ +/*************************************************************************** + * Copyright (C) 2012~2013 by CSSlayer * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#ifndef UTILS_H +#define UTILS_H + +#include + +int +_utf8_get_char_extended(const char *s, + int max_len); +int _utf8_get_char_validated(const char *p, + int max_len); +char * +_utf8_get_char(const char *i, uint32_t *chr); +int _utf8_check_string(const char *s); + + +#endif // UTILS_H diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compat.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compat.h new file mode 100644 index 000000000..299732fdc --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compat.h @@ -0,0 +1,98 @@ +/* + * Copyright © 2012 Daniel Stone + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Author: Daniel Stone + */ + +#ifndef _XKBCOMMON_COMPAT_H +#define _XKBCOMMON_COMPAT_H + +/** + * Renamed keymap API. + */ +#define xkb_group_index_t xkb_layout_index_t +#define xkb_group_mask_t xkb_layout_mask_t +#define xkb_map_compile_flags xkb_keymap_compile_flags +#define XKB_GROUP_INVALID XKB_LAYOUT_INVALID + +#define XKB_STATE_DEPRESSED \ + (XKB_STATE_MODS_DEPRESSED | XKB_STATE_LAYOUT_DEPRESSED) +#define XKB_STATE_LATCHED \ + (XKB_STATE_MODS_LATCHED | XKB_STATE_LAYOUT_LATCHED) +#define XKB_STATE_LOCKED \ + (XKB_STATE_MODS_LOCKED | XKB_STATE_LAYOUT_LOCKED) +#define XKB_STATE_EFFECTIVE \ + (XKB_STATE_DEPRESSED | XKB_STATE_LATCHED | XKB_STATE_LOCKED | \ + XKB_STATE_MODS_EFFECTIVE | XKB_STATE_LAYOUT_EFFECTIVE) + +#define xkb_map_new_from_names(context, names, flags) \ + xkb_keymap_new_from_names(context, names, flags) +#define xkb_map_new_from_file(context, file, format, flags) \ + xkb_keymap_new_from_file(context, file, format, flags) +#define xkb_map_new_from_string(context, string, format, flags) \ + xkb_keymap_new_from_string(context, string, format, flags) +#define xkb_map_get_as_string(keymap) \ + xkb_keymap_get_as_string(keymap, XKB_KEYMAP_FORMAT_TEXT_V1) +#define xkb_map_ref(keymap) xkb_keymap_ref(keymap) +#define xkb_map_unref(keymap) xkb_keymap_unref(keymap) + +#define xkb_map_num_mods(keymap) xkb_keymap_num_mods(keymap) +#define xkb_map_mod_get_name(keymap, idx) xkb_keymap_mod_get_name(keymap, idx) +#define xkb_map_mod_get_index(keymap, str) xkb_keymap_mod_get_index(keymap, str) +#define xkb_key_mod_index_is_consumed(state, key, mod) \ + xkb_state_mod_index_is_consumed(state, key, mod) +#define xkb_key_mod_mask_remove_consumed(state, key, modmask) \ + xkb_state_mod_mask_remove_consumed(state, key, modmask) + +#define xkb_map_num_groups(keymap) xkb_keymap_num_layouts(keymap) +#define xkb_key_num_groups(keymap, key) \ + xkb_keymap_num_layouts_for_key(keymap, key) +#define xkb_map_group_get_name(keymap, idx) \ + xkb_keymap_layout_get_name(keymap, idx) +#define xkb_map_group_get_index(keymap, str) \ + xkb_keymap_layout_get_index(keymap, str) + +#define xkb_map_num_leds(keymap) xkb_keymap_num_leds(keymap) +#define xkb_map_led_get_name(keymap, idx) xkb_keymap_led_get_name(keymap, idx) +#define xkb_map_led_get_index(keymap, str) \ + xkb_keymap_led_get_index(keymap, str) + +#define xkb_key_repeats(keymap, key) xkb_keymap_key_repeats(keymap, key) + +#define xkb_key_get_syms(state, key, syms_out) \ + xkb_state_key_get_syms(state, key, syms_out) + +#define xkb_state_group_name_is_active(state, name, type) \ + xkb_state_layout_name_is_active(state, name, type) +#define xkb_state_group_index_is_active(state, idx, type) \ + xkb_state_layout_index_is_active(state, idx, type) + +#define xkb_state_serialize_group(state, component) \ + xkb_state_serialize_layout(state, component) + +#define xkb_state_get_map(state) xkb_state_get_keymap(state) + +/* Not needed anymore, since there's NO_FLAGS. */ +#define XKB_MAP_COMPILE_PLACEHOLDER XKB_KEYMAP_COMPILE_NO_FLAGS +#define XKB_MAP_COMPILE_NO_FLAGS XKB_KEYMAP_COMPILE_NO_FLAGS + +#endif diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compose.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compose.h new file mode 100644 index 000000000..7414c373b --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compose.h @@ -0,0 +1,488 @@ +/* + * Copyright © 2013 Ran Benita + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#ifndef _XKBCOMMON_COMPOSE_H +#define _XKBCOMMON_COMPOSE_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @file + * libxkbcommon Compose API - support for Compose and dead-keys. + */ + +/** + * @defgroup compose Compose and dead-keys support + * Support for Compose and dead-keys. + * @since 0.5.0 + * + * @{ + */ + +/** + * @page compose-overview Overview + * @parblock + * + * Compose and dead-keys are a common feature of many keyboard input + * systems. They extend the range of the keysysm that can be produced + * directly from a keyboard by using a sequence of key strokes, instead + * of just one. + * + * Here are some example sequences, in the libX11 Compose file format: + * + * : "á" aacute # LATIN SMALL LETTER A WITH ACUTE + * : "@" at # COMMERCIAL AT + * + * When the user presses a key which produces the `` keysym, + * nothing initially happens (thus the key is dubbed a "dead-key"). But + * when the user enters ``, "á" is "composed", in place of "a". If + * instead the user had entered a keysym which does not follow + * `` in any compose sequence, the sequence is said to be + * "cancelled". + * + * Compose files define many such sequences. For a description of the + * common file format for Compose files, see the Compose(5) man page. + * + * A successfuly-composed sequence has two results: a keysym and a UTF-8 + * string. At least one of the two is defined for each sequence. If only + * a keysym is given, the keysym's string representation is used for the + * result string (using xkb_keysym_to_utf8()). + * + * This library provides low-level support for Compose file parsing and + * processing. Higher-level APIs (such as libX11's `Xutf8LookupString`(3)) + * may be built upon it, or it can be used directly. + * + * @endparblock + */ + +/** + * @page compose-conflicting Conflicting Sequences + * @parblock + * + * To avoid ambiguity, a sequence is not allowed to be a prefix of another. + * In such a case, the conflict is resolved thus: + * + * 1. A longer sequence overrides a shorter one. + * 2. An equal sequence overrides an existing one. + * 3. A shorter sequence does not override a longer one. + * + * Sequences of length 1 are allowed. + * + * @endparblock + */ + +/** + * @page compose-cancellation Cancellation Behavior + * @parblock + * + * What should happen when a sequence is cancelled? For example, consider + * there are only the above sequences, and the input keysyms are + * ` `. There are a few approaches: + * + * 1. Swallow the cancelling keysym; that is, no keysym is produced. + * This is the approach taken by libX11. + * 2. Let the cancelling keysym through; that is, `` is produced. + * 3. Replay the entire sequence; that is, ` ` is produced. + * This is the approach taken by Microsoft Windows (approximately; + * instead of ``, the underlying key is used. This is + * difficult to simulate with XKB keymaps). + * + * You can program whichever approach best fits users' expectations. + * + * @endparblock + */ + +/** + * @struct xkb_compose_table + * Opaque Compose table object. + * + * The compose table holds the definitions of the Compose sequences, as + * gathered from Compose files. It is immutable. + */ +struct xkb_compose_table; + +/** + * @struct xkb_compose_state + * Opaque Compose state object. + * + * The compose state maintains state for compose sequence matching, such + * as which possible sequences are being matched, and the position within + * these sequences. It acts as a simple state machine wherein keysyms are + * the input, and composed keysyms and strings are the output. + * + * The compose state is usually associated with a keyboard device. + */ +struct xkb_compose_state; + +/** Flags affecting Compose file compilation. */ +enum xkb_compose_compile_flags { + /** Do not apply any flags. */ + XKB_COMPOSE_COMPILE_NO_FLAGS = 0 +}; + +/** The recognized Compose file formats. */ +enum xkb_compose_format { + /** The classic libX11 Compose text format, described in Compose(5). */ + XKB_COMPOSE_FORMAT_TEXT_V1 = 1 +}; + +/** + * @page compose-locale Compose Locale + * @parblock + * + * Compose files are locale dependent: + * - Compose files are written for a locale, and the locale is used when + * searching for the appropriate file to use. + * - Compose files may reference the locale internally, with directives + * such as \%L. + * + * As such, functions like xkb_compose_table_new_from_locale() require + * a `locale` parameter. This will usually be the current locale (see + * locale(7) for more details). You may also want to allow the user to + * explicitly configure it, so he can use the Compose file of a given + * locale, but not use that locale for other things. + * + * You may query the current locale as follows: + * @code + * const char *locale; + * locale = setlocale(LC_CTYPE, NULL); + * @endcode + * + * This will only give useful results if the program had previously set + * the current locale using setlocale(3), with `LC_CTYPE` or `LC_ALL` + * and a non-NULL argument. + * + * If you prefer not to use the locale system of the C runtime library, + * you may nevertheless obtain the user's locale directly using + * environment variables, as described in locale(7). For example, + * @code + * locale = getenv("LC_ALL"); + * if (!locale) + * locale = getenv("LC_CTYPE"); + * if (!locale) + * locale = getenv("LANG"); + * if (!locale) + * locale = "C"; + * @endcode + * + * Note that some locales supported by the C standard library may not + * have a Compose file assigned. + * + * @endparblock + */ + +/** + * Create a compose table for a given locale. + * + * The locale is used for searching the file-system for an appropriate + * Compose file. The search order is described in Compose(5). It is + * affected by the following environment variables: + * + * 1. `XCOMPOSEFILE` - see Compose(5). + * 2. `HOME` - see Compose(5). + * 3. `XLOCALEDIR` - if set, used as the base directory for the system's + * X locale files, e.g. `/usr/share/X11/locale`, instead of the + * preconfigured directory. + * + * @param context + * The library context in which to create the compose table. + * @param locale + * The current locale. See @ref compose-locale. + * @param flags + * Optional flags for the compose table, or 0. + * + * @returns A compose table for the given locale, or NULL if the + * compilation failed or a Compose file was not found. + * + * @memberof xkb_compose_table + */ +struct xkb_compose_table * +xkb_compose_table_new_from_locale(struct xkb_context *context, + const char *locale, + enum xkb_compose_compile_flags flags); + +/** + * Create a new compose table from a Compose file. + * + * @param context + * The library context in which to create the compose table. + * @param file + * The Compose file to compile. + * @param locale + * The current locale. See @ref compose-locale. + * @param format + * The text format of the Compose file to compile. + * @param flags + * Optional flags for the compose table, or 0. + * + * @returns A compose table compiled from the given file, or NULL if + * the compilation failed. + * + * @memberof xkb_compose_table + */ +struct xkb_compose_table * +xkb_compose_table_new_from_file(struct xkb_context *context, + FILE *file, + const char *locale, + enum xkb_compose_format format, + enum xkb_compose_compile_flags flags); + +/** + * Create a new compose table from a memory buffer. + * + * This is just like xkb_compose_table_new_from_file(), but instead of + * a file, gets the table as one enormous string. + * + * @see xkb_compose_table_new_from_file() + * @memberof xkb_compose_table + */ +struct xkb_compose_table * +xkb_compose_table_new_from_buffer(struct xkb_context *context, + const char *buffer, size_t length, + const char *locale, + enum xkb_compose_format format, + enum xkb_compose_compile_flags flags); + +/** + * Take a new reference on a compose table. + * + * @returns The passed in object. + * + * @memberof xkb_compose_table + */ +struct xkb_compose_table * +xkb_compose_table_ref(struct xkb_compose_table *table); + +/** + * Release a reference on a compose table, and possibly free it. + * + * @param table The object. If it is NULL, this function does nothing. + * + * @memberof xkb_compose_table + */ +void +xkb_compose_table_unref(struct xkb_compose_table *table); + +/** Flags for compose state creation. */ +enum xkb_compose_state_flags { + /** Do not apply any flags. */ + XKB_COMPOSE_STATE_NO_FLAGS = 0 +}; + +/** + * Create a new compose state object. + * + * @param table + * The compose table the state will use. + * @param flags + * Optional flags for the compose state, or 0. + * + * @returns A new compose state, or NULL on failure. + * + * @memberof xkb_compose_state + */ +struct xkb_compose_state * +xkb_compose_state_new(struct xkb_compose_table *table, + enum xkb_compose_state_flags flags); + +/** + * Take a new reference on a compose state object. + * + * @returns The passed in object. + * + * @memberof xkb_compose_state + */ +struct xkb_compose_state * +xkb_compose_state_ref(struct xkb_compose_state *state); + +/** + * Release a reference on a compose state object, and possibly free it. + * + * @param state The object. If NULL, do nothing. + * + * @memberof xkb_compose_state + */ +void +xkb_compose_state_unref(struct xkb_compose_state *state); + +/** + * Get the compose table which a compose state object is using. + * + * @returns The compose table which was passed to xkb_compose_state_new() + * when creating this state object. + * + * This function does not take a new reference on the compose table; you + * must explicitly reference it yourself if you plan to use it beyond the + * lifetime of the state. + * + * @memberof xkb_compose_state + */ +struct xkb_compose_table * +xkb_compose_state_get_compose_table(struct xkb_compose_state *state); + +/** Status of the Compose sequence state machine. */ +enum xkb_compose_status { + /** The initial state; no sequence has started yet. */ + XKB_COMPOSE_NOTHING, + /** In the middle of a sequence. */ + XKB_COMPOSE_COMPOSING, + /** A complete sequence has been matched. */ + XKB_COMPOSE_COMPOSED, + /** The last sequence was cancelled due to an unmatched keysym. */ + XKB_COMPOSE_CANCELLED +}; + +/** The effect of a keysym fed to xkb_compose_state_feed(). */ +enum xkb_compose_feed_result { + /** The keysym had no effect - it did not affect the status. */ + XKB_COMPOSE_FEED_IGNORED, + /** The keysym started, advanced or cancelled a sequence. */ + XKB_COMPOSE_FEED_ACCEPTED +}; + +/** + * Feed one keysym to the Compose sequence state machine. + * + * This function can advance into a compose sequence, cancel a sequence, + * start a new sequence, or do nothing in particular. The resulting + * status may be observed with xkb_compose_state_get_status(). + * + * Some keysyms, such as keysyms for modifier keys, are ignored - they + * have no effect on the status or otherwise. + * + * The following is a description of the possible status transitions, in + * the format CURRENT STATUS => NEXT STATUS, given a non-ignored input + * keysym `keysym`: + * + @verbatim + NOTHING or CANCELLED or COMPOSED => + NOTHING if keysym does not start a sequence. + COMPOSING if keysym starts a sequence. + COMPOSED if keysym starts and terminates a single-keysym sequence. + + COMPOSING => + COMPOSING if keysym advances any of the currently possible + sequences but does not terminate any of them. + COMPOSED if keysym terminates one of the currently possible + sequences. + CANCELLED if keysym does not advance any of the currently + possible sequences. + @endverbatim + * + * The current Compose formats do not support multiple-keysyms. + * Therefore, if you are using a function such as xkb_state_key_get_syms() + * and it returns more than one keysym, consider feeding XKB_KEY_NoSymbol + * instead. + * + * @param state + * The compose state object. + * @param keysym + * A keysym, usually obtained after a key-press event, with a + * function such as xkb_state_key_get_one_sym(). + * + * @returns Whether the keysym was ignored. This is useful, for example, + * if you want to keep a record of the sequence matched thus far. + * + * @memberof xkb_compose_state + */ +enum xkb_compose_feed_result +xkb_compose_state_feed(struct xkb_compose_state *state, + xkb_keysym_t keysym); + +/** + * Reset the Compose sequence state machine. + * + * The status is set to XKB_COMPOSE_NOTHING, and the current sequence + * is discarded. + * + * @memberof xkb_compose_state + */ +void +xkb_compose_state_reset(struct xkb_compose_state *state); + +/** + * Get the current status of the compose state machine. + * + * @see xkb_compose_status + * @memberof xkb_compose_state + **/ +enum xkb_compose_status +xkb_compose_state_get_status(struct xkb_compose_state *state); + +/** + * Get the result Unicode/UTF-8 string for a composed sequence. + * + * See @ref compose-overview for more details. This function is only + * useful when the status is XKB_COMPOSE_COMPOSED. + * + * @param[in] state + * The compose state. + * @param[out] buffer + * A buffer to write the string into. + * @param[in] size + * Size of the buffer. + * + * @warning If the buffer passed is too small, the string is truncated + * (though still NUL-terminated). + * + * @returns + * The number of bytes required for the string, excluding the NUL byte. + * If the sequence is not complete, or does not have a viable result + * string, returns 0, and sets `buffer` to the empty string (if possible). + * @returns + * You may check if truncation has occurred by comparing the return value + * with the size of `buffer`, similarly to the `snprintf`(3) function. + * You may safely pass NULL and 0 to `buffer` and `size` to find the + * required size (without the NUL-byte). + * + * @memberof xkb_compose_state + **/ +int +xkb_compose_state_get_utf8(struct xkb_compose_state *state, + char *buffer, size_t size); + +/** + * Get the result keysym for a composed sequence. + * + * See @ref compose-overview for more details. This function is only + * useful when the status is XKB_COMPOSE_COMPOSED. + * + * @returns The result keysym. If the sequence is not complete, or does + * not specify a result keysym, returns XKB_KEY_NoSymbol. + * + * @memberof xkb_compose_state + **/ +xkb_keysym_t +xkb_compose_state_get_one_sym(struct xkb_compose_state *state); + +/** @} */ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* _XKBCOMMON_COMPOSE_H */ diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-keysyms.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-keysyms.h new file mode 100644 index 000000000..69c582e45 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-keysyms.h @@ -0,0 +1,3012 @@ +#ifndef _XKBCOMMON_KEYSYMS_H +#define _XKBCOMMON_KEYSYMS_H + +/* This file is autogenerated from Makefile.am; please do not commit directly. */ + +#define XKB_KEY_NoSymbol 0x000000 /* Special KeySym */ + +/*********************************************************** +Copyright 1987, 1994, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from The Open Group. + + +Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +******************************************************************/ + +/* + * The "X11 Window System Protocol" standard defines in Appendix A the + * keysym codes. These 29-bit integer values identify characters or + * functions associated with each key (e.g., via the visible + * engraving) of a keyboard layout. This file assigns mnemonic macro + * names for these keysyms. + * + * This file is also compiled (by src/util/makekeys.c in libX11) into + * hash tables that can be accessed with X11 library functions such as + * XStringToKeysym() and XKeysymToString(). + * + * Where a keysym corresponds one-to-one to an ISO 10646 / Unicode + * character, this is noted in a comment that provides both the U+xxxx + * Unicode position, as well as the official Unicode name of the + * character. + * + * Where the correspondence is either not one-to-one or semantically + * unclear, the Unicode position and name are enclosed in + * parentheses. Such legacy keysyms should be considered deprecated + * and are not recommended for use in future keyboard mappings. + * + * For any future extension of the keysyms with characters already + * found in ISO 10646 / Unicode, the following algorithm shall be + * used. The new keysym code position will simply be the character's + * Unicode number plus 0x01000000. The keysym values in the range + * 0x01000100 to 0x0110ffff are reserved to represent Unicode + * characters in the range U+0100 to U+10FFFF. + * + * While most newer Unicode-based X11 clients do already accept + * Unicode-mapped keysyms in the range 0x01000100 to 0x0110ffff, it + * will remain necessary for clients -- in the interest of + * compatibility with existing servers -- to also understand the + * existing legacy keysym values in the range 0x0100 to 0x20ff. + * + * Where several mnemonic names are defined for the same keysym in this + * file, all but the first one listed should be considered deprecated. + * + * Mnemonic names for keysyms are defined in this file with lines + * that match one of these Perl regular expressions: + * + * /^\#define XKB_KEY_([a-zA-Z_0-9]+)\s+0x([0-9a-f]+)\s*\/\* U+([0-9A-F]{4,6}) (.*) \*\/\s*$/ + * /^\#define XKB_KEY_([a-zA-Z_0-9]+)\s+0x([0-9a-f]+)\s*\/\*\(U+([0-9A-F]{4,6}) (.*)\)\*\/\s*$/ + * /^\#define XKB_KEY_([a-zA-Z_0-9]+)\s+0x([0-9a-f]+)\s*(\/\*\s*(.*)\s*\*\/)?\s*$/ + * + * Before adding new keysyms, please do consider the following: In + * addition to the keysym names defined in this file, the + * XStringToKeysym() and XKeysymToString() functions will also handle + * any keysym string of the form "U0020" to "U007E" and "U00A0" to + * "U10FFFF" for all possible Unicode characters. In other words, + * every possible Unicode character has already a keysym string + * defined algorithmically, even if it is not listed here. Therefore, + * defining an additional keysym macro is only necessary where a + * non-hexadecimal mnemonic name is needed, or where the new keysym + * does not represent any existing Unicode character. + * + * When adding new keysyms to this file, do not forget to also update the + * following as needed: + * + * - the mappings in src/KeyBind.c in the repo + * git://anongit.freedesktop.org/xorg/lib/libX11.git + * + * - the protocol specification in specs/keysyms.xml + * in the repo git://anongit.freedesktop.org/xorg/proto/x11proto.git + * + */ + +#define XKB_KEY_VoidSymbol 0xffffff /* Void symbol */ + +/* + * TTY function keys, cleverly chosen to map to ASCII, for convenience of + * programming, but could have been arbitrary (at the cost of lookup + * tables in client code). + */ + +#define XKB_KEY_BackSpace 0xff08 /* Back space, back char */ +#define XKB_KEY_Tab 0xff09 +#define XKB_KEY_Linefeed 0xff0a /* Linefeed, LF */ +#define XKB_KEY_Clear 0xff0b +#define XKB_KEY_Return 0xff0d /* Return, enter */ +#define XKB_KEY_Pause 0xff13 /* Pause, hold */ +#define XKB_KEY_Scroll_Lock 0xff14 +#define XKB_KEY_Sys_Req 0xff15 +#define XKB_KEY_Escape 0xff1b +#define XKB_KEY_Delete 0xffff /* Delete, rubout */ + + + +/* International & multi-key character composition */ + +#define XKB_KEY_Multi_key 0xff20 /* Multi-key character compose */ +#define XKB_KEY_Codeinput 0xff37 +#define XKB_KEY_SingleCandidate 0xff3c +#define XKB_KEY_MultipleCandidate 0xff3d +#define XKB_KEY_PreviousCandidate 0xff3e + +/* Japanese keyboard support */ + +#define XKB_KEY_Kanji 0xff21 /* Kanji, Kanji convert */ +#define XKB_KEY_Muhenkan 0xff22 /* Cancel Conversion */ +#define XKB_KEY_Henkan_Mode 0xff23 /* Start/Stop Conversion */ +#define XKB_KEY_Henkan 0xff23 /* Alias for Henkan_Mode */ +#define XKB_KEY_Romaji 0xff24 /* to Romaji */ +#define XKB_KEY_Hiragana 0xff25 /* to Hiragana */ +#define XKB_KEY_Katakana 0xff26 /* to Katakana */ +#define XKB_KEY_Hiragana_Katakana 0xff27 /* Hiragana/Katakana toggle */ +#define XKB_KEY_Zenkaku 0xff28 /* to Zenkaku */ +#define XKB_KEY_Hankaku 0xff29 /* to Hankaku */ +#define XKB_KEY_Zenkaku_Hankaku 0xff2a /* Zenkaku/Hankaku toggle */ +#define XKB_KEY_Touroku 0xff2b /* Add to Dictionary */ +#define XKB_KEY_Massyo 0xff2c /* Delete from Dictionary */ +#define XKB_KEY_Kana_Lock 0xff2d /* Kana Lock */ +#define XKB_KEY_Kana_Shift 0xff2e /* Kana Shift */ +#define XKB_KEY_Eisu_Shift 0xff2f /* Alphanumeric Shift */ +#define XKB_KEY_Eisu_toggle 0xff30 /* Alphanumeric toggle */ +#define XKB_KEY_Kanji_Bangou 0xff37 /* Codeinput */ +#define XKB_KEY_Zen_Koho 0xff3d /* Multiple/All Candidate(s) */ +#define XKB_KEY_Mae_Koho 0xff3e /* Previous Candidate */ + +/* 0xff31 thru 0xff3f are under XK_KOREAN */ + +/* Cursor control & motion */ + +#define XKB_KEY_Home 0xff50 +#define XKB_KEY_Left 0xff51 /* Move left, left arrow */ +#define XKB_KEY_Up 0xff52 /* Move up, up arrow */ +#define XKB_KEY_Right 0xff53 /* Move right, right arrow */ +#define XKB_KEY_Down 0xff54 /* Move down, down arrow */ +#define XKB_KEY_Prior 0xff55 /* Prior, previous */ +#define XKB_KEY_Page_Up 0xff55 +#define XKB_KEY_Next 0xff56 /* Next */ +#define XKB_KEY_Page_Down 0xff56 +#define XKB_KEY_End 0xff57 /* EOL */ +#define XKB_KEY_Begin 0xff58 /* BOL */ + + +/* Misc functions */ + +#define XKB_KEY_Select 0xff60 /* Select, mark */ +#define XKB_KEY_Print 0xff61 +#define XKB_KEY_Execute 0xff62 /* Execute, run, do */ +#define XKB_KEY_Insert 0xff63 /* Insert, insert here */ +#define XKB_KEY_Undo 0xff65 +#define XKB_KEY_Redo 0xff66 /* Redo, again */ +#define XKB_KEY_Menu 0xff67 +#define XKB_KEY_Find 0xff68 /* Find, search */ +#define XKB_KEY_Cancel 0xff69 /* Cancel, stop, abort, exit */ +#define XKB_KEY_Help 0xff6a /* Help */ +#define XKB_KEY_Break 0xff6b +#define XKB_KEY_Mode_switch 0xff7e /* Character set switch */ +#define XKB_KEY_script_switch 0xff7e /* Alias for mode_switch */ +#define XKB_KEY_Num_Lock 0xff7f + +/* Keypad functions, keypad numbers cleverly chosen to map to ASCII */ + +#define XKB_KEY_KP_Space 0xff80 /* Space */ +#define XKB_KEY_KP_Tab 0xff89 +#define XKB_KEY_KP_Enter 0xff8d /* Enter */ +#define XKB_KEY_KP_F1 0xff91 /* PF1, KP_A, ... */ +#define XKB_KEY_KP_F2 0xff92 +#define XKB_KEY_KP_F3 0xff93 +#define XKB_KEY_KP_F4 0xff94 +#define XKB_KEY_KP_Home 0xff95 +#define XKB_KEY_KP_Left 0xff96 +#define XKB_KEY_KP_Up 0xff97 +#define XKB_KEY_KP_Right 0xff98 +#define XKB_KEY_KP_Down 0xff99 +#define XKB_KEY_KP_Prior 0xff9a +#define XKB_KEY_KP_Page_Up 0xff9a +#define XKB_KEY_KP_Next 0xff9b +#define XKB_KEY_KP_Page_Down 0xff9b +#define XKB_KEY_KP_End 0xff9c +#define XKB_KEY_KP_Begin 0xff9d +#define XKB_KEY_KP_Insert 0xff9e +#define XKB_KEY_KP_Delete 0xff9f +#define XKB_KEY_KP_Equal 0xffbd /* Equals */ +#define XKB_KEY_KP_Multiply 0xffaa +#define XKB_KEY_KP_Add 0xffab +#define XKB_KEY_KP_Separator 0xffac /* Separator, often comma */ +#define XKB_KEY_KP_Subtract 0xffad +#define XKB_KEY_KP_Decimal 0xffae +#define XKB_KEY_KP_Divide 0xffaf + +#define XKB_KEY_KP_0 0xffb0 +#define XKB_KEY_KP_1 0xffb1 +#define XKB_KEY_KP_2 0xffb2 +#define XKB_KEY_KP_3 0xffb3 +#define XKB_KEY_KP_4 0xffb4 +#define XKB_KEY_KP_5 0xffb5 +#define XKB_KEY_KP_6 0xffb6 +#define XKB_KEY_KP_7 0xffb7 +#define XKB_KEY_KP_8 0xffb8 +#define XKB_KEY_KP_9 0xffb9 + + + +/* + * Auxiliary functions; note the duplicate definitions for left and right + * function keys; Sun keyboards and a few other manufacturers have such + * function key groups on the left and/or right sides of the keyboard. + * We've not found a keyboard with more than 35 function keys total. + */ + +#define XKB_KEY_F1 0xffbe +#define XKB_KEY_F2 0xffbf +#define XKB_KEY_F3 0xffc0 +#define XKB_KEY_F4 0xffc1 +#define XKB_KEY_F5 0xffc2 +#define XKB_KEY_F6 0xffc3 +#define XKB_KEY_F7 0xffc4 +#define XKB_KEY_F8 0xffc5 +#define XKB_KEY_F9 0xffc6 +#define XKB_KEY_F10 0xffc7 +#define XKB_KEY_F11 0xffc8 +#define XKB_KEY_L1 0xffc8 +#define XKB_KEY_F12 0xffc9 +#define XKB_KEY_L2 0xffc9 +#define XKB_KEY_F13 0xffca +#define XKB_KEY_L3 0xffca +#define XKB_KEY_F14 0xffcb +#define XKB_KEY_L4 0xffcb +#define XKB_KEY_F15 0xffcc +#define XKB_KEY_L5 0xffcc +#define XKB_KEY_F16 0xffcd +#define XKB_KEY_L6 0xffcd +#define XKB_KEY_F17 0xffce +#define XKB_KEY_L7 0xffce +#define XKB_KEY_F18 0xffcf +#define XKB_KEY_L8 0xffcf +#define XKB_KEY_F19 0xffd0 +#define XKB_KEY_L9 0xffd0 +#define XKB_KEY_F20 0xffd1 +#define XKB_KEY_L10 0xffd1 +#define XKB_KEY_F21 0xffd2 +#define XKB_KEY_R1 0xffd2 +#define XKB_KEY_F22 0xffd3 +#define XKB_KEY_R2 0xffd3 +#define XKB_KEY_F23 0xffd4 +#define XKB_KEY_R3 0xffd4 +#define XKB_KEY_F24 0xffd5 +#define XKB_KEY_R4 0xffd5 +#define XKB_KEY_F25 0xffd6 +#define XKB_KEY_R5 0xffd6 +#define XKB_KEY_F26 0xffd7 +#define XKB_KEY_R6 0xffd7 +#define XKB_KEY_F27 0xffd8 +#define XKB_KEY_R7 0xffd8 +#define XKB_KEY_F28 0xffd9 +#define XKB_KEY_R8 0xffd9 +#define XKB_KEY_F29 0xffda +#define XKB_KEY_R9 0xffda +#define XKB_KEY_F30 0xffdb +#define XKB_KEY_R10 0xffdb +#define XKB_KEY_F31 0xffdc +#define XKB_KEY_R11 0xffdc +#define XKB_KEY_F32 0xffdd +#define XKB_KEY_R12 0xffdd +#define XKB_KEY_F33 0xffde +#define XKB_KEY_R13 0xffde +#define XKB_KEY_F34 0xffdf +#define XKB_KEY_R14 0xffdf +#define XKB_KEY_F35 0xffe0 +#define XKB_KEY_R15 0xffe0 + +/* Modifiers */ + +#define XKB_KEY_Shift_L 0xffe1 /* Left shift */ +#define XKB_KEY_Shift_R 0xffe2 /* Right shift */ +#define XKB_KEY_Control_L 0xffe3 /* Left control */ +#define XKB_KEY_Control_R 0xffe4 /* Right control */ +#define XKB_KEY_Caps_Lock 0xffe5 /* Caps lock */ +#define XKB_KEY_Shift_Lock 0xffe6 /* Shift lock */ + +#define XKB_KEY_Meta_L 0xffe7 /* Left meta */ +#define XKB_KEY_Meta_R 0xffe8 /* Right meta */ +#define XKB_KEY_Alt_L 0xffe9 /* Left alt */ +#define XKB_KEY_Alt_R 0xffea /* Right alt */ +#define XKB_KEY_Super_L 0xffeb /* Left super */ +#define XKB_KEY_Super_R 0xffec /* Right super */ +#define XKB_KEY_Hyper_L 0xffed /* Left hyper */ +#define XKB_KEY_Hyper_R 0xffee /* Right hyper */ + +/* + * Keyboard (XKB) Extension function and modifier keys + * (from Appendix C of "The X Keyboard Extension: Protocol Specification") + * Byte 3 = 0xfe + */ + +#define XKB_KEY_ISO_Lock 0xfe01 +#define XKB_KEY_ISO_Level2_Latch 0xfe02 +#define XKB_KEY_ISO_Level3_Shift 0xfe03 +#define XKB_KEY_ISO_Level3_Latch 0xfe04 +#define XKB_KEY_ISO_Level3_Lock 0xfe05 +#define XKB_KEY_ISO_Level5_Shift 0xfe11 +#define XKB_KEY_ISO_Level5_Latch 0xfe12 +#define XKB_KEY_ISO_Level5_Lock 0xfe13 +#define XKB_KEY_ISO_Group_Shift 0xff7e /* Alias for mode_switch */ +#define XKB_KEY_ISO_Group_Latch 0xfe06 +#define XKB_KEY_ISO_Group_Lock 0xfe07 +#define XKB_KEY_ISO_Next_Group 0xfe08 +#define XKB_KEY_ISO_Next_Group_Lock 0xfe09 +#define XKB_KEY_ISO_Prev_Group 0xfe0a +#define XKB_KEY_ISO_Prev_Group_Lock 0xfe0b +#define XKB_KEY_ISO_First_Group 0xfe0c +#define XKB_KEY_ISO_First_Group_Lock 0xfe0d +#define XKB_KEY_ISO_Last_Group 0xfe0e +#define XKB_KEY_ISO_Last_Group_Lock 0xfe0f + +#define XKB_KEY_ISO_Left_Tab 0xfe20 +#define XKB_KEY_ISO_Move_Line_Up 0xfe21 +#define XKB_KEY_ISO_Move_Line_Down 0xfe22 +#define XKB_KEY_ISO_Partial_Line_Up 0xfe23 +#define XKB_KEY_ISO_Partial_Line_Down 0xfe24 +#define XKB_KEY_ISO_Partial_Space_Left 0xfe25 +#define XKB_KEY_ISO_Partial_Space_Right 0xfe26 +#define XKB_KEY_ISO_Set_Margin_Left 0xfe27 +#define XKB_KEY_ISO_Set_Margin_Right 0xfe28 +#define XKB_KEY_ISO_Release_Margin_Left 0xfe29 +#define XKB_KEY_ISO_Release_Margin_Right 0xfe2a +#define XKB_KEY_ISO_Release_Both_Margins 0xfe2b +#define XKB_KEY_ISO_Fast_Cursor_Left 0xfe2c +#define XKB_KEY_ISO_Fast_Cursor_Right 0xfe2d +#define XKB_KEY_ISO_Fast_Cursor_Up 0xfe2e +#define XKB_KEY_ISO_Fast_Cursor_Down 0xfe2f +#define XKB_KEY_ISO_Continuous_Underline 0xfe30 +#define XKB_KEY_ISO_Discontinuous_Underline 0xfe31 +#define XKB_KEY_ISO_Emphasize 0xfe32 +#define XKB_KEY_ISO_Center_Object 0xfe33 +#define XKB_KEY_ISO_Enter 0xfe34 + +#define XKB_KEY_dead_grave 0xfe50 +#define XKB_KEY_dead_acute 0xfe51 +#define XKB_KEY_dead_circumflex 0xfe52 +#define XKB_KEY_dead_tilde 0xfe53 +#define XKB_KEY_dead_perispomeni 0xfe53 /* alias for dead_tilde */ +#define XKB_KEY_dead_macron 0xfe54 +#define XKB_KEY_dead_breve 0xfe55 +#define XKB_KEY_dead_abovedot 0xfe56 +#define XKB_KEY_dead_diaeresis 0xfe57 +#define XKB_KEY_dead_abovering 0xfe58 +#define XKB_KEY_dead_doubleacute 0xfe59 +#define XKB_KEY_dead_caron 0xfe5a +#define XKB_KEY_dead_cedilla 0xfe5b +#define XKB_KEY_dead_ogonek 0xfe5c +#define XKB_KEY_dead_iota 0xfe5d +#define XKB_KEY_dead_voiced_sound 0xfe5e +#define XKB_KEY_dead_semivoiced_sound 0xfe5f +#define XKB_KEY_dead_belowdot 0xfe60 +#define XKB_KEY_dead_hook 0xfe61 +#define XKB_KEY_dead_horn 0xfe62 +#define XKB_KEY_dead_stroke 0xfe63 +#define XKB_KEY_dead_abovecomma 0xfe64 +#define XKB_KEY_dead_psili 0xfe64 /* alias for dead_abovecomma */ +#define XKB_KEY_dead_abovereversedcomma 0xfe65 +#define XKB_KEY_dead_dasia 0xfe65 /* alias for dead_abovereversedcomma */ +#define XKB_KEY_dead_doublegrave 0xfe66 +#define XKB_KEY_dead_belowring 0xfe67 +#define XKB_KEY_dead_belowmacron 0xfe68 +#define XKB_KEY_dead_belowcircumflex 0xfe69 +#define XKB_KEY_dead_belowtilde 0xfe6a +#define XKB_KEY_dead_belowbreve 0xfe6b +#define XKB_KEY_dead_belowdiaeresis 0xfe6c +#define XKB_KEY_dead_invertedbreve 0xfe6d +#define XKB_KEY_dead_belowcomma 0xfe6e +#define XKB_KEY_dead_currency 0xfe6f + +/* extra dead elements for German T3 layout */ +#define XKB_KEY_dead_lowline 0xfe90 +#define XKB_KEY_dead_aboveverticalline 0xfe91 +#define XKB_KEY_dead_belowverticalline 0xfe92 +#define XKB_KEY_dead_longsolidusoverlay 0xfe93 + +/* dead vowels for universal syllable entry */ +#define XKB_KEY_dead_a 0xfe80 +#define XKB_KEY_dead_A 0xfe81 +#define XKB_KEY_dead_e 0xfe82 +#define XKB_KEY_dead_E 0xfe83 +#define XKB_KEY_dead_i 0xfe84 +#define XKB_KEY_dead_I 0xfe85 +#define XKB_KEY_dead_o 0xfe86 +#define XKB_KEY_dead_O 0xfe87 +#define XKB_KEY_dead_u 0xfe88 +#define XKB_KEY_dead_U 0xfe89 +#define XKB_KEY_dead_small_schwa 0xfe8a +#define XKB_KEY_dead_capital_schwa 0xfe8b + +#define XKB_KEY_dead_greek 0xfe8c + +#define XKB_KEY_First_Virtual_Screen 0xfed0 +#define XKB_KEY_Prev_Virtual_Screen 0xfed1 +#define XKB_KEY_Next_Virtual_Screen 0xfed2 +#define XKB_KEY_Last_Virtual_Screen 0xfed4 +#define XKB_KEY_Terminate_Server 0xfed5 + +#define XKB_KEY_AccessX_Enable 0xfe70 +#define XKB_KEY_AccessX_Feedback_Enable 0xfe71 +#define XKB_KEY_RepeatKeys_Enable 0xfe72 +#define XKB_KEY_SlowKeys_Enable 0xfe73 +#define XKB_KEY_BounceKeys_Enable 0xfe74 +#define XKB_KEY_StickyKeys_Enable 0xfe75 +#define XKB_KEY_MouseKeys_Enable 0xfe76 +#define XKB_KEY_MouseKeys_Accel_Enable 0xfe77 +#define XKB_KEY_Overlay1_Enable 0xfe78 +#define XKB_KEY_Overlay2_Enable 0xfe79 +#define XKB_KEY_AudibleBell_Enable 0xfe7a + +#define XKB_KEY_Pointer_Left 0xfee0 +#define XKB_KEY_Pointer_Right 0xfee1 +#define XKB_KEY_Pointer_Up 0xfee2 +#define XKB_KEY_Pointer_Down 0xfee3 +#define XKB_KEY_Pointer_UpLeft 0xfee4 +#define XKB_KEY_Pointer_UpRight 0xfee5 +#define XKB_KEY_Pointer_DownLeft 0xfee6 +#define XKB_KEY_Pointer_DownRight 0xfee7 +#define XKB_KEY_Pointer_Button_Dflt 0xfee8 +#define XKB_KEY_Pointer_Button1 0xfee9 +#define XKB_KEY_Pointer_Button2 0xfeea +#define XKB_KEY_Pointer_Button3 0xfeeb +#define XKB_KEY_Pointer_Button4 0xfeec +#define XKB_KEY_Pointer_Button5 0xfeed +#define XKB_KEY_Pointer_DblClick_Dflt 0xfeee +#define XKB_KEY_Pointer_DblClick1 0xfeef +#define XKB_KEY_Pointer_DblClick2 0xfef0 +#define XKB_KEY_Pointer_DblClick3 0xfef1 +#define XKB_KEY_Pointer_DblClick4 0xfef2 +#define XKB_KEY_Pointer_DblClick5 0xfef3 +#define XKB_KEY_Pointer_Drag_Dflt 0xfef4 +#define XKB_KEY_Pointer_Drag1 0xfef5 +#define XKB_KEY_Pointer_Drag2 0xfef6 +#define XKB_KEY_Pointer_Drag3 0xfef7 +#define XKB_KEY_Pointer_Drag4 0xfef8 +#define XKB_KEY_Pointer_Drag5 0xfefd + +#define XKB_KEY_Pointer_EnableKeys 0xfef9 +#define XKB_KEY_Pointer_Accelerate 0xfefa +#define XKB_KEY_Pointer_DfltBtnNext 0xfefb +#define XKB_KEY_Pointer_DfltBtnPrev 0xfefc + +/* Single-Stroke Multiple-Character N-Graph Keysyms For The X Input Method */ + +#define XKB_KEY_ch 0xfea0 +#define XKB_KEY_Ch 0xfea1 +#define XKB_KEY_CH 0xfea2 +#define XKB_KEY_c_h 0xfea3 +#define XKB_KEY_C_h 0xfea4 +#define XKB_KEY_C_H 0xfea5 + + +/* + * 3270 Terminal Keys + * Byte 3 = 0xfd + */ + +#define XKB_KEY_3270_Duplicate 0xfd01 +#define XKB_KEY_3270_FieldMark 0xfd02 +#define XKB_KEY_3270_Right2 0xfd03 +#define XKB_KEY_3270_Left2 0xfd04 +#define XKB_KEY_3270_BackTab 0xfd05 +#define XKB_KEY_3270_EraseEOF 0xfd06 +#define XKB_KEY_3270_EraseInput 0xfd07 +#define XKB_KEY_3270_Reset 0xfd08 +#define XKB_KEY_3270_Quit 0xfd09 +#define XKB_KEY_3270_PA1 0xfd0a +#define XKB_KEY_3270_PA2 0xfd0b +#define XKB_KEY_3270_PA3 0xfd0c +#define XKB_KEY_3270_Test 0xfd0d +#define XKB_KEY_3270_Attn 0xfd0e +#define XKB_KEY_3270_CursorBlink 0xfd0f +#define XKB_KEY_3270_AltCursor 0xfd10 +#define XKB_KEY_3270_KeyClick 0xfd11 +#define XKB_KEY_3270_Jump 0xfd12 +#define XKB_KEY_3270_Ident 0xfd13 +#define XKB_KEY_3270_Rule 0xfd14 +#define XKB_KEY_3270_Copy 0xfd15 +#define XKB_KEY_3270_Play 0xfd16 +#define XKB_KEY_3270_Setup 0xfd17 +#define XKB_KEY_3270_Record 0xfd18 +#define XKB_KEY_3270_ChangeScreen 0xfd19 +#define XKB_KEY_3270_DeleteWord 0xfd1a +#define XKB_KEY_3270_ExSelect 0xfd1b +#define XKB_KEY_3270_CursorSelect 0xfd1c +#define XKB_KEY_3270_PrintScreen 0xfd1d +#define XKB_KEY_3270_Enter 0xfd1e + +/* + * Latin 1 + * (ISO/IEC 8859-1 = Unicode U+0020..U+00FF) + * Byte 3 = 0 + */ +#define XKB_KEY_space 0x0020 /* U+0020 SPACE */ +#define XKB_KEY_exclam 0x0021 /* U+0021 EXCLAMATION MARK */ +#define XKB_KEY_quotedbl 0x0022 /* U+0022 QUOTATION MARK */ +#define XKB_KEY_numbersign 0x0023 /* U+0023 NUMBER SIGN */ +#define XKB_KEY_dollar 0x0024 /* U+0024 DOLLAR SIGN */ +#define XKB_KEY_percent 0x0025 /* U+0025 PERCENT SIGN */ +#define XKB_KEY_ampersand 0x0026 /* U+0026 AMPERSAND */ +#define XKB_KEY_apostrophe 0x0027 /* U+0027 APOSTROPHE */ +#define XKB_KEY_quoteright 0x0027 /* deprecated */ +#define XKB_KEY_parenleft 0x0028 /* U+0028 LEFT PARENTHESIS */ +#define XKB_KEY_parenright 0x0029 /* U+0029 RIGHT PARENTHESIS */ +#define XKB_KEY_asterisk 0x002a /* U+002A ASTERISK */ +#define XKB_KEY_plus 0x002b /* U+002B PLUS SIGN */ +#define XKB_KEY_comma 0x002c /* U+002C COMMA */ +#define XKB_KEY_minus 0x002d /* U+002D HYPHEN-MINUS */ +#define XKB_KEY_period 0x002e /* U+002E FULL STOP */ +#define XKB_KEY_slash 0x002f /* U+002F SOLIDUS */ +#define XKB_KEY_0 0x0030 /* U+0030 DIGIT ZERO */ +#define XKB_KEY_1 0x0031 /* U+0031 DIGIT ONE */ +#define XKB_KEY_2 0x0032 /* U+0032 DIGIT TWO */ +#define XKB_KEY_3 0x0033 /* U+0033 DIGIT THREE */ +#define XKB_KEY_4 0x0034 /* U+0034 DIGIT FOUR */ +#define XKB_KEY_5 0x0035 /* U+0035 DIGIT FIVE */ +#define XKB_KEY_6 0x0036 /* U+0036 DIGIT SIX */ +#define XKB_KEY_7 0x0037 /* U+0037 DIGIT SEVEN */ +#define XKB_KEY_8 0x0038 /* U+0038 DIGIT EIGHT */ +#define XKB_KEY_9 0x0039 /* U+0039 DIGIT NINE */ +#define XKB_KEY_colon 0x003a /* U+003A COLON */ +#define XKB_KEY_semicolon 0x003b /* U+003B SEMICOLON */ +#define XKB_KEY_less 0x003c /* U+003C LESS-THAN SIGN */ +#define XKB_KEY_equal 0x003d /* U+003D EQUALS SIGN */ +#define XKB_KEY_greater 0x003e /* U+003E GREATER-THAN SIGN */ +#define XKB_KEY_question 0x003f /* U+003F QUESTION MARK */ +#define XKB_KEY_at 0x0040 /* U+0040 COMMERCIAL AT */ +#define XKB_KEY_A 0x0041 /* U+0041 LATIN CAPITAL LETTER A */ +#define XKB_KEY_B 0x0042 /* U+0042 LATIN CAPITAL LETTER B */ +#define XKB_KEY_C 0x0043 /* U+0043 LATIN CAPITAL LETTER C */ +#define XKB_KEY_D 0x0044 /* U+0044 LATIN CAPITAL LETTER D */ +#define XKB_KEY_E 0x0045 /* U+0045 LATIN CAPITAL LETTER E */ +#define XKB_KEY_F 0x0046 /* U+0046 LATIN CAPITAL LETTER F */ +#define XKB_KEY_G 0x0047 /* U+0047 LATIN CAPITAL LETTER G */ +#define XKB_KEY_H 0x0048 /* U+0048 LATIN CAPITAL LETTER H */ +#define XKB_KEY_I 0x0049 /* U+0049 LATIN CAPITAL LETTER I */ +#define XKB_KEY_J 0x004a /* U+004A LATIN CAPITAL LETTER J */ +#define XKB_KEY_K 0x004b /* U+004B LATIN CAPITAL LETTER K */ +#define XKB_KEY_L 0x004c /* U+004C LATIN CAPITAL LETTER L */ +#define XKB_KEY_M 0x004d /* U+004D LATIN CAPITAL LETTER M */ +#define XKB_KEY_N 0x004e /* U+004E LATIN CAPITAL LETTER N */ +#define XKB_KEY_O 0x004f /* U+004F LATIN CAPITAL LETTER O */ +#define XKB_KEY_P 0x0050 /* U+0050 LATIN CAPITAL LETTER P */ +#define XKB_KEY_Q 0x0051 /* U+0051 LATIN CAPITAL LETTER Q */ +#define XKB_KEY_R 0x0052 /* U+0052 LATIN CAPITAL LETTER R */ +#define XKB_KEY_S 0x0053 /* U+0053 LATIN CAPITAL LETTER S */ +#define XKB_KEY_T 0x0054 /* U+0054 LATIN CAPITAL LETTER T */ +#define XKB_KEY_U 0x0055 /* U+0055 LATIN CAPITAL LETTER U */ +#define XKB_KEY_V 0x0056 /* U+0056 LATIN CAPITAL LETTER V */ +#define XKB_KEY_W 0x0057 /* U+0057 LATIN CAPITAL LETTER W */ +#define XKB_KEY_X 0x0058 /* U+0058 LATIN CAPITAL LETTER X */ +#define XKB_KEY_Y 0x0059 /* U+0059 LATIN CAPITAL LETTER Y */ +#define XKB_KEY_Z 0x005a /* U+005A LATIN CAPITAL LETTER Z */ +#define XKB_KEY_bracketleft 0x005b /* U+005B LEFT SQUARE BRACKET */ +#define XKB_KEY_backslash 0x005c /* U+005C REVERSE SOLIDUS */ +#define XKB_KEY_bracketright 0x005d /* U+005D RIGHT SQUARE BRACKET */ +#define XKB_KEY_asciicircum 0x005e /* U+005E CIRCUMFLEX ACCENT */ +#define XKB_KEY_underscore 0x005f /* U+005F LOW LINE */ +#define XKB_KEY_grave 0x0060 /* U+0060 GRAVE ACCENT */ +#define XKB_KEY_quoteleft 0x0060 /* deprecated */ +#define XKB_KEY_a 0x0061 /* U+0061 LATIN SMALL LETTER A */ +#define XKB_KEY_b 0x0062 /* U+0062 LATIN SMALL LETTER B */ +#define XKB_KEY_c 0x0063 /* U+0063 LATIN SMALL LETTER C */ +#define XKB_KEY_d 0x0064 /* U+0064 LATIN SMALL LETTER D */ +#define XKB_KEY_e 0x0065 /* U+0065 LATIN SMALL LETTER E */ +#define XKB_KEY_f 0x0066 /* U+0066 LATIN SMALL LETTER F */ +#define XKB_KEY_g 0x0067 /* U+0067 LATIN SMALL LETTER G */ +#define XKB_KEY_h 0x0068 /* U+0068 LATIN SMALL LETTER H */ +#define XKB_KEY_i 0x0069 /* U+0069 LATIN SMALL LETTER I */ +#define XKB_KEY_j 0x006a /* U+006A LATIN SMALL LETTER J */ +#define XKB_KEY_k 0x006b /* U+006B LATIN SMALL LETTER K */ +#define XKB_KEY_l 0x006c /* U+006C LATIN SMALL LETTER L */ +#define XKB_KEY_m 0x006d /* U+006D LATIN SMALL LETTER M */ +#define XKB_KEY_n 0x006e /* U+006E LATIN SMALL LETTER N */ +#define XKB_KEY_o 0x006f /* U+006F LATIN SMALL LETTER O */ +#define XKB_KEY_p 0x0070 /* U+0070 LATIN SMALL LETTER P */ +#define XKB_KEY_q 0x0071 /* U+0071 LATIN SMALL LETTER Q */ +#define XKB_KEY_r 0x0072 /* U+0072 LATIN SMALL LETTER R */ +#define XKB_KEY_s 0x0073 /* U+0073 LATIN SMALL LETTER S */ +#define XKB_KEY_t 0x0074 /* U+0074 LATIN SMALL LETTER T */ +#define XKB_KEY_u 0x0075 /* U+0075 LATIN SMALL LETTER U */ +#define XKB_KEY_v 0x0076 /* U+0076 LATIN SMALL LETTER V */ +#define XKB_KEY_w 0x0077 /* U+0077 LATIN SMALL LETTER W */ +#define XKB_KEY_x 0x0078 /* U+0078 LATIN SMALL LETTER X */ +#define XKB_KEY_y 0x0079 /* U+0079 LATIN SMALL LETTER Y */ +#define XKB_KEY_z 0x007a /* U+007A LATIN SMALL LETTER Z */ +#define XKB_KEY_braceleft 0x007b /* U+007B LEFT CURLY BRACKET */ +#define XKB_KEY_bar 0x007c /* U+007C VERTICAL LINE */ +#define XKB_KEY_braceright 0x007d /* U+007D RIGHT CURLY BRACKET */ +#define XKB_KEY_asciitilde 0x007e /* U+007E TILDE */ + +#define XKB_KEY_nobreakspace 0x00a0 /* U+00A0 NO-BREAK SPACE */ +#define XKB_KEY_exclamdown 0x00a1 /* U+00A1 INVERTED EXCLAMATION MARK */ +#define XKB_KEY_cent 0x00a2 /* U+00A2 CENT SIGN */ +#define XKB_KEY_sterling 0x00a3 /* U+00A3 POUND SIGN */ +#define XKB_KEY_currency 0x00a4 /* U+00A4 CURRENCY SIGN */ +#define XKB_KEY_yen 0x00a5 /* U+00A5 YEN SIGN */ +#define XKB_KEY_brokenbar 0x00a6 /* U+00A6 BROKEN BAR */ +#define XKB_KEY_section 0x00a7 /* U+00A7 SECTION SIGN */ +#define XKB_KEY_diaeresis 0x00a8 /* U+00A8 DIAERESIS */ +#define XKB_KEY_copyright 0x00a9 /* U+00A9 COPYRIGHT SIGN */ +#define XKB_KEY_ordfeminine 0x00aa /* U+00AA FEMININE ORDINAL INDICATOR */ +#define XKB_KEY_guillemotleft 0x00ab /* U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */ +#define XKB_KEY_notsign 0x00ac /* U+00AC NOT SIGN */ +#define XKB_KEY_hyphen 0x00ad /* U+00AD SOFT HYPHEN */ +#define XKB_KEY_registered 0x00ae /* U+00AE REGISTERED SIGN */ +#define XKB_KEY_macron 0x00af /* U+00AF MACRON */ +#define XKB_KEY_degree 0x00b0 /* U+00B0 DEGREE SIGN */ +#define XKB_KEY_plusminus 0x00b1 /* U+00B1 PLUS-MINUS SIGN */ +#define XKB_KEY_twosuperior 0x00b2 /* U+00B2 SUPERSCRIPT TWO */ +#define XKB_KEY_threesuperior 0x00b3 /* U+00B3 SUPERSCRIPT THREE */ +#define XKB_KEY_acute 0x00b4 /* U+00B4 ACUTE ACCENT */ +#define XKB_KEY_mu 0x00b5 /* U+00B5 MICRO SIGN */ +#define XKB_KEY_paragraph 0x00b6 /* U+00B6 PILCROW SIGN */ +#define XKB_KEY_periodcentered 0x00b7 /* U+00B7 MIDDLE DOT */ +#define XKB_KEY_cedilla 0x00b8 /* U+00B8 CEDILLA */ +#define XKB_KEY_onesuperior 0x00b9 /* U+00B9 SUPERSCRIPT ONE */ +#define XKB_KEY_masculine 0x00ba /* U+00BA MASCULINE ORDINAL INDICATOR */ +#define XKB_KEY_guillemotright 0x00bb /* U+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */ +#define XKB_KEY_onequarter 0x00bc /* U+00BC VULGAR FRACTION ONE QUARTER */ +#define XKB_KEY_onehalf 0x00bd /* U+00BD VULGAR FRACTION ONE HALF */ +#define XKB_KEY_threequarters 0x00be /* U+00BE VULGAR FRACTION THREE QUARTERS */ +#define XKB_KEY_questiondown 0x00bf /* U+00BF INVERTED QUESTION MARK */ +#define XKB_KEY_Agrave 0x00c0 /* U+00C0 LATIN CAPITAL LETTER A WITH GRAVE */ +#define XKB_KEY_Aacute 0x00c1 /* U+00C1 LATIN CAPITAL LETTER A WITH ACUTE */ +#define XKB_KEY_Acircumflex 0x00c2 /* U+00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX */ +#define XKB_KEY_Atilde 0x00c3 /* U+00C3 LATIN CAPITAL LETTER A WITH TILDE */ +#define XKB_KEY_Adiaeresis 0x00c4 /* U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS */ +#define XKB_KEY_Aring 0x00c5 /* U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE */ +#define XKB_KEY_AE 0x00c6 /* U+00C6 LATIN CAPITAL LETTER AE */ +#define XKB_KEY_Ccedilla 0x00c7 /* U+00C7 LATIN CAPITAL LETTER C WITH CEDILLA */ +#define XKB_KEY_Egrave 0x00c8 /* U+00C8 LATIN CAPITAL LETTER E WITH GRAVE */ +#define XKB_KEY_Eacute 0x00c9 /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ +#define XKB_KEY_Ecircumflex 0x00ca /* U+00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX */ +#define XKB_KEY_Ediaeresis 0x00cb /* U+00CB LATIN CAPITAL LETTER E WITH DIAERESIS */ +#define XKB_KEY_Igrave 0x00cc /* U+00CC LATIN CAPITAL LETTER I WITH GRAVE */ +#define XKB_KEY_Iacute 0x00cd /* U+00CD LATIN CAPITAL LETTER I WITH ACUTE */ +#define XKB_KEY_Icircumflex 0x00ce /* U+00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX */ +#define XKB_KEY_Idiaeresis 0x00cf /* U+00CF LATIN CAPITAL LETTER I WITH DIAERESIS */ +#define XKB_KEY_ETH 0x00d0 /* U+00D0 LATIN CAPITAL LETTER ETH */ +#define XKB_KEY_Eth 0x00d0 /* deprecated */ +#define XKB_KEY_Ntilde 0x00d1 /* U+00D1 LATIN CAPITAL LETTER N WITH TILDE */ +#define XKB_KEY_Ograve 0x00d2 /* U+00D2 LATIN CAPITAL LETTER O WITH GRAVE */ +#define XKB_KEY_Oacute 0x00d3 /* U+00D3 LATIN CAPITAL LETTER O WITH ACUTE */ +#define XKB_KEY_Ocircumflex 0x00d4 /* U+00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX */ +#define XKB_KEY_Otilde 0x00d5 /* U+00D5 LATIN CAPITAL LETTER O WITH TILDE */ +#define XKB_KEY_Odiaeresis 0x00d6 /* U+00D6 LATIN CAPITAL LETTER O WITH DIAERESIS */ +#define XKB_KEY_multiply 0x00d7 /* U+00D7 MULTIPLICATION SIGN */ +#define XKB_KEY_Oslash 0x00d8 /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ +#define XKB_KEY_Ooblique 0x00d8 /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ +#define XKB_KEY_Ugrave 0x00d9 /* U+00D9 LATIN CAPITAL LETTER U WITH GRAVE */ +#define XKB_KEY_Uacute 0x00da /* U+00DA LATIN CAPITAL LETTER U WITH ACUTE */ +#define XKB_KEY_Ucircumflex 0x00db /* U+00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX */ +#define XKB_KEY_Udiaeresis 0x00dc /* U+00DC LATIN CAPITAL LETTER U WITH DIAERESIS */ +#define XKB_KEY_Yacute 0x00dd /* U+00DD LATIN CAPITAL LETTER Y WITH ACUTE */ +#define XKB_KEY_THORN 0x00de /* U+00DE LATIN CAPITAL LETTER THORN */ +#define XKB_KEY_Thorn 0x00de /* deprecated */ +#define XKB_KEY_ssharp 0x00df /* U+00DF LATIN SMALL LETTER SHARP S */ +#define XKB_KEY_agrave 0x00e0 /* U+00E0 LATIN SMALL LETTER A WITH GRAVE */ +#define XKB_KEY_aacute 0x00e1 /* U+00E1 LATIN SMALL LETTER A WITH ACUTE */ +#define XKB_KEY_acircumflex 0x00e2 /* U+00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX */ +#define XKB_KEY_atilde 0x00e3 /* U+00E3 LATIN SMALL LETTER A WITH TILDE */ +#define XKB_KEY_adiaeresis 0x00e4 /* U+00E4 LATIN SMALL LETTER A WITH DIAERESIS */ +#define XKB_KEY_aring 0x00e5 /* U+00E5 LATIN SMALL LETTER A WITH RING ABOVE */ +#define XKB_KEY_ae 0x00e6 /* U+00E6 LATIN SMALL LETTER AE */ +#define XKB_KEY_ccedilla 0x00e7 /* U+00E7 LATIN SMALL LETTER C WITH CEDILLA */ +#define XKB_KEY_egrave 0x00e8 /* U+00E8 LATIN SMALL LETTER E WITH GRAVE */ +#define XKB_KEY_eacute 0x00e9 /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ +#define XKB_KEY_ecircumflex 0x00ea /* U+00EA LATIN SMALL LETTER E WITH CIRCUMFLEX */ +#define XKB_KEY_ediaeresis 0x00eb /* U+00EB LATIN SMALL LETTER E WITH DIAERESIS */ +#define XKB_KEY_igrave 0x00ec /* U+00EC LATIN SMALL LETTER I WITH GRAVE */ +#define XKB_KEY_iacute 0x00ed /* U+00ED LATIN SMALL LETTER I WITH ACUTE */ +#define XKB_KEY_icircumflex 0x00ee /* U+00EE LATIN SMALL LETTER I WITH CIRCUMFLEX */ +#define XKB_KEY_idiaeresis 0x00ef /* U+00EF LATIN SMALL LETTER I WITH DIAERESIS */ +#define XKB_KEY_eth 0x00f0 /* U+00F0 LATIN SMALL LETTER ETH */ +#define XKB_KEY_ntilde 0x00f1 /* U+00F1 LATIN SMALL LETTER N WITH TILDE */ +#define XKB_KEY_ograve 0x00f2 /* U+00F2 LATIN SMALL LETTER O WITH GRAVE */ +#define XKB_KEY_oacute 0x00f3 /* U+00F3 LATIN SMALL LETTER O WITH ACUTE */ +#define XKB_KEY_ocircumflex 0x00f4 /* U+00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX */ +#define XKB_KEY_otilde 0x00f5 /* U+00F5 LATIN SMALL LETTER O WITH TILDE */ +#define XKB_KEY_odiaeresis 0x00f6 /* U+00F6 LATIN SMALL LETTER O WITH DIAERESIS */ +#define XKB_KEY_division 0x00f7 /* U+00F7 DIVISION SIGN */ +#define XKB_KEY_oslash 0x00f8 /* U+00F8 LATIN SMALL LETTER O WITH STROKE */ +#define XKB_KEY_ooblique 0x00f8 /* U+00F8 LATIN SMALL LETTER O WITH STROKE */ +#define XKB_KEY_ugrave 0x00f9 /* U+00F9 LATIN SMALL LETTER U WITH GRAVE */ +#define XKB_KEY_uacute 0x00fa /* U+00FA LATIN SMALL LETTER U WITH ACUTE */ +#define XKB_KEY_ucircumflex 0x00fb /* U+00FB LATIN SMALL LETTER U WITH CIRCUMFLEX */ +#define XKB_KEY_udiaeresis 0x00fc /* U+00FC LATIN SMALL LETTER U WITH DIAERESIS */ +#define XKB_KEY_yacute 0x00fd /* U+00FD LATIN SMALL LETTER Y WITH ACUTE */ +#define XKB_KEY_thorn 0x00fe /* U+00FE LATIN SMALL LETTER THORN */ +#define XKB_KEY_ydiaeresis 0x00ff /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ + +/* + * Latin 2 + * Byte 3 = 1 + */ + +#define XKB_KEY_Aogonek 0x01a1 /* U+0104 LATIN CAPITAL LETTER A WITH OGONEK */ +#define XKB_KEY_breve 0x01a2 /* U+02D8 BREVE */ +#define XKB_KEY_Lstroke 0x01a3 /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ +#define XKB_KEY_Lcaron 0x01a5 /* U+013D LATIN CAPITAL LETTER L WITH CARON */ +#define XKB_KEY_Sacute 0x01a6 /* U+015A LATIN CAPITAL LETTER S WITH ACUTE */ +#define XKB_KEY_Scaron 0x01a9 /* U+0160 LATIN CAPITAL LETTER S WITH CARON */ +#define XKB_KEY_Scedilla 0x01aa /* U+015E LATIN CAPITAL LETTER S WITH CEDILLA */ +#define XKB_KEY_Tcaron 0x01ab /* U+0164 LATIN CAPITAL LETTER T WITH CARON */ +#define XKB_KEY_Zacute 0x01ac /* U+0179 LATIN CAPITAL LETTER Z WITH ACUTE */ +#define XKB_KEY_Zcaron 0x01ae /* U+017D LATIN CAPITAL LETTER Z WITH CARON */ +#define XKB_KEY_Zabovedot 0x01af /* U+017B LATIN CAPITAL LETTER Z WITH DOT ABOVE */ +#define XKB_KEY_aogonek 0x01b1 /* U+0105 LATIN SMALL LETTER A WITH OGONEK */ +#define XKB_KEY_ogonek 0x01b2 /* U+02DB OGONEK */ +#define XKB_KEY_lstroke 0x01b3 /* U+0142 LATIN SMALL LETTER L WITH STROKE */ +#define XKB_KEY_lcaron 0x01b5 /* U+013E LATIN SMALL LETTER L WITH CARON */ +#define XKB_KEY_sacute 0x01b6 /* U+015B LATIN SMALL LETTER S WITH ACUTE */ +#define XKB_KEY_caron 0x01b7 /* U+02C7 CARON */ +#define XKB_KEY_scaron 0x01b9 /* U+0161 LATIN SMALL LETTER S WITH CARON */ +#define XKB_KEY_scedilla 0x01ba /* U+015F LATIN SMALL LETTER S WITH CEDILLA */ +#define XKB_KEY_tcaron 0x01bb /* U+0165 LATIN SMALL LETTER T WITH CARON */ +#define XKB_KEY_zacute 0x01bc /* U+017A LATIN SMALL LETTER Z WITH ACUTE */ +#define XKB_KEY_doubleacute 0x01bd /* U+02DD DOUBLE ACUTE ACCENT */ +#define XKB_KEY_zcaron 0x01be /* U+017E LATIN SMALL LETTER Z WITH CARON */ +#define XKB_KEY_zabovedot 0x01bf /* U+017C LATIN SMALL LETTER Z WITH DOT ABOVE */ +#define XKB_KEY_Racute 0x01c0 /* U+0154 LATIN CAPITAL LETTER R WITH ACUTE */ +#define XKB_KEY_Abreve 0x01c3 /* U+0102 LATIN CAPITAL LETTER A WITH BREVE */ +#define XKB_KEY_Lacute 0x01c5 /* U+0139 LATIN CAPITAL LETTER L WITH ACUTE */ +#define XKB_KEY_Cacute 0x01c6 /* U+0106 LATIN CAPITAL LETTER C WITH ACUTE */ +#define XKB_KEY_Ccaron 0x01c8 /* U+010C LATIN CAPITAL LETTER C WITH CARON */ +#define XKB_KEY_Eogonek 0x01ca /* U+0118 LATIN CAPITAL LETTER E WITH OGONEK */ +#define XKB_KEY_Ecaron 0x01cc /* U+011A LATIN CAPITAL LETTER E WITH CARON */ +#define XKB_KEY_Dcaron 0x01cf /* U+010E LATIN CAPITAL LETTER D WITH CARON */ +#define XKB_KEY_Dstroke 0x01d0 /* U+0110 LATIN CAPITAL LETTER D WITH STROKE */ +#define XKB_KEY_Nacute 0x01d1 /* U+0143 LATIN CAPITAL LETTER N WITH ACUTE */ +#define XKB_KEY_Ncaron 0x01d2 /* U+0147 LATIN CAPITAL LETTER N WITH CARON */ +#define XKB_KEY_Odoubleacute 0x01d5 /* U+0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */ +#define XKB_KEY_Rcaron 0x01d8 /* U+0158 LATIN CAPITAL LETTER R WITH CARON */ +#define XKB_KEY_Uring 0x01d9 /* U+016E LATIN CAPITAL LETTER U WITH RING ABOVE */ +#define XKB_KEY_Udoubleacute 0x01db /* U+0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */ +#define XKB_KEY_Tcedilla 0x01de /* U+0162 LATIN CAPITAL LETTER T WITH CEDILLA */ +#define XKB_KEY_racute 0x01e0 /* U+0155 LATIN SMALL LETTER R WITH ACUTE */ +#define XKB_KEY_abreve 0x01e3 /* U+0103 LATIN SMALL LETTER A WITH BREVE */ +#define XKB_KEY_lacute 0x01e5 /* U+013A LATIN SMALL LETTER L WITH ACUTE */ +#define XKB_KEY_cacute 0x01e6 /* U+0107 LATIN SMALL LETTER C WITH ACUTE */ +#define XKB_KEY_ccaron 0x01e8 /* U+010D LATIN SMALL LETTER C WITH CARON */ +#define XKB_KEY_eogonek 0x01ea /* U+0119 LATIN SMALL LETTER E WITH OGONEK */ +#define XKB_KEY_ecaron 0x01ec /* U+011B LATIN SMALL LETTER E WITH CARON */ +#define XKB_KEY_dcaron 0x01ef /* U+010F LATIN SMALL LETTER D WITH CARON */ +#define XKB_KEY_dstroke 0x01f0 /* U+0111 LATIN SMALL LETTER D WITH STROKE */ +#define XKB_KEY_nacute 0x01f1 /* U+0144 LATIN SMALL LETTER N WITH ACUTE */ +#define XKB_KEY_ncaron 0x01f2 /* U+0148 LATIN SMALL LETTER N WITH CARON */ +#define XKB_KEY_odoubleacute 0x01f5 /* U+0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE */ +#define XKB_KEY_rcaron 0x01f8 /* U+0159 LATIN SMALL LETTER R WITH CARON */ +#define XKB_KEY_uring 0x01f9 /* U+016F LATIN SMALL LETTER U WITH RING ABOVE */ +#define XKB_KEY_udoubleacute 0x01fb /* U+0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE */ +#define XKB_KEY_tcedilla 0x01fe /* U+0163 LATIN SMALL LETTER T WITH CEDILLA */ +#define XKB_KEY_abovedot 0x01ff /* U+02D9 DOT ABOVE */ + +/* + * Latin 3 + * Byte 3 = 2 + */ + +#define XKB_KEY_Hstroke 0x02a1 /* U+0126 LATIN CAPITAL LETTER H WITH STROKE */ +#define XKB_KEY_Hcircumflex 0x02a6 /* U+0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX */ +#define XKB_KEY_Iabovedot 0x02a9 /* U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE */ +#define XKB_KEY_Gbreve 0x02ab /* U+011E LATIN CAPITAL LETTER G WITH BREVE */ +#define XKB_KEY_Jcircumflex 0x02ac /* U+0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX */ +#define XKB_KEY_hstroke 0x02b1 /* U+0127 LATIN SMALL LETTER H WITH STROKE */ +#define XKB_KEY_hcircumflex 0x02b6 /* U+0125 LATIN SMALL LETTER H WITH CIRCUMFLEX */ +#define XKB_KEY_idotless 0x02b9 /* U+0131 LATIN SMALL LETTER DOTLESS I */ +#define XKB_KEY_gbreve 0x02bb /* U+011F LATIN SMALL LETTER G WITH BREVE */ +#define XKB_KEY_jcircumflex 0x02bc /* U+0135 LATIN SMALL LETTER J WITH CIRCUMFLEX */ +#define XKB_KEY_Cabovedot 0x02c5 /* U+010A LATIN CAPITAL LETTER C WITH DOT ABOVE */ +#define XKB_KEY_Ccircumflex 0x02c6 /* U+0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX */ +#define XKB_KEY_Gabovedot 0x02d5 /* U+0120 LATIN CAPITAL LETTER G WITH DOT ABOVE */ +#define XKB_KEY_Gcircumflex 0x02d8 /* U+011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX */ +#define XKB_KEY_Ubreve 0x02dd /* U+016C LATIN CAPITAL LETTER U WITH BREVE */ +#define XKB_KEY_Scircumflex 0x02de /* U+015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX */ +#define XKB_KEY_cabovedot 0x02e5 /* U+010B LATIN SMALL LETTER C WITH DOT ABOVE */ +#define XKB_KEY_ccircumflex 0x02e6 /* U+0109 LATIN SMALL LETTER C WITH CIRCUMFLEX */ +#define XKB_KEY_gabovedot 0x02f5 /* U+0121 LATIN SMALL LETTER G WITH DOT ABOVE */ +#define XKB_KEY_gcircumflex 0x02f8 /* U+011D LATIN SMALL LETTER G WITH CIRCUMFLEX */ +#define XKB_KEY_ubreve 0x02fd /* U+016D LATIN SMALL LETTER U WITH BREVE */ +#define XKB_KEY_scircumflex 0x02fe /* U+015D LATIN SMALL LETTER S WITH CIRCUMFLEX */ + + +/* + * Latin 4 + * Byte 3 = 3 + */ + +#define XKB_KEY_kra 0x03a2 /* U+0138 LATIN SMALL LETTER KRA */ +#define XKB_KEY_kappa 0x03a2 /* deprecated */ +#define XKB_KEY_Rcedilla 0x03a3 /* U+0156 LATIN CAPITAL LETTER R WITH CEDILLA */ +#define XKB_KEY_Itilde 0x03a5 /* U+0128 LATIN CAPITAL LETTER I WITH TILDE */ +#define XKB_KEY_Lcedilla 0x03a6 /* U+013B LATIN CAPITAL LETTER L WITH CEDILLA */ +#define XKB_KEY_Emacron 0x03aa /* U+0112 LATIN CAPITAL LETTER E WITH MACRON */ +#define XKB_KEY_Gcedilla 0x03ab /* U+0122 LATIN CAPITAL LETTER G WITH CEDILLA */ +#define XKB_KEY_Tslash 0x03ac /* U+0166 LATIN CAPITAL LETTER T WITH STROKE */ +#define XKB_KEY_rcedilla 0x03b3 /* U+0157 LATIN SMALL LETTER R WITH CEDILLA */ +#define XKB_KEY_itilde 0x03b5 /* U+0129 LATIN SMALL LETTER I WITH TILDE */ +#define XKB_KEY_lcedilla 0x03b6 /* U+013C LATIN SMALL LETTER L WITH CEDILLA */ +#define XKB_KEY_emacron 0x03ba /* U+0113 LATIN SMALL LETTER E WITH MACRON */ +#define XKB_KEY_gcedilla 0x03bb /* U+0123 LATIN SMALL LETTER G WITH CEDILLA */ +#define XKB_KEY_tslash 0x03bc /* U+0167 LATIN SMALL LETTER T WITH STROKE */ +#define XKB_KEY_ENG 0x03bd /* U+014A LATIN CAPITAL LETTER ENG */ +#define XKB_KEY_eng 0x03bf /* U+014B LATIN SMALL LETTER ENG */ +#define XKB_KEY_Amacron 0x03c0 /* U+0100 LATIN CAPITAL LETTER A WITH MACRON */ +#define XKB_KEY_Iogonek 0x03c7 /* U+012E LATIN CAPITAL LETTER I WITH OGONEK */ +#define XKB_KEY_Eabovedot 0x03cc /* U+0116 LATIN CAPITAL LETTER E WITH DOT ABOVE */ +#define XKB_KEY_Imacron 0x03cf /* U+012A LATIN CAPITAL LETTER I WITH MACRON */ +#define XKB_KEY_Ncedilla 0x03d1 /* U+0145 LATIN CAPITAL LETTER N WITH CEDILLA */ +#define XKB_KEY_Omacron 0x03d2 /* U+014C LATIN CAPITAL LETTER O WITH MACRON */ +#define XKB_KEY_Kcedilla 0x03d3 /* U+0136 LATIN CAPITAL LETTER K WITH CEDILLA */ +#define XKB_KEY_Uogonek 0x03d9 /* U+0172 LATIN CAPITAL LETTER U WITH OGONEK */ +#define XKB_KEY_Utilde 0x03dd /* U+0168 LATIN CAPITAL LETTER U WITH TILDE */ +#define XKB_KEY_Umacron 0x03de /* U+016A LATIN CAPITAL LETTER U WITH MACRON */ +#define XKB_KEY_amacron 0x03e0 /* U+0101 LATIN SMALL LETTER A WITH MACRON */ +#define XKB_KEY_iogonek 0x03e7 /* U+012F LATIN SMALL LETTER I WITH OGONEK */ +#define XKB_KEY_eabovedot 0x03ec /* U+0117 LATIN SMALL LETTER E WITH DOT ABOVE */ +#define XKB_KEY_imacron 0x03ef /* U+012B LATIN SMALL LETTER I WITH MACRON */ +#define XKB_KEY_ncedilla 0x03f1 /* U+0146 LATIN SMALL LETTER N WITH CEDILLA */ +#define XKB_KEY_omacron 0x03f2 /* U+014D LATIN SMALL LETTER O WITH MACRON */ +#define XKB_KEY_kcedilla 0x03f3 /* U+0137 LATIN SMALL LETTER K WITH CEDILLA */ +#define XKB_KEY_uogonek 0x03f9 /* U+0173 LATIN SMALL LETTER U WITH OGONEK */ +#define XKB_KEY_utilde 0x03fd /* U+0169 LATIN SMALL LETTER U WITH TILDE */ +#define XKB_KEY_umacron 0x03fe /* U+016B LATIN SMALL LETTER U WITH MACRON */ + +/* + * Latin 8 + */ +#define XKB_KEY_Wcircumflex 0x1000174 /* U+0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX */ +#define XKB_KEY_wcircumflex 0x1000175 /* U+0175 LATIN SMALL LETTER W WITH CIRCUMFLEX */ +#define XKB_KEY_Ycircumflex 0x1000176 /* U+0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX */ +#define XKB_KEY_ycircumflex 0x1000177 /* U+0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX */ +#define XKB_KEY_Babovedot 0x1001e02 /* U+1E02 LATIN CAPITAL LETTER B WITH DOT ABOVE */ +#define XKB_KEY_babovedot 0x1001e03 /* U+1E03 LATIN SMALL LETTER B WITH DOT ABOVE */ +#define XKB_KEY_Dabovedot 0x1001e0a /* U+1E0A LATIN CAPITAL LETTER D WITH DOT ABOVE */ +#define XKB_KEY_dabovedot 0x1001e0b /* U+1E0B LATIN SMALL LETTER D WITH DOT ABOVE */ +#define XKB_KEY_Fabovedot 0x1001e1e /* U+1E1E LATIN CAPITAL LETTER F WITH DOT ABOVE */ +#define XKB_KEY_fabovedot 0x1001e1f /* U+1E1F LATIN SMALL LETTER F WITH DOT ABOVE */ +#define XKB_KEY_Mabovedot 0x1001e40 /* U+1E40 LATIN CAPITAL LETTER M WITH DOT ABOVE */ +#define XKB_KEY_mabovedot 0x1001e41 /* U+1E41 LATIN SMALL LETTER M WITH DOT ABOVE */ +#define XKB_KEY_Pabovedot 0x1001e56 /* U+1E56 LATIN CAPITAL LETTER P WITH DOT ABOVE */ +#define XKB_KEY_pabovedot 0x1001e57 /* U+1E57 LATIN SMALL LETTER P WITH DOT ABOVE */ +#define XKB_KEY_Sabovedot 0x1001e60 /* U+1E60 LATIN CAPITAL LETTER S WITH DOT ABOVE */ +#define XKB_KEY_sabovedot 0x1001e61 /* U+1E61 LATIN SMALL LETTER S WITH DOT ABOVE */ +#define XKB_KEY_Tabovedot 0x1001e6a /* U+1E6A LATIN CAPITAL LETTER T WITH DOT ABOVE */ +#define XKB_KEY_tabovedot 0x1001e6b /* U+1E6B LATIN SMALL LETTER T WITH DOT ABOVE */ +#define XKB_KEY_Wgrave 0x1001e80 /* U+1E80 LATIN CAPITAL LETTER W WITH GRAVE */ +#define XKB_KEY_wgrave 0x1001e81 /* U+1E81 LATIN SMALL LETTER W WITH GRAVE */ +#define XKB_KEY_Wacute 0x1001e82 /* U+1E82 LATIN CAPITAL LETTER W WITH ACUTE */ +#define XKB_KEY_wacute 0x1001e83 /* U+1E83 LATIN SMALL LETTER W WITH ACUTE */ +#define XKB_KEY_Wdiaeresis 0x1001e84 /* U+1E84 LATIN CAPITAL LETTER W WITH DIAERESIS */ +#define XKB_KEY_wdiaeresis 0x1001e85 /* U+1E85 LATIN SMALL LETTER W WITH DIAERESIS */ +#define XKB_KEY_Ygrave 0x1001ef2 /* U+1EF2 LATIN CAPITAL LETTER Y WITH GRAVE */ +#define XKB_KEY_ygrave 0x1001ef3 /* U+1EF3 LATIN SMALL LETTER Y WITH GRAVE */ + +/* + * Latin 9 + * Byte 3 = 0x13 + */ + +#define XKB_KEY_OE 0x13bc /* U+0152 LATIN CAPITAL LIGATURE OE */ +#define XKB_KEY_oe 0x13bd /* U+0153 LATIN SMALL LIGATURE OE */ +#define XKB_KEY_Ydiaeresis 0x13be /* U+0178 LATIN CAPITAL LETTER Y WITH DIAERESIS */ + +/* + * Katakana + * Byte 3 = 4 + */ + +#define XKB_KEY_overline 0x047e /* U+203E OVERLINE */ +#define XKB_KEY_kana_fullstop 0x04a1 /* U+3002 IDEOGRAPHIC FULL STOP */ +#define XKB_KEY_kana_openingbracket 0x04a2 /* U+300C LEFT CORNER BRACKET */ +#define XKB_KEY_kana_closingbracket 0x04a3 /* U+300D RIGHT CORNER BRACKET */ +#define XKB_KEY_kana_comma 0x04a4 /* U+3001 IDEOGRAPHIC COMMA */ +#define XKB_KEY_kana_conjunctive 0x04a5 /* U+30FB KATAKANA MIDDLE DOT */ +#define XKB_KEY_kana_middledot 0x04a5 /* deprecated */ +#define XKB_KEY_kana_WO 0x04a6 /* U+30F2 KATAKANA LETTER WO */ +#define XKB_KEY_kana_a 0x04a7 /* U+30A1 KATAKANA LETTER SMALL A */ +#define XKB_KEY_kana_i 0x04a8 /* U+30A3 KATAKANA LETTER SMALL I */ +#define XKB_KEY_kana_u 0x04a9 /* U+30A5 KATAKANA LETTER SMALL U */ +#define XKB_KEY_kana_e 0x04aa /* U+30A7 KATAKANA LETTER SMALL E */ +#define XKB_KEY_kana_o 0x04ab /* U+30A9 KATAKANA LETTER SMALL O */ +#define XKB_KEY_kana_ya 0x04ac /* U+30E3 KATAKANA LETTER SMALL YA */ +#define XKB_KEY_kana_yu 0x04ad /* U+30E5 KATAKANA LETTER SMALL YU */ +#define XKB_KEY_kana_yo 0x04ae /* U+30E7 KATAKANA LETTER SMALL YO */ +#define XKB_KEY_kana_tsu 0x04af /* U+30C3 KATAKANA LETTER SMALL TU */ +#define XKB_KEY_kana_tu 0x04af /* deprecated */ +#define XKB_KEY_prolongedsound 0x04b0 /* U+30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK */ +#define XKB_KEY_kana_A 0x04b1 /* U+30A2 KATAKANA LETTER A */ +#define XKB_KEY_kana_I 0x04b2 /* U+30A4 KATAKANA LETTER I */ +#define XKB_KEY_kana_U 0x04b3 /* U+30A6 KATAKANA LETTER U */ +#define XKB_KEY_kana_E 0x04b4 /* U+30A8 KATAKANA LETTER E */ +#define XKB_KEY_kana_O 0x04b5 /* U+30AA KATAKANA LETTER O */ +#define XKB_KEY_kana_KA 0x04b6 /* U+30AB KATAKANA LETTER KA */ +#define XKB_KEY_kana_KI 0x04b7 /* U+30AD KATAKANA LETTER KI */ +#define XKB_KEY_kana_KU 0x04b8 /* U+30AF KATAKANA LETTER KU */ +#define XKB_KEY_kana_KE 0x04b9 /* U+30B1 KATAKANA LETTER KE */ +#define XKB_KEY_kana_KO 0x04ba /* U+30B3 KATAKANA LETTER KO */ +#define XKB_KEY_kana_SA 0x04bb /* U+30B5 KATAKANA LETTER SA */ +#define XKB_KEY_kana_SHI 0x04bc /* U+30B7 KATAKANA LETTER SI */ +#define XKB_KEY_kana_SU 0x04bd /* U+30B9 KATAKANA LETTER SU */ +#define XKB_KEY_kana_SE 0x04be /* U+30BB KATAKANA LETTER SE */ +#define XKB_KEY_kana_SO 0x04bf /* U+30BD KATAKANA LETTER SO */ +#define XKB_KEY_kana_TA 0x04c0 /* U+30BF KATAKANA LETTER TA */ +#define XKB_KEY_kana_CHI 0x04c1 /* U+30C1 KATAKANA LETTER TI */ +#define XKB_KEY_kana_TI 0x04c1 /* deprecated */ +#define XKB_KEY_kana_TSU 0x04c2 /* U+30C4 KATAKANA LETTER TU */ +#define XKB_KEY_kana_TU 0x04c2 /* deprecated */ +#define XKB_KEY_kana_TE 0x04c3 /* U+30C6 KATAKANA LETTER TE */ +#define XKB_KEY_kana_TO 0x04c4 /* U+30C8 KATAKANA LETTER TO */ +#define XKB_KEY_kana_NA 0x04c5 /* U+30CA KATAKANA LETTER NA */ +#define XKB_KEY_kana_NI 0x04c6 /* U+30CB KATAKANA LETTER NI */ +#define XKB_KEY_kana_NU 0x04c7 /* U+30CC KATAKANA LETTER NU */ +#define XKB_KEY_kana_NE 0x04c8 /* U+30CD KATAKANA LETTER NE */ +#define XKB_KEY_kana_NO 0x04c9 /* U+30CE KATAKANA LETTER NO */ +#define XKB_KEY_kana_HA 0x04ca /* U+30CF KATAKANA LETTER HA */ +#define XKB_KEY_kana_HI 0x04cb /* U+30D2 KATAKANA LETTER HI */ +#define XKB_KEY_kana_FU 0x04cc /* U+30D5 KATAKANA LETTER HU */ +#define XKB_KEY_kana_HU 0x04cc /* deprecated */ +#define XKB_KEY_kana_HE 0x04cd /* U+30D8 KATAKANA LETTER HE */ +#define XKB_KEY_kana_HO 0x04ce /* U+30DB KATAKANA LETTER HO */ +#define XKB_KEY_kana_MA 0x04cf /* U+30DE KATAKANA LETTER MA */ +#define XKB_KEY_kana_MI 0x04d0 /* U+30DF KATAKANA LETTER MI */ +#define XKB_KEY_kana_MU 0x04d1 /* U+30E0 KATAKANA LETTER MU */ +#define XKB_KEY_kana_ME 0x04d2 /* U+30E1 KATAKANA LETTER ME */ +#define XKB_KEY_kana_MO 0x04d3 /* U+30E2 KATAKANA LETTER MO */ +#define XKB_KEY_kana_YA 0x04d4 /* U+30E4 KATAKANA LETTER YA */ +#define XKB_KEY_kana_YU 0x04d5 /* U+30E6 KATAKANA LETTER YU */ +#define XKB_KEY_kana_YO 0x04d6 /* U+30E8 KATAKANA LETTER YO */ +#define XKB_KEY_kana_RA 0x04d7 /* U+30E9 KATAKANA LETTER RA */ +#define XKB_KEY_kana_RI 0x04d8 /* U+30EA KATAKANA LETTER RI */ +#define XKB_KEY_kana_RU 0x04d9 /* U+30EB KATAKANA LETTER RU */ +#define XKB_KEY_kana_RE 0x04da /* U+30EC KATAKANA LETTER RE */ +#define XKB_KEY_kana_RO 0x04db /* U+30ED KATAKANA LETTER RO */ +#define XKB_KEY_kana_WA 0x04dc /* U+30EF KATAKANA LETTER WA */ +#define XKB_KEY_kana_N 0x04dd /* U+30F3 KATAKANA LETTER N */ +#define XKB_KEY_voicedsound 0x04de /* U+309B KATAKANA-HIRAGANA VOICED SOUND MARK */ +#define XKB_KEY_semivoicedsound 0x04df /* U+309C KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */ +#define XKB_KEY_kana_switch 0xff7e /* Alias for mode_switch */ + +/* + * Arabic + * Byte 3 = 5 + */ + +#define XKB_KEY_Farsi_0 0x10006f0 /* U+06F0 EXTENDED ARABIC-INDIC DIGIT ZERO */ +#define XKB_KEY_Farsi_1 0x10006f1 /* U+06F1 EXTENDED ARABIC-INDIC DIGIT ONE */ +#define XKB_KEY_Farsi_2 0x10006f2 /* U+06F2 EXTENDED ARABIC-INDIC DIGIT TWO */ +#define XKB_KEY_Farsi_3 0x10006f3 /* U+06F3 EXTENDED ARABIC-INDIC DIGIT THREE */ +#define XKB_KEY_Farsi_4 0x10006f4 /* U+06F4 EXTENDED ARABIC-INDIC DIGIT FOUR */ +#define XKB_KEY_Farsi_5 0x10006f5 /* U+06F5 EXTENDED ARABIC-INDIC DIGIT FIVE */ +#define XKB_KEY_Farsi_6 0x10006f6 /* U+06F6 EXTENDED ARABIC-INDIC DIGIT SIX */ +#define XKB_KEY_Farsi_7 0x10006f7 /* U+06F7 EXTENDED ARABIC-INDIC DIGIT SEVEN */ +#define XKB_KEY_Farsi_8 0x10006f8 /* U+06F8 EXTENDED ARABIC-INDIC DIGIT EIGHT */ +#define XKB_KEY_Farsi_9 0x10006f9 /* U+06F9 EXTENDED ARABIC-INDIC DIGIT NINE */ +#define XKB_KEY_Arabic_percent 0x100066a /* U+066A ARABIC PERCENT SIGN */ +#define XKB_KEY_Arabic_superscript_alef 0x1000670 /* U+0670 ARABIC LETTER SUPERSCRIPT ALEF */ +#define XKB_KEY_Arabic_tteh 0x1000679 /* U+0679 ARABIC LETTER TTEH */ +#define XKB_KEY_Arabic_peh 0x100067e /* U+067E ARABIC LETTER PEH */ +#define XKB_KEY_Arabic_tcheh 0x1000686 /* U+0686 ARABIC LETTER TCHEH */ +#define XKB_KEY_Arabic_ddal 0x1000688 /* U+0688 ARABIC LETTER DDAL */ +#define XKB_KEY_Arabic_rreh 0x1000691 /* U+0691 ARABIC LETTER RREH */ +#define XKB_KEY_Arabic_comma 0x05ac /* U+060C ARABIC COMMA */ +#define XKB_KEY_Arabic_fullstop 0x10006d4 /* U+06D4 ARABIC FULL STOP */ +#define XKB_KEY_Arabic_0 0x1000660 /* U+0660 ARABIC-INDIC DIGIT ZERO */ +#define XKB_KEY_Arabic_1 0x1000661 /* U+0661 ARABIC-INDIC DIGIT ONE */ +#define XKB_KEY_Arabic_2 0x1000662 /* U+0662 ARABIC-INDIC DIGIT TWO */ +#define XKB_KEY_Arabic_3 0x1000663 /* U+0663 ARABIC-INDIC DIGIT THREE */ +#define XKB_KEY_Arabic_4 0x1000664 /* U+0664 ARABIC-INDIC DIGIT FOUR */ +#define XKB_KEY_Arabic_5 0x1000665 /* U+0665 ARABIC-INDIC DIGIT FIVE */ +#define XKB_KEY_Arabic_6 0x1000666 /* U+0666 ARABIC-INDIC DIGIT SIX */ +#define XKB_KEY_Arabic_7 0x1000667 /* U+0667 ARABIC-INDIC DIGIT SEVEN */ +#define XKB_KEY_Arabic_8 0x1000668 /* U+0668 ARABIC-INDIC DIGIT EIGHT */ +#define XKB_KEY_Arabic_9 0x1000669 /* U+0669 ARABIC-INDIC DIGIT NINE */ +#define XKB_KEY_Arabic_semicolon 0x05bb /* U+061B ARABIC SEMICOLON */ +#define XKB_KEY_Arabic_question_mark 0x05bf /* U+061F ARABIC QUESTION MARK */ +#define XKB_KEY_Arabic_hamza 0x05c1 /* U+0621 ARABIC LETTER HAMZA */ +#define XKB_KEY_Arabic_maddaonalef 0x05c2 /* U+0622 ARABIC LETTER ALEF WITH MADDA ABOVE */ +#define XKB_KEY_Arabic_hamzaonalef 0x05c3 /* U+0623 ARABIC LETTER ALEF WITH HAMZA ABOVE */ +#define XKB_KEY_Arabic_hamzaonwaw 0x05c4 /* U+0624 ARABIC LETTER WAW WITH HAMZA ABOVE */ +#define XKB_KEY_Arabic_hamzaunderalef 0x05c5 /* U+0625 ARABIC LETTER ALEF WITH HAMZA BELOW */ +#define XKB_KEY_Arabic_hamzaonyeh 0x05c6 /* U+0626 ARABIC LETTER YEH WITH HAMZA ABOVE */ +#define XKB_KEY_Arabic_alef 0x05c7 /* U+0627 ARABIC LETTER ALEF */ +#define XKB_KEY_Arabic_beh 0x05c8 /* U+0628 ARABIC LETTER BEH */ +#define XKB_KEY_Arabic_tehmarbuta 0x05c9 /* U+0629 ARABIC LETTER TEH MARBUTA */ +#define XKB_KEY_Arabic_teh 0x05ca /* U+062A ARABIC LETTER TEH */ +#define XKB_KEY_Arabic_theh 0x05cb /* U+062B ARABIC LETTER THEH */ +#define XKB_KEY_Arabic_jeem 0x05cc /* U+062C ARABIC LETTER JEEM */ +#define XKB_KEY_Arabic_hah 0x05cd /* U+062D ARABIC LETTER HAH */ +#define XKB_KEY_Arabic_khah 0x05ce /* U+062E ARABIC LETTER KHAH */ +#define XKB_KEY_Arabic_dal 0x05cf /* U+062F ARABIC LETTER DAL */ +#define XKB_KEY_Arabic_thal 0x05d0 /* U+0630 ARABIC LETTER THAL */ +#define XKB_KEY_Arabic_ra 0x05d1 /* U+0631 ARABIC LETTER REH */ +#define XKB_KEY_Arabic_zain 0x05d2 /* U+0632 ARABIC LETTER ZAIN */ +#define XKB_KEY_Arabic_seen 0x05d3 /* U+0633 ARABIC LETTER SEEN */ +#define XKB_KEY_Arabic_sheen 0x05d4 /* U+0634 ARABIC LETTER SHEEN */ +#define XKB_KEY_Arabic_sad 0x05d5 /* U+0635 ARABIC LETTER SAD */ +#define XKB_KEY_Arabic_dad 0x05d6 /* U+0636 ARABIC LETTER DAD */ +#define XKB_KEY_Arabic_tah 0x05d7 /* U+0637 ARABIC LETTER TAH */ +#define XKB_KEY_Arabic_zah 0x05d8 /* U+0638 ARABIC LETTER ZAH */ +#define XKB_KEY_Arabic_ain 0x05d9 /* U+0639 ARABIC LETTER AIN */ +#define XKB_KEY_Arabic_ghain 0x05da /* U+063A ARABIC LETTER GHAIN */ +#define XKB_KEY_Arabic_tatweel 0x05e0 /* U+0640 ARABIC TATWEEL */ +#define XKB_KEY_Arabic_feh 0x05e1 /* U+0641 ARABIC LETTER FEH */ +#define XKB_KEY_Arabic_qaf 0x05e2 /* U+0642 ARABIC LETTER QAF */ +#define XKB_KEY_Arabic_kaf 0x05e3 /* U+0643 ARABIC LETTER KAF */ +#define XKB_KEY_Arabic_lam 0x05e4 /* U+0644 ARABIC LETTER LAM */ +#define XKB_KEY_Arabic_meem 0x05e5 /* U+0645 ARABIC LETTER MEEM */ +#define XKB_KEY_Arabic_noon 0x05e6 /* U+0646 ARABIC LETTER NOON */ +#define XKB_KEY_Arabic_ha 0x05e7 /* U+0647 ARABIC LETTER HEH */ +#define XKB_KEY_Arabic_heh 0x05e7 /* deprecated */ +#define XKB_KEY_Arabic_waw 0x05e8 /* U+0648 ARABIC LETTER WAW */ +#define XKB_KEY_Arabic_alefmaksura 0x05e9 /* U+0649 ARABIC LETTER ALEF MAKSURA */ +#define XKB_KEY_Arabic_yeh 0x05ea /* U+064A ARABIC LETTER YEH */ +#define XKB_KEY_Arabic_fathatan 0x05eb /* U+064B ARABIC FATHATAN */ +#define XKB_KEY_Arabic_dammatan 0x05ec /* U+064C ARABIC DAMMATAN */ +#define XKB_KEY_Arabic_kasratan 0x05ed /* U+064D ARABIC KASRATAN */ +#define XKB_KEY_Arabic_fatha 0x05ee /* U+064E ARABIC FATHA */ +#define XKB_KEY_Arabic_damma 0x05ef /* U+064F ARABIC DAMMA */ +#define XKB_KEY_Arabic_kasra 0x05f0 /* U+0650 ARABIC KASRA */ +#define XKB_KEY_Arabic_shadda 0x05f1 /* U+0651 ARABIC SHADDA */ +#define XKB_KEY_Arabic_sukun 0x05f2 /* U+0652 ARABIC SUKUN */ +#define XKB_KEY_Arabic_madda_above 0x1000653 /* U+0653 ARABIC MADDAH ABOVE */ +#define XKB_KEY_Arabic_hamza_above 0x1000654 /* U+0654 ARABIC HAMZA ABOVE */ +#define XKB_KEY_Arabic_hamza_below 0x1000655 /* U+0655 ARABIC HAMZA BELOW */ +#define XKB_KEY_Arabic_jeh 0x1000698 /* U+0698 ARABIC LETTER JEH */ +#define XKB_KEY_Arabic_veh 0x10006a4 /* U+06A4 ARABIC LETTER VEH */ +#define XKB_KEY_Arabic_keheh 0x10006a9 /* U+06A9 ARABIC LETTER KEHEH */ +#define XKB_KEY_Arabic_gaf 0x10006af /* U+06AF ARABIC LETTER GAF */ +#define XKB_KEY_Arabic_noon_ghunna 0x10006ba /* U+06BA ARABIC LETTER NOON GHUNNA */ +#define XKB_KEY_Arabic_heh_doachashmee 0x10006be /* U+06BE ARABIC LETTER HEH DOACHASHMEE */ +#define XKB_KEY_Farsi_yeh 0x10006cc /* U+06CC ARABIC LETTER FARSI YEH */ +#define XKB_KEY_Arabic_farsi_yeh 0x10006cc /* U+06CC ARABIC LETTER FARSI YEH */ +#define XKB_KEY_Arabic_yeh_baree 0x10006d2 /* U+06D2 ARABIC LETTER YEH BARREE */ +#define XKB_KEY_Arabic_heh_goal 0x10006c1 /* U+06C1 ARABIC LETTER HEH GOAL */ +#define XKB_KEY_Arabic_switch 0xff7e /* Alias for mode_switch */ + +/* + * Cyrillic + * Byte 3 = 6 + */ +#define XKB_KEY_Cyrillic_GHE_bar 0x1000492 /* U+0492 CYRILLIC CAPITAL LETTER GHE WITH STROKE */ +#define XKB_KEY_Cyrillic_ghe_bar 0x1000493 /* U+0493 CYRILLIC SMALL LETTER GHE WITH STROKE */ +#define XKB_KEY_Cyrillic_ZHE_descender 0x1000496 /* U+0496 CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER */ +#define XKB_KEY_Cyrillic_zhe_descender 0x1000497 /* U+0497 CYRILLIC SMALL LETTER ZHE WITH DESCENDER */ +#define XKB_KEY_Cyrillic_KA_descender 0x100049a /* U+049A CYRILLIC CAPITAL LETTER KA WITH DESCENDER */ +#define XKB_KEY_Cyrillic_ka_descender 0x100049b /* U+049B CYRILLIC SMALL LETTER KA WITH DESCENDER */ +#define XKB_KEY_Cyrillic_KA_vertstroke 0x100049c /* U+049C CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE */ +#define XKB_KEY_Cyrillic_ka_vertstroke 0x100049d /* U+049D CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE */ +#define XKB_KEY_Cyrillic_EN_descender 0x10004a2 /* U+04A2 CYRILLIC CAPITAL LETTER EN WITH DESCENDER */ +#define XKB_KEY_Cyrillic_en_descender 0x10004a3 /* U+04A3 CYRILLIC SMALL LETTER EN WITH DESCENDER */ +#define XKB_KEY_Cyrillic_U_straight 0x10004ae /* U+04AE CYRILLIC CAPITAL LETTER STRAIGHT U */ +#define XKB_KEY_Cyrillic_u_straight 0x10004af /* U+04AF CYRILLIC SMALL LETTER STRAIGHT U */ +#define XKB_KEY_Cyrillic_U_straight_bar 0x10004b0 /* U+04B0 CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE */ +#define XKB_KEY_Cyrillic_u_straight_bar 0x10004b1 /* U+04B1 CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE */ +#define XKB_KEY_Cyrillic_HA_descender 0x10004b2 /* U+04B2 CYRILLIC CAPITAL LETTER HA WITH DESCENDER */ +#define XKB_KEY_Cyrillic_ha_descender 0x10004b3 /* U+04B3 CYRILLIC SMALL LETTER HA WITH DESCENDER */ +#define XKB_KEY_Cyrillic_CHE_descender 0x10004b6 /* U+04B6 CYRILLIC CAPITAL LETTER CHE WITH DESCENDER */ +#define XKB_KEY_Cyrillic_che_descender 0x10004b7 /* U+04B7 CYRILLIC SMALL LETTER CHE WITH DESCENDER */ +#define XKB_KEY_Cyrillic_CHE_vertstroke 0x10004b8 /* U+04B8 CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE */ +#define XKB_KEY_Cyrillic_che_vertstroke 0x10004b9 /* U+04B9 CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE */ +#define XKB_KEY_Cyrillic_SHHA 0x10004ba /* U+04BA CYRILLIC CAPITAL LETTER SHHA */ +#define XKB_KEY_Cyrillic_shha 0x10004bb /* U+04BB CYRILLIC SMALL LETTER SHHA */ + +#define XKB_KEY_Cyrillic_SCHWA 0x10004d8 /* U+04D8 CYRILLIC CAPITAL LETTER SCHWA */ +#define XKB_KEY_Cyrillic_schwa 0x10004d9 /* U+04D9 CYRILLIC SMALL LETTER SCHWA */ +#define XKB_KEY_Cyrillic_I_macron 0x10004e2 /* U+04E2 CYRILLIC CAPITAL LETTER I WITH MACRON */ +#define XKB_KEY_Cyrillic_i_macron 0x10004e3 /* U+04E3 CYRILLIC SMALL LETTER I WITH MACRON */ +#define XKB_KEY_Cyrillic_O_bar 0x10004e8 /* U+04E8 CYRILLIC CAPITAL LETTER BARRED O */ +#define XKB_KEY_Cyrillic_o_bar 0x10004e9 /* U+04E9 CYRILLIC SMALL LETTER BARRED O */ +#define XKB_KEY_Cyrillic_U_macron 0x10004ee /* U+04EE CYRILLIC CAPITAL LETTER U WITH MACRON */ +#define XKB_KEY_Cyrillic_u_macron 0x10004ef /* U+04EF CYRILLIC SMALL LETTER U WITH MACRON */ + +#define XKB_KEY_Serbian_dje 0x06a1 /* U+0452 CYRILLIC SMALL LETTER DJE */ +#define XKB_KEY_Macedonia_gje 0x06a2 /* U+0453 CYRILLIC SMALL LETTER GJE */ +#define XKB_KEY_Cyrillic_io 0x06a3 /* U+0451 CYRILLIC SMALL LETTER IO */ +#define XKB_KEY_Ukrainian_ie 0x06a4 /* U+0454 CYRILLIC SMALL LETTER UKRAINIAN IE */ +#define XKB_KEY_Ukranian_je 0x06a4 /* deprecated */ +#define XKB_KEY_Macedonia_dse 0x06a5 /* U+0455 CYRILLIC SMALL LETTER DZE */ +#define XKB_KEY_Ukrainian_i 0x06a6 /* U+0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */ +#define XKB_KEY_Ukranian_i 0x06a6 /* deprecated */ +#define XKB_KEY_Ukrainian_yi 0x06a7 /* U+0457 CYRILLIC SMALL LETTER YI */ +#define XKB_KEY_Ukranian_yi 0x06a7 /* deprecated */ +#define XKB_KEY_Cyrillic_je 0x06a8 /* U+0458 CYRILLIC SMALL LETTER JE */ +#define XKB_KEY_Serbian_je 0x06a8 /* deprecated */ +#define XKB_KEY_Cyrillic_lje 0x06a9 /* U+0459 CYRILLIC SMALL LETTER LJE */ +#define XKB_KEY_Serbian_lje 0x06a9 /* deprecated */ +#define XKB_KEY_Cyrillic_nje 0x06aa /* U+045A CYRILLIC SMALL LETTER NJE */ +#define XKB_KEY_Serbian_nje 0x06aa /* deprecated */ +#define XKB_KEY_Serbian_tshe 0x06ab /* U+045B CYRILLIC SMALL LETTER TSHE */ +#define XKB_KEY_Macedonia_kje 0x06ac /* U+045C CYRILLIC SMALL LETTER KJE */ +#define XKB_KEY_Ukrainian_ghe_with_upturn 0x06ad /* U+0491 CYRILLIC SMALL LETTER GHE WITH UPTURN */ +#define XKB_KEY_Byelorussian_shortu 0x06ae /* U+045E CYRILLIC SMALL LETTER SHORT U */ +#define XKB_KEY_Cyrillic_dzhe 0x06af /* U+045F CYRILLIC SMALL LETTER DZHE */ +#define XKB_KEY_Serbian_dze 0x06af /* deprecated */ +#define XKB_KEY_numerosign 0x06b0 /* U+2116 NUMERO SIGN */ +#define XKB_KEY_Serbian_DJE 0x06b1 /* U+0402 CYRILLIC CAPITAL LETTER DJE */ +#define XKB_KEY_Macedonia_GJE 0x06b2 /* U+0403 CYRILLIC CAPITAL LETTER GJE */ +#define XKB_KEY_Cyrillic_IO 0x06b3 /* U+0401 CYRILLIC CAPITAL LETTER IO */ +#define XKB_KEY_Ukrainian_IE 0x06b4 /* U+0404 CYRILLIC CAPITAL LETTER UKRAINIAN IE */ +#define XKB_KEY_Ukranian_JE 0x06b4 /* deprecated */ +#define XKB_KEY_Macedonia_DSE 0x06b5 /* U+0405 CYRILLIC CAPITAL LETTER DZE */ +#define XKB_KEY_Ukrainian_I 0x06b6 /* U+0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */ +#define XKB_KEY_Ukranian_I 0x06b6 /* deprecated */ +#define XKB_KEY_Ukrainian_YI 0x06b7 /* U+0407 CYRILLIC CAPITAL LETTER YI */ +#define XKB_KEY_Ukranian_YI 0x06b7 /* deprecated */ +#define XKB_KEY_Cyrillic_JE 0x06b8 /* U+0408 CYRILLIC CAPITAL LETTER JE */ +#define XKB_KEY_Serbian_JE 0x06b8 /* deprecated */ +#define XKB_KEY_Cyrillic_LJE 0x06b9 /* U+0409 CYRILLIC CAPITAL LETTER LJE */ +#define XKB_KEY_Serbian_LJE 0x06b9 /* deprecated */ +#define XKB_KEY_Cyrillic_NJE 0x06ba /* U+040A CYRILLIC CAPITAL LETTER NJE */ +#define XKB_KEY_Serbian_NJE 0x06ba /* deprecated */ +#define XKB_KEY_Serbian_TSHE 0x06bb /* U+040B CYRILLIC CAPITAL LETTER TSHE */ +#define XKB_KEY_Macedonia_KJE 0x06bc /* U+040C CYRILLIC CAPITAL LETTER KJE */ +#define XKB_KEY_Ukrainian_GHE_WITH_UPTURN 0x06bd /* U+0490 CYRILLIC CAPITAL LETTER GHE WITH UPTURN */ +#define XKB_KEY_Byelorussian_SHORTU 0x06be /* U+040E CYRILLIC CAPITAL LETTER SHORT U */ +#define XKB_KEY_Cyrillic_DZHE 0x06bf /* U+040F CYRILLIC CAPITAL LETTER DZHE */ +#define XKB_KEY_Serbian_DZE 0x06bf /* deprecated */ +#define XKB_KEY_Cyrillic_yu 0x06c0 /* U+044E CYRILLIC SMALL LETTER YU */ +#define XKB_KEY_Cyrillic_a 0x06c1 /* U+0430 CYRILLIC SMALL LETTER A */ +#define XKB_KEY_Cyrillic_be 0x06c2 /* U+0431 CYRILLIC SMALL LETTER BE */ +#define XKB_KEY_Cyrillic_tse 0x06c3 /* U+0446 CYRILLIC SMALL LETTER TSE */ +#define XKB_KEY_Cyrillic_de 0x06c4 /* U+0434 CYRILLIC SMALL LETTER DE */ +#define XKB_KEY_Cyrillic_ie 0x06c5 /* U+0435 CYRILLIC SMALL LETTER IE */ +#define XKB_KEY_Cyrillic_ef 0x06c6 /* U+0444 CYRILLIC SMALL LETTER EF */ +#define XKB_KEY_Cyrillic_ghe 0x06c7 /* U+0433 CYRILLIC SMALL LETTER GHE */ +#define XKB_KEY_Cyrillic_ha 0x06c8 /* U+0445 CYRILLIC SMALL LETTER HA */ +#define XKB_KEY_Cyrillic_i 0x06c9 /* U+0438 CYRILLIC SMALL LETTER I */ +#define XKB_KEY_Cyrillic_shorti 0x06ca /* U+0439 CYRILLIC SMALL LETTER SHORT I */ +#define XKB_KEY_Cyrillic_ka 0x06cb /* U+043A CYRILLIC SMALL LETTER KA */ +#define XKB_KEY_Cyrillic_el 0x06cc /* U+043B CYRILLIC SMALL LETTER EL */ +#define XKB_KEY_Cyrillic_em 0x06cd /* U+043C CYRILLIC SMALL LETTER EM */ +#define XKB_KEY_Cyrillic_en 0x06ce /* U+043D CYRILLIC SMALL LETTER EN */ +#define XKB_KEY_Cyrillic_o 0x06cf /* U+043E CYRILLIC SMALL LETTER O */ +#define XKB_KEY_Cyrillic_pe 0x06d0 /* U+043F CYRILLIC SMALL LETTER PE */ +#define XKB_KEY_Cyrillic_ya 0x06d1 /* U+044F CYRILLIC SMALL LETTER YA */ +#define XKB_KEY_Cyrillic_er 0x06d2 /* U+0440 CYRILLIC SMALL LETTER ER */ +#define XKB_KEY_Cyrillic_es 0x06d3 /* U+0441 CYRILLIC SMALL LETTER ES */ +#define XKB_KEY_Cyrillic_te 0x06d4 /* U+0442 CYRILLIC SMALL LETTER TE */ +#define XKB_KEY_Cyrillic_u 0x06d5 /* U+0443 CYRILLIC SMALL LETTER U */ +#define XKB_KEY_Cyrillic_zhe 0x06d6 /* U+0436 CYRILLIC SMALL LETTER ZHE */ +#define XKB_KEY_Cyrillic_ve 0x06d7 /* U+0432 CYRILLIC SMALL LETTER VE */ +#define XKB_KEY_Cyrillic_softsign 0x06d8 /* U+044C CYRILLIC SMALL LETTER SOFT SIGN */ +#define XKB_KEY_Cyrillic_yeru 0x06d9 /* U+044B CYRILLIC SMALL LETTER YERU */ +#define XKB_KEY_Cyrillic_ze 0x06da /* U+0437 CYRILLIC SMALL LETTER ZE */ +#define XKB_KEY_Cyrillic_sha 0x06db /* U+0448 CYRILLIC SMALL LETTER SHA */ +#define XKB_KEY_Cyrillic_e 0x06dc /* U+044D CYRILLIC SMALL LETTER E */ +#define XKB_KEY_Cyrillic_shcha 0x06dd /* U+0449 CYRILLIC SMALL LETTER SHCHA */ +#define XKB_KEY_Cyrillic_che 0x06de /* U+0447 CYRILLIC SMALL LETTER CHE */ +#define XKB_KEY_Cyrillic_hardsign 0x06df /* U+044A CYRILLIC SMALL LETTER HARD SIGN */ +#define XKB_KEY_Cyrillic_YU 0x06e0 /* U+042E CYRILLIC CAPITAL LETTER YU */ +#define XKB_KEY_Cyrillic_A 0x06e1 /* U+0410 CYRILLIC CAPITAL LETTER A */ +#define XKB_KEY_Cyrillic_BE 0x06e2 /* U+0411 CYRILLIC CAPITAL LETTER BE */ +#define XKB_KEY_Cyrillic_TSE 0x06e3 /* U+0426 CYRILLIC CAPITAL LETTER TSE */ +#define XKB_KEY_Cyrillic_DE 0x06e4 /* U+0414 CYRILLIC CAPITAL LETTER DE */ +#define XKB_KEY_Cyrillic_IE 0x06e5 /* U+0415 CYRILLIC CAPITAL LETTER IE */ +#define XKB_KEY_Cyrillic_EF 0x06e6 /* U+0424 CYRILLIC CAPITAL LETTER EF */ +#define XKB_KEY_Cyrillic_GHE 0x06e7 /* U+0413 CYRILLIC CAPITAL LETTER GHE */ +#define XKB_KEY_Cyrillic_HA 0x06e8 /* U+0425 CYRILLIC CAPITAL LETTER HA */ +#define XKB_KEY_Cyrillic_I 0x06e9 /* U+0418 CYRILLIC CAPITAL LETTER I */ +#define XKB_KEY_Cyrillic_SHORTI 0x06ea /* U+0419 CYRILLIC CAPITAL LETTER SHORT I */ +#define XKB_KEY_Cyrillic_KA 0x06eb /* U+041A CYRILLIC CAPITAL LETTER KA */ +#define XKB_KEY_Cyrillic_EL 0x06ec /* U+041B CYRILLIC CAPITAL LETTER EL */ +#define XKB_KEY_Cyrillic_EM 0x06ed /* U+041C CYRILLIC CAPITAL LETTER EM */ +#define XKB_KEY_Cyrillic_EN 0x06ee /* U+041D CYRILLIC CAPITAL LETTER EN */ +#define XKB_KEY_Cyrillic_O 0x06ef /* U+041E CYRILLIC CAPITAL LETTER O */ +#define XKB_KEY_Cyrillic_PE 0x06f0 /* U+041F CYRILLIC CAPITAL LETTER PE */ +#define XKB_KEY_Cyrillic_YA 0x06f1 /* U+042F CYRILLIC CAPITAL LETTER YA */ +#define XKB_KEY_Cyrillic_ER 0x06f2 /* U+0420 CYRILLIC CAPITAL LETTER ER */ +#define XKB_KEY_Cyrillic_ES 0x06f3 /* U+0421 CYRILLIC CAPITAL LETTER ES */ +#define XKB_KEY_Cyrillic_TE 0x06f4 /* U+0422 CYRILLIC CAPITAL LETTER TE */ +#define XKB_KEY_Cyrillic_U 0x06f5 /* U+0423 CYRILLIC CAPITAL LETTER U */ +#define XKB_KEY_Cyrillic_ZHE 0x06f6 /* U+0416 CYRILLIC CAPITAL LETTER ZHE */ +#define XKB_KEY_Cyrillic_VE 0x06f7 /* U+0412 CYRILLIC CAPITAL LETTER VE */ +#define XKB_KEY_Cyrillic_SOFTSIGN 0x06f8 /* U+042C CYRILLIC CAPITAL LETTER SOFT SIGN */ +#define XKB_KEY_Cyrillic_YERU 0x06f9 /* U+042B CYRILLIC CAPITAL LETTER YERU */ +#define XKB_KEY_Cyrillic_ZE 0x06fa /* U+0417 CYRILLIC CAPITAL LETTER ZE */ +#define XKB_KEY_Cyrillic_SHA 0x06fb /* U+0428 CYRILLIC CAPITAL LETTER SHA */ +#define XKB_KEY_Cyrillic_E 0x06fc /* U+042D CYRILLIC CAPITAL LETTER E */ +#define XKB_KEY_Cyrillic_SHCHA 0x06fd /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ +#define XKB_KEY_Cyrillic_CHE 0x06fe /* U+0427 CYRILLIC CAPITAL LETTER CHE */ +#define XKB_KEY_Cyrillic_HARDSIGN 0x06ff /* U+042A CYRILLIC CAPITAL LETTER HARD SIGN */ + +/* + * Greek + * (based on an early draft of, and not quite identical to, ISO/IEC 8859-7) + * Byte 3 = 7 + */ + +#define XKB_KEY_Greek_ALPHAaccent 0x07a1 /* U+0386 GREEK CAPITAL LETTER ALPHA WITH TONOS */ +#define XKB_KEY_Greek_EPSILONaccent 0x07a2 /* U+0388 GREEK CAPITAL LETTER EPSILON WITH TONOS */ +#define XKB_KEY_Greek_ETAaccent 0x07a3 /* U+0389 GREEK CAPITAL LETTER ETA WITH TONOS */ +#define XKB_KEY_Greek_IOTAaccent 0x07a4 /* U+038A GREEK CAPITAL LETTER IOTA WITH TONOS */ +#define XKB_KEY_Greek_IOTAdieresis 0x07a5 /* U+03AA GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */ +#define XKB_KEY_Greek_IOTAdiaeresis 0x07a5 /* old typo */ +#define XKB_KEY_Greek_OMICRONaccent 0x07a7 /* U+038C GREEK CAPITAL LETTER OMICRON WITH TONOS */ +#define XKB_KEY_Greek_UPSILONaccent 0x07a8 /* U+038E GREEK CAPITAL LETTER UPSILON WITH TONOS */ +#define XKB_KEY_Greek_UPSILONdieresis 0x07a9 /* U+03AB GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */ +#define XKB_KEY_Greek_OMEGAaccent 0x07ab /* U+038F GREEK CAPITAL LETTER OMEGA WITH TONOS */ +#define XKB_KEY_Greek_accentdieresis 0x07ae /* U+0385 GREEK DIALYTIKA TONOS */ +#define XKB_KEY_Greek_horizbar 0x07af /* U+2015 HORIZONTAL BAR */ +#define XKB_KEY_Greek_alphaaccent 0x07b1 /* U+03AC GREEK SMALL LETTER ALPHA WITH TONOS */ +#define XKB_KEY_Greek_epsilonaccent 0x07b2 /* U+03AD GREEK SMALL LETTER EPSILON WITH TONOS */ +#define XKB_KEY_Greek_etaaccent 0x07b3 /* U+03AE GREEK SMALL LETTER ETA WITH TONOS */ +#define XKB_KEY_Greek_iotaaccent 0x07b4 /* U+03AF GREEK SMALL LETTER IOTA WITH TONOS */ +#define XKB_KEY_Greek_iotadieresis 0x07b5 /* U+03CA GREEK SMALL LETTER IOTA WITH DIALYTIKA */ +#define XKB_KEY_Greek_iotaaccentdieresis 0x07b6 /* U+0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ +#define XKB_KEY_Greek_omicronaccent 0x07b7 /* U+03CC GREEK SMALL LETTER OMICRON WITH TONOS */ +#define XKB_KEY_Greek_upsilonaccent 0x07b8 /* U+03CD GREEK SMALL LETTER UPSILON WITH TONOS */ +#define XKB_KEY_Greek_upsilondieresis 0x07b9 /* U+03CB GREEK SMALL LETTER UPSILON WITH DIALYTIKA */ +#define XKB_KEY_Greek_upsilonaccentdieresis 0x07ba /* U+03B0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */ +#define XKB_KEY_Greek_omegaaccent 0x07bb /* U+03CE GREEK SMALL LETTER OMEGA WITH TONOS */ +#define XKB_KEY_Greek_ALPHA 0x07c1 /* U+0391 GREEK CAPITAL LETTER ALPHA */ +#define XKB_KEY_Greek_BETA 0x07c2 /* U+0392 GREEK CAPITAL LETTER BETA */ +#define XKB_KEY_Greek_GAMMA 0x07c3 /* U+0393 GREEK CAPITAL LETTER GAMMA */ +#define XKB_KEY_Greek_DELTA 0x07c4 /* U+0394 GREEK CAPITAL LETTER DELTA */ +#define XKB_KEY_Greek_EPSILON 0x07c5 /* U+0395 GREEK CAPITAL LETTER EPSILON */ +#define XKB_KEY_Greek_ZETA 0x07c6 /* U+0396 GREEK CAPITAL LETTER ZETA */ +#define XKB_KEY_Greek_ETA 0x07c7 /* U+0397 GREEK CAPITAL LETTER ETA */ +#define XKB_KEY_Greek_THETA 0x07c8 /* U+0398 GREEK CAPITAL LETTER THETA */ +#define XKB_KEY_Greek_IOTA 0x07c9 /* U+0399 GREEK CAPITAL LETTER IOTA */ +#define XKB_KEY_Greek_KAPPA 0x07ca /* U+039A GREEK CAPITAL LETTER KAPPA */ +#define XKB_KEY_Greek_LAMDA 0x07cb /* U+039B GREEK CAPITAL LETTER LAMDA */ +#define XKB_KEY_Greek_LAMBDA 0x07cb /* U+039B GREEK CAPITAL LETTER LAMDA */ +#define XKB_KEY_Greek_MU 0x07cc /* U+039C GREEK CAPITAL LETTER MU */ +#define XKB_KEY_Greek_NU 0x07cd /* U+039D GREEK CAPITAL LETTER NU */ +#define XKB_KEY_Greek_XI 0x07ce /* U+039E GREEK CAPITAL LETTER XI */ +#define XKB_KEY_Greek_OMICRON 0x07cf /* U+039F GREEK CAPITAL LETTER OMICRON */ +#define XKB_KEY_Greek_PI 0x07d0 /* U+03A0 GREEK CAPITAL LETTER PI */ +#define XKB_KEY_Greek_RHO 0x07d1 /* U+03A1 GREEK CAPITAL LETTER RHO */ +#define XKB_KEY_Greek_SIGMA 0x07d2 /* U+03A3 GREEK CAPITAL LETTER SIGMA */ +#define XKB_KEY_Greek_TAU 0x07d4 /* U+03A4 GREEK CAPITAL LETTER TAU */ +#define XKB_KEY_Greek_UPSILON 0x07d5 /* U+03A5 GREEK CAPITAL LETTER UPSILON */ +#define XKB_KEY_Greek_PHI 0x07d6 /* U+03A6 GREEK CAPITAL LETTER PHI */ +#define XKB_KEY_Greek_CHI 0x07d7 /* U+03A7 GREEK CAPITAL LETTER CHI */ +#define XKB_KEY_Greek_PSI 0x07d8 /* U+03A8 GREEK CAPITAL LETTER PSI */ +#define XKB_KEY_Greek_OMEGA 0x07d9 /* U+03A9 GREEK CAPITAL LETTER OMEGA */ +#define XKB_KEY_Greek_alpha 0x07e1 /* U+03B1 GREEK SMALL LETTER ALPHA */ +#define XKB_KEY_Greek_beta 0x07e2 /* U+03B2 GREEK SMALL LETTER BETA */ +#define XKB_KEY_Greek_gamma 0x07e3 /* U+03B3 GREEK SMALL LETTER GAMMA */ +#define XKB_KEY_Greek_delta 0x07e4 /* U+03B4 GREEK SMALL LETTER DELTA */ +#define XKB_KEY_Greek_epsilon 0x07e5 /* U+03B5 GREEK SMALL LETTER EPSILON */ +#define XKB_KEY_Greek_zeta 0x07e6 /* U+03B6 GREEK SMALL LETTER ZETA */ +#define XKB_KEY_Greek_eta 0x07e7 /* U+03B7 GREEK SMALL LETTER ETA */ +#define XKB_KEY_Greek_theta 0x07e8 /* U+03B8 GREEK SMALL LETTER THETA */ +#define XKB_KEY_Greek_iota 0x07e9 /* U+03B9 GREEK SMALL LETTER IOTA */ +#define XKB_KEY_Greek_kappa 0x07ea /* U+03BA GREEK SMALL LETTER KAPPA */ +#define XKB_KEY_Greek_lamda 0x07eb /* U+03BB GREEK SMALL LETTER LAMDA */ +#define XKB_KEY_Greek_lambda 0x07eb /* U+03BB GREEK SMALL LETTER LAMDA */ +#define XKB_KEY_Greek_mu 0x07ec /* U+03BC GREEK SMALL LETTER MU */ +#define XKB_KEY_Greek_nu 0x07ed /* U+03BD GREEK SMALL LETTER NU */ +#define XKB_KEY_Greek_xi 0x07ee /* U+03BE GREEK SMALL LETTER XI */ +#define XKB_KEY_Greek_omicron 0x07ef /* U+03BF GREEK SMALL LETTER OMICRON */ +#define XKB_KEY_Greek_pi 0x07f0 /* U+03C0 GREEK SMALL LETTER PI */ +#define XKB_KEY_Greek_rho 0x07f1 /* U+03C1 GREEK SMALL LETTER RHO */ +#define XKB_KEY_Greek_sigma 0x07f2 /* U+03C3 GREEK SMALL LETTER SIGMA */ +#define XKB_KEY_Greek_finalsmallsigma 0x07f3 /* U+03C2 GREEK SMALL LETTER FINAL SIGMA */ +#define XKB_KEY_Greek_tau 0x07f4 /* U+03C4 GREEK SMALL LETTER TAU */ +#define XKB_KEY_Greek_upsilon 0x07f5 /* U+03C5 GREEK SMALL LETTER UPSILON */ +#define XKB_KEY_Greek_phi 0x07f6 /* U+03C6 GREEK SMALL LETTER PHI */ +#define XKB_KEY_Greek_chi 0x07f7 /* U+03C7 GREEK SMALL LETTER CHI */ +#define XKB_KEY_Greek_psi 0x07f8 /* U+03C8 GREEK SMALL LETTER PSI */ +#define XKB_KEY_Greek_omega 0x07f9 /* U+03C9 GREEK SMALL LETTER OMEGA */ +#define XKB_KEY_Greek_switch 0xff7e /* Alias for mode_switch */ + +/* + * Technical + * (from the DEC VT330/VT420 Technical Character Set, http://vt100.net/charsets/technical.html) + * Byte 3 = 8 + */ + +#define XKB_KEY_leftradical 0x08a1 /* U+23B7 RADICAL SYMBOL BOTTOM */ +#define XKB_KEY_topleftradical 0x08a2 /*(U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT)*/ +#define XKB_KEY_horizconnector 0x08a3 /*(U+2500 BOX DRAWINGS LIGHT HORIZONTAL)*/ +#define XKB_KEY_topintegral 0x08a4 /* U+2320 TOP HALF INTEGRAL */ +#define XKB_KEY_botintegral 0x08a5 /* U+2321 BOTTOM HALF INTEGRAL */ +#define XKB_KEY_vertconnector 0x08a6 /*(U+2502 BOX DRAWINGS LIGHT VERTICAL)*/ +#define XKB_KEY_topleftsqbracket 0x08a7 /* U+23A1 LEFT SQUARE BRACKET UPPER CORNER */ +#define XKB_KEY_botleftsqbracket 0x08a8 /* U+23A3 LEFT SQUARE BRACKET LOWER CORNER */ +#define XKB_KEY_toprightsqbracket 0x08a9 /* U+23A4 RIGHT SQUARE BRACKET UPPER CORNER */ +#define XKB_KEY_botrightsqbracket 0x08aa /* U+23A6 RIGHT SQUARE BRACKET LOWER CORNER */ +#define XKB_KEY_topleftparens 0x08ab /* U+239B LEFT PARENTHESIS UPPER HOOK */ +#define XKB_KEY_botleftparens 0x08ac /* U+239D LEFT PARENTHESIS LOWER HOOK */ +#define XKB_KEY_toprightparens 0x08ad /* U+239E RIGHT PARENTHESIS UPPER HOOK */ +#define XKB_KEY_botrightparens 0x08ae /* U+23A0 RIGHT PARENTHESIS LOWER HOOK */ +#define XKB_KEY_leftmiddlecurlybrace 0x08af /* U+23A8 LEFT CURLY BRACKET MIDDLE PIECE */ +#define XKB_KEY_rightmiddlecurlybrace 0x08b0 /* U+23AC RIGHT CURLY BRACKET MIDDLE PIECE */ +#define XKB_KEY_topleftsummation 0x08b1 +#define XKB_KEY_botleftsummation 0x08b2 +#define XKB_KEY_topvertsummationconnector 0x08b3 +#define XKB_KEY_botvertsummationconnector 0x08b4 +#define XKB_KEY_toprightsummation 0x08b5 +#define XKB_KEY_botrightsummation 0x08b6 +#define XKB_KEY_rightmiddlesummation 0x08b7 +#define XKB_KEY_lessthanequal 0x08bc /* U+2264 LESS-THAN OR EQUAL TO */ +#define XKB_KEY_notequal 0x08bd /* U+2260 NOT EQUAL TO */ +#define XKB_KEY_greaterthanequal 0x08be /* U+2265 GREATER-THAN OR EQUAL TO */ +#define XKB_KEY_integral 0x08bf /* U+222B INTEGRAL */ +#define XKB_KEY_therefore 0x08c0 /* U+2234 THEREFORE */ +#define XKB_KEY_variation 0x08c1 /* U+221D PROPORTIONAL TO */ +#define XKB_KEY_infinity 0x08c2 /* U+221E INFINITY */ +#define XKB_KEY_nabla 0x08c5 /* U+2207 NABLA */ +#define XKB_KEY_approximate 0x08c8 /* U+223C TILDE OPERATOR */ +#define XKB_KEY_similarequal 0x08c9 /* U+2243 ASYMPTOTICALLY EQUAL TO */ +#define XKB_KEY_ifonlyif 0x08cd /* U+21D4 LEFT RIGHT DOUBLE ARROW */ +#define XKB_KEY_implies 0x08ce /* U+21D2 RIGHTWARDS DOUBLE ARROW */ +#define XKB_KEY_identical 0x08cf /* U+2261 IDENTICAL TO */ +#define XKB_KEY_radical 0x08d6 /* U+221A SQUARE ROOT */ +#define XKB_KEY_includedin 0x08da /* U+2282 SUBSET OF */ +#define XKB_KEY_includes 0x08db /* U+2283 SUPERSET OF */ +#define XKB_KEY_intersection 0x08dc /* U+2229 INTERSECTION */ +#define XKB_KEY_union 0x08dd /* U+222A UNION */ +#define XKB_KEY_logicaland 0x08de /* U+2227 LOGICAL AND */ +#define XKB_KEY_logicalor 0x08df /* U+2228 LOGICAL OR */ +#define XKB_KEY_partialderivative 0x08ef /* U+2202 PARTIAL DIFFERENTIAL */ +#define XKB_KEY_function 0x08f6 /* U+0192 LATIN SMALL LETTER F WITH HOOK */ +#define XKB_KEY_leftarrow 0x08fb /* U+2190 LEFTWARDS ARROW */ +#define XKB_KEY_uparrow 0x08fc /* U+2191 UPWARDS ARROW */ +#define XKB_KEY_rightarrow 0x08fd /* U+2192 RIGHTWARDS ARROW */ +#define XKB_KEY_downarrow 0x08fe /* U+2193 DOWNWARDS ARROW */ + +/* + * Special + * (from the DEC VT100 Special Graphics Character Set) + * Byte 3 = 9 + */ + +#define XKB_KEY_blank 0x09df +#define XKB_KEY_soliddiamond 0x09e0 /* U+25C6 BLACK DIAMOND */ +#define XKB_KEY_checkerboard 0x09e1 /* U+2592 MEDIUM SHADE */ +#define XKB_KEY_ht 0x09e2 /* U+2409 SYMBOL FOR HORIZONTAL TABULATION */ +#define XKB_KEY_ff 0x09e3 /* U+240C SYMBOL FOR FORM FEED */ +#define XKB_KEY_cr 0x09e4 /* U+240D SYMBOL FOR CARRIAGE RETURN */ +#define XKB_KEY_lf 0x09e5 /* U+240A SYMBOL FOR LINE FEED */ +#define XKB_KEY_nl 0x09e8 /* U+2424 SYMBOL FOR NEWLINE */ +#define XKB_KEY_vt 0x09e9 /* U+240B SYMBOL FOR VERTICAL TABULATION */ +#define XKB_KEY_lowrightcorner 0x09ea /* U+2518 BOX DRAWINGS LIGHT UP AND LEFT */ +#define XKB_KEY_uprightcorner 0x09eb /* U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT */ +#define XKB_KEY_upleftcorner 0x09ec /* U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT */ +#define XKB_KEY_lowleftcorner 0x09ed /* U+2514 BOX DRAWINGS LIGHT UP AND RIGHT */ +#define XKB_KEY_crossinglines 0x09ee /* U+253C BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */ +#define XKB_KEY_horizlinescan1 0x09ef /* U+23BA HORIZONTAL SCAN LINE-1 */ +#define XKB_KEY_horizlinescan3 0x09f0 /* U+23BB HORIZONTAL SCAN LINE-3 */ +#define XKB_KEY_horizlinescan5 0x09f1 /* U+2500 BOX DRAWINGS LIGHT HORIZONTAL */ +#define XKB_KEY_horizlinescan7 0x09f2 /* U+23BC HORIZONTAL SCAN LINE-7 */ +#define XKB_KEY_horizlinescan9 0x09f3 /* U+23BD HORIZONTAL SCAN LINE-9 */ +#define XKB_KEY_leftt 0x09f4 /* U+251C BOX DRAWINGS LIGHT VERTICAL AND RIGHT */ +#define XKB_KEY_rightt 0x09f5 /* U+2524 BOX DRAWINGS LIGHT VERTICAL AND LEFT */ +#define XKB_KEY_bott 0x09f6 /* U+2534 BOX DRAWINGS LIGHT UP AND HORIZONTAL */ +#define XKB_KEY_topt 0x09f7 /* U+252C BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */ +#define XKB_KEY_vertbar 0x09f8 /* U+2502 BOX DRAWINGS LIGHT VERTICAL */ + +/* + * Publishing + * (these are probably from a long forgotten DEC Publishing + * font that once shipped with DECwrite) + * Byte 3 = 0x0a + */ + +#define XKB_KEY_emspace 0x0aa1 /* U+2003 EM SPACE */ +#define XKB_KEY_enspace 0x0aa2 /* U+2002 EN SPACE */ +#define XKB_KEY_em3space 0x0aa3 /* U+2004 THREE-PER-EM SPACE */ +#define XKB_KEY_em4space 0x0aa4 /* U+2005 FOUR-PER-EM SPACE */ +#define XKB_KEY_digitspace 0x0aa5 /* U+2007 FIGURE SPACE */ +#define XKB_KEY_punctspace 0x0aa6 /* U+2008 PUNCTUATION SPACE */ +#define XKB_KEY_thinspace 0x0aa7 /* U+2009 THIN SPACE */ +#define XKB_KEY_hairspace 0x0aa8 /* U+200A HAIR SPACE */ +#define XKB_KEY_emdash 0x0aa9 /* U+2014 EM DASH */ +#define XKB_KEY_endash 0x0aaa /* U+2013 EN DASH */ +#define XKB_KEY_signifblank 0x0aac /*(U+2423 OPEN BOX)*/ +#define XKB_KEY_ellipsis 0x0aae /* U+2026 HORIZONTAL ELLIPSIS */ +#define XKB_KEY_doubbaselinedot 0x0aaf /* U+2025 TWO DOT LEADER */ +#define XKB_KEY_onethird 0x0ab0 /* U+2153 VULGAR FRACTION ONE THIRD */ +#define XKB_KEY_twothirds 0x0ab1 /* U+2154 VULGAR FRACTION TWO THIRDS */ +#define XKB_KEY_onefifth 0x0ab2 /* U+2155 VULGAR FRACTION ONE FIFTH */ +#define XKB_KEY_twofifths 0x0ab3 /* U+2156 VULGAR FRACTION TWO FIFTHS */ +#define XKB_KEY_threefifths 0x0ab4 /* U+2157 VULGAR FRACTION THREE FIFTHS */ +#define XKB_KEY_fourfifths 0x0ab5 /* U+2158 VULGAR FRACTION FOUR FIFTHS */ +#define XKB_KEY_onesixth 0x0ab6 /* U+2159 VULGAR FRACTION ONE SIXTH */ +#define XKB_KEY_fivesixths 0x0ab7 /* U+215A VULGAR FRACTION FIVE SIXTHS */ +#define XKB_KEY_careof 0x0ab8 /* U+2105 CARE OF */ +#define XKB_KEY_figdash 0x0abb /* U+2012 FIGURE DASH */ +#define XKB_KEY_leftanglebracket 0x0abc /*(U+27E8 MATHEMATICAL LEFT ANGLE BRACKET)*/ +#define XKB_KEY_decimalpoint 0x0abd /*(U+002E FULL STOP)*/ +#define XKB_KEY_rightanglebracket 0x0abe /*(U+27E9 MATHEMATICAL RIGHT ANGLE BRACKET)*/ +#define XKB_KEY_marker 0x0abf +#define XKB_KEY_oneeighth 0x0ac3 /* U+215B VULGAR FRACTION ONE EIGHTH */ +#define XKB_KEY_threeeighths 0x0ac4 /* U+215C VULGAR FRACTION THREE EIGHTHS */ +#define XKB_KEY_fiveeighths 0x0ac5 /* U+215D VULGAR FRACTION FIVE EIGHTHS */ +#define XKB_KEY_seveneighths 0x0ac6 /* U+215E VULGAR FRACTION SEVEN EIGHTHS */ +#define XKB_KEY_trademark 0x0ac9 /* U+2122 TRADE MARK SIGN */ +#define XKB_KEY_signaturemark 0x0aca /*(U+2613 SALTIRE)*/ +#define XKB_KEY_trademarkincircle 0x0acb +#define XKB_KEY_leftopentriangle 0x0acc /*(U+25C1 WHITE LEFT-POINTING TRIANGLE)*/ +#define XKB_KEY_rightopentriangle 0x0acd /*(U+25B7 WHITE RIGHT-POINTING TRIANGLE)*/ +#define XKB_KEY_emopencircle 0x0ace /*(U+25CB WHITE CIRCLE)*/ +#define XKB_KEY_emopenrectangle 0x0acf /*(U+25AF WHITE VERTICAL RECTANGLE)*/ +#define XKB_KEY_leftsinglequotemark 0x0ad0 /* U+2018 LEFT SINGLE QUOTATION MARK */ +#define XKB_KEY_rightsinglequotemark 0x0ad1 /* U+2019 RIGHT SINGLE QUOTATION MARK */ +#define XKB_KEY_leftdoublequotemark 0x0ad2 /* U+201C LEFT DOUBLE QUOTATION MARK */ +#define XKB_KEY_rightdoublequotemark 0x0ad3 /* U+201D RIGHT DOUBLE QUOTATION MARK */ +#define XKB_KEY_prescription 0x0ad4 /* U+211E PRESCRIPTION TAKE */ +#define XKB_KEY_permille 0x0ad5 /* U+2030 PER MILLE SIGN */ +#define XKB_KEY_minutes 0x0ad6 /* U+2032 PRIME */ +#define XKB_KEY_seconds 0x0ad7 /* U+2033 DOUBLE PRIME */ +#define XKB_KEY_latincross 0x0ad9 /* U+271D LATIN CROSS */ +#define XKB_KEY_hexagram 0x0ada +#define XKB_KEY_filledrectbullet 0x0adb /*(U+25AC BLACK RECTANGLE)*/ +#define XKB_KEY_filledlefttribullet 0x0adc /*(U+25C0 BLACK LEFT-POINTING TRIANGLE)*/ +#define XKB_KEY_filledrighttribullet 0x0add /*(U+25B6 BLACK RIGHT-POINTING TRIANGLE)*/ +#define XKB_KEY_emfilledcircle 0x0ade /*(U+25CF BLACK CIRCLE)*/ +#define XKB_KEY_emfilledrect 0x0adf /*(U+25AE BLACK VERTICAL RECTANGLE)*/ +#define XKB_KEY_enopencircbullet 0x0ae0 /*(U+25E6 WHITE BULLET)*/ +#define XKB_KEY_enopensquarebullet 0x0ae1 /*(U+25AB WHITE SMALL SQUARE)*/ +#define XKB_KEY_openrectbullet 0x0ae2 /*(U+25AD WHITE RECTANGLE)*/ +#define XKB_KEY_opentribulletup 0x0ae3 /*(U+25B3 WHITE UP-POINTING TRIANGLE)*/ +#define XKB_KEY_opentribulletdown 0x0ae4 /*(U+25BD WHITE DOWN-POINTING TRIANGLE)*/ +#define XKB_KEY_openstar 0x0ae5 /*(U+2606 WHITE STAR)*/ +#define XKB_KEY_enfilledcircbullet 0x0ae6 /*(U+2022 BULLET)*/ +#define XKB_KEY_enfilledsqbullet 0x0ae7 /*(U+25AA BLACK SMALL SQUARE)*/ +#define XKB_KEY_filledtribulletup 0x0ae8 /*(U+25B2 BLACK UP-POINTING TRIANGLE)*/ +#define XKB_KEY_filledtribulletdown 0x0ae9 /*(U+25BC BLACK DOWN-POINTING TRIANGLE)*/ +#define XKB_KEY_leftpointer 0x0aea /*(U+261C WHITE LEFT POINTING INDEX)*/ +#define XKB_KEY_rightpointer 0x0aeb /*(U+261E WHITE RIGHT POINTING INDEX)*/ +#define XKB_KEY_club 0x0aec /* U+2663 BLACK CLUB SUIT */ +#define XKB_KEY_diamond 0x0aed /* U+2666 BLACK DIAMOND SUIT */ +#define XKB_KEY_heart 0x0aee /* U+2665 BLACK HEART SUIT */ +#define XKB_KEY_maltesecross 0x0af0 /* U+2720 MALTESE CROSS */ +#define XKB_KEY_dagger 0x0af1 /* U+2020 DAGGER */ +#define XKB_KEY_doubledagger 0x0af2 /* U+2021 DOUBLE DAGGER */ +#define XKB_KEY_checkmark 0x0af3 /* U+2713 CHECK MARK */ +#define XKB_KEY_ballotcross 0x0af4 /* U+2717 BALLOT X */ +#define XKB_KEY_musicalsharp 0x0af5 /* U+266F MUSIC SHARP SIGN */ +#define XKB_KEY_musicalflat 0x0af6 /* U+266D MUSIC FLAT SIGN */ +#define XKB_KEY_malesymbol 0x0af7 /* U+2642 MALE SIGN */ +#define XKB_KEY_femalesymbol 0x0af8 /* U+2640 FEMALE SIGN */ +#define XKB_KEY_telephone 0x0af9 /* U+260E BLACK TELEPHONE */ +#define XKB_KEY_telephonerecorder 0x0afa /* U+2315 TELEPHONE RECORDER */ +#define XKB_KEY_phonographcopyright 0x0afb /* U+2117 SOUND RECORDING COPYRIGHT */ +#define XKB_KEY_caret 0x0afc /* U+2038 CARET */ +#define XKB_KEY_singlelowquotemark 0x0afd /* U+201A SINGLE LOW-9 QUOTATION MARK */ +#define XKB_KEY_doublelowquotemark 0x0afe /* U+201E DOUBLE LOW-9 QUOTATION MARK */ +#define XKB_KEY_cursor 0x0aff + +/* + * APL + * Byte 3 = 0x0b + */ + +#define XKB_KEY_leftcaret 0x0ba3 /*(U+003C LESS-THAN SIGN)*/ +#define XKB_KEY_rightcaret 0x0ba6 /*(U+003E GREATER-THAN SIGN)*/ +#define XKB_KEY_downcaret 0x0ba8 /*(U+2228 LOGICAL OR)*/ +#define XKB_KEY_upcaret 0x0ba9 /*(U+2227 LOGICAL AND)*/ +#define XKB_KEY_overbar 0x0bc0 /*(U+00AF MACRON)*/ +#define XKB_KEY_downtack 0x0bc2 /* U+22A4 DOWN TACK */ +#define XKB_KEY_upshoe 0x0bc3 /*(U+2229 INTERSECTION)*/ +#define XKB_KEY_downstile 0x0bc4 /* U+230A LEFT FLOOR */ +#define XKB_KEY_underbar 0x0bc6 /*(U+005F LOW LINE)*/ +#define XKB_KEY_jot 0x0bca /* U+2218 RING OPERATOR */ +#define XKB_KEY_quad 0x0bcc /* U+2395 APL FUNCTIONAL SYMBOL QUAD */ +#define XKB_KEY_uptack 0x0bce /* U+22A5 UP TACK */ +#define XKB_KEY_circle 0x0bcf /* U+25CB WHITE CIRCLE */ +#define XKB_KEY_upstile 0x0bd3 /* U+2308 LEFT CEILING */ +#define XKB_KEY_downshoe 0x0bd6 /*(U+222A UNION)*/ +#define XKB_KEY_rightshoe 0x0bd8 /*(U+2283 SUPERSET OF)*/ +#define XKB_KEY_leftshoe 0x0bda /*(U+2282 SUBSET OF)*/ +#define XKB_KEY_lefttack 0x0bdc /* U+22A3 LEFT TACK */ +#define XKB_KEY_righttack 0x0bfc /* U+22A2 RIGHT TACK */ + +/* + * Hebrew + * Byte 3 = 0x0c + */ + +#define XKB_KEY_hebrew_doublelowline 0x0cdf /* U+2017 DOUBLE LOW LINE */ +#define XKB_KEY_hebrew_aleph 0x0ce0 /* U+05D0 HEBREW LETTER ALEF */ +#define XKB_KEY_hebrew_bet 0x0ce1 /* U+05D1 HEBREW LETTER BET */ +#define XKB_KEY_hebrew_beth 0x0ce1 /* deprecated */ +#define XKB_KEY_hebrew_gimel 0x0ce2 /* U+05D2 HEBREW LETTER GIMEL */ +#define XKB_KEY_hebrew_gimmel 0x0ce2 /* deprecated */ +#define XKB_KEY_hebrew_dalet 0x0ce3 /* U+05D3 HEBREW LETTER DALET */ +#define XKB_KEY_hebrew_daleth 0x0ce3 /* deprecated */ +#define XKB_KEY_hebrew_he 0x0ce4 /* U+05D4 HEBREW LETTER HE */ +#define XKB_KEY_hebrew_waw 0x0ce5 /* U+05D5 HEBREW LETTER VAV */ +#define XKB_KEY_hebrew_zain 0x0ce6 /* U+05D6 HEBREW LETTER ZAYIN */ +#define XKB_KEY_hebrew_zayin 0x0ce6 /* deprecated */ +#define XKB_KEY_hebrew_chet 0x0ce7 /* U+05D7 HEBREW LETTER HET */ +#define XKB_KEY_hebrew_het 0x0ce7 /* deprecated */ +#define XKB_KEY_hebrew_tet 0x0ce8 /* U+05D8 HEBREW LETTER TET */ +#define XKB_KEY_hebrew_teth 0x0ce8 /* deprecated */ +#define XKB_KEY_hebrew_yod 0x0ce9 /* U+05D9 HEBREW LETTER YOD */ +#define XKB_KEY_hebrew_finalkaph 0x0cea /* U+05DA HEBREW LETTER FINAL KAF */ +#define XKB_KEY_hebrew_kaph 0x0ceb /* U+05DB HEBREW LETTER KAF */ +#define XKB_KEY_hebrew_lamed 0x0cec /* U+05DC HEBREW LETTER LAMED */ +#define XKB_KEY_hebrew_finalmem 0x0ced /* U+05DD HEBREW LETTER FINAL MEM */ +#define XKB_KEY_hebrew_mem 0x0cee /* U+05DE HEBREW LETTER MEM */ +#define XKB_KEY_hebrew_finalnun 0x0cef /* U+05DF HEBREW LETTER FINAL NUN */ +#define XKB_KEY_hebrew_nun 0x0cf0 /* U+05E0 HEBREW LETTER NUN */ +#define XKB_KEY_hebrew_samech 0x0cf1 /* U+05E1 HEBREW LETTER SAMEKH */ +#define XKB_KEY_hebrew_samekh 0x0cf1 /* deprecated */ +#define XKB_KEY_hebrew_ayin 0x0cf2 /* U+05E2 HEBREW LETTER AYIN */ +#define XKB_KEY_hebrew_finalpe 0x0cf3 /* U+05E3 HEBREW LETTER FINAL PE */ +#define XKB_KEY_hebrew_pe 0x0cf4 /* U+05E4 HEBREW LETTER PE */ +#define XKB_KEY_hebrew_finalzade 0x0cf5 /* U+05E5 HEBREW LETTER FINAL TSADI */ +#define XKB_KEY_hebrew_finalzadi 0x0cf5 /* deprecated */ +#define XKB_KEY_hebrew_zade 0x0cf6 /* U+05E6 HEBREW LETTER TSADI */ +#define XKB_KEY_hebrew_zadi 0x0cf6 /* deprecated */ +#define XKB_KEY_hebrew_qoph 0x0cf7 /* U+05E7 HEBREW LETTER QOF */ +#define XKB_KEY_hebrew_kuf 0x0cf7 /* deprecated */ +#define XKB_KEY_hebrew_resh 0x0cf8 /* U+05E8 HEBREW LETTER RESH */ +#define XKB_KEY_hebrew_shin 0x0cf9 /* U+05E9 HEBREW LETTER SHIN */ +#define XKB_KEY_hebrew_taw 0x0cfa /* U+05EA HEBREW LETTER TAV */ +#define XKB_KEY_hebrew_taf 0x0cfa /* deprecated */ +#define XKB_KEY_Hebrew_switch 0xff7e /* Alias for mode_switch */ + +/* + * Thai + * Byte 3 = 0x0d + */ + +#define XKB_KEY_Thai_kokai 0x0da1 /* U+0E01 THAI CHARACTER KO KAI */ +#define XKB_KEY_Thai_khokhai 0x0da2 /* U+0E02 THAI CHARACTER KHO KHAI */ +#define XKB_KEY_Thai_khokhuat 0x0da3 /* U+0E03 THAI CHARACTER KHO KHUAT */ +#define XKB_KEY_Thai_khokhwai 0x0da4 /* U+0E04 THAI CHARACTER KHO KHWAI */ +#define XKB_KEY_Thai_khokhon 0x0da5 /* U+0E05 THAI CHARACTER KHO KHON */ +#define XKB_KEY_Thai_khorakhang 0x0da6 /* U+0E06 THAI CHARACTER KHO RAKHANG */ +#define XKB_KEY_Thai_ngongu 0x0da7 /* U+0E07 THAI CHARACTER NGO NGU */ +#define XKB_KEY_Thai_chochan 0x0da8 /* U+0E08 THAI CHARACTER CHO CHAN */ +#define XKB_KEY_Thai_choching 0x0da9 /* U+0E09 THAI CHARACTER CHO CHING */ +#define XKB_KEY_Thai_chochang 0x0daa /* U+0E0A THAI CHARACTER CHO CHANG */ +#define XKB_KEY_Thai_soso 0x0dab /* U+0E0B THAI CHARACTER SO SO */ +#define XKB_KEY_Thai_chochoe 0x0dac /* U+0E0C THAI CHARACTER CHO CHOE */ +#define XKB_KEY_Thai_yoying 0x0dad /* U+0E0D THAI CHARACTER YO YING */ +#define XKB_KEY_Thai_dochada 0x0dae /* U+0E0E THAI CHARACTER DO CHADA */ +#define XKB_KEY_Thai_topatak 0x0daf /* U+0E0F THAI CHARACTER TO PATAK */ +#define XKB_KEY_Thai_thothan 0x0db0 /* U+0E10 THAI CHARACTER THO THAN */ +#define XKB_KEY_Thai_thonangmontho 0x0db1 /* U+0E11 THAI CHARACTER THO NANGMONTHO */ +#define XKB_KEY_Thai_thophuthao 0x0db2 /* U+0E12 THAI CHARACTER THO PHUTHAO */ +#define XKB_KEY_Thai_nonen 0x0db3 /* U+0E13 THAI CHARACTER NO NEN */ +#define XKB_KEY_Thai_dodek 0x0db4 /* U+0E14 THAI CHARACTER DO DEK */ +#define XKB_KEY_Thai_totao 0x0db5 /* U+0E15 THAI CHARACTER TO TAO */ +#define XKB_KEY_Thai_thothung 0x0db6 /* U+0E16 THAI CHARACTER THO THUNG */ +#define XKB_KEY_Thai_thothahan 0x0db7 /* U+0E17 THAI CHARACTER THO THAHAN */ +#define XKB_KEY_Thai_thothong 0x0db8 /* U+0E18 THAI CHARACTER THO THONG */ +#define XKB_KEY_Thai_nonu 0x0db9 /* U+0E19 THAI CHARACTER NO NU */ +#define XKB_KEY_Thai_bobaimai 0x0dba /* U+0E1A THAI CHARACTER BO BAIMAI */ +#define XKB_KEY_Thai_popla 0x0dbb /* U+0E1B THAI CHARACTER PO PLA */ +#define XKB_KEY_Thai_phophung 0x0dbc /* U+0E1C THAI CHARACTER PHO PHUNG */ +#define XKB_KEY_Thai_fofa 0x0dbd /* U+0E1D THAI CHARACTER FO FA */ +#define XKB_KEY_Thai_phophan 0x0dbe /* U+0E1E THAI CHARACTER PHO PHAN */ +#define XKB_KEY_Thai_fofan 0x0dbf /* U+0E1F THAI CHARACTER FO FAN */ +#define XKB_KEY_Thai_phosamphao 0x0dc0 /* U+0E20 THAI CHARACTER PHO SAMPHAO */ +#define XKB_KEY_Thai_moma 0x0dc1 /* U+0E21 THAI CHARACTER MO MA */ +#define XKB_KEY_Thai_yoyak 0x0dc2 /* U+0E22 THAI CHARACTER YO YAK */ +#define XKB_KEY_Thai_rorua 0x0dc3 /* U+0E23 THAI CHARACTER RO RUA */ +#define XKB_KEY_Thai_ru 0x0dc4 /* U+0E24 THAI CHARACTER RU */ +#define XKB_KEY_Thai_loling 0x0dc5 /* U+0E25 THAI CHARACTER LO LING */ +#define XKB_KEY_Thai_lu 0x0dc6 /* U+0E26 THAI CHARACTER LU */ +#define XKB_KEY_Thai_wowaen 0x0dc7 /* U+0E27 THAI CHARACTER WO WAEN */ +#define XKB_KEY_Thai_sosala 0x0dc8 /* U+0E28 THAI CHARACTER SO SALA */ +#define XKB_KEY_Thai_sorusi 0x0dc9 /* U+0E29 THAI CHARACTER SO RUSI */ +#define XKB_KEY_Thai_sosua 0x0dca /* U+0E2A THAI CHARACTER SO SUA */ +#define XKB_KEY_Thai_hohip 0x0dcb /* U+0E2B THAI CHARACTER HO HIP */ +#define XKB_KEY_Thai_lochula 0x0dcc /* U+0E2C THAI CHARACTER LO CHULA */ +#define XKB_KEY_Thai_oang 0x0dcd /* U+0E2D THAI CHARACTER O ANG */ +#define XKB_KEY_Thai_honokhuk 0x0dce /* U+0E2E THAI CHARACTER HO NOKHUK */ +#define XKB_KEY_Thai_paiyannoi 0x0dcf /* U+0E2F THAI CHARACTER PAIYANNOI */ +#define XKB_KEY_Thai_saraa 0x0dd0 /* U+0E30 THAI CHARACTER SARA A */ +#define XKB_KEY_Thai_maihanakat 0x0dd1 /* U+0E31 THAI CHARACTER MAI HAN-AKAT */ +#define XKB_KEY_Thai_saraaa 0x0dd2 /* U+0E32 THAI CHARACTER SARA AA */ +#define XKB_KEY_Thai_saraam 0x0dd3 /* U+0E33 THAI CHARACTER SARA AM */ +#define XKB_KEY_Thai_sarai 0x0dd4 /* U+0E34 THAI CHARACTER SARA I */ +#define XKB_KEY_Thai_saraii 0x0dd5 /* U+0E35 THAI CHARACTER SARA II */ +#define XKB_KEY_Thai_saraue 0x0dd6 /* U+0E36 THAI CHARACTER SARA UE */ +#define XKB_KEY_Thai_sarauee 0x0dd7 /* U+0E37 THAI CHARACTER SARA UEE */ +#define XKB_KEY_Thai_sarau 0x0dd8 /* U+0E38 THAI CHARACTER SARA U */ +#define XKB_KEY_Thai_sarauu 0x0dd9 /* U+0E39 THAI CHARACTER SARA UU */ +#define XKB_KEY_Thai_phinthu 0x0dda /* U+0E3A THAI CHARACTER PHINTHU */ +#define XKB_KEY_Thai_maihanakat_maitho 0x0dde +#define XKB_KEY_Thai_baht 0x0ddf /* U+0E3F THAI CURRENCY SYMBOL BAHT */ +#define XKB_KEY_Thai_sarae 0x0de0 /* U+0E40 THAI CHARACTER SARA E */ +#define XKB_KEY_Thai_saraae 0x0de1 /* U+0E41 THAI CHARACTER SARA AE */ +#define XKB_KEY_Thai_sarao 0x0de2 /* U+0E42 THAI CHARACTER SARA O */ +#define XKB_KEY_Thai_saraaimaimuan 0x0de3 /* U+0E43 THAI CHARACTER SARA AI MAIMUAN */ +#define XKB_KEY_Thai_saraaimaimalai 0x0de4 /* U+0E44 THAI CHARACTER SARA AI MAIMALAI */ +#define XKB_KEY_Thai_lakkhangyao 0x0de5 /* U+0E45 THAI CHARACTER LAKKHANGYAO */ +#define XKB_KEY_Thai_maiyamok 0x0de6 /* U+0E46 THAI CHARACTER MAIYAMOK */ +#define XKB_KEY_Thai_maitaikhu 0x0de7 /* U+0E47 THAI CHARACTER MAITAIKHU */ +#define XKB_KEY_Thai_maiek 0x0de8 /* U+0E48 THAI CHARACTER MAI EK */ +#define XKB_KEY_Thai_maitho 0x0de9 /* U+0E49 THAI CHARACTER MAI THO */ +#define XKB_KEY_Thai_maitri 0x0dea /* U+0E4A THAI CHARACTER MAI TRI */ +#define XKB_KEY_Thai_maichattawa 0x0deb /* U+0E4B THAI CHARACTER MAI CHATTAWA */ +#define XKB_KEY_Thai_thanthakhat 0x0dec /* U+0E4C THAI CHARACTER THANTHAKHAT */ +#define XKB_KEY_Thai_nikhahit 0x0ded /* U+0E4D THAI CHARACTER NIKHAHIT */ +#define XKB_KEY_Thai_leksun 0x0df0 /* U+0E50 THAI DIGIT ZERO */ +#define XKB_KEY_Thai_leknung 0x0df1 /* U+0E51 THAI DIGIT ONE */ +#define XKB_KEY_Thai_leksong 0x0df2 /* U+0E52 THAI DIGIT TWO */ +#define XKB_KEY_Thai_leksam 0x0df3 /* U+0E53 THAI DIGIT THREE */ +#define XKB_KEY_Thai_leksi 0x0df4 /* U+0E54 THAI DIGIT FOUR */ +#define XKB_KEY_Thai_lekha 0x0df5 /* U+0E55 THAI DIGIT FIVE */ +#define XKB_KEY_Thai_lekhok 0x0df6 /* U+0E56 THAI DIGIT SIX */ +#define XKB_KEY_Thai_lekchet 0x0df7 /* U+0E57 THAI DIGIT SEVEN */ +#define XKB_KEY_Thai_lekpaet 0x0df8 /* U+0E58 THAI DIGIT EIGHT */ +#define XKB_KEY_Thai_lekkao 0x0df9 /* U+0E59 THAI DIGIT NINE */ + +/* + * Korean + * Byte 3 = 0x0e + */ + + +#define XKB_KEY_Hangul 0xff31 /* Hangul start/stop(toggle) */ +#define XKB_KEY_Hangul_Start 0xff32 /* Hangul start */ +#define XKB_KEY_Hangul_End 0xff33 /* Hangul end, English start */ +#define XKB_KEY_Hangul_Hanja 0xff34 /* Start Hangul->Hanja Conversion */ +#define XKB_KEY_Hangul_Jamo 0xff35 /* Hangul Jamo mode */ +#define XKB_KEY_Hangul_Romaja 0xff36 /* Hangul Romaja mode */ +#define XKB_KEY_Hangul_Codeinput 0xff37 /* Hangul code input mode */ +#define XKB_KEY_Hangul_Jeonja 0xff38 /* Jeonja mode */ +#define XKB_KEY_Hangul_Banja 0xff39 /* Banja mode */ +#define XKB_KEY_Hangul_PreHanja 0xff3a /* Pre Hanja conversion */ +#define XKB_KEY_Hangul_PostHanja 0xff3b /* Post Hanja conversion */ +#define XKB_KEY_Hangul_SingleCandidate 0xff3c /* Single candidate */ +#define XKB_KEY_Hangul_MultipleCandidate 0xff3d /* Multiple candidate */ +#define XKB_KEY_Hangul_PreviousCandidate 0xff3e /* Previous candidate */ +#define XKB_KEY_Hangul_Special 0xff3f /* Special symbols */ +#define XKB_KEY_Hangul_switch 0xff7e /* Alias for mode_switch */ + +/* Hangul Consonant Characters */ +#define XKB_KEY_Hangul_Kiyeog 0x0ea1 +#define XKB_KEY_Hangul_SsangKiyeog 0x0ea2 +#define XKB_KEY_Hangul_KiyeogSios 0x0ea3 +#define XKB_KEY_Hangul_Nieun 0x0ea4 +#define XKB_KEY_Hangul_NieunJieuj 0x0ea5 +#define XKB_KEY_Hangul_NieunHieuh 0x0ea6 +#define XKB_KEY_Hangul_Dikeud 0x0ea7 +#define XKB_KEY_Hangul_SsangDikeud 0x0ea8 +#define XKB_KEY_Hangul_Rieul 0x0ea9 +#define XKB_KEY_Hangul_RieulKiyeog 0x0eaa +#define XKB_KEY_Hangul_RieulMieum 0x0eab +#define XKB_KEY_Hangul_RieulPieub 0x0eac +#define XKB_KEY_Hangul_RieulSios 0x0ead +#define XKB_KEY_Hangul_RieulTieut 0x0eae +#define XKB_KEY_Hangul_RieulPhieuf 0x0eaf +#define XKB_KEY_Hangul_RieulHieuh 0x0eb0 +#define XKB_KEY_Hangul_Mieum 0x0eb1 +#define XKB_KEY_Hangul_Pieub 0x0eb2 +#define XKB_KEY_Hangul_SsangPieub 0x0eb3 +#define XKB_KEY_Hangul_PieubSios 0x0eb4 +#define XKB_KEY_Hangul_Sios 0x0eb5 +#define XKB_KEY_Hangul_SsangSios 0x0eb6 +#define XKB_KEY_Hangul_Ieung 0x0eb7 +#define XKB_KEY_Hangul_Jieuj 0x0eb8 +#define XKB_KEY_Hangul_SsangJieuj 0x0eb9 +#define XKB_KEY_Hangul_Cieuc 0x0eba +#define XKB_KEY_Hangul_Khieuq 0x0ebb +#define XKB_KEY_Hangul_Tieut 0x0ebc +#define XKB_KEY_Hangul_Phieuf 0x0ebd +#define XKB_KEY_Hangul_Hieuh 0x0ebe + +/* Hangul Vowel Characters */ +#define XKB_KEY_Hangul_A 0x0ebf +#define XKB_KEY_Hangul_AE 0x0ec0 +#define XKB_KEY_Hangul_YA 0x0ec1 +#define XKB_KEY_Hangul_YAE 0x0ec2 +#define XKB_KEY_Hangul_EO 0x0ec3 +#define XKB_KEY_Hangul_E 0x0ec4 +#define XKB_KEY_Hangul_YEO 0x0ec5 +#define XKB_KEY_Hangul_YE 0x0ec6 +#define XKB_KEY_Hangul_O 0x0ec7 +#define XKB_KEY_Hangul_WA 0x0ec8 +#define XKB_KEY_Hangul_WAE 0x0ec9 +#define XKB_KEY_Hangul_OE 0x0eca +#define XKB_KEY_Hangul_YO 0x0ecb +#define XKB_KEY_Hangul_U 0x0ecc +#define XKB_KEY_Hangul_WEO 0x0ecd +#define XKB_KEY_Hangul_WE 0x0ece +#define XKB_KEY_Hangul_WI 0x0ecf +#define XKB_KEY_Hangul_YU 0x0ed0 +#define XKB_KEY_Hangul_EU 0x0ed1 +#define XKB_KEY_Hangul_YI 0x0ed2 +#define XKB_KEY_Hangul_I 0x0ed3 + +/* Hangul syllable-final (JongSeong) Characters */ +#define XKB_KEY_Hangul_J_Kiyeog 0x0ed4 +#define XKB_KEY_Hangul_J_SsangKiyeog 0x0ed5 +#define XKB_KEY_Hangul_J_KiyeogSios 0x0ed6 +#define XKB_KEY_Hangul_J_Nieun 0x0ed7 +#define XKB_KEY_Hangul_J_NieunJieuj 0x0ed8 +#define XKB_KEY_Hangul_J_NieunHieuh 0x0ed9 +#define XKB_KEY_Hangul_J_Dikeud 0x0eda +#define XKB_KEY_Hangul_J_Rieul 0x0edb +#define XKB_KEY_Hangul_J_RieulKiyeog 0x0edc +#define XKB_KEY_Hangul_J_RieulMieum 0x0edd +#define XKB_KEY_Hangul_J_RieulPieub 0x0ede +#define XKB_KEY_Hangul_J_RieulSios 0x0edf +#define XKB_KEY_Hangul_J_RieulTieut 0x0ee0 +#define XKB_KEY_Hangul_J_RieulPhieuf 0x0ee1 +#define XKB_KEY_Hangul_J_RieulHieuh 0x0ee2 +#define XKB_KEY_Hangul_J_Mieum 0x0ee3 +#define XKB_KEY_Hangul_J_Pieub 0x0ee4 +#define XKB_KEY_Hangul_J_PieubSios 0x0ee5 +#define XKB_KEY_Hangul_J_Sios 0x0ee6 +#define XKB_KEY_Hangul_J_SsangSios 0x0ee7 +#define XKB_KEY_Hangul_J_Ieung 0x0ee8 +#define XKB_KEY_Hangul_J_Jieuj 0x0ee9 +#define XKB_KEY_Hangul_J_Cieuc 0x0eea +#define XKB_KEY_Hangul_J_Khieuq 0x0eeb +#define XKB_KEY_Hangul_J_Tieut 0x0eec +#define XKB_KEY_Hangul_J_Phieuf 0x0eed +#define XKB_KEY_Hangul_J_Hieuh 0x0eee + +/* Ancient Hangul Consonant Characters */ +#define XKB_KEY_Hangul_RieulYeorinHieuh 0x0eef +#define XKB_KEY_Hangul_SunkyeongeumMieum 0x0ef0 +#define XKB_KEY_Hangul_SunkyeongeumPieub 0x0ef1 +#define XKB_KEY_Hangul_PanSios 0x0ef2 +#define XKB_KEY_Hangul_KkogjiDalrinIeung 0x0ef3 +#define XKB_KEY_Hangul_SunkyeongeumPhieuf 0x0ef4 +#define XKB_KEY_Hangul_YeorinHieuh 0x0ef5 + +/* Ancient Hangul Vowel Characters */ +#define XKB_KEY_Hangul_AraeA 0x0ef6 +#define XKB_KEY_Hangul_AraeAE 0x0ef7 + +/* Ancient Hangul syllable-final (JongSeong) Characters */ +#define XKB_KEY_Hangul_J_PanSios 0x0ef8 +#define XKB_KEY_Hangul_J_KkogjiDalrinIeung 0x0ef9 +#define XKB_KEY_Hangul_J_YeorinHieuh 0x0efa + +/* Korean currency symbol */ +#define XKB_KEY_Korean_Won 0x0eff /*(U+20A9 WON SIGN)*/ + + +/* + * Armenian + */ + +#define XKB_KEY_Armenian_ligature_ew 0x1000587 /* U+0587 ARMENIAN SMALL LIGATURE ECH YIWN */ +#define XKB_KEY_Armenian_full_stop 0x1000589 /* U+0589 ARMENIAN FULL STOP */ +#define XKB_KEY_Armenian_verjaket 0x1000589 /* U+0589 ARMENIAN FULL STOP */ +#define XKB_KEY_Armenian_separation_mark 0x100055d /* U+055D ARMENIAN COMMA */ +#define XKB_KEY_Armenian_but 0x100055d /* U+055D ARMENIAN COMMA */ +#define XKB_KEY_Armenian_hyphen 0x100058a /* U+058A ARMENIAN HYPHEN */ +#define XKB_KEY_Armenian_yentamna 0x100058a /* U+058A ARMENIAN HYPHEN */ +#define XKB_KEY_Armenian_exclam 0x100055c /* U+055C ARMENIAN EXCLAMATION MARK */ +#define XKB_KEY_Armenian_amanak 0x100055c /* U+055C ARMENIAN EXCLAMATION MARK */ +#define XKB_KEY_Armenian_accent 0x100055b /* U+055B ARMENIAN EMPHASIS MARK */ +#define XKB_KEY_Armenian_shesht 0x100055b /* U+055B ARMENIAN EMPHASIS MARK */ +#define XKB_KEY_Armenian_question 0x100055e /* U+055E ARMENIAN QUESTION MARK */ +#define XKB_KEY_Armenian_paruyk 0x100055e /* U+055E ARMENIAN QUESTION MARK */ +#define XKB_KEY_Armenian_AYB 0x1000531 /* U+0531 ARMENIAN CAPITAL LETTER AYB */ +#define XKB_KEY_Armenian_ayb 0x1000561 /* U+0561 ARMENIAN SMALL LETTER AYB */ +#define XKB_KEY_Armenian_BEN 0x1000532 /* U+0532 ARMENIAN CAPITAL LETTER BEN */ +#define XKB_KEY_Armenian_ben 0x1000562 /* U+0562 ARMENIAN SMALL LETTER BEN */ +#define XKB_KEY_Armenian_GIM 0x1000533 /* U+0533 ARMENIAN CAPITAL LETTER GIM */ +#define XKB_KEY_Armenian_gim 0x1000563 /* U+0563 ARMENIAN SMALL LETTER GIM */ +#define XKB_KEY_Armenian_DA 0x1000534 /* U+0534 ARMENIAN CAPITAL LETTER DA */ +#define XKB_KEY_Armenian_da 0x1000564 /* U+0564 ARMENIAN SMALL LETTER DA */ +#define XKB_KEY_Armenian_YECH 0x1000535 /* U+0535 ARMENIAN CAPITAL LETTER ECH */ +#define XKB_KEY_Armenian_yech 0x1000565 /* U+0565 ARMENIAN SMALL LETTER ECH */ +#define XKB_KEY_Armenian_ZA 0x1000536 /* U+0536 ARMENIAN CAPITAL LETTER ZA */ +#define XKB_KEY_Armenian_za 0x1000566 /* U+0566 ARMENIAN SMALL LETTER ZA */ +#define XKB_KEY_Armenian_E 0x1000537 /* U+0537 ARMENIAN CAPITAL LETTER EH */ +#define XKB_KEY_Armenian_e 0x1000567 /* U+0567 ARMENIAN SMALL LETTER EH */ +#define XKB_KEY_Armenian_AT 0x1000538 /* U+0538 ARMENIAN CAPITAL LETTER ET */ +#define XKB_KEY_Armenian_at 0x1000568 /* U+0568 ARMENIAN SMALL LETTER ET */ +#define XKB_KEY_Armenian_TO 0x1000539 /* U+0539 ARMENIAN CAPITAL LETTER TO */ +#define XKB_KEY_Armenian_to 0x1000569 /* U+0569 ARMENIAN SMALL LETTER TO */ +#define XKB_KEY_Armenian_ZHE 0x100053a /* U+053A ARMENIAN CAPITAL LETTER ZHE */ +#define XKB_KEY_Armenian_zhe 0x100056a /* U+056A ARMENIAN SMALL LETTER ZHE */ +#define XKB_KEY_Armenian_INI 0x100053b /* U+053B ARMENIAN CAPITAL LETTER INI */ +#define XKB_KEY_Armenian_ini 0x100056b /* U+056B ARMENIAN SMALL LETTER INI */ +#define XKB_KEY_Armenian_LYUN 0x100053c /* U+053C ARMENIAN CAPITAL LETTER LIWN */ +#define XKB_KEY_Armenian_lyun 0x100056c /* U+056C ARMENIAN SMALL LETTER LIWN */ +#define XKB_KEY_Armenian_KHE 0x100053d /* U+053D ARMENIAN CAPITAL LETTER XEH */ +#define XKB_KEY_Armenian_khe 0x100056d /* U+056D ARMENIAN SMALL LETTER XEH */ +#define XKB_KEY_Armenian_TSA 0x100053e /* U+053E ARMENIAN CAPITAL LETTER CA */ +#define XKB_KEY_Armenian_tsa 0x100056e /* U+056E ARMENIAN SMALL LETTER CA */ +#define XKB_KEY_Armenian_KEN 0x100053f /* U+053F ARMENIAN CAPITAL LETTER KEN */ +#define XKB_KEY_Armenian_ken 0x100056f /* U+056F ARMENIAN SMALL LETTER KEN */ +#define XKB_KEY_Armenian_HO 0x1000540 /* U+0540 ARMENIAN CAPITAL LETTER HO */ +#define XKB_KEY_Armenian_ho 0x1000570 /* U+0570 ARMENIAN SMALL LETTER HO */ +#define XKB_KEY_Armenian_DZA 0x1000541 /* U+0541 ARMENIAN CAPITAL LETTER JA */ +#define XKB_KEY_Armenian_dza 0x1000571 /* U+0571 ARMENIAN SMALL LETTER JA */ +#define XKB_KEY_Armenian_GHAT 0x1000542 /* U+0542 ARMENIAN CAPITAL LETTER GHAD */ +#define XKB_KEY_Armenian_ghat 0x1000572 /* U+0572 ARMENIAN SMALL LETTER GHAD */ +#define XKB_KEY_Armenian_TCHE 0x1000543 /* U+0543 ARMENIAN CAPITAL LETTER CHEH */ +#define XKB_KEY_Armenian_tche 0x1000573 /* U+0573 ARMENIAN SMALL LETTER CHEH */ +#define XKB_KEY_Armenian_MEN 0x1000544 /* U+0544 ARMENIAN CAPITAL LETTER MEN */ +#define XKB_KEY_Armenian_men 0x1000574 /* U+0574 ARMENIAN SMALL LETTER MEN */ +#define XKB_KEY_Armenian_HI 0x1000545 /* U+0545 ARMENIAN CAPITAL LETTER YI */ +#define XKB_KEY_Armenian_hi 0x1000575 /* U+0575 ARMENIAN SMALL LETTER YI */ +#define XKB_KEY_Armenian_NU 0x1000546 /* U+0546 ARMENIAN CAPITAL LETTER NOW */ +#define XKB_KEY_Armenian_nu 0x1000576 /* U+0576 ARMENIAN SMALL LETTER NOW */ +#define XKB_KEY_Armenian_SHA 0x1000547 /* U+0547 ARMENIAN CAPITAL LETTER SHA */ +#define XKB_KEY_Armenian_sha 0x1000577 /* U+0577 ARMENIAN SMALL LETTER SHA */ +#define XKB_KEY_Armenian_VO 0x1000548 /* U+0548 ARMENIAN CAPITAL LETTER VO */ +#define XKB_KEY_Armenian_vo 0x1000578 /* U+0578 ARMENIAN SMALL LETTER VO */ +#define XKB_KEY_Armenian_CHA 0x1000549 /* U+0549 ARMENIAN CAPITAL LETTER CHA */ +#define XKB_KEY_Armenian_cha 0x1000579 /* U+0579 ARMENIAN SMALL LETTER CHA */ +#define XKB_KEY_Armenian_PE 0x100054a /* U+054A ARMENIAN CAPITAL LETTER PEH */ +#define XKB_KEY_Armenian_pe 0x100057a /* U+057A ARMENIAN SMALL LETTER PEH */ +#define XKB_KEY_Armenian_JE 0x100054b /* U+054B ARMENIAN CAPITAL LETTER JHEH */ +#define XKB_KEY_Armenian_je 0x100057b /* U+057B ARMENIAN SMALL LETTER JHEH */ +#define XKB_KEY_Armenian_RA 0x100054c /* U+054C ARMENIAN CAPITAL LETTER RA */ +#define XKB_KEY_Armenian_ra 0x100057c /* U+057C ARMENIAN SMALL LETTER RA */ +#define XKB_KEY_Armenian_SE 0x100054d /* U+054D ARMENIAN CAPITAL LETTER SEH */ +#define XKB_KEY_Armenian_se 0x100057d /* U+057D ARMENIAN SMALL LETTER SEH */ +#define XKB_KEY_Armenian_VEV 0x100054e /* U+054E ARMENIAN CAPITAL LETTER VEW */ +#define XKB_KEY_Armenian_vev 0x100057e /* U+057E ARMENIAN SMALL LETTER VEW */ +#define XKB_KEY_Armenian_TYUN 0x100054f /* U+054F ARMENIAN CAPITAL LETTER TIWN */ +#define XKB_KEY_Armenian_tyun 0x100057f /* U+057F ARMENIAN SMALL LETTER TIWN */ +#define XKB_KEY_Armenian_RE 0x1000550 /* U+0550 ARMENIAN CAPITAL LETTER REH */ +#define XKB_KEY_Armenian_re 0x1000580 /* U+0580 ARMENIAN SMALL LETTER REH */ +#define XKB_KEY_Armenian_TSO 0x1000551 /* U+0551 ARMENIAN CAPITAL LETTER CO */ +#define XKB_KEY_Armenian_tso 0x1000581 /* U+0581 ARMENIAN SMALL LETTER CO */ +#define XKB_KEY_Armenian_VYUN 0x1000552 /* U+0552 ARMENIAN CAPITAL LETTER YIWN */ +#define XKB_KEY_Armenian_vyun 0x1000582 /* U+0582 ARMENIAN SMALL LETTER YIWN */ +#define XKB_KEY_Armenian_PYUR 0x1000553 /* U+0553 ARMENIAN CAPITAL LETTER PIWR */ +#define XKB_KEY_Armenian_pyur 0x1000583 /* U+0583 ARMENIAN SMALL LETTER PIWR */ +#define XKB_KEY_Armenian_KE 0x1000554 /* U+0554 ARMENIAN CAPITAL LETTER KEH */ +#define XKB_KEY_Armenian_ke 0x1000584 /* U+0584 ARMENIAN SMALL LETTER KEH */ +#define XKB_KEY_Armenian_O 0x1000555 /* U+0555 ARMENIAN CAPITAL LETTER OH */ +#define XKB_KEY_Armenian_o 0x1000585 /* U+0585 ARMENIAN SMALL LETTER OH */ +#define XKB_KEY_Armenian_FE 0x1000556 /* U+0556 ARMENIAN CAPITAL LETTER FEH */ +#define XKB_KEY_Armenian_fe 0x1000586 /* U+0586 ARMENIAN SMALL LETTER FEH */ +#define XKB_KEY_Armenian_apostrophe 0x100055a /* U+055A ARMENIAN APOSTROPHE */ + +/* + * Georgian + */ + +#define XKB_KEY_Georgian_an 0x10010d0 /* U+10D0 GEORGIAN LETTER AN */ +#define XKB_KEY_Georgian_ban 0x10010d1 /* U+10D1 GEORGIAN LETTER BAN */ +#define XKB_KEY_Georgian_gan 0x10010d2 /* U+10D2 GEORGIAN LETTER GAN */ +#define XKB_KEY_Georgian_don 0x10010d3 /* U+10D3 GEORGIAN LETTER DON */ +#define XKB_KEY_Georgian_en 0x10010d4 /* U+10D4 GEORGIAN LETTER EN */ +#define XKB_KEY_Georgian_vin 0x10010d5 /* U+10D5 GEORGIAN LETTER VIN */ +#define XKB_KEY_Georgian_zen 0x10010d6 /* U+10D6 GEORGIAN LETTER ZEN */ +#define XKB_KEY_Georgian_tan 0x10010d7 /* U+10D7 GEORGIAN LETTER TAN */ +#define XKB_KEY_Georgian_in 0x10010d8 /* U+10D8 GEORGIAN LETTER IN */ +#define XKB_KEY_Georgian_kan 0x10010d9 /* U+10D9 GEORGIAN LETTER KAN */ +#define XKB_KEY_Georgian_las 0x10010da /* U+10DA GEORGIAN LETTER LAS */ +#define XKB_KEY_Georgian_man 0x10010db /* U+10DB GEORGIAN LETTER MAN */ +#define XKB_KEY_Georgian_nar 0x10010dc /* U+10DC GEORGIAN LETTER NAR */ +#define XKB_KEY_Georgian_on 0x10010dd /* U+10DD GEORGIAN LETTER ON */ +#define XKB_KEY_Georgian_par 0x10010de /* U+10DE GEORGIAN LETTER PAR */ +#define XKB_KEY_Georgian_zhar 0x10010df /* U+10DF GEORGIAN LETTER ZHAR */ +#define XKB_KEY_Georgian_rae 0x10010e0 /* U+10E0 GEORGIAN LETTER RAE */ +#define XKB_KEY_Georgian_san 0x10010e1 /* U+10E1 GEORGIAN LETTER SAN */ +#define XKB_KEY_Georgian_tar 0x10010e2 /* U+10E2 GEORGIAN LETTER TAR */ +#define XKB_KEY_Georgian_un 0x10010e3 /* U+10E3 GEORGIAN LETTER UN */ +#define XKB_KEY_Georgian_phar 0x10010e4 /* U+10E4 GEORGIAN LETTER PHAR */ +#define XKB_KEY_Georgian_khar 0x10010e5 /* U+10E5 GEORGIAN LETTER KHAR */ +#define XKB_KEY_Georgian_ghan 0x10010e6 /* U+10E6 GEORGIAN LETTER GHAN */ +#define XKB_KEY_Georgian_qar 0x10010e7 /* U+10E7 GEORGIAN LETTER QAR */ +#define XKB_KEY_Georgian_shin 0x10010e8 /* U+10E8 GEORGIAN LETTER SHIN */ +#define XKB_KEY_Georgian_chin 0x10010e9 /* U+10E9 GEORGIAN LETTER CHIN */ +#define XKB_KEY_Georgian_can 0x10010ea /* U+10EA GEORGIAN LETTER CAN */ +#define XKB_KEY_Georgian_jil 0x10010eb /* U+10EB GEORGIAN LETTER JIL */ +#define XKB_KEY_Georgian_cil 0x10010ec /* U+10EC GEORGIAN LETTER CIL */ +#define XKB_KEY_Georgian_char 0x10010ed /* U+10ED GEORGIAN LETTER CHAR */ +#define XKB_KEY_Georgian_xan 0x10010ee /* U+10EE GEORGIAN LETTER XAN */ +#define XKB_KEY_Georgian_jhan 0x10010ef /* U+10EF GEORGIAN LETTER JHAN */ +#define XKB_KEY_Georgian_hae 0x10010f0 /* U+10F0 GEORGIAN LETTER HAE */ +#define XKB_KEY_Georgian_he 0x10010f1 /* U+10F1 GEORGIAN LETTER HE */ +#define XKB_KEY_Georgian_hie 0x10010f2 /* U+10F2 GEORGIAN LETTER HIE */ +#define XKB_KEY_Georgian_we 0x10010f3 /* U+10F3 GEORGIAN LETTER WE */ +#define XKB_KEY_Georgian_har 0x10010f4 /* U+10F4 GEORGIAN LETTER HAR */ +#define XKB_KEY_Georgian_hoe 0x10010f5 /* U+10F5 GEORGIAN LETTER HOE */ +#define XKB_KEY_Georgian_fi 0x10010f6 /* U+10F6 GEORGIAN LETTER FI */ + +/* + * Azeri (and other Turkic or Caucasian languages) + */ + +/* latin */ +#define XKB_KEY_Xabovedot 0x1001e8a /* U+1E8A LATIN CAPITAL LETTER X WITH DOT ABOVE */ +#define XKB_KEY_Ibreve 0x100012c /* U+012C LATIN CAPITAL LETTER I WITH BREVE */ +#define XKB_KEY_Zstroke 0x10001b5 /* U+01B5 LATIN CAPITAL LETTER Z WITH STROKE */ +#define XKB_KEY_Gcaron 0x10001e6 /* U+01E6 LATIN CAPITAL LETTER G WITH CARON */ +#define XKB_KEY_Ocaron 0x10001d1 /* U+01D2 LATIN CAPITAL LETTER O WITH CARON */ +#define XKB_KEY_Obarred 0x100019f /* U+019F LATIN CAPITAL LETTER O WITH MIDDLE TILDE */ +#define XKB_KEY_xabovedot 0x1001e8b /* U+1E8B LATIN SMALL LETTER X WITH DOT ABOVE */ +#define XKB_KEY_ibreve 0x100012d /* U+012D LATIN SMALL LETTER I WITH BREVE */ +#define XKB_KEY_zstroke 0x10001b6 /* U+01B6 LATIN SMALL LETTER Z WITH STROKE */ +#define XKB_KEY_gcaron 0x10001e7 /* U+01E7 LATIN SMALL LETTER G WITH CARON */ +#define XKB_KEY_ocaron 0x10001d2 /* U+01D2 LATIN SMALL LETTER O WITH CARON */ +#define XKB_KEY_obarred 0x1000275 /* U+0275 LATIN SMALL LETTER BARRED O */ +#define XKB_KEY_SCHWA 0x100018f /* U+018F LATIN CAPITAL LETTER SCHWA */ +#define XKB_KEY_schwa 0x1000259 /* U+0259 LATIN SMALL LETTER SCHWA */ +#define XKB_KEY_EZH 0x10001b7 /* U+01B7 LATIN CAPITAL LETTER EZH */ +#define XKB_KEY_ezh 0x1000292 /* U+0292 LATIN SMALL LETTER EZH */ +/* those are not really Caucasus */ +/* For Inupiak */ +#define XKB_KEY_Lbelowdot 0x1001e36 /* U+1E36 LATIN CAPITAL LETTER L WITH DOT BELOW */ +#define XKB_KEY_lbelowdot 0x1001e37 /* U+1E37 LATIN SMALL LETTER L WITH DOT BELOW */ + +/* + * Vietnamese + */ + +#define XKB_KEY_Abelowdot 0x1001ea0 /* U+1EA0 LATIN CAPITAL LETTER A WITH DOT BELOW */ +#define XKB_KEY_abelowdot 0x1001ea1 /* U+1EA1 LATIN SMALL LETTER A WITH DOT BELOW */ +#define XKB_KEY_Ahook 0x1001ea2 /* U+1EA2 LATIN CAPITAL LETTER A WITH HOOK ABOVE */ +#define XKB_KEY_ahook 0x1001ea3 /* U+1EA3 LATIN SMALL LETTER A WITH HOOK ABOVE */ +#define XKB_KEY_Acircumflexacute 0x1001ea4 /* U+1EA4 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE */ +#define XKB_KEY_acircumflexacute 0x1001ea5 /* U+1EA5 LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE */ +#define XKB_KEY_Acircumflexgrave 0x1001ea6 /* U+1EA6 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE */ +#define XKB_KEY_acircumflexgrave 0x1001ea7 /* U+1EA7 LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE */ +#define XKB_KEY_Acircumflexhook 0x1001ea8 /* U+1EA8 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */ +#define XKB_KEY_acircumflexhook 0x1001ea9 /* U+1EA9 LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */ +#define XKB_KEY_Acircumflextilde 0x1001eaa /* U+1EAA LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE */ +#define XKB_KEY_acircumflextilde 0x1001eab /* U+1EAB LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE */ +#define XKB_KEY_Acircumflexbelowdot 0x1001eac /* U+1EAC LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW */ +#define XKB_KEY_acircumflexbelowdot 0x1001ead /* U+1EAD LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW */ +#define XKB_KEY_Abreveacute 0x1001eae /* U+1EAE LATIN CAPITAL LETTER A WITH BREVE AND ACUTE */ +#define XKB_KEY_abreveacute 0x1001eaf /* U+1EAF LATIN SMALL LETTER A WITH BREVE AND ACUTE */ +#define XKB_KEY_Abrevegrave 0x1001eb0 /* U+1EB0 LATIN CAPITAL LETTER A WITH BREVE AND GRAVE */ +#define XKB_KEY_abrevegrave 0x1001eb1 /* U+1EB1 LATIN SMALL LETTER A WITH BREVE AND GRAVE */ +#define XKB_KEY_Abrevehook 0x1001eb2 /* U+1EB2 LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE */ +#define XKB_KEY_abrevehook 0x1001eb3 /* U+1EB3 LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE */ +#define XKB_KEY_Abrevetilde 0x1001eb4 /* U+1EB4 LATIN CAPITAL LETTER A WITH BREVE AND TILDE */ +#define XKB_KEY_abrevetilde 0x1001eb5 /* U+1EB5 LATIN SMALL LETTER A WITH BREVE AND TILDE */ +#define XKB_KEY_Abrevebelowdot 0x1001eb6 /* U+1EB6 LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW */ +#define XKB_KEY_abrevebelowdot 0x1001eb7 /* U+1EB7 LATIN SMALL LETTER A WITH BREVE AND DOT BELOW */ +#define XKB_KEY_Ebelowdot 0x1001eb8 /* U+1EB8 LATIN CAPITAL LETTER E WITH DOT BELOW */ +#define XKB_KEY_ebelowdot 0x1001eb9 /* U+1EB9 LATIN SMALL LETTER E WITH DOT BELOW */ +#define XKB_KEY_Ehook 0x1001eba /* U+1EBA LATIN CAPITAL LETTER E WITH HOOK ABOVE */ +#define XKB_KEY_ehook 0x1001ebb /* U+1EBB LATIN SMALL LETTER E WITH HOOK ABOVE */ +#define XKB_KEY_Etilde 0x1001ebc /* U+1EBC LATIN CAPITAL LETTER E WITH TILDE */ +#define XKB_KEY_etilde 0x1001ebd /* U+1EBD LATIN SMALL LETTER E WITH TILDE */ +#define XKB_KEY_Ecircumflexacute 0x1001ebe /* U+1EBE LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE */ +#define XKB_KEY_ecircumflexacute 0x1001ebf /* U+1EBF LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE */ +#define XKB_KEY_Ecircumflexgrave 0x1001ec0 /* U+1EC0 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE */ +#define XKB_KEY_ecircumflexgrave 0x1001ec1 /* U+1EC1 LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE */ +#define XKB_KEY_Ecircumflexhook 0x1001ec2 /* U+1EC2 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */ +#define XKB_KEY_ecircumflexhook 0x1001ec3 /* U+1EC3 LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */ +#define XKB_KEY_Ecircumflextilde 0x1001ec4 /* U+1EC4 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE */ +#define XKB_KEY_ecircumflextilde 0x1001ec5 /* U+1EC5 LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE */ +#define XKB_KEY_Ecircumflexbelowdot 0x1001ec6 /* U+1EC6 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW */ +#define XKB_KEY_ecircumflexbelowdot 0x1001ec7 /* U+1EC7 LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW */ +#define XKB_KEY_Ihook 0x1001ec8 /* U+1EC8 LATIN CAPITAL LETTER I WITH HOOK ABOVE */ +#define XKB_KEY_ihook 0x1001ec9 /* U+1EC9 LATIN SMALL LETTER I WITH HOOK ABOVE */ +#define XKB_KEY_Ibelowdot 0x1001eca /* U+1ECA LATIN CAPITAL LETTER I WITH DOT BELOW */ +#define XKB_KEY_ibelowdot 0x1001ecb /* U+1ECB LATIN SMALL LETTER I WITH DOT BELOW */ +#define XKB_KEY_Obelowdot 0x1001ecc /* U+1ECC LATIN CAPITAL LETTER O WITH DOT BELOW */ +#define XKB_KEY_obelowdot 0x1001ecd /* U+1ECD LATIN SMALL LETTER O WITH DOT BELOW */ +#define XKB_KEY_Ohook 0x1001ece /* U+1ECE LATIN CAPITAL LETTER O WITH HOOK ABOVE */ +#define XKB_KEY_ohook 0x1001ecf /* U+1ECF LATIN SMALL LETTER O WITH HOOK ABOVE */ +#define XKB_KEY_Ocircumflexacute 0x1001ed0 /* U+1ED0 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE */ +#define XKB_KEY_ocircumflexacute 0x1001ed1 /* U+1ED1 LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE */ +#define XKB_KEY_Ocircumflexgrave 0x1001ed2 /* U+1ED2 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE */ +#define XKB_KEY_ocircumflexgrave 0x1001ed3 /* U+1ED3 LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE */ +#define XKB_KEY_Ocircumflexhook 0x1001ed4 /* U+1ED4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */ +#define XKB_KEY_ocircumflexhook 0x1001ed5 /* U+1ED5 LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */ +#define XKB_KEY_Ocircumflextilde 0x1001ed6 /* U+1ED6 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE */ +#define XKB_KEY_ocircumflextilde 0x1001ed7 /* U+1ED7 LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE */ +#define XKB_KEY_Ocircumflexbelowdot 0x1001ed8 /* U+1ED8 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW */ +#define XKB_KEY_ocircumflexbelowdot 0x1001ed9 /* U+1ED9 LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW */ +#define XKB_KEY_Ohornacute 0x1001eda /* U+1EDA LATIN CAPITAL LETTER O WITH HORN AND ACUTE */ +#define XKB_KEY_ohornacute 0x1001edb /* U+1EDB LATIN SMALL LETTER O WITH HORN AND ACUTE */ +#define XKB_KEY_Ohorngrave 0x1001edc /* U+1EDC LATIN CAPITAL LETTER O WITH HORN AND GRAVE */ +#define XKB_KEY_ohorngrave 0x1001edd /* U+1EDD LATIN SMALL LETTER O WITH HORN AND GRAVE */ +#define XKB_KEY_Ohornhook 0x1001ede /* U+1EDE LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE */ +#define XKB_KEY_ohornhook 0x1001edf /* U+1EDF LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE */ +#define XKB_KEY_Ohorntilde 0x1001ee0 /* U+1EE0 LATIN CAPITAL LETTER O WITH HORN AND TILDE */ +#define XKB_KEY_ohorntilde 0x1001ee1 /* U+1EE1 LATIN SMALL LETTER O WITH HORN AND TILDE */ +#define XKB_KEY_Ohornbelowdot 0x1001ee2 /* U+1EE2 LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW */ +#define XKB_KEY_ohornbelowdot 0x1001ee3 /* U+1EE3 LATIN SMALL LETTER O WITH HORN AND DOT BELOW */ +#define XKB_KEY_Ubelowdot 0x1001ee4 /* U+1EE4 LATIN CAPITAL LETTER U WITH DOT BELOW */ +#define XKB_KEY_ubelowdot 0x1001ee5 /* U+1EE5 LATIN SMALL LETTER U WITH DOT BELOW */ +#define XKB_KEY_Uhook 0x1001ee6 /* U+1EE6 LATIN CAPITAL LETTER U WITH HOOK ABOVE */ +#define XKB_KEY_uhook 0x1001ee7 /* U+1EE7 LATIN SMALL LETTER U WITH HOOK ABOVE */ +#define XKB_KEY_Uhornacute 0x1001ee8 /* U+1EE8 LATIN CAPITAL LETTER U WITH HORN AND ACUTE */ +#define XKB_KEY_uhornacute 0x1001ee9 /* U+1EE9 LATIN SMALL LETTER U WITH HORN AND ACUTE */ +#define XKB_KEY_Uhorngrave 0x1001eea /* U+1EEA LATIN CAPITAL LETTER U WITH HORN AND GRAVE */ +#define XKB_KEY_uhorngrave 0x1001eeb /* U+1EEB LATIN SMALL LETTER U WITH HORN AND GRAVE */ +#define XKB_KEY_Uhornhook 0x1001eec /* U+1EEC LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE */ +#define XKB_KEY_uhornhook 0x1001eed /* U+1EED LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE */ +#define XKB_KEY_Uhorntilde 0x1001eee /* U+1EEE LATIN CAPITAL LETTER U WITH HORN AND TILDE */ +#define XKB_KEY_uhorntilde 0x1001eef /* U+1EEF LATIN SMALL LETTER U WITH HORN AND TILDE */ +#define XKB_KEY_Uhornbelowdot 0x1001ef0 /* U+1EF0 LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW */ +#define XKB_KEY_uhornbelowdot 0x1001ef1 /* U+1EF1 LATIN SMALL LETTER U WITH HORN AND DOT BELOW */ +#define XKB_KEY_Ybelowdot 0x1001ef4 /* U+1EF4 LATIN CAPITAL LETTER Y WITH DOT BELOW */ +#define XKB_KEY_ybelowdot 0x1001ef5 /* U+1EF5 LATIN SMALL LETTER Y WITH DOT BELOW */ +#define XKB_KEY_Yhook 0x1001ef6 /* U+1EF6 LATIN CAPITAL LETTER Y WITH HOOK ABOVE */ +#define XKB_KEY_yhook 0x1001ef7 /* U+1EF7 LATIN SMALL LETTER Y WITH HOOK ABOVE */ +#define XKB_KEY_Ytilde 0x1001ef8 /* U+1EF8 LATIN CAPITAL LETTER Y WITH TILDE */ +#define XKB_KEY_ytilde 0x1001ef9 /* U+1EF9 LATIN SMALL LETTER Y WITH TILDE */ +#define XKB_KEY_Ohorn 0x10001a0 /* U+01A0 LATIN CAPITAL LETTER O WITH HORN */ +#define XKB_KEY_ohorn 0x10001a1 /* U+01A1 LATIN SMALL LETTER O WITH HORN */ +#define XKB_KEY_Uhorn 0x10001af /* U+01AF LATIN CAPITAL LETTER U WITH HORN */ +#define XKB_KEY_uhorn 0x10001b0 /* U+01B0 LATIN SMALL LETTER U WITH HORN */ + + +#define XKB_KEY_EcuSign 0x10020a0 /* U+20A0 EURO-CURRENCY SIGN */ +#define XKB_KEY_ColonSign 0x10020a1 /* U+20A1 COLON SIGN */ +#define XKB_KEY_CruzeiroSign 0x10020a2 /* U+20A2 CRUZEIRO SIGN */ +#define XKB_KEY_FFrancSign 0x10020a3 /* U+20A3 FRENCH FRANC SIGN */ +#define XKB_KEY_LiraSign 0x10020a4 /* U+20A4 LIRA SIGN */ +#define XKB_KEY_MillSign 0x10020a5 /* U+20A5 MILL SIGN */ +#define XKB_KEY_NairaSign 0x10020a6 /* U+20A6 NAIRA SIGN */ +#define XKB_KEY_PesetaSign 0x10020a7 /* U+20A7 PESETA SIGN */ +#define XKB_KEY_RupeeSign 0x10020a8 /* U+20A8 RUPEE SIGN */ +#define XKB_KEY_WonSign 0x10020a9 /* U+20A9 WON SIGN */ +#define XKB_KEY_NewSheqelSign 0x10020aa /* U+20AA NEW SHEQEL SIGN */ +#define XKB_KEY_DongSign 0x10020ab /* U+20AB DONG SIGN */ +#define XKB_KEY_EuroSign 0x20ac /* U+20AC EURO SIGN */ + +/* one, two and three are defined above. */ +#define XKB_KEY_zerosuperior 0x1002070 /* U+2070 SUPERSCRIPT ZERO */ +#define XKB_KEY_foursuperior 0x1002074 /* U+2074 SUPERSCRIPT FOUR */ +#define XKB_KEY_fivesuperior 0x1002075 /* U+2075 SUPERSCRIPT FIVE */ +#define XKB_KEY_sixsuperior 0x1002076 /* U+2076 SUPERSCRIPT SIX */ +#define XKB_KEY_sevensuperior 0x1002077 /* U+2077 SUPERSCRIPT SEVEN */ +#define XKB_KEY_eightsuperior 0x1002078 /* U+2078 SUPERSCRIPT EIGHT */ +#define XKB_KEY_ninesuperior 0x1002079 /* U+2079 SUPERSCRIPT NINE */ +#define XKB_KEY_zerosubscript 0x1002080 /* U+2080 SUBSCRIPT ZERO */ +#define XKB_KEY_onesubscript 0x1002081 /* U+2081 SUBSCRIPT ONE */ +#define XKB_KEY_twosubscript 0x1002082 /* U+2082 SUBSCRIPT TWO */ +#define XKB_KEY_threesubscript 0x1002083 /* U+2083 SUBSCRIPT THREE */ +#define XKB_KEY_foursubscript 0x1002084 /* U+2084 SUBSCRIPT FOUR */ +#define XKB_KEY_fivesubscript 0x1002085 /* U+2085 SUBSCRIPT FIVE */ +#define XKB_KEY_sixsubscript 0x1002086 /* U+2086 SUBSCRIPT SIX */ +#define XKB_KEY_sevensubscript 0x1002087 /* U+2087 SUBSCRIPT SEVEN */ +#define XKB_KEY_eightsubscript 0x1002088 /* U+2088 SUBSCRIPT EIGHT */ +#define XKB_KEY_ninesubscript 0x1002089 /* U+2089 SUBSCRIPT NINE */ +#define XKB_KEY_partdifferential 0x1002202 /* U+2202 PARTIAL DIFFERENTIAL */ +#define XKB_KEY_emptyset 0x1002205 /* U+2205 NULL SET */ +#define XKB_KEY_elementof 0x1002208 /* U+2208 ELEMENT OF */ +#define XKB_KEY_notelementof 0x1002209 /* U+2209 NOT AN ELEMENT OF */ +#define XKB_KEY_containsas 0x100220B /* U+220B CONTAINS AS MEMBER */ +#define XKB_KEY_squareroot 0x100221A /* U+221A SQUARE ROOT */ +#define XKB_KEY_cuberoot 0x100221B /* U+221B CUBE ROOT */ +#define XKB_KEY_fourthroot 0x100221C /* U+221C FOURTH ROOT */ +#define XKB_KEY_dintegral 0x100222C /* U+222C DOUBLE INTEGRAL */ +#define XKB_KEY_tintegral 0x100222D /* U+222D TRIPLE INTEGRAL */ +#define XKB_KEY_because 0x1002235 /* U+2235 BECAUSE */ +#define XKB_KEY_approxeq 0x1002248 /* U+2245 ALMOST EQUAL TO */ +#define XKB_KEY_notapproxeq 0x1002247 /* U+2247 NOT ALMOST EQUAL TO */ +#define XKB_KEY_notidentical 0x1002262 /* U+2262 NOT IDENTICAL TO */ +#define XKB_KEY_stricteq 0x1002263 /* U+2263 STRICTLY EQUIVALENT TO */ + +#define XKB_KEY_braille_dot_1 0xfff1 +#define XKB_KEY_braille_dot_2 0xfff2 +#define XKB_KEY_braille_dot_3 0xfff3 +#define XKB_KEY_braille_dot_4 0xfff4 +#define XKB_KEY_braille_dot_5 0xfff5 +#define XKB_KEY_braille_dot_6 0xfff6 +#define XKB_KEY_braille_dot_7 0xfff7 +#define XKB_KEY_braille_dot_8 0xfff8 +#define XKB_KEY_braille_dot_9 0xfff9 +#define XKB_KEY_braille_dot_10 0xfffa +#define XKB_KEY_braille_blank 0x1002800 /* U+2800 BRAILLE PATTERN BLANK */ +#define XKB_KEY_braille_dots_1 0x1002801 /* U+2801 BRAILLE PATTERN DOTS-1 */ +#define XKB_KEY_braille_dots_2 0x1002802 /* U+2802 BRAILLE PATTERN DOTS-2 */ +#define XKB_KEY_braille_dots_12 0x1002803 /* U+2803 BRAILLE PATTERN DOTS-12 */ +#define XKB_KEY_braille_dots_3 0x1002804 /* U+2804 BRAILLE PATTERN DOTS-3 */ +#define XKB_KEY_braille_dots_13 0x1002805 /* U+2805 BRAILLE PATTERN DOTS-13 */ +#define XKB_KEY_braille_dots_23 0x1002806 /* U+2806 BRAILLE PATTERN DOTS-23 */ +#define XKB_KEY_braille_dots_123 0x1002807 /* U+2807 BRAILLE PATTERN DOTS-123 */ +#define XKB_KEY_braille_dots_4 0x1002808 /* U+2808 BRAILLE PATTERN DOTS-4 */ +#define XKB_KEY_braille_dots_14 0x1002809 /* U+2809 BRAILLE PATTERN DOTS-14 */ +#define XKB_KEY_braille_dots_24 0x100280a /* U+280a BRAILLE PATTERN DOTS-24 */ +#define XKB_KEY_braille_dots_124 0x100280b /* U+280b BRAILLE PATTERN DOTS-124 */ +#define XKB_KEY_braille_dots_34 0x100280c /* U+280c BRAILLE PATTERN DOTS-34 */ +#define XKB_KEY_braille_dots_134 0x100280d /* U+280d BRAILLE PATTERN DOTS-134 */ +#define XKB_KEY_braille_dots_234 0x100280e /* U+280e BRAILLE PATTERN DOTS-234 */ +#define XKB_KEY_braille_dots_1234 0x100280f /* U+280f BRAILLE PATTERN DOTS-1234 */ +#define XKB_KEY_braille_dots_5 0x1002810 /* U+2810 BRAILLE PATTERN DOTS-5 */ +#define XKB_KEY_braille_dots_15 0x1002811 /* U+2811 BRAILLE PATTERN DOTS-15 */ +#define XKB_KEY_braille_dots_25 0x1002812 /* U+2812 BRAILLE PATTERN DOTS-25 */ +#define XKB_KEY_braille_dots_125 0x1002813 /* U+2813 BRAILLE PATTERN DOTS-125 */ +#define XKB_KEY_braille_dots_35 0x1002814 /* U+2814 BRAILLE PATTERN DOTS-35 */ +#define XKB_KEY_braille_dots_135 0x1002815 /* U+2815 BRAILLE PATTERN DOTS-135 */ +#define XKB_KEY_braille_dots_235 0x1002816 /* U+2816 BRAILLE PATTERN DOTS-235 */ +#define XKB_KEY_braille_dots_1235 0x1002817 /* U+2817 BRAILLE PATTERN DOTS-1235 */ +#define XKB_KEY_braille_dots_45 0x1002818 /* U+2818 BRAILLE PATTERN DOTS-45 */ +#define XKB_KEY_braille_dots_145 0x1002819 /* U+2819 BRAILLE PATTERN DOTS-145 */ +#define XKB_KEY_braille_dots_245 0x100281a /* U+281a BRAILLE PATTERN DOTS-245 */ +#define XKB_KEY_braille_dots_1245 0x100281b /* U+281b BRAILLE PATTERN DOTS-1245 */ +#define XKB_KEY_braille_dots_345 0x100281c /* U+281c BRAILLE PATTERN DOTS-345 */ +#define XKB_KEY_braille_dots_1345 0x100281d /* U+281d BRAILLE PATTERN DOTS-1345 */ +#define XKB_KEY_braille_dots_2345 0x100281e /* U+281e BRAILLE PATTERN DOTS-2345 */ +#define XKB_KEY_braille_dots_12345 0x100281f /* U+281f BRAILLE PATTERN DOTS-12345 */ +#define XKB_KEY_braille_dots_6 0x1002820 /* U+2820 BRAILLE PATTERN DOTS-6 */ +#define XKB_KEY_braille_dots_16 0x1002821 /* U+2821 BRAILLE PATTERN DOTS-16 */ +#define XKB_KEY_braille_dots_26 0x1002822 /* U+2822 BRAILLE PATTERN DOTS-26 */ +#define XKB_KEY_braille_dots_126 0x1002823 /* U+2823 BRAILLE PATTERN DOTS-126 */ +#define XKB_KEY_braille_dots_36 0x1002824 /* U+2824 BRAILLE PATTERN DOTS-36 */ +#define XKB_KEY_braille_dots_136 0x1002825 /* U+2825 BRAILLE PATTERN DOTS-136 */ +#define XKB_KEY_braille_dots_236 0x1002826 /* U+2826 BRAILLE PATTERN DOTS-236 */ +#define XKB_KEY_braille_dots_1236 0x1002827 /* U+2827 BRAILLE PATTERN DOTS-1236 */ +#define XKB_KEY_braille_dots_46 0x1002828 /* U+2828 BRAILLE PATTERN DOTS-46 */ +#define XKB_KEY_braille_dots_146 0x1002829 /* U+2829 BRAILLE PATTERN DOTS-146 */ +#define XKB_KEY_braille_dots_246 0x100282a /* U+282a BRAILLE PATTERN DOTS-246 */ +#define XKB_KEY_braille_dots_1246 0x100282b /* U+282b BRAILLE PATTERN DOTS-1246 */ +#define XKB_KEY_braille_dots_346 0x100282c /* U+282c BRAILLE PATTERN DOTS-346 */ +#define XKB_KEY_braille_dots_1346 0x100282d /* U+282d BRAILLE PATTERN DOTS-1346 */ +#define XKB_KEY_braille_dots_2346 0x100282e /* U+282e BRAILLE PATTERN DOTS-2346 */ +#define XKB_KEY_braille_dots_12346 0x100282f /* U+282f BRAILLE PATTERN DOTS-12346 */ +#define XKB_KEY_braille_dots_56 0x1002830 /* U+2830 BRAILLE PATTERN DOTS-56 */ +#define XKB_KEY_braille_dots_156 0x1002831 /* U+2831 BRAILLE PATTERN DOTS-156 */ +#define XKB_KEY_braille_dots_256 0x1002832 /* U+2832 BRAILLE PATTERN DOTS-256 */ +#define XKB_KEY_braille_dots_1256 0x1002833 /* U+2833 BRAILLE PATTERN DOTS-1256 */ +#define XKB_KEY_braille_dots_356 0x1002834 /* U+2834 BRAILLE PATTERN DOTS-356 */ +#define XKB_KEY_braille_dots_1356 0x1002835 /* U+2835 BRAILLE PATTERN DOTS-1356 */ +#define XKB_KEY_braille_dots_2356 0x1002836 /* U+2836 BRAILLE PATTERN DOTS-2356 */ +#define XKB_KEY_braille_dots_12356 0x1002837 /* U+2837 BRAILLE PATTERN DOTS-12356 */ +#define XKB_KEY_braille_dots_456 0x1002838 /* U+2838 BRAILLE PATTERN DOTS-456 */ +#define XKB_KEY_braille_dots_1456 0x1002839 /* U+2839 BRAILLE PATTERN DOTS-1456 */ +#define XKB_KEY_braille_dots_2456 0x100283a /* U+283a BRAILLE PATTERN DOTS-2456 */ +#define XKB_KEY_braille_dots_12456 0x100283b /* U+283b BRAILLE PATTERN DOTS-12456 */ +#define XKB_KEY_braille_dots_3456 0x100283c /* U+283c BRAILLE PATTERN DOTS-3456 */ +#define XKB_KEY_braille_dots_13456 0x100283d /* U+283d BRAILLE PATTERN DOTS-13456 */ +#define XKB_KEY_braille_dots_23456 0x100283e /* U+283e BRAILLE PATTERN DOTS-23456 */ +#define XKB_KEY_braille_dots_123456 0x100283f /* U+283f BRAILLE PATTERN DOTS-123456 */ +#define XKB_KEY_braille_dots_7 0x1002840 /* U+2840 BRAILLE PATTERN DOTS-7 */ +#define XKB_KEY_braille_dots_17 0x1002841 /* U+2841 BRAILLE PATTERN DOTS-17 */ +#define XKB_KEY_braille_dots_27 0x1002842 /* U+2842 BRAILLE PATTERN DOTS-27 */ +#define XKB_KEY_braille_dots_127 0x1002843 /* U+2843 BRAILLE PATTERN DOTS-127 */ +#define XKB_KEY_braille_dots_37 0x1002844 /* U+2844 BRAILLE PATTERN DOTS-37 */ +#define XKB_KEY_braille_dots_137 0x1002845 /* U+2845 BRAILLE PATTERN DOTS-137 */ +#define XKB_KEY_braille_dots_237 0x1002846 /* U+2846 BRAILLE PATTERN DOTS-237 */ +#define XKB_KEY_braille_dots_1237 0x1002847 /* U+2847 BRAILLE PATTERN DOTS-1237 */ +#define XKB_KEY_braille_dots_47 0x1002848 /* U+2848 BRAILLE PATTERN DOTS-47 */ +#define XKB_KEY_braille_dots_147 0x1002849 /* U+2849 BRAILLE PATTERN DOTS-147 */ +#define XKB_KEY_braille_dots_247 0x100284a /* U+284a BRAILLE PATTERN DOTS-247 */ +#define XKB_KEY_braille_dots_1247 0x100284b /* U+284b BRAILLE PATTERN DOTS-1247 */ +#define XKB_KEY_braille_dots_347 0x100284c /* U+284c BRAILLE PATTERN DOTS-347 */ +#define XKB_KEY_braille_dots_1347 0x100284d /* U+284d BRAILLE PATTERN DOTS-1347 */ +#define XKB_KEY_braille_dots_2347 0x100284e /* U+284e BRAILLE PATTERN DOTS-2347 */ +#define XKB_KEY_braille_dots_12347 0x100284f /* U+284f BRAILLE PATTERN DOTS-12347 */ +#define XKB_KEY_braille_dots_57 0x1002850 /* U+2850 BRAILLE PATTERN DOTS-57 */ +#define XKB_KEY_braille_dots_157 0x1002851 /* U+2851 BRAILLE PATTERN DOTS-157 */ +#define XKB_KEY_braille_dots_257 0x1002852 /* U+2852 BRAILLE PATTERN DOTS-257 */ +#define XKB_KEY_braille_dots_1257 0x1002853 /* U+2853 BRAILLE PATTERN DOTS-1257 */ +#define XKB_KEY_braille_dots_357 0x1002854 /* U+2854 BRAILLE PATTERN DOTS-357 */ +#define XKB_KEY_braille_dots_1357 0x1002855 /* U+2855 BRAILLE PATTERN DOTS-1357 */ +#define XKB_KEY_braille_dots_2357 0x1002856 /* U+2856 BRAILLE PATTERN DOTS-2357 */ +#define XKB_KEY_braille_dots_12357 0x1002857 /* U+2857 BRAILLE PATTERN DOTS-12357 */ +#define XKB_KEY_braille_dots_457 0x1002858 /* U+2858 BRAILLE PATTERN DOTS-457 */ +#define XKB_KEY_braille_dots_1457 0x1002859 /* U+2859 BRAILLE PATTERN DOTS-1457 */ +#define XKB_KEY_braille_dots_2457 0x100285a /* U+285a BRAILLE PATTERN DOTS-2457 */ +#define XKB_KEY_braille_dots_12457 0x100285b /* U+285b BRAILLE PATTERN DOTS-12457 */ +#define XKB_KEY_braille_dots_3457 0x100285c /* U+285c BRAILLE PATTERN DOTS-3457 */ +#define XKB_KEY_braille_dots_13457 0x100285d /* U+285d BRAILLE PATTERN DOTS-13457 */ +#define XKB_KEY_braille_dots_23457 0x100285e /* U+285e BRAILLE PATTERN DOTS-23457 */ +#define XKB_KEY_braille_dots_123457 0x100285f /* U+285f BRAILLE PATTERN DOTS-123457 */ +#define XKB_KEY_braille_dots_67 0x1002860 /* U+2860 BRAILLE PATTERN DOTS-67 */ +#define XKB_KEY_braille_dots_167 0x1002861 /* U+2861 BRAILLE PATTERN DOTS-167 */ +#define XKB_KEY_braille_dots_267 0x1002862 /* U+2862 BRAILLE PATTERN DOTS-267 */ +#define XKB_KEY_braille_dots_1267 0x1002863 /* U+2863 BRAILLE PATTERN DOTS-1267 */ +#define XKB_KEY_braille_dots_367 0x1002864 /* U+2864 BRAILLE PATTERN DOTS-367 */ +#define XKB_KEY_braille_dots_1367 0x1002865 /* U+2865 BRAILLE PATTERN DOTS-1367 */ +#define XKB_KEY_braille_dots_2367 0x1002866 /* U+2866 BRAILLE PATTERN DOTS-2367 */ +#define XKB_KEY_braille_dots_12367 0x1002867 /* U+2867 BRAILLE PATTERN DOTS-12367 */ +#define XKB_KEY_braille_dots_467 0x1002868 /* U+2868 BRAILLE PATTERN DOTS-467 */ +#define XKB_KEY_braille_dots_1467 0x1002869 /* U+2869 BRAILLE PATTERN DOTS-1467 */ +#define XKB_KEY_braille_dots_2467 0x100286a /* U+286a BRAILLE PATTERN DOTS-2467 */ +#define XKB_KEY_braille_dots_12467 0x100286b /* U+286b BRAILLE PATTERN DOTS-12467 */ +#define XKB_KEY_braille_dots_3467 0x100286c /* U+286c BRAILLE PATTERN DOTS-3467 */ +#define XKB_KEY_braille_dots_13467 0x100286d /* U+286d BRAILLE PATTERN DOTS-13467 */ +#define XKB_KEY_braille_dots_23467 0x100286e /* U+286e BRAILLE PATTERN DOTS-23467 */ +#define XKB_KEY_braille_dots_123467 0x100286f /* U+286f BRAILLE PATTERN DOTS-123467 */ +#define XKB_KEY_braille_dots_567 0x1002870 /* U+2870 BRAILLE PATTERN DOTS-567 */ +#define XKB_KEY_braille_dots_1567 0x1002871 /* U+2871 BRAILLE PATTERN DOTS-1567 */ +#define XKB_KEY_braille_dots_2567 0x1002872 /* U+2872 BRAILLE PATTERN DOTS-2567 */ +#define XKB_KEY_braille_dots_12567 0x1002873 /* U+2873 BRAILLE PATTERN DOTS-12567 */ +#define XKB_KEY_braille_dots_3567 0x1002874 /* U+2874 BRAILLE PATTERN DOTS-3567 */ +#define XKB_KEY_braille_dots_13567 0x1002875 /* U+2875 BRAILLE PATTERN DOTS-13567 */ +#define XKB_KEY_braille_dots_23567 0x1002876 /* U+2876 BRAILLE PATTERN DOTS-23567 */ +#define XKB_KEY_braille_dots_123567 0x1002877 /* U+2877 BRAILLE PATTERN DOTS-123567 */ +#define XKB_KEY_braille_dots_4567 0x1002878 /* U+2878 BRAILLE PATTERN DOTS-4567 */ +#define XKB_KEY_braille_dots_14567 0x1002879 /* U+2879 BRAILLE PATTERN DOTS-14567 */ +#define XKB_KEY_braille_dots_24567 0x100287a /* U+287a BRAILLE PATTERN DOTS-24567 */ +#define XKB_KEY_braille_dots_124567 0x100287b /* U+287b BRAILLE PATTERN DOTS-124567 */ +#define XKB_KEY_braille_dots_34567 0x100287c /* U+287c BRAILLE PATTERN DOTS-34567 */ +#define XKB_KEY_braille_dots_134567 0x100287d /* U+287d BRAILLE PATTERN DOTS-134567 */ +#define XKB_KEY_braille_dots_234567 0x100287e /* U+287e BRAILLE PATTERN DOTS-234567 */ +#define XKB_KEY_braille_dots_1234567 0x100287f /* U+287f BRAILLE PATTERN DOTS-1234567 */ +#define XKB_KEY_braille_dots_8 0x1002880 /* U+2880 BRAILLE PATTERN DOTS-8 */ +#define XKB_KEY_braille_dots_18 0x1002881 /* U+2881 BRAILLE PATTERN DOTS-18 */ +#define XKB_KEY_braille_dots_28 0x1002882 /* U+2882 BRAILLE PATTERN DOTS-28 */ +#define XKB_KEY_braille_dots_128 0x1002883 /* U+2883 BRAILLE PATTERN DOTS-128 */ +#define XKB_KEY_braille_dots_38 0x1002884 /* U+2884 BRAILLE PATTERN DOTS-38 */ +#define XKB_KEY_braille_dots_138 0x1002885 /* U+2885 BRAILLE PATTERN DOTS-138 */ +#define XKB_KEY_braille_dots_238 0x1002886 /* U+2886 BRAILLE PATTERN DOTS-238 */ +#define XKB_KEY_braille_dots_1238 0x1002887 /* U+2887 BRAILLE PATTERN DOTS-1238 */ +#define XKB_KEY_braille_dots_48 0x1002888 /* U+2888 BRAILLE PATTERN DOTS-48 */ +#define XKB_KEY_braille_dots_148 0x1002889 /* U+2889 BRAILLE PATTERN DOTS-148 */ +#define XKB_KEY_braille_dots_248 0x100288a /* U+288a BRAILLE PATTERN DOTS-248 */ +#define XKB_KEY_braille_dots_1248 0x100288b /* U+288b BRAILLE PATTERN DOTS-1248 */ +#define XKB_KEY_braille_dots_348 0x100288c /* U+288c BRAILLE PATTERN DOTS-348 */ +#define XKB_KEY_braille_dots_1348 0x100288d /* U+288d BRAILLE PATTERN DOTS-1348 */ +#define XKB_KEY_braille_dots_2348 0x100288e /* U+288e BRAILLE PATTERN DOTS-2348 */ +#define XKB_KEY_braille_dots_12348 0x100288f /* U+288f BRAILLE PATTERN DOTS-12348 */ +#define XKB_KEY_braille_dots_58 0x1002890 /* U+2890 BRAILLE PATTERN DOTS-58 */ +#define XKB_KEY_braille_dots_158 0x1002891 /* U+2891 BRAILLE PATTERN DOTS-158 */ +#define XKB_KEY_braille_dots_258 0x1002892 /* U+2892 BRAILLE PATTERN DOTS-258 */ +#define XKB_KEY_braille_dots_1258 0x1002893 /* U+2893 BRAILLE PATTERN DOTS-1258 */ +#define XKB_KEY_braille_dots_358 0x1002894 /* U+2894 BRAILLE PATTERN DOTS-358 */ +#define XKB_KEY_braille_dots_1358 0x1002895 /* U+2895 BRAILLE PATTERN DOTS-1358 */ +#define XKB_KEY_braille_dots_2358 0x1002896 /* U+2896 BRAILLE PATTERN DOTS-2358 */ +#define XKB_KEY_braille_dots_12358 0x1002897 /* U+2897 BRAILLE PATTERN DOTS-12358 */ +#define XKB_KEY_braille_dots_458 0x1002898 /* U+2898 BRAILLE PATTERN DOTS-458 */ +#define XKB_KEY_braille_dots_1458 0x1002899 /* U+2899 BRAILLE PATTERN DOTS-1458 */ +#define XKB_KEY_braille_dots_2458 0x100289a /* U+289a BRAILLE PATTERN DOTS-2458 */ +#define XKB_KEY_braille_dots_12458 0x100289b /* U+289b BRAILLE PATTERN DOTS-12458 */ +#define XKB_KEY_braille_dots_3458 0x100289c /* U+289c BRAILLE PATTERN DOTS-3458 */ +#define XKB_KEY_braille_dots_13458 0x100289d /* U+289d BRAILLE PATTERN DOTS-13458 */ +#define XKB_KEY_braille_dots_23458 0x100289e /* U+289e BRAILLE PATTERN DOTS-23458 */ +#define XKB_KEY_braille_dots_123458 0x100289f /* U+289f BRAILLE PATTERN DOTS-123458 */ +#define XKB_KEY_braille_dots_68 0x10028a0 /* U+28a0 BRAILLE PATTERN DOTS-68 */ +#define XKB_KEY_braille_dots_168 0x10028a1 /* U+28a1 BRAILLE PATTERN DOTS-168 */ +#define XKB_KEY_braille_dots_268 0x10028a2 /* U+28a2 BRAILLE PATTERN DOTS-268 */ +#define XKB_KEY_braille_dots_1268 0x10028a3 /* U+28a3 BRAILLE PATTERN DOTS-1268 */ +#define XKB_KEY_braille_dots_368 0x10028a4 /* U+28a4 BRAILLE PATTERN DOTS-368 */ +#define XKB_KEY_braille_dots_1368 0x10028a5 /* U+28a5 BRAILLE PATTERN DOTS-1368 */ +#define XKB_KEY_braille_dots_2368 0x10028a6 /* U+28a6 BRAILLE PATTERN DOTS-2368 */ +#define XKB_KEY_braille_dots_12368 0x10028a7 /* U+28a7 BRAILLE PATTERN DOTS-12368 */ +#define XKB_KEY_braille_dots_468 0x10028a8 /* U+28a8 BRAILLE PATTERN DOTS-468 */ +#define XKB_KEY_braille_dots_1468 0x10028a9 /* U+28a9 BRAILLE PATTERN DOTS-1468 */ +#define XKB_KEY_braille_dots_2468 0x10028aa /* U+28aa BRAILLE PATTERN DOTS-2468 */ +#define XKB_KEY_braille_dots_12468 0x10028ab /* U+28ab BRAILLE PATTERN DOTS-12468 */ +#define XKB_KEY_braille_dots_3468 0x10028ac /* U+28ac BRAILLE PATTERN DOTS-3468 */ +#define XKB_KEY_braille_dots_13468 0x10028ad /* U+28ad BRAILLE PATTERN DOTS-13468 */ +#define XKB_KEY_braille_dots_23468 0x10028ae /* U+28ae BRAILLE PATTERN DOTS-23468 */ +#define XKB_KEY_braille_dots_123468 0x10028af /* U+28af BRAILLE PATTERN DOTS-123468 */ +#define XKB_KEY_braille_dots_568 0x10028b0 /* U+28b0 BRAILLE PATTERN DOTS-568 */ +#define XKB_KEY_braille_dots_1568 0x10028b1 /* U+28b1 BRAILLE PATTERN DOTS-1568 */ +#define XKB_KEY_braille_dots_2568 0x10028b2 /* U+28b2 BRAILLE PATTERN DOTS-2568 */ +#define XKB_KEY_braille_dots_12568 0x10028b3 /* U+28b3 BRAILLE PATTERN DOTS-12568 */ +#define XKB_KEY_braille_dots_3568 0x10028b4 /* U+28b4 BRAILLE PATTERN DOTS-3568 */ +#define XKB_KEY_braille_dots_13568 0x10028b5 /* U+28b5 BRAILLE PATTERN DOTS-13568 */ +#define XKB_KEY_braille_dots_23568 0x10028b6 /* U+28b6 BRAILLE PATTERN DOTS-23568 */ +#define XKB_KEY_braille_dots_123568 0x10028b7 /* U+28b7 BRAILLE PATTERN DOTS-123568 */ +#define XKB_KEY_braille_dots_4568 0x10028b8 /* U+28b8 BRAILLE PATTERN DOTS-4568 */ +#define XKB_KEY_braille_dots_14568 0x10028b9 /* U+28b9 BRAILLE PATTERN DOTS-14568 */ +#define XKB_KEY_braille_dots_24568 0x10028ba /* U+28ba BRAILLE PATTERN DOTS-24568 */ +#define XKB_KEY_braille_dots_124568 0x10028bb /* U+28bb BRAILLE PATTERN DOTS-124568 */ +#define XKB_KEY_braille_dots_34568 0x10028bc /* U+28bc BRAILLE PATTERN DOTS-34568 */ +#define XKB_KEY_braille_dots_134568 0x10028bd /* U+28bd BRAILLE PATTERN DOTS-134568 */ +#define XKB_KEY_braille_dots_234568 0x10028be /* U+28be BRAILLE PATTERN DOTS-234568 */ +#define XKB_KEY_braille_dots_1234568 0x10028bf /* U+28bf BRAILLE PATTERN DOTS-1234568 */ +#define XKB_KEY_braille_dots_78 0x10028c0 /* U+28c0 BRAILLE PATTERN DOTS-78 */ +#define XKB_KEY_braille_dots_178 0x10028c1 /* U+28c1 BRAILLE PATTERN DOTS-178 */ +#define XKB_KEY_braille_dots_278 0x10028c2 /* U+28c2 BRAILLE PATTERN DOTS-278 */ +#define XKB_KEY_braille_dots_1278 0x10028c3 /* U+28c3 BRAILLE PATTERN DOTS-1278 */ +#define XKB_KEY_braille_dots_378 0x10028c4 /* U+28c4 BRAILLE PATTERN DOTS-378 */ +#define XKB_KEY_braille_dots_1378 0x10028c5 /* U+28c5 BRAILLE PATTERN DOTS-1378 */ +#define XKB_KEY_braille_dots_2378 0x10028c6 /* U+28c6 BRAILLE PATTERN DOTS-2378 */ +#define XKB_KEY_braille_dots_12378 0x10028c7 /* U+28c7 BRAILLE PATTERN DOTS-12378 */ +#define XKB_KEY_braille_dots_478 0x10028c8 /* U+28c8 BRAILLE PATTERN DOTS-478 */ +#define XKB_KEY_braille_dots_1478 0x10028c9 /* U+28c9 BRAILLE PATTERN DOTS-1478 */ +#define XKB_KEY_braille_dots_2478 0x10028ca /* U+28ca BRAILLE PATTERN DOTS-2478 */ +#define XKB_KEY_braille_dots_12478 0x10028cb /* U+28cb BRAILLE PATTERN DOTS-12478 */ +#define XKB_KEY_braille_dots_3478 0x10028cc /* U+28cc BRAILLE PATTERN DOTS-3478 */ +#define XKB_KEY_braille_dots_13478 0x10028cd /* U+28cd BRAILLE PATTERN DOTS-13478 */ +#define XKB_KEY_braille_dots_23478 0x10028ce /* U+28ce BRAILLE PATTERN DOTS-23478 */ +#define XKB_KEY_braille_dots_123478 0x10028cf /* U+28cf BRAILLE PATTERN DOTS-123478 */ +#define XKB_KEY_braille_dots_578 0x10028d0 /* U+28d0 BRAILLE PATTERN DOTS-578 */ +#define XKB_KEY_braille_dots_1578 0x10028d1 /* U+28d1 BRAILLE PATTERN DOTS-1578 */ +#define XKB_KEY_braille_dots_2578 0x10028d2 /* U+28d2 BRAILLE PATTERN DOTS-2578 */ +#define XKB_KEY_braille_dots_12578 0x10028d3 /* U+28d3 BRAILLE PATTERN DOTS-12578 */ +#define XKB_KEY_braille_dots_3578 0x10028d4 /* U+28d4 BRAILLE PATTERN DOTS-3578 */ +#define XKB_KEY_braille_dots_13578 0x10028d5 /* U+28d5 BRAILLE PATTERN DOTS-13578 */ +#define XKB_KEY_braille_dots_23578 0x10028d6 /* U+28d6 BRAILLE PATTERN DOTS-23578 */ +#define XKB_KEY_braille_dots_123578 0x10028d7 /* U+28d7 BRAILLE PATTERN DOTS-123578 */ +#define XKB_KEY_braille_dots_4578 0x10028d8 /* U+28d8 BRAILLE PATTERN DOTS-4578 */ +#define XKB_KEY_braille_dots_14578 0x10028d9 /* U+28d9 BRAILLE PATTERN DOTS-14578 */ +#define XKB_KEY_braille_dots_24578 0x10028da /* U+28da BRAILLE PATTERN DOTS-24578 */ +#define XKB_KEY_braille_dots_124578 0x10028db /* U+28db BRAILLE PATTERN DOTS-124578 */ +#define XKB_KEY_braille_dots_34578 0x10028dc /* U+28dc BRAILLE PATTERN DOTS-34578 */ +#define XKB_KEY_braille_dots_134578 0x10028dd /* U+28dd BRAILLE PATTERN DOTS-134578 */ +#define XKB_KEY_braille_dots_234578 0x10028de /* U+28de BRAILLE PATTERN DOTS-234578 */ +#define XKB_KEY_braille_dots_1234578 0x10028df /* U+28df BRAILLE PATTERN DOTS-1234578 */ +#define XKB_KEY_braille_dots_678 0x10028e0 /* U+28e0 BRAILLE PATTERN DOTS-678 */ +#define XKB_KEY_braille_dots_1678 0x10028e1 /* U+28e1 BRAILLE PATTERN DOTS-1678 */ +#define XKB_KEY_braille_dots_2678 0x10028e2 /* U+28e2 BRAILLE PATTERN DOTS-2678 */ +#define XKB_KEY_braille_dots_12678 0x10028e3 /* U+28e3 BRAILLE PATTERN DOTS-12678 */ +#define XKB_KEY_braille_dots_3678 0x10028e4 /* U+28e4 BRAILLE PATTERN DOTS-3678 */ +#define XKB_KEY_braille_dots_13678 0x10028e5 /* U+28e5 BRAILLE PATTERN DOTS-13678 */ +#define XKB_KEY_braille_dots_23678 0x10028e6 /* U+28e6 BRAILLE PATTERN DOTS-23678 */ +#define XKB_KEY_braille_dots_123678 0x10028e7 /* U+28e7 BRAILLE PATTERN DOTS-123678 */ +#define XKB_KEY_braille_dots_4678 0x10028e8 /* U+28e8 BRAILLE PATTERN DOTS-4678 */ +#define XKB_KEY_braille_dots_14678 0x10028e9 /* U+28e9 BRAILLE PATTERN DOTS-14678 */ +#define XKB_KEY_braille_dots_24678 0x10028ea /* U+28ea BRAILLE PATTERN DOTS-24678 */ +#define XKB_KEY_braille_dots_124678 0x10028eb /* U+28eb BRAILLE PATTERN DOTS-124678 */ +#define XKB_KEY_braille_dots_34678 0x10028ec /* U+28ec BRAILLE PATTERN DOTS-34678 */ +#define XKB_KEY_braille_dots_134678 0x10028ed /* U+28ed BRAILLE PATTERN DOTS-134678 */ +#define XKB_KEY_braille_dots_234678 0x10028ee /* U+28ee BRAILLE PATTERN DOTS-234678 */ +#define XKB_KEY_braille_dots_1234678 0x10028ef /* U+28ef BRAILLE PATTERN DOTS-1234678 */ +#define XKB_KEY_braille_dots_5678 0x10028f0 /* U+28f0 BRAILLE PATTERN DOTS-5678 */ +#define XKB_KEY_braille_dots_15678 0x10028f1 /* U+28f1 BRAILLE PATTERN DOTS-15678 */ +#define XKB_KEY_braille_dots_25678 0x10028f2 /* U+28f2 BRAILLE PATTERN DOTS-25678 */ +#define XKB_KEY_braille_dots_125678 0x10028f3 /* U+28f3 BRAILLE PATTERN DOTS-125678 */ +#define XKB_KEY_braille_dots_35678 0x10028f4 /* U+28f4 BRAILLE PATTERN DOTS-35678 */ +#define XKB_KEY_braille_dots_135678 0x10028f5 /* U+28f5 BRAILLE PATTERN DOTS-135678 */ +#define XKB_KEY_braille_dots_235678 0x10028f6 /* U+28f6 BRAILLE PATTERN DOTS-235678 */ +#define XKB_KEY_braille_dots_1235678 0x10028f7 /* U+28f7 BRAILLE PATTERN DOTS-1235678 */ +#define XKB_KEY_braille_dots_45678 0x10028f8 /* U+28f8 BRAILLE PATTERN DOTS-45678 */ +#define XKB_KEY_braille_dots_145678 0x10028f9 /* U+28f9 BRAILLE PATTERN DOTS-145678 */ +#define XKB_KEY_braille_dots_245678 0x10028fa /* U+28fa BRAILLE PATTERN DOTS-245678 */ +#define XKB_KEY_braille_dots_1245678 0x10028fb /* U+28fb BRAILLE PATTERN DOTS-1245678 */ +#define XKB_KEY_braille_dots_345678 0x10028fc /* U+28fc BRAILLE PATTERN DOTS-345678 */ +#define XKB_KEY_braille_dots_1345678 0x10028fd /* U+28fd BRAILLE PATTERN DOTS-1345678 */ +#define XKB_KEY_braille_dots_2345678 0x10028fe /* U+28fe BRAILLE PATTERN DOTS-2345678 */ +#define XKB_KEY_braille_dots_12345678 0x10028ff /* U+28ff BRAILLE PATTERN DOTS-12345678 */ + +/* + * Sinhala (http://unicode.org/charts/PDF/U0D80.pdf) + * http://www.nongnu.org/sinhala/doc/transliteration/sinhala-transliteration_6.html + */ + +#define XKB_KEY_Sinh_ng 0x1000d82 /* U+0D82 SINHALA ANUSVARAYA */ +#define XKB_KEY_Sinh_h2 0x1000d83 /* U+0D83 SINHALA VISARGAYA */ +#define XKB_KEY_Sinh_a 0x1000d85 /* U+0D85 SINHALA AYANNA */ +#define XKB_KEY_Sinh_aa 0x1000d86 /* U+0D86 SINHALA AAYANNA */ +#define XKB_KEY_Sinh_ae 0x1000d87 /* U+0D87 SINHALA AEYANNA */ +#define XKB_KEY_Sinh_aee 0x1000d88 /* U+0D88 SINHALA AEEYANNA */ +#define XKB_KEY_Sinh_i 0x1000d89 /* U+0D89 SINHALA IYANNA */ +#define XKB_KEY_Sinh_ii 0x1000d8a /* U+0D8A SINHALA IIYANNA */ +#define XKB_KEY_Sinh_u 0x1000d8b /* U+0D8B SINHALA UYANNA */ +#define XKB_KEY_Sinh_uu 0x1000d8c /* U+0D8C SINHALA UUYANNA */ +#define XKB_KEY_Sinh_ri 0x1000d8d /* U+0D8D SINHALA IRUYANNA */ +#define XKB_KEY_Sinh_rii 0x1000d8e /* U+0D8E SINHALA IRUUYANNA */ +#define XKB_KEY_Sinh_lu 0x1000d8f /* U+0D8F SINHALA ILUYANNA */ +#define XKB_KEY_Sinh_luu 0x1000d90 /* U+0D90 SINHALA ILUUYANNA */ +#define XKB_KEY_Sinh_e 0x1000d91 /* U+0D91 SINHALA EYANNA */ +#define XKB_KEY_Sinh_ee 0x1000d92 /* U+0D92 SINHALA EEYANNA */ +#define XKB_KEY_Sinh_ai 0x1000d93 /* U+0D93 SINHALA AIYANNA */ +#define XKB_KEY_Sinh_o 0x1000d94 /* U+0D94 SINHALA OYANNA */ +#define XKB_KEY_Sinh_oo 0x1000d95 /* U+0D95 SINHALA OOYANNA */ +#define XKB_KEY_Sinh_au 0x1000d96 /* U+0D96 SINHALA AUYANNA */ +#define XKB_KEY_Sinh_ka 0x1000d9a /* U+0D9A SINHALA KAYANNA */ +#define XKB_KEY_Sinh_kha 0x1000d9b /* U+0D9B SINHALA MAHA. KAYANNA */ +#define XKB_KEY_Sinh_ga 0x1000d9c /* U+0D9C SINHALA GAYANNA */ +#define XKB_KEY_Sinh_gha 0x1000d9d /* U+0D9D SINHALA MAHA. GAYANNA */ +#define XKB_KEY_Sinh_ng2 0x1000d9e /* U+0D9E SINHALA KANTAJA NAASIKYAYA */ +#define XKB_KEY_Sinh_nga 0x1000d9f /* U+0D9F SINHALA SANYAKA GAYANNA */ +#define XKB_KEY_Sinh_ca 0x1000da0 /* U+0DA0 SINHALA CAYANNA */ +#define XKB_KEY_Sinh_cha 0x1000da1 /* U+0DA1 SINHALA MAHA. CAYANNA */ +#define XKB_KEY_Sinh_ja 0x1000da2 /* U+0DA2 SINHALA JAYANNA */ +#define XKB_KEY_Sinh_jha 0x1000da3 /* U+0DA3 SINHALA MAHA. JAYANNA */ +#define XKB_KEY_Sinh_nya 0x1000da4 /* U+0DA4 SINHALA TAALUJA NAASIKYAYA */ +#define XKB_KEY_Sinh_jnya 0x1000da5 /* U+0DA5 SINHALA TAALUJA SANYOOGA NAASIKYAYA */ +#define XKB_KEY_Sinh_nja 0x1000da6 /* U+0DA6 SINHALA SANYAKA JAYANNA */ +#define XKB_KEY_Sinh_tta 0x1000da7 /* U+0DA7 SINHALA TTAYANNA */ +#define XKB_KEY_Sinh_ttha 0x1000da8 /* U+0DA8 SINHALA MAHA. TTAYANNA */ +#define XKB_KEY_Sinh_dda 0x1000da9 /* U+0DA9 SINHALA DDAYANNA */ +#define XKB_KEY_Sinh_ddha 0x1000daa /* U+0DAA SINHALA MAHA. DDAYANNA */ +#define XKB_KEY_Sinh_nna 0x1000dab /* U+0DAB SINHALA MUURDHAJA NAYANNA */ +#define XKB_KEY_Sinh_ndda 0x1000dac /* U+0DAC SINHALA SANYAKA DDAYANNA */ +#define XKB_KEY_Sinh_tha 0x1000dad /* U+0DAD SINHALA TAYANNA */ +#define XKB_KEY_Sinh_thha 0x1000dae /* U+0DAE SINHALA MAHA. TAYANNA */ +#define XKB_KEY_Sinh_dha 0x1000daf /* U+0DAF SINHALA DAYANNA */ +#define XKB_KEY_Sinh_dhha 0x1000db0 /* U+0DB0 SINHALA MAHA. DAYANNA */ +#define XKB_KEY_Sinh_na 0x1000db1 /* U+0DB1 SINHALA DANTAJA NAYANNA */ +#define XKB_KEY_Sinh_ndha 0x1000db3 /* U+0DB3 SINHALA SANYAKA DAYANNA */ +#define XKB_KEY_Sinh_pa 0x1000db4 /* U+0DB4 SINHALA PAYANNA */ +#define XKB_KEY_Sinh_pha 0x1000db5 /* U+0DB5 SINHALA MAHA. PAYANNA */ +#define XKB_KEY_Sinh_ba 0x1000db6 /* U+0DB6 SINHALA BAYANNA */ +#define XKB_KEY_Sinh_bha 0x1000db7 /* U+0DB7 SINHALA MAHA. BAYANNA */ +#define XKB_KEY_Sinh_ma 0x1000db8 /* U+0DB8 SINHALA MAYANNA */ +#define XKB_KEY_Sinh_mba 0x1000db9 /* U+0DB9 SINHALA AMBA BAYANNA */ +#define XKB_KEY_Sinh_ya 0x1000dba /* U+0DBA SINHALA YAYANNA */ +#define XKB_KEY_Sinh_ra 0x1000dbb /* U+0DBB SINHALA RAYANNA */ +#define XKB_KEY_Sinh_la 0x1000dbd /* U+0DBD SINHALA DANTAJA LAYANNA */ +#define XKB_KEY_Sinh_va 0x1000dc0 /* U+0DC0 SINHALA VAYANNA */ +#define XKB_KEY_Sinh_sha 0x1000dc1 /* U+0DC1 SINHALA TAALUJA SAYANNA */ +#define XKB_KEY_Sinh_ssha 0x1000dc2 /* U+0DC2 SINHALA MUURDHAJA SAYANNA */ +#define XKB_KEY_Sinh_sa 0x1000dc3 /* U+0DC3 SINHALA DANTAJA SAYANNA */ +#define XKB_KEY_Sinh_ha 0x1000dc4 /* U+0DC4 SINHALA HAYANNA */ +#define XKB_KEY_Sinh_lla 0x1000dc5 /* U+0DC5 SINHALA MUURDHAJA LAYANNA */ +#define XKB_KEY_Sinh_fa 0x1000dc6 /* U+0DC6 SINHALA FAYANNA */ +#define XKB_KEY_Sinh_al 0x1000dca /* U+0DCA SINHALA AL-LAKUNA */ +#define XKB_KEY_Sinh_aa2 0x1000dcf /* U+0DCF SINHALA AELA-PILLA */ +#define XKB_KEY_Sinh_ae2 0x1000dd0 /* U+0DD0 SINHALA AEDA-PILLA */ +#define XKB_KEY_Sinh_aee2 0x1000dd1 /* U+0DD1 SINHALA DIGA AEDA-PILLA */ +#define XKB_KEY_Sinh_i2 0x1000dd2 /* U+0DD2 SINHALA IS-PILLA */ +#define XKB_KEY_Sinh_ii2 0x1000dd3 /* U+0DD3 SINHALA DIGA IS-PILLA */ +#define XKB_KEY_Sinh_u2 0x1000dd4 /* U+0DD4 SINHALA PAA-PILLA */ +#define XKB_KEY_Sinh_uu2 0x1000dd6 /* U+0DD6 SINHALA DIGA PAA-PILLA */ +#define XKB_KEY_Sinh_ru2 0x1000dd8 /* U+0DD8 SINHALA GAETTA-PILLA */ +#define XKB_KEY_Sinh_e2 0x1000dd9 /* U+0DD9 SINHALA KOMBUVA */ +#define XKB_KEY_Sinh_ee2 0x1000dda /* U+0DDA SINHALA DIGA KOMBUVA */ +#define XKB_KEY_Sinh_ai2 0x1000ddb /* U+0DDB SINHALA KOMBU DEKA */ +#define XKB_KEY_Sinh_o2 0x1000ddc /* U+0DDC SINHALA KOMBUVA HAA AELA-PILLA*/ +#define XKB_KEY_Sinh_oo2 0x1000ddd /* U+0DDD SINHALA KOMBUVA HAA DIGA AELA-PILLA*/ +#define XKB_KEY_Sinh_au2 0x1000dde /* U+0DDE SINHALA KOMBUVA HAA GAYANUKITTA */ +#define XKB_KEY_Sinh_lu2 0x1000ddf /* U+0DDF SINHALA GAYANUKITTA */ +#define XKB_KEY_Sinh_ruu2 0x1000df2 /* U+0DF2 SINHALA DIGA GAETTA-PILLA */ +#define XKB_KEY_Sinh_luu2 0x1000df3 /* U+0DF3 SINHALA DIGA GAYANUKITTA */ +#define XKB_KEY_Sinh_kunddaliya 0x1000df4 /* U+0DF4 SINHALA KUNDDALIYA */ +/* + * XFree86 vendor specific keysyms. + * + * The XFree86 keysym range is 0x10080001 - 0x1008FFFF. + * + * When adding new entries, the xc/lib/XKeysymDB file should also be + * updated to make the new entries visible to Xlib. + */ + +/* + * ModeLock + * + * This one is old, and not really used any more since XKB offers this + * functionality. + */ + +#define XKB_KEY_XF86ModeLock 0x1008FF01 /* Mode Switch Lock */ + +/* + * Note, 0x1008FF07 - 0x1008FF0F are free and should be used for misc new + * keysyms that don't fit into any of the groups below. + * + * 0x1008FF64, 0x1008FF6F, 0x1008FF71, 0x1008FF83 are no longer used, + * and should be used first for new keysyms. + * + * Check in keysymdef.h for generic symbols before adding new XFree86-specific + * symbols here. + * + * X.Org will not be adding to the XF86 set of keysyms, though they have + * been adopted and are considered a "standard" part of X keysym definitions. + * XFree86 never properly commented these keysyms, so we have done our + * best to explain the semantic meaning of these keys. + * + * XFree86 has removed their mail archives of the period, that might have + * shed more light on some of these definitions. Until/unless we resurrect + * these archives, these are from memory and usage. + */ + + +/* Backlight controls. */ +#define XKB_KEY_XF86MonBrightnessUp 0x1008FF02 /* Monitor/panel brightness */ +#define XKB_KEY_XF86MonBrightnessDown 0x1008FF03 /* Monitor/panel brightness */ +#define XKB_KEY_XF86KbdLightOnOff 0x1008FF04 /* Keyboards may be lit */ +#define XKB_KEY_XF86KbdBrightnessUp 0x1008FF05 /* Keyboards may be lit */ +#define XKB_KEY_XF86KbdBrightnessDown 0x1008FF06 /* Keyboards may be lit */ + +/* + * Keys found on some "Internet" keyboards. + */ +#define XKB_KEY_XF86Standby 0x1008FF10 /* System into standby mode */ +#define XKB_KEY_XF86AudioLowerVolume 0x1008FF11 /* Volume control down */ +#define XKB_KEY_XF86AudioMute 0x1008FF12 /* Mute sound from the system */ +#define XKB_KEY_XF86AudioRaiseVolume 0x1008FF13 /* Volume control up */ +#define XKB_KEY_XF86AudioPlay 0x1008FF14 /* Start playing of audio > */ +#define XKB_KEY_XF86AudioStop 0x1008FF15 /* Stop playing audio */ +#define XKB_KEY_XF86AudioPrev 0x1008FF16 /* Previous track */ +#define XKB_KEY_XF86AudioNext 0x1008FF17 /* Next track */ +#define XKB_KEY_XF86HomePage 0x1008FF18 /* Display user's home page */ +#define XKB_KEY_XF86Mail 0x1008FF19 /* Invoke user's mail program */ +#define XKB_KEY_XF86Start 0x1008FF1A /* Start application */ +#define XKB_KEY_XF86Search 0x1008FF1B /* Search */ +#define XKB_KEY_XF86AudioRecord 0x1008FF1C /* Record audio application */ + +/* These are sometimes found on PDA's (e.g. Palm, PocketPC or elsewhere) */ +#define XKB_KEY_XF86Calculator 0x1008FF1D /* Invoke calculator program */ +#define XKB_KEY_XF86Memo 0x1008FF1E /* Invoke Memo taking program */ +#define XKB_KEY_XF86ToDoList 0x1008FF1F /* Invoke To Do List program */ +#define XKB_KEY_XF86Calendar 0x1008FF20 /* Invoke Calendar program */ +#define XKB_KEY_XF86PowerDown 0x1008FF21 /* Deep sleep the system */ +#define XKB_KEY_XF86ContrastAdjust 0x1008FF22 /* Adjust screen contrast */ +#define XKB_KEY_XF86RockerUp 0x1008FF23 /* Rocker switches exist up */ +#define XKB_KEY_XF86RockerDown 0x1008FF24 /* and down */ +#define XKB_KEY_XF86RockerEnter 0x1008FF25 /* and let you press them */ + +/* Some more "Internet" keyboard symbols */ +#define XKB_KEY_XF86Back 0x1008FF26 /* Like back on a browser */ +#define XKB_KEY_XF86Forward 0x1008FF27 /* Like forward on a browser */ +#define XKB_KEY_XF86Stop 0x1008FF28 /* Stop current operation */ +#define XKB_KEY_XF86Refresh 0x1008FF29 /* Refresh the page */ +#define XKB_KEY_XF86PowerOff 0x1008FF2A /* Power off system entirely */ +#define XKB_KEY_XF86WakeUp 0x1008FF2B /* Wake up system from sleep */ +#define XKB_KEY_XF86Eject 0x1008FF2C /* Eject device (e.g. DVD) */ +#define XKB_KEY_XF86ScreenSaver 0x1008FF2D /* Invoke screensaver */ +#define XKB_KEY_XF86WWW 0x1008FF2E /* Invoke web browser */ +#define XKB_KEY_XF86Sleep 0x1008FF2F /* Put system to sleep */ +#define XKB_KEY_XF86Favorites 0x1008FF30 /* Show favorite locations */ +#define XKB_KEY_XF86AudioPause 0x1008FF31 /* Pause audio playing */ +#define XKB_KEY_XF86AudioMedia 0x1008FF32 /* Launch media collection app */ +#define XKB_KEY_XF86MyComputer 0x1008FF33 /* Display "My Computer" window */ +#define XKB_KEY_XF86VendorHome 0x1008FF34 /* Display vendor home web site */ +#define XKB_KEY_XF86LightBulb 0x1008FF35 /* Light bulb keys exist */ +#define XKB_KEY_XF86Shop 0x1008FF36 /* Display shopping web site */ +#define XKB_KEY_XF86History 0x1008FF37 /* Show history of web surfing */ +#define XKB_KEY_XF86OpenURL 0x1008FF38 /* Open selected URL */ +#define XKB_KEY_XF86AddFavorite 0x1008FF39 /* Add URL to favorites list */ +#define XKB_KEY_XF86HotLinks 0x1008FF3A /* Show "hot" links */ +#define XKB_KEY_XF86BrightnessAdjust 0x1008FF3B /* Invoke brightness adj. UI */ +#define XKB_KEY_XF86Finance 0x1008FF3C /* Display financial site */ +#define XKB_KEY_XF86Community 0x1008FF3D /* Display user's community */ +#define XKB_KEY_XF86AudioRewind 0x1008FF3E /* "rewind" audio track */ +#define XKB_KEY_XF86BackForward 0x1008FF3F /* ??? */ +#define XKB_KEY_XF86Launch0 0x1008FF40 /* Launch Application */ +#define XKB_KEY_XF86Launch1 0x1008FF41 /* Launch Application */ +#define XKB_KEY_XF86Launch2 0x1008FF42 /* Launch Application */ +#define XKB_KEY_XF86Launch3 0x1008FF43 /* Launch Application */ +#define XKB_KEY_XF86Launch4 0x1008FF44 /* Launch Application */ +#define XKB_KEY_XF86Launch5 0x1008FF45 /* Launch Application */ +#define XKB_KEY_XF86Launch6 0x1008FF46 /* Launch Application */ +#define XKB_KEY_XF86Launch7 0x1008FF47 /* Launch Application */ +#define XKB_KEY_XF86Launch8 0x1008FF48 /* Launch Application */ +#define XKB_KEY_XF86Launch9 0x1008FF49 /* Launch Application */ +#define XKB_KEY_XF86LaunchA 0x1008FF4A /* Launch Application */ +#define XKB_KEY_XF86LaunchB 0x1008FF4B /* Launch Application */ +#define XKB_KEY_XF86LaunchC 0x1008FF4C /* Launch Application */ +#define XKB_KEY_XF86LaunchD 0x1008FF4D /* Launch Application */ +#define XKB_KEY_XF86LaunchE 0x1008FF4E /* Launch Application */ +#define XKB_KEY_XF86LaunchF 0x1008FF4F /* Launch Application */ + +#define XKB_KEY_XF86ApplicationLeft 0x1008FF50 /* switch to application, left */ +#define XKB_KEY_XF86ApplicationRight 0x1008FF51 /* switch to application, right*/ +#define XKB_KEY_XF86Book 0x1008FF52 /* Launch bookreader */ +#define XKB_KEY_XF86CD 0x1008FF53 /* Launch CD/DVD player */ +#define XKB_KEY_XF86Calculater 0x1008FF54 /* Launch Calculater */ +#define XKB_KEY_XF86Clear 0x1008FF55 /* Clear window, screen */ +#define XKB_KEY_XF86Close 0x1008FF56 /* Close window */ +#define XKB_KEY_XF86Copy 0x1008FF57 /* Copy selection */ +#define XKB_KEY_XF86Cut 0x1008FF58 /* Cut selection */ +#define XKB_KEY_XF86Display 0x1008FF59 /* Output switch key */ +#define XKB_KEY_XF86DOS 0x1008FF5A /* Launch DOS (emulation) */ +#define XKB_KEY_XF86Documents 0x1008FF5B /* Open documents window */ +#define XKB_KEY_XF86Excel 0x1008FF5C /* Launch spread sheet */ +#define XKB_KEY_XF86Explorer 0x1008FF5D /* Launch file explorer */ +#define XKB_KEY_XF86Game 0x1008FF5E /* Launch game */ +#define XKB_KEY_XF86Go 0x1008FF5F /* Go to URL */ +#define XKB_KEY_XF86iTouch 0x1008FF60 /* Logitch iTouch- don't use */ +#define XKB_KEY_XF86LogOff 0x1008FF61 /* Log off system */ +#define XKB_KEY_XF86Market 0x1008FF62 /* ?? */ +#define XKB_KEY_XF86Meeting 0x1008FF63 /* enter meeting in calendar */ +#define XKB_KEY_XF86MenuKB 0x1008FF65 /* distingush keyboard from PB */ +#define XKB_KEY_XF86MenuPB 0x1008FF66 /* distinuish PB from keyboard */ +#define XKB_KEY_XF86MySites 0x1008FF67 /* Favourites */ +#define XKB_KEY_XF86New 0x1008FF68 /* New (folder, document... */ +#define XKB_KEY_XF86News 0x1008FF69 /* News */ +#define XKB_KEY_XF86OfficeHome 0x1008FF6A /* Office home (old Staroffice)*/ +#define XKB_KEY_XF86Open 0x1008FF6B /* Open */ +#define XKB_KEY_XF86Option 0x1008FF6C /* ?? */ +#define XKB_KEY_XF86Paste 0x1008FF6D /* Paste */ +#define XKB_KEY_XF86Phone 0x1008FF6E /* Launch phone; dial number */ +#define XKB_KEY_XF86Q 0x1008FF70 /* Compaq's Q - don't use */ +#define XKB_KEY_XF86Reply 0x1008FF72 /* Reply e.g., mail */ +#define XKB_KEY_XF86Reload 0x1008FF73 /* Reload web page, file, etc. */ +#define XKB_KEY_XF86RotateWindows 0x1008FF74 /* Rotate windows e.g. xrandr */ +#define XKB_KEY_XF86RotationPB 0x1008FF75 /* don't use */ +#define XKB_KEY_XF86RotationKB 0x1008FF76 /* don't use */ +#define XKB_KEY_XF86Save 0x1008FF77 /* Save (file, document, state */ +#define XKB_KEY_XF86ScrollUp 0x1008FF78 /* Scroll window/contents up */ +#define XKB_KEY_XF86ScrollDown 0x1008FF79 /* Scrool window/contentd down */ +#define XKB_KEY_XF86ScrollClick 0x1008FF7A /* Use XKB mousekeys instead */ +#define XKB_KEY_XF86Send 0x1008FF7B /* Send mail, file, object */ +#define XKB_KEY_XF86Spell 0x1008FF7C /* Spell checker */ +#define XKB_KEY_XF86SplitScreen 0x1008FF7D /* Split window or screen */ +#define XKB_KEY_XF86Support 0x1008FF7E /* Get support (??) */ +#define XKB_KEY_XF86TaskPane 0x1008FF7F /* Show tasks */ +#define XKB_KEY_XF86Terminal 0x1008FF80 /* Launch terminal emulator */ +#define XKB_KEY_XF86Tools 0x1008FF81 /* toolbox of desktop/app. */ +#define XKB_KEY_XF86Travel 0x1008FF82 /* ?? */ +#define XKB_KEY_XF86UserPB 0x1008FF84 /* ?? */ +#define XKB_KEY_XF86User1KB 0x1008FF85 /* ?? */ +#define XKB_KEY_XF86User2KB 0x1008FF86 /* ?? */ +#define XKB_KEY_XF86Video 0x1008FF87 /* Launch video player */ +#define XKB_KEY_XF86WheelButton 0x1008FF88 /* button from a mouse wheel */ +#define XKB_KEY_XF86Word 0x1008FF89 /* Launch word processor */ +#define XKB_KEY_XF86Xfer 0x1008FF8A +#define XKB_KEY_XF86ZoomIn 0x1008FF8B /* zoom in view, map, etc. */ +#define XKB_KEY_XF86ZoomOut 0x1008FF8C /* zoom out view, map, etc. */ + +#define XKB_KEY_XF86Away 0x1008FF8D /* mark yourself as away */ +#define XKB_KEY_XF86Messenger 0x1008FF8E /* as in instant messaging */ +#define XKB_KEY_XF86WebCam 0x1008FF8F /* Launch web camera app. */ +#define XKB_KEY_XF86MailForward 0x1008FF90 /* Forward in mail */ +#define XKB_KEY_XF86Pictures 0x1008FF91 /* Show pictures */ +#define XKB_KEY_XF86Music 0x1008FF92 /* Launch music application */ + +#define XKB_KEY_XF86Battery 0x1008FF93 /* Display battery information */ +#define XKB_KEY_XF86Bluetooth 0x1008FF94 /* Enable/disable Bluetooth */ +#define XKB_KEY_XF86WLAN 0x1008FF95 /* Enable/disable WLAN */ +#define XKB_KEY_XF86UWB 0x1008FF96 /* Enable/disable UWB */ + +#define XKB_KEY_XF86AudioForward 0x1008FF97 /* fast-forward audio track */ +#define XKB_KEY_XF86AudioRepeat 0x1008FF98 /* toggle repeat mode */ +#define XKB_KEY_XF86AudioRandomPlay 0x1008FF99 /* toggle shuffle mode */ +#define XKB_KEY_XF86Subtitle 0x1008FF9A /* cycle through subtitle */ +#define XKB_KEY_XF86AudioCycleTrack 0x1008FF9B /* cycle through audio tracks */ +#define XKB_KEY_XF86CycleAngle 0x1008FF9C /* cycle through angles */ +#define XKB_KEY_XF86FrameBack 0x1008FF9D /* video: go one frame back */ +#define XKB_KEY_XF86FrameForward 0x1008FF9E /* video: go one frame forward */ +#define XKB_KEY_XF86Time 0x1008FF9F /* display, or shows an entry for time seeking */ +#define XKB_KEY_XF86Select 0x1008FFA0 /* Select button on joypads and remotes */ +#define XKB_KEY_XF86View 0x1008FFA1 /* Show a view options/properties */ +#define XKB_KEY_XF86TopMenu 0x1008FFA2 /* Go to a top-level menu in a video */ + +#define XKB_KEY_XF86Red 0x1008FFA3 /* Red button */ +#define XKB_KEY_XF86Green 0x1008FFA4 /* Green button */ +#define XKB_KEY_XF86Yellow 0x1008FFA5 /* Yellow button */ +#define XKB_KEY_XF86Blue 0x1008FFA6 /* Blue button */ + +#define XKB_KEY_XF86Suspend 0x1008FFA7 /* Sleep to RAM */ +#define XKB_KEY_XF86Hibernate 0x1008FFA8 /* Sleep to disk */ +#define XKB_KEY_XF86TouchpadToggle 0x1008FFA9 /* Toggle between touchpad/trackstick */ +#define XKB_KEY_XF86TouchpadOn 0x1008FFB0 /* The touchpad got switched on */ +#define XKB_KEY_XF86TouchpadOff 0x1008FFB1 /* The touchpad got switched off */ + +#define XKB_KEY_XF86AudioMicMute 0x1008FFB2 /* Mute the Mic from the system */ + +/* Keys for special action keys (hot keys) */ +/* Virtual terminals on some operating systems */ +#define XKB_KEY_XF86Switch_VT_1 0x1008FE01 +#define XKB_KEY_XF86Switch_VT_2 0x1008FE02 +#define XKB_KEY_XF86Switch_VT_3 0x1008FE03 +#define XKB_KEY_XF86Switch_VT_4 0x1008FE04 +#define XKB_KEY_XF86Switch_VT_5 0x1008FE05 +#define XKB_KEY_XF86Switch_VT_6 0x1008FE06 +#define XKB_KEY_XF86Switch_VT_7 0x1008FE07 +#define XKB_KEY_XF86Switch_VT_8 0x1008FE08 +#define XKB_KEY_XF86Switch_VT_9 0x1008FE09 +#define XKB_KEY_XF86Switch_VT_10 0x1008FE0A +#define XKB_KEY_XF86Switch_VT_11 0x1008FE0B +#define XKB_KEY_XF86Switch_VT_12 0x1008FE0C + +#define XKB_KEY_XF86Ungrab 0x1008FE20 /* force ungrab */ +#define XKB_KEY_XF86ClearGrab 0x1008FE21 /* kill application with grab */ +#define XKB_KEY_XF86Next_VMode 0x1008FE22 /* next video mode available */ +#define XKB_KEY_XF86Prev_VMode 0x1008FE23 /* prev. video mode available */ +#define XKB_KEY_XF86LogWindowTree 0x1008FE24 /* print window tree to log */ +#define XKB_KEY_XF86LogGrabInfo 0x1008FE25 /* print all active grabs to log */ +/* + * Copyright (c) 1991, Oracle and/or its affiliates. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ +/************************************************************ + +Copyright 1991, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + +***********************************************************/ + +/* + * Floating Accent + */ + +#define XKB_KEY_SunFA_Grave 0x1005FF00 +#define XKB_KEY_SunFA_Circum 0x1005FF01 +#define XKB_KEY_SunFA_Tilde 0x1005FF02 +#define XKB_KEY_SunFA_Acute 0x1005FF03 +#define XKB_KEY_SunFA_Diaeresis 0x1005FF04 +#define XKB_KEY_SunFA_Cedilla 0x1005FF05 + +/* + * Miscellaneous Functions + */ + +#define XKB_KEY_SunF36 0x1005FF10 /* Labeled F11 */ +#define XKB_KEY_SunF37 0x1005FF11 /* Labeled F12 */ + +#define XKB_KEY_SunSys_Req 0x1005FF60 +#define XKB_KEY_SunPrint_Screen 0x0000FF61 /* Same as XK_Print */ + +/* + * International & Multi-Key Character Composition + */ + +#define XKB_KEY_SunCompose 0x0000FF20 /* Same as XK_Multi_key */ +#define XKB_KEY_SunAltGraph 0x0000FF7E /* Same as XK_Mode_switch */ + +/* + * Cursor Control + */ + +#define XKB_KEY_SunPageUp 0x0000FF55 /* Same as XK_Prior */ +#define XKB_KEY_SunPageDown 0x0000FF56 /* Same as XK_Next */ + +/* + * Open Look Functions + */ + +#define XKB_KEY_SunUndo 0x0000FF65 /* Same as XK_Undo */ +#define XKB_KEY_SunAgain 0x0000FF66 /* Same as XK_Redo */ +#define XKB_KEY_SunFind 0x0000FF68 /* Same as XK_Find */ +#define XKB_KEY_SunStop 0x0000FF69 /* Same as XK_Cancel */ +#define XKB_KEY_SunProps 0x1005FF70 +#define XKB_KEY_SunFront 0x1005FF71 +#define XKB_KEY_SunCopy 0x1005FF72 +#define XKB_KEY_SunOpen 0x1005FF73 +#define XKB_KEY_SunPaste 0x1005FF74 +#define XKB_KEY_SunCut 0x1005FF75 + +#define XKB_KEY_SunPowerSwitch 0x1005FF76 +#define XKB_KEY_SunAudioLowerVolume 0x1005FF77 +#define XKB_KEY_SunAudioMute 0x1005FF78 +#define XKB_KEY_SunAudioRaiseVolume 0x1005FF79 +#define XKB_KEY_SunVideoDegauss 0x1005FF7A +#define XKB_KEY_SunVideoLowerBrightness 0x1005FF7B +#define XKB_KEY_SunVideoRaiseBrightness 0x1005FF7C +#define XKB_KEY_SunPowerSwitchShift 0x1005FF7D +/*********************************************************** + +Copyright 1988, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + + +Copyright 1988 by Digital Equipment Corporation, Maynard, Massachusetts. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +******************************************************************/ + +/* + * DEC private keysyms + * (29th bit set) + */ + +/* two-key compose sequence initiators, chosen to map to Latin1 characters */ + +#define XKB_KEY_Dring_accent 0x1000FEB0 +#define XKB_KEY_Dcircumflex_accent 0x1000FE5E +#define XKB_KEY_Dcedilla_accent 0x1000FE2C +#define XKB_KEY_Dacute_accent 0x1000FE27 +#define XKB_KEY_Dgrave_accent 0x1000FE60 +#define XKB_KEY_Dtilde 0x1000FE7E +#define XKB_KEY_Ddiaeresis 0x1000FE22 + +/* special keysym for LK2** "Remove" key on editing keypad */ + +#define XKB_KEY_DRemove 0x1000FF00 /* Remove */ +/* + +Copyright 1987, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from The Open Group. + +Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts, + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Hewlett Packard +or Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +HEWLETT-PACKARD MAKES NO WARRANTY OF ANY KIND WITH REGARD +TO THIS SOFWARE, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. Hewlett-Packard shall not be liable for errors +contained herein or direct, indirect, special, incidental or +consequential damages in connection with the furnishing, +performance, or use of this material. + +*/ + + + +#define XKB_KEY_hpClearLine 0x1000FF6F +#define XKB_KEY_hpInsertLine 0x1000FF70 +#define XKB_KEY_hpDeleteLine 0x1000FF71 +#define XKB_KEY_hpInsertChar 0x1000FF72 +#define XKB_KEY_hpDeleteChar 0x1000FF73 +#define XKB_KEY_hpBackTab 0x1000FF74 +#define XKB_KEY_hpKP_BackTab 0x1000FF75 +#define XKB_KEY_hpModelock1 0x1000FF48 +#define XKB_KEY_hpModelock2 0x1000FF49 +#define XKB_KEY_hpReset 0x1000FF6C +#define XKB_KEY_hpSystem 0x1000FF6D +#define XKB_KEY_hpUser 0x1000FF6E +#define XKB_KEY_hpmute_acute 0x100000A8 +#define XKB_KEY_hpmute_grave 0x100000A9 +#define XKB_KEY_hpmute_asciicircum 0x100000AA +#define XKB_KEY_hpmute_diaeresis 0x100000AB +#define XKB_KEY_hpmute_asciitilde 0x100000AC +#define XKB_KEY_hplira 0x100000AF +#define XKB_KEY_hpguilder 0x100000BE +#define XKB_KEY_hpYdiaeresis 0x100000EE +#define XKB_KEY_hpIO 0x100000EE +#define XKB_KEY_hplongminus 0x100000F6 +#define XKB_KEY_hpblock 0x100000FC + + + +#define XKB_KEY_osfCopy 0x1004FF02 +#define XKB_KEY_osfCut 0x1004FF03 +#define XKB_KEY_osfPaste 0x1004FF04 +#define XKB_KEY_osfBackTab 0x1004FF07 +#define XKB_KEY_osfBackSpace 0x1004FF08 +#define XKB_KEY_osfClear 0x1004FF0B +#define XKB_KEY_osfEscape 0x1004FF1B +#define XKB_KEY_osfAddMode 0x1004FF31 +#define XKB_KEY_osfPrimaryPaste 0x1004FF32 +#define XKB_KEY_osfQuickPaste 0x1004FF33 +#define XKB_KEY_osfPageLeft 0x1004FF40 +#define XKB_KEY_osfPageUp 0x1004FF41 +#define XKB_KEY_osfPageDown 0x1004FF42 +#define XKB_KEY_osfPageRight 0x1004FF43 +#define XKB_KEY_osfActivate 0x1004FF44 +#define XKB_KEY_osfMenuBar 0x1004FF45 +#define XKB_KEY_osfLeft 0x1004FF51 +#define XKB_KEY_osfUp 0x1004FF52 +#define XKB_KEY_osfRight 0x1004FF53 +#define XKB_KEY_osfDown 0x1004FF54 +#define XKB_KEY_osfEndLine 0x1004FF57 +#define XKB_KEY_osfBeginLine 0x1004FF58 +#define XKB_KEY_osfEndData 0x1004FF59 +#define XKB_KEY_osfBeginData 0x1004FF5A +#define XKB_KEY_osfPrevMenu 0x1004FF5B +#define XKB_KEY_osfNextMenu 0x1004FF5C +#define XKB_KEY_osfPrevField 0x1004FF5D +#define XKB_KEY_osfNextField 0x1004FF5E +#define XKB_KEY_osfSelect 0x1004FF60 +#define XKB_KEY_osfInsert 0x1004FF63 +#define XKB_KEY_osfUndo 0x1004FF65 +#define XKB_KEY_osfMenu 0x1004FF67 +#define XKB_KEY_osfCancel 0x1004FF69 +#define XKB_KEY_osfHelp 0x1004FF6A +#define XKB_KEY_osfSelectAll 0x1004FF71 +#define XKB_KEY_osfDeselectAll 0x1004FF72 +#define XKB_KEY_osfReselect 0x1004FF73 +#define XKB_KEY_osfExtend 0x1004FF74 +#define XKB_KEY_osfRestore 0x1004FF78 +#define XKB_KEY_osfDelete 0x1004FFFF + + + +/************************************************************** + * The use of the following macros is deprecated. + * They are listed below only for backwards compatibility. + */ +#define XKB_KEY_Reset 0x1000FF6C +#define XKB_KEY_System 0x1000FF6D +#define XKB_KEY_User 0x1000FF6E +#define XKB_KEY_ClearLine 0x1000FF6F +#define XKB_KEY_InsertLine 0x1000FF70 +#define XKB_KEY_DeleteLine 0x1000FF71 +#define XKB_KEY_InsertChar 0x1000FF72 +#define XKB_KEY_DeleteChar 0x1000FF73 +#define XKB_KEY_BackTab 0x1000FF74 +#define XKB_KEY_KP_BackTab 0x1000FF75 +#define XKB_KEY_Ext16bit_L 0x1000FF76 +#define XKB_KEY_Ext16bit_R 0x1000FF77 +#define XKB_KEY_mute_acute 0x100000a8 +#define XKB_KEY_mute_grave 0x100000a9 +#define XKB_KEY_mute_asciicircum 0x100000aa +#define XKB_KEY_mute_diaeresis 0x100000ab +#define XKB_KEY_mute_asciitilde 0x100000ac +#define XKB_KEY_lira 0x100000af +#define XKB_KEY_guilder 0x100000be +#define XKB_KEY_IO 0x100000ee +#define XKB_KEY_longminus 0x100000f6 +#define XKB_KEY_block 0x100000fc + + + +#endif diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-names.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-names.h new file mode 100644 index 000000000..ecb551ff1 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-names.h @@ -0,0 +1,45 @@ +/* + * Copyright © 2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Author: Daniel Stone + */ + +#ifndef _XKBCOMMON_NAMES_H +#define _XKBCOMMON_NAMES_H + +/** + * @file + * @brief Predefined names for common modifiers and LEDs. + */ + +#define XKB_MOD_NAME_SHIFT "Shift" +#define XKB_MOD_NAME_CAPS "Lock" +#define XKB_MOD_NAME_CTRL "Control" +#define XKB_MOD_NAME_ALT "Mod1" +#define XKB_MOD_NAME_NUM "Mod2" +#define XKB_MOD_NAME_LOGO "Mod4" + +#define XKB_LED_NAME_CAPS "Caps Lock" +#define XKB_LED_NAME_NUM "Num Lock" +#define XKB_LED_NAME_SCROLL "Scroll Lock" + +#endif diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-x11.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-x11.h new file mode 100644 index 000000000..015831568 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-x11.h @@ -0,0 +1,244 @@ +/* + * Copyright © 2013 Ran Benita + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#ifndef _XKBCOMMON_X11_H +#define _XKBCOMMON_X11_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @file + * libxkbcommon-x11 API - Additional X11 support for xkbcommon. + */ + +/** + * @defgroup x11 X11 support + * Additional X11 support for xkbcommon. + * @since 0.4.0 + * + * @{ + */ + +/** + * @page x11-overview Overview + * @parblock + * + * The xkbcommon-x11 module provides a means for creating an xkb_keymap + * corresponding to the currently active keymap on the X server. To do + * so, it queries the XKB X11 extension using the xcb-xkb library. It + * can be used as a replacement for Xlib's keyboard handling. + * + * Following is an example workflow using xkbcommon-x11. A complete + * example may be found in the test/interactive-x11.c file in the + * xkbcommon source repository. On startup: + * + * 1. Connect to the X server using xcb_connect(). + * 2. Setup the XKB X11 extension. You can do this either by using the + * xcb_xkb_use_extension() request directly, or by using the + * xkb_x11_setup_xkb_extension() helper function. + * + * The XKB extension supports using separate keymaps and states for + * different keyboard devices. The devices are identified by an integer + * device ID and are managed by another X11 extension, XInput (or its + * successor, XInput2). The original X11 protocol only had one keyboard + * device, called the "core keyboard", which is still supported as a + * "virtual device". + * + * 3. We will use the core keyboard as an example. To get its device ID, + * use either the xcb_xkb_get_device_info() request directly, or the + * xkb_x11_get_core_keyboard_device_id() helper function. + * 4. Create an initial xkb_keymap for this device, using the + * xkb_x11_keymap_new_from_device() function. + * 5. Create an initial xkb_state for this device, using the + * xkb_x11_state_new_from_device() function. + * + * @note At this point, you may consider setting various XKB controls and + * XKB per-client flags. For example, enabling detectable autorepeat: \n + * http://www.x.org/releases/current/doc/kbproto/xkbproto.html#Detectable_Autorepeat + * + * Next, you need to react to state changes (e.g. a modifier was pressed, + * the layout was changed) and to keymap changes (e.g. a tool like xkbcomp, + * setxkbmap or xmodmap was used): + * + * 6. Select to listen to at least the following XKB events: + * NewKeyboardNotify, MapNotify, StateNotify; using the + * xcb_xkb_select_events_aux() request. + * 7. When NewKeyboardNotify or MapNotify are received, recreate the + * xkb_keymap and xkb_state as described above. + * 8. When StateNotify is received, update the xkb_state accordingly + * using the xkb_state_update_mask() function. + * + * @note It is also possible to use the KeyPress/KeyRelease @p state + * field to find the effective modifier and layout state, instead of + * using XkbStateNotify: \n + * http://www.x.org/releases/current/doc/kbproto/xkbproto.html#Computing_A_State_Field_from_an_XKB_State + * \n However, XkbStateNotify is more accurate. + * + * @note There is no need to call xkb_state_update_key(); the state is + * already synchronized. + * + * Finally, when a key event is received, you can use ordinary xkbcommon + * functions, like xkb_state_key_get_one_sym() and xkb_state_key_get_utf8(), + * as you normally would. + * + * @endparblock + */ + +/** + * The minimal compatible major version of the XKB X11 extension which + * this library can use. + */ +#define XKB_X11_MIN_MAJOR_XKB_VERSION 1 +/** + * The minimal compatible minor version of the XKB X11 extension which + * this library can use (for the minimal major version). + */ +#define XKB_X11_MIN_MINOR_XKB_VERSION 0 + +/** Flags for the xkb_x11_setup_xkb_extension() function. */ +enum xkb_x11_setup_xkb_extension_flags { + /** Do not apply any flags. */ + XKB_X11_SETUP_XKB_EXTENSION_NO_FLAGS = 0 +}; + +/** + * Setup the XKB X11 extension for this X client. + * + * The xkbcommon-x11 library uses various XKB requests. Before doing so, + * an X client must notify the server that it will be using the extension. + * This function (or an XCB equivalent) must be called before any other + * function in this library is used. + * + * Some X servers may not support or disable the XKB extension. If you + * want to support such servers, you need to use a different fallback. + * + * You may call this function several times; it is idempotent. + * + * @param connection + * An XCB connection to the X server. + * @param major_xkb_version + * See @p minor_xkb_version. + * @param minor_xkb_version + * The XKB extension version to request. To operate correctly, you + * must have (major_xkb_version, minor_xkb_version) >= + * (XKB_X11_MIN_MAJOR_XKB_VERSION, XKB_X11_MIN_MINOR_XKB_VERSION), + * though this is not enforced. + * @param flags + * Optional flags, or 0. + * @param[out] major_xkb_version_out + * See @p minor_xkb_version_out. + * @param[out] minor_xkb_version_out + * Backfilled with the compatible XKB extension version numbers picked + * by the server. Can be NULL. + * @param[out] base_event_out + * Backfilled with the XKB base (also known as first) event code, needed + * to distinguish XKB events. Can be NULL. + * @param[out] base_error_out + * Backfilled with the XKB base (also known as first) error code, needed + * to distinguish XKB errors. Can be NULL. + * + * @returns 1 on success, or 0 on failure. + */ +int +xkb_x11_setup_xkb_extension(xcb_connection_t *connection, + uint16_t major_xkb_version, + uint16_t minor_xkb_version, + enum xkb_x11_setup_xkb_extension_flags flags, + uint16_t *major_xkb_version_out, + uint16_t *minor_xkb_version_out, + uint8_t *base_event_out, + uint8_t *base_error_out); + +/** + * Get the keyboard device ID of the core X11 keyboard. + * + * @param connection An XCB connection to the X server. + * + * @returns A device ID which may be used with other xkb_x11_* functions, + * or -1 on failure. + */ +int32_t +xkb_x11_get_core_keyboard_device_id(xcb_connection_t *connection); + +/** + * Create a keymap from an X11 keyboard device. + * + * This function queries the X server with various requests, fetches the + * details of the active keymap on a keyboard device, and creates an + * xkb_keymap from these details. + * + * @param context + * The context in which to create the keymap. + * @param connection + * An XCB connection to the X server. + * @param device_id + * An XInput 1 device ID (in the range 0-255) with input class KEY. + * Passing values outside of this range is an error. + * @param flags + * Optional flags for the keymap, or 0. + * + * @returns A keymap retrieved from the X server, or NULL on failure. + * + * @memberof xkb_keymap + */ +struct xkb_keymap * +xkb_x11_keymap_new_from_device(struct xkb_context *context, + xcb_connection_t *connection, + int32_t device_id, + enum xkb_keymap_compile_flags flags); + +/** + * Create a new keyboard state object from an X11 keyboard device. + * + * This function is the same as xkb_state_new(), only pre-initialized + * with the state of the device at the time this function is called. + * + * @param keymap + * The keymap for which to create the state. + * @param connection + * An XCB connection to the X server. + * @param device_id + * An XInput 1 device ID (in the range 0-255) with input class KEY. + * Passing values outside of this range is an error. + * + * @returns A new keyboard state object, or NULL on failure. + * + * @memberof xkb_state + */ +struct xkb_state * +xkb_x11_state_new_from_device(struct xkb_keymap *keymap, + xcb_connection_t *connection, + int32_t device_id); + +/** @} */ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* _XKBCOMMON_X11_H */ diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon.h b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon.h new file mode 100644 index 000000000..f0c92028f --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon.h @@ -0,0 +1,1723 @@ +/* + * Copyright 1985, 1987, 1990, 1998 The Open Group + * Copyright 2008 Dan Nicholson + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the names of the authors or their + * institutions shall not be used in advertising or otherwise to promote the + * sale, use or other dealings in this Software without prior written + * authorization from the authors. + */ + +/************************************************************ + * Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of Silicon Graphics not be + * used in advertising or publicity pertaining to distribution + * of the software without specific prior written permission. + * Silicon Graphics makes no representation about the suitability + * of this software for any purpose. It is provided "as is" + * without any express or implied warranty. + * + * SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS + * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON + * GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE + * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH + * THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + ********************************************************/ + +/* + * Copyright © 2009-2012 Daniel Stone + * Copyright © 2012 Intel Corporation + * Copyright © 2012 Ran Benita + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Author: Daniel Stone + */ + +#ifndef _XKBCOMMON_H_ +#define _XKBCOMMON_H_ + +#include +#include +#include + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @file + * Main libxkbcommon API. + */ + +/** + * @struct xkb_context + * Opaque top level library context object. + * + * The context contains various general library data and state, like + * logging level and include paths. + * + * Objects are created in a specific context, and multiple contexts may + * coexist simultaneously. Objects from different contexts are completely + * separated and do not share any memory or state. + */ +struct xkb_context; + +/** + * @struct xkb_keymap + * Opaque compiled keymap object. + * + * The keymap object holds all of the static keyboard information obtained + * from compiling XKB files. + * + * A keymap is immutable after it is created (besides reference counts, etc.); + * if you need to change it, you must create a new one. + */ +struct xkb_keymap; + +/** + * @struct xkb_state + * Opaque keyboard state object. + * + * State objects contain the active state of a keyboard (or keyboards), such + * as the currently effective layout and the active modifiers. It acts as a + * simple state machine, wherein key presses and releases are the input, and + * key symbols (keysyms) are the output. + */ +struct xkb_state; + +/** + * A number used to represent a physical key on a keyboard. + * + * A standard PC-compatible keyboard might have 102 keys. An appropriate + * keymap would assign each of them a keycode, by which the user should + * refer to the key throughout the library. + * + * Historically, the X11 protocol, and consequentially the XKB protocol, + * assign only 8 bits for keycodes. This limits the number of different + * keys that can be used simultaneously in a single keymap to 256 + * (disregarding other limitations). This library does not share this limit; + * keycodes beyond 255 ('extended keycodes') are not treated specially. + * Keymaps and applications which are compatible with X11 should not use + * these keycodes. + * + * The values of specific keycodes are determined by the keymap and the + * underlying input system. For example, with an X11-compatible keymap + * and Linux evdev scan codes (see linux/input.h), a fixed offset is used: + * + * @code + * xkb_keycode_t keycode_A = KEY_A + 8; + * @endcode + * + * @sa xkb_keycode_is_legal_ext() xkb_keycode_is_legal_x11() + */ +typedef uint32_t xkb_keycode_t; + +/** + * A number used to represent the symbols generated from a key on a keyboard. + * + * A key, represented by a keycode, may generate different symbols according + * to keyboard state. For example, on a QWERTY keyboard, pressing the key + * labled \ generates the symbol 'a'. If the Shift key is held, it + * generates the symbol 'A'. If a different layout is used, say Greek, + * it generates the symbol 'α'. And so on. + * + * Each such symbol is represented by a keysym. Note that keysyms are + * somewhat more general, in that they can also represent some "function", + * such as "Left" or "Right" for the arrow keys. For more information, + * see: + * http://www.x.org/releases/X11R7.7/doc/xproto/x11protocol.html#keysym_encoding + * + * Specifically named keysyms can be found in the + * xkbcommon/xkbcommon-keysyms.h header file. Their name does not include + * the XKB_KEY_ prefix. + * + * Besides those, any Unicode/ISO 10646 character in the range U0100 to + * U10FFFF can be represented by a keysym value in the range 0x01000100 to + * 0x0110FFFF. The name of Unicode keysyms is "U", e.g. "UA1B2". + * + * The name of other unnamed keysyms is the hexadecimal representation of + * their value, e.g. "0xabcd1234". + * + * Keysym names are case-sensitive. + */ +typedef uint32_t xkb_keysym_t; + +/** + * Index of a keyboard layout. + * + * The layout index is a state component which detemines which keyboard + * layout is active. These may be different alphabets, different key + * arrangements, etc. + * + * Layout indices are consecutive. The first layout has index 0. + * + * Each layout is not required to have a name, and the names are not + * guaranteed to be unique (though they are usually provided and unique). + * Therefore, it is not safe to use the name as a unique identifier for a + * layout. Layout names are case-sensitive. + * + * Layouts are also called "groups" by XKB. + * + * @sa xkb_keymap_num_layouts() xkb_keymap_num_layouts_for_key() + */ +typedef uint32_t xkb_layout_index_t; +/** A mask of layout indices. */ +typedef uint32_t xkb_layout_mask_t; + +/** + * Index of a shift level. + * + * Any key, in any layout, can have several shift levels. Each + * shift level can assign different keysyms to the key. The shift level + * to use is chosen according to the current keyboard state; for example, + * if no keys are pressed, the first level may be used; if the Left Shift + * key is pressed, the second; if Num Lock is pressed, the third; and + * many such combinations are possible (see xkb_mod_index_t). + * + * Level indices are consecutive. The first level has index 0. + */ +typedef uint32_t xkb_level_index_t; + +/** + * Index of a modifier. + * + * A @e modifier is a state component which changes the way keys are + * interpreted. A keymap defines a set of modifiers, such as Alt, Shift, + * Num Lock or Meta, and specifies which keys may @e activate which + * modifiers (in a many-to-many relationship, i.e. a key can activate + * several modifiers, and a modifier may be activated by several keys. + * Different keymaps do this differently). + * + * When retrieving the keysyms for a key, the active modifier set is + * consulted; this detemines the correct shift level to use within the + * currently active layout (see xkb_level_index_t). + * + * Modifier indices are consecutive. The first modifier has index 0. + * + * Each modifier must have a name, and the names are unique. Therefore, it + * is safe to use the name as a unique identifier for a modifier. The names + * of some common modifiers are provided in the xkbcommon/xkbcommon-names.h + * header file. Modifier names are case-sensitive. + * + * @sa xkb_keymap_num_mods() + */ +typedef uint32_t xkb_mod_index_t; +/** A mask of modifier indices. */ +typedef uint32_t xkb_mod_mask_t; + +/** + * Index of a keyboard LED. + * + * LEDs are logical objects which may be @e active or @e inactive. They + * typically correspond to the lights on the keyboard. Their state is + * determined by the current keyboard state. + * + * LED indices are non-consecutive. The first LED has index 0. + * + * Each LED must have a name, and the names are unique. Therefore, + * it is safe to use the name as a unique identifier for a LED. The names + * of some common LEDs are provided in the xkbcommon/xkbcommon-names.h + * header file. LED names are case-sensitive. + * + * @warning A given keymap may specify an exact index for a given LED. + * Therefore, LED indexing is not necessarily sequential, as opposed to + * modifiers and layouts. This means that when iterating over the LEDs + * in a keymap using e.g. xkb_keymap_num_leds(), some indices might be + * invalid. Given such an index, functions like xkb_keymap_led_get_name() + * will return NULL, and xkb_state_led_index_is_active() will return -1. + * + * LEDs are also called "indicators" by XKB. + * + * @sa xkb_keymap_num_leds() + */ +typedef uint32_t xkb_led_index_t; +/** A mask of LED indices. */ +typedef uint32_t xkb_led_mask_t; + +#define XKB_KEYCODE_INVALID (0xffffffff) +#define XKB_LAYOUT_INVALID (0xffffffff) +#define XKB_LEVEL_INVALID (0xffffffff) +#define XKB_MOD_INVALID (0xffffffff) +#define XKB_LED_INVALID (0xffffffff) + +#define XKB_KEYCODE_MAX (0xffffffff - 1) + +/** + * Test whether a value is a valid extended keycode. + * @sa xkb_keycode_t + **/ +#define xkb_keycode_is_legal_ext(key) (key <= XKB_KEYCODE_MAX) + +/** + * Test whether a value is a valid X11 keycode. + * @sa xkb_keycode_t + */ +#define xkb_keycode_is_legal_x11(key) (key >= 8 && key <= 255) + +/** + * Names to compile a keymap with, also known as RMLVO. + * + * The names are the common configuration values by which a user picks + * a keymap. + * + * If the entire struct is NULL, then each field is taken to be NULL. + * You should prefer passing NULL instead of choosing your own defaults. + */ +struct xkb_rule_names { + /** + * The rules file to use. The rules file describes how to interpret + * the values of the model, layout, variant and options fields. + * + * If NULL or the empty string "", a default value is used. + * If the XKB_DEFAULT_RULES environment variable is set, it is used + * as the default. Otherwise the system default is used. + */ + const char *rules; + /** + * The keyboard model by which to interpret keycodes and LEDs. + * + * If NULL or the empty string "", a default value is used. + * If the XKB_DEFAULT_MODEL environment variable is set, it is used + * as the default. Otherwise the system default is used. + */ + const char *model; + /** + * A comma separated list of layouts (languages) to include in the + * keymap. + * + * If NULL or the empty string "", a default value is used. + * If the XKB_DEFAULT_LAYOUT environment variable is set, it is used + * as the default. Otherwise the system default is used. + */ + const char *layout; + /** + * A comma separated list of variants, one per layout, which may + * modify or augment the respective layout in various ways. + * + * If NULL or the empty string "", and a default value is also used + * for the layout, a default value is used. Otherwise no variant is + * used. + * If the XKB_DEFAULT_VARIANT environment variable is set, it is used + * as the default. Otherwise the system default is used. + */ + const char *variant; + /** + * A comma separated list of options, through which the user specifies + * non-layout related preferences, like which key combinations are used + * for switching layouts, or which key is the Compose key. + * + * If NULL, a default value is used. If the empty string "", no + * options are used. + * If the XKB_DEFAULT_OPTIONS environment variable is set, it is used + * as the default. Otherwise the system default is used. + */ + const char *options; +}; + +/** + * @defgroup keysyms Keysyms + * Utility functions related to keysyms. + * + * @{ + */ + +/** + * @page keysym-transformations Keysym Transformations + * + * Keysym translation is subject to several "keysym transformations", + * as described in the XKB specification. These are: + * + * - Capitalization transformation. If the Caps Lock modifier is + * active and was not consumed by the translation process, a single + * keysym is transformed to its upper-case form (if applicable). + * Similarly, the UTF-8/UTF-32 string produced is capitalized. + * + * This is described in: + * http://www.x.org/releases/current/doc/kbproto/xkbproto.html#Interpreting_the_Lock_Modifier + * + * - Control transformation. If the Control modifier is active and + * was not consumed by the translation process, the string produced + * is transformed to its matching ASCII control character (if + * applicable). Keysyms are not affected. + * + * This is described in: + * http://www.x.org/releases/current/doc/kbproto/xkbproto.html#Interpreting_the_Control_Modifier + * + * Each relevant function discusses which transformations it performs. + * + * These transformations are not applicable when a key produces multiple + * keysyms. + */ + + +/** + * Get the name of a keysym. + * + * For a description of how keysyms are named, see @ref xkb_keysym_t. + * + * @param[in] keysym The keysym. + * @param[out] buffer A string buffer to write the name into. + * @param[in] size Size of the buffer. + * + * @warning If the buffer passed is too small, the string is truncated + * (though still NUL-terminated); a size of at least 64 bytes is recommended. + * + * @returns The number of bytes in the name, excluding the NUL byte. If + * the keysym is invalid, returns -1. + * + * You may check if truncation has occurred by comparing the return value + * with the length of buffer, similarly to the snprintf(3) function. + * + * @sa xkb_keysym_t + */ +int +xkb_keysym_get_name(xkb_keysym_t keysym, char *buffer, size_t size); + +/** Flags for xkb_keysym_from_name(). */ +enum xkb_keysym_flags { + /** Do not apply any flags. */ + XKB_KEYSYM_NO_FLAGS = 0, + /** Find keysym by case-insensitive search. */ + XKB_KEYSYM_CASE_INSENSITIVE = (1 << 0) +}; + +/** + * Get a keysym from its name. + * + * @param name The name of a keysym. See remarks in xkb_keysym_get_name(); + * this function will accept any name returned by that function. + * @param flags A set of flags controlling how the search is done. If + * invalid flags are passed, this will fail with XKB_KEY_NoSymbol. + * + * If you use the XKB_KEYSYM_CASE_INSENSITIVE flag and two keysym names + * differ only by case, then the lower-case keysym is returned. For + * instance, for KEY_a and KEY_A, this function would return KEY_a for the + * case-insensitive search. If this functionality is needed, it is + * recommended to first call this function without this flag; and if that + * fails, only then to try with this flag, while possibly warning the user + * he had misspelled the name, and might get wrong results. + * + * @returns The keysym. If the name is invalid, returns XKB_KEY_NoSymbol. + * + * @sa xkb_keysym_t + */ +xkb_keysym_t +xkb_keysym_from_name(const char *name, enum xkb_keysym_flags flags); + +/** + * Get the Unicode/UTF-8 representation of a keysym. + * + * @param[in] keysym The keysym. + * @param[out] buffer A buffer to write the UTF-8 string into. + * @param[in] size The size of buffer. Must be at least 7. + * + * @returns The number of bytes written to the buffer (including the + * terminating byte). If the keysym does not have a Unicode + * representation, returns 0. If the buffer is too small, returns -1. + * + * This function does not perform any @ref keysym-transformations. + * Therefore, prefer to use xkb_state_key_get_utf8() if possible. + * + * @sa xkb_state_key_get_utf8() + */ +int +xkb_keysym_to_utf8(xkb_keysym_t keysym, char *buffer, size_t size); + +/** + * Get the Unicode/UTF-32 representation of a keysym. + * + * @returns The Unicode/UTF-32 representation of keysym, which is also + * compatible with UCS-4. If the keysym does not have a Unicode + * representation, returns 0. + * + * This function does not perform any @ref keysym-transformations. + * Therefore, prefer to use xkb_state_key_get_utf32() if possible. + * + * @sa xkb_state_key_get_utf32() + */ +uint32_t +xkb_keysym_to_utf32(xkb_keysym_t keysym); + +/** @} */ + +/** + * @defgroup context Library Context + * Creating, destroying and using library contexts. + * + * Every keymap compilation request must have a context associated with + * it. The context keeps around state such as the include path. + * + * @{ + */ + +/** Flags for context creation. */ +enum xkb_context_flags { + /** Do not apply any context flags. */ + XKB_CONTEXT_NO_FLAGS = 0, + /** Create this context with an empty include path. */ + XKB_CONTEXT_NO_DEFAULT_INCLUDES = (1 << 0), + /** + * Don't take RMLVO names from the environment. + * @since 0.3.0 + */ + XKB_CONTEXT_NO_ENVIRONMENT_NAMES = (1 << 1) +}; + +/** + * Create a new context. + * + * @param flags Optional flags for the context, or 0. + * + * @returns A new context, or NULL on failure. + * + * The user may set some environment variables to affect default values in + * the context. See e.g. xkb_context_set_log_level() and + * xkb_context_set_log_verbosity(). + * + * @memberof xkb_context + */ +struct xkb_context * +xkb_context_new(enum xkb_context_flags flags); + +/** + * Take a new reference on a context. + * + * @returns The passed in context. + * + * @memberof xkb_context + */ +struct xkb_context * +xkb_context_ref(struct xkb_context *context); + +/** + * Release a reference on a context, and possibly free it. + * + * @param context The context. If it is NULL, this function does nothing. + * + * @memberof xkb_context + */ +void +xkb_context_unref(struct xkb_context *context); + +/** + * Store custom user data in the context. + * + * This may be useful in conjunction with xkb_context_set_log_fn() or other + * callbacks. + * + * @memberof xkb_context + */ +void +xkb_context_set_user_data(struct xkb_context *context, void *user_data); + +/** + * Retrieves stored user data from the context. + * + * @returns The stored user data. If the user data wasn't set, or the + * passed in context is NULL, returns NULL. + * + * This may be useful to access private user data from callbacks like a + * custom logging function. + * + * @memberof xkb_context + **/ +void * +xkb_context_get_user_data(struct xkb_context *context); + +/** @} */ + +/** + * @defgroup include-path Include Paths + * Manipulating the include paths in a context. + * + * The include paths are the file-system paths that are searched when an + * include statement is encountered during keymap compilation. + * In most cases, the default include paths are sufficient. + * + * @{ + */ + +/** + * Append a new entry to the context's include path. + * + * @returns 1 on success, or 0 if the include path could not be added or is + * inaccessible. + * + * @memberof xkb_context + */ +int +xkb_context_include_path_append(struct xkb_context *context, const char *path); + +/** + * Append the default include paths to the context's include path. + * + * @returns 1 on success, or 0 if the primary include path could not be added. + * + * @memberof xkb_context + */ +int +xkb_context_include_path_append_default(struct xkb_context *context); + +/** + * Reset the context's include path to the default. + * + * Removes all entries from the context's include path, and inserts the + * default paths. + * + * @returns 1 on success, or 0 if the primary include path could not be added. + * + * @memberof xkb_context + */ +int +xkb_context_include_path_reset_defaults(struct xkb_context *context); + +/** + * Remove all entries from the context's include path. + * + * @memberof xkb_context + */ +void +xkb_context_include_path_clear(struct xkb_context *context); + +/** + * Get the number of paths in the context's include path. + * + * @memberof xkb_context + */ +unsigned int +xkb_context_num_include_paths(struct xkb_context *context); + +/** + * Get a specific include path from the context's include path. + * + * @returns The include path at the specified index. If the index is + * invalid, returns NULL. + * + * @memberof xkb_context + */ +const char * +xkb_context_include_path_get(struct xkb_context *context, unsigned int index); + +/** @} */ + +/** + * @defgroup logging Logging Handling + * Manipulating how logging from this library is handled. + * + * @{ + */ + +/** Specifies a logging level. */ +enum xkb_log_level { + XKB_LOG_LEVEL_CRITICAL = 10, /**< Log critical internal errors only. */ + XKB_LOG_LEVEL_ERROR = 20, /**< Log all errors. */ + XKB_LOG_LEVEL_WARNING = 30, /**< Log warnings and errors. */ + XKB_LOG_LEVEL_INFO = 40, /**< Log information, warnings, and errors. */ + XKB_LOG_LEVEL_DEBUG = 50 /**< Log everything. */ +}; + +/** + * Set the current logging level. + * + * @param context The context in which to set the logging level. + * @param level The logging level to use. Only messages from this level + * and below will be logged. + * + * The default level is XKB_LOG_LEVEL_ERROR. The environment variable + * XKB_LOG_LEVEL, if set in the time the context was created, overrides the + * default value. It may be specified as a level number or name. + * + * @memberof xkb_context + */ +void +xkb_context_set_log_level(struct xkb_context *context, + enum xkb_log_level level); + +/** + * Get the current logging level. + * + * @memberof xkb_context + */ +enum xkb_log_level +xkb_context_get_log_level(struct xkb_context *context); + +/** + * Sets the current logging verbosity. + * + * The library can generate a number of warnings which are not helpful to + * ordinary users of the library. The verbosity may be increased if more + * information is desired (e.g. when developing a new keymap). + * + * The default verbosity is 0. The environment variable XKB_LOG_VERBOSITY, + * if set in the time the context was created, overrides the default value. + * + * @param context The context in which to use the set verbosity. + * @param verbosity The verbosity to use. Currently used values are + * 1 to 10, higher values being more verbose. 0 would result in no verbose + * messages being logged. + * + * Most verbose messages are of level XKB_LOG_LEVEL_WARNING or lower. + * + * @memberof xkb_context + */ +void +xkb_context_set_log_verbosity(struct xkb_context *context, int verbosity); + +/** + * Get the current logging verbosity of the context. + * + * @memberof xkb_context + */ +int +xkb_context_get_log_verbosity(struct xkb_context *context); + +/** + * Set a custom function to handle logging messages. + * + * @param context The context in which to use the set logging function. + * @param log_fn The function that will be called for logging messages. + * Passing NULL restores the default function, which logs to stderr. + * + * By default, log messages from this library are printed to stderr. This + * function allows you to replace the default behavior with a custom + * handler. The handler is only called with messages which match the + * current logging level and verbosity settings for the context. + * level is the logging level of the message. @a format and @a args are + * the same as in the vprintf(3) function. + * + * You may use xkb_context_set_user_data() on the context, and then call + * xkb_context_get_user_data() from within the logging function to provide + * it with additional private context. + * + * @memberof xkb_context + */ +void +xkb_context_set_log_fn(struct xkb_context *context, + void (*log_fn)(struct xkb_context *context, + enum xkb_log_level level, + const char *format, va_list args)); + +/** @} */ + +/** + * @defgroup keymap Keymap Creation + * Creating and destroying keymaps. + * + * @{ + */ + +/** Flags for keymap compilation. */ +enum xkb_keymap_compile_flags { + /** Do not apply any flags. */ + XKB_KEYMAP_COMPILE_NO_FLAGS = 0 +}; + +/** + * Create a keymap from RMLVO names. + * + * The primary keymap entry point: creates a new XKB keymap from a set of + * RMLVO (Rules + Model + Layouts + Variants + Options) names. + * + * @param context The context in which to create the keymap. + * @param names The RMLVO names to use. See xkb_rule_names. + * @param flags Optional flags for the keymap, or 0. + * + * @returns A keymap compiled according to the RMLVO names, or NULL if + * the compilation failed. + * + * @sa xkb_rule_names + * @memberof xkb_keymap + */ +struct xkb_keymap * +xkb_keymap_new_from_names(struct xkb_context *context, + const struct xkb_rule_names *names, + enum xkb_keymap_compile_flags flags); + +/** The possible keymap formats. */ +enum xkb_keymap_format { + /** The current/classic XKB text format, as generated by xkbcomp -xkb. */ + XKB_KEYMAP_FORMAT_TEXT_V1 = 1 +}; + +/** + * Create a keymap from a keymap file. + * + * @param context The context in which to create the keymap. + * @param file The keymap file to compile. + * @param format The text format of the keymap file to compile. + * @param flags Optional flags for the keymap, or 0. + * + * @returns A keymap compiled from the given XKB keymap file, or NULL if + * the compilation failed. + * + * The file must contain a complete keymap. For example, in the + * XKB_KEYMAP_FORMAT_TEXT_V1 format, this means the file must contain one + * top level '%xkb_keymap' section, which in turn contains other required + * sections. + * + * @memberof xkb_keymap + */ +struct xkb_keymap * +xkb_keymap_new_from_file(struct xkb_context *context, FILE *file, + enum xkb_keymap_format format, + enum xkb_keymap_compile_flags flags); + +/** + * Create a keymap from a keymap string. + * + * This is just like xkb_keymap_new_from_file(), but instead of a file, gets + * the keymap as one enormous string. + * + * @see xkb_keymap_new_from_file() + * @memberof xkb_keymap + */ +struct xkb_keymap * +xkb_keymap_new_from_string(struct xkb_context *context, const char *string, + enum xkb_keymap_format format, + enum xkb_keymap_compile_flags flags); + +/** + * Create a keymap from a memory buffer. + * + * This is just like xkb_keymap_new_from_string(), but takes a length argument + * so the input string does not have to be zero-terminated. + * + * @see xkb_keymap_new_from_string() + * @memberof xkb_keymap + * @since 0.3.0 + */ +struct xkb_keymap * +xkb_keymap_new_from_buffer(struct xkb_context *context, const char *buffer, + size_t length, enum xkb_keymap_format format, + enum xkb_keymap_compile_flags flags); + +/** + * Take a new reference on a keymap. + * + * @returns The passed in keymap. + * + * @memberof xkb_keymap + */ +struct xkb_keymap * +xkb_keymap_ref(struct xkb_keymap *keymap); + +/** + * Release a reference on a keymap, and possibly free it. + * + * @param keymap The keymap. If it is NULL, this function does nothing. + * + * @memberof xkb_keymap + */ +void +xkb_keymap_unref(struct xkb_keymap *keymap); + +/** + * Get the keymap as a string in the format from which it was created. + * @sa xkb_keymap_get_as_string() + **/ +#define XKB_KEYMAP_USE_ORIGINAL_FORMAT ((enum xkb_keymap_format) -1) + +/** + * Get the compiled keymap as a string. + * + * @param keymap The keymap to get as a string. + * @param format The keymap format to use for the string. You can pass + * in the special value XKB_KEYMAP_USE_ORIGINAL_FORMAT to use the format + * from which the keymap was originally created. + * + * @returns The keymap as a NUL-terminated string, or NULL if unsuccessful. + * + * The returned string may be fed back into xkb_map_new_from_string() to get + * the exact same keymap (possibly in another process, etc.). + * + * The returned string is dynamically allocated and should be freed by the + * caller. + * + * @memberof xkb_keymap + */ +char * +xkb_keymap_get_as_string(struct xkb_keymap *keymap, + enum xkb_keymap_format format); + +/** @} */ + +/** + * @defgroup components Keymap Components + * Enumeration of state components in a keymap. + * + * @{ + */ + +/** + * Get the minimum keycode in the keymap. + * + * @sa xkb_keycode_t + * @memberof xkb_keymap + * @since 0.3.1 + */ +xkb_keycode_t +xkb_keymap_min_keycode(struct xkb_keymap *keymap); + +/** + * Get the maximum keycode in the keymap. + * + * @sa xkb_keycode_t + * @memberof xkb_keymap + * @since 0.3.1 + */ +xkb_keycode_t +xkb_keymap_max_keycode(struct xkb_keymap *keymap); + +/** + * The iterator used by xkb_keymap_key_for_each(). + * + * @sa xkb_keymap_key_for_each + * @memberof xkb_keymap + * @since 0.3.1 + */ +typedef void +(*xkb_keymap_key_iter_t)(struct xkb_keymap *keymap, xkb_keycode_t key, + void *data); + +/** + * Run a specified function for every valid keycode in the keymap. If a + * keymap is sparse, this function may be called fewer than + * (max_keycode - min_keycode + 1) times. + * + * @sa xkb_keymap_min_keycode() xkb_keymap_max_keycode() xkb_keycode_t + * @memberof xkb_keymap + * @since 0.3.1 + */ +void +xkb_keymap_key_for_each(struct xkb_keymap *keymap, xkb_keymap_key_iter_t iter, + void *data); + +/** + * Get the number of modifiers in the keymap. + * + * @sa xkb_mod_index_t + * @memberof xkb_keymap + */ +xkb_mod_index_t +xkb_keymap_num_mods(struct xkb_keymap *keymap); + +/** + * Get the name of a modifier by index. + * + * @returns The name. If the index is invalid, returns NULL. + * + * @sa xkb_mod_index_t + * @memberof xkb_keymap + */ +const char * +xkb_keymap_mod_get_name(struct xkb_keymap *keymap, xkb_mod_index_t idx); + +/** + * Get the index of a modifier by name. + * + * @returns The index. If no modifier with this name exists, returns + * XKB_MOD_INVALID. + * + * @sa xkb_mod_index_t + * @memberof xkb_keymap + */ +xkb_mod_index_t +xkb_keymap_mod_get_index(struct xkb_keymap *keymap, const char *name); + +/** + * Get the number of layouts in the keymap. + * + * @sa xkb_layout_index_t xkb_rule_names xkb_keymap_num_layouts_for_key() + * @memberof xkb_keymap + */ +xkb_layout_index_t +xkb_keymap_num_layouts(struct xkb_keymap *keymap); + +/** + * Get the name of a layout by index. + * + * @returns The name. If the index is invalid, or the layout does not have + * a name, returns NULL. + * + * @sa xkb_layout_index_t + * @memberof xkb_keymap + */ +const char * +xkb_keymap_layout_get_name(struct xkb_keymap *keymap, xkb_layout_index_t idx); + +/** + * Get the index of a layout by name. + * + * @returns The index. If no layout exists with this name, returns + * XKB_LAYOUT_INVALID. If more than one layout in the keymap has this name, + * returns the lowest index among them. + * + * @memberof xkb_keymap + */ +xkb_layout_index_t +xkb_keymap_layout_get_index(struct xkb_keymap *keymap, const char *name); + +/** + * Get the number of LEDs in the keymap. + * + * @warning The range [ 0...xkb_keymap_num_leds() ) includes all of the LEDs + * in the keymap, but may also contain inactive LEDs. When iterating over + * this range, you need the handle this case when calling functions such as + * xkb_keymap_led_get_name() or xkb_state_led_index_is_active(). + * + * @sa xkb_led_index_t + * @memberof xkb_keymap + */ +xkb_led_index_t +xkb_keymap_num_leds(struct xkb_keymap *keymap); + +/** + * Get the name of a LED by index. + * + * @returns The name. If the index is invalid, returns NULL. + * + * @memberof xkb_keymap + */ +const char * +xkb_keymap_led_get_name(struct xkb_keymap *keymap, xkb_led_index_t idx); + +/** + * Get the index of a LED by name. + * + * @returns The index. If no LED with this name exists, returns + * XKB_LED_INVALID. + * + * @memberof xkb_keymap + */ +xkb_led_index_t +xkb_keymap_led_get_index(struct xkb_keymap *keymap, const char *name); + +/** + * Get the number of layouts for a specific key. + * + * This number can be different from xkb_keymap_num_layouts(), but is always + * smaller. It is the appropriate value to use when iterating over the + * layouts of a key. + * + * @sa xkb_layout_index_t + * @memberof xkb_keymap + */ +xkb_layout_index_t +xkb_keymap_num_layouts_for_key(struct xkb_keymap *keymap, xkb_keycode_t key); + +/** + * Get the number of shift levels for a specific key and layout. + * + * If @c layout is out of range for this key (that is, larger or equal to + * the value returned by xkb_keymap_num_layouts_for_key()), it is brought + * back into range in a manner consistent with xkb_state_key_get_layout(). + * + * @sa xkb_level_index_t + * @memberof xkb_keymap + */ +xkb_level_index_t +xkb_keymap_num_levels_for_key(struct xkb_keymap *keymap, xkb_keycode_t key, + xkb_layout_index_t layout); + +/** + * Get the keysyms obtained from pressing a key in a given layout and + * shift level. + * + * This function is like xkb_state_key_get_syms(), only the layout and + * shift level are not derived from the keyboard state but are instead + * specified explicitly. + * + * @param[in] keymap The keymap. + * @param[in] key The keycode of the key. + * @param[in] layout The layout for which to get the keysyms. + * @param[in] level The shift level in the layout for which to get the + * keysyms. This must be smaller than: + * @code xkb_keymap_num_levels_for_key(keymap, key) @endcode + * @param[out] syms_out An immutable array of keysyms corresponding to the + * key in the given layout and shift level. + * + * If @c layout is out of range for this key (that is, larger or equal to + * the value returned by xkb_keymap_num_layouts_for_key()), it is brought + * back into range in a manner consistent with xkb_state_key_get_layout(). + * + * @returns The number of keysyms in the syms_out array. If no keysyms + * are produced by the key in the given layout and shift level, returns 0 + * and sets syms_out to NULL. + * + * @sa xkb_state_key_get_syms() + * @memberof xkb_keymap + */ +int +xkb_keymap_key_get_syms_by_level(struct xkb_keymap *keymap, + xkb_keycode_t key, + xkb_layout_index_t layout, + xkb_level_index_t level, + const xkb_keysym_t **syms_out); + +/** + * Determine whether a key should repeat or not. + * + * A keymap may specify different repeat behaviors for different keys. + * Most keys should generally exhibit repeat behavior; for example, holding + * the 'a' key down in a text editor should normally insert a single 'a' + * character every few milliseconds, until the key is released. However, + * there are keys which should not or do not need to be repeated. For + * example, repeating modifier keys such as Left/Right Shift or Caps Lock + * is not generally useful or desired. + * + * @returns 1 if the key should repeat, 0 otherwise. + * + * @memberof xkb_keymap + */ +int +xkb_keymap_key_repeats(struct xkb_keymap *keymap, xkb_keycode_t key); + +/** @} */ + +/** + * @defgroup state Keyboard State + * Creating, destroying and manipulating keyboard state objects. + * + * @{ + */ + +/** + * Create a new keyboard state object. + * + * @param keymap The keymap which the state will use. + * + * @returns A new keyboard state object, or NULL on failure. + * + * @memberof xkb_state + */ +struct xkb_state * +xkb_state_new(struct xkb_keymap *keymap); + +/** + * Take a new reference on a keyboard state object. + * + * @returns The passed in object. + * + * @memberof xkb_state + */ +struct xkb_state * +xkb_state_ref(struct xkb_state *state); + +/** + * Release a reference on a keybaord state object, and possibly free it. + * + * @param state The state. If it is NULL, this function does nothing. + * + * @memberof xkb_state + */ +void +xkb_state_unref(struct xkb_state *state); + +/** + * Get the keymap which a keyboard state object is using. + * + * @returns The keymap which was passed to xkb_state_new() when creating + * this state object. + * + * This function does not take a new reference on the keymap; you must + * explicitly reference it yourself if you plan to use it beyond the + * lifetime of the state. + * + * @memberof xkb_state + */ +struct xkb_keymap * +xkb_state_get_keymap(struct xkb_state *state); + +/** Specifies the direction of the key (press / release). */ +enum xkb_key_direction { + XKB_KEY_UP, /**< The key was released. */ + XKB_KEY_DOWN /**< The key was pressed. */ +}; + +/** + * Modifier and layout types for state objects. This enum is bitmaskable, + * e.g. (XKB_STATE_MODS_DEPRESSED | XKB_STATE_MODS_LATCHED) is valid to + * exclude locked modifiers. + * + * In XKB, the DEPRESSED components are also known as 'base'. + */ +enum xkb_state_component { + /** Depressed modifiers, i.e. a key is physically holding them. */ + XKB_STATE_MODS_DEPRESSED = (1 << 0), + /** Latched modifiers, i.e. will be unset after the next non-modifier + * key press. */ + XKB_STATE_MODS_LATCHED = (1 << 1), + /** Locked modifiers, i.e. will be unset after the key provoking the + * lock has been pressed again. */ + XKB_STATE_MODS_LOCKED = (1 << 2), + /** Effective modifiers, i.e. currently active and affect key + * processing (derived from the other state components). + * Use this unless you explictly care how the state came about. */ + XKB_STATE_MODS_EFFECTIVE = (1 << 3), + /** Depressed layout, i.e. a key is physically holding it. */ + XKB_STATE_LAYOUT_DEPRESSED = (1 << 4), + /** Latched layout, i.e. will be unset after the next non-modifier + * key press. */ + XKB_STATE_LAYOUT_LATCHED = (1 << 5), + /** Locked layout, i.e. will be unset after the key provoking the lock + * has been pressed again. */ + XKB_STATE_LAYOUT_LOCKED = (1 << 6), + /** Effective layout, i.e. currently active and affects key processing + * (derived from the other state components). + * Use this unless you explictly care how the state came about. */ + XKB_STATE_LAYOUT_EFFECTIVE = (1 << 7), + /** LEDs (derived from the other state components). */ + XKB_STATE_LEDS = (1 << 8) +}; + +/** + * Update the keyboard state to reflect a given key being pressed or + * released. + * + * This entry point is intended for programs which track the keyboard state + * explictly (like an evdev client). If the state is serialized to you by + * a master process (like a Wayland compositor) using functions like + * xkb_state_serialize_mods(), you should use xkb_state_update_mask() instead. + * The two functins should not generally be used together. + * + * A series of calls to this function should be consistent; that is, a call + * with XKB_KEY_DOWN for a key should be matched by an XKB_KEY_UP; if a key + * is pressed twice, it should be released twice; etc. Otherwise (e.g. due + * to missed input events), situations like "stuck modifiers" may occur. + * + * This function is often used in conjunction with the function + * xkb_state_key_get_syms() (or xkb_state_key_get_one_sym()), for example, + * when handling a key event. In this case, you should prefer to get the + * keysyms *before* updating the key, such that the keysyms reported for + * the key event are not affected by the event itself. This is the + * conventional behavior. + * + * @returns A mask of state components that have changed as a result of + * the update. If nothing in the state has changed, returns 0. + * + * @memberof xkb_state + * + * @sa xkb_state_update_mask() + */ +enum xkb_state_component +xkb_state_update_key(struct xkb_state *state, xkb_keycode_t key, + enum xkb_key_direction direction); + +/** + * Update a keyboard state from a set of explicit masks. + * + * This entry point is intended for window systems and the like, where a + * master process holds an xkb_state, then serializes it over a wire + * protocol, and clients then use the serialization to feed in to their own + * xkb_state. + * + * All parameters must always be passed, or the resulting state may be + * incoherent. + * + * The serialization is lossy and will not survive round trips; it must only + * be used to feed slave state objects, and must not be used to update the + * master state. + * + * If you do not fit the description above, you should use + * xkb_state_update_key() instead. The two functions should not generally be + * used together. + * + * @returns A mask of state components that have changed as a result of + * the update. If nothing in the state has changed, returns 0. + * + * @memberof xkb_state + * + * @sa xkb_state_component + * @sa xkb_state_update_key + */ +enum xkb_state_component +xkb_state_update_mask(struct xkb_state *state, + xkb_mod_mask_t depressed_mods, + xkb_mod_mask_t latched_mods, + xkb_mod_mask_t locked_mods, + xkb_layout_index_t depressed_layout, + xkb_layout_index_t latched_layout, + xkb_layout_index_t locked_layout); + +/** + * Get the keysyms obtained from pressing a particular key in a given + * keyboard state. + * + * Get the keysyms for a key according to the current active layout, + * modifiers and shift level for the key, as determined by a keyboard + * state. + * + * @param[in] state The keyboard state object. + * @param[in] key The keycode of the key. + * @param[out] syms_out An immutable array of keysyms corresponding the + * key in the given keyboard state. + * + * As an extension to XKB, this function can return more than one keysym. + * If you do not want to handle this case, you can use + * xkb_state_key_get_one_sym() for a simpler interface. + * + * This function does not perform any @ref keysym-transformations. + * (This might change). + * + * @returns The number of keysyms in the syms_out array. If no keysyms + * are produced by the key in the given keyboard state, returns 0 and sets + * syms_out to NULL. + * + * @memberof xkb_state + */ +int +xkb_state_key_get_syms(struct xkb_state *state, xkb_keycode_t key, + const xkb_keysym_t **syms_out); + +/** + * Get the Unicode/UTF-8 string obtained from pressing a particular key + * in a given keyboard state. + * + * @param[in] state The keyboard state object. + * @param[in] key The keycode of the key. + * @param[out] buffer A buffer to write the string into. + * @param[in] size Size of the buffer. + * + * @warning If the buffer passed is too small, the string is truncated + * (though still NUL-terminated). + * + * @returns The number of bytes required for the string, excluding the + * NUL byte. If there is nothing to write, returns 0. + * + * You may check if truncation has occurred by comparing the return value + * with the size of @p buffer, similarly to the snprintf(3) function. + * You may safely pass NULL and 0 to @p buffer and @p size to find the + * required size (without the NUL-byte). + * + * This function performs Capitalization and Control @ref + * keysym-transformations. + * + * @memberof xkb_state + * @since 0.4.1 + */ +int +xkb_state_key_get_utf8(struct xkb_state *state, xkb_keycode_t key, + char *buffer, size_t size); + +/** + * Get the Unicode/UTF-32 codepoint obtained from pressing a particular + * key in a a given keyboard state. + * + * @returns The UTF-32 representation for the key, if it consists of only + * a single codepoint. Otherwise, returns 0. + * + * This function performs Capitalization and Control @ref + * keysym-transformations. + * + * @memberof xkb_state + * @since 0.4.1 + */ +uint32_t +xkb_state_key_get_utf32(struct xkb_state *state, xkb_keycode_t key); + +/** + * Get the single keysym obtained from pressing a particular key in a + * given keyboard state. + * + * This function is similar to xkb_state_key_get_syms(), but intended + * for users which cannot or do not want to handle the case where + * multiple keysyms are returned (in which case this function is + * preferred). + * + * @returns The keysym. If the key does not have exactly one keysym, + * returns XKB_KEY_NoSymbol + * + * This function performs Capitalization @ref keysym-transformations. + * + * @sa xkb_state_key_get_syms() + * @memberof xkb_state + */ +xkb_keysym_t +xkb_state_key_get_one_sym(struct xkb_state *state, xkb_keycode_t key); + +/** + * Get the effective layout index for a key in a given keyboard state. + * + * @returns The layout index for the key in the given keyboard state. If + * the given keycode is invalid, or if the key is not included in any + * layout at all, returns XKB_LAYOUT_INVALID. + * + * @invariant If the returned layout is valid, the following always holds: + * @code + * xkb_state_key_get_layout(state, key) < xkb_keymap_num_layouts_for_key(keymap, key) + * @endcode + * + * @memberof xkb_state + */ +xkb_layout_index_t +xkb_state_key_get_layout(struct xkb_state *state, xkb_keycode_t key); + +/** + * Get the effective shift level for a key in a given keyboard state and + * layout. + * + * @param state The keyboard state. + * @param key The keycode of the key. + * @param layout The layout for which to get the shift level. This must be + * smaller than: + * @code xkb_keymap_num_layouts_for_key(keymap, key) @endcode + * usually it would be: + * @code xkb_state_key_get_layout(state, key) @endcode + * + * @return The shift level index. If the key or layout are invalid, + * returns XKB_LEVEL_INVALID. + * + * @invariant If the returned level is valid, the following always holds: + * @code + * xkb_state_key_get_level(state, key, layout) < xkb_keymap_num_levels_for_key(keymap, key, layout) + * @endcode + * + * @memberof xkb_state + */ +xkb_level_index_t +xkb_state_key_get_level(struct xkb_state *state, xkb_keycode_t key, + xkb_layout_index_t layout); + +/** + * Match flags for xkb_state_mod_indices_are_active() and + * xkb_state_mod_names_are_active(), specifying the conditions for a + * successful match. XKB_STATE_MATCH_NON_EXCLUSIVE is bitmaskable with + * the other modes. + */ +enum xkb_state_match { + /** Returns true if any of the modifiers are active. */ + XKB_STATE_MATCH_ANY = (1 << 0), + /** Returns true if all of the modifiers are active. */ + XKB_STATE_MATCH_ALL = (1 << 1), + /** Makes matching non-exclusive, i.e. will not return false if a + * modifier not specified in the arguments is active. */ + XKB_STATE_MATCH_NON_EXCLUSIVE = (1 << 16) +}; + +/** + * The counterpart to xkb_state_update_mask for modifiers, to be used on + * the server side of serialization. + * + * @param state The keyboard state. + * @param components A mask of the modifier state components to serialize. + * State components other than XKB_STATE_MODS_* are ignored. + * If XKB_STATE_MODS_EFFECTIVE is included, all other state components are + * ignored. + * + * @returns A xkb_mod_mask_t representing the given components of the + * modifier state. + * + * This function should not be used in regular clients; please use the + * xkb_state_mod_*_is_active API instead. + * + * @memberof xkb_state + */ +xkb_mod_mask_t +xkb_state_serialize_mods(struct xkb_state *state, + enum xkb_state_component components); + +/** + * The counterpart to xkb_state_update_mask for layouts, to be used on + * the server side of serialization. + * + * @param state The keyboard state. + * @param components A mask of the layout state components to serialize. + * State components other than XKB_STATE_LAYOUT_* are ignored. + * If XKB_STATE_LAYOUT_EFFECTIVE is included, all other state components are + * ignored. + * + * @returns A layout index representing the given components of the + * layout state. + * + * This function should not be used in regular clients; please use the + * xkb_state_layout_*_is_active API instead. + * + * @memberof xkb_state + */ +xkb_layout_index_t +xkb_state_serialize_layout(struct xkb_state *state, + enum xkb_state_component components); + +/** + * Test whether a modifier is active in a given keyboard state by name. + * + * @returns 1 if the modifier is active, 0 if it is not. If the modifier + * name does not exist in the keymap, returns -1. + * + * @memberof xkb_state + */ +int +xkb_state_mod_name_is_active(struct xkb_state *state, const char *name, + enum xkb_state_component type); + +/** + * Test whether a set of modifiers are active in a given keyboard state by + * name. + * + * @param state The keyboard state. + * @param type The component of the state against which to match the + * given modifiers. + * @param match The manner by which to match the state against the + * given modifiers. + * @param ... The set of of modifier names to test, terminated by a NULL + * argument (sentinel). + * + * @returns 1 if the modifiers are active, 0 if they are not. If any of + * the modifier names do not exist in the keymap, returns -1. + * + * @memberof xkb_state + */ +int +xkb_state_mod_names_are_active(struct xkb_state *state, + enum xkb_state_component type, + enum xkb_state_match match, + ...); + +/** + * Test whether a modifier is active in a given keyboard state by index. + * + * @returns 1 if the modifier is active, 0 if it is not. If the modifier + * index is invalid in the keymap, returns -1. + * + * @memberof xkb_state + */ +int +xkb_state_mod_index_is_active(struct xkb_state *state, xkb_mod_index_t idx, + enum xkb_state_component type); + +/** + * Test whether a set of modifiers are active in a given keyboard state by + * index. + * + * @param state The keyboard state. + * @param type The component of the state against which to match the + * given modifiers. + * @param match The manner by which to match the state against the + * given modifiers. + * @param ... The set of of modifier indices to test, terminated by a + * XKB_MOD_INVALID argument (sentinel). + * + * @returns 1 if the modifiers are active, 0 if they are not. If any of + * the modifier indices are invalid in the keymap, returns -1. + * + * @memberof xkb_state + */ +int +xkb_state_mod_indices_are_active(struct xkb_state *state, + enum xkb_state_component type, + enum xkb_state_match match, + ...); + +/** + * @page consumed-modifiers Consumed Modifiers + * @parblock + * + * Some functions, like xkb_state_key_get_syms(), look at the state of + * the modifiers in the keymap and derive from it the correct shift level + * to use for the key. For example, in a US layout, pressing the key + * labeled \ while the Shift modifier is active, generates the keysym + * 'A'. In this case, the Shift modifier is said to be "consumed". + * However, the Num Lock modifier does not affect this translation at all, + * even if it is active, so it is not consumed by this translation. + * + * It may be desirable for some application to not reuse consumed modifiers + * for further processing, e.g. for hotkeys or keyboard shortcuts. To + * understand why, consider some requirements from a standard shortcut + * mechanism, and how they are implemented: + * + * 1. The shortcut's modifiers must match exactly to the state. For + * example, it is possible to bind separate actions to \\ + * and to \\\. Further, if only \\ is + * bound to an action, pressing \\\ should not + * trigger the shortcut. + * Effectively, this means that the modifiers are compared using the + * equality operator (==). + * + * 2. Only relevant modifiers are considered for the matching. For example, + * Caps Lock and Num Lock should not generally affect the matching, e.g. + * when matching \\ against the state, it does not matter + * whether Num Lock is active or not. These relevant, or "significant", + * modifiers usually include Alt, Control, Shift, Super and similar. + * Effectively, this means that non-significant modifiers are masked out, + * before doing the comparison as described above. + * + * 3. The matching must be independent of the layout/keymap. For example, + * the \ (+) symbol is found on the first level on some layouts, + * but requires holding Shift on others. If you simply bind the action + * to the \ keysym, it would work for the unshifted kind, but + * not for the others, because the match against Shift would fail. If + * you bind the action to \\, only the shifted kind would + * work. So what is needed is to recognize that Shift is used up in the + * translation of the keysym itself, and therefore should not be included + * in the matching. + * Effectively, this means that consumed modifiers (Shift in this example) + * are masked out as well, before doing the comparison. + * + * In summary, this is how the matching would be performed: + * @code + * (keysym == shortcut_keysym) && + * ((state_mods & ~consumed_mods & significant_mods) == shortcut_mods) + * @endcode + * + * @c state_mods are the modifiers reported by + * xkb_state_mod_index_is_active() and similar functions. + * @c consumed_mods are the modifiers reported by + * xkb_state_mod_index_is_consumed() and similar functions. + * @c significant_mods are decided upon by the application/toolkit/user; + * it is up to them to decide whether these are configurable or hard-coded. + * + * @endparblock + */ + +/** + * Test whether a modifier is consumed by keyboard state translation for + * a key. + * + * @returns 1 if the modifier is consumed, 0 if it is not. If the modifier + * index is not valid in the keymap, returns -1. + * + * @sa xkb_state_mod_mask_remove_consumed() + * @sa xkb_state_key_get_consumed_mods() + * @memberof xkb_state + */ +int +xkb_state_mod_index_is_consumed(struct xkb_state *state, xkb_keycode_t key, + xkb_mod_index_t idx); + +/** + * Remove consumed modifiers from a modifier mask for a key. + * + * Takes the given modifier mask, and removes all modifiers which are + * consumed for that particular key (as in xkb_state_mod_index_is_consumed()). + * + * @sa xkb_state_mod_index_is_consumed() + * @memberof xkb_state + */ +xkb_mod_mask_t +xkb_state_mod_mask_remove_consumed(struct xkb_state *state, xkb_keycode_t key, + xkb_mod_mask_t mask); + +/** + * Get the mask of modifiers consumed by translating a given key. + * + * @returns a mask of the consumed modifiers. + * + * @sa xkb_state_mod_index_is_consumed() + * @memberof xkb_state + * @since 0.4.1 + */ +xkb_mod_mask_t +xkb_state_key_get_consumed_mods(struct xkb_state *state, xkb_keycode_t key); + +/** + * Test whether a layout is active in a given keyboard state by name. + * + * @returns 1 if the layout is active, 0 if it is not. If no layout with + * this name exists in the keymap, return -1. + * + * If multiple layouts in the keymap have this name, the one with the lowest + * index is tested. + * + * @sa xkb_layout_index_t + * @memberof xkb_state + */ +int +xkb_state_layout_name_is_active(struct xkb_state *state, const char *name, + enum xkb_state_component type); + +/** + * Test whether a layout is active in a given keyboard state by index. + * + * @returns 1 if the layout is active, 0 if it is not. If the layout index + * is not valid in the keymap, returns -1. + * + * @sa xkb_layout_index_t + * @memberof xkb_state + */ +int +xkb_state_layout_index_is_active(struct xkb_state *state, + xkb_layout_index_t idx, + enum xkb_state_component type); + +/** + * Test whether a LED is active in a given keyboard state by name. + * + * @returns 1 if the LED is active, 0 if it not. If no LED with this name + * exists in the keymap, returns -1. + * + * @sa xkb_led_index_t + * @memberof xkb_state + */ +int +xkb_state_led_name_is_active(struct xkb_state *state, const char *name); + +/** + * Test whether a LED is active in a given keyboard state by index. + * + * @returns 1 if the LED is active, 0 if it not. If the LED index is not + * valid in the keymap, returns -1. + * + * @sa xkb_led_index_t + * @memberof xkb_state + */ +int +xkb_state_led_index_is_active(struct xkb_state *state, xkb_led_index_t idx); + +/** @} */ + +/* Leave this include last, so it can pick up our types, etc. */ +#include + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* _XKBCOMMON_H_ */ diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/platforminputcontexts.pro b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/platforminputcontexts.pro new file mode 100644 index 000000000..0967cb3d8 --- /dev/null +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/platforminputcontexts.pro @@ -0,0 +1,10 @@ +TEMPLATE = subdirs + +qtHaveModule(dbus) { +!mac:!win32:SUBDIRS += fcitx +!mac:!win32:SUBDIRS += ibus +} + +contains(QT_CONFIG, xcb-plugin): SUBDIRS += compose + + From c16ea77c5210838b79c9212ebf23c2cba8b471e0 Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 13 Aug 2015 18:11:07 +0300 Subject: [PATCH 095/121] altering AppUserModelId in pinned shortcut in Windows --- Telegram/SourceFiles/application.cpp | 2 - Telegram/SourceFiles/localstorage.cpp | 10 +- Telegram/SourceFiles/localstorage.h | 2 + Telegram/SourceFiles/main.cpp | 3 + Telegram/SourceFiles/pspecific_linux.cpp | 4 + Telegram/SourceFiles/pspecific_linux.h | 2 +- Telegram/SourceFiles/pspecific_mac.cpp | 2 +- Telegram/SourceFiles/pspecific_mac.h | 2 +- Telegram/SourceFiles/pspecific_wnd.cpp | 125 ++++++++++++++++++++++- Telegram/SourceFiles/pspecific_wnd.h | 2 +- 10 files changed, 143 insertions(+), 11 deletions(-) diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index 867e035fa..a7a0eb029 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -110,7 +110,6 @@ Application::Application(int &argc, char **argv) : PsApplication(argc, argv), } mainApp = this; - installEventFilter(new EventFilterForKeys(this)); QFontDatabase::addApplicationFont(qsl(":/gui/art/fonts/OpenSans-Regular.ttf")); @@ -655,7 +654,6 @@ void Application::socketError(QLocalSocket::LocalSocketError e) { void Application::checkMapVersion() { if (Local::oldMapVersion() < AppVersion) { - psRegisterCustomScheme(); if (Local::oldMapVersion()) { QString versionFeatures; if (cDevVersion() && Local::oldMapVersion() < 8049) { diff --git a/Telegram/SourceFiles/localstorage.cpp b/Telegram/SourceFiles/localstorage.cpp index 0ca20aca2..125041324 100644 --- a/Telegram/SourceFiles/localstorage.cpp +++ b/Telegram/SourceFiles/localstorage.cpp @@ -541,7 +541,7 @@ namespace { int32 _storageImagesSize = 0, _storageStickersSize = 0, _storageAudiosSize = 0; bool _mapChanged = false; - int32 _oldMapVersion = 0; + int32 _oldMapVersion = 0, _oldSettingsVersion = 0; enum WriteMapWhen { WriteMapNow, @@ -1573,6 +1573,9 @@ namespace { _readMtpData(); LOG(("Map read time: %1").arg(getms() - ms)); + if (_oldSettingsVersion < AppVersion) { + Local::writeSettings(); + } return Local::ReadMapDone; } @@ -1820,6 +1823,7 @@ namespace Local { cSetDcOptions(dcOpts); } + _oldSettingsVersion = settingsData.version; _settingsSalt = salt; } @@ -1962,6 +1966,10 @@ namespace Local { return _oldMapVersion; } + int32 oldSettingsVersion() { + return _oldSettingsVersion; + } + void writeDraft(const PeerId &peer, const MessageDraft &draft) { if (!_working()) return; diff --git a/Telegram/SourceFiles/localstorage.h b/Telegram/SourceFiles/localstorage.h index 65fe3c7cf..11b3f3871 100644 --- a/Telegram/SourceFiles/localstorage.h +++ b/Telegram/SourceFiles/localstorage.h @@ -100,6 +100,8 @@ namespace Local { ReadMapState readMap(const QByteArray &pass); int32 oldMapVersion(); + int32 oldSettingsVersion(); + struct MessageDraft { MessageDraft(MsgId replyTo = 0, QString text = QString(), bool previewCancelled = false) : replyTo(replyTo), text(text), previewCancelled(previewCancelled) { } diff --git a/Telegram/SourceFiles/main.cpp b/Telegram/SourceFiles/main.cpp index e282a889b..26b897b08 100644 --- a/Telegram/SourceFiles/main.cpp +++ b/Telegram/SourceFiles/main.cpp @@ -39,6 +39,9 @@ int main(int argc, char *argv[]) { logsInit(); Local::readSettings(); + if (Local::oldSettingsVersion() < AppVersion) { + psNewVersion(); + } if (cFromAutoStart() && !cAutoStart()) { psAutoStart(false, true); Local::stop(); diff --git a/Telegram/SourceFiles/pspecific_linux.cpp b/Telegram/SourceFiles/pspecific_linux.cpp index d0af09881..3c96e062b 100644 --- a/Telegram/SourceFiles/pspecific_linux.cpp +++ b/Telegram/SourceFiles/pspecific_linux.cpp @@ -1249,6 +1249,10 @@ void psRegisterCustomScheme() { } } +void psNewVersion() { + psRegisterCustomScheme(); +} + bool _execUpdater(bool update = true) { static const int MaxLen = 65536, MaxArgsCount = 128; diff --git a/Telegram/SourceFiles/pspecific_linux.h b/Telegram/SourceFiles/pspecific_linux.h index a4de7f9ba..3c2c2bd8d 100644 --- a/Telegram/SourceFiles/pspecific_linux.h +++ b/Telegram/SourceFiles/pspecific_linux.h @@ -163,7 +163,7 @@ void psShowInFolder(const QString &name); void psStart(); void psFinish(); -void psRegisterCustomScheme(); +void psNewVersion(); void psUpdateOverlayed(QWidget *widget); inline QString psConvertFileUrl(const QString &url) { diff --git a/Telegram/SourceFiles/pspecific_mac.cpp b/Telegram/SourceFiles/pspecific_mac.cpp index 9ee389640..0cac59f75 100644 --- a/Telegram/SourceFiles/pspecific_mac.cpp +++ b/Telegram/SourceFiles/pspecific_mac.cpp @@ -653,7 +653,7 @@ void psFinish() { objc_finish(); } -void psRegisterCustomScheme() { +void psNewVersion() { objc_registerCustomScheme(); } diff --git a/Telegram/SourceFiles/pspecific_mac.h b/Telegram/SourceFiles/pspecific_mac.h index a9807a175..b7664d2dd 100644 --- a/Telegram/SourceFiles/pspecific_mac.h +++ b/Telegram/SourceFiles/pspecific_mac.h @@ -193,7 +193,7 @@ void psShowInFolder(const QString &name); void psStart(); void psFinish(); -void psRegisterCustomScheme(); +void psNewVersion(); void psUpdateOverlayed(QWidget *widget); QString psConvertFileUrl(const QString &url); diff --git a/Telegram/SourceFiles/pspecific_wnd.cpp b/Telegram/SourceFiles/pspecific_wnd.cpp index d8dd244c7..2d950ac48 100644 --- a/Telegram/SourceFiles/pspecific_wnd.cpp +++ b/Telegram/SourceFiles/pspecific_wnd.cpp @@ -1197,6 +1197,7 @@ void PsMainWindow::psInitSize() { bool InitToastManager(); bool CreateToast(PeerData *peer, int32 msgId, bool showpix, const QString &title, const QString &subtitle, const QString &msg); +void CheckPinnedAppUserModelId(); void CleanupAppUserModelIdShortcut(); void PsMainWindow::psInitFrameless() { @@ -2197,9 +2198,7 @@ namespace { } } -void psRegisterCustomScheme() { - - +void RegisterCustomScheme() { DEBUG_LOG(("App Info: Checking custom scheme 'tg'..")); HKEY rkey; @@ -2218,6 +2217,11 @@ void psRegisterCustomScheme() { if (!_psSetKeyValue(rkey, 0, '"' + exe + qsl("\" -workdir \"") + cWorkingDir() + qsl("\" -- \"%1\""))) return; } +void psNewVersion() { + RegisterCustomScheme(); + CheckPinnedAppUserModelId(); +} + void psExecUpdater() { QString targs = qsl("-update"); if (cFromAutoStart()) targs += qsl(" -autostart"); @@ -2805,6 +2809,120 @@ bool CreateToast(PeerData *peer, int32 msgId, bool showpix, const QString &title return true; } +QString pinnedPath() { + static const int maxFileLen = MAX_PATH * 10; + WCHAR wstrPath[maxFileLen]; + if (GetEnvironmentVariable(L"APPDATA", wstrPath, maxFileLen)) { + QDir appData(QString::fromStdWString(std::wstring(wstrPath))); + return appData.absolutePath() + qsl("/Microsoft/Internet Explorer/Quick Launch/User Pinned/TaskBar/"); + } + return QString(); +} + +void CheckPinnedAppUserModelId() { + static const int maxFileLen = MAX_PATH * 10; + + HRESULT hr = CoInitialize(0); + if (!SUCCEEDED(hr)) return; + + QString path = pinnedPath(); + std::wstring p = QDir::toNativeSeparators(path).toStdWString(); + + WCHAR src[MAX_PATH]; + GetModuleFileNameEx(GetCurrentProcess(), nullptr, src, MAX_PATH); + BY_HANDLE_FILE_INFORMATION srcinfo = { 0 }; + HANDLE srcfile = CreateFile(src, 0x00, 0x00, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (srcfile == INVALID_HANDLE_VALUE) return; + BOOL srcres = GetFileInformationByHandle(srcfile, &srcinfo); + CloseHandle(srcfile); + if (!srcres) return; + LOG(("Checking..")); + WIN32_FIND_DATA findData; + HANDLE findHandle = FindFirstFileEx((p + L"*").c_str(), FindExInfoStandard, &findData, FindExSearchNameMatch, 0, 0); + if (findHandle == INVALID_HANDLE_VALUE) { + LOG(("Init Error: could not find files in pinned folder")); + return; + } + do { + std::wstring fname = p + findData.cFileName; + LOG(("Checking %1").arg(QString::fromStdWString(fname))); + if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { + continue; + } else { + DWORD attributes = GetFileAttributes(fname.c_str()); + if (attributes >= 0xFFFFFFF) continue; // file does not exist + + ComPtr shellLink; + HRESULT hr = CoCreateInstance(CLSID_ShellLink, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&shellLink)); + if (!SUCCEEDED(hr)) continue; + + ComPtr persistFile; + hr = shellLink.As(&persistFile); + if (!SUCCEEDED(hr)) continue; + + hr = persistFile->Load(fname.c_str(), STGM_READWRITE); + if (!SUCCEEDED(hr)) continue; + + WCHAR dst[MAX_PATH]; + hr = shellLink->GetPath(dst, MAX_PATH, 0, 0); + if (!SUCCEEDED(hr)) continue; + + BY_HANDLE_FILE_INFORMATION dstinfo = { 0 }; + HANDLE dstfile = CreateFile(dst, 0x00, 0x00, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (dstfile == INVALID_HANDLE_VALUE) continue; + BOOL dstres = GetFileInformationByHandle(dstfile, &dstinfo); + CloseHandle(dstfile); + if (!dstres) continue; + + if (srcinfo.dwVolumeSerialNumber == dstinfo.dwVolumeSerialNumber && srcinfo.nFileIndexLow == dstinfo.nFileIndexLow && srcinfo.nFileIndexHigh == dstinfo.nFileIndexHigh) { + ComPtr propertyStore; + hr = shellLink.As(&propertyStore); + if (!SUCCEEDED(hr)) return; + + PROPVARIANT appIdPropVar; + hr = propertyStore->GetValue(pkey_AppUserModel_ID, &appIdPropVar); + if (!SUCCEEDED(hr)) return; + LOG(("Reading..")); + WCHAR already[MAX_PATH]; + hr = propVariantToString(appIdPropVar, already, MAX_PATH); + if (SUCCEEDED(hr)) { + if (std::wstring(AppUserModelId) == already) { + LOG(("Already!")); + PropVariantClear(&appIdPropVar); + return; + } + } + if (appIdPropVar.vt != VT_EMPTY) { + PropVariantClear(&appIdPropVar); + return; + } + PropVariantClear(&appIdPropVar); + + hr = InitPropVariantFromString(AppUserModelId, &appIdPropVar); + if (!SUCCEEDED(hr)) return; + + hr = propertyStore->SetValue(pkey_AppUserModel_ID, appIdPropVar); + PropVariantClear(&appIdPropVar); + if (!SUCCEEDED(hr)) return; + + hr = propertyStore->Commit(); + if (!SUCCEEDED(hr)) return; + + if (persistFile->IsDirty() == S_OK) { + persistFile->Save(fname.c_str(), TRUE); + } + return; + } + } + } while (FindNextFile(findHandle, &findData)); + DWORD errorCode = GetLastError(); + if (errorCode && errorCode != ERROR_NO_MORE_FILES) { // everything is found + LOG(("Init Error: could not find some files in pinned folder")); + return; + } + FindClose(findHandle); +} + QString systemShortcutPath() { static const int maxFileLen = MAX_PATH * 10; WCHAR wstrPath[maxFileLen]; @@ -2963,7 +3081,6 @@ bool ValidateAppUserModelIdShortcut() { bool InitToastManager() { if (!useToast || !ValidateAppUserModelIdShortcut()) return false; - if (!SUCCEEDED(setCurrentProcessExplicitAppUserModelID(AppUserModelId))) { return false; } diff --git a/Telegram/SourceFiles/pspecific_wnd.h b/Telegram/SourceFiles/pspecific_wnd.h index bf07c1c1a..3cb01cd2c 100644 --- a/Telegram/SourceFiles/pspecific_wnd.h +++ b/Telegram/SourceFiles/pspecific_wnd.h @@ -168,7 +168,7 @@ void psShowInFolder(const QString &name); void psStart(); void psFinish(); -void psRegisterCustomScheme(); +void psNewVersion(); void psUpdateOverlayed(TWidget *widget); inline QString psConvertFileUrl(const QString &url) { From 9002a49fcc357d6cf593da8e56e1b5468eb6b124 Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 13 Aug 2015 18:26:38 +0300 Subject: [PATCH 096/121] added patch for fcitx input in linux --- Telegram/_qt_5_5_0_patch.diff | 10832 ++++++++++++++++ .../platforminputcontexts/compose/compose.pro | 2 +- .../platforminputcontexts/fcitx/Makefile | 6085 --------- .../platforminputcontexts/fcitx/fcitx.pro | 2 +- 4 files changed, 10834 insertions(+), 6087 deletions(-) delete mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/Makefile diff --git a/Telegram/_qt_5_5_0_patch.diff b/Telegram/_qt_5_5_0_patch.diff index d713f4ae5..aed8c6268 100644 --- a/Telegram/_qt_5_5_0_patch.diff +++ b/Telegram/_qt_5_5_0_patch.diff @@ -368,6 +368,10838 @@ index be70092..1594dac 100644 fd->styleName = (CFStringRef)CTFontDescriptorCopyAttribute(font, kCTFontStyleNameAttribute); fd->weight = QFont::Normal; fd->style = QFont::StyleNormal; +diff --git a/qtbase/src/plugins/platforminputcontexts/compose/compose.pro b/qtbase/src/plugins/platforminputcontexts/compose/compose.pro +index a9da36c..65183b6 100644 +--- a/qtbase/src/plugins/platforminputcontexts/compose/compose.pro ++++ b/qtbase/src/plugins/platforminputcontexts/compose/compose.pro +@@ -20,7 +20,7 @@ HEADERS += $$PWD/qcomposeplatforminputcontext.h \ + contains(QT_CONFIG, xkbcommon-qt): { + # dont't need x11 dependency for compose key plugin + QT_CONFIG -= use-xkbcommon-x11support +- include(../../../3rdparty/xkbcommon.pri) ++# include(../../../3rdparty/xkbcommon.pri) + } else { + LIBS += $$QMAKE_LIBS_XKBCOMMON + QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_XKBCOMMON +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.json b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.json +new file mode 100644 +index 0000000..6d2b389 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.json +@@ -0,0 +1,3 @@ ++{ ++ "Keys": [ "fcitx" ] ++} +\ No newline at end of file +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.pro b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.pro +new file mode 100644 +index 0000000..cbd3ab7 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.pro +@@ -0,0 +1,38 @@ ++TARGET = fcitxplatforminputcontextplugin ++ ++PLUGIN_TYPE = platforminputcontexts ++PLUGIN_EXTENDS = - ++PLUGIN_CLASS_NAME = QFcitxPlatformInputContextPlugin ++load(qt_plugin) ++ ++QT += dbus gui-private ++SOURCES += $$PWD/fcitxqtconnection.cpp \ ++ $$PWD/fcitxqtformattedpreedit.cpp \ ++ $$PWD/fcitxqtinputcontextproxy.cpp \ ++ $$PWD/fcitxqtinputmethoditem.cpp \ ++ $$PWD/fcitxqtinputmethodproxy.cpp \ ++ $$PWD/fcitxqtkeyboardlayout.cpp \ ++ $$PWD/fcitxqtkeyboardproxy.cpp \ ++ $$PWD/keyuni.cpp \ ++ $$PWD/main.cpp \ ++ $$PWD/qfcitxplatforminputcontext.cpp \ ++ $$PWD/utils.cpp ++ ++HEADERS += $$PWD/fcitxqtconnection.h \ ++ $$PWD/fcitxqtconnection_p.h \ ++ $$PWD/fcitxqtdbusaddons_export.h \ ++ $$PWD/fcitxqtdbusaddons_version.h \ ++ $$PWD/fcitxqtformattedpreedit.h \ ++ $$PWD/fcitxqtinputcontextproxy.h \ ++ $$PWD/fcitxqtinputmethoditem.h \ ++ $$PWD/fcitxqtinputmethodproxy.h \ ++ $$PWD/fcitxqtkeyboardlayout.h \ ++ $$PWD/fcitxqtkeyboardproxy.h \ ++ $$PWD/keydata.h \ ++ $$PWD/keyserver_x11.h \ ++ $$PWD/keyuni.h \ ++ $$PWD/main.h \ ++ $$PWD/qfcitxplatforminputcontext.h \ ++ $$PWD/utils.h ++ ++OTHER_FILES += $$PWD/fcitx.json +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.cpp b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.cpp +new file mode 100644 +index 0000000..a50178a +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.cpp +@@ -0,0 +1,369 @@ ++/*************************************************************************** ++ * Copyright (C) 2012~2012 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 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 General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#include "fcitxqtconnection_p.h" ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++// utils function in fcitx-utils and fcitx-config ++bool _pid_exists(pid_t pid) { ++ if (pid <= 0) ++ return 0; ++ return !(kill(pid, 0) && (errno == ESRCH)); ++} ++ ++ ++FcitxQtConnection::FcitxQtConnection(QObject* parent): QObject(parent) ++ ,d_ptr(new FcitxQtConnectionPrivate(this)) ++{ ++} ++ ++void FcitxQtConnection::startConnection() ++{ ++ Q_D(FcitxQtConnection); ++ if (!d->m_initialized) { ++ d->initialize(); ++ d->createConnection(); ++ } ++} ++ ++void FcitxQtConnection::endConnection() ++{ ++ Q_D(FcitxQtConnection); ++ d->cleanUp(); ++ d->finalize(); ++ d->m_connectedOnce = false; ++} ++ ++bool FcitxQtConnection::autoReconnect() ++{ ++ Q_D(FcitxQtConnection); ++ return d->m_autoReconnect; ++} ++ ++void FcitxQtConnection::setAutoReconnect(bool a) ++{ ++ Q_D(FcitxQtConnection); ++ d->m_autoReconnect = a; ++} ++ ++QDBusConnection* FcitxQtConnection::connection() ++{ ++ Q_D(FcitxQtConnection); ++ return d->m_connection; ++} ++ ++const QString& FcitxQtConnection::serviceName() ++{ ++ Q_D(FcitxQtConnection); ++ return d->m_serviceName; ++} ++ ++bool FcitxQtConnection::isConnected() ++{ ++ Q_D(FcitxQtConnection); ++ return d->isConnected(); ++} ++ ++ ++ ++FcitxQtConnection::~FcitxQtConnection() ++{ ++} ++ ++FcitxQtConnectionPrivate::FcitxQtConnectionPrivate(FcitxQtConnection* conn) : QObject(conn) ++ ,q_ptr(conn) ++ ,m_displayNumber(-1) ++ ,m_serviceName(QString("%1-%2").arg("org.fcitx.Fcitx").arg(displayNumber())) ++ ,m_connection(0) ++ ,m_serviceWatcher(new QDBusServiceWatcher(conn)) ++ ,m_watcher(new QFileSystemWatcher(this)) ++ ,m_autoReconnect(true) ++ ,m_connectedOnce(false) ++ ,m_initialized(false) ++{ ++} ++ ++FcitxQtConnectionPrivate::~FcitxQtConnectionPrivate() ++{ ++ if (m_connection) ++ delete m_connection; ++} ++ ++void FcitxQtConnectionPrivate::initialize() { ++ m_serviceWatcher->setConnection(QDBusConnection::sessionBus()); ++ m_serviceWatcher->addWatchedService(m_serviceName); ++ ++ QFileInfo info(socketFile()); ++ QDir dir(info.path()); ++ if (!dir.exists()) { ++ QDir rt(QDir::root()); ++ rt.mkpath(info.path()); ++ } ++ m_watcher->addPath(info.path()); ++ if (info.exists()) { ++ m_watcher->addPath(info.filePath()); ++ } ++ ++ connect(m_watcher, SIGNAL(fileChanged(QString)), this, SLOT(socketFileChanged())); ++ connect(m_watcher, SIGNAL(directoryChanged(QString)), this, SLOT(socketFileChanged())); ++ m_initialized = true; ++} ++ ++void FcitxQtConnectionPrivate::finalize() { ++ m_serviceWatcher->removeWatchedService(m_serviceName); ++ m_watcher->removePaths(m_watcher->files()); ++ m_watcher->removePaths(m_watcher->directories()); ++ m_watcher->disconnect(SIGNAL(fileChanged(QString))); ++ m_watcher->disconnect(SIGNAL(directoryChanged(QString))); ++ m_initialized = false; ++} ++ ++void FcitxQtConnectionPrivate::socketFileChanged() { ++ QFileInfo info(socketFile()); ++ if (info.exists()) { ++ if (m_watcher->files().indexOf(info.filePath()) == -1) ++ m_watcher->addPath(info.filePath()); ++ } ++ ++ QString addr = address(); ++ if (addr.isNull()) ++ return; ++ ++ cleanUp(); ++ createConnection(); ++} ++ ++QByteArray FcitxQtConnectionPrivate::localMachineId() ++{ ++#if QT_VERSION >= QT_VERSION_CHECK(4, 8, 0) ++ return QDBusConnection::localMachineId(); ++#else ++ QFile file1("/var/lib/dbus/machine-id"); ++ QFile file2("/etc/machine-id"); ++ QFile* fileToRead = NULL; ++ if (file1.open(QIODevice::ReadOnly)) { ++ fileToRead = &file1; ++ } ++ else if (file2.open(QIODevice::ReadOnly)) { ++ fileToRead = &file2; ++ } ++ if (fileToRead) { ++ QByteArray result = fileToRead->readLine(1024); ++ fileToRead->close(); ++ result = result.trimmed(); ++ if (!result.isEmpty()) ++ return result; ++ } ++ return "machine-id"; ++#endif ++} ++ ++int FcitxQtConnectionPrivate::displayNumber() { ++ if (m_displayNumber < 0) { ++ QByteArray displayNumber("0"); ++ QByteArray display(qgetenv("DISPLAY")); ++ int pos = display.indexOf(':'); ++ ++ if (pos >= 0) { ++ ++pos; ++ int pos2 = display.indexOf('.', pos); ++ if (pos2 > 0) { ++ displayNumber = display.mid(pos, pos2 - pos); ++ } else { ++ displayNumber = display.mid(pos); ++ } ++ } ++ ++ bool ok; ++ int d = displayNumber.toInt(&ok); ++ if (ok) { ++ m_displayNumber = d; ++ } else { ++ m_displayNumber = 0; ++ } ++ } ++ ++ return m_displayNumber; ++} ++ ++const QString& FcitxQtConnectionPrivate::socketFile() ++{ ++ if (!m_socketFile.isEmpty()) ++ return m_socketFile; ++ ++ QString filename = QString("%1-%2").arg(QString::fromLatin1(QDBusConnection::localMachineId())).arg(displayNumber()); ++ ++ QString home = QString::fromLocal8Bit(qgetenv("XDG_CONFIG_HOME")); ++ if (home.isEmpty()) { ++ home = QDir::homePath().append(QLatin1Literal("/.config")); ++ } ++ m_socketFile = QString("%1/fcitx/dbus/%2").arg(home).arg(filename); ++ ++ return m_socketFile; ++} ++ ++QString FcitxQtConnectionPrivate::address() ++{ ++ QString addr; ++ QByteArray addrVar = qgetenv("FCITX_DBUS_ADDRESS"); ++ if (!addrVar.isNull()) ++ return QString::fromLocal8Bit(addrVar); ++ ++ QFile file(socketFile()); ++ if (!file.open(QIODevice::ReadOnly)) ++ return QString(); ++ ++ const int BUFSIZE = 1024; ++ ++ char buffer[BUFSIZE]; ++ size_t sz = file.read(buffer, BUFSIZE); ++ file.close(); ++ if (sz == 0) ++ return QString(); ++ char* p = buffer; ++ while(*p) ++ p++; ++ size_t addrlen = p - buffer; ++ if (sz != addrlen + 2 * sizeof(pid_t) + 1) ++ return QString(); ++ ++ /* skip '\0' */ ++ p++; ++ pid_t *ppid = (pid_t*) p; ++ pid_t daemonpid = ppid[0]; ++ pid_t fcitxpid = ppid[1]; ++ ++ if (!_pid_exists(daemonpid) ++ || !_pid_exists(fcitxpid)) ++ return QString(); ++ ++ addr = QLatin1String(buffer); ++ ++ return addr; ++} ++ ++void FcitxQtConnectionPrivate::createConnection() { ++ if (m_connectedOnce && !m_autoReconnect) { ++ return; ++ } ++ ++ m_serviceWatcher->disconnect(SIGNAL(serviceOwnerChanged(QString,QString,QString))); ++ QString addr = address(); ++ if (!addr.isNull()) { ++ QDBusConnection connection(QDBusConnection::connectToBus(addr, "fcitx")); ++ if (connection.isConnected()) { ++ // qDebug() << "create private"; ++ m_connection = new QDBusConnection(connection); ++ } ++ else ++ QDBusConnection::disconnectFromBus("fcitx"); ++ } ++ ++ if (!m_connection) { ++ QDBusConnection* connection = new QDBusConnection(QDBusConnection::sessionBus()); ++ connect(m_serviceWatcher, SIGNAL(serviceOwnerChanged(QString,QString,QString)), this, SLOT(imChanged(QString,QString,QString))); ++ QDBusReply registered = connection->interface()->isServiceRegistered(m_serviceName); ++ if (!registered.isValid() || !registered.value()) { ++ delete connection; ++ } ++ else { ++ m_connection = connection; ++ } ++ } ++ ++ Q_Q(FcitxQtConnection); ++ if (m_connection) { ++ ++ m_connection->connect ("org.freedesktop.DBus.Local", ++ "/org/freedesktop/DBus/Local", ++ "org.freedesktop.DBus.Local", ++ "Disconnected", ++ this, ++ SLOT (dbusDisconnected ())); ++ m_connectedOnce = true; ++ emit q->connected(); ++ } ++} ++ ++ ++void FcitxQtConnectionPrivate::dbusDisconnected() ++{ ++ cleanUp(); ++ ++ createConnection(); ++} ++ ++void FcitxQtConnectionPrivate::imChanged(const QString& service, const QString& oldowner, const QString& newowner) ++{ ++ if (service == m_serviceName) { ++ /* old die */ ++ if (oldowner.length() > 0 || newowner.length() > 0) ++ cleanUp(); ++ ++ /* new rise */ ++ if (newowner.length() > 0) { ++ QTimer::singleShot(100, this, SLOT(newServiceAppear())); ++ } ++ } ++} ++ ++void FcitxQtConnectionPrivate::cleanUp() ++{ ++ Q_Q(FcitxQtConnection); ++ bool doemit = false; ++ QDBusConnection::disconnectFromBus("fcitx"); ++ if (m_connection) { ++ delete m_connection; ++ m_connection = 0; ++ doemit = true; ++ } ++ ++ if (!m_autoReconnect && m_connectedOnce) ++ finalize(); ++ ++ /* we want m_connection and finalize being called before the signal ++ * thus isConnected will return false in slot ++ * and startConnection can be called in slot ++ */ ++ if (doemit) ++ emit q->disconnected(); ++} ++ ++bool FcitxQtConnectionPrivate::isConnected() ++{ ++ return m_connection && m_connection->isConnected(); ++} ++ ++void FcitxQtConnectionPrivate::newServiceAppear() { ++ if (!isConnected()) { ++ cleanUp(); ++ ++ createConnection(); ++ } ++} +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.h b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.h +new file mode 100644 +index 0000000..efe255f +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection.h +@@ -0,0 +1,111 @@ ++/*************************************************************************** ++ * Copyright (C) 2012~2012 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 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 General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#ifndef FCITXQTCONNECTION_H ++#define FCITXQTCONNECTION_H ++ ++#include "fcitxqtdbusaddons_export.h" ++ ++#include ++ ++class QDBusConnection; ++ ++class FcitxQtConnectionPrivate; ++ ++ ++/** ++ * dbus connection to fcitx ++ **/ ++class FCITXQTDBUSADDONS_EXPORT FcitxQtConnection : public QObject { ++ Q_OBJECT ++ Q_PROPERTY(bool autoReconnect READ autoReconnect WRITE setAutoReconnect) ++ Q_PROPERTY(bool connected READ isConnected) ++ Q_PROPERTY(QDBusConnection* connection READ connection) ++ Q_PROPERTY(QString serviceName READ serviceName) ++public: ++ /** ++ * create a new connection ++ * ++ * @param parent ++ **/ ++ explicit FcitxQtConnection(QObject* parent = 0); ++ ++ /** ++ * destroy the connection ++ **/ ++ virtual ~FcitxQtConnection(); ++ ++ /** ++ * the connection will not start to work until you call this function ++ * you may want to connect to the signal before you call this function ++ **/ ++ void startConnection(); ++ void endConnection(); ++ /** ++ * automatically reconnect if fcitx disappeared ++ * ++ * @param a ... ++ * @return void ++ **/ ++ void setAutoReconnect(bool a); ++ ++ /** ++ * check this connection is doing automatical reconnect or not ++ * ++ * default value is true ++ **/ ++ bool autoReconnect(); ++ ++ /** ++ * return the current dbus connection to fcitx, notice, the object return ++ * by this function might be deteled if fcitx disappear, or might return 0 ++ * if fcitx is not running ++ * ++ * @return QDBusConnection* ++ **/ ++ QDBusConnection* connection(); ++ /** ++ * current fcitx dbus service name, can be used for create DBus proxy ++ * ++ * @return service name ++ **/ ++ const QString& serviceName(); ++ /** ++ * check its connected or not ++ **/ ++ bool isConnected(); ++ ++Q_SIGNALS: ++ /** ++ * this signal will be emitted upon fcitx appears ++ **/ ++ void connected(); ++ /** ++ * this signal will be emitted upon fcitx disappears ++ * ++ * it will come with connected in pair ++ **/ ++ void disconnected(); ++ ++private: ++ FcitxQtConnectionPrivate * const d_ptr; ++ Q_DECLARE_PRIVATE(FcitxQtConnection); ++}; ++ ++#endif // FCITXCONNECTION_H +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection_p.h b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection_p.h +new file mode 100644 +index 0000000..dda726a +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtconnection_p.h +@@ -0,0 +1,68 @@ ++/*************************************************************************** ++ * Copyright (C) 2012~2012 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 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 General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#ifndef FCITXQTCONNECTION_P_H ++#define FCITXQTCONNECTION_P_H ++ ++#include "fcitxqtconnection.h" ++#include ++#include ++ ++class QDBusConnection; ++class QDBusServiceWatcher; ++ ++class FcitxQtConnectionPrivate : public QObject { ++ Q_OBJECT ++public: ++ FcitxQtConnectionPrivate(FcitxQtConnection* conn); ++ virtual ~FcitxQtConnectionPrivate(); ++ FcitxQtConnection * const q_ptr; ++ Q_DECLARE_PUBLIC(FcitxQtConnection); ++ ++private Q_SLOTS: ++ void imChanged(const QString& service, const QString& oldowner, const QString& newowner); ++ void dbusDisconnected(); ++ void cleanUp(); ++ void newServiceAppear(); ++ void socketFileChanged(); ++ ++private: ++ bool isConnected(); ++ ++ static QByteArray localMachineId(); ++ const QString& socketFile(); ++ void createConnection(); ++ QString address(); ++ int displayNumber(); ++ void initialize(); ++ void finalize(); ++ ++ int m_displayNumber; ++ QString m_serviceName; ++ QDBusConnection* m_connection; ++ QDBusServiceWatcher* m_serviceWatcher; ++ QFileSystemWatcher* m_watcher; ++ QString m_socketFile; ++ bool m_autoReconnect; ++ bool m_connectedOnce; ++ bool m_initialized; ++}; ++ ++ ++#endif // FCITXCONNECTION_P_H +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_export.h b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_export.h +new file mode 100644 +index 0000000..3fabfb9 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_export.h +@@ -0,0 +1,41 @@ ++ ++#ifndef FCITXQTDBUSADDONS_EXPORT_H ++#define FCITXQTDBUSADDONS_EXPORT_H ++ ++#ifdef FCITXQTDBUSADDONS_STATIC_DEFINE ++# define FCITXQTDBUSADDONS_EXPORT ++# define FCITXQTDBUSADDONS_NO_EXPORT ++#else ++# ifndef FCITXQTDBUSADDONS_EXPORT ++# ifdef FcitxQt5DBusAddons_EXPORTS ++ /* We are building this library */ ++# define FCITXQTDBUSADDONS_EXPORT __attribute__((visibility("default"))) ++# else ++ /* We are using this library */ ++# define FCITXQTDBUSADDONS_EXPORT __attribute__((visibility("default"))) ++# endif ++# endif ++ ++# ifndef FCITXQTDBUSADDONS_NO_EXPORT ++# define FCITXQTDBUSADDONS_NO_EXPORT __attribute__((visibility("hidden"))) ++# endif ++#endif ++ ++#ifndef FCITXQTDBUSADDONS_DEPRECATED ++# define FCITXQTDBUSADDONS_DEPRECATED __attribute__ ((__deprecated__)) ++#endif ++ ++#ifndef FCITXQTDBUSADDONS_DEPRECATED_EXPORT ++# define FCITXQTDBUSADDONS_DEPRECATED_EXPORT FCITXQTDBUSADDONS_EXPORT FCITXQTDBUSADDONS_DEPRECATED ++#endif ++ ++#ifndef FCITXQTDBUSADDONS_DEPRECATED_NO_EXPORT ++# define FCITXQTDBUSADDONS_DEPRECATED_NO_EXPORT FCITXQTDBUSADDONS_NO_EXPORT FCITXQTDBUSADDONS_DEPRECATED ++#endif ++ ++#define DEFINE_NO_DEPRECATED 0 ++#if DEFINE_NO_DEPRECATED ++# define FCITXQTDBUSADDONS_NO_DEPRECATED ++#endif ++ ++#endif +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_version.h b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_version.h +new file mode 100644 +index 0000000..7b6dbf4 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtdbusaddons_version.h +@@ -0,0 +1,11 @@ ++ ++#ifndef FCITXQT5DBUSADDONS_VERSION_H ++#define FCITXQT5DBUSADDONS_VERSION_H ++ ++#define FCITXQT5DBUSADDONS_VERSION_STRING "1.0.0" ++#define FCITXQT5DBUSADDONS_VERSION_MAJOR 1 ++#define FCITXQT5DBUSADDONS_VERSION_MINOR 0 ++#define FCITXQT5DBUSADDONS_VERSION_PATCH 0 ++#define FCITXQT5DBUSADDONS_VERSION ((1<<16)|(0<<8)|(0)) ++ ++#endif +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.cpp b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.cpp +new file mode 100644 +index 0000000..c6af845 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.cpp +@@ -0,0 +1,78 @@ ++/*************************************************************************** ++ * Copyright (C) 2012~2012 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 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 General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#include ++ ++#include "fcitxqtformattedpreedit.h" ++ ++void FcitxQtFormattedPreedit::registerMetaType() ++{ ++ qRegisterMetaType("FcitxQtFormattedPreedit"); ++ qDBusRegisterMetaType(); ++ qRegisterMetaType("FcitxQtFormattedPreeditList"); ++ qDBusRegisterMetaType(); ++} ++ ++qint32 FcitxQtFormattedPreedit::format() const ++{ ++ return m_format; ++} ++ ++const QString& FcitxQtFormattedPreedit::string() const ++{ ++ return m_string; ++} ++ ++void FcitxQtFormattedPreedit::setFormat(qint32 format) ++{ ++ m_format = format; ++} ++ ++void FcitxQtFormattedPreedit::setString(const QString& str) ++{ ++ m_string = str; ++} ++ ++bool FcitxQtFormattedPreedit::operator==(const FcitxQtFormattedPreedit& preedit) const ++{ ++ return (preedit.m_format == m_format) && (preedit.m_string == m_string); ++} ++ ++FCITXQTDBUSADDONS_EXPORT ++QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtFormattedPreedit& preedit) ++{ ++ argument.beginStructure(); ++ argument << preedit.string(); ++ argument << preedit.format(); ++ argument.endStructure(); ++ return argument; ++} ++ ++FCITXQTDBUSADDONS_EXPORT ++const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtFormattedPreedit& preedit) ++{ ++ QString str; ++ qint32 format; ++ argument.beginStructure(); ++ argument >> str >> format; ++ argument.endStructure(); ++ preedit.setString(str); ++ preedit.setFormat(format); ++ return argument; ++} +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.h b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.h +new file mode 100644 +index 0000000..a00355c +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtformattedpreedit.h +@@ -0,0 +1,51 @@ ++/*************************************************************************** ++ * Copyright (C) 2012~2012 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 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 General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#ifndef FCITX_QT_FORMATTED_PREEDIT_H ++#define FCITX_QT_FORMATTED_PREEDIT_H ++ ++#include "fcitxqtdbusaddons_export.h" ++ ++#include ++#include ++ ++class FCITXQTDBUSADDONS_EXPORT FcitxQtFormattedPreedit { ++public: ++ const QString& string() const; ++ qint32 format() const; ++ void setString(const QString& str); ++ void setFormat(qint32 format); ++ ++ static void registerMetaType(); ++ ++ bool operator ==(const FcitxQtFormattedPreedit& preedit) const; ++private: ++ QString m_string; ++ qint32 m_format; ++}; ++ ++typedef QList FcitxQtFormattedPreeditList; ++ ++QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtFormattedPreedit& im); ++const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtFormattedPreedit& im); ++ ++Q_DECLARE_METATYPE(FcitxQtFormattedPreedit) ++Q_DECLARE_METATYPE(FcitxQtFormattedPreeditList) ++ ++#endif +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.cpp b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.cpp +new file mode 100644 +index 0000000..b47d332 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.cpp +@@ -0,0 +1,26 @@ ++/* ++ * This file was generated by qdbusxml2cpp version 0.8 ++ * Command line was: qdbusxml2cpp -N -p fcitxqtinputcontextproxy -c FcitxQtInputContextProxy interfaces/org.fcitx.Fcitx.InputContext.xml -i fcitxqtformattedpreedit.h -i fcitxqt_export.h ++ * ++ * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ++ * ++ * This is an auto-generated file. ++ * This file may have been hand-edited. Look for HAND-EDIT comments ++ * before re-generating it. ++ */ ++ ++#include "fcitxqtinputcontextproxy.h" ++ ++/* ++ * Implementation of interface class FcitxQtInputContextProxy ++ */ ++ ++FcitxQtInputContextProxy::FcitxQtInputContextProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent) ++ : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent) ++{ ++} ++ ++FcitxQtInputContextProxy::~FcitxQtInputContextProxy() ++{ ++} ++ +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.h b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.h +new file mode 100644 +index 0000000..19874dc +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputcontextproxy.h +@@ -0,0 +1,136 @@ ++/* ++ * This file was generated by qdbusxml2cpp version 0.8 ++ * Command line was: qdbusxml2cpp -N -p fcitxqtinputcontextproxy -c FcitxQtInputContextProxy interfaces/org.fcitx.Fcitx.InputContext.xml -i fcitxqtformattedpreedit.h -i fcitxqt_export.h ++ * ++ * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ++ * ++ * This is an auto-generated file. ++ * Do not edit! All changes made to it will be lost. ++ */ ++ ++#ifndef FCITXQTINPUTCONTEXTPROXY_H_1409252990 ++#define FCITXQTINPUTCONTEXTPROXY_H_1409252990 ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "fcitxqtformattedpreedit.h" ++#include "fcitxqtdbusaddons_export.h" ++ ++/* ++ * Proxy class for interface org.fcitx.Fcitx.InputContext ++ */ ++class FCITXQTDBUSADDONS_EXPORT FcitxQtInputContextProxy: public QDBusAbstractInterface ++{ ++ Q_OBJECT ++public: ++ static inline const char *staticInterfaceName() ++ { return "org.fcitx.Fcitx.InputContext"; } ++ ++public: ++ FcitxQtInputContextProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0); ++ ++ ~FcitxQtInputContextProxy(); ++ ++public Q_SLOTS: // METHODS ++ inline QDBusPendingReply<> CloseIC() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("CloseIC"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> DestroyIC() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("DestroyIC"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> EnableIC() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("EnableIC"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> FocusIn() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("FocusIn"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> FocusOut() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("FocusOut"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> MouseEvent(int x) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(x); ++ return asyncCallWithArgumentList(QLatin1String("MouseEvent"), argumentList); ++ } ++ ++ inline QDBusPendingReply ProcessKeyEvent(uint keyval, uint keycode, uint state, int type, uint time) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(keyval) << QVariant::fromValue(keycode) << QVariant::fromValue(state) << QVariant::fromValue(type) << QVariant::fromValue(time); ++ return asyncCallWithArgumentList(QLatin1String("ProcessKeyEvent"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> Reset() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("Reset"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> SetCapacity(uint caps) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(caps); ++ return asyncCallWithArgumentList(QLatin1String("SetCapacity"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> SetCursorLocation(int x, int y) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(x) << QVariant::fromValue(y); ++ return asyncCallWithArgumentList(QLatin1String("SetCursorLocation"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> SetCursorRect(int x, int y, int w, int h) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(x) << QVariant::fromValue(y) << QVariant::fromValue(w) << QVariant::fromValue(h); ++ return asyncCallWithArgumentList(QLatin1String("SetCursorRect"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> SetSurroundingText(const QString &text, uint cursor, uint anchor) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(text) << QVariant::fromValue(cursor) << QVariant::fromValue(anchor); ++ return asyncCallWithArgumentList(QLatin1String("SetSurroundingText"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> SetSurroundingTextPosition(uint cursor, uint anchor) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(cursor) << QVariant::fromValue(anchor); ++ return asyncCallWithArgumentList(QLatin1String("SetSurroundingTextPosition"), argumentList); ++ } ++ ++Q_SIGNALS: // SIGNALS ++ void CloseIM(); ++ void CommitString(const QString &str); ++ void DeleteSurroundingText(int offset, uint nchar); ++ void EnableIM(); ++ void ForwardKey(uint keyval, uint state, int type); ++ void UpdateClientSideUI(const QString &auxup, const QString &auxdown, const QString &preedit, const QString &candidateword, const QString &imname, int cursorpos); ++ void UpdateFormattedPreedit(FcitxQtFormattedPreeditList str, int cursorpos); ++}; ++ ++#endif +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.cpp b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.cpp +new file mode 100644 +index 0000000..d28ed11 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.cpp +@@ -0,0 +1,95 @@ ++/*************************************************************************** ++ * Copyright (C) 2011~2012 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 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 General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++// Qt ++#include ++#include ++ ++// self ++#include "fcitxqtinputmethoditem.h" ++ ++bool FcitxQtInputMethodItem::enabled() const ++{ ++ return m_enabled; ++} ++const QString& FcitxQtInputMethodItem::langCode() const ++{ ++ return m_langCode; ++} ++const QString& FcitxQtInputMethodItem::name() const ++{ ++ return m_name; ++} ++const QString& FcitxQtInputMethodItem::uniqueName() const ++{ ++ return m_uniqueName; ++} ++void FcitxQtInputMethodItem::setEnabled(bool enable) ++{ ++ m_enabled = enable; ++} ++void FcitxQtInputMethodItem::setLangCode(const QString& lang) ++{ ++ m_langCode = lang; ++} ++void FcitxQtInputMethodItem::setName(const QString& name) ++{ ++ m_name = name; ++} ++void FcitxQtInputMethodItem::setUniqueName(const QString& name) ++{ ++ m_uniqueName = name; ++} ++ ++void FcitxQtInputMethodItem::registerMetaType() ++{ ++ qRegisterMetaType("FcitxQtInputMethodItem"); ++ qDBusRegisterMetaType(); ++ qRegisterMetaType("FcitxQtInputMethodItemList"); ++ qDBusRegisterMetaType(); ++} ++ ++FCITXQTDBUSADDONS_EXPORT ++QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtInputMethodItem& im) ++{ ++ argument.beginStructure(); ++ argument << im.name(); ++ argument << im.uniqueName(); ++ argument << im.langCode(); ++ argument << im.enabled(); ++ argument.endStructure(); ++ return argument; ++} ++ ++FCITXQTDBUSADDONS_EXPORT ++const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtInputMethodItem& im) ++{ ++ QString name; ++ QString uniqueName; ++ QString langCode; ++ bool enabled; ++ argument.beginStructure(); ++ argument >> name >> uniqueName >> langCode >> enabled; ++ argument.endStructure(); ++ im.setName(name); ++ im.setUniqueName(uniqueName); ++ im.setLangCode(langCode); ++ im.setEnabled(enabled); ++ return argument; ++} +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.h b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.h +new file mode 100644 +index 0000000..6b8c780 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethoditem.h +@@ -0,0 +1,64 @@ ++/*************************************************************************** ++ * Copyright (C) 2011~2012 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 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 General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#ifndef FCITX_QT_INPUT_METHOD_ITEM_H ++#define FCITX_QT_INPUT_METHOD_ITEM_H ++ ++#include "fcitxqtdbusaddons_export.h" ++ ++// Qt ++#include ++#include ++#include ++ ++class FCITXQTDBUSADDONS_EXPORT FcitxQtInputMethodItem ++{ ++public: ++ const QString& name() const; ++ const QString& uniqueName() const; ++ const QString& langCode() const; ++ bool enabled() const; ++ ++ void setName(const QString& name); ++ void setUniqueName(const QString& name); ++ void setLangCode(const QString& name); ++ void setEnabled(bool name); ++ static void registerMetaType(); ++ ++ inline bool operator < (const FcitxQtInputMethodItem& im) const { ++ if (m_enabled == true && im.m_enabled == false) ++ return true; ++ return false; ++ } ++private: ++ QString m_name; ++ QString m_uniqueName; ++ QString m_langCode; ++ bool m_enabled; ++}; ++ ++typedef QList FcitxQtInputMethodItemList; ++ ++QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtInputMethodItem& im); ++const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtInputMethodItem& im); ++ ++Q_DECLARE_METATYPE(FcitxQtInputMethodItem) ++Q_DECLARE_METATYPE(FcitxQtInputMethodItemList) ++ ++#endif +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.cpp b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.cpp +new file mode 100644 +index 0000000..068f4c2 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.cpp +@@ -0,0 +1,26 @@ ++/* ++ * This file was generated by qdbusxml2cpp version 0.8 ++ * Command line was: qdbusxml2cpp -N -p fcitxqtinputmethodproxy -c FcitxQtInputMethodProxy interfaces/org.fcitx.Fcitx.InputMethod.xml -i fcitxqtinputmethoditem.h -i fcitxqt_export.h ++ * ++ * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ++ * ++ * This is an auto-generated file. ++ * This file may have been hand-edited. Look for HAND-EDIT comments ++ * before re-generating it. ++ */ ++ ++#include "fcitxqtinputmethodproxy.h" ++ ++/* ++ * Implementation of interface class FcitxQtInputMethodProxy ++ */ ++ ++FcitxQtInputMethodProxy::FcitxQtInputMethodProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent) ++ : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent) ++{ ++} ++ ++FcitxQtInputMethodProxy::~FcitxQtInputMethodProxy() ++{ ++} ++ +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.h b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.h +new file mode 100644 +index 0000000..7aa37e2 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtinputmethodproxy.h +@@ -0,0 +1,217 @@ ++/* ++ * This file was generated by qdbusxml2cpp version 0.8 ++ * Command line was: qdbusxml2cpp -N -p fcitxqtinputmethodproxy -c FcitxQtInputMethodProxy interfaces/org.fcitx.Fcitx.InputMethod.xml -i fcitxqtinputmethoditem.h -i fcitxqt_export.h ++ * ++ * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ++ * ++ * This is an auto-generated file. ++ * Do not edit! All changes made to it will be lost. ++ */ ++ ++#ifndef FCITXQTINPUTMETHODPROXY_H_1409252990 ++#define FCITXQTINPUTMETHODPROXY_H_1409252990 ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "fcitxqtinputmethoditem.h" ++#include "fcitxqtdbusaddons_export.h" ++ ++/* ++ * Proxy class for interface org.fcitx.Fcitx.InputMethod ++ */ ++class FCITXQTDBUSADDONS_EXPORT FcitxQtInputMethodProxy: public QDBusAbstractInterface ++{ ++ Q_OBJECT ++public: ++ static inline const char *staticInterfaceName() ++ { return "org.fcitx.Fcitx.InputMethod"; } ++ ++public: ++ FcitxQtInputMethodProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0); ++ ++ ~FcitxQtInputMethodProxy(); ++ ++ Q_PROPERTY(QString CurrentIM READ currentIM WRITE setCurrentIM) ++ inline QString currentIM() const ++ { return qvariant_cast< QString >(property("CurrentIM")); } ++ inline void setCurrentIM(const QString &value) ++ { setProperty("CurrentIM", QVariant::fromValue(value)); } ++ ++ Q_PROPERTY(FcitxQtInputMethodItemList IMList READ iMList WRITE setIMList) ++ inline FcitxQtInputMethodItemList iMList() const ++ { return qvariant_cast< FcitxQtInputMethodItemList >(property("IMList")); } ++ inline void setIMList(FcitxQtInputMethodItemList value) ++ { setProperty("IMList", QVariant::fromValue(value)); } ++ ++public Q_SLOTS: // METHODS ++ inline QDBusPendingReply<> ActivateIM() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("ActivateIM"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> Configure() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("Configure"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> ConfigureAddon(const QString &addon) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(addon); ++ return asyncCallWithArgumentList(QLatin1String("ConfigureAddon"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> ConfigureIM(const QString &im) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(im); ++ return asyncCallWithArgumentList(QLatin1String("ConfigureIM"), argumentList); ++ } ++ ++ inline QDBusPendingReply CreateIC() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("CreateIC"), argumentList); ++ } ++ inline QDBusReply CreateIC(uint &keyval1, uint &state1, uint &keyval2, uint &state2) ++ { ++ QList argumentList; ++ QDBusMessage reply = callWithArgumentList(QDBus::Block, QLatin1String("CreateIC"), argumentList); ++ if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 5) { ++ keyval1 = qdbus_cast(reply.arguments().at(1)); ++ state1 = qdbus_cast(reply.arguments().at(2)); ++ keyval2 = qdbus_cast(reply.arguments().at(3)); ++ state2 = qdbus_cast(reply.arguments().at(4)); ++ } ++ return reply; ++ } ++ ++ inline QDBusPendingReply CreateICv2(const QString &appname) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(appname); ++ return asyncCallWithArgumentList(QLatin1String("CreateICv2"), argumentList); ++ } ++ inline QDBusReply CreateICv2(const QString &appname, bool &enable, uint &keyval1, uint &state1, uint &keyval2, uint &state2) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(appname); ++ QDBusMessage reply = callWithArgumentList(QDBus::Block, QLatin1String("CreateICv2"), argumentList); ++ if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 6) { ++ enable = qdbus_cast(reply.arguments().at(1)); ++ keyval1 = qdbus_cast(reply.arguments().at(2)); ++ state1 = qdbus_cast(reply.arguments().at(3)); ++ keyval2 = qdbus_cast(reply.arguments().at(4)); ++ state2 = qdbus_cast(reply.arguments().at(5)); ++ } ++ return reply; ++ } ++ ++ inline QDBusPendingReply CreateICv3(const QString &appname, int pid) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(appname) << QVariant::fromValue(pid); ++ return asyncCallWithArgumentList(QLatin1String("CreateICv3"), argumentList); ++ } ++ inline QDBusReply CreateICv3(const QString &appname, int pid, bool &enable, uint &keyval1, uint &state1, uint &keyval2, uint &state2) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(appname) << QVariant::fromValue(pid); ++ QDBusMessage reply = callWithArgumentList(QDBus::Block, QLatin1String("CreateICv3"), argumentList); ++ if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 6) { ++ enable = qdbus_cast(reply.arguments().at(1)); ++ keyval1 = qdbus_cast(reply.arguments().at(2)); ++ state1 = qdbus_cast(reply.arguments().at(3)); ++ keyval2 = qdbus_cast(reply.arguments().at(4)); ++ state2 = qdbus_cast(reply.arguments().at(5)); ++ } ++ return reply; ++ } ++ ++ inline QDBusPendingReply<> Exit() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("Exit"), argumentList); ++ } ++ ++ inline QDBusPendingReply GetCurrentIM() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("GetCurrentIM"), argumentList); ++ } ++ ++ inline QDBusPendingReply GetCurrentState() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("GetCurrentState"), argumentList); ++ } ++ ++ inline QDBusPendingReply GetCurrentUI() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("GetCurrentUI"), argumentList); ++ } ++ ++ inline QDBusPendingReply GetIMAddon(const QString &im) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(im); ++ return asyncCallWithArgumentList(QLatin1String("GetIMAddon"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> InactivateIM() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("InactivateIM"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> ReloadAddonConfig(const QString &addon) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(addon); ++ return asyncCallWithArgumentList(QLatin1String("ReloadAddonConfig"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> ReloadConfig() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("ReloadConfig"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> ResetIMList() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("ResetIMList"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> Restart() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("Restart"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> SetCurrentIM(const QString &im) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(im); ++ return asyncCallWithArgumentList(QLatin1String("SetCurrentIM"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> ToggleIM() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("ToggleIM"), argumentList); ++ } ++ ++Q_SIGNALS: // SIGNALS ++}; ++ ++#endif +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.cpp b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.cpp +new file mode 100644 +index 0000000..32cd981 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.cpp +@@ -0,0 +1,100 @@ ++/*************************************************************************** ++ * Copyright (C) 2011~2012 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 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 General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++// Qt ++#include ++#include ++ ++// self ++#include "fcitxqtkeyboardlayout.h" ++ ++const QString& FcitxQtKeyboardLayout::layout() const ++{ ++ return m_layout; ++} ++const QString& FcitxQtKeyboardLayout::langCode() const ++{ ++ return m_langCode; ++} ++const QString& FcitxQtKeyboardLayout::name() const ++{ ++ return m_name; ++} ++ ++const QString& FcitxQtKeyboardLayout::variant() const ++{ ++ return m_variant; ++} ++ ++void FcitxQtKeyboardLayout::setLayout(const QString& layout) ++{ ++ m_layout = layout; ++} ++ ++void FcitxQtKeyboardLayout::setLangCode(const QString& lang) ++{ ++ m_langCode = lang; ++} ++ ++void FcitxQtKeyboardLayout::setName(const QString& name) ++{ ++ m_name = name; ++} ++ ++void FcitxQtKeyboardLayout::setVariant(const QString& variant) ++{ ++ m_variant = variant; ++} ++ ++void FcitxQtKeyboardLayout::registerMetaType() ++{ ++ qRegisterMetaType("FcitxQtKeyboardLayout"); ++ qDBusRegisterMetaType(); ++ qRegisterMetaType("FcitxQtKeyboardLayoutList"); ++ qDBusRegisterMetaType(); ++} ++ ++FCITXQTDBUSADDONS_EXPORT ++QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtKeyboardLayout& layout) ++{ ++ argument.beginStructure(); ++ argument << layout.layout(); ++ argument << layout.variant(); ++ argument << layout.name(); ++ argument << layout.langCode(); ++ argument.endStructure(); ++ return argument; ++} ++ ++FCITXQTDBUSADDONS_EXPORT ++const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtKeyboardLayout& layout) ++{ ++ QString l; ++ QString variant; ++ QString name; ++ QString langCode; ++ argument.beginStructure(); ++ argument >> l >> variant >> name >> langCode; ++ argument.endStructure(); ++ layout.setLayout(l); ++ layout.setVariant(variant); ++ layout.setName(name); ++ layout.setLangCode(langCode); ++ return argument; ++} +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.h b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.h +new file mode 100644 +index 0000000..d33438d +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardlayout.h +@@ -0,0 +1,58 @@ ++/*************************************************************************** ++ * Copyright (C) 2011~2012 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 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 General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#ifndef FCITX_QT_KEYBOARD_LAYOUT_H ++#define FCITX_QT_KEYBOARD_LAYOUT_H ++ ++#include "fcitxqtdbusaddons_export.h" ++ ++// Qt ++#include ++#include ++#include ++ ++class FCITXQTDBUSADDONS_EXPORT FcitxQtKeyboardLayout ++{ ++public: ++ const QString& layout() const; ++ const QString& variant() const; ++ const QString& name() const; ++ const QString& langCode() const; ++ void setLayout(const QString& layout); ++ void setLangCode(const QString& lang); ++ void setName(const QString& name); ++ void setVariant(const QString& variant); ++ ++ static void registerMetaType(); ++private: ++ QString m_layout; ++ QString m_variant; ++ QString m_name; ++ QString m_langCode; ++}; ++ ++typedef QList FcitxQtKeyboardLayoutList; ++ ++QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtKeyboardLayout& l); ++const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtKeyboardLayout& l); ++ ++Q_DECLARE_METATYPE(FcitxQtKeyboardLayout) ++Q_DECLARE_METATYPE(FcitxQtKeyboardLayoutList) ++ ++#endif +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.cpp b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.cpp +new file mode 100644 +index 0000000..7523a92 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.cpp +@@ -0,0 +1,26 @@ ++/* ++ * This file was generated by qdbusxml2cpp version 0.8 ++ * Command line was: qdbusxml2cpp -N -p fcitxqtkeyboardproxy -c FcitxQtKeyboardProxy interfaces/org.fcitx.Fcitx.Keyboard.xml -i fcitxqtkeyboardlayout.h -i fcitxqt_export.h ++ * ++ * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ++ * ++ * This is an auto-generated file. ++ * This file may have been hand-edited. Look for HAND-EDIT comments ++ * before re-generating it. ++ */ ++ ++#include "fcitxqtkeyboardproxy.h" ++ ++/* ++ * Implementation of interface class FcitxQtKeyboardProxy ++ */ ++ ++FcitxQtKeyboardProxy::FcitxQtKeyboardProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent) ++ : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent) ++{ ++} ++ ++FcitxQtKeyboardProxy::~FcitxQtKeyboardProxy() ++{ ++} ++ +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.h b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.h +new file mode 100644 +index 0000000..42a6561 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/fcitxqtkeyboardproxy.h +@@ -0,0 +1,74 @@ ++/* ++ * This file was generated by qdbusxml2cpp version 0.8 ++ * Command line was: qdbusxml2cpp -N -p fcitxqtkeyboardproxy -c FcitxQtKeyboardProxy interfaces/org.fcitx.Fcitx.Keyboard.xml -i fcitxqtkeyboardlayout.h -i fcitxqt_export.h ++ * ++ * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ++ * ++ * This is an auto-generated file. ++ * Do not edit! All changes made to it will be lost. ++ */ ++ ++#ifndef FCITXQTKEYBOARDPROXY_H_1409252990 ++#define FCITXQTKEYBOARDPROXY_H_1409252990 ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "fcitxqtkeyboardlayout.h" ++#include "fcitxqtdbusaddons_export.h" ++ ++/* ++ * Proxy class for interface org.fcitx.Fcitx.Keyboard ++ */ ++class FCITXQTDBUSADDONS_EXPORT FcitxQtKeyboardProxy: public QDBusAbstractInterface ++{ ++ Q_OBJECT ++public: ++ static inline const char *staticInterfaceName() ++ { return "org.fcitx.Fcitx.Keyboard"; } ++ ++public: ++ FcitxQtKeyboardProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0); ++ ++ ~FcitxQtKeyboardProxy(); ++ ++public Q_SLOTS: // METHODS ++ inline QDBusPendingReply GetLayoutForIM(const QString &im) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(im); ++ return asyncCallWithArgumentList(QLatin1String("GetLayoutForIM"), argumentList); ++ } ++ inline QDBusReply GetLayoutForIM(const QString &im, QString &variant) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(im); ++ QDBusMessage reply = callWithArgumentList(QDBus::Block, QLatin1String("GetLayoutForIM"), argumentList); ++ if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 2) { ++ variant = qdbus_cast(reply.arguments().at(1)); ++ } ++ return reply; ++ } ++ ++ inline QDBusPendingReply GetLayouts() ++ { ++ QList argumentList; ++ return asyncCallWithArgumentList(QLatin1String("GetLayouts"), argumentList); ++ } ++ ++ inline QDBusPendingReply<> SetLayoutForIM(const QString &im, const QString &layout, const QString &variant) ++ { ++ QList argumentList; ++ argumentList << QVariant::fromValue(im) << QVariant::fromValue(layout) << QVariant::fromValue(variant); ++ return asyncCallWithArgumentList(QLatin1String("SetLayoutForIM"), argumentList); ++ } ++ ++Q_SIGNALS: // SIGNALS ++}; ++ ++#endif +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputContext.xml b/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputContext.xml +new file mode 100644 +index 0000000..1423d69 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputContext.xml +@@ -0,0 +1,81 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputMethod.xml b/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputMethod.xml +new file mode 100644 +index 0000000..00dc20a +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.InputMethod.xml +@@ -0,0 +1,81 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.Keyboard.xml b/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.Keyboard.xml +new file mode 100644 +index 0000000..28ffa53 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/interfaces/org.fcitx.Fcitx.Keyboard.xml +@@ -0,0 +1,20 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +\ No newline at end of file +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/keydata.h b/qtbase/src/plugins/platforminputcontexts/fcitx/keydata.h +new file mode 100644 +index 0000000..5cee565 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/keydata.h +@@ -0,0 +1,1612 @@ ++/*************************************************************************** ++ * Copyright (C) 2012~2013 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 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 General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#ifndef KEYDATA_H ++#define KEYDATA_H ++ ++struct _FcitxKeySymToUnicode{ ++ uint16_t keysym; ++ uint16_t ucs; ++}; ++ ++struct _FcitxUnicodeToKeySym { ++ uint16_t keysym; ++ uint16_t ucs; ++}; ++ ++static const struct _FcitxKeySymToUnicode gdk_keysym_to_unicode_tab[] = { ++ { 0x01a1, 0x0104 }, /* Aogonek Ą LATIN CAPITAL LETTER A WITH OGONEK */ ++ { 0x01a2, 0x02d8 }, /* breve ˘ BREVE */ ++ { 0x01a3, 0x0141 }, /* Lstroke Ł LATIN CAPITAL LETTER L WITH STROKE */ ++ { 0x01a5, 0x013d }, /* Lcaron Ľ LATIN CAPITAL LETTER L WITH CARON */ ++ { 0x01a6, 0x015a }, /* Sacute Ś LATIN CAPITAL LETTER S WITH ACUTE */ ++ { 0x01a9, 0x0160 }, /* Scaron Š LATIN CAPITAL LETTER S WITH CARON */ ++ { 0x01aa, 0x015e }, /* Scedilla Ş LATIN CAPITAL LETTER S WITH CEDILLA */ ++ { 0x01ab, 0x0164 }, /* Tcaron Ť LATIN CAPITAL LETTER T WITH CARON */ ++ { 0x01ac, 0x0179 }, /* Zacute Ź LATIN CAPITAL LETTER Z WITH ACUTE */ ++ { 0x01ae, 0x017d }, /* Zcaron Ž LATIN CAPITAL LETTER Z WITH CARON */ ++ { 0x01af, 0x017b }, /* Zabovedot Ż LATIN CAPITAL LETTER Z WITH DOT ABOVE */ ++ { 0x01b1, 0x0105 }, /* aogonek ą LATIN SMALL LETTER A WITH OGONEK */ ++ { 0x01b2, 0x02db }, /* ogonek ˛ OGONEK */ ++ { 0x01b3, 0x0142 }, /* lstroke ł LATIN SMALL LETTER L WITH STROKE */ ++ { 0x01b5, 0x013e }, /* lcaron ľ LATIN SMALL LETTER L WITH CARON */ ++ { 0x01b6, 0x015b }, /* sacute ś LATIN SMALL LETTER S WITH ACUTE */ ++ { 0x01b7, 0x02c7 }, /* caron ˇ CARON */ ++ { 0x01b9, 0x0161 }, /* scaron š LATIN SMALL LETTER S WITH CARON */ ++ { 0x01ba, 0x015f }, /* scedilla ş LATIN SMALL LETTER S WITH CEDILLA */ ++ { 0x01bb, 0x0165 }, /* tcaron ť LATIN SMALL LETTER T WITH CARON */ ++ { 0x01bc, 0x017a }, /* zacute ź LATIN SMALL LETTER Z WITH ACUTE */ ++ { 0x01bd, 0x02dd }, /* doubleacute ˝ DOUBLE ACUTE ACCENT */ ++ { 0x01be, 0x017e }, /* zcaron ž LATIN SMALL LETTER Z WITH CARON */ ++ { 0x01bf, 0x017c }, /* zabovedot ż LATIN SMALL LETTER Z WITH DOT ABOVE */ ++ { 0x01c0, 0x0154 }, /* Racute Ŕ LATIN CAPITAL LETTER R WITH ACUTE */ ++ { 0x01c3, 0x0102 }, /* Abreve Ă LATIN CAPITAL LETTER A WITH BREVE */ ++ { 0x01c5, 0x0139 }, /* Lacute Ĺ LATIN CAPITAL LETTER L WITH ACUTE */ ++ { 0x01c6, 0x0106 }, /* Cacute Ć LATIN CAPITAL LETTER C WITH ACUTE */ ++ { 0x01c8, 0x010c }, /* Ccaron Č LATIN CAPITAL LETTER C WITH CARON */ ++ { 0x01ca, 0x0118 }, /* Eogonek Ę LATIN CAPITAL LETTER E WITH OGONEK */ ++ { 0x01cc, 0x011a }, /* Ecaron Ě LATIN CAPITAL LETTER E WITH CARON */ ++ { 0x01cf, 0x010e }, /* Dcaron Ď LATIN CAPITAL LETTER D WITH CARON */ ++ { 0x01d0, 0x0110 }, /* Dstroke Đ LATIN CAPITAL LETTER D WITH STROKE */ ++ { 0x01d1, 0x0143 }, /* Nacute Ń LATIN CAPITAL LETTER N WITH ACUTE */ ++ { 0x01d2, 0x0147 }, /* Ncaron Ň LATIN CAPITAL LETTER N WITH CARON */ ++ { 0x01d5, 0x0150 }, /* Odoubleacute Ő LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */ ++ { 0x01d8, 0x0158 }, /* Rcaron Ř LATIN CAPITAL LETTER R WITH CARON */ ++ { 0x01d9, 0x016e }, /* Uring Ů LATIN CAPITAL LETTER U WITH RING ABOVE */ ++ { 0x01db, 0x0170 }, /* Udoubleacute Ű LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */ ++ { 0x01de, 0x0162 }, /* Tcedilla Ţ LATIN CAPITAL LETTER T WITH CEDILLA */ ++ { 0x01e0, 0x0155 }, /* racute ŕ LATIN SMALL LETTER R WITH ACUTE */ ++ { 0x01e3, 0x0103 }, /* abreve ă LATIN SMALL LETTER A WITH BREVE */ ++ { 0x01e5, 0x013a }, /* lacute ĺ LATIN SMALL LETTER L WITH ACUTE */ ++ { 0x01e6, 0x0107 }, /* cacute ć LATIN SMALL LETTER C WITH ACUTE */ ++ { 0x01e8, 0x010d }, /* ccaron č LATIN SMALL LETTER C WITH CARON */ ++ { 0x01ea, 0x0119 }, /* eogonek ę LATIN SMALL LETTER E WITH OGONEK */ ++ { 0x01ec, 0x011b }, /* ecaron ě LATIN SMALL LETTER E WITH CARON */ ++ { 0x01ef, 0x010f }, /* dcaron ď LATIN SMALL LETTER D WITH CARON */ ++ { 0x01f0, 0x0111 }, /* dstroke đ LATIN SMALL LETTER D WITH STROKE */ ++ { 0x01f1, 0x0144 }, /* nacute ń LATIN SMALL LETTER N WITH ACUTE */ ++ { 0x01f2, 0x0148 }, /* ncaron ň LATIN SMALL LETTER N WITH CARON */ ++ { 0x01f5, 0x0151 }, /* odoubleacute ő LATIN SMALL LETTER O WITH DOUBLE ACUTE */ ++ { 0x01f8, 0x0159 }, /* rcaron ř LATIN SMALL LETTER R WITH CARON */ ++ { 0x01f9, 0x016f }, /* uring ů LATIN SMALL LETTER U WITH RING ABOVE */ ++ { 0x01fb, 0x0171 }, /* udoubleacute ű LATIN SMALL LETTER U WITH DOUBLE ACUTE */ ++ { 0x01fe, 0x0163 }, /* tcedilla ţ LATIN SMALL LETTER T WITH CEDILLA */ ++ { 0x01ff, 0x02d9 }, /* abovedot ˙ DOT ABOVE */ ++ { 0x02a1, 0x0126 }, /* Hstroke Ħ LATIN CAPITAL LETTER H WITH STROKE */ ++ { 0x02a6, 0x0124 }, /* Hcircumflex Ĥ LATIN CAPITAL LETTER H WITH CIRCUMFLEX */ ++ { 0x02a9, 0x0130 }, /* Iabovedot İ LATIN CAPITAL LETTER I WITH DOT ABOVE */ ++ { 0x02ab, 0x011e }, /* Gbreve Ğ LATIN CAPITAL LETTER G WITH BREVE */ ++ { 0x02ac, 0x0134 }, /* Jcircumflex Ĵ LATIN CAPITAL LETTER J WITH CIRCUMFLEX */ ++ { 0x02b1, 0x0127 }, /* hstroke ħ LATIN SMALL LETTER H WITH STROKE */ ++ { 0x02b6, 0x0125 }, /* hcircumflex ĥ LATIN SMALL LETTER H WITH CIRCUMFLEX */ ++ { 0x02b9, 0x0131 }, /* idotless ı LATIN SMALL LETTER DOTLESS I */ ++ { 0x02bb, 0x011f }, /* gbreve ğ LATIN SMALL LETTER G WITH BREVE */ ++ { 0x02bc, 0x0135 }, /* jcircumflex ĵ LATIN SMALL LETTER J WITH CIRCUMFLEX */ ++ { 0x02c5, 0x010a }, /* Cabovedot Ċ LATIN CAPITAL LETTER C WITH DOT ABOVE */ ++ { 0x02c6, 0x0108 }, /* Ccircumflex Ĉ LATIN CAPITAL LETTER C WITH CIRCUMFLEX */ ++ { 0x02d5, 0x0120 }, /* Gabovedot Ġ LATIN CAPITAL LETTER G WITH DOT ABOVE */ ++ { 0x02d8, 0x011c }, /* Gcircumflex Ĝ LATIN CAPITAL LETTER G WITH CIRCUMFLEX */ ++ { 0x02dd, 0x016c }, /* Ubreve Ŭ LATIN CAPITAL LETTER U WITH BREVE */ ++ { 0x02de, 0x015c }, /* Scircumflex Ŝ LATIN CAPITAL LETTER S WITH CIRCUMFLEX */ ++ { 0x02e5, 0x010b }, /* cabovedot ċ LATIN SMALL LETTER C WITH DOT ABOVE */ ++ { 0x02e6, 0x0109 }, /* ccircumflex ĉ LATIN SMALL LETTER C WITH CIRCUMFLEX */ ++ { 0x02f5, 0x0121 }, /* gabovedot ġ LATIN SMALL LETTER G WITH DOT ABOVE */ ++ { 0x02f8, 0x011d }, /* gcircumflex ĝ LATIN SMALL LETTER G WITH CIRCUMFLEX */ ++ { 0x02fd, 0x016d }, /* ubreve ŭ LATIN SMALL LETTER U WITH BREVE */ ++ { 0x02fe, 0x015d }, /* scircumflex ŝ LATIN SMALL LETTER S WITH CIRCUMFLEX */ ++ { 0x03a2, 0x0138 }, /* kra ĸ LATIN SMALL LETTER KRA */ ++ { 0x03a3, 0x0156 }, /* Rcedilla Ŗ LATIN CAPITAL LETTER R WITH CEDILLA */ ++ { 0x03a5, 0x0128 }, /* Itilde Ĩ LATIN CAPITAL LETTER I WITH TILDE */ ++ { 0x03a6, 0x013b }, /* Lcedilla Ļ LATIN CAPITAL LETTER L WITH CEDILLA */ ++ { 0x03aa, 0x0112 }, /* Emacron Ē LATIN CAPITAL LETTER E WITH MACRON */ ++ { 0x03ab, 0x0122 }, /* Gcedilla Ģ LATIN CAPITAL LETTER G WITH CEDILLA */ ++ { 0x03ac, 0x0166 }, /* Tslash Ŧ LATIN CAPITAL LETTER T WITH STROKE */ ++ { 0x03b3, 0x0157 }, /* rcedilla ŗ LATIN SMALL LETTER R WITH CEDILLA */ ++ { 0x03b5, 0x0129 }, /* itilde ĩ LATIN SMALL LETTER I WITH TILDE */ ++ { 0x03b6, 0x013c }, /* lcedilla ļ LATIN SMALL LETTER L WITH CEDILLA */ ++ { 0x03ba, 0x0113 }, /* emacron ē LATIN SMALL LETTER E WITH MACRON */ ++ { 0x03bb, 0x0123 }, /* gcedilla ģ LATIN SMALL LETTER G WITH CEDILLA */ ++ { 0x03bc, 0x0167 }, /* tslash ŧ LATIN SMALL LETTER T WITH STROKE */ ++ { 0x03bd, 0x014a }, /* ENG Ŋ LATIN CAPITAL LETTER ENG */ ++ { 0x03bf, 0x014b }, /* eng ŋ LATIN SMALL LETTER ENG */ ++ { 0x03c0, 0x0100 }, /* Amacron Ā LATIN CAPITAL LETTER A WITH MACRON */ ++ { 0x03c7, 0x012e }, /* Iogonek Į LATIN CAPITAL LETTER I WITH OGONEK */ ++ { 0x03cc, 0x0116 }, /* Eabovedot Ė LATIN CAPITAL LETTER E WITH DOT ABOVE */ ++ { 0x03cf, 0x012a }, /* Imacron Ī LATIN CAPITAL LETTER I WITH MACRON */ ++ { 0x03d1, 0x0145 }, /* Ncedilla Ņ LATIN CAPITAL LETTER N WITH CEDILLA */ ++ { 0x03d2, 0x014c }, /* Omacron Ō LATIN CAPITAL LETTER O WITH MACRON */ ++ { 0x03d3, 0x0136 }, /* Kcedilla Ķ LATIN CAPITAL LETTER K WITH CEDILLA */ ++ { 0x03d9, 0x0172 }, /* Uogonek Ų LATIN CAPITAL LETTER U WITH OGONEK */ ++ { 0x03dd, 0x0168 }, /* Utilde Ũ LATIN CAPITAL LETTER U WITH TILDE */ ++ { 0x03de, 0x016a }, /* Umacron Ū LATIN CAPITAL LETTER U WITH MACRON */ ++ { 0x03e0, 0x0101 }, /* amacron ā LATIN SMALL LETTER A WITH MACRON */ ++ { 0x03e7, 0x012f }, /* iogonek į LATIN SMALL LETTER I WITH OGONEK */ ++ { 0x03ec, 0x0117 }, /* eabovedot ė LATIN SMALL LETTER E WITH DOT ABOVE */ ++ { 0x03ef, 0x012b }, /* imacron ī LATIN SMALL LETTER I WITH MACRON */ ++ { 0x03f1, 0x0146 }, /* ncedilla ņ LATIN SMALL LETTER N WITH CEDILLA */ ++ { 0x03f2, 0x014d }, /* omacron ō LATIN SMALL LETTER O WITH MACRON */ ++ { 0x03f3, 0x0137 }, /* kcedilla ķ LATIN SMALL LETTER K WITH CEDILLA */ ++ { 0x03f9, 0x0173 }, /* uogonek ų LATIN SMALL LETTER U WITH OGONEK */ ++ { 0x03fd, 0x0169 }, /* utilde ũ LATIN SMALL LETTER U WITH TILDE */ ++ { 0x03fe, 0x016b }, /* umacron ū LATIN SMALL LETTER U WITH MACRON */ ++ { 0x047e, 0x203e }, /* overline ‾ OVERLINE */ ++ { 0x04a1, 0x3002 }, /* kana_fullstop 。 IDEOGRAPHIC FULL STOP */ ++ { 0x04a2, 0x300c }, /* kana_openingbracket 「 LEFT CORNER BRACKET */ ++ { 0x04a3, 0x300d }, /* kana_closingbracket 」 RIGHT CORNER BRACKET */ ++ { 0x04a4, 0x3001 }, /* kana_comma 、 IDEOGRAPHIC COMMA */ ++ { 0x04a5, 0x30fb }, /* kana_conjunctive ・ KATAKANA MIDDLE DOT */ ++ { 0x04a6, 0x30f2 }, /* kana_WO ヲ KATAKANA LETTER WO */ ++ { 0x04a7, 0x30a1 }, /* kana_a ァ KATAKANA LETTER SMALL A */ ++ { 0x04a8, 0x30a3 }, /* kana_i ィ KATAKANA LETTER SMALL I */ ++ { 0x04a9, 0x30a5 }, /* kana_u ゥ KATAKANA LETTER SMALL U */ ++ { 0x04aa, 0x30a7 }, /* kana_e ェ KATAKANA LETTER SMALL E */ ++ { 0x04ab, 0x30a9 }, /* kana_o ォ KATAKANA LETTER SMALL O */ ++ { 0x04ac, 0x30e3 }, /* kana_ya ャ KATAKANA LETTER SMALL YA */ ++ { 0x04ad, 0x30e5 }, /* kana_yu ュ KATAKANA LETTER SMALL YU */ ++ { 0x04ae, 0x30e7 }, /* kana_yo ョ KATAKANA LETTER SMALL YO */ ++ { 0x04af, 0x30c3 }, /* kana_tsu ッ KATAKANA LETTER SMALL TU */ ++ { 0x04b0, 0x30fc }, /* prolongedsound ー KATAKANA-HIRAGANA PROLONGED SOUND MARK */ ++ { 0x04b1, 0x30a2 }, /* kana_A ア KATAKANA LETTER A */ ++ { 0x04b2, 0x30a4 }, /* kana_I イ KATAKANA LETTER I */ ++ { 0x04b3, 0x30a6 }, /* kana_U ウ KATAKANA LETTER U */ ++ { 0x04b4, 0x30a8 }, /* kana_E エ KATAKANA LETTER E */ ++ { 0x04b5, 0x30aa }, /* kana_O オ KATAKANA LETTER O */ ++ { 0x04b6, 0x30ab }, /* kana_KA カ KATAKANA LETTER KA */ ++ { 0x04b7, 0x30ad }, /* kana_KI キ KATAKANA LETTER KI */ ++ { 0x04b8, 0x30af }, /* kana_KU ク KATAKANA LETTER KU */ ++ { 0x04b9, 0x30b1 }, /* kana_KE ケ KATAKANA LETTER KE */ ++ { 0x04ba, 0x30b3 }, /* kana_KO コ KATAKANA LETTER KO */ ++ { 0x04bb, 0x30b5 }, /* kana_SA サ KATAKANA LETTER SA */ ++ { 0x04bc, 0x30b7 }, /* kana_SHI シ KATAKANA LETTER SI */ ++ { 0x04bd, 0x30b9 }, /* kana_SU ス KATAKANA LETTER SU */ ++ { 0x04be, 0x30bb }, /* kana_SE セ KATAKANA LETTER SE */ ++ { 0x04bf, 0x30bd }, /* kana_SO ソ KATAKANA LETTER SO */ ++ { 0x04c0, 0x30bf }, /* kana_TA タ KATAKANA LETTER TA */ ++ { 0x04c1, 0x30c1 }, /* kana_CHI チ KATAKANA LETTER TI */ ++ { 0x04c2, 0x30c4 }, /* kana_TSU ツ KATAKANA LETTER TU */ ++ { 0x04c3, 0x30c6 }, /* kana_TE テ KATAKANA LETTER TE */ ++ { 0x04c4, 0x30c8 }, /* kana_TO ト KATAKANA LETTER TO */ ++ { 0x04c5, 0x30ca }, /* kana_NA ナ KATAKANA LETTER NA */ ++ { 0x04c6, 0x30cb }, /* kana_NI ニ KATAKANA LETTER NI */ ++ { 0x04c7, 0x30cc }, /* kana_NU ヌ KATAKANA LETTER NU */ ++ { 0x04c8, 0x30cd }, /* kana_NE ネ KATAKANA LETTER NE */ ++ { 0x04c9, 0x30ce }, /* kana_NO ノ KATAKANA LETTER NO */ ++ { 0x04ca, 0x30cf }, /* kana_HA ハ KATAKANA LETTER HA */ ++ { 0x04cb, 0x30d2 }, /* kana_HI ヒ KATAKANA LETTER HI */ ++ { 0x04cc, 0x30d5 }, /* kana_FU フ KATAKANA LETTER HU */ ++ { 0x04cd, 0x30d8 }, /* kana_HE ヘ KATAKANA LETTER HE */ ++ { 0x04ce, 0x30db }, /* kana_HO ホ KATAKANA LETTER HO */ ++ { 0x04cf, 0x30de }, /* kana_MA マ KATAKANA LETTER MA */ ++ { 0x04d0, 0x30df }, /* kana_MI ミ KATAKANA LETTER MI */ ++ { 0x04d1, 0x30e0 }, /* kana_MU ム KATAKANA LETTER MU */ ++ { 0x04d2, 0x30e1 }, /* kana_ME メ KATAKANA LETTER ME */ ++ { 0x04d3, 0x30e2 }, /* kana_MO モ KATAKANA LETTER MO */ ++ { 0x04d4, 0x30e4 }, /* kana_YA ヤ KATAKANA LETTER YA */ ++ { 0x04d5, 0x30e6 }, /* kana_YU ユ KATAKANA LETTER YU */ ++ { 0x04d6, 0x30e8 }, /* kana_YO ヨ KATAKANA LETTER YO */ ++ { 0x04d7, 0x30e9 }, /* kana_RA ラ KATAKANA LETTER RA */ ++ { 0x04d8, 0x30ea }, /* kana_RI リ KATAKANA LETTER RI */ ++ { 0x04d9, 0x30eb }, /* kana_RU ル KATAKANA LETTER RU */ ++ { 0x04da, 0x30ec }, /* kana_RE レ KATAKANA LETTER RE */ ++ { 0x04db, 0x30ed }, /* kana_RO ロ KATAKANA LETTER RO */ ++ { 0x04dc, 0x30ef }, /* kana_WA ワ KATAKANA LETTER WA */ ++ { 0x04dd, 0x30f3 }, /* kana_N ン KATAKANA LETTER N */ ++ { 0x04de, 0x309b }, /* voicedsound ゛ KATAKANA-HIRAGANA VOICED SOUND MARK */ ++ { 0x04df, 0x309c }, /* semivoicedsound ゜ KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */ ++ { 0x05ac, 0x060c }, /* Arabic_comma ، ARABIC COMMA */ ++ { 0x05bb, 0x061b }, /* Arabic_semicolon ؛ ARABIC SEMICOLON */ ++ { 0x05bf, 0x061f }, /* Arabic_question_mark ؟ ARABIC QUESTION MARK */ ++ { 0x05c1, 0x0621 }, /* Arabic_hamza ء ARABIC LETTER HAMZA */ ++ { 0x05c2, 0x0622 }, /* Arabic_maddaonalef آ ARABIC LETTER ALEF WITH MADDA ABOVE */ ++ { 0x05c3, 0x0623 }, /* Arabic_hamzaonalef أ ARABIC LETTER ALEF WITH HAMZA ABOVE */ ++ { 0x05c4, 0x0624 }, /* Arabic_hamzaonwaw ؤ ARABIC LETTER WAW WITH HAMZA ABOVE */ ++ { 0x05c5, 0x0625 }, /* Arabic_hamzaunderalef إ ARABIC LETTER ALEF WITH HAMZA BELOW */ ++ { 0x05c6, 0x0626 }, /* Arabic_hamzaonyeh ئ ARABIC LETTER YEH WITH HAMZA ABOVE */ ++ { 0x05c7, 0x0627 }, /* Arabic_alef ا ARABIC LETTER ALEF */ ++ { 0x05c8, 0x0628 }, /* Arabic_beh ب ARABIC LETTER BEH */ ++ { 0x05c9, 0x0629 }, /* Arabic_tehmarbuta ة ARABIC LETTER TEH MARBUTA */ ++ { 0x05ca, 0x062a }, /* Arabic_teh ت ARABIC LETTER TEH */ ++ { 0x05cb, 0x062b }, /* Arabic_theh ث ARABIC LETTER THEH */ ++ { 0x05cc, 0x062c }, /* Arabic_jeem ج ARABIC LETTER JEEM */ ++ { 0x05cd, 0x062d }, /* Arabic_hah ح ARABIC LETTER HAH */ ++ { 0x05ce, 0x062e }, /* Arabic_khah خ ARABIC LETTER KHAH */ ++ { 0x05cf, 0x062f }, /* Arabic_dal د ARABIC LETTER DAL */ ++ { 0x05d0, 0x0630 }, /* Arabic_thal ذ ARABIC LETTER THAL */ ++ { 0x05d1, 0x0631 }, /* Arabic_ra ر ARABIC LETTER REH */ ++ { 0x05d2, 0x0632 }, /* Arabic_zain ز ARABIC LETTER ZAIN */ ++ { 0x05d3, 0x0633 }, /* Arabic_seen س ARABIC LETTER SEEN */ ++ { 0x05d4, 0x0634 }, /* Arabic_sheen ش ARABIC LETTER SHEEN */ ++ { 0x05d5, 0x0635 }, /* Arabic_sad ص ARABIC LETTER SAD */ ++ { 0x05d6, 0x0636 }, /* Arabic_dad ض ARABIC LETTER DAD */ ++ { 0x05d7, 0x0637 }, /* Arabic_tah ط ARABIC LETTER TAH */ ++ { 0x05d8, 0x0638 }, /* Arabic_zah ظ ARABIC LETTER ZAH */ ++ { 0x05d9, 0x0639 }, /* Arabic_ain ع ARABIC LETTER AIN */ ++ { 0x05da, 0x063a }, /* Arabic_ghain غ ARABIC LETTER GHAIN */ ++ { 0x05e0, 0x0640 }, /* Arabic_tatweel ـ ARABIC TATWEEL */ ++ { 0x05e1, 0x0641 }, /* Arabic_feh ف ARABIC LETTER FEH */ ++ { 0x05e2, 0x0642 }, /* Arabic_qaf ق ARABIC LETTER QAF */ ++ { 0x05e3, 0x0643 }, /* Arabic_kaf ك ARABIC LETTER KAF */ ++ { 0x05e4, 0x0644 }, /* Arabic_lam ل ARABIC LETTER LAM */ ++ { 0x05e5, 0x0645 }, /* Arabic_meem م ARABIC LETTER MEEM */ ++ { 0x05e6, 0x0646 }, /* Arabic_noon ن ARABIC LETTER NOON */ ++ { 0x05e7, 0x0647 }, /* Arabic_ha ه ARABIC LETTER HEH */ ++ { 0x05e8, 0x0648 }, /* Arabic_waw و ARABIC LETTER WAW */ ++ { 0x05e9, 0x0649 }, /* Arabic_alefmaksura ى ARABIC LETTER ALEF MAKSURA */ ++ { 0x05ea, 0x064a }, /* Arabic_yeh ي ARABIC LETTER YEH */ ++ { 0x05eb, 0x064b }, /* Arabic_fathatan ً ARABIC FATHATAN */ ++ { 0x05ec, 0x064c }, /* Arabic_dammatan ٌ ARABIC DAMMATAN */ ++ { 0x05ed, 0x064d }, /* Arabic_kasratan ٍ ARABIC KASRATAN */ ++ { 0x05ee, 0x064e }, /* Arabic_fatha َ ARABIC FATHA */ ++ { 0x05ef, 0x064f }, /* Arabic_damma ُ ARABIC DAMMA */ ++ { 0x05f0, 0x0650 }, /* Arabic_kasra ِ ARABIC KASRA */ ++ { 0x05f1, 0x0651 }, /* Arabic_shadda ّ ARABIC SHADDA */ ++ { 0x05f2, 0x0652 }, /* Arabic_sukun ْ ARABIC SUKUN */ ++ { 0x06a1, 0x0452 }, /* Serbian_dje ђ CYRILLIC SMALL LETTER DJE */ ++ { 0x06a2, 0x0453 }, /* Macedonia_gje ѓ CYRILLIC SMALL LETTER GJE */ ++ { 0x06a3, 0x0451 }, /* Cyrillic_io ё CYRILLIC SMALL LETTER IO */ ++ { 0x06a4, 0x0454 }, /* Ukrainian_ie є CYRILLIC SMALL LETTER UKRAINIAN IE */ ++ { 0x06a5, 0x0455 }, /* Macedonia_dse ѕ CYRILLIC SMALL LETTER DZE */ ++ { 0x06a6, 0x0456 }, /* Ukrainian_i і CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */ ++ { 0x06a7, 0x0457 }, /* Ukrainian_yi ї CYRILLIC SMALL LETTER YI */ ++ { 0x06a8, 0x0458 }, /* Cyrillic_je ј CYRILLIC SMALL LETTER JE */ ++ { 0x06a9, 0x0459 }, /* Cyrillic_lje љ CYRILLIC SMALL LETTER LJE */ ++ { 0x06aa, 0x045a }, /* Cyrillic_nje њ CYRILLIC SMALL LETTER NJE */ ++ { 0x06ab, 0x045b }, /* Serbian_tshe ћ CYRILLIC SMALL LETTER TSHE */ ++ { 0x06ac, 0x045c }, /* Macedonia_kje ќ CYRILLIC SMALL LETTER KJE */ ++ { 0x06ad, 0x0491 }, /* Ukrainian_ghe_with_upturn ґ CYRILLIC SMALL LETTER GHE WITH UPTURN */ ++ { 0x06ae, 0x045e }, /* Byelorussian_shortu ў CYRILLIC SMALL LETTER SHORT U */ ++ { 0x06af, 0x045f }, /* Cyrillic_dzhe џ CYRILLIC SMALL LETTER DZHE */ ++ { 0x06b0, 0x2116 }, /* numerosign № NUMERO SIGN */ ++ { 0x06b1, 0x0402 }, /* Serbian_DJE Ђ CYRILLIC CAPITAL LETTER DJE */ ++ { 0x06b2, 0x0403 }, /* Macedonia_GJE Ѓ CYRILLIC CAPITAL LETTER GJE */ ++ { 0x06b3, 0x0401 }, /* Cyrillic_IO Ё CYRILLIC CAPITAL LETTER IO */ ++ { 0x06b4, 0x0404 }, /* Ukrainian_IE Є CYRILLIC CAPITAL LETTER UKRAINIAN IE */ ++ { 0x06b5, 0x0405 }, /* Macedonia_DSE Ѕ CYRILLIC CAPITAL LETTER DZE */ ++ { 0x06b6, 0x0406 }, /* Ukrainian_I І CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */ ++ { 0x06b7, 0x0407 }, /* Ukrainian_YI Ї CYRILLIC CAPITAL LETTER YI */ ++ { 0x06b8, 0x0408 }, /* Cyrillic_JE Ј CYRILLIC CAPITAL LETTER JE */ ++ { 0x06b9, 0x0409 }, /* Cyrillic_LJE Љ CYRILLIC CAPITAL LETTER LJE */ ++ { 0x06ba, 0x040a }, /* Cyrillic_NJE Њ CYRILLIC CAPITAL LETTER NJE */ ++ { 0x06bb, 0x040b }, /* Serbian_TSHE Ћ CYRILLIC CAPITAL LETTER TSHE */ ++ { 0x06bc, 0x040c }, /* Macedonia_KJE Ќ CYRILLIC CAPITAL LETTER KJE */ ++ { 0x06bd, 0x0490 }, /* Ukrainian_GHE_WITH_UPTURN Ґ CYRILLIC CAPITAL LETTER GHE WITH UPTURN */ ++ { 0x06be, 0x040e }, /* Byelorussian_SHORTU Ў CYRILLIC CAPITAL LETTER SHORT U */ ++ { 0x06bf, 0x040f }, /* Cyrillic_DZHE Џ CYRILLIC CAPITAL LETTER DZHE */ ++ { 0x06c0, 0x044e }, /* Cyrillic_yu ю CYRILLIC SMALL LETTER YU */ ++ { 0x06c1, 0x0430 }, /* Cyrillic_a а CYRILLIC SMALL LETTER A */ ++ { 0x06c2, 0x0431 }, /* Cyrillic_be б CYRILLIC SMALL LETTER BE */ ++ { 0x06c3, 0x0446 }, /* Cyrillic_tse ц CYRILLIC SMALL LETTER TSE */ ++ { 0x06c4, 0x0434 }, /* Cyrillic_de д CYRILLIC SMALL LETTER DE */ ++ { 0x06c5, 0x0435 }, /* Cyrillic_ie е CYRILLIC SMALL LETTER IE */ ++ { 0x06c6, 0x0444 }, /* Cyrillic_ef ф CYRILLIC SMALL LETTER EF */ ++ { 0x06c7, 0x0433 }, /* Cyrillic_ghe г CYRILLIC SMALL LETTER GHE */ ++ { 0x06c8, 0x0445 }, /* Cyrillic_ha х CYRILLIC SMALL LETTER HA */ ++ { 0x06c9, 0x0438 }, /* Cyrillic_i и CYRILLIC SMALL LETTER I */ ++ { 0x06ca, 0x0439 }, /* Cyrillic_shorti й CYRILLIC SMALL LETTER SHORT I */ ++ { 0x06cb, 0x043a }, /* Cyrillic_ka к CYRILLIC SMALL LETTER KA */ ++ { 0x06cc, 0x043b }, /* Cyrillic_el л CYRILLIC SMALL LETTER EL */ ++ { 0x06cd, 0x043c }, /* Cyrillic_em м CYRILLIC SMALL LETTER EM */ ++ { 0x06ce, 0x043d }, /* Cyrillic_en н CYRILLIC SMALL LETTER EN */ ++ { 0x06cf, 0x043e }, /* Cyrillic_o о CYRILLIC SMALL LETTER O */ ++ { 0x06d0, 0x043f }, /* Cyrillic_pe п CYRILLIC SMALL LETTER PE */ ++ { 0x06d1, 0x044f }, /* Cyrillic_ya я CYRILLIC SMALL LETTER YA */ ++ { 0x06d2, 0x0440 }, /* Cyrillic_er р CYRILLIC SMALL LETTER ER */ ++ { 0x06d3, 0x0441 }, /* Cyrillic_es с CYRILLIC SMALL LETTER ES */ ++ { 0x06d4, 0x0442 }, /* Cyrillic_te т CYRILLIC SMALL LETTER TE */ ++ { 0x06d5, 0x0443 }, /* Cyrillic_u у CYRILLIC SMALL LETTER U */ ++ { 0x06d6, 0x0436 }, /* Cyrillic_zhe ж CYRILLIC SMALL LETTER ZHE */ ++ { 0x06d7, 0x0432 }, /* Cyrillic_ve в CYRILLIC SMALL LETTER VE */ ++ { 0x06d8, 0x044c }, /* Cyrillic_softsign ь CYRILLIC SMALL LETTER SOFT SIGN */ ++ { 0x06d9, 0x044b }, /* Cyrillic_yeru ы CYRILLIC SMALL LETTER YERU */ ++ { 0x06da, 0x0437 }, /* Cyrillic_ze з CYRILLIC SMALL LETTER ZE */ ++ { 0x06db, 0x0448 }, /* Cyrillic_sha ш CYRILLIC SMALL LETTER SHA */ ++ { 0x06dc, 0x044d }, /* Cyrillic_e э CYRILLIC SMALL LETTER E */ ++ { 0x06dd, 0x0449 }, /* Cyrillic_shcha щ CYRILLIC SMALL LETTER SHCHA */ ++ { 0x06de, 0x0447 }, /* Cyrillic_che ч CYRILLIC SMALL LETTER CHE */ ++ { 0x06df, 0x044a }, /* Cyrillic_hardsign ъ CYRILLIC SMALL LETTER HARD SIGN */ ++ { 0x06e0, 0x042e }, /* Cyrillic_YU Ю CYRILLIC CAPITAL LETTER YU */ ++ { 0x06e1, 0x0410 }, /* Cyrillic_A А CYRILLIC CAPITAL LETTER A */ ++ { 0x06e2, 0x0411 }, /* Cyrillic_BE Б CYRILLIC CAPITAL LETTER BE */ ++ { 0x06e3, 0x0426 }, /* Cyrillic_TSE Ц CYRILLIC CAPITAL LETTER TSE */ ++ { 0x06e4, 0x0414 }, /* Cyrillic_DE Д CYRILLIC CAPITAL LETTER DE */ ++ { 0x06e5, 0x0415 }, /* Cyrillic_IE Е CYRILLIC CAPITAL LETTER IE */ ++ { 0x06e6, 0x0424 }, /* Cyrillic_EF Ф CYRILLIC CAPITAL LETTER EF */ ++ { 0x06e7, 0x0413 }, /* Cyrillic_GHE Г CYRILLIC CAPITAL LETTER GHE */ ++ { 0x06e8, 0x0425 }, /* Cyrillic_HA Х CYRILLIC CAPITAL LETTER HA */ ++ { 0x06e9, 0x0418 }, /* Cyrillic_I И CYRILLIC CAPITAL LETTER I */ ++ { 0x06ea, 0x0419 }, /* Cyrillic_SHORTI Й CYRILLIC CAPITAL LETTER SHORT I */ ++ { 0x06eb, 0x041a }, /* Cyrillic_KA К CYRILLIC CAPITAL LETTER KA */ ++ { 0x06ec, 0x041b }, /* Cyrillic_EL Л CYRILLIC CAPITAL LETTER EL */ ++ { 0x06ed, 0x041c }, /* Cyrillic_EM М CYRILLIC CAPITAL LETTER EM */ ++ { 0x06ee, 0x041d }, /* Cyrillic_EN Н CYRILLIC CAPITAL LETTER EN */ ++ { 0x06ef, 0x041e }, /* Cyrillic_O О CYRILLIC CAPITAL LETTER O */ ++ { 0x06f0, 0x041f }, /* Cyrillic_PE П CYRILLIC CAPITAL LETTER PE */ ++ { 0x06f1, 0x042f }, /* Cyrillic_YA Я CYRILLIC CAPITAL LETTER YA */ ++ { 0x06f2, 0x0420 }, /* Cyrillic_ER Р CYRILLIC CAPITAL LETTER ER */ ++ { 0x06f3, 0x0421 }, /* Cyrillic_ES С CYRILLIC CAPITAL LETTER ES */ ++ { 0x06f4, 0x0422 }, /* Cyrillic_TE Т CYRILLIC CAPITAL LETTER TE */ ++ { 0x06f5, 0x0423 }, /* Cyrillic_U У CYRILLIC CAPITAL LETTER U */ ++ { 0x06f6, 0x0416 }, /* Cyrillic_ZHE Ж CYRILLIC CAPITAL LETTER ZHE */ ++ { 0x06f7, 0x0412 }, /* Cyrillic_VE В CYRILLIC CAPITAL LETTER VE */ ++ { 0x06f8, 0x042c }, /* Cyrillic_SOFTSIGN Ь CYRILLIC CAPITAL LETTER SOFT SIGN */ ++ { 0x06f9, 0x042b }, /* Cyrillic_YERU Ы CYRILLIC CAPITAL LETTER YERU */ ++ { 0x06fa, 0x0417 }, /* Cyrillic_ZE З CYRILLIC CAPITAL LETTER ZE */ ++ { 0x06fb, 0x0428 }, /* Cyrillic_SHA Ш CYRILLIC CAPITAL LETTER SHA */ ++ { 0x06fc, 0x042d }, /* Cyrillic_E Э CYRILLIC CAPITAL LETTER E */ ++ { 0x06fd, 0x0429 }, /* Cyrillic_SHCHA Щ CYRILLIC CAPITAL LETTER SHCHA */ ++ { 0x06fe, 0x0427 }, /* Cyrillic_CHE Ч CYRILLIC CAPITAL LETTER CHE */ ++ { 0x06ff, 0x042a }, /* Cyrillic_HARDSIGN Ъ CYRILLIC CAPITAL LETTER HARD SIGN */ ++ { 0x07a1, 0x0386 }, /* Greek_ALPHAaccent Ά GREEK CAPITAL LETTER ALPHA WITH TONOS */ ++ { 0x07a2, 0x0388 }, /* Greek_EPSILONaccent Έ GREEK CAPITAL LETTER EPSILON WITH TONOS */ ++ { 0x07a3, 0x0389 }, /* Greek_ETAaccent Ή GREEK CAPITAL LETTER ETA WITH TONOS */ ++ { 0x07a4, 0x038a }, /* Greek_IOTAaccent Ί GREEK CAPITAL LETTER IOTA WITH TONOS */ ++ { 0x07a5, 0x03aa }, /* Greek_IOTAdieresis Ϊ GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */ ++ { 0x07a7, 0x038c }, /* Greek_OMICRONaccent Ό GREEK CAPITAL LETTER OMICRON WITH TONOS */ ++ { 0x07a8, 0x038e }, /* Greek_UPSILONaccent Ύ GREEK CAPITAL LETTER UPSILON WITH TONOS */ ++ { 0x07a9, 0x03ab }, /* Greek_UPSILONdieresis Ϋ GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */ ++ { 0x07ab, 0x038f }, /* Greek_OMEGAaccent Ώ GREEK CAPITAL LETTER OMEGA WITH TONOS */ ++ { 0x07ae, 0x0385 }, /* Greek_accentdieresis ΅ GREEK DIALYTIKA TONOS */ ++ { 0x07af, 0x2015 }, /* Greek_horizbar ― HORIZONTAL BAR */ ++ { 0x07b1, 0x03ac }, /* Greek_alphaaccent ά GREEK SMALL LETTER ALPHA WITH TONOS */ ++ { 0x07b2, 0x03ad }, /* Greek_epsilonaccent έ GREEK SMALL LETTER EPSILON WITH TONOS */ ++ { 0x07b3, 0x03ae }, /* Greek_etaaccent ή GREEK SMALL LETTER ETA WITH TONOS */ ++ { 0x07b4, 0x03af }, /* Greek_iotaaccent ί GREEK SMALL LETTER IOTA WITH TONOS */ ++ { 0x07b5, 0x03ca }, /* Greek_iotadieresis ϊ GREEK SMALL LETTER IOTA WITH DIALYTIKA */ ++ { 0x07b6, 0x0390 }, /* Greek_iotaaccentdieresis ΐ GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ ++ { 0x07b7, 0x03cc }, /* Greek_omicronaccent ό GREEK SMALL LETTER OMICRON WITH TONOS */ ++ { 0x07b8, 0x03cd }, /* Greek_upsilonaccent ύ GREEK SMALL LETTER UPSILON WITH TONOS */ ++ { 0x07b9, 0x03cb }, /* Greek_upsilondieresis ϋ GREEK SMALL LETTER UPSILON WITH DIALYTIKA */ ++ { 0x07ba, 0x03b0 }, /* Greek_upsilonaccentdieresis ΰ GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */ ++ { 0x07bb, 0x03ce }, /* Greek_omegaaccent ώ GREEK SMALL LETTER OMEGA WITH TONOS */ ++ { 0x07c1, 0x0391 }, /* Greek_ALPHA Α GREEK CAPITAL LETTER ALPHA */ ++ { 0x07c2, 0x0392 }, /* Greek_BETA Β GREEK CAPITAL LETTER BETA */ ++ { 0x07c3, 0x0393 }, /* Greek_GAMMA Γ GREEK CAPITAL LETTER GAMMA */ ++ { 0x07c4, 0x0394 }, /* Greek_DELTA Δ GREEK CAPITAL LETTER DELTA */ ++ { 0x07c5, 0x0395 }, /* Greek_EPSILON Ε GREEK CAPITAL LETTER EPSILON */ ++ { 0x07c6, 0x0396 }, /* Greek_ZETA Ζ GREEK CAPITAL LETTER ZETA */ ++ { 0x07c7, 0x0397 }, /* Greek_ETA Η GREEK CAPITAL LETTER ETA */ ++ { 0x07c8, 0x0398 }, /* Greek_THETA Θ GREEK CAPITAL LETTER THETA */ ++ { 0x07c9, 0x0399 }, /* Greek_IOTA Ι GREEK CAPITAL LETTER IOTA */ ++ { 0x07ca, 0x039a }, /* Greek_KAPPA Κ GREEK CAPITAL LETTER KAPPA */ ++ { 0x07cb, 0x039b }, /* Greek_LAMBDA Λ GREEK CAPITAL LETTER LAMDA */ ++ { 0x07cc, 0x039c }, /* Greek_MU Μ GREEK CAPITAL LETTER MU */ ++ { 0x07cd, 0x039d }, /* Greek_NU Ν GREEK CAPITAL LETTER NU */ ++ { 0x07ce, 0x039e }, /* Greek_XI Ξ GREEK CAPITAL LETTER XI */ ++ { 0x07cf, 0x039f }, /* Greek_OMICRON Ο GREEK CAPITAL LETTER OMICRON */ ++ { 0x07d0, 0x03a0 }, /* Greek_PI Π GREEK CAPITAL LETTER PI */ ++ { 0x07d1, 0x03a1 }, /* Greek_RHO Ρ GREEK CAPITAL LETTER RHO */ ++ { 0x07d2, 0x03a3 }, /* Greek_SIGMA Σ GREEK CAPITAL LETTER SIGMA */ ++ { 0x07d4, 0x03a4 }, /* Greek_TAU Τ GREEK CAPITAL LETTER TAU */ ++ { 0x07d5, 0x03a5 }, /* Greek_UPSILON Υ GREEK CAPITAL LETTER UPSILON */ ++ { 0x07d6, 0x03a6 }, /* Greek_PHI Φ GREEK CAPITAL LETTER PHI */ ++ { 0x07d7, 0x03a7 }, /* Greek_CHI Χ GREEK CAPITAL LETTER CHI */ ++ { 0x07d8, 0x03a8 }, /* Greek_PSI Ψ GREEK CAPITAL LETTER PSI */ ++ { 0x07d9, 0x03a9 }, /* Greek_OMEGA Ω GREEK CAPITAL LETTER OMEGA */ ++ { 0x07e1, 0x03b1 }, /* Greek_alpha α GREEK SMALL LETTER ALPHA */ ++ { 0x07e2, 0x03b2 }, /* Greek_beta β GREEK SMALL LETTER BETA */ ++ { 0x07e3, 0x03b3 }, /* Greek_gamma γ GREEK SMALL LETTER GAMMA */ ++ { 0x07e4, 0x03b4 }, /* Greek_delta δ GREEK SMALL LETTER DELTA */ ++ { 0x07e5, 0x03b5 }, /* Greek_epsilon ε GREEK SMALL LETTER EPSILON */ ++ { 0x07e6, 0x03b6 }, /* Greek_zeta ζ GREEK SMALL LETTER ZETA */ ++ { 0x07e7, 0x03b7 }, /* Greek_eta η GREEK SMALL LETTER ETA */ ++ { 0x07e8, 0x03b8 }, /* Greek_theta θ GREEK SMALL LETTER THETA */ ++ { 0x07e9, 0x03b9 }, /* Greek_iota ι GREEK SMALL LETTER IOTA */ ++ { 0x07ea, 0x03ba }, /* Greek_kappa κ GREEK SMALL LETTER KAPPA */ ++ { 0x07eb, 0x03bb }, /* Greek_lambda λ GREEK SMALL LETTER LAMDA */ ++ { 0x07ec, 0x03bc }, /* Greek_mu μ GREEK SMALL LETTER MU */ ++ { 0x07ed, 0x03bd }, /* Greek_nu ν GREEK SMALL LETTER NU */ ++ { 0x07ee, 0x03be }, /* Greek_xi ξ GREEK SMALL LETTER XI */ ++ { 0x07ef, 0x03bf }, /* Greek_omicron ο GREEK SMALL LETTER OMICRON */ ++ { 0x07f0, 0x03c0 }, /* Greek_pi π GREEK SMALL LETTER PI */ ++ { 0x07f1, 0x03c1 }, /* Greek_rho ρ GREEK SMALL LETTER RHO */ ++ { 0x07f2, 0x03c3 }, /* Greek_sigma σ GREEK SMALL LETTER SIGMA */ ++ { 0x07f3, 0x03c2 }, /* Greek_finalsmallsigma ς GREEK SMALL LETTER FINAL SIGMA */ ++ { 0x07f4, 0x03c4 }, /* Greek_tau τ GREEK SMALL LETTER TAU */ ++ { 0x07f5, 0x03c5 }, /* Greek_upsilon υ GREEK SMALL LETTER UPSILON */ ++ { 0x07f6, 0x03c6 }, /* Greek_phi φ GREEK SMALL LETTER PHI */ ++ { 0x07f7, 0x03c7 }, /* Greek_chi χ GREEK SMALL LETTER CHI */ ++ { 0x07f8, 0x03c8 }, /* Greek_psi ψ GREEK SMALL LETTER PSI */ ++ { 0x07f9, 0x03c9 }, /* Greek_omega ω GREEK SMALL LETTER OMEGA */ ++ /* 0x08a1 leftradical ? ??? */ ++ /* 0x08a2 topleftradical ? ??? */ ++ /* 0x08a3 horizconnector ? ??? */ ++ { 0x08a4, 0x2320 }, /* topintegral ⌠ TOP HALF INTEGRAL */ ++ { 0x08a5, 0x2321 }, /* botintegral ⌡ BOTTOM HALF INTEGRAL */ ++ { 0x08a6, 0x2502 }, /* vertconnector │ BOX DRAWINGS LIGHT VERTICAL */ ++ /* 0x08a7 topleftsqbracket ? ??? */ ++ /* 0x08a8 botleftsqbracket ? ??? */ ++ /* 0x08a9 toprightsqbracket ? ??? */ ++ /* 0x08aa botrightsqbracket ? ??? */ ++ /* 0x08ab topleftparens ? ??? */ ++ /* 0x08ac botleftparens ? ??? */ ++ /* 0x08ad toprightparens ? ??? */ ++ /* 0x08ae botrightparens ? ??? */ ++ /* 0x08af leftmiddlecurlybrace ? ??? */ ++ /* 0x08b0 rightmiddlecurlybrace ? ??? */ ++ /* 0x08b1 topleftsummation ? ??? */ ++ /* 0x08b2 botleftsummation ? ??? */ ++ /* 0x08b3 topvertsummationconnector ? ??? */ ++ /* 0x08b4 botvertsummationconnector ? ??? */ ++ /* 0x08b5 toprightsummation ? ??? */ ++ /* 0x08b6 botrightsummation ? ??? */ ++ /* 0x08b7 rightmiddlesummation ? ??? */ ++ { 0x08bc, 0x2264 }, /* lessthanequal ≤ LESS-THAN OR EQUAL TO */ ++ { 0x08bd, 0x2260 }, /* notequal ≠ NOT EQUAL TO */ ++ { 0x08be, 0x2265 }, /* greaterthanequal ≥ GREATER-THAN OR EQUAL TO */ ++ { 0x08bf, 0x222b }, /* integral ∫ INTEGRAL */ ++ { 0x08c0, 0x2234 }, /* therefore ∴ THEREFORE */ ++ { 0x08c1, 0x221d }, /* variation ∝ PROPORTIONAL TO */ ++ { 0x08c2, 0x221e }, /* infinity ∞ INFINITY */ ++ { 0x08c5, 0x2207 }, /* nabla ∇ NABLA */ ++ { 0x08c8, 0x2245 }, /* approximate ≅ APPROXIMATELY EQUAL TO */ ++ /* 0x08c9 similarequal ? ??? */ ++ { 0x08cd, 0x21d4 }, /* ifonlyif ⇔ LEFT RIGHT DOUBLE ARROW */ ++ { 0x08ce, 0x21d2 }, /* implies ⇒ RIGHTWARDS DOUBLE ARROW */ ++ { 0x08cf, 0x2261 }, /* identical ≡ IDENTICAL TO */ ++ { 0x08d6, 0x221a }, /* radical √ SQUARE ROOT */ ++ { 0x08da, 0x2282 }, /* includedin ⊂ SUBSET OF */ ++ { 0x08db, 0x2283 }, /* includes ⊃ SUPERSET OF */ ++ { 0x08dc, 0x2229 }, /* intersection ∩ INTERSECTION */ ++ { 0x08dd, 0x222a }, /* union ∪ UNION */ ++ { 0x08de, 0x2227 }, /* logicaland ∧ LOGICAL AND */ ++ { 0x08df, 0x2228 }, /* logicalor ∨ LOGICAL OR */ ++ { 0x08ef, 0x2202 }, /* partialderivative ∂ PARTIAL DIFFERENTIAL */ ++ { 0x08f6, 0x0192 }, /* function ƒ LATIN SMALL LETTER F WITH HOOK */ ++ { 0x08fb, 0x2190 }, /* leftarrow ← LEFTWARDS ARROW */ ++ { 0x08fc, 0x2191 }, /* uparrow ↑ UPWARDS ARROW */ ++ { 0x08fd, 0x2192 }, /* rightarrow → RIGHTWARDS ARROW */ ++ { 0x08fe, 0x2193 }, /* downarrow ↓ DOWNWARDS ARROW */ ++ { 0x09df, 0x2422 }, /* blank ␢ BLANK SYMBOL */ ++ { 0x09e0, 0x25c6 }, /* soliddiamond ◆ BLACK DIAMOND */ ++ { 0x09e1, 0x2592 }, /* checkerboard ▒ MEDIUM SHADE */ ++ { 0x09e2, 0x2409 }, /* ht ␉ SYMBOL FOR HORIZONTAL TABULATION */ ++ { 0x09e3, 0x240c }, /* ff ␌ SYMBOL FOR FORM FEED */ ++ { 0x09e4, 0x240d }, /* cr ␍ SYMBOL FOR CARRIAGE RETURN */ ++ { 0x09e5, 0x240a }, /* lf ␊ SYMBOL FOR LINE FEED */ ++ { 0x09e8, 0x2424 }, /* nl ␤ SYMBOL FOR NEWLINE */ ++ { 0x09e9, 0x240b }, /* vt ␋ SYMBOL FOR VERTICAL TABULATION */ ++ { 0x09ea, 0x2518 }, /* lowrightcorner ┘ BOX DRAWINGS LIGHT UP AND LEFT */ ++ { 0x09eb, 0x2510 }, /* uprightcorner ┐ BOX DRAWINGS LIGHT DOWN AND LEFT */ ++ { 0x09ec, 0x250c }, /* upleftcorner ┌ BOX DRAWINGS LIGHT DOWN AND RIGHT */ ++ { 0x09ed, 0x2514 }, /* lowleftcorner └ BOX DRAWINGS LIGHT UP AND RIGHT */ ++ { 0x09ee, 0x253c }, /* crossinglines ┼ BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */ ++ /* 0x09ef horizlinescan1 ? ??? */ ++ /* 0x09f0 horizlinescan3 ? ??? */ ++ { 0x09f1, 0x2500 }, /* horizlinescan5 ─ BOX DRAWINGS LIGHT HORIZONTAL */ ++ /* 0x09f2 horizlinescan7 ? ??? */ ++ /* 0x09f3 horizlinescan9 ? ??? */ ++ { 0x09f4, 0x251c }, /* leftt ├ BOX DRAWINGS LIGHT VERTICAL AND RIGHT */ ++ { 0x09f5, 0x2524 }, /* rightt ┤ BOX DRAWINGS LIGHT VERTICAL AND LEFT */ ++ { 0x09f6, 0x2534 }, /* bott ┴ BOX DRAWINGS LIGHT UP AND HORIZONTAL */ ++ { 0x09f7, 0x252c }, /* topt ┬ BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */ ++ { 0x09f8, 0x2502 }, /* vertbar │ BOX DRAWINGS LIGHT VERTICAL */ ++ { 0x0aa1, 0x2003 }, /* emspace   EM SPACE */ ++ { 0x0aa2, 0x2002 }, /* enspace   EN SPACE */ ++ { 0x0aa3, 0x2004 }, /* em3space   THREE-PER-EM SPACE */ ++ { 0x0aa4, 0x2005 }, /* em4space   FOUR-PER-EM SPACE */ ++ { 0x0aa5, 0x2007 }, /* digitspace   FIGURE SPACE */ ++ { 0x0aa6, 0x2008 }, /* punctspace   PUNCTUATION SPACE */ ++ { 0x0aa7, 0x2009 }, /* thinspace   THIN SPACE */ ++ { 0x0aa8, 0x200a }, /* hairspace   HAIR SPACE */ ++ { 0x0aa9, 0x2014 }, /* emdash — EM DASH */ ++ { 0x0aaa, 0x2013 }, /* endash – EN DASH */ ++ /* 0x0aac signifblank ? ??? */ ++ { 0x0aae, 0x2026 }, /* ellipsis … HORIZONTAL ELLIPSIS */ ++ /* 0x0aaf doubbaselinedot ? ??? */ ++ { 0x0ab0, 0x2153 }, /* onethird ⅓ VULGAR FRACTION ONE THIRD */ ++ { 0x0ab1, 0x2154 }, /* twothirds ⅔ VULGAR FRACTION TWO THIRDS */ ++ { 0x0ab2, 0x2155 }, /* onefifth ⅕ VULGAR FRACTION ONE FIFTH */ ++ { 0x0ab3, 0x2156 }, /* twofifths ⅖ VULGAR FRACTION TWO FIFTHS */ ++ { 0x0ab4, 0x2157 }, /* threefifths ⅗ VULGAR FRACTION THREE FIFTHS */ ++ { 0x0ab5, 0x2158 }, /* fourfifths ⅘ VULGAR FRACTION FOUR FIFTHS */ ++ { 0x0ab6, 0x2159 }, /* onesixth ⅙ VULGAR FRACTION ONE SIXTH */ ++ { 0x0ab7, 0x215a }, /* fivesixths ⅚ VULGAR FRACTION FIVE SIXTHS */ ++ { 0x0ab8, 0x2105 }, /* careof ℅ CARE OF */ ++ { 0x0abb, 0x2012 }, /* figdash ‒ FIGURE DASH */ ++ { 0x0abc, 0x2329 }, /* leftanglebracket 〈 LEFT-POINTING ANGLE BRACKET */ ++ { 0x0abd, 0x002e }, /* decimalpoint . FULL STOP */ ++ { 0x0abe, 0x232a }, /* rightanglebracket 〉 RIGHT-POINTING ANGLE BRACKET */ ++ /* 0x0abf marker ? ??? */ ++ { 0x0ac3, 0x215b }, /* oneeighth ⅛ VULGAR FRACTION ONE EIGHTH */ ++ { 0x0ac4, 0x215c }, /* threeeighths ⅜ VULGAR FRACTION THREE EIGHTHS */ ++ { 0x0ac5, 0x215d }, /* fiveeighths ⅝ VULGAR FRACTION FIVE EIGHTHS */ ++ { 0x0ac6, 0x215e }, /* seveneighths ⅞ VULGAR FRACTION SEVEN EIGHTHS */ ++ { 0x0ac9, 0x2122 }, /* trademark ™ TRADE MARK SIGN */ ++ { 0x0aca, 0x2613 }, /* signaturemark ☓ SALTIRE */ ++ /* 0x0acb trademarkincircle ? ??? */ ++ { 0x0acc, 0x25c1 }, /* leftopentriangle ◁ WHITE LEFT-POINTING TRIANGLE */ ++ { 0x0acd, 0x25b7 }, /* rightopentriangle ▷ WHITE RIGHT-POINTING TRIANGLE */ ++ { 0x0ace, 0x25cb }, /* emopencircle ○ WHITE CIRCLE */ ++ { 0x0acf, 0x25a1 }, /* emopenrectangle □ WHITE SQUARE */ ++ { 0x0ad0, 0x2018 }, /* leftsinglequotemark ‘ LEFT SINGLE QUOTATION MARK */ ++ { 0x0ad1, 0x2019 }, /* rightsinglequotemark ’ RIGHT SINGLE QUOTATION MARK */ ++ { 0x0ad2, 0x201c }, /* leftdoublequotemark “ LEFT DOUBLE QUOTATION MARK */ ++ { 0x0ad3, 0x201d }, /* rightdoublequotemark ” RIGHT DOUBLE QUOTATION MARK */ ++ { 0x0ad4, 0x211e }, /* prescription ℞ PRESCRIPTION TAKE */ ++ { 0x0ad6, 0x2032 }, /* minutes ′ PRIME */ ++ { 0x0ad7, 0x2033 }, /* seconds ″ DOUBLE PRIME */ ++ { 0x0ad9, 0x271d }, /* latincross ✝ LATIN CROSS */ ++ /* 0x0ada hexagram ? ??? */ ++ { 0x0adb, 0x25ac }, /* filledrectbullet ▬ BLACK RECTANGLE */ ++ { 0x0adc, 0x25c0 }, /* filledlefttribullet ◀ BLACK LEFT-POINTING TRIANGLE */ ++ { 0x0add, 0x25b6 }, /* filledrighttribullet ▶ BLACK RIGHT-POINTING TRIANGLE */ ++ { 0x0ade, 0x25cf }, /* emfilledcircle ● BLACK CIRCLE */ ++ { 0x0adf, 0x25a0 }, /* emfilledrect ■ BLACK SQUARE */ ++ { 0x0ae0, 0x25e6 }, /* enopencircbullet ◦ WHITE BULLET */ ++ { 0x0ae1, 0x25ab }, /* enopensquarebullet ▫ WHITE SMALL SQUARE */ ++ { 0x0ae2, 0x25ad }, /* openrectbullet ▭ WHITE RECTANGLE */ ++ { 0x0ae3, 0x25b3 }, /* opentribulletup △ WHITE UP-POINTING TRIANGLE */ ++ { 0x0ae4, 0x25bd }, /* opentribulletdown ▽ WHITE DOWN-POINTING TRIANGLE */ ++ { 0x0ae5, 0x2606 }, /* openstar ☆ WHITE STAR */ ++ { 0x0ae6, 0x2022 }, /* enfilledcircbullet • BULLET */ ++ { 0x0ae7, 0x25aa }, /* enfilledsqbullet ▪ BLACK SMALL SQUARE */ ++ { 0x0ae8, 0x25b2 }, /* filledtribulletup ▲ BLACK UP-POINTING TRIANGLE */ ++ { 0x0ae9, 0x25bc }, /* filledtribulletdown ▼ BLACK DOWN-POINTING TRIANGLE */ ++ { 0x0aea, 0x261c }, /* leftpointer ☜ WHITE LEFT POINTING INDEX */ ++ { 0x0aeb, 0x261e }, /* rightpointer ☞ WHITE RIGHT POINTING INDEX */ ++ { 0x0aec, 0x2663 }, /* club ♣ BLACK CLUB SUIT */ ++ { 0x0aed, 0x2666 }, /* diamond ♦ BLACK DIAMOND SUIT */ ++ { 0x0aee, 0x2665 }, /* heart ♥ BLACK HEART SUIT */ ++ { 0x0af0, 0x2720 }, /* maltesecross ✠ MALTESE CROSS */ ++ { 0x0af1, 0x2020 }, /* dagger † DAGGER */ ++ { 0x0af2, 0x2021 }, /* doubledagger ‡ DOUBLE DAGGER */ ++ { 0x0af3, 0x2713 }, /* checkmark ✓ CHECK MARK */ ++ { 0x0af4, 0x2717 }, /* ballotcross ✗ BALLOT X */ ++ { 0x0af5, 0x266f }, /* musicalsharp ♯ MUSIC SHARP SIGN */ ++ { 0x0af6, 0x266d }, /* musicalflat ♭ MUSIC FLAT SIGN */ ++ { 0x0af7, 0x2642 }, /* malesymbol ♂ MALE SIGN */ ++ { 0x0af8, 0x2640 }, /* femalesymbol ♀ FEMALE SIGN */ ++ { 0x0af9, 0x260e }, /* telephone ☎ BLACK TELEPHONE */ ++ { 0x0afa, 0x2315 }, /* telephonerecorder ⌕ TELEPHONE RECORDER */ ++ { 0x0afb, 0x2117 }, /* phonographcopyright ℗ SOUND RECORDING COPYRIGHT */ ++ { 0x0afc, 0x2038 }, /* caret ‸ CARET */ ++ { 0x0afd, 0x201a }, /* singlelowquotemark ‚ SINGLE LOW-9 QUOTATION MARK */ ++ { 0x0afe, 0x201e }, /* doublelowquotemark „ DOUBLE LOW-9 QUOTATION MARK */ ++ /* 0x0aff cursor ? ??? */ ++ { 0x0ba3, 0x003c }, /* leftcaret < LESS-THAN SIGN */ ++ { 0x0ba6, 0x003e }, /* rightcaret > GREATER-THAN SIGN */ ++ { 0x0ba8, 0x2228 }, /* downcaret ∨ LOGICAL OR */ ++ { 0x0ba9, 0x2227 }, /* upcaret ∧ LOGICAL AND */ ++ { 0x0bc0, 0x00af }, /* overbar ¯ MACRON */ ++ { 0x0bc2, 0x22a4 }, /* downtack ⊤ DOWN TACK */ ++ { 0x0bc3, 0x2229 }, /* upshoe ∩ INTERSECTION */ ++ { 0x0bc4, 0x230a }, /* downstile ⌊ LEFT FLOOR */ ++ { 0x0bc6, 0x005f }, /* underbar _ LOW LINE */ ++ { 0x0bca, 0x2218 }, /* jot ∘ RING OPERATOR */ ++ { 0x0bcc, 0x2395 }, /* quad ⎕ APL FUNCTIONAL SYMBOL QUAD (Unicode 3.0) */ ++ { 0x0bce, 0x22a5 }, /* uptack ⊥ UP TACK */ ++ { 0x0bcf, 0x25cb }, /* circle ○ WHITE CIRCLE */ ++ { 0x0bd3, 0x2308 }, /* upstile ⌈ LEFT CEILING */ ++ { 0x0bd6, 0x222a }, /* downshoe ∪ UNION */ ++ { 0x0bd8, 0x2283 }, /* rightshoe ⊃ SUPERSET OF */ ++ { 0x0bda, 0x2282 }, /* leftshoe ⊂ SUBSET OF */ ++ { 0x0bdc, 0x22a3 }, /* lefttack ⊣ LEFT TACK */ ++ { 0x0bfc, 0x22a2 }, /* righttack ⊢ RIGHT TACK */ ++ { 0x0cdf, 0x2017 }, /* hebrew_doublelowline ‗ DOUBLE LOW LINE */ ++ { 0x0ce0, 0x05d0 }, /* hebrew_aleph א HEBREW LETTER ALEF */ ++ { 0x0ce1, 0x05d1 }, /* hebrew_bet ב HEBREW LETTER BET */ ++ { 0x0ce2, 0x05d2 }, /* hebrew_gimel ג HEBREW LETTER GIMEL */ ++ { 0x0ce3, 0x05d3 }, /* hebrew_dalet ד HEBREW LETTER DALET */ ++ { 0x0ce4, 0x05d4 }, /* hebrew_he ה HEBREW LETTER HE */ ++ { 0x0ce5, 0x05d5 }, /* hebrew_waw ו HEBREW LETTER VAV */ ++ { 0x0ce6, 0x05d6 }, /* hebrew_zain ז HEBREW LETTER ZAYIN */ ++ { 0x0ce7, 0x05d7 }, /* hebrew_chet ח HEBREW LETTER HET */ ++ { 0x0ce8, 0x05d8 }, /* hebrew_tet ט HEBREW LETTER TET */ ++ { 0x0ce9, 0x05d9 }, /* hebrew_yod י HEBREW LETTER YOD */ ++ { 0x0cea, 0x05da }, /* hebrew_finalkaph ך HEBREW LETTER FINAL KAF */ ++ { 0x0ceb, 0x05db }, /* hebrew_kaph כ HEBREW LETTER KAF */ ++ { 0x0cec, 0x05dc }, /* hebrew_lamed ל HEBREW LETTER LAMED */ ++ { 0x0ced, 0x05dd }, /* hebrew_finalmem ם HEBREW LETTER FINAL MEM */ ++ { 0x0cee, 0x05de }, /* hebrew_mem מ HEBREW LETTER MEM */ ++ { 0x0cef, 0x05df }, /* hebrew_finalnun ן HEBREW LETTER FINAL NUN */ ++ { 0x0cf0, 0x05e0 }, /* hebrew_nun נ HEBREW LETTER NUN */ ++ { 0x0cf1, 0x05e1 }, /* hebrew_samech ס HEBREW LETTER SAMEKH */ ++ { 0x0cf2, 0x05e2 }, /* hebrew_ayin ע HEBREW LETTER AYIN */ ++ { 0x0cf3, 0x05e3 }, /* hebrew_finalpe ף HEBREW LETTER FINAL PE */ ++ { 0x0cf4, 0x05e4 }, /* hebrew_pe פ HEBREW LETTER PE */ ++ { 0x0cf5, 0x05e5 }, /* hebrew_finalzade ץ HEBREW LETTER FINAL TSADI */ ++ { 0x0cf6, 0x05e6 }, /* hebrew_zade צ HEBREW LETTER TSADI */ ++ { 0x0cf7, 0x05e7 }, /* hebrew_qoph ק HEBREW LETTER QOF */ ++ { 0x0cf8, 0x05e8 }, /* hebrew_resh ר HEBREW LETTER RESH */ ++ { 0x0cf9, 0x05e9 }, /* hebrew_shin ש HEBREW LETTER SHIN */ ++ { 0x0cfa, 0x05ea }, /* hebrew_taw ת HEBREW LETTER TAV */ ++ { 0x0da1, 0x0e01 }, /* Thai_kokai ก THAI CHARACTER KO KAI */ ++ { 0x0da2, 0x0e02 }, /* Thai_khokhai ข THAI CHARACTER KHO KHAI */ ++ { 0x0da3, 0x0e03 }, /* Thai_khokhuat ฃ THAI CHARACTER KHO KHUAT */ ++ { 0x0da4, 0x0e04 }, /* Thai_khokhwai ค THAI CHARACTER KHO KHWAI */ ++ { 0x0da5, 0x0e05 }, /* Thai_khokhon ฅ THAI CHARACTER KHO KHON */ ++ { 0x0da6, 0x0e06 }, /* Thai_khorakhang ฆ THAI CHARACTER KHO RAKHANG */ ++ { 0x0da7, 0x0e07 }, /* Thai_ngongu ง THAI CHARACTER NGO NGU */ ++ { 0x0da8, 0x0e08 }, /* Thai_chochan จ THAI CHARACTER CHO CHAN */ ++ { 0x0da9, 0x0e09 }, /* Thai_choching ฉ THAI CHARACTER CHO CHING */ ++ { 0x0daa, 0x0e0a }, /* Thai_chochang ช THAI CHARACTER CHO CHANG */ ++ { 0x0dab, 0x0e0b }, /* Thai_soso ซ THAI CHARACTER SO SO */ ++ { 0x0dac, 0x0e0c }, /* Thai_chochoe ฌ THAI CHARACTER CHO CHOE */ ++ { 0x0dad, 0x0e0d }, /* Thai_yoying ญ THAI CHARACTER YO YING */ ++ { 0x0dae, 0x0e0e }, /* Thai_dochada ฎ THAI CHARACTER DO CHADA */ ++ { 0x0daf, 0x0e0f }, /* Thai_topatak ฏ THAI CHARACTER TO PATAK */ ++ { 0x0db0, 0x0e10 }, /* Thai_thothan ฐ THAI CHARACTER THO THAN */ ++ { 0x0db1, 0x0e11 }, /* Thai_thonangmontho ฑ THAI CHARACTER THO NANGMONTHO */ ++ { 0x0db2, 0x0e12 }, /* Thai_thophuthao ฒ THAI CHARACTER THO PHUTHAO */ ++ { 0x0db3, 0x0e13 }, /* Thai_nonen ณ THAI CHARACTER NO NEN */ ++ { 0x0db4, 0x0e14 }, /* Thai_dodek ด THAI CHARACTER DO DEK */ ++ { 0x0db5, 0x0e15 }, /* Thai_totao ต THAI CHARACTER TO TAO */ ++ { 0x0db6, 0x0e16 }, /* Thai_thothung ถ THAI CHARACTER THO THUNG */ ++ { 0x0db7, 0x0e17 }, /* Thai_thothahan ท THAI CHARACTER THO THAHAN */ ++ { 0x0db8, 0x0e18 }, /* Thai_thothong ธ THAI CHARACTER THO THONG */ ++ { 0x0db9, 0x0e19 }, /* Thai_nonu น THAI CHARACTER NO NU */ ++ { 0x0dba, 0x0e1a }, /* Thai_bobaimai บ THAI CHARACTER BO BAIMAI */ ++ { 0x0dbb, 0x0e1b }, /* Thai_popla ป THAI CHARACTER PO PLA */ ++ { 0x0dbc, 0x0e1c }, /* Thai_phophung ผ THAI CHARACTER PHO PHUNG */ ++ { 0x0dbd, 0x0e1d }, /* Thai_fofa ฝ THAI CHARACTER FO FA */ ++ { 0x0dbe, 0x0e1e }, /* Thai_phophan พ THAI CHARACTER PHO PHAN */ ++ { 0x0dbf, 0x0e1f }, /* Thai_fofan ฟ THAI CHARACTER FO FAN */ ++ { 0x0dc0, 0x0e20 }, /* Thai_phosamphao ภ THAI CHARACTER PHO SAMPHAO */ ++ { 0x0dc1, 0x0e21 }, /* Thai_moma ม THAI CHARACTER MO MA */ ++ { 0x0dc2, 0x0e22 }, /* Thai_yoyak ย THAI CHARACTER YO YAK */ ++ { 0x0dc3, 0x0e23 }, /* Thai_rorua ร THAI CHARACTER RO RUA */ ++ { 0x0dc4, 0x0e24 }, /* Thai_ru ฤ THAI CHARACTER RU */ ++ { 0x0dc5, 0x0e25 }, /* Thai_loling ล THAI CHARACTER LO LING */ ++ { 0x0dc6, 0x0e26 }, /* Thai_lu ฦ THAI CHARACTER LU */ ++ { 0x0dc7, 0x0e27 }, /* Thai_wowaen ว THAI CHARACTER WO WAEN */ ++ { 0x0dc8, 0x0e28 }, /* Thai_sosala ศ THAI CHARACTER SO SALA */ ++ { 0x0dc9, 0x0e29 }, /* Thai_sorusi ษ THAI CHARACTER SO RUSI */ ++ { 0x0dca, 0x0e2a }, /* Thai_sosua ส THAI CHARACTER SO SUA */ ++ { 0x0dcb, 0x0e2b }, /* Thai_hohip ห THAI CHARACTER HO HIP */ ++ { 0x0dcc, 0x0e2c }, /* Thai_lochula ฬ THAI CHARACTER LO CHULA */ ++ { 0x0dcd, 0x0e2d }, /* Thai_oang อ THAI CHARACTER O ANG */ ++ { 0x0dce, 0x0e2e }, /* Thai_honokhuk ฮ THAI CHARACTER HO NOKHUK */ ++ { 0x0dcf, 0x0e2f }, /* Thai_paiyannoi ฯ THAI CHARACTER PAIYANNOI */ ++ { 0x0dd0, 0x0e30 }, /* Thai_saraa ะ THAI CHARACTER SARA A */ ++ { 0x0dd1, 0x0e31 }, /* Thai_maihanakat ั THAI CHARACTER MAI HAN-AKAT */ ++ { 0x0dd2, 0x0e32 }, /* Thai_saraaa า THAI CHARACTER SARA AA */ ++ { 0x0dd3, 0x0e33 }, /* Thai_saraam ำ THAI CHARACTER SARA AM */ ++ { 0x0dd4, 0x0e34 }, /* Thai_sarai ิ THAI CHARACTER SARA I */ ++ { 0x0dd5, 0x0e35 }, /* Thai_saraii ี THAI CHARACTER SARA II */ ++ { 0x0dd6, 0x0e36 }, /* Thai_saraue ึ THAI CHARACTER SARA UE */ ++ { 0x0dd7, 0x0e37 }, /* Thai_sarauee ื THAI CHARACTER SARA UEE */ ++ { 0x0dd8, 0x0e38 }, /* Thai_sarau ุ THAI CHARACTER SARA U */ ++ { 0x0dd9, 0x0e39 }, /* Thai_sarauu ู THAI CHARACTER SARA UU */ ++ { 0x0dda, 0x0e3a }, /* Thai_phinthu ฺ THAI CHARACTER PHINTHU */ ++ { 0x0dde, 0x0e3e }, /* Thai_maihanakat_maitho ฾ ??? */ ++ { 0x0ddf, 0x0e3f }, /* Thai_baht ฿ THAI CURRENCY SYMBOL BAHT */ ++ { 0x0de0, 0x0e40 }, /* Thai_sarae เ THAI CHARACTER SARA E */ ++ { 0x0de1, 0x0e41 }, /* Thai_saraae แ THAI CHARACTER SARA AE */ ++ { 0x0de2, 0x0e42 }, /* Thai_sarao โ THAI CHARACTER SARA O */ ++ { 0x0de3, 0x0e43 }, /* Thai_saraaimaimuan ใ THAI CHARACTER SARA AI MAIMUAN */ ++ { 0x0de4, 0x0e44 }, /* Thai_saraaimaimalai ไ THAI CHARACTER SARA AI MAIMALAI */ ++ { 0x0de5, 0x0e45 }, /* Thai_lakkhangyao ๅ THAI CHARACTER LAKKHANGYAO */ ++ { 0x0de6, 0x0e46 }, /* Thai_maiyamok ๆ THAI CHARACTER MAIYAMOK */ ++ { 0x0de7, 0x0e47 }, /* Thai_maitaikhu ็ THAI CHARACTER MAITAIKHU */ ++ { 0x0de8, 0x0e48 }, /* Thai_maiek ่ THAI CHARACTER MAI EK */ ++ { 0x0de9, 0x0e49 }, /* Thai_maitho ้ THAI CHARACTER MAI THO */ ++ { 0x0dea, 0x0e4a }, /* Thai_maitri ๊ THAI CHARACTER MAI TRI */ ++ { 0x0deb, 0x0e4b }, /* Thai_maichattawa ๋ THAI CHARACTER MAI CHATTAWA */ ++ { 0x0dec, 0x0e4c }, /* Thai_thanthakhat ์ THAI CHARACTER THANTHAKHAT */ ++ { 0x0ded, 0x0e4d }, /* Thai_nikhahit ํ THAI CHARACTER NIKHAHIT */ ++ { 0x0df0, 0x0e50 }, /* Thai_leksun ๐ THAI DIGIT ZERO */ ++ { 0x0df1, 0x0e51 }, /* Thai_leknung ๑ THAI DIGIT ONE */ ++ { 0x0df2, 0x0e52 }, /* Thai_leksong ๒ THAI DIGIT TWO */ ++ { 0x0df3, 0x0e53 }, /* Thai_leksam ๓ THAI DIGIT THREE */ ++ { 0x0df4, 0x0e54 }, /* Thai_leksi ๔ THAI DIGIT FOUR */ ++ { 0x0df5, 0x0e55 }, /* Thai_lekha ๕ THAI DIGIT FIVE */ ++ { 0x0df6, 0x0e56 }, /* Thai_lekhok ๖ THAI DIGIT SIX */ ++ { 0x0df7, 0x0e57 }, /* Thai_lekchet ๗ THAI DIGIT SEVEN */ ++ { 0x0df8, 0x0e58 }, /* Thai_lekpaet ๘ THAI DIGIT EIGHT */ ++ { 0x0df9, 0x0e59 }, /* Thai_lekkao ๙ THAI DIGIT NINE */ ++ { 0x0ea1, 0x3131 }, /* Hangul_Kiyeog ㄱ HANGUL LETTER KIYEOK */ ++ { 0x0ea2, 0x3132 }, /* Hangul_SsangKiyeog ㄲ HANGUL LETTER SSANGKIYEOK */ ++ { 0x0ea3, 0x3133 }, /* Hangul_KiyeogSios ㄳ HANGUL LETTER KIYEOK-SIOS */ ++ { 0x0ea4, 0x3134 }, /* Hangul_Nieun ㄴ HANGUL LETTER NIEUN */ ++ { 0x0ea5, 0x3135 }, /* Hangul_NieunJieuj ㄵ HANGUL LETTER NIEUN-CIEUC */ ++ { 0x0ea6, 0x3136 }, /* Hangul_NieunHieuh ㄶ HANGUL LETTER NIEUN-HIEUH */ ++ { 0x0ea7, 0x3137 }, /* Hangul_Dikeud ㄷ HANGUL LETTER TIKEUT */ ++ { 0x0ea8, 0x3138 }, /* Hangul_SsangDikeud ㄸ HANGUL LETTER SSANGTIKEUT */ ++ { 0x0ea9, 0x3139 }, /* Hangul_Rieul ㄹ HANGUL LETTER RIEUL */ ++ { 0x0eaa, 0x313a }, /* Hangul_RieulKiyeog ㄺ HANGUL LETTER RIEUL-KIYEOK */ ++ { 0x0eab, 0x313b }, /* Hangul_RieulMieum ㄻ HANGUL LETTER RIEUL-MIEUM */ ++ { 0x0eac, 0x313c }, /* Hangul_RieulPieub ㄼ HANGUL LETTER RIEUL-PIEUP */ ++ { 0x0ead, 0x313d }, /* Hangul_RieulSios ㄽ HANGUL LETTER RIEUL-SIOS */ ++ { 0x0eae, 0x313e }, /* Hangul_RieulTieut ㄾ HANGUL LETTER RIEUL-THIEUTH */ ++ { 0x0eaf, 0x313f }, /* Hangul_RieulPhieuf ㄿ HANGUL LETTER RIEUL-PHIEUPH */ ++ { 0x0eb0, 0x3140 }, /* Hangul_RieulHieuh ㅀ HANGUL LETTER RIEUL-HIEUH */ ++ { 0x0eb1, 0x3141 }, /* Hangul_Mieum ㅁ HANGUL LETTER MIEUM */ ++ { 0x0eb2, 0x3142 }, /* Hangul_Pieub ㅂ HANGUL LETTER PIEUP */ ++ { 0x0eb3, 0x3143 }, /* Hangul_SsangPieub ㅃ HANGUL LETTER SSANGPIEUP */ ++ { 0x0eb4, 0x3144 }, /* Hangul_PieubSios ㅄ HANGUL LETTER PIEUP-SIOS */ ++ { 0x0eb5, 0x3145 }, /* Hangul_Sios ㅅ HANGUL LETTER SIOS */ ++ { 0x0eb6, 0x3146 }, /* Hangul_SsangSios ㅆ HANGUL LETTER SSANGSIOS */ ++ { 0x0eb7, 0x3147 }, /* Hangul_Ieung ㅇ HANGUL LETTER IEUNG */ ++ { 0x0eb8, 0x3148 }, /* Hangul_Jieuj ㅈ HANGUL LETTER CIEUC */ ++ { 0x0eb9, 0x3149 }, /* Hangul_SsangJieuj ㅉ HANGUL LETTER SSANGCIEUC */ ++ { 0x0eba, 0x314a }, /* Hangul_Cieuc ㅊ HANGUL LETTER CHIEUCH */ ++ { 0x0ebb, 0x314b }, /* Hangul_Khieuq ㅋ HANGUL LETTER KHIEUKH */ ++ { 0x0ebc, 0x314c }, /* Hangul_Tieut ㅌ HANGUL LETTER THIEUTH */ ++ { 0x0ebd, 0x314d }, /* Hangul_Phieuf ㅍ HANGUL LETTER PHIEUPH */ ++ { 0x0ebe, 0x314e }, /* Hangul_Hieuh ㅎ HANGUL LETTER HIEUH */ ++ { 0x0ebf, 0x314f }, /* Hangul_A ㅏ HANGUL LETTER A */ ++ { 0x0ec0, 0x3150 }, /* Hangul_AE ㅐ HANGUL LETTER AE */ ++ { 0x0ec1, 0x3151 }, /* Hangul_YA ㅑ HANGUL LETTER YA */ ++ { 0x0ec2, 0x3152 }, /* Hangul_YAE ㅒ HANGUL LETTER YAE */ ++ { 0x0ec3, 0x3153 }, /* Hangul_EO ㅓ HANGUL LETTER EO */ ++ { 0x0ec4, 0x3154 }, /* Hangul_E ㅔ HANGUL LETTER E */ ++ { 0x0ec5, 0x3155 }, /* Hangul_YEO ㅕ HANGUL LETTER YEO */ ++ { 0x0ec6, 0x3156 }, /* Hangul_YE ㅖ HANGUL LETTER YE */ ++ { 0x0ec7, 0x3157 }, /* Hangul_O ㅗ HANGUL LETTER O */ ++ { 0x0ec8, 0x3158 }, /* Hangul_WA ㅘ HANGUL LETTER WA */ ++ { 0x0ec9, 0x3159 }, /* Hangul_WAE ㅙ HANGUL LETTER WAE */ ++ { 0x0eca, 0x315a }, /* Hangul_OE ㅚ HANGUL LETTER OE */ ++ { 0x0ecb, 0x315b }, /* Hangul_YO ㅛ HANGUL LETTER YO */ ++ { 0x0ecc, 0x315c }, /* Hangul_U ㅜ HANGUL LETTER U */ ++ { 0x0ecd, 0x315d }, /* Hangul_WEO ㅝ HANGUL LETTER WEO */ ++ { 0x0ece, 0x315e }, /* Hangul_WE ㅞ HANGUL LETTER WE */ ++ { 0x0ecf, 0x315f }, /* Hangul_WI ㅟ HANGUL LETTER WI */ ++ { 0x0ed0, 0x3160 }, /* Hangul_YU ㅠ HANGUL LETTER YU */ ++ { 0x0ed1, 0x3161 }, /* Hangul_EU ㅡ HANGUL LETTER EU */ ++ { 0x0ed2, 0x3162 }, /* Hangul_YI ㅢ HANGUL LETTER YI */ ++ { 0x0ed3, 0x3163 }, /* Hangul_I ㅣ HANGUL LETTER I */ ++ { 0x0ed4, 0x11a8 }, /* Hangul_J_Kiyeog ᆨ HANGUL JONGSEONG KIYEOK */ ++ { 0x0ed5, 0x11a9 }, /* Hangul_J_SsangKiyeog ᆩ HANGUL JONGSEONG SSANGKIYEOK */ ++ { 0x0ed6, 0x11aa }, /* Hangul_J_KiyeogSios ᆪ HANGUL JONGSEONG KIYEOK-SIOS */ ++ { 0x0ed7, 0x11ab }, /* Hangul_J_Nieun ᆫ HANGUL JONGSEONG NIEUN */ ++ { 0x0ed8, 0x11ac }, /* Hangul_J_NieunJieuj ᆬ HANGUL JONGSEONG NIEUN-CIEUC */ ++ { 0x0ed9, 0x11ad }, /* Hangul_J_NieunHieuh ᆭ HANGUL JONGSEONG NIEUN-HIEUH */ ++ { 0x0eda, 0x11ae }, /* Hangul_J_Dikeud ᆮ HANGUL JONGSEONG TIKEUT */ ++ { 0x0edb, 0x11af }, /* Hangul_J_Rieul ᆯ HANGUL JONGSEONG RIEUL */ ++ { 0x0edc, 0x11b0 }, /* Hangul_J_RieulKiyeog ᆰ HANGUL JONGSEONG RIEUL-KIYEOK */ ++ { 0x0edd, 0x11b1 }, /* Hangul_J_RieulMieum ᆱ HANGUL JONGSEONG RIEUL-MIEUM */ ++ { 0x0ede, 0x11b2 }, /* Hangul_J_RieulPieub ᆲ HANGUL JONGSEONG RIEUL-PIEUP */ ++ { 0x0edf, 0x11b3 }, /* Hangul_J_RieulSios ᆳ HANGUL JONGSEONG RIEUL-SIOS */ ++ { 0x0ee0, 0x11b4 }, /* Hangul_J_RieulTieut ᆴ HANGUL JONGSEONG RIEUL-THIEUTH */ ++ { 0x0ee1, 0x11b5 }, /* Hangul_J_RieulPhieuf ᆵ HANGUL JONGSEONG RIEUL-PHIEUPH */ ++ { 0x0ee2, 0x11b6 }, /* Hangul_J_RieulHieuh ᆶ HANGUL JONGSEONG RIEUL-HIEUH */ ++ { 0x0ee3, 0x11b7 }, /* Hangul_J_Mieum ᆷ HANGUL JONGSEONG MIEUM */ ++ { 0x0ee4, 0x11b8 }, /* Hangul_J_Pieub ᆸ HANGUL JONGSEONG PIEUP */ ++ { 0x0ee5, 0x11b9 }, /* Hangul_J_PieubSios ᆹ HANGUL JONGSEONG PIEUP-SIOS */ ++ { 0x0ee6, 0x11ba }, /* Hangul_J_Sios ᆺ HANGUL JONGSEONG SIOS */ ++ { 0x0ee7, 0x11bb }, /* Hangul_J_SsangSios ᆻ HANGUL JONGSEONG SSANGSIOS */ ++ { 0x0ee8, 0x11bc }, /* Hangul_J_Ieung ᆼ HANGUL JONGSEONG IEUNG */ ++ { 0x0ee9, 0x11bd }, /* Hangul_J_Jieuj ᆽ HANGUL JONGSEONG CIEUC */ ++ { 0x0eea, 0x11be }, /* Hangul_J_Cieuc ᆾ HANGUL JONGSEONG CHIEUCH */ ++ { 0x0eeb, 0x11bf }, /* Hangul_J_Khieuq ᆿ HANGUL JONGSEONG KHIEUKH */ ++ { 0x0eec, 0x11c0 }, /* Hangul_J_Tieut ᇀ HANGUL JONGSEONG THIEUTH */ ++ { 0x0eed, 0x11c1 }, /* Hangul_J_Phieuf ᇁ HANGUL JONGSEONG PHIEUPH */ ++ { 0x0eee, 0x11c2 }, /* Hangul_J_Hieuh ᇂ HANGUL JONGSEONG HIEUH */ ++ { 0x0eef, 0x316d }, /* Hangul_RieulYeorinHieuh ㅭ HANGUL LETTER RIEUL-YEORINHIEUH */ ++ { 0x0ef0, 0x3171 }, /* Hangul_SunkyeongeumMieum ㅱ HANGUL LETTER KAPYEOUNMIEUM */ ++ { 0x0ef1, 0x3178 }, /* Hangul_SunkyeongeumPieub ㅸ HANGUL LETTER KAPYEOUNPIEUP */ ++ { 0x0ef2, 0x317f }, /* Hangul_PanSios ㅿ HANGUL LETTER PANSIOS */ ++ /* 0x0ef3 Hangul_KkogjiDalrinIeung ? ??? */ ++ { 0x0ef4, 0x3184 }, /* Hangul_SunkyeongeumPhieuf ㆄ HANGUL LETTER KAPYEOUNPHIEUPH */ ++ { 0x0ef5, 0x3186 }, /* Hangul_YeorinHieuh ㆆ HANGUL LETTER YEORINHIEUH */ ++ { 0x0ef6, 0x318d }, /* Hangul_AraeA ㆍ HANGUL LETTER ARAEA */ ++ { 0x0ef7, 0x318e }, /* Hangul_AraeAE ㆎ HANGUL LETTER ARAEAE */ ++ { 0x0ef8, 0x11eb }, /* Hangul_J_PanSios ᇫ HANGUL JONGSEONG PANSIOS */ ++ /* 0x0ef9 Hangul_J_KkogjiDalrinIeung ? ??? */ ++ { 0x0efa, 0x11f9 }, /* Hangul_J_YeorinHieuh ᇹ HANGUL JONGSEONG YEORINHIEUH */ ++ { 0x0eff, 0x20a9 }, /* Korean_Won ₩ WON SIGN */ ++ { 0x13bc, 0x0152 }, /* OE Œ LATIN CAPITAL LIGATURE OE */ ++ { 0x13bd, 0x0153 }, /* oe œ LATIN SMALL LIGATURE OE */ ++ { 0x13be, 0x0178 }, /* Ydiaeresis Ÿ LATIN CAPITAL LETTER Y WITH DIAERESIS */ ++ { 0x20a0, 0x20a0 }, /* EcuSign ₠ EURO-CURRENCY SIGN */ ++ { 0x20a1, 0x20a1 }, /* ColonSign ₡ COLON SIGN */ ++ { 0x20a2, 0x20a2 }, /* CruzeiroSign ₢ CRUZEIRO SIGN */ ++ { 0x20a3, 0x20a3 }, /* FFrancSign ₣ FRENCH FRANC SIGN */ ++ { 0x20a4, 0x20a4 }, /* LiraSign ₤ LIRA SIGN */ ++ { 0x20a5, 0x20a5 }, /* MillSign ₥ MILL SIGN */ ++ { 0x20a6, 0x20a6 }, /* NairaSign ₦ NAIRA SIGN */ ++ { 0x20a7, 0x20a7 }, /* PesetaSign ₧ PESETA SIGN */ ++ { 0x20a8, 0x20a8 }, /* RupeeSign ₨ RUPEE SIGN */ ++ { 0x20a9, 0x20a9 }, /* WonSign ₩ WON SIGN */ ++ { 0x20aa, 0x20aa }, /* NewSheqelSign ₪ NEW SHEQEL SIGN */ ++ { 0x20ab, 0x20ab }, /* DongSign ₫ DONG SIGN */ ++ { 0x20ac, 0x20ac }, /* EuroSign € EURO SIGN */ ++ ++ ++ /* Following items added to GTK, not in the xterm table */ ++ ++ /* A few ASCII control characters */ ++ ++ { 0xFF08 /* Backspace */, '\b' }, ++ { 0xFF09 /* Tab */, '\t' }, ++ { 0xFF0A /* Linefeed */, '\n' }, ++ { 0xFF0B /* Vert. Tab */, '\v' }, ++ { 0xFF0D /* Return */, '\r' }, ++ { 0xFF1B /* Escape */, '\033' }, ++ ++ /* Numeric keypad */ ++ ++ { 0xFF80 /* Space */, ' ' }, ++ { 0xFFAA /* Multiply */, '*' }, ++ { 0xFFAB /* Add */, '+' }, ++ { 0xFFAC /* Separator */, ',' }, ++ { 0xFFAD /* Subtract */, '-' }, ++ { 0xFFAE /* Decimal */, '.' }, ++ { 0xFFAF /* Divide */, '/' }, ++ { 0xFFB0 /* 0 */, '0' }, ++ { 0xFFB1 /* 1 */, '1' }, ++ { 0xFFB2 /* 2 */, '2' }, ++ { 0xFFB3 /* 3 */, '3' }, ++ { 0xFFB4 /* 4 */, '4' }, ++ { 0xFFB5 /* 5 */, '5' }, ++ { 0xFFB6 /* 6 */, '6' }, ++ { 0xFFB7 /* 7 */, '7' }, ++ { 0xFFB8 /* 8 */, '8' }, ++ { 0xFFB9 /* 9 */, '9' }, ++ { 0xFFBD /* Equal */, '=' }, ++ ++ /* End numeric keypad */ ++ ++ { 0xFFFF /* Delete */, '\177' } ++}; ++ ++static const struct _FcitxUnicodeToKeySym gdk_unicode_to_keysym_tab[] = { ++ { 0x0abd, 0x002e }, /* decimalpoint . FULL STOP */ ++ { 0x0ba3, 0x003c }, /* leftcaret < LESS-THAN SIGN */ ++ { 0x0ba6, 0x003e }, /* rightcaret > GREATER-THAN SIGN */ ++ { 0x0bc6, 0x005f }, /* underbar _ LOW LINE */ ++ { 0x0bc0, 0x00af }, /* overbar ¯ MACRON */ ++ { 0x03c0, 0x0100 }, /* Amacron Ā LATIN CAPITAL LETTER A WITH MACRON */ ++ { 0x03e0, 0x0101 }, /* amacron ā LATIN SMALL LETTER A WITH MACRON */ ++ { 0x01c3, 0x0102 }, /* Abreve Ă LATIN CAPITAL LETTER A WITH BREVE */ ++ { 0x01e3, 0x0103 }, /* abreve ă LATIN SMALL LETTER A WITH BREVE */ ++ { 0x01a1, 0x0104 }, /* Aogonek Ą LATIN CAPITAL LETTER A WITH OGONEK */ ++ { 0x01b1, 0x0105 }, /* aogonek ą LATIN SMALL LETTER A WITH OGONEK */ ++ { 0x01c6, 0x0106 }, /* Cacute Ć LATIN CAPITAL LETTER C WITH ACUTE */ ++ { 0x01e6, 0x0107 }, /* cacute ć LATIN SMALL LETTER C WITH ACUTE */ ++ { 0x02c6, 0x0108 }, /* Ccircumflex Ĉ LATIN CAPITAL LETTER C WITH CIRCUMFLEX */ ++ { 0x02e6, 0x0109 }, /* ccircumflex ĉ LATIN SMALL LETTER C WITH CIRCUMFLEX */ ++ { 0x02c5, 0x010a }, /* Cabovedot Ċ LATIN CAPITAL LETTER C WITH DOT ABOVE */ ++ { 0x02e5, 0x010b }, /* cabovedot ċ LATIN SMALL LETTER C WITH DOT ABOVE */ ++ { 0x01c8, 0x010c }, /* Ccaron Č LATIN CAPITAL LETTER C WITH CARON */ ++ { 0x01e8, 0x010d }, /* ccaron č LATIN SMALL LETTER C WITH CARON */ ++ { 0x01cf, 0x010e }, /* Dcaron Ď LATIN CAPITAL LETTER D WITH CARON */ ++ { 0x01ef, 0x010f }, /* dcaron ď LATIN SMALL LETTER D WITH CARON */ ++ { 0x01d0, 0x0110 }, /* Dstroke Đ LATIN CAPITAL LETTER D WITH STROKE */ ++ { 0x01f0, 0x0111 }, /* dstroke đ LATIN SMALL LETTER D WITH STROKE */ ++ { 0x03aa, 0x0112 }, /* Emacron Ē LATIN CAPITAL LETTER E WITH MACRON */ ++ { 0x03ba, 0x0113 }, /* emacron ē LATIN SMALL LETTER E WITH MACRON */ ++ { 0x03cc, 0x0116 }, /* Eabovedot Ė LATIN CAPITAL LETTER E WITH DOT ABOVE */ ++ { 0x03ec, 0x0117 }, /* eabovedot ė LATIN SMALL LETTER E WITH DOT ABOVE */ ++ { 0x01ca, 0x0118 }, /* Eogonek Ę LATIN CAPITAL LETTER E WITH OGONEK */ ++ { 0x01ea, 0x0119 }, /* eogonek ę LATIN SMALL LETTER E WITH OGONEK */ ++ { 0x01cc, 0x011a }, /* Ecaron Ě LATIN CAPITAL LETTER E WITH CARON */ ++ { 0x01ec, 0x011b }, /* ecaron ě LATIN SMALL LETTER E WITH CARON */ ++ { 0x02d8, 0x011c }, /* Gcircumflex Ĝ LATIN CAPITAL LETTER G WITH CIRCUMFLEX */ ++ { 0x02f8, 0x011d }, /* gcircumflex ĝ LATIN SMALL LETTER G WITH CIRCUMFLEX */ ++ { 0x02ab, 0x011e }, /* Gbreve Ğ LATIN CAPITAL LETTER G WITH BREVE */ ++ { 0x02bb, 0x011f }, /* gbreve ğ LATIN SMALL LETTER G WITH BREVE */ ++ { 0x02d5, 0x0120 }, /* Gabovedot Ġ LATIN CAPITAL LETTER G WITH DOT ABOVE */ ++ { 0x02f5, 0x0121 }, /* gabovedot ġ LATIN SMALL LETTER G WITH DOT ABOVE */ ++ { 0x03ab, 0x0122 }, /* Gcedilla Ģ LATIN CAPITAL LETTER G WITH CEDILLA */ ++ { 0x03bb, 0x0123 }, /* gcedilla ģ LATIN SMALL LETTER G WITH CEDILLA */ ++ { 0x02a6, 0x0124 }, /* Hcircumflex Ĥ LATIN CAPITAL LETTER H WITH CIRCUMFLEX */ ++ { 0x02b6, 0x0125 }, /* hcircumflex ĥ LATIN SMALL LETTER H WITH CIRCUMFLEX */ ++ { 0x02a1, 0x0126 }, /* Hstroke Ħ LATIN CAPITAL LETTER H WITH STROKE */ ++ { 0x02b1, 0x0127 }, /* hstroke ħ LATIN SMALL LETTER H WITH STROKE */ ++ { 0x03a5, 0x0128 }, /* Itilde Ĩ LATIN CAPITAL LETTER I WITH TILDE */ ++ { 0x03b5, 0x0129 }, /* itilde ĩ LATIN SMALL LETTER I WITH TILDE */ ++ { 0x03cf, 0x012a }, /* Imacron Ī LATIN CAPITAL LETTER I WITH MACRON */ ++ { 0x03ef, 0x012b }, /* imacron ī LATIN SMALL LETTER I WITH MACRON */ ++ { 0x03c7, 0x012e }, /* Iogonek Į LATIN CAPITAL LETTER I WITH OGONEK */ ++ { 0x03e7, 0x012f }, /* iogonek į LATIN SMALL LETTER I WITH OGONEK */ ++ { 0x02a9, 0x0130 }, /* Iabovedot İ LATIN CAPITAL LETTER I WITH DOT ABOVE */ ++ { 0x02b9, 0x0131 }, /* idotless ı LATIN SMALL LETTER DOTLESS I */ ++ { 0x02ac, 0x0134 }, /* Jcircumflex Ĵ LATIN CAPITAL LETTER J WITH CIRCUMFLEX */ ++ { 0x02bc, 0x0135 }, /* jcircumflex ĵ LATIN SMALL LETTER J WITH CIRCUMFLEX */ ++ { 0x03d3, 0x0136 }, /* Kcedilla Ķ LATIN CAPITAL LETTER K WITH CEDILLA */ ++ { 0x03f3, 0x0137 }, /* kcedilla ķ LATIN SMALL LETTER K WITH CEDILLA */ ++ { 0x03a2, 0x0138 }, /* kra ĸ LATIN SMALL LETTER KRA */ ++ { 0x01c5, 0x0139 }, /* Lacute Ĺ LATIN CAPITAL LETTER L WITH ACUTE */ ++ { 0x01e5, 0x013a }, /* lacute ĺ LATIN SMALL LETTER L WITH ACUTE */ ++ { 0x03a6, 0x013b }, /* Lcedilla Ļ LATIN CAPITAL LETTER L WITH CEDILLA */ ++ { 0x03b6, 0x013c }, /* lcedilla ļ LATIN SMALL LETTER L WITH CEDILLA */ ++ { 0x01a5, 0x013d }, /* Lcaron Ľ LATIN CAPITAL LETTER L WITH CARON */ ++ { 0x01b5, 0x013e }, /* lcaron ľ LATIN SMALL LETTER L WITH CARON */ ++ { 0x01a3, 0x0141 }, /* Lstroke Ł LATIN CAPITAL LETTER L WITH STROKE */ ++ { 0x01b3, 0x0142 }, /* lstroke ł LATIN SMALL LETTER L WITH STROKE */ ++ { 0x01d1, 0x0143 }, /* Nacute Ń LATIN CAPITAL LETTER N WITH ACUTE */ ++ { 0x01f1, 0x0144 }, /* nacute ń LATIN SMALL LETTER N WITH ACUTE */ ++ { 0x03d1, 0x0145 }, /* Ncedilla Ņ LATIN CAPITAL LETTER N WITH CEDILLA */ ++ { 0x03f1, 0x0146 }, /* ncedilla ņ LATIN SMALL LETTER N WITH CEDILLA */ ++ { 0x01d2, 0x0147 }, /* Ncaron Ň LATIN CAPITAL LETTER N WITH CARON */ ++ { 0x01f2, 0x0148 }, /* ncaron ň LATIN SMALL LETTER N WITH CARON */ ++ { 0x03bd, 0x014a }, /* ENG Ŋ LATIN CAPITAL LETTER ENG */ ++ { 0x03bf, 0x014b }, /* eng ŋ LATIN SMALL LETTER ENG */ ++ { 0x03d2, 0x014c }, /* Omacron Ō LATIN CAPITAL LETTER O WITH MACRON */ ++ { 0x03f2, 0x014d }, /* omacron ō LATIN SMALL LETTER O WITH MACRON */ ++ { 0x01d5, 0x0150 }, /* Odoubleacute Ő LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */ ++ { 0x01f5, 0x0151 }, /* odoubleacute ő LATIN SMALL LETTER O WITH DOUBLE ACUTE */ ++ { 0x13bc, 0x0152 }, /* OE Œ LATIN CAPITAL LIGATURE OE */ ++ { 0x13bd, 0x0153 }, /* oe œ LATIN SMALL LIGATURE OE */ ++ { 0x01c0, 0x0154 }, /* Racute Ŕ LATIN CAPITAL LETTER R WITH ACUTE */ ++ { 0x01e0, 0x0155 }, /* racute ŕ LATIN SMALL LETTER R WITH ACUTE */ ++ { 0x03a3, 0x0156 }, /* Rcedilla Ŗ LATIN CAPITAL LETTER R WITH CEDILLA */ ++ { 0x03b3, 0x0157 }, /* rcedilla ŗ LATIN SMALL LETTER R WITH CEDILLA */ ++ { 0x01d8, 0x0158 }, /* Rcaron Ř LATIN CAPITAL LETTER R WITH CARON */ ++ { 0x01f8, 0x0159 }, /* rcaron ř LATIN SMALL LETTER R WITH CARON */ ++ { 0x01a6, 0x015a }, /* Sacute Ś LATIN CAPITAL LETTER S WITH ACUTE */ ++ { 0x01b6, 0x015b }, /* sacute ś LATIN SMALL LETTER S WITH ACUTE */ ++ { 0x02de, 0x015c }, /* Scircumflex Ŝ LATIN CAPITAL LETTER S WITH CIRCUMFLEX */ ++ { 0x02fe, 0x015d }, /* scircumflex ŝ LATIN SMALL LETTER S WITH CIRCUMFLEX */ ++ { 0x01aa, 0x015e }, /* Scedilla Ş LATIN CAPITAL LETTER S WITH CEDILLA */ ++ { 0x01ba, 0x015f }, /* scedilla ş LATIN SMALL LETTER S WITH CEDILLA */ ++ { 0x01a9, 0x0160 }, /* Scaron Š LATIN CAPITAL LETTER S WITH CARON */ ++ { 0x01b9, 0x0161 }, /* scaron š LATIN SMALL LETTER S WITH CARON */ ++ { 0x01de, 0x0162 }, /* Tcedilla Ţ LATIN CAPITAL LETTER T WITH CEDILLA */ ++ { 0x01fe, 0x0163 }, /* tcedilla ţ LATIN SMALL LETTER T WITH CEDILLA */ ++ { 0x01ab, 0x0164 }, /* Tcaron Ť LATIN CAPITAL LETTER T WITH CARON */ ++ { 0x01bb, 0x0165 }, /* tcaron ť LATIN SMALL LETTER T WITH CARON */ ++ { 0x03ac, 0x0166 }, /* Tslash Ŧ LATIN CAPITAL LETTER T WITH STROKE */ ++ { 0x03bc, 0x0167 }, /* tslash ŧ LATIN SMALL LETTER T WITH STROKE */ ++ { 0x03dd, 0x0168 }, /* Utilde Ũ LATIN CAPITAL LETTER U WITH TILDE */ ++ { 0x03fd, 0x0169 }, /* utilde ũ LATIN SMALL LETTER U WITH TILDE */ ++ { 0x03de, 0x016a }, /* Umacron Ū LATIN CAPITAL LETTER U WITH MACRON */ ++ { 0x03fe, 0x016b }, /* umacron ū LATIN SMALL LETTER U WITH MACRON */ ++ { 0x02dd, 0x016c }, /* Ubreve Ŭ LATIN CAPITAL LETTER U WITH BREVE */ ++ { 0x02fd, 0x016d }, /* ubreve ŭ LATIN SMALL LETTER U WITH BREVE */ ++ { 0x01d9, 0x016e }, /* Uring Ů LATIN CAPITAL LETTER U WITH RING ABOVE */ ++ { 0x01f9, 0x016f }, /* uring ů LATIN SMALL LETTER U WITH RING ABOVE */ ++ { 0x01db, 0x0170 }, /* Udoubleacute Ű LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */ ++ { 0x01fb, 0x0171 }, /* udoubleacute ű LATIN SMALL LETTER U WITH DOUBLE ACUTE */ ++ { 0x03d9, 0x0172 }, /* Uogonek Ų LATIN CAPITAL LETTER U WITH OGONEK */ ++ { 0x03f9, 0x0173 }, /* uogonek ų LATIN SMALL LETTER U WITH OGONEK */ ++ { 0x13be, 0x0178 }, /* Ydiaeresis Ÿ LATIN CAPITAL LETTER Y WITH DIAERESIS */ ++ { 0x01ac, 0x0179 }, /* Zacute Ź LATIN CAPITAL LETTER Z WITH ACUTE */ ++ { 0x01bc, 0x017a }, /* zacute ź LATIN SMALL LETTER Z WITH ACUTE */ ++ { 0x01af, 0x017b }, /* Zabovedot Ż LATIN CAPITAL LETTER Z WITH DOT ABOVE */ ++ { 0x01bf, 0x017c }, /* zabovedot ż LATIN SMALL LETTER Z WITH DOT ABOVE */ ++ { 0x01ae, 0x017d }, /* Zcaron Ž LATIN CAPITAL LETTER Z WITH CARON */ ++ { 0x01be, 0x017e }, /* zcaron ž LATIN SMALL LETTER Z WITH CARON */ ++ { 0x08f6, 0x0192 }, /* function ƒ LATIN SMALL LETTER F WITH HOOK */ ++ { 0x01b7, 0x02c7 }, /* caron ˇ CARON */ ++ { 0x01a2, 0x02d8 }, /* breve ˘ BREVE */ ++ { 0x01ff, 0x02d9 }, /* abovedot ˙ DOT ABOVE */ ++ { 0x01b2, 0x02db }, /* ogonek ˛ OGONEK */ ++ { 0x01bd, 0x02dd }, /* doubleacute ˝ DOUBLE ACUTE ACCENT */ ++ { 0x07ae, 0x0385 }, /* Greek_accentdieresis ΅ GREEK DIALYTIKA TONOS */ ++ { 0x07a1, 0x0386 }, /* Greek_ALPHAaccent Ά GREEK CAPITAL LETTER ALPHA WITH TONOS */ ++ { 0x07a2, 0x0388 }, /* Greek_EPSILONaccent Έ GREEK CAPITAL LETTER EPSILON WITH TONOS */ ++ { 0x07a3, 0x0389 }, /* Greek_ETAaccent Ή GREEK CAPITAL LETTER ETA WITH TONOS */ ++ { 0x07a4, 0x038a }, /* Greek_IOTAaccent Ί GREEK CAPITAL LETTER IOTA WITH TONOS */ ++ { 0x07a7, 0x038c }, /* Greek_OMICRONaccent Ό GREEK CAPITAL LETTER OMICRON WITH TONOS */ ++ { 0x07a8, 0x038e }, /* Greek_UPSILONaccent Ύ GREEK CAPITAL LETTER UPSILON WITH TONOS */ ++ { 0x07ab, 0x038f }, /* Greek_OMEGAaccent Ώ GREEK CAPITAL LETTER OMEGA WITH TONOS */ ++ { 0x07b6, 0x0390 }, /* Greek_iotaaccentdieresis ΐ GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ ++ { 0x07c1, 0x0391 }, /* Greek_ALPHA Α GREEK CAPITAL LETTER ALPHA */ ++ { 0x07c2, 0x0392 }, /* Greek_BETA Β GREEK CAPITAL LETTER BETA */ ++ { 0x07c3, 0x0393 }, /* Greek_GAMMA Γ GREEK CAPITAL LETTER GAMMA */ ++ { 0x07c4, 0x0394 }, /* Greek_DELTA Δ GREEK CAPITAL LETTER DELTA */ ++ { 0x07c5, 0x0395 }, /* Greek_EPSILON Ε GREEK CAPITAL LETTER EPSILON */ ++ { 0x07c6, 0x0396 }, /* Greek_ZETA Ζ GREEK CAPITAL LETTER ZETA */ ++ { 0x07c7, 0x0397 }, /* Greek_ETA Η GREEK CAPITAL LETTER ETA */ ++ { 0x07c8, 0x0398 }, /* Greek_THETA Θ GREEK CAPITAL LETTER THETA */ ++ { 0x07c9, 0x0399 }, /* Greek_IOTA Ι GREEK CAPITAL LETTER IOTA */ ++ { 0x07ca, 0x039a }, /* Greek_KAPPA Κ GREEK CAPITAL LETTER KAPPA */ ++ { 0x07cb, 0x039b }, /* Greek_LAMBDA Λ GREEK CAPITAL LETTER LAMDA */ ++ { 0x07cc, 0x039c }, /* Greek_MU Μ GREEK CAPITAL LETTER MU */ ++ { 0x07cd, 0x039d }, /* Greek_NU Ν GREEK CAPITAL LETTER NU */ ++ { 0x07ce, 0x039e }, /* Greek_XI Ξ GREEK CAPITAL LETTER XI */ ++ { 0x07cf, 0x039f }, /* Greek_OMICRON Ο GREEK CAPITAL LETTER OMICRON */ ++ { 0x07d0, 0x03a0 }, /* Greek_PI Π GREEK CAPITAL LETTER PI */ ++ { 0x07d1, 0x03a1 }, /* Greek_RHO Ρ GREEK CAPITAL LETTER RHO */ ++ { 0x07d2, 0x03a3 }, /* Greek_SIGMA Σ GREEK CAPITAL LETTER SIGMA */ ++ { 0x07d4, 0x03a4 }, /* Greek_TAU Τ GREEK CAPITAL LETTER TAU */ ++ { 0x07d5, 0x03a5 }, /* Greek_UPSILON Υ GREEK CAPITAL LETTER UPSILON */ ++ { 0x07d6, 0x03a6 }, /* Greek_PHI Φ GREEK CAPITAL LETTER PHI */ ++ { 0x07d7, 0x03a7 }, /* Greek_CHI Χ GREEK CAPITAL LETTER CHI */ ++ { 0x07d8, 0x03a8 }, /* Greek_PSI Ψ GREEK CAPITAL LETTER PSI */ ++ { 0x07d9, 0x03a9 }, /* Greek_OMEGA Ω GREEK CAPITAL LETTER OMEGA */ ++ { 0x07a5, 0x03aa }, /* Greek_IOTAdieresis Ϊ GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */ ++ { 0x07a9, 0x03ab }, /* Greek_UPSILONdieresis Ϋ GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */ ++ { 0x07b1, 0x03ac }, /* Greek_alphaaccent ά GREEK SMALL LETTER ALPHA WITH TONOS */ ++ { 0x07b2, 0x03ad }, /* Greek_epsilonaccent έ GREEK SMALL LETTER EPSILON WITH TONOS */ ++ { 0x07b3, 0x03ae }, /* Greek_etaaccent ή GREEK SMALL LETTER ETA WITH TONOS */ ++ { 0x07b4, 0x03af }, /* Greek_iotaaccent ί GREEK SMALL LETTER IOTA WITH TONOS */ ++ { 0x07ba, 0x03b0 }, /* Greek_upsilonaccentdieresis ΰ GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */ ++ { 0x07e1, 0x03b1 }, /* Greek_alpha α GREEK SMALL LETTER ALPHA */ ++ { 0x07e2, 0x03b2 }, /* Greek_beta β GREEK SMALL LETTER BETA */ ++ { 0x07e3, 0x03b3 }, /* Greek_gamma γ GREEK SMALL LETTER GAMMA */ ++ { 0x07e4, 0x03b4 }, /* Greek_delta δ GREEK SMALL LETTER DELTA */ ++ { 0x07e5, 0x03b5 }, /* Greek_epsilon ε GREEK SMALL LETTER EPSILON */ ++ { 0x07e6, 0x03b6 }, /* Greek_zeta ζ GREEK SMALL LETTER ZETA */ ++ { 0x07e7, 0x03b7 }, /* Greek_eta η GREEK SMALL LETTER ETA */ ++ { 0x07e8, 0x03b8 }, /* Greek_theta θ GREEK SMALL LETTER THETA */ ++ { 0x07e9, 0x03b9 }, /* Greek_iota ι GREEK SMALL LETTER IOTA */ ++ { 0x07ea, 0x03ba }, /* Greek_kappa κ GREEK SMALL LETTER KAPPA */ ++ { 0x07eb, 0x03bb }, /* Greek_lambda λ GREEK SMALL LETTER LAMDA */ ++ { 0x07ec, 0x03bc }, /* Greek_mu μ GREEK SMALL LETTER MU */ ++ { 0x07ed, 0x03bd }, /* Greek_nu ν GREEK SMALL LETTER NU */ ++ { 0x07ee, 0x03be }, /* Greek_xi ξ GREEK SMALL LETTER XI */ ++ { 0x07ef, 0x03bf }, /* Greek_omicron ο GREEK SMALL LETTER OMICRON */ ++ { 0x07f0, 0x03c0 }, /* Greek_pi π GREEK SMALL LETTER PI */ ++ { 0x07f1, 0x03c1 }, /* Greek_rho ρ GREEK SMALL LETTER RHO */ ++ { 0x07f3, 0x03c2 }, /* Greek_finalsmallsigma ς GREEK SMALL LETTER FINAL SIGMA */ ++ { 0x07f2, 0x03c3 }, /* Greek_sigma σ GREEK SMALL LETTER SIGMA */ ++ { 0x07f4, 0x03c4 }, /* Greek_tau τ GREEK SMALL LETTER TAU */ ++ { 0x07f5, 0x03c5 }, /* Greek_upsilon υ GREEK SMALL LETTER UPSILON */ ++ { 0x07f6, 0x03c6 }, /* Greek_phi φ GREEK SMALL LETTER PHI */ ++ { 0x07f7, 0x03c7 }, /* Greek_chi χ GREEK SMALL LETTER CHI */ ++ { 0x07f8, 0x03c8 }, /* Greek_psi ψ GREEK SMALL LETTER PSI */ ++ { 0x07f9, 0x03c9 }, /* Greek_omega ω GREEK SMALL LETTER OMEGA */ ++ { 0x07b5, 0x03ca }, /* Greek_iotadieresis ϊ GREEK SMALL LETTER IOTA WITH DIALYTIKA */ ++ { 0x07b9, 0x03cb }, /* Greek_upsilondieresis ϋ GREEK SMALL LETTER UPSILON WITH DIALYTIKA */ ++ { 0x07b7, 0x03cc }, /* Greek_omicronaccent ό GREEK SMALL LETTER OMICRON WITH TONOS */ ++ { 0x07b8, 0x03cd }, /* Greek_upsilonaccent ύ GREEK SMALL LETTER UPSILON WITH TONOS */ ++ { 0x07bb, 0x03ce }, /* Greek_omegaaccent ώ GREEK SMALL LETTER OMEGA WITH TONOS */ ++ { 0x06b3, 0x0401 }, /* Cyrillic_IO Ё CYRILLIC CAPITAL LETTER IO */ ++ { 0x06b1, 0x0402 }, /* Serbian_DJE Ђ CYRILLIC CAPITAL LETTER DJE */ ++ { 0x06b2, 0x0403 }, /* Macedonia_GJE Ѓ CYRILLIC CAPITAL LETTER GJE */ ++ { 0x06b4, 0x0404 }, /* Ukrainian_IE Є CYRILLIC CAPITAL LETTER UKRAINIAN IE */ ++ { 0x06b5, 0x0405 }, /* Macedonia_DSE Ѕ CYRILLIC CAPITAL LETTER DZE */ ++ { 0x06b6, 0x0406 }, /* Ukrainian_I І CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */ ++ { 0x06b7, 0x0407 }, /* Ukrainian_YI Ї CYRILLIC CAPITAL LETTER YI */ ++ { 0x06b8, 0x0408 }, /* Cyrillic_JE Ј CYRILLIC CAPITAL LETTER JE */ ++ { 0x06b9, 0x0409 }, /* Cyrillic_LJE Љ CYRILLIC CAPITAL LETTER LJE */ ++ { 0x06ba, 0x040a }, /* Cyrillic_NJE Њ CYRILLIC CAPITAL LETTER NJE */ ++ { 0x06bb, 0x040b }, /* Serbian_TSHE Ћ CYRILLIC CAPITAL LETTER TSHE */ ++ { 0x06bc, 0x040c }, /* Macedonia_KJE Ќ CYRILLIC CAPITAL LETTER KJE */ ++ { 0x06be, 0x040e }, /* Byelorussian_SHORTU Ў CYRILLIC CAPITAL LETTER SHORT U */ ++ { 0x06bf, 0x040f }, /* Cyrillic_DZHE Џ CYRILLIC CAPITAL LETTER DZHE */ ++ { 0x06e1, 0x0410 }, /* Cyrillic_A А CYRILLIC CAPITAL LETTER A */ ++ { 0x06e2, 0x0411 }, /* Cyrillic_BE Б CYRILLIC CAPITAL LETTER BE */ ++ { 0x06f7, 0x0412 }, /* Cyrillic_VE В CYRILLIC CAPITAL LETTER VE */ ++ { 0x06e7, 0x0413 }, /* Cyrillic_GHE Г CYRILLIC CAPITAL LETTER GHE */ ++ { 0x06e4, 0x0414 }, /* Cyrillic_DE Д CYRILLIC CAPITAL LETTER DE */ ++ { 0x06e5, 0x0415 }, /* Cyrillic_IE Е CYRILLIC CAPITAL LETTER IE */ ++ { 0x06f6, 0x0416 }, /* Cyrillic_ZHE Ж CYRILLIC CAPITAL LETTER ZHE */ ++ { 0x06fa, 0x0417 }, /* Cyrillic_ZE З CYRILLIC CAPITAL LETTER ZE */ ++ { 0x06e9, 0x0418 }, /* Cyrillic_I И CYRILLIC CAPITAL LETTER I */ ++ { 0x06ea, 0x0419 }, /* Cyrillic_SHORTI Й CYRILLIC CAPITAL LETTER SHORT I */ ++ { 0x06eb, 0x041a }, /* Cyrillic_KA К CYRILLIC CAPITAL LETTER KA */ ++ { 0x06ec, 0x041b }, /* Cyrillic_EL Л CYRILLIC CAPITAL LETTER EL */ ++ { 0x06ed, 0x041c }, /* Cyrillic_EM М CYRILLIC CAPITAL LETTER EM */ ++ { 0x06ee, 0x041d }, /* Cyrillic_EN Н CYRILLIC CAPITAL LETTER EN */ ++ { 0x06ef, 0x041e }, /* Cyrillic_O О CYRILLIC CAPITAL LETTER O */ ++ { 0x06f0, 0x041f }, /* Cyrillic_PE П CYRILLIC CAPITAL LETTER PE */ ++ { 0x06f2, 0x0420 }, /* Cyrillic_ER Р CYRILLIC CAPITAL LETTER ER */ ++ { 0x06f3, 0x0421 }, /* Cyrillic_ES С CYRILLIC CAPITAL LETTER ES */ ++ { 0x06f4, 0x0422 }, /* Cyrillic_TE Т CYRILLIC CAPITAL LETTER TE */ ++ { 0x06f5, 0x0423 }, /* Cyrillic_U У CYRILLIC CAPITAL LETTER U */ ++ { 0x06e6, 0x0424 }, /* Cyrillic_EF Ф CYRILLIC CAPITAL LETTER EF */ ++ { 0x06e8, 0x0425 }, /* Cyrillic_HA Х CYRILLIC CAPITAL LETTER HA */ ++ { 0x06e3, 0x0426 }, /* Cyrillic_TSE Ц CYRILLIC CAPITAL LETTER TSE */ ++ { 0x06fe, 0x0427 }, /* Cyrillic_CHE Ч CYRILLIC CAPITAL LETTER CHE */ ++ { 0x06fb, 0x0428 }, /* Cyrillic_SHA Ш CYRILLIC CAPITAL LETTER SHA */ ++ { 0x06fd, 0x0429 }, /* Cyrillic_SHCHA Щ CYRILLIC CAPITAL LETTER SHCHA */ ++ { 0x06ff, 0x042a }, /* Cyrillic_HARDSIGN Ъ CYRILLIC CAPITAL LETTER HARD SIGN */ ++ { 0x06f9, 0x042b }, /* Cyrillic_YERU Ы CYRILLIC CAPITAL LETTER YERU */ ++ { 0x06f8, 0x042c }, /* Cyrillic_SOFTSIGN Ь CYRILLIC CAPITAL LETTER SOFT SIGN */ ++ { 0x06fc, 0x042d }, /* Cyrillic_E Э CYRILLIC CAPITAL LETTER E */ ++ { 0x06e0, 0x042e }, /* Cyrillic_YU Ю CYRILLIC CAPITAL LETTER YU */ ++ { 0x06f1, 0x042f }, /* Cyrillic_YA Я CYRILLIC CAPITAL LETTER YA */ ++ { 0x06c1, 0x0430 }, /* Cyrillic_a а CYRILLIC SMALL LETTER A */ ++ { 0x06c2, 0x0431 }, /* Cyrillic_be б CYRILLIC SMALL LETTER BE */ ++ { 0x06d7, 0x0432 }, /* Cyrillic_ve в CYRILLIC SMALL LETTER VE */ ++ { 0x06c7, 0x0433 }, /* Cyrillic_ghe г CYRILLIC SMALL LETTER GHE */ ++ { 0x06c4, 0x0434 }, /* Cyrillic_de д CYRILLIC SMALL LETTER DE */ ++ { 0x06c5, 0x0435 }, /* Cyrillic_ie е CYRILLIC SMALL LETTER IE */ ++ { 0x06d6, 0x0436 }, /* Cyrillic_zhe ж CYRILLIC SMALL LETTER ZHE */ ++ { 0x06da, 0x0437 }, /* Cyrillic_ze з CYRILLIC SMALL LETTER ZE */ ++ { 0x06c9, 0x0438 }, /* Cyrillic_i и CYRILLIC SMALL LETTER I */ ++ { 0x06ca, 0x0439 }, /* Cyrillic_shorti й CYRILLIC SMALL LETTER SHORT I */ ++ { 0x06cb, 0x043a }, /* Cyrillic_ka к CYRILLIC SMALL LETTER KA */ ++ { 0x06cc, 0x043b }, /* Cyrillic_el л CYRILLIC SMALL LETTER EL */ ++ { 0x06cd, 0x043c }, /* Cyrillic_em м CYRILLIC SMALL LETTER EM */ ++ { 0x06ce, 0x043d }, /* Cyrillic_en н CYRILLIC SMALL LETTER EN */ ++ { 0x06cf, 0x043e }, /* Cyrillic_o о CYRILLIC SMALL LETTER O */ ++ { 0x06d0, 0x043f }, /* Cyrillic_pe п CYRILLIC SMALL LETTER PE */ ++ { 0x06d2, 0x0440 }, /* Cyrillic_er р CYRILLIC SMALL LETTER ER */ ++ { 0x06d3, 0x0441 }, /* Cyrillic_es с CYRILLIC SMALL LETTER ES */ ++ { 0x06d4, 0x0442 }, /* Cyrillic_te т CYRILLIC SMALL LETTER TE */ ++ { 0x06d5, 0x0443 }, /* Cyrillic_u у CYRILLIC SMALL LETTER U */ ++ { 0x06c6, 0x0444 }, /* Cyrillic_ef ф CYRILLIC SMALL LETTER EF */ ++ { 0x06c8, 0x0445 }, /* Cyrillic_ha х CYRILLIC SMALL LETTER HA */ ++ { 0x06c3, 0x0446 }, /* Cyrillic_tse ц CYRILLIC SMALL LETTER TSE */ ++ { 0x06de, 0x0447 }, /* Cyrillic_che ч CYRILLIC SMALL LETTER CHE */ ++ { 0x06db, 0x0448 }, /* Cyrillic_sha ш CYRILLIC SMALL LETTER SHA */ ++ { 0x06dd, 0x0449 }, /* Cyrillic_shcha щ CYRILLIC SMALL LETTER SHCHA */ ++ { 0x06df, 0x044a }, /* Cyrillic_hardsign ъ CYRILLIC SMALL LETTER HARD SIGN */ ++ { 0x06d9, 0x044b }, /* Cyrillic_yeru ы CYRILLIC SMALL LETTER YERU */ ++ { 0x06d8, 0x044c }, /* Cyrillic_softsign ь CYRILLIC SMALL LETTER SOFT SIGN */ ++ { 0x06dc, 0x044d }, /* Cyrillic_e э CYRILLIC SMALL LETTER E */ ++ { 0x06c0, 0x044e }, /* Cyrillic_yu ю CYRILLIC SMALL LETTER YU */ ++ { 0x06d1, 0x044f }, /* Cyrillic_ya я CYRILLIC SMALL LETTER YA */ ++ { 0x06a3, 0x0451 }, /* Cyrillic_io ё CYRILLIC SMALL LETTER IO */ ++ { 0x06a1, 0x0452 }, /* Serbian_dje ђ CYRILLIC SMALL LETTER DJE */ ++ { 0x06a2, 0x0453 }, /* Macedonia_gje ѓ CYRILLIC SMALL LETTER GJE */ ++ { 0x06a4, 0x0454 }, /* Ukrainian_ie є CYRILLIC SMALL LETTER UKRAINIAN IE */ ++ { 0x06a5, 0x0455 }, /* Macedonia_dse ѕ CYRILLIC SMALL LETTER DZE */ ++ { 0x06a6, 0x0456 }, /* Ukrainian_i і CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */ ++ { 0x06a7, 0x0457 }, /* Ukrainian_yi ї CYRILLIC SMALL LETTER YI */ ++ { 0x06a8, 0x0458 }, /* Cyrillic_je ј CYRILLIC SMALL LETTER JE */ ++ { 0x06a9, 0x0459 }, /* Cyrillic_lje љ CYRILLIC SMALL LETTER LJE */ ++ { 0x06aa, 0x045a }, /* Cyrillic_nje њ CYRILLIC SMALL LETTER NJE */ ++ { 0x06ab, 0x045b }, /* Serbian_tshe ћ CYRILLIC SMALL LETTER TSHE */ ++ { 0x06ac, 0x045c }, /* Macedonia_kje ќ CYRILLIC SMALL LETTER KJE */ ++ { 0x06ae, 0x045e }, /* Byelorussian_shortu ў CYRILLIC SMALL LETTER SHORT U */ ++ { 0x06af, 0x045f }, /* Cyrillic_dzhe џ CYRILLIC SMALL LETTER DZHE */ ++ { 0x0ce0, 0x05d0 }, /* hebrew_aleph א HEBREW LETTER ALEF */ ++ { 0x0ce1, 0x05d1 }, /* hebrew_bet ב HEBREW LETTER BET */ ++ { 0x0ce2, 0x05d2 }, /* hebrew_gimel ג HEBREW LETTER GIMEL */ ++ { 0x0ce3, 0x05d3 }, /* hebrew_dalet ד HEBREW LETTER DALET */ ++ { 0x0ce4, 0x05d4 }, /* hebrew_he ה HEBREW LETTER HE */ ++ { 0x0ce5, 0x05d5 }, /* hebrew_waw ו HEBREW LETTER VAV */ ++ { 0x0ce6, 0x05d6 }, /* hebrew_zain ז HEBREW LETTER ZAYIN */ ++ { 0x0ce7, 0x05d7 }, /* hebrew_chet ח HEBREW LETTER HET */ ++ { 0x0ce8, 0x05d8 }, /* hebrew_tet ט HEBREW LETTER TET */ ++ { 0x0ce9, 0x05d9 }, /* hebrew_yod י HEBREW LETTER YOD */ ++ { 0x0cea, 0x05da }, /* hebrew_finalkaph ך HEBREW LETTER FINAL KAF */ ++ { 0x0ceb, 0x05db }, /* hebrew_kaph כ HEBREW LETTER KAF */ ++ { 0x0cec, 0x05dc }, /* hebrew_lamed ל HEBREW LETTER LAMED */ ++ { 0x0ced, 0x05dd }, /* hebrew_finalmem ם HEBREW LETTER FINAL MEM */ ++ { 0x0cee, 0x05de }, /* hebrew_mem מ HEBREW LETTER MEM */ ++ { 0x0cef, 0x05df }, /* hebrew_finalnun ן HEBREW LETTER FINAL NUN */ ++ { 0x0cf0, 0x05e0 }, /* hebrew_nun נ HEBREW LETTER NUN */ ++ { 0x0cf1, 0x05e1 }, /* hebrew_samech ס HEBREW LETTER SAMEKH */ ++ { 0x0cf2, 0x05e2 }, /* hebrew_ayin ע HEBREW LETTER AYIN */ ++ { 0x0cf3, 0x05e3 }, /* hebrew_finalpe ף HEBREW LETTER FINAL PE */ ++ { 0x0cf4, 0x05e4 }, /* hebrew_pe פ HEBREW LETTER PE */ ++ { 0x0cf5, 0x05e5 }, /* hebrew_finalzade ץ HEBREW LETTER FINAL TSADI */ ++ { 0x0cf6, 0x05e6 }, /* hebrew_zade צ HEBREW LETTER TSADI */ ++ { 0x0cf7, 0x05e7 }, /* hebrew_qoph ק HEBREW LETTER QOF */ ++ { 0x0cf8, 0x05e8 }, /* hebrew_resh ר HEBREW LETTER RESH */ ++ { 0x0cf9, 0x05e9 }, /* hebrew_shin ש HEBREW LETTER SHIN */ ++ { 0x0cfa, 0x05ea }, /* hebrew_taw ת HEBREW LETTER TAV */ ++ { 0x05ac, 0x060c }, /* Arabic_comma ، ARABIC COMMA */ ++ { 0x05bb, 0x061b }, /* Arabic_semicolon ؛ ARABIC SEMICOLON */ ++ { 0x05bf, 0x061f }, /* Arabic_question_mark ؟ ARABIC QUESTION MARK */ ++ { 0x05c1, 0x0621 }, /* Arabic_hamza ء ARABIC LETTER HAMZA */ ++ { 0x05c2, 0x0622 }, /* Arabic_maddaonalef آ ARABIC LETTER ALEF WITH MADDA ABOVE */ ++ { 0x05c3, 0x0623 }, /* Arabic_hamzaonalef أ ARABIC LETTER ALEF WITH HAMZA ABOVE */ ++ { 0x05c4, 0x0624 }, /* Arabic_hamzaonwaw ؤ ARABIC LETTER WAW WITH HAMZA ABOVE */ ++ { 0x05c5, 0x0625 }, /* Arabic_hamzaunderalef إ ARABIC LETTER ALEF WITH HAMZA BELOW */ ++ { 0x05c6, 0x0626 }, /* Arabic_hamzaonyeh ئ ARABIC LETTER YEH WITH HAMZA ABOVE */ ++ { 0x05c7, 0x0627 }, /* Arabic_alef ا ARABIC LETTER ALEF */ ++ { 0x05c8, 0x0628 }, /* Arabic_beh ب ARABIC LETTER BEH */ ++ { 0x05c9, 0x0629 }, /* Arabic_tehmarbuta ة ARABIC LETTER TEH MARBUTA */ ++ { 0x05ca, 0x062a }, /* Arabic_teh ت ARABIC LETTER TEH */ ++ { 0x05cb, 0x062b }, /* Arabic_theh ث ARABIC LETTER THEH */ ++ { 0x05cc, 0x062c }, /* Arabic_jeem ج ARABIC LETTER JEEM */ ++ { 0x05cd, 0x062d }, /* Arabic_hah ح ARABIC LETTER HAH */ ++ { 0x05ce, 0x062e }, /* Arabic_khah خ ARABIC LETTER KHAH */ ++ { 0x05cf, 0x062f }, /* Arabic_dal د ARABIC LETTER DAL */ ++ { 0x05d0, 0x0630 }, /* Arabic_thal ذ ARABIC LETTER THAL */ ++ { 0x05d1, 0x0631 }, /* Arabic_ra ر ARABIC LETTER REH */ ++ { 0x05d2, 0x0632 }, /* Arabic_zain ز ARABIC LETTER ZAIN */ ++ { 0x05d3, 0x0633 }, /* Arabic_seen س ARABIC LETTER SEEN */ ++ { 0x05d4, 0x0634 }, /* Arabic_sheen ش ARABIC LETTER SHEEN */ ++ { 0x05d5, 0x0635 }, /* Arabic_sad ص ARABIC LETTER SAD */ ++ { 0x05d6, 0x0636 }, /* Arabic_dad ض ARABIC LETTER DAD */ ++ { 0x05d7, 0x0637 }, /* Arabic_tah ط ARABIC LETTER TAH */ ++ { 0x05d8, 0x0638 }, /* Arabic_zah ظ ARABIC LETTER ZAH */ ++ { 0x05d9, 0x0639 }, /* Arabic_ain ع ARABIC LETTER AIN */ ++ { 0x05da, 0x063a }, /* Arabic_ghain غ ARABIC LETTER GHAIN */ ++ { 0x05e0, 0x0640 }, /* Arabic_tatweel ـ ARABIC TATWEEL */ ++ { 0x05e1, 0x0641 }, /* Arabic_feh ف ARABIC LETTER FEH */ ++ { 0x05e2, 0x0642 }, /* Arabic_qaf ق ARABIC LETTER QAF */ ++ { 0x05e3, 0x0643 }, /* Arabic_kaf ك ARABIC LETTER KAF */ ++ { 0x05e4, 0x0644 }, /* Arabic_lam ل ARABIC LETTER LAM */ ++ { 0x05e5, 0x0645 }, /* Arabic_meem م ARABIC LETTER MEEM */ ++ { 0x05e6, 0x0646 }, /* Arabic_noon ن ARABIC LETTER NOON */ ++ { 0x05e7, 0x0647 }, /* Arabic_ha ه ARABIC LETTER HEH */ ++ { 0x05e8, 0x0648 }, /* Arabic_waw و ARABIC LETTER WAW */ ++ { 0x05e9, 0x0649 }, /* Arabic_alefmaksura ى ARABIC LETTER ALEF MAKSURA */ ++ { 0x05ea, 0x064a }, /* Arabic_yeh ي ARABIC LETTER YEH */ ++ { 0x05eb, 0x064b }, /* Arabic_fathatan ً ARABIC FATHATAN */ ++ { 0x05ec, 0x064c }, /* Arabic_dammatan ٌ ARABIC DAMMATAN */ ++ { 0x05ed, 0x064d }, /* Arabic_kasratan ٍ ARABIC KASRATAN */ ++ { 0x05ee, 0x064e }, /* Arabic_fatha َ ARABIC FATHA */ ++ { 0x05ef, 0x064f }, /* Arabic_damma ُ ARABIC DAMMA */ ++ { 0x05f0, 0x0650 }, /* Arabic_kasra ِ ARABIC KASRA */ ++ { 0x05f1, 0x0651 }, /* Arabic_shadda ّ ARABIC SHADDA */ ++ { 0x05f2, 0x0652 }, /* Arabic_sukun ْ ARABIC SUKUN */ ++ { 0x0da1, 0x0e01 }, /* Thai_kokai ก THAI CHARACTER KO KAI */ ++ { 0x0da2, 0x0e02 }, /* Thai_khokhai ข THAI CHARACTER KHO KHAI */ ++ { 0x0da3, 0x0e03 }, /* Thai_khokhuat ฃ THAI CHARACTER KHO KHUAT */ ++ { 0x0da4, 0x0e04 }, /* Thai_khokhwai ค THAI CHARACTER KHO KHWAI */ ++ { 0x0da5, 0x0e05 }, /* Thai_khokhon ฅ THAI CHARACTER KHO KHON */ ++ { 0x0da6, 0x0e06 }, /* Thai_khorakhang ฆ THAI CHARACTER KHO RAKHANG */ ++ { 0x0da7, 0x0e07 }, /* Thai_ngongu ง THAI CHARACTER NGO NGU */ ++ { 0x0da8, 0x0e08 }, /* Thai_chochan จ THAI CHARACTER CHO CHAN */ ++ { 0x0da9, 0x0e09 }, /* Thai_choching ฉ THAI CHARACTER CHO CHING */ ++ { 0x0daa, 0x0e0a }, /* Thai_chochang ช THAI CHARACTER CHO CHANG */ ++ { 0x0dab, 0x0e0b }, /* Thai_soso ซ THAI CHARACTER SO SO */ ++ { 0x0dac, 0x0e0c }, /* Thai_chochoe ฌ THAI CHARACTER CHO CHOE */ ++ { 0x0dad, 0x0e0d }, /* Thai_yoying ญ THAI CHARACTER YO YING */ ++ { 0x0dae, 0x0e0e }, /* Thai_dochada ฎ THAI CHARACTER DO CHADA */ ++ { 0x0daf, 0x0e0f }, /* Thai_topatak ฏ THAI CHARACTER TO PATAK */ ++ { 0x0db0, 0x0e10 }, /* Thai_thothan ฐ THAI CHARACTER THO THAN */ ++ { 0x0db1, 0x0e11 }, /* Thai_thonangmontho ฑ THAI CHARACTER THO NANGMONTHO */ ++ { 0x0db2, 0x0e12 }, /* Thai_thophuthao ฒ THAI CHARACTER THO PHUTHAO */ ++ { 0x0db3, 0x0e13 }, /* Thai_nonen ณ THAI CHARACTER NO NEN */ ++ { 0x0db4, 0x0e14 }, /* Thai_dodek ด THAI CHARACTER DO DEK */ ++ { 0x0db5, 0x0e15 }, /* Thai_totao ต THAI CHARACTER TO TAO */ ++ { 0x0db6, 0x0e16 }, /* Thai_thothung ถ THAI CHARACTER THO THUNG */ ++ { 0x0db7, 0x0e17 }, /* Thai_thothahan ท THAI CHARACTER THO THAHAN */ ++ { 0x0db8, 0x0e18 }, /* Thai_thothong ธ THAI CHARACTER THO THONG */ ++ { 0x0db9, 0x0e19 }, /* Thai_nonu น THAI CHARACTER NO NU */ ++ { 0x0dba, 0x0e1a }, /* Thai_bobaimai บ THAI CHARACTER BO BAIMAI */ ++ { 0x0dbb, 0x0e1b }, /* Thai_popla ป THAI CHARACTER PO PLA */ ++ { 0x0dbc, 0x0e1c }, /* Thai_phophung ผ THAI CHARACTER PHO PHUNG */ ++ { 0x0dbd, 0x0e1d }, /* Thai_fofa ฝ THAI CHARACTER FO FA */ ++ { 0x0dbe, 0x0e1e }, /* Thai_phophan พ THAI CHARACTER PHO PHAN */ ++ { 0x0dbf, 0x0e1f }, /* Thai_fofan ฟ THAI CHARACTER FO FAN */ ++ { 0x0dc0, 0x0e20 }, /* Thai_phosamphao ภ THAI CHARACTER PHO SAMPHAO */ ++ { 0x0dc1, 0x0e21 }, /* Thai_moma ม THAI CHARACTER MO MA */ ++ { 0x0dc2, 0x0e22 }, /* Thai_yoyak ย THAI CHARACTER YO YAK */ ++ { 0x0dc3, 0x0e23 }, /* Thai_rorua ร THAI CHARACTER RO RUA */ ++ { 0x0dc4, 0x0e24 }, /* Thai_ru ฤ THAI CHARACTER RU */ ++ { 0x0dc5, 0x0e25 }, /* Thai_loling ล THAI CHARACTER LO LING */ ++ { 0x0dc6, 0x0e26 }, /* Thai_lu ฦ THAI CHARACTER LU */ ++ { 0x0dc7, 0x0e27 }, /* Thai_wowaen ว THAI CHARACTER WO WAEN */ ++ { 0x0dc8, 0x0e28 }, /* Thai_sosala ศ THAI CHARACTER SO SALA */ ++ { 0x0dc9, 0x0e29 }, /* Thai_sorusi ษ THAI CHARACTER SO RUSI */ ++ { 0x0dca, 0x0e2a }, /* Thai_sosua ส THAI CHARACTER SO SUA */ ++ { 0x0dcb, 0x0e2b }, /* Thai_hohip ห THAI CHARACTER HO HIP */ ++ { 0x0dcc, 0x0e2c }, /* Thai_lochula ฬ THAI CHARACTER LO CHULA */ ++ { 0x0dcd, 0x0e2d }, /* Thai_oang อ THAI CHARACTER O ANG */ ++ { 0x0dce, 0x0e2e }, /* Thai_honokhuk ฮ THAI CHARACTER HO NOKHUK */ ++ { 0x0dcf, 0x0e2f }, /* Thai_paiyannoi ฯ THAI CHARACTER PAIYANNOI */ ++ { 0x0dd0, 0x0e30 }, /* Thai_saraa ะ THAI CHARACTER SARA A */ ++ { 0x0dd1, 0x0e31 }, /* Thai_maihanakat ั THAI CHARACTER MAI HAN-AKAT */ ++ { 0x0dd2, 0x0e32 }, /* Thai_saraaa า THAI CHARACTER SARA AA */ ++ { 0x0dd3, 0x0e33 }, /* Thai_saraam ำ THAI CHARACTER SARA AM */ ++ { 0x0dd4, 0x0e34 }, /* Thai_sarai ิ THAI CHARACTER SARA I */ ++ { 0x0dd5, 0x0e35 }, /* Thai_saraii ี THAI CHARACTER SARA II */ ++ { 0x0dd6, 0x0e36 }, /* Thai_saraue ึ THAI CHARACTER SARA UE */ ++ { 0x0dd7, 0x0e37 }, /* Thai_sarauee ื THAI CHARACTER SARA UEE */ ++ { 0x0dd8, 0x0e38 }, /* Thai_sarau ุ THAI CHARACTER SARA U */ ++ { 0x0dd9, 0x0e39 }, /* Thai_sarauu ู THAI CHARACTER SARA UU */ ++ { 0x0dda, 0x0e3a }, /* Thai_phinthu ฺ THAI CHARACTER PHINTHU */ ++ { 0x0ddf, 0x0e3f }, /* Thai_baht ฿ THAI CURRENCY SYMBOL BAHT */ ++ { 0x0de0, 0x0e40 }, /* Thai_sarae เ THAI CHARACTER SARA E */ ++ { 0x0de1, 0x0e41 }, /* Thai_saraae แ THAI CHARACTER SARA AE */ ++ { 0x0de2, 0x0e42 }, /* Thai_sarao โ THAI CHARACTER SARA O */ ++ { 0x0de3, 0x0e43 }, /* Thai_saraaimaimuan ใ THAI CHARACTER SARA AI MAIMUAN */ ++ { 0x0de4, 0x0e44 }, /* Thai_saraaimaimalai ไ THAI CHARACTER SARA AI MAIMALAI */ ++ { 0x0de5, 0x0e45 }, /* Thai_lakkhangyao ๅ THAI CHARACTER LAKKHANGYAO */ ++ { 0x0de6, 0x0e46 }, /* Thai_maiyamok ๆ THAI CHARACTER MAIYAMOK */ ++ { 0x0de7, 0x0e47 }, /* Thai_maitaikhu ็ THAI CHARACTER MAITAIKHU */ ++ { 0x0de8, 0x0e48 }, /* Thai_maiek ่ THAI CHARACTER MAI EK */ ++ { 0x0de9, 0x0e49 }, /* Thai_maitho ้ THAI CHARACTER MAI THO */ ++ { 0x0dea, 0x0e4a }, /* Thai_maitri ๊ THAI CHARACTER MAI TRI */ ++ { 0x0deb, 0x0e4b }, /* Thai_maichattawa ๋ THAI CHARACTER MAI CHATTAWA */ ++ { 0x0dec, 0x0e4c }, /* Thai_thanthakhat ์ THAI CHARACTER THANTHAKHAT */ ++ { 0x0ded, 0x0e4d }, /* Thai_nikhahit ํ THAI CHARACTER NIKHAHIT */ ++ { 0x0df0, 0x0e50 }, /* Thai_leksun ๐ THAI DIGIT ZERO */ ++ { 0x0df1, 0x0e51 }, /* Thai_leknung ๑ THAI DIGIT ONE */ ++ { 0x0df2, 0x0e52 }, /* Thai_leksong ๒ THAI DIGIT TWO */ ++ { 0x0df3, 0x0e53 }, /* Thai_leksam ๓ THAI DIGIT THREE */ ++ { 0x0df4, 0x0e54 }, /* Thai_leksi ๔ THAI DIGIT FOUR */ ++ { 0x0df5, 0x0e55 }, /* Thai_lekha ๕ THAI DIGIT FIVE */ ++ { 0x0df6, 0x0e56 }, /* Thai_lekhok ๖ THAI DIGIT SIX */ ++ { 0x0df7, 0x0e57 }, /* Thai_lekchet ๗ THAI DIGIT SEVEN */ ++ { 0x0df8, 0x0e58 }, /* Thai_lekpaet ๘ THAI DIGIT EIGHT */ ++ { 0x0df9, 0x0e59 }, /* Thai_lekkao ๙ THAI DIGIT NINE */ ++ { 0x0ed4, 0x11a8 }, /* Hangul_J_Kiyeog ᆨ HANGUL JONGSEONG KIYEOK */ ++ { 0x0ed5, 0x11a9 }, /* Hangul_J_SsangKiyeog ᆩ HANGUL JONGSEONG SSANGKIYEOK */ ++ { 0x0ed6, 0x11aa }, /* Hangul_J_KiyeogSios ᆪ HANGUL JONGSEONG KIYEOK-SIOS */ ++ { 0x0ed7, 0x11ab }, /* Hangul_J_Nieun ᆫ HANGUL JONGSEONG NIEUN */ ++ { 0x0ed8, 0x11ac }, /* Hangul_J_NieunJieuj ᆬ HANGUL JONGSEONG NIEUN-CIEUC */ ++ { 0x0ed9, 0x11ad }, /* Hangul_J_NieunHieuh ᆭ HANGUL JONGSEONG NIEUN-HIEUH */ ++ { 0x0eda, 0x11ae }, /* Hangul_J_Dikeud ᆮ HANGUL JONGSEONG TIKEUT */ ++ { 0x0edb, 0x11af }, /* Hangul_J_Rieul ᆯ HANGUL JONGSEONG RIEUL */ ++ { 0x0edc, 0x11b0 }, /* Hangul_J_RieulKiyeog ᆰ HANGUL JONGSEONG RIEUL-KIYEOK */ ++ { 0x0edd, 0x11b1 }, /* Hangul_J_RieulMieum ᆱ HANGUL JONGSEONG RIEUL-MIEUM */ ++ { 0x0ede, 0x11b2 }, /* Hangul_J_RieulPieub ᆲ HANGUL JONGSEONG RIEUL-PIEUP */ ++ { 0x0edf, 0x11b3 }, /* Hangul_J_RieulSios ᆳ HANGUL JONGSEONG RIEUL-SIOS */ ++ { 0x0ee0, 0x11b4 }, /* Hangul_J_RieulTieut ᆴ HANGUL JONGSEONG RIEUL-THIEUTH */ ++ { 0x0ee1, 0x11b5 }, /* Hangul_J_RieulPhieuf ᆵ HANGUL JONGSEONG RIEUL-PHIEUPH */ ++ { 0x0ee2, 0x11b6 }, /* Hangul_J_RieulHieuh ᆶ HANGUL JONGSEONG RIEUL-HIEUH */ ++ { 0x0ee3, 0x11b7 }, /* Hangul_J_Mieum ᆷ HANGUL JONGSEONG MIEUM */ ++ { 0x0ee4, 0x11b8 }, /* Hangul_J_Pieub ᆸ HANGUL JONGSEONG PIEUP */ ++ { 0x0ee5, 0x11b9 }, /* Hangul_J_PieubSios ᆹ HANGUL JONGSEONG PIEUP-SIOS */ ++ { 0x0ee6, 0x11ba }, /* Hangul_J_Sios ᆺ HANGUL JONGSEONG SIOS */ ++ { 0x0ee7, 0x11bb }, /* Hangul_J_SsangSios ᆻ HANGUL JONGSEONG SSANGSIOS */ ++ { 0x0ee8, 0x11bc }, /* Hangul_J_Ieung ᆼ HANGUL JONGSEONG IEUNG */ ++ { 0x0ee9, 0x11bd }, /* Hangul_J_Jieuj ᆽ HANGUL JONGSEONG CIEUC */ ++ { 0x0eea, 0x11be }, /* Hangul_J_Cieuc ᆾ HANGUL JONGSEONG CHIEUCH */ ++ { 0x0eeb, 0x11bf }, /* Hangul_J_Khieuq ᆿ HANGUL JONGSEONG KHIEUKH */ ++ { 0x0eec, 0x11c0 }, /* Hangul_J_Tieut ᇀ HANGUL JONGSEONG THIEUTH */ ++ { 0x0eed, 0x11c1 }, /* Hangul_J_Phieuf ᇁ HANGUL JONGSEONG PHIEUPH */ ++ { 0x0eee, 0x11c2 }, /* Hangul_J_Hieuh ᇂ HANGUL JONGSEONG HIEUH */ ++ { 0x0ef8, 0x11eb }, /* Hangul_J_PanSios ᇫ HANGUL JONGSEONG PANSIOS */ ++ { 0x0efa, 0x11f9 }, /* Hangul_J_YeorinHieuh ᇹ HANGUL JONGSEONG YEORINHIEUH */ ++ { 0x0aa2, 0x2002 }, /* enspace   EN SPACE */ ++ { 0x0aa1, 0x2003 }, /* emspace   EM SPACE */ ++ { 0x0aa3, 0x2004 }, /* em3space   THREE-PER-EM SPACE */ ++ { 0x0aa4, 0x2005 }, /* em4space   FOUR-PER-EM SPACE */ ++ { 0x0aa5, 0x2007 }, /* digitspace   FIGURE SPACE */ ++ { 0x0aa6, 0x2008 }, /* punctspace   PUNCTUATION SPACE */ ++ { 0x0aa7, 0x2009 }, /* thinspace   THIN SPACE */ ++ { 0x0aa8, 0x200a }, /* hairspace   HAIR SPACE */ ++ { 0x0abb, 0x2012 }, /* figdash ‒ FIGURE DASH */ ++ { 0x0aaa, 0x2013 }, /* endash – EN DASH */ ++ { 0x0aa9, 0x2014 }, /* emdash — EM DASH */ ++ { 0x07af, 0x2015 }, /* Greek_horizbar ― HORIZONTAL BAR */ ++ { 0x0cdf, 0x2017 }, /* hebrew_doublelowline ‗ DOUBLE LOW LINE */ ++ { 0x0ad0, 0x2018 }, /* leftsinglequotemark ‘ LEFT SINGLE QUOTATION MARK */ ++ { 0x0ad1, 0x2019 }, /* rightsinglequotemark ’ RIGHT SINGLE QUOTATION MARK */ ++ { 0x0afd, 0x201a }, /* singlelowquotemark ‚ SINGLE LOW-9 QUOTATION MARK */ ++ { 0x0ad2, 0x201c }, /* leftdoublequotemark “ LEFT DOUBLE QUOTATION MARK */ ++ { 0x0ad3, 0x201d }, /* rightdoublequotemark ” RIGHT DOUBLE QUOTATION MARK */ ++ { 0x0afe, 0x201e }, /* doublelowquotemark „ DOUBLE LOW-9 QUOTATION MARK */ ++ { 0x0af1, 0x2020 }, /* dagger † DAGGER */ ++ { 0x0af2, 0x2021 }, /* doubledagger ‡ DOUBLE DAGGER */ ++ { 0x0ae6, 0x2022 }, /* enfilledcircbullet • BULLET */ ++ { 0x0aae, 0x2026 }, /* ellipsis … HORIZONTAL ELLIPSIS */ ++ { 0x0ad6, 0x2032 }, /* minutes ′ PRIME */ ++ { 0x0ad7, 0x2033 }, /* seconds ″ DOUBLE PRIME */ ++ { 0x0afc, 0x2038 }, /* caret ‸ CARET */ ++ { 0x047e, 0x203e }, /* overline ‾ OVERLINE */ ++ { 0x20a0, 0x20a0 }, /* EcuSign ₠ EURO-CURRENCY SIGN */ ++ { 0x20a1, 0x20a1 }, /* ColonSign ₡ COLON SIGN */ ++ { 0x20a2, 0x20a2 }, /* CruzeiroSign ₢ CRUZEIRO SIGN */ ++ { 0x20a3, 0x20a3 }, /* FFrancSign ₣ FRENCH FRANC SIGN */ ++ { 0x20a4, 0x20a4 }, /* LiraSign ₤ LIRA SIGN */ ++ { 0x20a5, 0x20a5 }, /* MillSign ₥ MILL SIGN */ ++ { 0x20a6, 0x20a6 }, /* NairaSign ₦ NAIRA SIGN */ ++ { 0x20a7, 0x20a7 }, /* PesetaSign ₧ PESETA SIGN */ ++ { 0x20a8, 0x20a8 }, /* RupeeSign ₨ RUPEE SIGN */ ++ { 0x0eff, 0x20a9 }, /* Korean_Won ₩ WON SIGN */ ++ { 0x20a9, 0x20a9 }, /* WonSign ₩ WON SIGN */ ++ { 0x20aa, 0x20aa }, /* NewSheqelSign ₪ NEW SHEQEL SIGN */ ++ { 0x20ab, 0x20ab }, /* DongSign ₫ DONG SIGN */ ++ { 0x20ac, 0x20ac }, /* EuroSign € EURO SIGN */ ++ { 0x0ab8, 0x2105 }, /* careof ℅ CARE OF */ ++ { 0x06b0, 0x2116 }, /* numerosign № NUMERO SIGN */ ++ { 0x0afb, 0x2117 }, /* phonographcopyright ℗ SOUND RECORDING COPYRIGHT */ ++ { 0x0ad4, 0x211e }, /* prescription ℞ PRESCRIPTION TAKE */ ++ { 0x0ac9, 0x2122 }, /* trademark ™ TRADE MARK SIGN */ ++ { 0x0ab0, 0x2153 }, /* onethird ⅓ VULGAR FRACTION ONE THIRD */ ++ { 0x0ab1, 0x2154 }, /* twothirds ⅔ VULGAR FRACTION TWO THIRDS */ ++ { 0x0ab2, 0x2155 }, /* onefifth ⅕ VULGAR FRACTION ONE FIFTH */ ++ { 0x0ab3, 0x2156 }, /* twofifths ⅖ VULGAR FRACTION TWO FIFTHS */ ++ { 0x0ab4, 0x2157 }, /* threefifths ⅗ VULGAR FRACTION THREE FIFTHS */ ++ { 0x0ab5, 0x2158 }, /* fourfifths ⅘ VULGAR FRACTION FOUR FIFTHS */ ++ { 0x0ab6, 0x2159 }, /* onesixth ⅙ VULGAR FRACTION ONE SIXTH */ ++ { 0x0ab7, 0x215a }, /* fivesixths ⅚ VULGAR FRACTION FIVE SIXTHS */ ++ { 0x0ac3, 0x215b }, /* oneeighth ⅛ VULGAR FRACTION ONE EIGHTH */ ++ { 0x0ac4, 0x215c }, /* threeeighths ⅜ VULGAR FRACTION THREE EIGHTHS */ ++ { 0x0ac5, 0x215d }, /* fiveeighths ⅝ VULGAR FRACTION FIVE EIGHTHS */ ++ { 0x0ac6, 0x215e }, /* seveneighths ⅞ VULGAR FRACTION SEVEN EIGHTHS */ ++ { 0x08fb, 0x2190 }, /* leftarrow ← LEFTWARDS ARROW */ ++ { 0x08fc, 0x2191 }, /* uparrow ↑ UPWARDS ARROW */ ++ { 0x08fd, 0x2192 }, /* rightarrow → RIGHTWARDS ARROW */ ++ { 0x08fe, 0x2193 }, /* downarrow ↓ DOWNWARDS ARROW */ ++ { 0x08ce, 0x21d2 }, /* implies ⇒ RIGHTWARDS DOUBLE ARROW */ ++ { 0x08cd, 0x21d4 }, /* ifonlyif ⇔ LEFT RIGHT DOUBLE ARROW */ ++ { 0x08ef, 0x2202 }, /* partialderivative ∂ PARTIAL DIFFERENTIAL */ ++ { 0x08c5, 0x2207 }, /* nabla ∇ NABLA */ ++ { 0x0bca, 0x2218 }, /* jot ∘ RING OPERATOR */ ++ { 0x08d6, 0x221a }, /* radical √ SQUARE ROOT */ ++ { 0x08c1, 0x221d }, /* variation ∝ PROPORTIONAL TO */ ++ { 0x08c2, 0x221e }, /* infinity ∞ INFINITY */ ++ { 0x08de, 0x2227 }, /* logicaland ∧ LOGICAL AND */ ++ { 0x0ba9, 0x2227 }, /* upcaret ∧ LOGICAL AND */ ++ { 0x08df, 0x2228 }, /* logicalor ∨ LOGICAL OR */ ++ { 0x0ba8, 0x2228 }, /* downcaret ∨ LOGICAL OR */ ++ { 0x08dc, 0x2229 }, /* intersection ∩ INTERSECTION */ ++ { 0x0bc3, 0x2229 }, /* upshoe ∩ INTERSECTION */ ++ { 0x08dd, 0x222a }, /* union ∪ UNION */ ++ { 0x0bd6, 0x222a }, /* downshoe ∪ UNION */ ++ { 0x08bf, 0x222b }, /* integral ∫ INTEGRAL */ ++ { 0x08c0, 0x2234 }, /* therefore ∴ THEREFORE */ ++ { 0x08c8, 0x2245 }, /* approximate ≅ APPROXIMATELY EQUAL TO */ ++ { 0x08bd, 0x2260 }, /* notequal ≠ NOT EQUAL TO */ ++ { 0x08cf, 0x2261 }, /* identical ≡ IDENTICAL TO */ ++ { 0x08bc, 0x2264 }, /* lessthanequal ≤ LESS-THAN OR EQUAL TO */ ++ { 0x08be, 0x2265 }, /* greaterthanequal ≥ GREATER-THAN OR EQUAL TO */ ++ { 0x08da, 0x2282 }, /* includedin ⊂ SUBSET OF */ ++ { 0x0bda, 0x2282 }, /* leftshoe ⊂ SUBSET OF */ ++ { 0x08db, 0x2283 }, /* includes ⊃ SUPERSET OF */ ++ { 0x0bd8, 0x2283 }, /* rightshoe ⊃ SUPERSET OF */ ++ { 0x0bfc, 0x22a2 }, /* righttack ⊢ RIGHT TACK */ ++ { 0x0bdc, 0x22a3 }, /* lefttack ⊣ LEFT TACK */ ++ { 0x0bc2, 0x22a4 }, /* downtack ⊤ DOWN TACK */ ++ { 0x0bce, 0x22a5 }, /* uptack ⊥ UP TACK */ ++ { 0x0bd3, 0x2308 }, /* upstile ⌈ LEFT CEILING */ ++ { 0x0bc4, 0x230a }, /* downstile ⌊ LEFT FLOOR */ ++ { 0x0afa, 0x2315 }, /* telephonerecorder ⌕ TELEPHONE RECORDER */ ++ { 0x08a4, 0x2320 }, /* topintegral ⌠ TOP HALF INTEGRAL */ ++ { 0x08a5, 0x2321 }, /* botintegral ⌡ BOTTOM HALF INTEGRAL */ ++ { 0x0abc, 0x2329 }, /* leftanglebracket 〈 LEFT-POINTING ANGLE BRACKET */ ++ { 0x0abe, 0x232a }, /* rightanglebracket 〉 RIGHT-POINTING ANGLE BRACKET */ ++ { 0x0bcc, 0x2395 }, /* quad ⎕ APL FUNCTIONAL SYMBOL QUAD (Unicode 3.0) */ ++ { 0x09e2, 0x2409 }, /* ht ␉ SYMBOL FOR HORIZONTAL TABULATION */ ++ { 0x09e5, 0x240a }, /* lf ␊ SYMBOL FOR LINE FEED */ ++ { 0x09e9, 0x240b }, /* vt ␋ SYMBOL FOR VERTICAL TABULATION */ ++ { 0x09e3, 0x240c }, /* ff ␌ SYMBOL FOR FORM FEED */ ++ { 0x09e4, 0x240d }, /* cr ␍ SYMBOL FOR CARRIAGE RETURN */ ++ { 0x09df, 0x2422 }, /* blank ␢ BLANK SYMBOL */ ++ { 0x09e8, 0x2424 }, /* nl ␤ SYMBOL FOR NEWLINE */ ++ { 0x09f1, 0x2500 }, /* horizlinescan5 ─ BOX DRAWINGS LIGHT HORIZONTAL */ ++ { 0x08a6, 0x2502 }, /* vertconnector │ BOX DRAWINGS LIGHT VERTICAL */ ++ { 0x09f8, 0x2502 }, /* vertbar │ BOX DRAWINGS LIGHT VERTICAL */ ++ { 0x09ec, 0x250c }, /* upleftcorner ┌ BOX DRAWINGS LIGHT DOWN AND RIGHT */ ++ { 0x09eb, 0x2510 }, /* uprightcorner ┐ BOX DRAWINGS LIGHT DOWN AND LEFT */ ++ { 0x09ed, 0x2514 }, /* lowleftcorner └ BOX DRAWINGS LIGHT UP AND RIGHT */ ++ { 0x09ea, 0x2518 }, /* lowrightcorner ┘ BOX DRAWINGS LIGHT UP AND LEFT */ ++ { 0x09f4, 0x251c }, /* leftt ├ BOX DRAWINGS LIGHT VERTICAL AND RIGHT */ ++ { 0x09f5, 0x2524 }, /* rightt ┤ BOX DRAWINGS LIGHT VERTICAL AND LEFT */ ++ { 0x09f7, 0x252c }, /* topt ┬ BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */ ++ { 0x09f6, 0x2534 }, /* bott ┴ BOX DRAWINGS LIGHT UP AND HORIZONTAL */ ++ { 0x09ee, 0x253c }, /* crossinglines ┼ BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */ ++ { 0x09e1, 0x2592 }, /* checkerboard ▒ MEDIUM SHADE */ ++ { 0x0adf, 0x25a0 }, /* emfilledrect ■ BLACK SQUARE */ ++ { 0x0acf, 0x25a1 }, /* emopenrectangle □ WHITE SQUARE */ ++ { 0x0ae7, 0x25aa }, /* enfilledsqbullet ▪ BLACK SMALL SQUARE */ ++ { 0x0ae1, 0x25ab }, /* enopensquarebullet ▫ WHITE SMALL SQUARE */ ++ { 0x0adb, 0x25ac }, /* filledrectbullet ▬ BLACK RECTANGLE */ ++ { 0x0ae2, 0x25ad }, /* openrectbullet ▭ WHITE RECTANGLE */ ++ { 0x0ae8, 0x25b2 }, /* filledtribulletup ▲ BLACK UP-POINTING TRIANGLE */ ++ { 0x0ae3, 0x25b3 }, /* opentribulletup △ WHITE UP-POINTING TRIANGLE */ ++ { 0x0add, 0x25b6 }, /* filledrighttribullet ▶ BLACK RIGHT-POINTING TRIANGLE */ ++ { 0x0acd, 0x25b7 }, /* rightopentriangle ▷ WHITE RIGHT-POINTING TRIANGLE */ ++ { 0x0ae9, 0x25bc }, /* filledtribulletdown ▼ BLACK DOWN-POINTING TRIANGLE */ ++ { 0x0ae4, 0x25bd }, /* opentribulletdown ▽ WHITE DOWN-POINTING TRIANGLE */ ++ { 0x0adc, 0x25c0 }, /* filledlefttribullet ◀ BLACK LEFT-POINTING TRIANGLE */ ++ { 0x0acc, 0x25c1 }, /* leftopentriangle ◁ WHITE LEFT-POINTING TRIANGLE */ ++ { 0x09e0, 0x25c6 }, /* soliddiamond ◆ BLACK DIAMOND */ ++ { 0x0ace, 0x25cb }, /* emopencircle ○ WHITE CIRCLE */ ++ { 0x0bcf, 0x25cb }, /* circle ○ WHITE CIRCLE */ ++ { 0x0ade, 0x25cf }, /* emfilledcircle ● BLACK CIRCLE */ ++ { 0x0ae0, 0x25e6 }, /* enopencircbullet ◦ WHITE BULLET */ ++ { 0x0ae5, 0x2606 }, /* openstar ☆ WHITE STAR */ ++ { 0x0af9, 0x260e }, /* telephone ☎ BLACK TELEPHONE */ ++ { 0x0aca, 0x2613 }, /* signaturemark ☓ SALTIRE */ ++ { 0x0aea, 0x261c }, /* leftpointer ☜ WHITE LEFT POINTING INDEX */ ++ { 0x0aeb, 0x261e }, /* rightpointer ☞ WHITE RIGHT POINTING INDEX */ ++ { 0x0af8, 0x2640 }, /* femalesymbol ♀ FEMALE SIGN */ ++ { 0x0af7, 0x2642 }, /* malesymbol ♂ MALE SIGN */ ++ { 0x0aec, 0x2663 }, /* club ♣ BLACK CLUB SUIT */ ++ { 0x0aee, 0x2665 }, /* heart ♥ BLACK HEART SUIT */ ++ { 0x0aed, 0x2666 }, /* diamond ♦ BLACK DIAMOND SUIT */ ++ { 0x0af6, 0x266d }, /* musicalflat ♭ MUSIC FLAT SIGN */ ++ { 0x0af5, 0x266f }, /* musicalsharp ♯ MUSIC SHARP SIGN */ ++ { 0x0af3, 0x2713 }, /* checkmark ✓ CHECK MARK */ ++ { 0x0af4, 0x2717 }, /* ballotcross ✗ BALLOT X */ ++ { 0x0ad9, 0x271d }, /* latincross ✝ LATIN CROSS */ ++ { 0x0af0, 0x2720 }, /* maltesecross ✠ MALTESE CROSS */ ++ { 0x04a4, 0x3001 }, /* kana_comma 、 IDEOGRAPHIC COMMA */ ++ { 0x04a1, 0x3002 }, /* kana_fullstop 。 IDEOGRAPHIC FULL STOP */ ++ { 0x04a2, 0x300c }, /* kana_openingbracket 「 LEFT CORNER BRACKET */ ++ { 0x04a3, 0x300d }, /* kana_closingbracket 」 RIGHT CORNER BRACKET */ ++ { 0x04de, 0x309b }, /* voicedsound ゛ KATAKANA-HIRAGANA VOICED SOUND MARK */ ++ { 0x04df, 0x309c }, /* semivoicedsound ゜ KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */ ++ { 0x04a7, 0x30a1 }, /* kana_a ァ KATAKANA LETTER SMALL A */ ++ { 0x04b1, 0x30a2 }, /* kana_A ア KATAKANA LETTER A */ ++ { 0x04a8, 0x30a3 }, /* kana_i ィ KATAKANA LETTER SMALL I */ ++ { 0x04b2, 0x30a4 }, /* kana_I イ KATAKANA LETTER I */ ++ { 0x04a9, 0x30a5 }, /* kana_u ゥ KATAKANA LETTER SMALL U */ ++ { 0x04b3, 0x30a6 }, /* kana_U ウ KATAKANA LETTER U */ ++ { 0x04aa, 0x30a7 }, /* kana_e ェ KATAKANA LETTER SMALL E */ ++ { 0x04b4, 0x30a8 }, /* kana_E エ KATAKANA LETTER E */ ++ { 0x04ab, 0x30a9 }, /* kana_o ォ KATAKANA LETTER SMALL O */ ++ { 0x04b5, 0x30aa }, /* kana_O オ KATAKANA LETTER O */ ++ { 0x04b6, 0x30ab }, /* kana_KA カ KATAKANA LETTER KA */ ++ { 0x04b7, 0x30ad }, /* kana_KI キ KATAKANA LETTER KI */ ++ { 0x04b8, 0x30af }, /* kana_KU ク KATAKANA LETTER KU */ ++ { 0x04b9, 0x30b1 }, /* kana_KE ケ KATAKANA LETTER KE */ ++ { 0x04ba, 0x30b3 }, /* kana_KO コ KATAKANA LETTER KO */ ++ { 0x04bb, 0x30b5 }, /* kana_SA サ KATAKANA LETTER SA */ ++ { 0x04bc, 0x30b7 }, /* kana_SHI シ KATAKANA LETTER SI */ ++ { 0x04bd, 0x30b9 }, /* kana_SU ス KATAKANA LETTER SU */ ++ { 0x04be, 0x30bb }, /* kana_SE セ KATAKANA LETTER SE */ ++ { 0x04bf, 0x30bd }, /* kana_SO ソ KATAKANA LETTER SO */ ++ { 0x04c0, 0x30bf }, /* kana_TA タ KATAKANA LETTER TA */ ++ { 0x04c1, 0x30c1 }, /* kana_CHI チ KATAKANA LETTER TI */ ++ { 0x04af, 0x30c3 }, /* kana_tsu ッ KATAKANA LETTER SMALL TU */ ++ { 0x04c2, 0x30c4 }, /* kana_TSU ツ KATAKANA LETTER TU */ ++ { 0x04c3, 0x30c6 }, /* kana_TE テ KATAKANA LETTER TE */ ++ { 0x04c4, 0x30c8 }, /* kana_TO ト KATAKANA LETTER TO */ ++ { 0x04c5, 0x30ca }, /* kana_NA ナ KATAKANA LETTER NA */ ++ { 0x04c6, 0x30cb }, /* kana_NI ニ KATAKANA LETTER NI */ ++ { 0x04c7, 0x30cc }, /* kana_NU ヌ KATAKANA LETTER NU */ ++ { 0x04c8, 0x30cd }, /* kana_NE ネ KATAKANA LETTER NE */ ++ { 0x04c9, 0x30ce }, /* kana_NO ノ KATAKANA LETTER NO */ ++ { 0x04ca, 0x30cf }, /* kana_HA ハ KATAKANA LETTER HA */ ++ { 0x04cb, 0x30d2 }, /* kana_HI ヒ KATAKANA LETTER HI */ ++ { 0x04cc, 0x30d5 }, /* kana_FU フ KATAKANA LETTER HU */ ++ { 0x04cd, 0x30d8 }, /* kana_HE ヘ KATAKANA LETTER HE */ ++ { 0x04ce, 0x30db }, /* kana_HO ホ KATAKANA LETTER HO */ ++ { 0x04cf, 0x30de }, /* kana_MA マ KATAKANA LETTER MA */ ++ { 0x04d0, 0x30df }, /* kana_MI ミ KATAKANA LETTER MI */ ++ { 0x04d1, 0x30e0 }, /* kana_MU ム KATAKANA LETTER MU */ ++ { 0x04d2, 0x30e1 }, /* kana_ME メ KATAKANA LETTER ME */ ++ { 0x04d3, 0x30e2 }, /* kana_MO モ KATAKANA LETTER MO */ ++ { 0x04ac, 0x30e3 }, /* kana_ya ャ KATAKANA LETTER SMALL YA */ ++ { 0x04d4, 0x30e4 }, /* kana_YA ヤ KATAKANA LETTER YA */ ++ { 0x04ad, 0x30e5 }, /* kana_yu ュ KATAKANA LETTER SMALL YU */ ++ { 0x04d5, 0x30e6 }, /* kana_YU ユ KATAKANA LETTER YU */ ++ { 0x04ae, 0x30e7 }, /* kana_yo ョ KATAKANA LETTER SMALL YO */ ++ { 0x04d6, 0x30e8 }, /* kana_YO ヨ KATAKANA LETTER YO */ ++ { 0x04d7, 0x30e9 }, /* kana_RA ラ KATAKANA LETTER RA */ ++ { 0x04d8, 0x30ea }, /* kana_RI リ KATAKANA LETTER RI */ ++ { 0x04d9, 0x30eb }, /* kana_RU ル KATAKANA LETTER RU */ ++ { 0x04da, 0x30ec }, /* kana_RE レ KATAKANA LETTER RE */ ++ { 0x04db, 0x30ed }, /* kana_RO ロ KATAKANA LETTER RO */ ++ { 0x04dc, 0x30ef }, /* kana_WA ワ KATAKANA LETTER WA */ ++ { 0x04a6, 0x30f2 }, /* kana_WO ヲ KATAKANA LETTER WO */ ++ { 0x04dd, 0x30f3 }, /* kana_N ン KATAKANA LETTER N */ ++ { 0x04a5, 0x30fb }, /* kana_conjunctive ・ KATAKANA MIDDLE DOT */ ++ { 0x04b0, 0x30fc }, /* prolongedsound ー KATAKANA-HIRAGANA PROLONGED SOUND MARK */ ++ { 0x0ea1, 0x3131 }, /* Hangul_Kiyeog ㄱ HANGUL LETTER KIYEOK */ ++ { 0x0ea2, 0x3132 }, /* Hangul_SsangKiyeog ㄲ HANGUL LETTER SSANGKIYEOK */ ++ { 0x0ea3, 0x3133 }, /* Hangul_KiyeogSios ㄳ HANGUL LETTER KIYEOK-SIOS */ ++ { 0x0ea4, 0x3134 }, /* Hangul_Nieun ㄴ HANGUL LETTER NIEUN */ ++ { 0x0ea5, 0x3135 }, /* Hangul_NieunJieuj ㄵ HANGUL LETTER NIEUN-CIEUC */ ++ { 0x0ea6, 0x3136 }, /* Hangul_NieunHieuh ㄶ HANGUL LETTER NIEUN-HIEUH */ ++ { 0x0ea7, 0x3137 }, /* Hangul_Dikeud ㄷ HANGUL LETTER TIKEUT */ ++ { 0x0ea8, 0x3138 }, /* Hangul_SsangDikeud ㄸ HANGUL LETTER SSANGTIKEUT */ ++ { 0x0ea9, 0x3139 }, /* Hangul_Rieul ㄹ HANGUL LETTER RIEUL */ ++ { 0x0eaa, 0x313a }, /* Hangul_RieulKiyeog ㄺ HANGUL LETTER RIEUL-KIYEOK */ ++ { 0x0eab, 0x313b }, /* Hangul_RieulMieum ㄻ HANGUL LETTER RIEUL-MIEUM */ ++ { 0x0eac, 0x313c }, /* Hangul_RieulPieub ㄼ HANGUL LETTER RIEUL-PIEUP */ ++ { 0x0ead, 0x313d }, /* Hangul_RieulSios ㄽ HANGUL LETTER RIEUL-SIOS */ ++ { 0x0eae, 0x313e }, /* Hangul_RieulTieut ㄾ HANGUL LETTER RIEUL-THIEUTH */ ++ { 0x0eaf, 0x313f }, /* Hangul_RieulPhieuf ㄿ HANGUL LETTER RIEUL-PHIEUPH */ ++ { 0x0eb0, 0x3140 }, /* Hangul_RieulHieuh ㅀ HANGUL LETTER RIEUL-HIEUH */ ++ { 0x0eb1, 0x3141 }, /* Hangul_Mieum ㅁ HANGUL LETTER MIEUM */ ++ { 0x0eb2, 0x3142 }, /* Hangul_Pieub ㅂ HANGUL LETTER PIEUP */ ++ { 0x0eb3, 0x3143 }, /* Hangul_SsangPieub ㅃ HANGUL LETTER SSANGPIEUP */ ++ { 0x0eb4, 0x3144 }, /* Hangul_PieubSios ㅄ HANGUL LETTER PIEUP-SIOS */ ++ { 0x0eb5, 0x3145 }, /* Hangul_Sios ㅅ HANGUL LETTER SIOS */ ++ { 0x0eb6, 0x3146 }, /* Hangul_SsangSios ㅆ HANGUL LETTER SSANGSIOS */ ++ { 0x0eb7, 0x3147 }, /* Hangul_Ieung ㅇ HANGUL LETTER IEUNG */ ++ { 0x0eb8, 0x3148 }, /* Hangul_Jieuj ㅈ HANGUL LETTER CIEUC */ ++ { 0x0eb9, 0x3149 }, /* Hangul_SsangJieuj ㅉ HANGUL LETTER SSANGCIEUC */ ++ { 0x0eba, 0x314a }, /* Hangul_Cieuc ㅊ HANGUL LETTER CHIEUCH */ ++ { 0x0ebb, 0x314b }, /* Hangul_Khieuq ㅋ HANGUL LETTER KHIEUKH */ ++ { 0x0ebc, 0x314c }, /* Hangul_Tieut ㅌ HANGUL LETTER THIEUTH */ ++ { 0x0ebd, 0x314d }, /* Hangul_Phieuf ㅍ HANGUL LETTER PHIEUPH */ ++ { 0x0ebe, 0x314e }, /* Hangul_Hieuh ㅎ HANGUL LETTER HIEUH */ ++ { 0x0ebf, 0x314f }, /* Hangul_A ㅏ HANGUL LETTER A */ ++ { 0x0ec0, 0x3150 }, /* Hangul_AE ㅐ HANGUL LETTER AE */ ++ { 0x0ec1, 0x3151 }, /* Hangul_YA ㅑ HANGUL LETTER YA */ ++ { 0x0ec2, 0x3152 }, /* Hangul_YAE ㅒ HANGUL LETTER YAE */ ++ { 0x0ec3, 0x3153 }, /* Hangul_EO ㅓ HANGUL LETTER EO */ ++ { 0x0ec4, 0x3154 }, /* Hangul_E ㅔ HANGUL LETTER E */ ++ { 0x0ec5, 0x3155 }, /* Hangul_YEO ㅕ HANGUL LETTER YEO */ ++ { 0x0ec6, 0x3156 }, /* Hangul_YE ㅖ HANGUL LETTER YE */ ++ { 0x0ec7, 0x3157 }, /* Hangul_O ㅗ HANGUL LETTER O */ ++ { 0x0ec8, 0x3158 }, /* Hangul_WA ㅘ HANGUL LETTER WA */ ++ { 0x0ec9, 0x3159 }, /* Hangul_WAE ㅙ HANGUL LETTER WAE */ ++ { 0x0eca, 0x315a }, /* Hangul_OE ㅚ HANGUL LETTER OE */ ++ { 0x0ecb, 0x315b }, /* Hangul_YO ㅛ HANGUL LETTER YO */ ++ { 0x0ecc, 0x315c }, /* Hangul_U ㅜ HANGUL LETTER U */ ++ { 0x0ecd, 0x315d }, /* Hangul_WEO ㅝ HANGUL LETTER WEO */ ++ { 0x0ece, 0x315e }, /* Hangul_WE ㅞ HANGUL LETTER WE */ ++ { 0x0ecf, 0x315f }, /* Hangul_WI ㅟ HANGUL LETTER WI */ ++ { 0x0ed0, 0x3160 }, /* Hangul_YU ㅠ HANGUL LETTER YU */ ++ { 0x0ed1, 0x3161 }, /* Hangul_EU ㅡ HANGUL LETTER EU */ ++ { 0x0ed2, 0x3162 }, /* Hangul_YI ㅢ HANGUL LETTER YI */ ++ { 0x0ed3, 0x3163 }, /* Hangul_I ㅣ HANGUL LETTER I */ ++ { 0x0eef, 0x316d }, /* Hangul_RieulYeorinHieuh ㅭ HANGUL LETTER RIEUL-YEORINHIEUH */ ++ { 0x0ef0, 0x3171 }, /* Hangul_SunkyeongeumMieum ㅱ HANGUL LETTER KAPYEOUNMIEUM */ ++ { 0x0ef1, 0x3178 }, /* Hangul_SunkyeongeumPieub ㅸ HANGUL LETTER KAPYEOUNPIEUP */ ++ { 0x0ef2, 0x317f }, /* Hangul_PanSios ㅿ HANGUL LETTER PANSIOS */ ++ { 0x0ef4, 0x3184 }, /* Hangul_SunkyeongeumPhieuf ㆄ HANGUL LETTER KAPYEOUNPHIEUPH */ ++ { 0x0ef5, 0x3186 }, /* Hangul_YeorinHieuh ㆆ HANGUL LETTER YEORINHIEUH */ ++ { 0x0ef6, 0x318d }, /* Hangul_AraeA ㆍ HANGUL LETTER ARAEA */ ++ { 0x0ef7, 0x318e }, /* Hangul_AraeAE ㆎ HANGUL LETTER ARAEAE */ ++}; ++ ++#endif // KEYDATA_H +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/keyserver_x11.h b/qtbase/src/plugins/platforminputcontexts/fcitx/keyserver_x11.h +new file mode 100644 +index 0000000..e735210 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/keyserver_x11.h +@@ -0,0 +1,173 @@ ++/* ++ Copyright (C) 2001 Ellis Whitehead ++ ++ Win32 port: ++ Copyright (C) 2004 Jaroslaw Staniek ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public ++ License as published by the Free Software Foundation; either ++ version 2 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 ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public License ++ along with this library; see the file COPYING.LIB. If not, write to ++ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ */ ++ ++#ifndef KEYSERVER_X11_H ++#define KEYSERVER_X11_H ++ ++#include ++ ++struct TransKey { ++ int keySymQt; ++ uint keySymX; ++}; ++ ++static const TransKey g_rgQtToSymX[] = { ++ { Qt::Key_Escape, XK_Escape }, ++ { Qt::Key_Tab, XK_Tab }, ++ { Qt::Key_Backtab, XK_ISO_Left_Tab }, ++ { Qt::Key_Backspace, XK_BackSpace }, ++ { Qt::Key_Return, XK_Return }, ++ { Qt::Key_Enter, XK_KP_Enter }, ++ { Qt::Key_Insert, XK_Insert }, ++ { Qt::Key_Delete, XK_Delete }, ++ { Qt::Key_Pause, XK_Pause }, ++#ifdef sun ++ { Qt::Key_Print, XK_F22 }, ++#else ++ { Qt::Key_Print, XK_Print }, ++#endif ++ { Qt::Key_SysReq, XK_Sys_Req }, ++ { Qt::Key_Home, XK_Home }, ++ { Qt::Key_End, XK_End }, ++ { Qt::Key_Left, XK_Left }, ++ { Qt::Key_Up, XK_Up }, ++ { Qt::Key_Right, XK_Right }, ++ { Qt::Key_Down, XK_Down }, ++ //{ Qt::Key_Shift, 0 }, ++ //{ Qt::Key_Control, 0 }, ++ //{ Qt::Key_Meta, 0 }, ++ //{ Qt::Key_Alt, 0 }, ++ { Qt::Key_CapsLock, XK_Caps_Lock }, ++ { Qt::Key_NumLock, XK_Num_Lock }, ++ { Qt::Key_ScrollLock, XK_Scroll_Lock }, ++ { Qt::Key_F1, XK_F1 }, ++ { Qt::Key_F2, XK_F2 }, ++ { Qt::Key_F3, XK_F3 }, ++ { Qt::Key_F4, XK_F4 }, ++ { Qt::Key_F5, XK_F5 }, ++ { Qt::Key_F6, XK_F6 }, ++ { Qt::Key_F7, XK_F7 }, ++ { Qt::Key_F8, XK_F8 }, ++ { Qt::Key_F9, XK_F9 }, ++ { Qt::Key_F10, XK_F10 }, ++ { Qt::Key_F11, XK_F11 }, ++ { Qt::Key_F12, XK_F12 }, ++ { Qt::Key_F13, XK_F13 }, ++ { Qt::Key_F14, XK_F14 }, ++ { Qt::Key_F15, XK_F15 }, ++ { Qt::Key_F16, XK_F16 }, ++ { Qt::Key_F17, XK_F17 }, ++ { Qt::Key_F18, XK_F18 }, ++ { Qt::Key_F19, XK_F19 }, ++ { Qt::Key_F20, XK_F20 }, ++ { Qt::Key_F21, XK_F21 }, ++ { Qt::Key_F22, XK_F22 }, ++ { Qt::Key_F23, XK_F23 }, ++ { Qt::Key_F24, XK_F24 }, ++ { Qt::Key_F25, XK_F25 }, ++ { Qt::Key_F26, XK_F26 }, ++ { Qt::Key_F27, XK_F27 }, ++ { Qt::Key_F28, XK_F28 }, ++ { Qt::Key_F29, XK_F29 }, ++ { Qt::Key_F30, XK_F30 }, ++ { Qt::Key_F31, XK_F31 }, ++ { Qt::Key_F32, XK_F32 }, ++ { Qt::Key_F33, XK_F33 }, ++ { Qt::Key_F34, XK_F34 }, ++ { Qt::Key_F35, XK_F35 }, ++ { Qt::Key_Super_L, XK_Super_L }, ++ { Qt::Key_Super_R, XK_Super_R }, ++ { Qt::Key_Menu, XK_Menu }, ++ { Qt::Key_Hyper_L, XK_Hyper_L }, ++ { Qt::Key_Hyper_R, XK_Hyper_R }, ++ { Qt::Key_Help, XK_Help }, ++ ++ { '/', XK_KP_Divide }, ++ { '*', XK_KP_Multiply }, ++ { '-', XK_KP_Subtract }, ++ { '+', XK_KP_Add }, ++ { Qt::Key_Return, XK_KP_Enter }, ++ {Qt::Key_Multi_key, XK_Multi_key}, ++ {Qt::Key_Codeinput, XK_Codeinput}, ++ {Qt::Key_SingleCandidate, XK_SingleCandidate}, ++ {Qt::Key_MultipleCandidate, XK_MultipleCandidate}, ++ {Qt::Key_PreviousCandidate, XK_PreviousCandidate}, ++ {Qt::Key_Mode_switch, XK_Mode_switch}, ++ {Qt::Key_Kanji, XK_Kanji}, ++ {Qt::Key_Muhenkan, XK_Muhenkan}, ++ {Qt::Key_Henkan, XK_Henkan}, ++ {Qt::Key_Romaji, XK_Romaji}, ++ {Qt::Key_Hiragana, XK_Hiragana}, ++ {Qt::Key_Katakana, XK_Katakana}, ++ {Qt::Key_Hiragana_Katakana, XK_Hiragana_Katakana}, ++ {Qt::Key_Zenkaku, XK_Zenkaku}, ++ {Qt::Key_Hankaku, XK_Hankaku}, ++ {Qt::Key_Zenkaku_Hankaku, XK_Zenkaku_Hankaku}, ++ {Qt::Key_Touroku, XK_Touroku}, ++ {Qt::Key_Massyo, XK_Massyo}, ++ {Qt::Key_Kana_Lock, XK_Kana_Lock}, ++ {Qt::Key_Kana_Shift, XK_Kana_Shift}, ++ {Qt::Key_Eisu_Shift, XK_Eisu_Shift}, ++ {Qt::Key_Eisu_toggle, XK_Eisu_toggle}, ++ {Qt::Key_Hangul, XK_Hangul}, ++ {Qt::Key_Hangul_Start, XK_Hangul_Start}, ++ {Qt::Key_Hangul_End, XK_Hangul_End}, ++ {Qt::Key_Hangul_Hanja, XK_Hangul_Hanja}, ++ {Qt::Key_Hangul_Jamo, XK_Hangul_Jamo}, ++ {Qt::Key_Hangul_Romaja, XK_Hangul_Romaja}, ++ {Qt::Key_Hangul_Jeonja, XK_Hangul_Jeonja}, ++ {Qt::Key_Hangul_Banja, XK_Hangul_Banja}, ++ {Qt::Key_Hangul_PreHanja, XK_Hangul_PreHanja}, ++ {Qt::Key_Hangul_PostHanja, XK_Hangul_PostHanja}, ++ {Qt::Key_Hangul_Special, XK_Hangul_Special}, ++}; ++ ++#include ++ ++inline int map_sym_to_qt(uint keySym) ++{ ++ if (keySym < 0x1000) { ++ if (keySym >= 'a' && keySym <= 'z') ++ return QChar(keySym).toUpper().unicode(); ++ return keySym; ++ } ++#ifdef Q_WS_WIN ++ if (keySym < 0x3000) ++ return keySym; ++#else ++ if (keySym < 0x3000) ++ return keySym | Qt::UNICODE_ACCEL; ++ ++ for (uint i = 0; i < sizeof(g_rgQtToSymX) / sizeof(TransKey); i++) ++ if (g_rgQtToSymX[i].keySymX == keySym) ++ return g_rgQtToSymX[i].keySymQt; ++#endif ++ return Qt::Key_unknown; ++} ++ ++static bool symToKeyQt(uint keySym, int& keyQt) ++{ ++ keyQt = map_sym_to_qt(keySym); ++ return (keyQt != Qt::Key_unknown); ++} ++ ++#endif +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.cpp b/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.cpp +new file mode 100644 +index 0000000..a4dec94 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.cpp +@@ -0,0 +1,56 @@ ++/*************************************************************************** ++ * Copyright (C) 2012~2013 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 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 General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#include ++#include "keyuni.h" ++#include "keydata.h" ++ ++uint32_t ++FcitxKeySymToUnicode (uint32_t keyval) ++{ ++ int min = 0; ++ int max = sizeof (gdk_keysym_to_unicode_tab) / sizeof(gdk_keysym_to_unicode_tab[0]) - 1; ++ int mid; ++ ++ /* First check for Latin-1 characters (1:1 mapping) */ ++ if ((keyval >= 0x0020 && keyval <= 0x007e) || ++ (keyval >= 0x00a0 && keyval <= 0x00ff)) ++ return keyval; ++ ++ /* Also check for directly encoded 24-bit UCS characters: ++ */ ++ if ((keyval & 0xff000000) == 0x01000000) ++ return keyval & 0x00ffffff; ++ ++ /* binary search in table */ ++ while (max >= min) { ++ mid = (min + max) / 2; ++ if (gdk_keysym_to_unicode_tab[mid].keysym < keyval) ++ min = mid + 1; ++ else if (gdk_keysym_to_unicode_tab[mid].keysym > keyval) ++ max = mid - 1; ++ else { ++ /* found it */ ++ return gdk_keysym_to_unicode_tab[mid].ucs; ++ } ++ } ++ ++ /* No matching Unicode value found */ ++ return 0; ++} +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.h b/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.h +new file mode 100644 +index 0000000..02af14d +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/keyuni.h +@@ -0,0 +1,29 @@ ++/*************************************************************************** ++ * Copyright (C) 2012~2013 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 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 General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#ifndef KEYUNI_H ++#define KEYUNI_H ++ ++#include ++ ++quint32 ++FcitxKeySymToUnicode (quint32 keyval); ++ ++ ++#endif // KEYUNI_H +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/main.cpp b/qtbase/src/plugins/platforminputcontexts/fcitx/main.cpp +new file mode 100644 +index 0000000..d522818 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/main.cpp +@@ -0,0 +1,35 @@ ++/*************************************************************************** ++ * Copyright (C) 2012~2013 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 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 General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#include "main.h" ++ ++ ++QStringList QFcitxPlatformInputContextPlugin::keys() const ++{ ++ return QStringList(QStringLiteral("fcitx")); ++ ++} ++ ++QFcitxPlatformInputContext *QFcitxPlatformInputContextPlugin::create(const QString& system, const QStringList& paramList) ++{ ++ Q_UNUSED(paramList); ++ if (system.compare(system, QStringLiteral("fcitx"), Qt::CaseInsensitive) == 0) ++ return new QFcitxPlatformInputContext; ++ return 0; ++} +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/main.h b/qtbase/src/plugins/platforminputcontexts/fcitx/main.h +new file mode 100644 +index 0000000..9938da1 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/main.h +@@ -0,0 +1,37 @@ ++/*************************************************************************** ++ * Copyright (C) 2012~2013 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 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 General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#ifndef MAIN_H ++#define MAIN_H ++ ++#include ++#include ++ ++#include "qfcitxplatforminputcontext.h" ++ ++class QFcitxPlatformInputContextPlugin : public QPlatformInputContextPlugin ++{ ++ Q_OBJECT ++public: ++ Q_PLUGIN_METADATA(IID QPlatformInputContextFactoryInterface_iid FILE "fcitx.json") ++ QStringList keys() const; ++ QFcitxPlatformInputContext *create(const QString& system, const QStringList& paramList); ++}; ++ ++#endif // MAIN_H +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.cpp b/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.cpp +new file mode 100644 +index 0000000..adbf1bd +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.cpp +@@ -0,0 +1,770 @@ ++/*************************************************************************** ++ * Copyright (C) 2011~2013 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 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 General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#include "keyserver_x11.h" ++ ++#include "qfcitxplatforminputcontext.h" ++#include "fcitxqtinputcontextproxy.h" ++#include "fcitxqtinputmethodproxy.h" ++#include "fcitxqtconnection.h" ++#include "keyuni.h" ++#include "utils.h" ++ ++static bool key_filtered = false; ++ ++static bool ++get_boolean_env(const char *name, ++ bool defval) ++{ ++ const char *value = getenv(name); ++ ++ if (value == NULL) ++ return defval; ++ ++ if (strcmp(value, "") == 0 || ++ strcmp(value, "0") == 0 || ++ strcmp(value, "false") == 0 || ++ strcmp(value, "False") == 0 || ++ strcmp(value, "FALSE") == 0) ++ return false; ++ ++ return true; ++} ++ ++static inline const char* ++get_locale() ++{ ++ const char* locale = getenv("LC_ALL"); ++ if (!locale) ++ locale = getenv("LC_CTYPE"); ++ if (!locale) ++ locale = getenv("LANG"); ++ if (!locale) ++ locale = "C"; ++ ++ return locale; ++} ++ ++struct xkb_context* _xkb_context_new_helper() ++{ ++ struct xkb_context* context = xkb_context_new(XKB_CONTEXT_NO_FLAGS); ++ if (context) { ++ xkb_context_set_log_level(context, XKB_LOG_LEVEL_CRITICAL); ++ } ++ ++ return context; ++} ++ ++QFcitxPlatformInputContext::QFcitxPlatformInputContext() : ++ m_connection(new FcitxQtConnection(this)), ++ m_improxy(0), ++ m_n_compose(0), ++ m_cursorPos(0), ++ m_useSurroundingText(false), ++ m_syncMode(true), ++ m_lastWId(0), ++ m_destroy(false), ++ m_xkbContext(_xkb_context_new_helper()), ++ m_xkbComposeTable(m_xkbContext ? xkb_compose_table_new_from_locale(m_xkbContext.data(), get_locale(), XKB_COMPOSE_COMPILE_NO_FLAGS) : 0), ++ m_xkbComposeState(m_xkbComposeTable ? xkb_compose_state_new(m_xkbComposeTable.data(), XKB_COMPOSE_STATE_NO_FLAGS) : 0) ++{ ++ FcitxQtFormattedPreedit::registerMetaType(); ++ ++ memset(m_compose_buffer, 0, sizeof(uint) * (MAX_COMPOSE_LEN + 1)); ++ connect(m_connection, SIGNAL(connected()), this, SLOT(connected())); ++ connect(m_connection, SIGNAL(disconnected()), this, SLOT(cleanUp())); ++ ++ m_connection->startConnection(); ++} ++ ++QFcitxPlatformInputContext::~QFcitxPlatformInputContext() ++{ ++ m_destroy = true; ++ cleanUp(); ++} ++ ++void QFcitxPlatformInputContext::connected() ++{ ++ if (!m_connection->isConnected()) ++ return; ++ ++ // qDebug() << "create Input Context" << m_connection->name(); ++ if (m_improxy) { ++ delete m_improxy; ++ m_improxy = 0; ++ } ++ m_improxy = new FcitxQtInputMethodProxy(m_connection->serviceName(), QLatin1String("/inputmethod"), *m_connection->connection(), this); ++ ++ QWindow* w = qApp->focusWindow(); ++ if (w) ++ createICData(w); ++} ++ ++void QFcitxPlatformInputContext::cleanUp() ++{ ++ for(QHash::const_iterator i = m_icMap.constBegin(), ++ e = m_icMap.constEnd(); i != e; ++i) { ++ FcitxQtICData* data = i.value(); ++ ++ if (data->proxy) ++ delete data->proxy; ++ } ++ ++ m_icMap.clear(); ++ ++ if (m_improxy) { ++ delete m_improxy; ++ m_improxy = 0; ++ } ++ ++ if (!m_destroy) { ++ commitPreedit(); ++ } ++} ++ ++bool QFcitxPlatformInputContext::isValid() const ++{ ++ return true; ++} ++ ++void QFcitxPlatformInputContext::invokeAction(QInputMethod::Action action, int cursorPosition) ++{ ++ if (action == QInputMethod::Click ++ && (cursorPosition <= 0 || cursorPosition >= m_preedit.length()) ++ ) ++ { ++ // qDebug() << action << cursorPosition; ++ commitPreedit(); ++ } ++} ++ ++void QFcitxPlatformInputContext::commitPreedit() ++{ ++ QObject *input = qApp->focusObject(); ++ if (!input) ++ return; ++ if (m_commitPreedit.length() <= 0) ++ return; ++ QInputMethodEvent e; ++ e.setCommitString(m_commitPreedit); ++ QCoreApplication::sendEvent(input, &e); ++ m_commitPreedit.clear(); ++} ++ ++ ++void QFcitxPlatformInputContext::reset() ++{ ++ commitPreedit(); ++ FcitxQtInputContextProxy* proxy = validIC(); ++ if (proxy) ++ proxy->Reset(); ++ if (m_xkbComposeState) { ++ xkb_compose_state_reset(m_xkbComposeState.data()); ++ } ++ QPlatformInputContext::reset(); ++} ++ ++void QFcitxPlatformInputContext::update(Qt::InputMethodQueries queries ) ++{ ++ QWindow* window = qApp->focusWindow(); ++ FcitxQtInputContextProxy* proxy = validICByWindow(window); ++ if (!proxy) ++ return; ++ ++ FcitxQtICData* data = m_icMap.value(window->winId()); ++ ++ QInputMethod *method = qApp->inputMethod(); ++ QObject *input = qApp->focusObject(); ++ if (!input) ++ return; ++ ++ QInputMethodQueryEvent query(queries); ++ QGuiApplication::sendEvent(input, &query); ++ ++ if (queries & Qt::ImCursorRectangle) { ++ cursorRectChanged(); ++ } ++ ++ if (queries & Qt::ImHints) { ++ Qt::InputMethodHints hints = Qt::InputMethodHints(query.value(Qt::ImHints).toUInt()); ++ ++ ++#define CHECK_HINTS(_HINTS, _CAPACITY) \ ++ if (hints & _HINTS) \ ++ addCapacity(data, _CAPACITY); \ ++ else \ ++ removeCapacity(data, _CAPACITY); ++ ++ CHECK_HINTS(Qt::ImhNoAutoUppercase, CAPACITY_NOAUTOUPPERCASE) ++ CHECK_HINTS(Qt::ImhPreferNumbers, CAPACITY_NUMBER) ++ CHECK_HINTS(Qt::ImhPreferUppercase, CAPACITY_UPPERCASE) ++ CHECK_HINTS(Qt::ImhPreferLowercase, CAPACITY_LOWERCASE) ++ CHECK_HINTS(Qt::ImhNoPredictiveText, CAPACITY_NO_SPELLCHECK) ++ CHECK_HINTS(Qt::ImhDigitsOnly, CAPACITY_DIGIT) ++ CHECK_HINTS(Qt::ImhFormattedNumbersOnly, CAPACITY_NUMBER) ++ CHECK_HINTS(Qt::ImhUppercaseOnly, CAPACITY_UPPERCASE) ++ CHECK_HINTS(Qt::ImhLowercaseOnly, CAPACITY_LOWERCASE) ++ CHECK_HINTS(Qt::ImhDialableCharactersOnly, CAPACITY_DIALABLE) ++ CHECK_HINTS(Qt::ImhEmailCharactersOnly, CAPACITY_EMAIL) ++ } ++ ++ bool setSurrounding = false; ++ do { ++ if (!m_useSurroundingText) ++ break; ++ if (!((queries & Qt::ImSurroundingText) && (queries & Qt::ImCursorPosition))) ++ break; ++ if (data->capacity.testFlag(CAPACITY_PASSWORD)) ++ break; ++ QVariant var = query.value(Qt::ImSurroundingText); ++ QVariant var1 = query.value(Qt::ImCursorPosition); ++ QVariant var2 = query.value(Qt::ImAnchorPosition); ++ if (!var.isValid() || !var1.isValid()) ++ break; ++ QString text = var.toString(); ++ /* we don't want to waste too much memory here */ ++#define SURROUNDING_THRESHOLD 4096 ++ if (text.length() < SURROUNDING_THRESHOLD) { ++ if (_utf8_check_string(text.toUtf8().data())) { ++ addCapacity(data, CAPACITY_SURROUNDING_TEXT); ++ ++ int cursor = var1.toInt(); ++ int anchor; ++ if (var2.isValid()) ++ anchor = var2.toInt(); ++ else ++ anchor = cursor; ++ if (data->surroundingText != text) { ++ data->surroundingText = text; ++ proxy->SetSurroundingText(text, cursor, anchor); ++ } ++ else { ++ if (data->surroundingAnchor != anchor || ++ data->surroundingCursor != cursor) ++ proxy->SetSurroundingTextPosition(cursor, anchor); ++ } ++ data->surroundingCursor = cursor; ++ data->surroundingAnchor = anchor; ++ setSurrounding = true; ++ } ++ } ++ if (!setSurrounding) { ++ data->surroundingAnchor = -1; ++ data->surroundingCursor = -1; ++ data->surroundingText = QString::null; ++ removeCapacity(data, CAPACITY_SURROUNDING_TEXT); ++ } ++ } while(0); ++} ++ ++void QFcitxPlatformInputContext::commit() ++{ ++ QPlatformInputContext::commit(); ++} ++ ++void QFcitxPlatformInputContext::setFocusObject(QObject* object) ++{ ++ FcitxQtInputContextProxy* proxy = validICByWId(m_lastWId); ++ if (proxy) { ++ proxy->FocusOut(); ++ } ++ ++ QWindow *window = qApp->focusWindow(); ++ if (window) { ++ m_lastWId = window->winId(); ++ } else { ++ m_lastWId = 0; ++ return; ++ } ++ proxy = validICByWindow(window); ++ if (proxy) ++ proxy->FocusIn(); ++ else { ++ FcitxQtICData* data = m_icMap.value(window->winId()); ++ if (!data) { ++ createICData(window); ++ return; ++ } ++ } ++} ++ ++void QFcitxPlatformInputContext::windowDestroyed(QObject* object) ++{ ++ /* access QWindow is not possible here, so we use our own map to do so */ ++ WId wid = m_windowToWidMap.take(object); ++ if (!wid) ++ return; ++ FcitxQtICData* data = m_icMap.take(wid); ++ if (!data) ++ return; ++ ++ delete data; ++ // qDebug() << "Window Destroyed and we destroy IC correctly, horray!"; ++} ++ ++void QFcitxPlatformInputContext::cursorRectChanged() ++{ ++ QWindow *inputWindow = qApp->focusWindow(); ++ if (!inputWindow) ++ return; ++ FcitxQtInputContextProxy* proxy = validICByWindow(inputWindow); ++ if (!proxy) ++ return; ++ ++ FcitxQtICData* data = m_icMap.value(inputWindow->winId()); ++ ++ QRect r = qApp->inputMethod()->cursorRectangle().toRect(); ++ if(!r.isValid()) ++ return; ++ ++ r.moveTopLeft(inputWindow->mapToGlobal(r.topLeft())); ++ ++ qreal scale = inputWindow->devicePixelRatio(); ++ if (data->rect != r) { ++ data->rect = r; ++ proxy->SetCursorRect(r.x() * scale, r.y() * scale, ++ r.width() * scale, r.height() * scale); ++ } ++} ++ ++void QFcitxPlatformInputContext::createInputContext(WId w) ++{ ++ if (!m_connection->isConnected()) ++ return; ++ ++ // qDebug() << "create Input Context" << m_connection->connection()->name(); ++ ++ if (m_improxy) { ++ delete m_improxy; ++ m_improxy = NULL; ++ } ++ m_improxy = new FcitxQtInputMethodProxy(m_connection->serviceName(), QLatin1String("/inputmethod"), *m_connection->connection(), this); ++ ++ if (!m_improxy->isValid()) ++ return; ++ ++ QFileInfo info(QCoreApplication::applicationFilePath()); ++ QDBusPendingReply< int, bool, uint, uint, uint, uint > result = m_improxy->CreateICv3(info.fileName(), QCoreApplication::applicationPid()); ++ QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(result); ++ watcher->setProperty("wid", (qulonglong) w); ++ connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), this, SLOT(createInputContextFinished(QDBusPendingCallWatcher*))); ++} ++ ++void QFcitxPlatformInputContext::createInputContextFinished(QDBusPendingCallWatcher* watcher) ++{ ++ WId w = watcher->property("wid").toULongLong(); ++ FcitxQtICData* data = m_icMap.value(w); ++ if (!data) ++ return; ++ ++ QDBusPendingReply< int, bool, uint, uint, uint, uint > result = *watcher; ++ ++ do { ++ if (result.isError()) { ++ break; ++ } ++ ++ if (!m_connection->isConnected()) ++ break; ++ ++ int id = qdbus_cast(result.argumentAt(0)); ++ QString path = QString("/inputcontext_%1").arg(id); ++ if (data->proxy) { ++ delete data->proxy; ++ } ++ data->proxy = new FcitxQtInputContextProxy(m_connection->serviceName(), path, *m_connection->connection(), this); ++ connect(data->proxy, SIGNAL(CommitString(QString)), this, SLOT(commitString(QString))); ++ connect(data->proxy, SIGNAL(ForwardKey(uint, uint, int)), this, SLOT(forwardKey(uint, uint, int))); ++ connect(data->proxy, SIGNAL(UpdateFormattedPreedit(FcitxQtFormattedPreeditList,int)), this, SLOT(updateFormattedPreedit(FcitxQtFormattedPreeditList,int))); ++ connect(data->proxy, SIGNAL(DeleteSurroundingText(int,uint)), this, SLOT(deleteSurroundingText(int,uint))); ++ ++ if (data->proxy->isValid()) { ++ QWindow* window = qApp->focusWindow(); ++ if (window && window->winId() == w) ++ data->proxy->FocusIn(); ++ } ++ ++ QFlags flag; ++ flag |= CAPACITY_PREEDIT; ++ flag |= CAPACITY_FORMATTED_PREEDIT; ++ flag |= CAPACITY_CLIENT_UNFOCUS_COMMIT; ++ m_useSurroundingText = get_boolean_env("FCITX_QT_ENABLE_SURROUNDING_TEXT", true); ++ if (m_useSurroundingText) ++ flag |= CAPACITY_SURROUNDING_TEXT; ++ ++ /* ++ * event loop will cause some problem, so we tries to use async way. ++ */ ++ m_syncMode = get_boolean_env("FCITX_QT_USE_SYNC", false); ++ ++ addCapacity(data, flag, true); ++ } while(0); ++ delete watcher; ++} ++ ++void QFcitxPlatformInputContext::updateCapacity(FcitxQtICData* data) ++{ ++ if (!data->proxy || !data->proxy->isValid()) ++ return; ++ ++ QDBusPendingReply< void > result = data->proxy->SetCapacity((uint) data->capacity); ++} ++ ++void QFcitxPlatformInputContext::commitString(const QString& str) ++{ ++ m_cursorPos = 0; ++ m_preeditList.clear(); ++ m_commitPreedit.clear(); ++ QObject *input = qApp->focusObject(); ++ if (!input) ++ return; ++ ++ QInputMethodEvent event; ++ event.setCommitString(str); ++ QCoreApplication::sendEvent(input, &event); ++} ++ ++void QFcitxPlatformInputContext::updateFormattedPreedit(const FcitxQtFormattedPreeditList& preeditList, int cursorPos) ++{ ++ QObject *input = qApp->focusObject(); ++ if (!input) ++ return; ++ if (cursorPos == m_cursorPos && preeditList == m_preeditList) ++ return; ++ m_preeditList = preeditList; ++ m_cursorPos = cursorPos; ++ QString str, commitStr; ++ int pos = 0; ++ QList attrList; ++ Q_FOREACH(const FcitxQtFormattedPreedit& preedit, preeditList) ++ { ++ str += preedit.string(); ++ if (!(preedit.format() & MSG_DONOT_COMMIT_WHEN_UNFOCUS)) ++ commitStr += preedit.string(); ++ QTextCharFormat format; ++ if ((preedit.format() & MSG_NOUNDERLINE) == 0) { ++ format.setUnderlineStyle(QTextCharFormat::DashUnderline); ++ } ++ if (preedit.format() & MSG_HIGHLIGHT) { ++ QBrush brush; ++ QPalette palette; ++ palette = QGuiApplication::palette(); ++ format.setBackground(QBrush(QColor(palette.color(QPalette::Active, QPalette::Highlight)))); ++ format.setForeground(QBrush(QColor(palette.color(QPalette::Active, QPalette::HighlightedText)))); ++ } ++ attrList.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, pos, preedit.string().length(), format)); ++ pos += preedit.string().length(); ++ } ++ ++ QByteArray array = str.toUtf8(); ++ array.truncate(cursorPos); ++ cursorPos = QString::fromUtf8(array).length(); ++ ++ attrList.append(QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, cursorPos, 1, 0)); ++ m_preedit = str; ++ m_commitPreedit = commitStr; ++ QInputMethodEvent event(str, attrList); ++ QCoreApplication::sendEvent(input, &event); ++ update(Qt::ImCursorRectangle); ++} ++ ++void QFcitxPlatformInputContext::deleteSurroundingText(int offset, uint nchar) ++{ ++ QObject *input = qApp->focusObject(); ++ if (!input) ++ return; ++ ++ QInputMethodEvent event; ++ event.setCommitString("", offset, nchar); ++ QCoreApplication::sendEvent(input, &event); ++} ++ ++void QFcitxPlatformInputContext::forwardKey(uint keyval, uint state, int type) ++{ ++ QObject *input = qApp->focusObject(); ++ if (input != NULL) { ++ key_filtered = true; ++ QKeyEvent *keyevent = createKeyEvent(keyval, state, type); ++ QCoreApplication::sendEvent(input, keyevent); ++ delete keyevent; ++ key_filtered = false; ++ } ++} ++ ++void QFcitxPlatformInputContext::createICData(QWindow* w) ++{ ++ FcitxQtICData* data = m_icMap.value(w->winId()); ++ if (!data) { ++ data = new FcitxQtICData; ++ m_icMap[w->winId()] = data; ++ m_windowToWidMap[w] = w->winId(); ++ connect(w, SIGNAL(destroyed(QObject*)), this, SLOT(windowDestroyed(QObject*))); ++ } ++ createInputContext(w->winId()); ++} ++ ++QKeyEvent* QFcitxPlatformInputContext::createKeyEvent(uint keyval, uint state, int type) ++{ ++ Qt::KeyboardModifiers qstate = Qt::NoModifier; ++ ++ int count = 1; ++ if (state & FcitxKeyState_Alt) { ++ qstate |= Qt::AltModifier; ++ count ++; ++ } ++ ++ if (state & FcitxKeyState_Shift) { ++ qstate |= Qt::ShiftModifier; ++ count ++; ++ } ++ ++ if (state & FcitxKeyState_Ctrl) { ++ qstate |= Qt::ControlModifier; ++ count ++; ++ } ++ ++ int key; ++ symToKeyQt(keyval, key); ++ ++ QKeyEvent* keyevent = new QKeyEvent( ++ (type == FCITX_PRESS_KEY) ? (QEvent::KeyPress) : (QEvent::KeyRelease), ++ key, ++ qstate, ++ QString(), ++ false, ++ count ++ ); ++ ++ return keyevent; ++} ++ ++bool QFcitxPlatformInputContext::filterEvent(const QEvent* event) ++{ ++ do { ++ if (event->type() != QEvent::KeyPress && event->type() != QEvent::KeyRelease) { ++ break; ++ } ++ ++ const QKeyEvent* keyEvent = static_cast(event); ++ quint32 keyval = keyEvent->nativeVirtualKey(); ++ quint32 keycode = keyEvent->nativeScanCode(); ++ quint32 state = keyEvent->nativeModifiers(); ++ bool press = keyEvent->type() == QEvent::KeyPress; ++ ++ if (key_filtered) { ++ break; ++ } ++ ++ if (!inputMethodAccepted()) ++ break; ++ ++ QObject *input = qApp->focusObject(); ++ ++ if (!input) { ++ break; ++ } ++ ++ FcitxQtInputContextProxy* proxy = validICByWindow(qApp->focusWindow()); ++ ++ if (!proxy) { ++ if (filterEventFallback(keyval, keycode, state, press)) { ++ return true; ++ } else { ++ break; ++ } ++ } ++ ++ proxy->FocusIn(); ++ ++ QDBusPendingReply< int > reply = proxy->ProcessKeyEvent(keyval, ++ keycode, ++ state, ++ (press) ? FCITX_PRESS_KEY : FCITX_RELEASE_KEY, ++ QDateTime::currentDateTime().toTime_t()); ++ ++ ++ if (Q_UNLIKELY(m_syncMode)) { ++ reply.waitForFinished(); ++ ++ if (!m_connection->isConnected() || !reply.isFinished() || reply.isError() || reply.value() <= 0) { ++ if (filterEventFallback(keyval, keycode, state, press)) { ++ return true; ++ } else { ++ break; ++ } ++ } else { ++ update(Qt::ImCursorRectangle); ++ return true; ++ } ++ } ++ else { ++ ProcessKeyWatcher* watcher = new ProcessKeyWatcher(*keyEvent, qApp->focusWindow(), reply, this); ++ connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), ++ this, SLOT(processKeyEventFinished(QDBusPendingCallWatcher*))); ++ return true; ++ } ++ } while(0); ++ return QPlatformInputContext::filterEvent(event); ++} ++ ++void QFcitxPlatformInputContext::processKeyEventFinished(QDBusPendingCallWatcher* w) ++{ ++ ProcessKeyWatcher* watcher = static_cast(w); ++ QDBusPendingReply< int > result(*watcher); ++ bool filtered = false; ++ ++ QWindow* window = watcher->window(); ++ // if window is already destroyed, we can only throw this event away. ++ if (!window) { ++ return; ++ } ++ ++ const QKeyEvent& keyEvent = watcher->event(); ++ ++ // use same variable name as in QXcbKeyboard::handleKeyEvent ++ QEvent::Type type = keyEvent.type(); ++ int qtcode = keyEvent.key(); ++ Qt::KeyboardModifiers modifiers = keyEvent.modifiers(); ++ quint32 code = keyEvent.nativeScanCode(); ++ quint32 sym = keyEvent.nativeVirtualKey(); ++ quint32 state = keyEvent.nativeModifiers(); ++ QString string = keyEvent.text(); ++ bool isAutoRepeat = keyEvent.isAutoRepeat(); ++ ulong time = keyEvent.timestamp(); ++ ++ if (result.isError() || result.value() <= 0) { ++ filtered = filterEventFallback(sym, code, state, type == QEvent::KeyPress); ++ } else { ++ filtered = true; ++ } ++ ++ if (!result.isError()) { ++ update(Qt::ImCursorRectangle); ++ } ++ ++ if (!filtered) { ++ // copied from QXcbKeyboard::handleKeyEvent() ++ if (type == QEvent::KeyPress && qtcode == Qt::Key_Menu) { ++ const QPoint globalPos = window->screen()->handle()->cursor()->pos(); ++ const QPoint pos = window->mapFromGlobal(globalPos); QWindowSystemInterface::handleContextMenuEvent(window, false, pos, globalPos, modifiers); ++ } ++ QWindowSystemInterface::handleExtendedKeyEvent(window, time, type, qtcode, modifiers, ++ code, sym, state, string, isAutoRepeat); ++ } ++ ++ delete watcher; ++} ++ ++ ++bool QFcitxPlatformInputContext::filterEventFallback(uint keyval, uint keycode, uint state, bool press) ++{ ++ Q_UNUSED(keycode); ++ if (processCompose(keyval, state, (press) ? FCITX_PRESS_KEY : FCITX_RELEASE_KEY)) { ++ return true; ++ } ++ return false; ++} ++ ++FcitxQtInputContextProxy* QFcitxPlatformInputContext::validIC() ++{ ++ if (m_icMap.isEmpty()) { ++ return 0; ++ } ++ QWindow* window = qApp->focusWindow(); ++ return validICByWindow(window); ++} ++ ++FcitxQtInputContextProxy* QFcitxPlatformInputContext::validICByWId(WId wid) ++{ ++ if (m_icMap.isEmpty()) { ++ return 0; ++ } ++ FcitxQtICData* icData = m_icMap.value(wid); ++ if (!icData) ++ return 0; ++ if (icData->proxy.isNull()) { ++ return 0; ++ } else if (icData->proxy->isValid()) { ++ return icData->proxy.data(); ++ } ++ return 0; ++} ++ ++FcitxQtInputContextProxy* QFcitxPlatformInputContext::validICByWindow(QWindow* w) ++{ ++ if (!w) { ++ return 0; ++ } ++ ++ if (m_icMap.isEmpty()) { ++ return 0; ++ } ++ return validICByWId(w->winId()); ++} ++ ++ ++bool QFcitxPlatformInputContext::processCompose(uint keyval, uint state, FcitxKeyEventType event) ++{ ++ Q_UNUSED(state); ++ ++ if (!m_xkbComposeTable || event == FCITX_RELEASE_KEY) ++ return false; ++ ++ struct xkb_compose_state* xkbComposeState = m_xkbComposeState.data(); ++ ++ enum xkb_compose_feed_result result = xkb_compose_state_feed(xkbComposeState, keyval); ++ if (result == XKB_COMPOSE_FEED_IGNORED) { ++ return false; ++ } ++ ++ enum xkb_compose_status status = xkb_compose_state_get_status(xkbComposeState); ++ if (status == XKB_COMPOSE_NOTHING) { ++ return 0; ++ } else if (status == XKB_COMPOSE_COMPOSED) { ++ char buffer[] = {'\0', '\0', '\0', '\0', '\0', '\0', '\0'}; ++ int length = xkb_compose_state_get_utf8(xkbComposeState, buffer, sizeof(buffer)); ++ xkb_compose_state_reset(xkbComposeState); ++ if (length != 0) { ++ commitString(QString::fromUtf8(buffer)); ++ } ++ ++ } else if (status == XKB_COMPOSE_CANCELLED) { ++ xkb_compose_state_reset(xkbComposeState); ++ } ++ ++ return true; ++} ++ ++ ++// kate: indent-mode cstyle; space-indent on; indent-width 0; +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.h b/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.h +new file mode 100644 +index 0000000..1371278 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/qfcitxplatforminputcontext.h +@@ -0,0 +1,269 @@ ++/*************************************************************************** ++ * Copyright (C) 2012~2013 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 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 General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#ifndef QFCITXPLATFORMINPUTCONTEXT_H ++#define QFCITXPLATFORMINPUTCONTEXT_H ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "fcitxqtformattedpreedit.h" ++#include "fcitxqtinputcontextproxy.h" ++ ++#define MAX_COMPOSE_LEN 7 ++ ++class FcitxQtConnection; ++class QFileSystemWatcher; ++enum FcitxKeyEventType { ++ FCITX_PRESS_KEY, ++ FCITX_RELEASE_KEY ++}; ++ ++enum FcitxCapacityFlags { ++ CAPACITY_NONE = 0, ++ CAPACITY_CLIENT_SIDE_UI = (1 << 0), ++ CAPACITY_PREEDIT = (1 << 1), ++ CAPACITY_CLIENT_SIDE_CONTROL_STATE = (1 << 2), ++ CAPACITY_PASSWORD = (1 << 3), ++ CAPACITY_FORMATTED_PREEDIT = (1 << 4), ++ CAPACITY_CLIENT_UNFOCUS_COMMIT = (1 << 5), ++ CAPACITY_SURROUNDING_TEXT = (1 << 6), ++ CAPACITY_EMAIL = (1 << 7), ++ CAPACITY_DIGIT = (1 << 8), ++ CAPACITY_UPPERCASE = (1 << 9), ++ CAPACITY_LOWERCASE = (1 << 10), ++ CAPACITY_NOAUTOUPPERCASE = (1 << 11), ++ CAPACITY_URL = (1 << 12), ++ CAPACITY_DIALABLE = (1 << 13), ++ CAPACITY_NUMBER = (1 << 14), ++ CAPACITY_NO_ON_SCREEN_KEYBOARD = (1 << 15), ++ CAPACITY_SPELLCHECK = (1 << 16), ++ CAPACITY_NO_SPELLCHECK = (1 << 17), ++ CAPACITY_WORD_COMPLETION = (1 << 18), ++ CAPACITY_UPPERCASE_WORDS = (1 << 19), ++ CAPACITY_UPPERCASE_SENTENCES = (1 << 20), ++ CAPACITY_ALPHA = (1 << 21), ++ CAPACITY_NAME = (1 << 22) ++} ; ++ ++/** message type and flags */ ++enum FcitxMessageType { ++ MSG_TYPE_FIRST = 0, ++ MSG_TYPE_LAST = 6, ++ MSG_TIPS = 0, /**< Hint Text */ ++ MSG_INPUT = 1, /**< User Input */ ++ MSG_INDEX = 2, /**< Index Number */ ++ MSG_FIRSTCAND = 3, /**< First candidate */ ++ MSG_USERPHR = 4, /**< User Phrase */ ++ MSG_CODE = 5, /**< Typed character */ ++ MSG_OTHER = 6, /**< Other Text */ ++ MSG_NOUNDERLINE = (1 << 3), /**< backward compatible, no underline is a flag */ ++ MSG_HIGHLIGHT = (1 << 4), /**< highlight the preedit */ ++ MSG_DONOT_COMMIT_WHEN_UNFOCUS = (1 << 5), /**< backward compatible */ ++ MSG_REGULAR_MASK = 0x7 /**< regular color type mask */ ++}; ++ ++ ++enum FcitxKeyState { ++ FcitxKeyState_None = 0, ++ FcitxKeyState_Shift = 1 << 0, ++ FcitxKeyState_CapsLock = 1 << 1, ++ FcitxKeyState_Ctrl = 1 << 2, ++ FcitxKeyState_Alt = 1 << 3, ++ FcitxKeyState_Alt_Shift = FcitxKeyState_Alt | FcitxKeyState_Shift, ++ FcitxKeyState_Ctrl_Shift = FcitxKeyState_Ctrl | FcitxKeyState_Shift, ++ FcitxKeyState_Ctrl_Alt = FcitxKeyState_Ctrl | FcitxKeyState_Alt, ++ FcitxKeyState_Ctrl_Alt_Shift = FcitxKeyState_Ctrl | FcitxKeyState_Alt | FcitxKeyState_Shift, ++ FcitxKeyState_NumLock = 1 << 4, ++ FcitxKeyState_Super = 1 << 6, ++ FcitxKeyState_ScrollLock = 1 << 7, ++ FcitxKeyState_MousePressed = 1 << 8, ++ FcitxKeyState_HandledMask = 1 << 24, ++ FcitxKeyState_IgnoredMask = 1 << 25, ++ FcitxKeyState_Super2 = 1 << 26, ++ FcitxKeyState_Hyper = 1 << 27, ++ FcitxKeyState_Meta = 1 << 28, ++ FcitxKeyState_UsedMask = 0x5c001fff ++}; ++ ++struct FcitxQtICData { ++ FcitxQtICData() : capacity(0), proxy(0), surroundingAnchor(-1), surroundingCursor(-1) {} ++ ~FcitxQtICData() { ++ if (proxy && proxy->isValid()) { ++ proxy->DestroyIC(); ++ delete proxy; ++ } ++ } ++ QFlags capacity; ++ QPointer proxy; ++ QRect rect; ++ QString surroundingText; ++ int surroundingAnchor; ++ int surroundingCursor; ++}; ++ ++ ++class ProcessKeyWatcher : public QDBusPendingCallWatcher ++{ ++ Q_OBJECT ++public: ++ ProcessKeyWatcher(const QKeyEvent& event, QWindow* window, const QDBusPendingCall &call, QObject *parent = 0) : ++ QDBusPendingCallWatcher(call, parent) ++ ,m_event(event.type(), event.key(), event.modifiers(), ++ event.nativeScanCode(), event.nativeVirtualKey(), event.nativeModifiers(), ++ event.text(), event.isAutoRepeat(), event.count()) ++ ,m_window(window) ++ { ++ } ++ ++ virtual ~ProcessKeyWatcher() { ++ } ++ ++ const QKeyEvent& event() { ++ return m_event; ++ } ++ ++ QWindow* window() { ++ return m_window.data(); ++ } ++ ++private: ++ QKeyEvent m_event; ++ QPointer m_window; ++}; ++ ++struct XkbContextDeleter ++{ ++ static inline void cleanup(struct xkb_context* pointer) ++ { ++ if (pointer) xkb_context_unref(pointer); ++ } ++}; ++ ++struct XkbComposeTableDeleter ++{ ++ static inline void cleanup(struct xkb_compose_table* pointer) ++ { ++ if (pointer) xkb_compose_table_unref(pointer); ++ } ++}; ++ ++struct XkbComposeStateDeleter ++{ ++ static inline void cleanup(struct xkb_compose_state* pointer) ++ { ++ if (pointer) xkb_compose_state_unref(pointer); ++ } ++}; ++ ++class FcitxQtInputMethodProxy; ++ ++class QFcitxPlatformInputContext : public QPlatformInputContext ++{ ++ Q_OBJECT ++public: ++ QFcitxPlatformInputContext(); ++ virtual ~QFcitxPlatformInputContext(); ++ ++ virtual bool filterEvent(const QEvent* event); ++ virtual bool isValid() const; ++ virtual void invokeAction(QInputMethod::Action , int cursorPosition); ++ virtual void reset(); ++ virtual void commit(); ++ virtual void update(Qt::InputMethodQueries quries ); ++ virtual void setFocusObject(QObject* object); ++ ++ ++public Q_SLOTS: ++ void cursorRectChanged(); ++ void commitString(const QString& str); ++ void updateFormattedPreedit(const FcitxQtFormattedPreeditList& preeditList, int cursorPos); ++ void deleteSurroundingText(int offset, uint nchar); ++ void forwardKey(uint keyval, uint state, int type); ++ void createInputContextFinished(QDBusPendingCallWatcher* watcher); ++ void connected(); ++ void cleanUp(); ++ void windowDestroyed(QObject* object); ++ ++ ++private: ++ void createInputContext(WId w); ++ bool processCompose(uint keyval, uint state, FcitxKeyEventType event); ++ bool checkAlgorithmically(); ++ bool checkCompactTable(const struct _FcitxComposeTableCompact *table); ++ QKeyEvent* createKeyEvent(uint keyval, uint state, int type); ++ ++ ++ void addCapacity(FcitxQtICData* data, QFlags capacity, bool forceUpdate = false) ++ { ++ QFlags< FcitxCapacityFlags > newcaps = data->capacity | capacity; ++ if (data->capacity != newcaps || forceUpdate) { ++ data->capacity = newcaps; ++ updateCapacity(data); ++ } ++ } ++ ++ void removeCapacity(FcitxQtICData* data, QFlags capacity, bool forceUpdate = false) ++ { ++ QFlags< FcitxCapacityFlags > newcaps = data->capacity & (~capacity); ++ if (data->capacity != newcaps || forceUpdate) { ++ data->capacity = newcaps; ++ updateCapacity(data); ++ } ++ } ++ ++ void updateCapacity(FcitxQtICData* data); ++ void commitPreedit(); ++ void createICData(QWindow* w); ++ FcitxQtInputContextProxy* validIC(); ++ FcitxQtInputContextProxy* validICByWindow(QWindow* window); ++ FcitxQtInputContextProxy* validICByWId(WId wid); ++ bool filterEventFallback(uint keyval, uint keycode, uint state, bool press); ++ ++ FcitxQtInputMethodProxy* m_improxy; ++ uint m_compose_buffer[MAX_COMPOSE_LEN + 1]; ++ int m_n_compose; ++ QString m_preedit; ++ QString m_commitPreedit; ++ FcitxQtFormattedPreeditList m_preeditList; ++ int m_cursorPos; ++ bool m_useSurroundingText; ++ bool m_syncMode; ++ FcitxQtConnection* m_connection; ++ QString m_lastSurroundingText; ++ int m_lastSurroundingAnchor; ++ int m_lastSurroundingCursor; ++ QHash m_icMap; ++ QHash m_windowToWidMap; ++ WId m_lastWId; ++ bool m_destroy; ++ QScopedPointer m_xkbContext; ++ QScopedPointer m_xkbComposeTable; ++ QScopedPointer m_xkbComposeState; ++private slots: ++ void processKeyEventFinished(QDBusPendingCallWatcher*); ++}; ++ ++#endif // QFCITXPLATFORMINPUTCONTEXT_H +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/utils.cpp b/qtbase/src/plugins/platforminputcontexts/fcitx/utils.cpp +new file mode 100644 +index 0000000..fe4eda1 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/utils.cpp +@@ -0,0 +1,177 @@ ++/*************************************************************************** ++ * Copyright (C) 2012~2013 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 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 General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#include "utils.h" ++/** check utf8 character */ ++#define ISUTF8_CB(c) (((c)&0xc0) == 0x80) ++ ++#define CONT(i) ISUTF8_CB(in[i]) ++#define VAL(i, s) ((in[i]&0x3f) << s) ++ ++#define UTF8_LENGTH(Char) \ ++ ((Char) < 0x80 ? 1 : \ ++ ((Char) < 0x800 ? 2 : \ ++ ((Char) < 0x10000 ? 3 : \ ++ ((Char) < 0x200000 ? 4 : \ ++ ((Char) < 0x4000000 ? 5 : 6))))) ++ ++#define UNICODE_VALID(Char) \ ++ ((Char) < 0x110000 && \ ++ (((Char) & 0xFFFFF800) != 0xD800) && \ ++ ((Char) < 0xFDD0 || (Char) > 0xFDEF) && \ ++ ((Char) & 0xFFFE) != 0xFFFE) ++ ++int ++_utf8_get_char_extended(const char *s, ++ int max_len) ++{ ++ const unsigned char*p = (const unsigned char*)s; ++ int i, len; ++ unsigned int wc = (unsigned char) * p; ++ ++ if (wc < 0x80) { ++ return wc; ++ } else if (wc < 0xc0) { ++ return (unsigned int) - 1; ++ } else if (wc < 0xe0) { ++ len = 2; ++ wc &= 0x1f; ++ } else if (wc < 0xf0) { ++ len = 3; ++ wc &= 0x0f; ++ } else if (wc < 0xf8) { ++ len = 4; ++ wc &= 0x07; ++ } else if (wc < 0xfc) { ++ len = 5; ++ wc &= 0x03; ++ } else if (wc < 0xfe) { ++ len = 6; ++ wc &= 0x01; ++ } else { ++ return (unsigned int) - 1; ++ } ++ ++ if (max_len >= 0 && len > max_len) { ++ for (i = 1; i < max_len; i++) { ++ if ((((unsigned char *)p)[i] & 0xc0) != 0x80) ++ return (unsigned int) - 1; ++ } ++ ++ return (unsigned int) - 2; ++ } ++ ++ for (i = 1; i < len; ++i) { ++ unsigned int ch = ((unsigned char *)p)[i]; ++ ++ if ((ch & 0xc0) != 0x80) { ++ if (ch) ++ return (unsigned int) - 1; ++ else ++ return (unsigned int) - 2; ++ } ++ ++ wc <<= 6; ++ ++ wc |= (ch & 0x3f); ++ } ++ ++ if (UTF8_LENGTH(wc) != len) ++ return (unsigned int) - 1; ++ ++ return wc; ++} ++ ++int _utf8_get_char_validated(const char *p, ++ int max_len) ++{ ++ int result; ++ ++ if (max_len == 0) ++ return -2; ++ ++ result = _utf8_get_char_extended(p, max_len); ++ ++ if (result & 0x80000000) ++ return result; ++ else if (!UNICODE_VALID(result)) ++ return -1; ++ else ++ return result; ++} ++ ++ ++char * ++_utf8_get_char(const char *i, uint32_t *chr) ++{ ++ const unsigned char* in = (const unsigned char *)i; ++ if (!(in[0] & 0x80)) { ++ *(chr) = *(in); ++ return (char *)in + 1; ++ } ++ ++ /* 2-byte, 0x80-0x7ff */ ++ if ((in[0] & 0xe0) == 0xc0 && CONT(1)) { ++ *chr = ((in[0] & 0x1f) << 6) | VAL(1, 0); ++ return (char *)in + 2; ++ } ++ ++ /* 3-byte, 0x800-0xffff */ ++ if ((in[0] & 0xf0) == 0xe0 && CONT(1) && CONT(2)) { ++ *chr = ((in[0] & 0xf) << 12) | VAL(1, 6) | VAL(2, 0); ++ return (char *)in + 3; ++ } ++ ++ /* 4-byte, 0x10000-0x1FFFFF */ ++ if ((in[0] & 0xf8) == 0xf0 && CONT(1) && CONT(2) && CONT(3)) { ++ *chr = ((in[0] & 0x7) << 18) | VAL(1, 12) | VAL(2, 6) | VAL(3, 0); ++ return (char *)in + 4; ++ } ++ ++ /* 5-byte, 0x200000-0x3FFFFFF */ ++ if ((in[0] & 0xfc) == 0xf8 && CONT(1) && CONT(2) && CONT(3) && CONT(4)) { ++ *chr = ((in[0] & 0x3) << 24) | VAL(1, 18) | VAL(2, 12) | VAL(3, 6) | VAL(4, 0); ++ return (char *)in + 5; ++ } ++ ++ /* 6-byte, 0x400000-0x7FFFFFF */ ++ if ((in[0] & 0xfe) == 0xfc && CONT(1) && CONT(2) && CONT(3) && CONT(4) && CONT(5)) { ++ *chr = ((in[0] & 0x1) << 30) | VAL(1, 24) | VAL(2, 18) | VAL(3, 12) | VAL(4, 6) | VAL(5, 0); ++ return (char *)in + 6; ++ } ++ ++ *chr = *in; ++ ++ return (char *)in + 1; ++} ++ ++ ++int _utf8_check_string(const char *s) ++{ ++ while (*s) { ++ uint32_t chr; ++ ++ if (_utf8_get_char_validated(s, 6) < 0) ++ return 0; ++ ++ s = _utf8_get_char(s, &chr); ++ } ++ ++ return 1; ++} +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/utils.h b/qtbase/src/plugins/platforminputcontexts/fcitx/utils.h +new file mode 100644 +index 0000000..ae0c79c +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/utils.h +@@ -0,0 +1,35 @@ ++/*************************************************************************** ++ * Copyright (C) 2012~2013 by CSSlayer * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 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 General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#ifndef UTILS_H ++#define UTILS_H ++ ++#include ++ ++int ++_utf8_get_char_extended(const char *s, ++ int max_len); ++int _utf8_get_char_validated(const char *p, ++ int max_len); ++char * ++_utf8_get_char(const char *i, uint32_t *chr); ++int _utf8_check_string(const char *s); ++ ++ ++#endif // UTILS_H +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compat.h b/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compat.h +new file mode 100644 +index 0000000..299732f +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compat.h +@@ -0,0 +1,98 @@ ++/* ++ * Copyright © 2012 Daniel Stone ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a ++ * copy of this software and associated documentation files (the "Software"), ++ * to deal in the Software without restriction, including without limitation ++ * the rights to use, copy, modify, merge, publish, distribute, sublicense, ++ * and/or sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice (including the next ++ * paragraph) shall be included in all copies or substantial portions of the ++ * Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER ++ * DEALINGS IN THE SOFTWARE. ++ * ++ * Author: Daniel Stone ++ */ ++ ++#ifndef _XKBCOMMON_COMPAT_H ++#define _XKBCOMMON_COMPAT_H ++ ++/** ++ * Renamed keymap API. ++ */ ++#define xkb_group_index_t xkb_layout_index_t ++#define xkb_group_mask_t xkb_layout_mask_t ++#define xkb_map_compile_flags xkb_keymap_compile_flags ++#define XKB_GROUP_INVALID XKB_LAYOUT_INVALID ++ ++#define XKB_STATE_DEPRESSED \ ++ (XKB_STATE_MODS_DEPRESSED | XKB_STATE_LAYOUT_DEPRESSED) ++#define XKB_STATE_LATCHED \ ++ (XKB_STATE_MODS_LATCHED | XKB_STATE_LAYOUT_LATCHED) ++#define XKB_STATE_LOCKED \ ++ (XKB_STATE_MODS_LOCKED | XKB_STATE_LAYOUT_LOCKED) ++#define XKB_STATE_EFFECTIVE \ ++ (XKB_STATE_DEPRESSED | XKB_STATE_LATCHED | XKB_STATE_LOCKED | \ ++ XKB_STATE_MODS_EFFECTIVE | XKB_STATE_LAYOUT_EFFECTIVE) ++ ++#define xkb_map_new_from_names(context, names, flags) \ ++ xkb_keymap_new_from_names(context, names, flags) ++#define xkb_map_new_from_file(context, file, format, flags) \ ++ xkb_keymap_new_from_file(context, file, format, flags) ++#define xkb_map_new_from_string(context, string, format, flags) \ ++ xkb_keymap_new_from_string(context, string, format, flags) ++#define xkb_map_get_as_string(keymap) \ ++ xkb_keymap_get_as_string(keymap, XKB_KEYMAP_FORMAT_TEXT_V1) ++#define xkb_map_ref(keymap) xkb_keymap_ref(keymap) ++#define xkb_map_unref(keymap) xkb_keymap_unref(keymap) ++ ++#define xkb_map_num_mods(keymap) xkb_keymap_num_mods(keymap) ++#define xkb_map_mod_get_name(keymap, idx) xkb_keymap_mod_get_name(keymap, idx) ++#define xkb_map_mod_get_index(keymap, str) xkb_keymap_mod_get_index(keymap, str) ++#define xkb_key_mod_index_is_consumed(state, key, mod) \ ++ xkb_state_mod_index_is_consumed(state, key, mod) ++#define xkb_key_mod_mask_remove_consumed(state, key, modmask) \ ++ xkb_state_mod_mask_remove_consumed(state, key, modmask) ++ ++#define xkb_map_num_groups(keymap) xkb_keymap_num_layouts(keymap) ++#define xkb_key_num_groups(keymap, key) \ ++ xkb_keymap_num_layouts_for_key(keymap, key) ++#define xkb_map_group_get_name(keymap, idx) \ ++ xkb_keymap_layout_get_name(keymap, idx) ++#define xkb_map_group_get_index(keymap, str) \ ++ xkb_keymap_layout_get_index(keymap, str) ++ ++#define xkb_map_num_leds(keymap) xkb_keymap_num_leds(keymap) ++#define xkb_map_led_get_name(keymap, idx) xkb_keymap_led_get_name(keymap, idx) ++#define xkb_map_led_get_index(keymap, str) \ ++ xkb_keymap_led_get_index(keymap, str) ++ ++#define xkb_key_repeats(keymap, key) xkb_keymap_key_repeats(keymap, key) ++ ++#define xkb_key_get_syms(state, key, syms_out) \ ++ xkb_state_key_get_syms(state, key, syms_out) ++ ++#define xkb_state_group_name_is_active(state, name, type) \ ++ xkb_state_layout_name_is_active(state, name, type) ++#define xkb_state_group_index_is_active(state, idx, type) \ ++ xkb_state_layout_index_is_active(state, idx, type) ++ ++#define xkb_state_serialize_group(state, component) \ ++ xkb_state_serialize_layout(state, component) ++ ++#define xkb_state_get_map(state) xkb_state_get_keymap(state) ++ ++/* Not needed anymore, since there's NO_FLAGS. */ ++#define XKB_MAP_COMPILE_PLACEHOLDER XKB_KEYMAP_COMPILE_NO_FLAGS ++#define XKB_MAP_COMPILE_NO_FLAGS XKB_KEYMAP_COMPILE_NO_FLAGS ++ ++#endif +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compose.h b/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compose.h +new file mode 100644 +index 0000000..7414c37 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-compose.h +@@ -0,0 +1,488 @@ ++/* ++ * Copyright © 2013 Ran Benita ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a ++ * copy of this software and associated documentation files (the "Software"), ++ * to deal in the Software without restriction, including without limitation ++ * the rights to use, copy, modify, merge, publish, distribute, sublicense, ++ * and/or sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice (including the next ++ * paragraph) shall be included in all copies or substantial portions of the ++ * Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER ++ * DEALINGS IN THE SOFTWARE. ++ */ ++ ++#ifndef _XKBCOMMON_COMPOSE_H ++#define _XKBCOMMON_COMPOSE_H ++ ++#include ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** ++ * @file ++ * libxkbcommon Compose API - support for Compose and dead-keys. ++ */ ++ ++/** ++ * @defgroup compose Compose and dead-keys support ++ * Support for Compose and dead-keys. ++ * @since 0.5.0 ++ * ++ * @{ ++ */ ++ ++/** ++ * @page compose-overview Overview ++ * @parblock ++ * ++ * Compose and dead-keys are a common feature of many keyboard input ++ * systems. They extend the range of the keysysm that can be produced ++ * directly from a keyboard by using a sequence of key strokes, instead ++ * of just one. ++ * ++ * Here are some example sequences, in the libX11 Compose file format: ++ * ++ * : "á" aacute # LATIN SMALL LETTER A WITH ACUTE ++ * : "@" at # COMMERCIAL AT ++ * ++ * When the user presses a key which produces the `` keysym, ++ * nothing initially happens (thus the key is dubbed a "dead-key"). But ++ * when the user enters ``, "á" is "composed", in place of "a". If ++ * instead the user had entered a keysym which does not follow ++ * `` in any compose sequence, the sequence is said to be ++ * "cancelled". ++ * ++ * Compose files define many such sequences. For a description of the ++ * common file format for Compose files, see the Compose(5) man page. ++ * ++ * A successfuly-composed sequence has two results: a keysym and a UTF-8 ++ * string. At least one of the two is defined for each sequence. If only ++ * a keysym is given, the keysym's string representation is used for the ++ * result string (using xkb_keysym_to_utf8()). ++ * ++ * This library provides low-level support for Compose file parsing and ++ * processing. Higher-level APIs (such as libX11's `Xutf8LookupString`(3)) ++ * may be built upon it, or it can be used directly. ++ * ++ * @endparblock ++ */ ++ ++/** ++ * @page compose-conflicting Conflicting Sequences ++ * @parblock ++ * ++ * To avoid ambiguity, a sequence is not allowed to be a prefix of another. ++ * In such a case, the conflict is resolved thus: ++ * ++ * 1. A longer sequence overrides a shorter one. ++ * 2. An equal sequence overrides an existing one. ++ * 3. A shorter sequence does not override a longer one. ++ * ++ * Sequences of length 1 are allowed. ++ * ++ * @endparblock ++ */ ++ ++/** ++ * @page compose-cancellation Cancellation Behavior ++ * @parblock ++ * ++ * What should happen when a sequence is cancelled? For example, consider ++ * there are only the above sequences, and the input keysyms are ++ * ` `. There are a few approaches: ++ * ++ * 1. Swallow the cancelling keysym; that is, no keysym is produced. ++ * This is the approach taken by libX11. ++ * 2. Let the cancelling keysym through; that is, `` is produced. ++ * 3. Replay the entire sequence; that is, ` ` is produced. ++ * This is the approach taken by Microsoft Windows (approximately; ++ * instead of ``, the underlying key is used. This is ++ * difficult to simulate with XKB keymaps). ++ * ++ * You can program whichever approach best fits users' expectations. ++ * ++ * @endparblock ++ */ ++ ++/** ++ * @struct xkb_compose_table ++ * Opaque Compose table object. ++ * ++ * The compose table holds the definitions of the Compose sequences, as ++ * gathered from Compose files. It is immutable. ++ */ ++struct xkb_compose_table; ++ ++/** ++ * @struct xkb_compose_state ++ * Opaque Compose state object. ++ * ++ * The compose state maintains state for compose sequence matching, such ++ * as which possible sequences are being matched, and the position within ++ * these sequences. It acts as a simple state machine wherein keysyms are ++ * the input, and composed keysyms and strings are the output. ++ * ++ * The compose state is usually associated with a keyboard device. ++ */ ++struct xkb_compose_state; ++ ++/** Flags affecting Compose file compilation. */ ++enum xkb_compose_compile_flags { ++ /** Do not apply any flags. */ ++ XKB_COMPOSE_COMPILE_NO_FLAGS = 0 ++}; ++ ++/** The recognized Compose file formats. */ ++enum xkb_compose_format { ++ /** The classic libX11 Compose text format, described in Compose(5). */ ++ XKB_COMPOSE_FORMAT_TEXT_V1 = 1 ++}; ++ ++/** ++ * @page compose-locale Compose Locale ++ * @parblock ++ * ++ * Compose files are locale dependent: ++ * - Compose files are written for a locale, and the locale is used when ++ * searching for the appropriate file to use. ++ * - Compose files may reference the locale internally, with directives ++ * such as \%L. ++ * ++ * As such, functions like xkb_compose_table_new_from_locale() require ++ * a `locale` parameter. This will usually be the current locale (see ++ * locale(7) for more details). You may also want to allow the user to ++ * explicitly configure it, so he can use the Compose file of a given ++ * locale, but not use that locale for other things. ++ * ++ * You may query the current locale as follows: ++ * @code ++ * const char *locale; ++ * locale = setlocale(LC_CTYPE, NULL); ++ * @endcode ++ * ++ * This will only give useful results if the program had previously set ++ * the current locale using setlocale(3), with `LC_CTYPE` or `LC_ALL` ++ * and a non-NULL argument. ++ * ++ * If you prefer not to use the locale system of the C runtime library, ++ * you may nevertheless obtain the user's locale directly using ++ * environment variables, as described in locale(7). For example, ++ * @code ++ * locale = getenv("LC_ALL"); ++ * if (!locale) ++ * locale = getenv("LC_CTYPE"); ++ * if (!locale) ++ * locale = getenv("LANG"); ++ * if (!locale) ++ * locale = "C"; ++ * @endcode ++ * ++ * Note that some locales supported by the C standard library may not ++ * have a Compose file assigned. ++ * ++ * @endparblock ++ */ ++ ++/** ++ * Create a compose table for a given locale. ++ * ++ * The locale is used for searching the file-system for an appropriate ++ * Compose file. The search order is described in Compose(5). It is ++ * affected by the following environment variables: ++ * ++ * 1. `XCOMPOSEFILE` - see Compose(5). ++ * 2. `HOME` - see Compose(5). ++ * 3. `XLOCALEDIR` - if set, used as the base directory for the system's ++ * X locale files, e.g. `/usr/share/X11/locale`, instead of the ++ * preconfigured directory. ++ * ++ * @param context ++ * The library context in which to create the compose table. ++ * @param locale ++ * The current locale. See @ref compose-locale. ++ * @param flags ++ * Optional flags for the compose table, or 0. ++ * ++ * @returns A compose table for the given locale, or NULL if the ++ * compilation failed or a Compose file was not found. ++ * ++ * @memberof xkb_compose_table ++ */ ++struct xkb_compose_table * ++xkb_compose_table_new_from_locale(struct xkb_context *context, ++ const char *locale, ++ enum xkb_compose_compile_flags flags); ++ ++/** ++ * Create a new compose table from a Compose file. ++ * ++ * @param context ++ * The library context in which to create the compose table. ++ * @param file ++ * The Compose file to compile. ++ * @param locale ++ * The current locale. See @ref compose-locale. ++ * @param format ++ * The text format of the Compose file to compile. ++ * @param flags ++ * Optional flags for the compose table, or 0. ++ * ++ * @returns A compose table compiled from the given file, or NULL if ++ * the compilation failed. ++ * ++ * @memberof xkb_compose_table ++ */ ++struct xkb_compose_table * ++xkb_compose_table_new_from_file(struct xkb_context *context, ++ FILE *file, ++ const char *locale, ++ enum xkb_compose_format format, ++ enum xkb_compose_compile_flags flags); ++ ++/** ++ * Create a new compose table from a memory buffer. ++ * ++ * This is just like xkb_compose_table_new_from_file(), but instead of ++ * a file, gets the table as one enormous string. ++ * ++ * @see xkb_compose_table_new_from_file() ++ * @memberof xkb_compose_table ++ */ ++struct xkb_compose_table * ++xkb_compose_table_new_from_buffer(struct xkb_context *context, ++ const char *buffer, size_t length, ++ const char *locale, ++ enum xkb_compose_format format, ++ enum xkb_compose_compile_flags flags); ++ ++/** ++ * Take a new reference on a compose table. ++ * ++ * @returns The passed in object. ++ * ++ * @memberof xkb_compose_table ++ */ ++struct xkb_compose_table * ++xkb_compose_table_ref(struct xkb_compose_table *table); ++ ++/** ++ * Release a reference on a compose table, and possibly free it. ++ * ++ * @param table The object. If it is NULL, this function does nothing. ++ * ++ * @memberof xkb_compose_table ++ */ ++void ++xkb_compose_table_unref(struct xkb_compose_table *table); ++ ++/** Flags for compose state creation. */ ++enum xkb_compose_state_flags { ++ /** Do not apply any flags. */ ++ XKB_COMPOSE_STATE_NO_FLAGS = 0 ++}; ++ ++/** ++ * Create a new compose state object. ++ * ++ * @param table ++ * The compose table the state will use. ++ * @param flags ++ * Optional flags for the compose state, or 0. ++ * ++ * @returns A new compose state, or NULL on failure. ++ * ++ * @memberof xkb_compose_state ++ */ ++struct xkb_compose_state * ++xkb_compose_state_new(struct xkb_compose_table *table, ++ enum xkb_compose_state_flags flags); ++ ++/** ++ * Take a new reference on a compose state object. ++ * ++ * @returns The passed in object. ++ * ++ * @memberof xkb_compose_state ++ */ ++struct xkb_compose_state * ++xkb_compose_state_ref(struct xkb_compose_state *state); ++ ++/** ++ * Release a reference on a compose state object, and possibly free it. ++ * ++ * @param state The object. If NULL, do nothing. ++ * ++ * @memberof xkb_compose_state ++ */ ++void ++xkb_compose_state_unref(struct xkb_compose_state *state); ++ ++/** ++ * Get the compose table which a compose state object is using. ++ * ++ * @returns The compose table which was passed to xkb_compose_state_new() ++ * when creating this state object. ++ * ++ * This function does not take a new reference on the compose table; you ++ * must explicitly reference it yourself if you plan to use it beyond the ++ * lifetime of the state. ++ * ++ * @memberof xkb_compose_state ++ */ ++struct xkb_compose_table * ++xkb_compose_state_get_compose_table(struct xkb_compose_state *state); ++ ++/** Status of the Compose sequence state machine. */ ++enum xkb_compose_status { ++ /** The initial state; no sequence has started yet. */ ++ XKB_COMPOSE_NOTHING, ++ /** In the middle of a sequence. */ ++ XKB_COMPOSE_COMPOSING, ++ /** A complete sequence has been matched. */ ++ XKB_COMPOSE_COMPOSED, ++ /** The last sequence was cancelled due to an unmatched keysym. */ ++ XKB_COMPOSE_CANCELLED ++}; ++ ++/** The effect of a keysym fed to xkb_compose_state_feed(). */ ++enum xkb_compose_feed_result { ++ /** The keysym had no effect - it did not affect the status. */ ++ XKB_COMPOSE_FEED_IGNORED, ++ /** The keysym started, advanced or cancelled a sequence. */ ++ XKB_COMPOSE_FEED_ACCEPTED ++}; ++ ++/** ++ * Feed one keysym to the Compose sequence state machine. ++ * ++ * This function can advance into a compose sequence, cancel a sequence, ++ * start a new sequence, or do nothing in particular. The resulting ++ * status may be observed with xkb_compose_state_get_status(). ++ * ++ * Some keysyms, such as keysyms for modifier keys, are ignored - they ++ * have no effect on the status or otherwise. ++ * ++ * The following is a description of the possible status transitions, in ++ * the format CURRENT STATUS => NEXT STATUS, given a non-ignored input ++ * keysym `keysym`: ++ * ++ @verbatim ++ NOTHING or CANCELLED or COMPOSED => ++ NOTHING if keysym does not start a sequence. ++ COMPOSING if keysym starts a sequence. ++ COMPOSED if keysym starts and terminates a single-keysym sequence. ++ ++ COMPOSING => ++ COMPOSING if keysym advances any of the currently possible ++ sequences but does not terminate any of them. ++ COMPOSED if keysym terminates one of the currently possible ++ sequences. ++ CANCELLED if keysym does not advance any of the currently ++ possible sequences. ++ @endverbatim ++ * ++ * The current Compose formats do not support multiple-keysyms. ++ * Therefore, if you are using a function such as xkb_state_key_get_syms() ++ * and it returns more than one keysym, consider feeding XKB_KEY_NoSymbol ++ * instead. ++ * ++ * @param state ++ * The compose state object. ++ * @param keysym ++ * A keysym, usually obtained after a key-press event, with a ++ * function such as xkb_state_key_get_one_sym(). ++ * ++ * @returns Whether the keysym was ignored. This is useful, for example, ++ * if you want to keep a record of the sequence matched thus far. ++ * ++ * @memberof xkb_compose_state ++ */ ++enum xkb_compose_feed_result ++xkb_compose_state_feed(struct xkb_compose_state *state, ++ xkb_keysym_t keysym); ++ ++/** ++ * Reset the Compose sequence state machine. ++ * ++ * The status is set to XKB_COMPOSE_NOTHING, and the current sequence ++ * is discarded. ++ * ++ * @memberof xkb_compose_state ++ */ ++void ++xkb_compose_state_reset(struct xkb_compose_state *state); ++ ++/** ++ * Get the current status of the compose state machine. ++ * ++ * @see xkb_compose_status ++ * @memberof xkb_compose_state ++ **/ ++enum xkb_compose_status ++xkb_compose_state_get_status(struct xkb_compose_state *state); ++ ++/** ++ * Get the result Unicode/UTF-8 string for a composed sequence. ++ * ++ * See @ref compose-overview for more details. This function is only ++ * useful when the status is XKB_COMPOSE_COMPOSED. ++ * ++ * @param[in] state ++ * The compose state. ++ * @param[out] buffer ++ * A buffer to write the string into. ++ * @param[in] size ++ * Size of the buffer. ++ * ++ * @warning If the buffer passed is too small, the string is truncated ++ * (though still NUL-terminated). ++ * ++ * @returns ++ * The number of bytes required for the string, excluding the NUL byte. ++ * If the sequence is not complete, or does not have a viable result ++ * string, returns 0, and sets `buffer` to the empty string (if possible). ++ * @returns ++ * You may check if truncation has occurred by comparing the return value ++ * with the size of `buffer`, similarly to the `snprintf`(3) function. ++ * You may safely pass NULL and 0 to `buffer` and `size` to find the ++ * required size (without the NUL-byte). ++ * ++ * @memberof xkb_compose_state ++ **/ ++int ++xkb_compose_state_get_utf8(struct xkb_compose_state *state, ++ char *buffer, size_t size); ++ ++/** ++ * Get the result keysym for a composed sequence. ++ * ++ * See @ref compose-overview for more details. This function is only ++ * useful when the status is XKB_COMPOSE_COMPOSED. ++ * ++ * @returns The result keysym. If the sequence is not complete, or does ++ * not specify a result keysym, returns XKB_KEY_NoSymbol. ++ * ++ * @memberof xkb_compose_state ++ **/ ++xkb_keysym_t ++xkb_compose_state_get_one_sym(struct xkb_compose_state *state); ++ ++/** @} */ ++ ++#ifdef __cplusplus ++} /* extern "C" */ ++#endif ++ ++#endif /* _XKBCOMMON_COMPOSE_H */ +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-keysyms.h b/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-keysyms.h +new file mode 100644 +index 0000000..69c582e +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-keysyms.h +@@ -0,0 +1,3012 @@ ++#ifndef _XKBCOMMON_KEYSYMS_H ++#define _XKBCOMMON_KEYSYMS_H ++ ++/* This file is autogenerated from Makefile.am; please do not commit directly. */ ++ ++#define XKB_KEY_NoSymbol 0x000000 /* Special KeySym */ ++ ++/*********************************************************** ++Copyright 1987, 1994, 1998 The Open Group ++ ++Permission to use, copy, modify, distribute, and sell this software and its ++documentation for any purpose is hereby granted without fee, provided that ++the above copyright notice appear in all copies and that both that ++copyright notice and this permission notice appear in supporting ++documentation. ++ ++The above copyright notice and this permission notice shall be included ++in all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ++OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ++IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR ++OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ++ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR ++OTHER DEALINGS IN THE SOFTWARE. ++ ++Except as contained in this notice, the name of The Open Group shall ++not be used in advertising or otherwise to promote the sale, use or ++other dealings in this Software without prior written authorization ++from The Open Group. ++ ++ ++Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts ++ ++ All Rights Reserved ++ ++Permission to use, copy, modify, and distribute this software and its ++documentation for any purpose and without fee is hereby granted, ++provided that the above copyright notice appear in all copies and that ++both that copyright notice and this permission notice appear in ++supporting documentation, and that the name of Digital not be ++used in advertising or publicity pertaining to distribution of the ++software without specific, written prior permission. ++ ++DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ++ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL ++DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ++ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, ++WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ++ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS ++SOFTWARE. ++ ++******************************************************************/ ++ ++/* ++ * The "X11 Window System Protocol" standard defines in Appendix A the ++ * keysym codes. These 29-bit integer values identify characters or ++ * functions associated with each key (e.g., via the visible ++ * engraving) of a keyboard layout. This file assigns mnemonic macro ++ * names for these keysyms. ++ * ++ * This file is also compiled (by src/util/makekeys.c in libX11) into ++ * hash tables that can be accessed with X11 library functions such as ++ * XStringToKeysym() and XKeysymToString(). ++ * ++ * Where a keysym corresponds one-to-one to an ISO 10646 / Unicode ++ * character, this is noted in a comment that provides both the U+xxxx ++ * Unicode position, as well as the official Unicode name of the ++ * character. ++ * ++ * Where the correspondence is either not one-to-one or semantically ++ * unclear, the Unicode position and name are enclosed in ++ * parentheses. Such legacy keysyms should be considered deprecated ++ * and are not recommended for use in future keyboard mappings. ++ * ++ * For any future extension of the keysyms with characters already ++ * found in ISO 10646 / Unicode, the following algorithm shall be ++ * used. The new keysym code position will simply be the character's ++ * Unicode number plus 0x01000000. The keysym values in the range ++ * 0x01000100 to 0x0110ffff are reserved to represent Unicode ++ * characters in the range U+0100 to U+10FFFF. ++ * ++ * While most newer Unicode-based X11 clients do already accept ++ * Unicode-mapped keysyms in the range 0x01000100 to 0x0110ffff, it ++ * will remain necessary for clients -- in the interest of ++ * compatibility with existing servers -- to also understand the ++ * existing legacy keysym values in the range 0x0100 to 0x20ff. ++ * ++ * Where several mnemonic names are defined for the same keysym in this ++ * file, all but the first one listed should be considered deprecated. ++ * ++ * Mnemonic names for keysyms are defined in this file with lines ++ * that match one of these Perl regular expressions: ++ * ++ * /^\#define XKB_KEY_([a-zA-Z_0-9]+)\s+0x([0-9a-f]+)\s*\/\* U+([0-9A-F]{4,6}) (.*) \*\/\s*$/ ++ * /^\#define XKB_KEY_([a-zA-Z_0-9]+)\s+0x([0-9a-f]+)\s*\/\*\(U+([0-9A-F]{4,6}) (.*)\)\*\/\s*$/ ++ * /^\#define XKB_KEY_([a-zA-Z_0-9]+)\s+0x([0-9a-f]+)\s*(\/\*\s*(.*)\s*\*\/)?\s*$/ ++ * ++ * Before adding new keysyms, please do consider the following: In ++ * addition to the keysym names defined in this file, the ++ * XStringToKeysym() and XKeysymToString() functions will also handle ++ * any keysym string of the form "U0020" to "U007E" and "U00A0" to ++ * "U10FFFF" for all possible Unicode characters. In other words, ++ * every possible Unicode character has already a keysym string ++ * defined algorithmically, even if it is not listed here. Therefore, ++ * defining an additional keysym macro is only necessary where a ++ * non-hexadecimal mnemonic name is needed, or where the new keysym ++ * does not represent any existing Unicode character. ++ * ++ * When adding new keysyms to this file, do not forget to also update the ++ * following as needed: ++ * ++ * - the mappings in src/KeyBind.c in the repo ++ * git://anongit.freedesktop.org/xorg/lib/libX11.git ++ * ++ * - the protocol specification in specs/keysyms.xml ++ * in the repo git://anongit.freedesktop.org/xorg/proto/x11proto.git ++ * ++ */ ++ ++#define XKB_KEY_VoidSymbol 0xffffff /* Void symbol */ ++ ++/* ++ * TTY function keys, cleverly chosen to map to ASCII, for convenience of ++ * programming, but could have been arbitrary (at the cost of lookup ++ * tables in client code). ++ */ ++ ++#define XKB_KEY_BackSpace 0xff08 /* Back space, back char */ ++#define XKB_KEY_Tab 0xff09 ++#define XKB_KEY_Linefeed 0xff0a /* Linefeed, LF */ ++#define XKB_KEY_Clear 0xff0b ++#define XKB_KEY_Return 0xff0d /* Return, enter */ ++#define XKB_KEY_Pause 0xff13 /* Pause, hold */ ++#define XKB_KEY_Scroll_Lock 0xff14 ++#define XKB_KEY_Sys_Req 0xff15 ++#define XKB_KEY_Escape 0xff1b ++#define XKB_KEY_Delete 0xffff /* Delete, rubout */ ++ ++ ++ ++/* International & multi-key character composition */ ++ ++#define XKB_KEY_Multi_key 0xff20 /* Multi-key character compose */ ++#define XKB_KEY_Codeinput 0xff37 ++#define XKB_KEY_SingleCandidate 0xff3c ++#define XKB_KEY_MultipleCandidate 0xff3d ++#define XKB_KEY_PreviousCandidate 0xff3e ++ ++/* Japanese keyboard support */ ++ ++#define XKB_KEY_Kanji 0xff21 /* Kanji, Kanji convert */ ++#define XKB_KEY_Muhenkan 0xff22 /* Cancel Conversion */ ++#define XKB_KEY_Henkan_Mode 0xff23 /* Start/Stop Conversion */ ++#define XKB_KEY_Henkan 0xff23 /* Alias for Henkan_Mode */ ++#define XKB_KEY_Romaji 0xff24 /* to Romaji */ ++#define XKB_KEY_Hiragana 0xff25 /* to Hiragana */ ++#define XKB_KEY_Katakana 0xff26 /* to Katakana */ ++#define XKB_KEY_Hiragana_Katakana 0xff27 /* Hiragana/Katakana toggle */ ++#define XKB_KEY_Zenkaku 0xff28 /* to Zenkaku */ ++#define XKB_KEY_Hankaku 0xff29 /* to Hankaku */ ++#define XKB_KEY_Zenkaku_Hankaku 0xff2a /* Zenkaku/Hankaku toggle */ ++#define XKB_KEY_Touroku 0xff2b /* Add to Dictionary */ ++#define XKB_KEY_Massyo 0xff2c /* Delete from Dictionary */ ++#define XKB_KEY_Kana_Lock 0xff2d /* Kana Lock */ ++#define XKB_KEY_Kana_Shift 0xff2e /* Kana Shift */ ++#define XKB_KEY_Eisu_Shift 0xff2f /* Alphanumeric Shift */ ++#define XKB_KEY_Eisu_toggle 0xff30 /* Alphanumeric toggle */ ++#define XKB_KEY_Kanji_Bangou 0xff37 /* Codeinput */ ++#define XKB_KEY_Zen_Koho 0xff3d /* Multiple/All Candidate(s) */ ++#define XKB_KEY_Mae_Koho 0xff3e /* Previous Candidate */ ++ ++/* 0xff31 thru 0xff3f are under XK_KOREAN */ ++ ++/* Cursor control & motion */ ++ ++#define XKB_KEY_Home 0xff50 ++#define XKB_KEY_Left 0xff51 /* Move left, left arrow */ ++#define XKB_KEY_Up 0xff52 /* Move up, up arrow */ ++#define XKB_KEY_Right 0xff53 /* Move right, right arrow */ ++#define XKB_KEY_Down 0xff54 /* Move down, down arrow */ ++#define XKB_KEY_Prior 0xff55 /* Prior, previous */ ++#define XKB_KEY_Page_Up 0xff55 ++#define XKB_KEY_Next 0xff56 /* Next */ ++#define XKB_KEY_Page_Down 0xff56 ++#define XKB_KEY_End 0xff57 /* EOL */ ++#define XKB_KEY_Begin 0xff58 /* BOL */ ++ ++ ++/* Misc functions */ ++ ++#define XKB_KEY_Select 0xff60 /* Select, mark */ ++#define XKB_KEY_Print 0xff61 ++#define XKB_KEY_Execute 0xff62 /* Execute, run, do */ ++#define XKB_KEY_Insert 0xff63 /* Insert, insert here */ ++#define XKB_KEY_Undo 0xff65 ++#define XKB_KEY_Redo 0xff66 /* Redo, again */ ++#define XKB_KEY_Menu 0xff67 ++#define XKB_KEY_Find 0xff68 /* Find, search */ ++#define XKB_KEY_Cancel 0xff69 /* Cancel, stop, abort, exit */ ++#define XKB_KEY_Help 0xff6a /* Help */ ++#define XKB_KEY_Break 0xff6b ++#define XKB_KEY_Mode_switch 0xff7e /* Character set switch */ ++#define XKB_KEY_script_switch 0xff7e /* Alias for mode_switch */ ++#define XKB_KEY_Num_Lock 0xff7f ++ ++/* Keypad functions, keypad numbers cleverly chosen to map to ASCII */ ++ ++#define XKB_KEY_KP_Space 0xff80 /* Space */ ++#define XKB_KEY_KP_Tab 0xff89 ++#define XKB_KEY_KP_Enter 0xff8d /* Enter */ ++#define XKB_KEY_KP_F1 0xff91 /* PF1, KP_A, ... */ ++#define XKB_KEY_KP_F2 0xff92 ++#define XKB_KEY_KP_F3 0xff93 ++#define XKB_KEY_KP_F4 0xff94 ++#define XKB_KEY_KP_Home 0xff95 ++#define XKB_KEY_KP_Left 0xff96 ++#define XKB_KEY_KP_Up 0xff97 ++#define XKB_KEY_KP_Right 0xff98 ++#define XKB_KEY_KP_Down 0xff99 ++#define XKB_KEY_KP_Prior 0xff9a ++#define XKB_KEY_KP_Page_Up 0xff9a ++#define XKB_KEY_KP_Next 0xff9b ++#define XKB_KEY_KP_Page_Down 0xff9b ++#define XKB_KEY_KP_End 0xff9c ++#define XKB_KEY_KP_Begin 0xff9d ++#define XKB_KEY_KP_Insert 0xff9e ++#define XKB_KEY_KP_Delete 0xff9f ++#define XKB_KEY_KP_Equal 0xffbd /* Equals */ ++#define XKB_KEY_KP_Multiply 0xffaa ++#define XKB_KEY_KP_Add 0xffab ++#define XKB_KEY_KP_Separator 0xffac /* Separator, often comma */ ++#define XKB_KEY_KP_Subtract 0xffad ++#define XKB_KEY_KP_Decimal 0xffae ++#define XKB_KEY_KP_Divide 0xffaf ++ ++#define XKB_KEY_KP_0 0xffb0 ++#define XKB_KEY_KP_1 0xffb1 ++#define XKB_KEY_KP_2 0xffb2 ++#define XKB_KEY_KP_3 0xffb3 ++#define XKB_KEY_KP_4 0xffb4 ++#define XKB_KEY_KP_5 0xffb5 ++#define XKB_KEY_KP_6 0xffb6 ++#define XKB_KEY_KP_7 0xffb7 ++#define XKB_KEY_KP_8 0xffb8 ++#define XKB_KEY_KP_9 0xffb9 ++ ++ ++ ++/* ++ * Auxiliary functions; note the duplicate definitions for left and right ++ * function keys; Sun keyboards and a few other manufacturers have such ++ * function key groups on the left and/or right sides of the keyboard. ++ * We've not found a keyboard with more than 35 function keys total. ++ */ ++ ++#define XKB_KEY_F1 0xffbe ++#define XKB_KEY_F2 0xffbf ++#define XKB_KEY_F3 0xffc0 ++#define XKB_KEY_F4 0xffc1 ++#define XKB_KEY_F5 0xffc2 ++#define XKB_KEY_F6 0xffc3 ++#define XKB_KEY_F7 0xffc4 ++#define XKB_KEY_F8 0xffc5 ++#define XKB_KEY_F9 0xffc6 ++#define XKB_KEY_F10 0xffc7 ++#define XKB_KEY_F11 0xffc8 ++#define XKB_KEY_L1 0xffc8 ++#define XKB_KEY_F12 0xffc9 ++#define XKB_KEY_L2 0xffc9 ++#define XKB_KEY_F13 0xffca ++#define XKB_KEY_L3 0xffca ++#define XKB_KEY_F14 0xffcb ++#define XKB_KEY_L4 0xffcb ++#define XKB_KEY_F15 0xffcc ++#define XKB_KEY_L5 0xffcc ++#define XKB_KEY_F16 0xffcd ++#define XKB_KEY_L6 0xffcd ++#define XKB_KEY_F17 0xffce ++#define XKB_KEY_L7 0xffce ++#define XKB_KEY_F18 0xffcf ++#define XKB_KEY_L8 0xffcf ++#define XKB_KEY_F19 0xffd0 ++#define XKB_KEY_L9 0xffd0 ++#define XKB_KEY_F20 0xffd1 ++#define XKB_KEY_L10 0xffd1 ++#define XKB_KEY_F21 0xffd2 ++#define XKB_KEY_R1 0xffd2 ++#define XKB_KEY_F22 0xffd3 ++#define XKB_KEY_R2 0xffd3 ++#define XKB_KEY_F23 0xffd4 ++#define XKB_KEY_R3 0xffd4 ++#define XKB_KEY_F24 0xffd5 ++#define XKB_KEY_R4 0xffd5 ++#define XKB_KEY_F25 0xffd6 ++#define XKB_KEY_R5 0xffd6 ++#define XKB_KEY_F26 0xffd7 ++#define XKB_KEY_R6 0xffd7 ++#define XKB_KEY_F27 0xffd8 ++#define XKB_KEY_R7 0xffd8 ++#define XKB_KEY_F28 0xffd9 ++#define XKB_KEY_R8 0xffd9 ++#define XKB_KEY_F29 0xffda ++#define XKB_KEY_R9 0xffda ++#define XKB_KEY_F30 0xffdb ++#define XKB_KEY_R10 0xffdb ++#define XKB_KEY_F31 0xffdc ++#define XKB_KEY_R11 0xffdc ++#define XKB_KEY_F32 0xffdd ++#define XKB_KEY_R12 0xffdd ++#define XKB_KEY_F33 0xffde ++#define XKB_KEY_R13 0xffde ++#define XKB_KEY_F34 0xffdf ++#define XKB_KEY_R14 0xffdf ++#define XKB_KEY_F35 0xffe0 ++#define XKB_KEY_R15 0xffe0 ++ ++/* Modifiers */ ++ ++#define XKB_KEY_Shift_L 0xffe1 /* Left shift */ ++#define XKB_KEY_Shift_R 0xffe2 /* Right shift */ ++#define XKB_KEY_Control_L 0xffe3 /* Left control */ ++#define XKB_KEY_Control_R 0xffe4 /* Right control */ ++#define XKB_KEY_Caps_Lock 0xffe5 /* Caps lock */ ++#define XKB_KEY_Shift_Lock 0xffe6 /* Shift lock */ ++ ++#define XKB_KEY_Meta_L 0xffe7 /* Left meta */ ++#define XKB_KEY_Meta_R 0xffe8 /* Right meta */ ++#define XKB_KEY_Alt_L 0xffe9 /* Left alt */ ++#define XKB_KEY_Alt_R 0xffea /* Right alt */ ++#define XKB_KEY_Super_L 0xffeb /* Left super */ ++#define XKB_KEY_Super_R 0xffec /* Right super */ ++#define XKB_KEY_Hyper_L 0xffed /* Left hyper */ ++#define XKB_KEY_Hyper_R 0xffee /* Right hyper */ ++ ++/* ++ * Keyboard (XKB) Extension function and modifier keys ++ * (from Appendix C of "The X Keyboard Extension: Protocol Specification") ++ * Byte 3 = 0xfe ++ */ ++ ++#define XKB_KEY_ISO_Lock 0xfe01 ++#define XKB_KEY_ISO_Level2_Latch 0xfe02 ++#define XKB_KEY_ISO_Level3_Shift 0xfe03 ++#define XKB_KEY_ISO_Level3_Latch 0xfe04 ++#define XKB_KEY_ISO_Level3_Lock 0xfe05 ++#define XKB_KEY_ISO_Level5_Shift 0xfe11 ++#define XKB_KEY_ISO_Level5_Latch 0xfe12 ++#define XKB_KEY_ISO_Level5_Lock 0xfe13 ++#define XKB_KEY_ISO_Group_Shift 0xff7e /* Alias for mode_switch */ ++#define XKB_KEY_ISO_Group_Latch 0xfe06 ++#define XKB_KEY_ISO_Group_Lock 0xfe07 ++#define XKB_KEY_ISO_Next_Group 0xfe08 ++#define XKB_KEY_ISO_Next_Group_Lock 0xfe09 ++#define XKB_KEY_ISO_Prev_Group 0xfe0a ++#define XKB_KEY_ISO_Prev_Group_Lock 0xfe0b ++#define XKB_KEY_ISO_First_Group 0xfe0c ++#define XKB_KEY_ISO_First_Group_Lock 0xfe0d ++#define XKB_KEY_ISO_Last_Group 0xfe0e ++#define XKB_KEY_ISO_Last_Group_Lock 0xfe0f ++ ++#define XKB_KEY_ISO_Left_Tab 0xfe20 ++#define XKB_KEY_ISO_Move_Line_Up 0xfe21 ++#define XKB_KEY_ISO_Move_Line_Down 0xfe22 ++#define XKB_KEY_ISO_Partial_Line_Up 0xfe23 ++#define XKB_KEY_ISO_Partial_Line_Down 0xfe24 ++#define XKB_KEY_ISO_Partial_Space_Left 0xfe25 ++#define XKB_KEY_ISO_Partial_Space_Right 0xfe26 ++#define XKB_KEY_ISO_Set_Margin_Left 0xfe27 ++#define XKB_KEY_ISO_Set_Margin_Right 0xfe28 ++#define XKB_KEY_ISO_Release_Margin_Left 0xfe29 ++#define XKB_KEY_ISO_Release_Margin_Right 0xfe2a ++#define XKB_KEY_ISO_Release_Both_Margins 0xfe2b ++#define XKB_KEY_ISO_Fast_Cursor_Left 0xfe2c ++#define XKB_KEY_ISO_Fast_Cursor_Right 0xfe2d ++#define XKB_KEY_ISO_Fast_Cursor_Up 0xfe2e ++#define XKB_KEY_ISO_Fast_Cursor_Down 0xfe2f ++#define XKB_KEY_ISO_Continuous_Underline 0xfe30 ++#define XKB_KEY_ISO_Discontinuous_Underline 0xfe31 ++#define XKB_KEY_ISO_Emphasize 0xfe32 ++#define XKB_KEY_ISO_Center_Object 0xfe33 ++#define XKB_KEY_ISO_Enter 0xfe34 ++ ++#define XKB_KEY_dead_grave 0xfe50 ++#define XKB_KEY_dead_acute 0xfe51 ++#define XKB_KEY_dead_circumflex 0xfe52 ++#define XKB_KEY_dead_tilde 0xfe53 ++#define XKB_KEY_dead_perispomeni 0xfe53 /* alias for dead_tilde */ ++#define XKB_KEY_dead_macron 0xfe54 ++#define XKB_KEY_dead_breve 0xfe55 ++#define XKB_KEY_dead_abovedot 0xfe56 ++#define XKB_KEY_dead_diaeresis 0xfe57 ++#define XKB_KEY_dead_abovering 0xfe58 ++#define XKB_KEY_dead_doubleacute 0xfe59 ++#define XKB_KEY_dead_caron 0xfe5a ++#define XKB_KEY_dead_cedilla 0xfe5b ++#define XKB_KEY_dead_ogonek 0xfe5c ++#define XKB_KEY_dead_iota 0xfe5d ++#define XKB_KEY_dead_voiced_sound 0xfe5e ++#define XKB_KEY_dead_semivoiced_sound 0xfe5f ++#define XKB_KEY_dead_belowdot 0xfe60 ++#define XKB_KEY_dead_hook 0xfe61 ++#define XKB_KEY_dead_horn 0xfe62 ++#define XKB_KEY_dead_stroke 0xfe63 ++#define XKB_KEY_dead_abovecomma 0xfe64 ++#define XKB_KEY_dead_psili 0xfe64 /* alias for dead_abovecomma */ ++#define XKB_KEY_dead_abovereversedcomma 0xfe65 ++#define XKB_KEY_dead_dasia 0xfe65 /* alias for dead_abovereversedcomma */ ++#define XKB_KEY_dead_doublegrave 0xfe66 ++#define XKB_KEY_dead_belowring 0xfe67 ++#define XKB_KEY_dead_belowmacron 0xfe68 ++#define XKB_KEY_dead_belowcircumflex 0xfe69 ++#define XKB_KEY_dead_belowtilde 0xfe6a ++#define XKB_KEY_dead_belowbreve 0xfe6b ++#define XKB_KEY_dead_belowdiaeresis 0xfe6c ++#define XKB_KEY_dead_invertedbreve 0xfe6d ++#define XKB_KEY_dead_belowcomma 0xfe6e ++#define XKB_KEY_dead_currency 0xfe6f ++ ++/* extra dead elements for German T3 layout */ ++#define XKB_KEY_dead_lowline 0xfe90 ++#define XKB_KEY_dead_aboveverticalline 0xfe91 ++#define XKB_KEY_dead_belowverticalline 0xfe92 ++#define XKB_KEY_dead_longsolidusoverlay 0xfe93 ++ ++/* dead vowels for universal syllable entry */ ++#define XKB_KEY_dead_a 0xfe80 ++#define XKB_KEY_dead_A 0xfe81 ++#define XKB_KEY_dead_e 0xfe82 ++#define XKB_KEY_dead_E 0xfe83 ++#define XKB_KEY_dead_i 0xfe84 ++#define XKB_KEY_dead_I 0xfe85 ++#define XKB_KEY_dead_o 0xfe86 ++#define XKB_KEY_dead_O 0xfe87 ++#define XKB_KEY_dead_u 0xfe88 ++#define XKB_KEY_dead_U 0xfe89 ++#define XKB_KEY_dead_small_schwa 0xfe8a ++#define XKB_KEY_dead_capital_schwa 0xfe8b ++ ++#define XKB_KEY_dead_greek 0xfe8c ++ ++#define XKB_KEY_First_Virtual_Screen 0xfed0 ++#define XKB_KEY_Prev_Virtual_Screen 0xfed1 ++#define XKB_KEY_Next_Virtual_Screen 0xfed2 ++#define XKB_KEY_Last_Virtual_Screen 0xfed4 ++#define XKB_KEY_Terminate_Server 0xfed5 ++ ++#define XKB_KEY_AccessX_Enable 0xfe70 ++#define XKB_KEY_AccessX_Feedback_Enable 0xfe71 ++#define XKB_KEY_RepeatKeys_Enable 0xfe72 ++#define XKB_KEY_SlowKeys_Enable 0xfe73 ++#define XKB_KEY_BounceKeys_Enable 0xfe74 ++#define XKB_KEY_StickyKeys_Enable 0xfe75 ++#define XKB_KEY_MouseKeys_Enable 0xfe76 ++#define XKB_KEY_MouseKeys_Accel_Enable 0xfe77 ++#define XKB_KEY_Overlay1_Enable 0xfe78 ++#define XKB_KEY_Overlay2_Enable 0xfe79 ++#define XKB_KEY_AudibleBell_Enable 0xfe7a ++ ++#define XKB_KEY_Pointer_Left 0xfee0 ++#define XKB_KEY_Pointer_Right 0xfee1 ++#define XKB_KEY_Pointer_Up 0xfee2 ++#define XKB_KEY_Pointer_Down 0xfee3 ++#define XKB_KEY_Pointer_UpLeft 0xfee4 ++#define XKB_KEY_Pointer_UpRight 0xfee5 ++#define XKB_KEY_Pointer_DownLeft 0xfee6 ++#define XKB_KEY_Pointer_DownRight 0xfee7 ++#define XKB_KEY_Pointer_Button_Dflt 0xfee8 ++#define XKB_KEY_Pointer_Button1 0xfee9 ++#define XKB_KEY_Pointer_Button2 0xfeea ++#define XKB_KEY_Pointer_Button3 0xfeeb ++#define XKB_KEY_Pointer_Button4 0xfeec ++#define XKB_KEY_Pointer_Button5 0xfeed ++#define XKB_KEY_Pointer_DblClick_Dflt 0xfeee ++#define XKB_KEY_Pointer_DblClick1 0xfeef ++#define XKB_KEY_Pointer_DblClick2 0xfef0 ++#define XKB_KEY_Pointer_DblClick3 0xfef1 ++#define XKB_KEY_Pointer_DblClick4 0xfef2 ++#define XKB_KEY_Pointer_DblClick5 0xfef3 ++#define XKB_KEY_Pointer_Drag_Dflt 0xfef4 ++#define XKB_KEY_Pointer_Drag1 0xfef5 ++#define XKB_KEY_Pointer_Drag2 0xfef6 ++#define XKB_KEY_Pointer_Drag3 0xfef7 ++#define XKB_KEY_Pointer_Drag4 0xfef8 ++#define XKB_KEY_Pointer_Drag5 0xfefd ++ ++#define XKB_KEY_Pointer_EnableKeys 0xfef9 ++#define XKB_KEY_Pointer_Accelerate 0xfefa ++#define XKB_KEY_Pointer_DfltBtnNext 0xfefb ++#define XKB_KEY_Pointer_DfltBtnPrev 0xfefc ++ ++/* Single-Stroke Multiple-Character N-Graph Keysyms For The X Input Method */ ++ ++#define XKB_KEY_ch 0xfea0 ++#define XKB_KEY_Ch 0xfea1 ++#define XKB_KEY_CH 0xfea2 ++#define XKB_KEY_c_h 0xfea3 ++#define XKB_KEY_C_h 0xfea4 ++#define XKB_KEY_C_H 0xfea5 ++ ++ ++/* ++ * 3270 Terminal Keys ++ * Byte 3 = 0xfd ++ */ ++ ++#define XKB_KEY_3270_Duplicate 0xfd01 ++#define XKB_KEY_3270_FieldMark 0xfd02 ++#define XKB_KEY_3270_Right2 0xfd03 ++#define XKB_KEY_3270_Left2 0xfd04 ++#define XKB_KEY_3270_BackTab 0xfd05 ++#define XKB_KEY_3270_EraseEOF 0xfd06 ++#define XKB_KEY_3270_EraseInput 0xfd07 ++#define XKB_KEY_3270_Reset 0xfd08 ++#define XKB_KEY_3270_Quit 0xfd09 ++#define XKB_KEY_3270_PA1 0xfd0a ++#define XKB_KEY_3270_PA2 0xfd0b ++#define XKB_KEY_3270_PA3 0xfd0c ++#define XKB_KEY_3270_Test 0xfd0d ++#define XKB_KEY_3270_Attn 0xfd0e ++#define XKB_KEY_3270_CursorBlink 0xfd0f ++#define XKB_KEY_3270_AltCursor 0xfd10 ++#define XKB_KEY_3270_KeyClick 0xfd11 ++#define XKB_KEY_3270_Jump 0xfd12 ++#define XKB_KEY_3270_Ident 0xfd13 ++#define XKB_KEY_3270_Rule 0xfd14 ++#define XKB_KEY_3270_Copy 0xfd15 ++#define XKB_KEY_3270_Play 0xfd16 ++#define XKB_KEY_3270_Setup 0xfd17 ++#define XKB_KEY_3270_Record 0xfd18 ++#define XKB_KEY_3270_ChangeScreen 0xfd19 ++#define XKB_KEY_3270_DeleteWord 0xfd1a ++#define XKB_KEY_3270_ExSelect 0xfd1b ++#define XKB_KEY_3270_CursorSelect 0xfd1c ++#define XKB_KEY_3270_PrintScreen 0xfd1d ++#define XKB_KEY_3270_Enter 0xfd1e ++ ++/* ++ * Latin 1 ++ * (ISO/IEC 8859-1 = Unicode U+0020..U+00FF) ++ * Byte 3 = 0 ++ */ ++#define XKB_KEY_space 0x0020 /* U+0020 SPACE */ ++#define XKB_KEY_exclam 0x0021 /* U+0021 EXCLAMATION MARK */ ++#define XKB_KEY_quotedbl 0x0022 /* U+0022 QUOTATION MARK */ ++#define XKB_KEY_numbersign 0x0023 /* U+0023 NUMBER SIGN */ ++#define XKB_KEY_dollar 0x0024 /* U+0024 DOLLAR SIGN */ ++#define XKB_KEY_percent 0x0025 /* U+0025 PERCENT SIGN */ ++#define XKB_KEY_ampersand 0x0026 /* U+0026 AMPERSAND */ ++#define XKB_KEY_apostrophe 0x0027 /* U+0027 APOSTROPHE */ ++#define XKB_KEY_quoteright 0x0027 /* deprecated */ ++#define XKB_KEY_parenleft 0x0028 /* U+0028 LEFT PARENTHESIS */ ++#define XKB_KEY_parenright 0x0029 /* U+0029 RIGHT PARENTHESIS */ ++#define XKB_KEY_asterisk 0x002a /* U+002A ASTERISK */ ++#define XKB_KEY_plus 0x002b /* U+002B PLUS SIGN */ ++#define XKB_KEY_comma 0x002c /* U+002C COMMA */ ++#define XKB_KEY_minus 0x002d /* U+002D HYPHEN-MINUS */ ++#define XKB_KEY_period 0x002e /* U+002E FULL STOP */ ++#define XKB_KEY_slash 0x002f /* U+002F SOLIDUS */ ++#define XKB_KEY_0 0x0030 /* U+0030 DIGIT ZERO */ ++#define XKB_KEY_1 0x0031 /* U+0031 DIGIT ONE */ ++#define XKB_KEY_2 0x0032 /* U+0032 DIGIT TWO */ ++#define XKB_KEY_3 0x0033 /* U+0033 DIGIT THREE */ ++#define XKB_KEY_4 0x0034 /* U+0034 DIGIT FOUR */ ++#define XKB_KEY_5 0x0035 /* U+0035 DIGIT FIVE */ ++#define XKB_KEY_6 0x0036 /* U+0036 DIGIT SIX */ ++#define XKB_KEY_7 0x0037 /* U+0037 DIGIT SEVEN */ ++#define XKB_KEY_8 0x0038 /* U+0038 DIGIT EIGHT */ ++#define XKB_KEY_9 0x0039 /* U+0039 DIGIT NINE */ ++#define XKB_KEY_colon 0x003a /* U+003A COLON */ ++#define XKB_KEY_semicolon 0x003b /* U+003B SEMICOLON */ ++#define XKB_KEY_less 0x003c /* U+003C LESS-THAN SIGN */ ++#define XKB_KEY_equal 0x003d /* U+003D EQUALS SIGN */ ++#define XKB_KEY_greater 0x003e /* U+003E GREATER-THAN SIGN */ ++#define XKB_KEY_question 0x003f /* U+003F QUESTION MARK */ ++#define XKB_KEY_at 0x0040 /* U+0040 COMMERCIAL AT */ ++#define XKB_KEY_A 0x0041 /* U+0041 LATIN CAPITAL LETTER A */ ++#define XKB_KEY_B 0x0042 /* U+0042 LATIN CAPITAL LETTER B */ ++#define XKB_KEY_C 0x0043 /* U+0043 LATIN CAPITAL LETTER C */ ++#define XKB_KEY_D 0x0044 /* U+0044 LATIN CAPITAL LETTER D */ ++#define XKB_KEY_E 0x0045 /* U+0045 LATIN CAPITAL LETTER E */ ++#define XKB_KEY_F 0x0046 /* U+0046 LATIN CAPITAL LETTER F */ ++#define XKB_KEY_G 0x0047 /* U+0047 LATIN CAPITAL LETTER G */ ++#define XKB_KEY_H 0x0048 /* U+0048 LATIN CAPITAL LETTER H */ ++#define XKB_KEY_I 0x0049 /* U+0049 LATIN CAPITAL LETTER I */ ++#define XKB_KEY_J 0x004a /* U+004A LATIN CAPITAL LETTER J */ ++#define XKB_KEY_K 0x004b /* U+004B LATIN CAPITAL LETTER K */ ++#define XKB_KEY_L 0x004c /* U+004C LATIN CAPITAL LETTER L */ ++#define XKB_KEY_M 0x004d /* U+004D LATIN CAPITAL LETTER M */ ++#define XKB_KEY_N 0x004e /* U+004E LATIN CAPITAL LETTER N */ ++#define XKB_KEY_O 0x004f /* U+004F LATIN CAPITAL LETTER O */ ++#define XKB_KEY_P 0x0050 /* U+0050 LATIN CAPITAL LETTER P */ ++#define XKB_KEY_Q 0x0051 /* U+0051 LATIN CAPITAL LETTER Q */ ++#define XKB_KEY_R 0x0052 /* U+0052 LATIN CAPITAL LETTER R */ ++#define XKB_KEY_S 0x0053 /* U+0053 LATIN CAPITAL LETTER S */ ++#define XKB_KEY_T 0x0054 /* U+0054 LATIN CAPITAL LETTER T */ ++#define XKB_KEY_U 0x0055 /* U+0055 LATIN CAPITAL LETTER U */ ++#define XKB_KEY_V 0x0056 /* U+0056 LATIN CAPITAL LETTER V */ ++#define XKB_KEY_W 0x0057 /* U+0057 LATIN CAPITAL LETTER W */ ++#define XKB_KEY_X 0x0058 /* U+0058 LATIN CAPITAL LETTER X */ ++#define XKB_KEY_Y 0x0059 /* U+0059 LATIN CAPITAL LETTER Y */ ++#define XKB_KEY_Z 0x005a /* U+005A LATIN CAPITAL LETTER Z */ ++#define XKB_KEY_bracketleft 0x005b /* U+005B LEFT SQUARE BRACKET */ ++#define XKB_KEY_backslash 0x005c /* U+005C REVERSE SOLIDUS */ ++#define XKB_KEY_bracketright 0x005d /* U+005D RIGHT SQUARE BRACKET */ ++#define XKB_KEY_asciicircum 0x005e /* U+005E CIRCUMFLEX ACCENT */ ++#define XKB_KEY_underscore 0x005f /* U+005F LOW LINE */ ++#define XKB_KEY_grave 0x0060 /* U+0060 GRAVE ACCENT */ ++#define XKB_KEY_quoteleft 0x0060 /* deprecated */ ++#define XKB_KEY_a 0x0061 /* U+0061 LATIN SMALL LETTER A */ ++#define XKB_KEY_b 0x0062 /* U+0062 LATIN SMALL LETTER B */ ++#define XKB_KEY_c 0x0063 /* U+0063 LATIN SMALL LETTER C */ ++#define XKB_KEY_d 0x0064 /* U+0064 LATIN SMALL LETTER D */ ++#define XKB_KEY_e 0x0065 /* U+0065 LATIN SMALL LETTER E */ ++#define XKB_KEY_f 0x0066 /* U+0066 LATIN SMALL LETTER F */ ++#define XKB_KEY_g 0x0067 /* U+0067 LATIN SMALL LETTER G */ ++#define XKB_KEY_h 0x0068 /* U+0068 LATIN SMALL LETTER H */ ++#define XKB_KEY_i 0x0069 /* U+0069 LATIN SMALL LETTER I */ ++#define XKB_KEY_j 0x006a /* U+006A LATIN SMALL LETTER J */ ++#define XKB_KEY_k 0x006b /* U+006B LATIN SMALL LETTER K */ ++#define XKB_KEY_l 0x006c /* U+006C LATIN SMALL LETTER L */ ++#define XKB_KEY_m 0x006d /* U+006D LATIN SMALL LETTER M */ ++#define XKB_KEY_n 0x006e /* U+006E LATIN SMALL LETTER N */ ++#define XKB_KEY_o 0x006f /* U+006F LATIN SMALL LETTER O */ ++#define XKB_KEY_p 0x0070 /* U+0070 LATIN SMALL LETTER P */ ++#define XKB_KEY_q 0x0071 /* U+0071 LATIN SMALL LETTER Q */ ++#define XKB_KEY_r 0x0072 /* U+0072 LATIN SMALL LETTER R */ ++#define XKB_KEY_s 0x0073 /* U+0073 LATIN SMALL LETTER S */ ++#define XKB_KEY_t 0x0074 /* U+0074 LATIN SMALL LETTER T */ ++#define XKB_KEY_u 0x0075 /* U+0075 LATIN SMALL LETTER U */ ++#define XKB_KEY_v 0x0076 /* U+0076 LATIN SMALL LETTER V */ ++#define XKB_KEY_w 0x0077 /* U+0077 LATIN SMALL LETTER W */ ++#define XKB_KEY_x 0x0078 /* U+0078 LATIN SMALL LETTER X */ ++#define XKB_KEY_y 0x0079 /* U+0079 LATIN SMALL LETTER Y */ ++#define XKB_KEY_z 0x007a /* U+007A LATIN SMALL LETTER Z */ ++#define XKB_KEY_braceleft 0x007b /* U+007B LEFT CURLY BRACKET */ ++#define XKB_KEY_bar 0x007c /* U+007C VERTICAL LINE */ ++#define XKB_KEY_braceright 0x007d /* U+007D RIGHT CURLY BRACKET */ ++#define XKB_KEY_asciitilde 0x007e /* U+007E TILDE */ ++ ++#define XKB_KEY_nobreakspace 0x00a0 /* U+00A0 NO-BREAK SPACE */ ++#define XKB_KEY_exclamdown 0x00a1 /* U+00A1 INVERTED EXCLAMATION MARK */ ++#define XKB_KEY_cent 0x00a2 /* U+00A2 CENT SIGN */ ++#define XKB_KEY_sterling 0x00a3 /* U+00A3 POUND SIGN */ ++#define XKB_KEY_currency 0x00a4 /* U+00A4 CURRENCY SIGN */ ++#define XKB_KEY_yen 0x00a5 /* U+00A5 YEN SIGN */ ++#define XKB_KEY_brokenbar 0x00a6 /* U+00A6 BROKEN BAR */ ++#define XKB_KEY_section 0x00a7 /* U+00A7 SECTION SIGN */ ++#define XKB_KEY_diaeresis 0x00a8 /* U+00A8 DIAERESIS */ ++#define XKB_KEY_copyright 0x00a9 /* U+00A9 COPYRIGHT SIGN */ ++#define XKB_KEY_ordfeminine 0x00aa /* U+00AA FEMININE ORDINAL INDICATOR */ ++#define XKB_KEY_guillemotleft 0x00ab /* U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */ ++#define XKB_KEY_notsign 0x00ac /* U+00AC NOT SIGN */ ++#define XKB_KEY_hyphen 0x00ad /* U+00AD SOFT HYPHEN */ ++#define XKB_KEY_registered 0x00ae /* U+00AE REGISTERED SIGN */ ++#define XKB_KEY_macron 0x00af /* U+00AF MACRON */ ++#define XKB_KEY_degree 0x00b0 /* U+00B0 DEGREE SIGN */ ++#define XKB_KEY_plusminus 0x00b1 /* U+00B1 PLUS-MINUS SIGN */ ++#define XKB_KEY_twosuperior 0x00b2 /* U+00B2 SUPERSCRIPT TWO */ ++#define XKB_KEY_threesuperior 0x00b3 /* U+00B3 SUPERSCRIPT THREE */ ++#define XKB_KEY_acute 0x00b4 /* U+00B4 ACUTE ACCENT */ ++#define XKB_KEY_mu 0x00b5 /* U+00B5 MICRO SIGN */ ++#define XKB_KEY_paragraph 0x00b6 /* U+00B6 PILCROW SIGN */ ++#define XKB_KEY_periodcentered 0x00b7 /* U+00B7 MIDDLE DOT */ ++#define XKB_KEY_cedilla 0x00b8 /* U+00B8 CEDILLA */ ++#define XKB_KEY_onesuperior 0x00b9 /* U+00B9 SUPERSCRIPT ONE */ ++#define XKB_KEY_masculine 0x00ba /* U+00BA MASCULINE ORDINAL INDICATOR */ ++#define XKB_KEY_guillemotright 0x00bb /* U+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */ ++#define XKB_KEY_onequarter 0x00bc /* U+00BC VULGAR FRACTION ONE QUARTER */ ++#define XKB_KEY_onehalf 0x00bd /* U+00BD VULGAR FRACTION ONE HALF */ ++#define XKB_KEY_threequarters 0x00be /* U+00BE VULGAR FRACTION THREE QUARTERS */ ++#define XKB_KEY_questiondown 0x00bf /* U+00BF INVERTED QUESTION MARK */ ++#define XKB_KEY_Agrave 0x00c0 /* U+00C0 LATIN CAPITAL LETTER A WITH GRAVE */ ++#define XKB_KEY_Aacute 0x00c1 /* U+00C1 LATIN CAPITAL LETTER A WITH ACUTE */ ++#define XKB_KEY_Acircumflex 0x00c2 /* U+00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX */ ++#define XKB_KEY_Atilde 0x00c3 /* U+00C3 LATIN CAPITAL LETTER A WITH TILDE */ ++#define XKB_KEY_Adiaeresis 0x00c4 /* U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS */ ++#define XKB_KEY_Aring 0x00c5 /* U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE */ ++#define XKB_KEY_AE 0x00c6 /* U+00C6 LATIN CAPITAL LETTER AE */ ++#define XKB_KEY_Ccedilla 0x00c7 /* U+00C7 LATIN CAPITAL LETTER C WITH CEDILLA */ ++#define XKB_KEY_Egrave 0x00c8 /* U+00C8 LATIN CAPITAL LETTER E WITH GRAVE */ ++#define XKB_KEY_Eacute 0x00c9 /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ ++#define XKB_KEY_Ecircumflex 0x00ca /* U+00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX */ ++#define XKB_KEY_Ediaeresis 0x00cb /* U+00CB LATIN CAPITAL LETTER E WITH DIAERESIS */ ++#define XKB_KEY_Igrave 0x00cc /* U+00CC LATIN CAPITAL LETTER I WITH GRAVE */ ++#define XKB_KEY_Iacute 0x00cd /* U+00CD LATIN CAPITAL LETTER I WITH ACUTE */ ++#define XKB_KEY_Icircumflex 0x00ce /* U+00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX */ ++#define XKB_KEY_Idiaeresis 0x00cf /* U+00CF LATIN CAPITAL LETTER I WITH DIAERESIS */ ++#define XKB_KEY_ETH 0x00d0 /* U+00D0 LATIN CAPITAL LETTER ETH */ ++#define XKB_KEY_Eth 0x00d0 /* deprecated */ ++#define XKB_KEY_Ntilde 0x00d1 /* U+00D1 LATIN CAPITAL LETTER N WITH TILDE */ ++#define XKB_KEY_Ograve 0x00d2 /* U+00D2 LATIN CAPITAL LETTER O WITH GRAVE */ ++#define XKB_KEY_Oacute 0x00d3 /* U+00D3 LATIN CAPITAL LETTER O WITH ACUTE */ ++#define XKB_KEY_Ocircumflex 0x00d4 /* U+00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX */ ++#define XKB_KEY_Otilde 0x00d5 /* U+00D5 LATIN CAPITAL LETTER O WITH TILDE */ ++#define XKB_KEY_Odiaeresis 0x00d6 /* U+00D6 LATIN CAPITAL LETTER O WITH DIAERESIS */ ++#define XKB_KEY_multiply 0x00d7 /* U+00D7 MULTIPLICATION SIGN */ ++#define XKB_KEY_Oslash 0x00d8 /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ ++#define XKB_KEY_Ooblique 0x00d8 /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ ++#define XKB_KEY_Ugrave 0x00d9 /* U+00D9 LATIN CAPITAL LETTER U WITH GRAVE */ ++#define XKB_KEY_Uacute 0x00da /* U+00DA LATIN CAPITAL LETTER U WITH ACUTE */ ++#define XKB_KEY_Ucircumflex 0x00db /* U+00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX */ ++#define XKB_KEY_Udiaeresis 0x00dc /* U+00DC LATIN CAPITAL LETTER U WITH DIAERESIS */ ++#define XKB_KEY_Yacute 0x00dd /* U+00DD LATIN CAPITAL LETTER Y WITH ACUTE */ ++#define XKB_KEY_THORN 0x00de /* U+00DE LATIN CAPITAL LETTER THORN */ ++#define XKB_KEY_Thorn 0x00de /* deprecated */ ++#define XKB_KEY_ssharp 0x00df /* U+00DF LATIN SMALL LETTER SHARP S */ ++#define XKB_KEY_agrave 0x00e0 /* U+00E0 LATIN SMALL LETTER A WITH GRAVE */ ++#define XKB_KEY_aacute 0x00e1 /* U+00E1 LATIN SMALL LETTER A WITH ACUTE */ ++#define XKB_KEY_acircumflex 0x00e2 /* U+00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX */ ++#define XKB_KEY_atilde 0x00e3 /* U+00E3 LATIN SMALL LETTER A WITH TILDE */ ++#define XKB_KEY_adiaeresis 0x00e4 /* U+00E4 LATIN SMALL LETTER A WITH DIAERESIS */ ++#define XKB_KEY_aring 0x00e5 /* U+00E5 LATIN SMALL LETTER A WITH RING ABOVE */ ++#define XKB_KEY_ae 0x00e6 /* U+00E6 LATIN SMALL LETTER AE */ ++#define XKB_KEY_ccedilla 0x00e7 /* U+00E7 LATIN SMALL LETTER C WITH CEDILLA */ ++#define XKB_KEY_egrave 0x00e8 /* U+00E8 LATIN SMALL LETTER E WITH GRAVE */ ++#define XKB_KEY_eacute 0x00e9 /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ ++#define XKB_KEY_ecircumflex 0x00ea /* U+00EA LATIN SMALL LETTER E WITH CIRCUMFLEX */ ++#define XKB_KEY_ediaeresis 0x00eb /* U+00EB LATIN SMALL LETTER E WITH DIAERESIS */ ++#define XKB_KEY_igrave 0x00ec /* U+00EC LATIN SMALL LETTER I WITH GRAVE */ ++#define XKB_KEY_iacute 0x00ed /* U+00ED LATIN SMALL LETTER I WITH ACUTE */ ++#define XKB_KEY_icircumflex 0x00ee /* U+00EE LATIN SMALL LETTER I WITH CIRCUMFLEX */ ++#define XKB_KEY_idiaeresis 0x00ef /* U+00EF LATIN SMALL LETTER I WITH DIAERESIS */ ++#define XKB_KEY_eth 0x00f0 /* U+00F0 LATIN SMALL LETTER ETH */ ++#define XKB_KEY_ntilde 0x00f1 /* U+00F1 LATIN SMALL LETTER N WITH TILDE */ ++#define XKB_KEY_ograve 0x00f2 /* U+00F2 LATIN SMALL LETTER O WITH GRAVE */ ++#define XKB_KEY_oacute 0x00f3 /* U+00F3 LATIN SMALL LETTER O WITH ACUTE */ ++#define XKB_KEY_ocircumflex 0x00f4 /* U+00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX */ ++#define XKB_KEY_otilde 0x00f5 /* U+00F5 LATIN SMALL LETTER O WITH TILDE */ ++#define XKB_KEY_odiaeresis 0x00f6 /* U+00F6 LATIN SMALL LETTER O WITH DIAERESIS */ ++#define XKB_KEY_division 0x00f7 /* U+00F7 DIVISION SIGN */ ++#define XKB_KEY_oslash 0x00f8 /* U+00F8 LATIN SMALL LETTER O WITH STROKE */ ++#define XKB_KEY_ooblique 0x00f8 /* U+00F8 LATIN SMALL LETTER O WITH STROKE */ ++#define XKB_KEY_ugrave 0x00f9 /* U+00F9 LATIN SMALL LETTER U WITH GRAVE */ ++#define XKB_KEY_uacute 0x00fa /* U+00FA LATIN SMALL LETTER U WITH ACUTE */ ++#define XKB_KEY_ucircumflex 0x00fb /* U+00FB LATIN SMALL LETTER U WITH CIRCUMFLEX */ ++#define XKB_KEY_udiaeresis 0x00fc /* U+00FC LATIN SMALL LETTER U WITH DIAERESIS */ ++#define XKB_KEY_yacute 0x00fd /* U+00FD LATIN SMALL LETTER Y WITH ACUTE */ ++#define XKB_KEY_thorn 0x00fe /* U+00FE LATIN SMALL LETTER THORN */ ++#define XKB_KEY_ydiaeresis 0x00ff /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ ++ ++/* ++ * Latin 2 ++ * Byte 3 = 1 ++ */ ++ ++#define XKB_KEY_Aogonek 0x01a1 /* U+0104 LATIN CAPITAL LETTER A WITH OGONEK */ ++#define XKB_KEY_breve 0x01a2 /* U+02D8 BREVE */ ++#define XKB_KEY_Lstroke 0x01a3 /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ ++#define XKB_KEY_Lcaron 0x01a5 /* U+013D LATIN CAPITAL LETTER L WITH CARON */ ++#define XKB_KEY_Sacute 0x01a6 /* U+015A LATIN CAPITAL LETTER S WITH ACUTE */ ++#define XKB_KEY_Scaron 0x01a9 /* U+0160 LATIN CAPITAL LETTER S WITH CARON */ ++#define XKB_KEY_Scedilla 0x01aa /* U+015E LATIN CAPITAL LETTER S WITH CEDILLA */ ++#define XKB_KEY_Tcaron 0x01ab /* U+0164 LATIN CAPITAL LETTER T WITH CARON */ ++#define XKB_KEY_Zacute 0x01ac /* U+0179 LATIN CAPITAL LETTER Z WITH ACUTE */ ++#define XKB_KEY_Zcaron 0x01ae /* U+017D LATIN CAPITAL LETTER Z WITH CARON */ ++#define XKB_KEY_Zabovedot 0x01af /* U+017B LATIN CAPITAL LETTER Z WITH DOT ABOVE */ ++#define XKB_KEY_aogonek 0x01b1 /* U+0105 LATIN SMALL LETTER A WITH OGONEK */ ++#define XKB_KEY_ogonek 0x01b2 /* U+02DB OGONEK */ ++#define XKB_KEY_lstroke 0x01b3 /* U+0142 LATIN SMALL LETTER L WITH STROKE */ ++#define XKB_KEY_lcaron 0x01b5 /* U+013E LATIN SMALL LETTER L WITH CARON */ ++#define XKB_KEY_sacute 0x01b6 /* U+015B LATIN SMALL LETTER S WITH ACUTE */ ++#define XKB_KEY_caron 0x01b7 /* U+02C7 CARON */ ++#define XKB_KEY_scaron 0x01b9 /* U+0161 LATIN SMALL LETTER S WITH CARON */ ++#define XKB_KEY_scedilla 0x01ba /* U+015F LATIN SMALL LETTER S WITH CEDILLA */ ++#define XKB_KEY_tcaron 0x01bb /* U+0165 LATIN SMALL LETTER T WITH CARON */ ++#define XKB_KEY_zacute 0x01bc /* U+017A LATIN SMALL LETTER Z WITH ACUTE */ ++#define XKB_KEY_doubleacute 0x01bd /* U+02DD DOUBLE ACUTE ACCENT */ ++#define XKB_KEY_zcaron 0x01be /* U+017E LATIN SMALL LETTER Z WITH CARON */ ++#define XKB_KEY_zabovedot 0x01bf /* U+017C LATIN SMALL LETTER Z WITH DOT ABOVE */ ++#define XKB_KEY_Racute 0x01c0 /* U+0154 LATIN CAPITAL LETTER R WITH ACUTE */ ++#define XKB_KEY_Abreve 0x01c3 /* U+0102 LATIN CAPITAL LETTER A WITH BREVE */ ++#define XKB_KEY_Lacute 0x01c5 /* U+0139 LATIN CAPITAL LETTER L WITH ACUTE */ ++#define XKB_KEY_Cacute 0x01c6 /* U+0106 LATIN CAPITAL LETTER C WITH ACUTE */ ++#define XKB_KEY_Ccaron 0x01c8 /* U+010C LATIN CAPITAL LETTER C WITH CARON */ ++#define XKB_KEY_Eogonek 0x01ca /* U+0118 LATIN CAPITAL LETTER E WITH OGONEK */ ++#define XKB_KEY_Ecaron 0x01cc /* U+011A LATIN CAPITAL LETTER E WITH CARON */ ++#define XKB_KEY_Dcaron 0x01cf /* U+010E LATIN CAPITAL LETTER D WITH CARON */ ++#define XKB_KEY_Dstroke 0x01d0 /* U+0110 LATIN CAPITAL LETTER D WITH STROKE */ ++#define XKB_KEY_Nacute 0x01d1 /* U+0143 LATIN CAPITAL LETTER N WITH ACUTE */ ++#define XKB_KEY_Ncaron 0x01d2 /* U+0147 LATIN CAPITAL LETTER N WITH CARON */ ++#define XKB_KEY_Odoubleacute 0x01d5 /* U+0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */ ++#define XKB_KEY_Rcaron 0x01d8 /* U+0158 LATIN CAPITAL LETTER R WITH CARON */ ++#define XKB_KEY_Uring 0x01d9 /* U+016E LATIN CAPITAL LETTER U WITH RING ABOVE */ ++#define XKB_KEY_Udoubleacute 0x01db /* U+0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */ ++#define XKB_KEY_Tcedilla 0x01de /* U+0162 LATIN CAPITAL LETTER T WITH CEDILLA */ ++#define XKB_KEY_racute 0x01e0 /* U+0155 LATIN SMALL LETTER R WITH ACUTE */ ++#define XKB_KEY_abreve 0x01e3 /* U+0103 LATIN SMALL LETTER A WITH BREVE */ ++#define XKB_KEY_lacute 0x01e5 /* U+013A LATIN SMALL LETTER L WITH ACUTE */ ++#define XKB_KEY_cacute 0x01e6 /* U+0107 LATIN SMALL LETTER C WITH ACUTE */ ++#define XKB_KEY_ccaron 0x01e8 /* U+010D LATIN SMALL LETTER C WITH CARON */ ++#define XKB_KEY_eogonek 0x01ea /* U+0119 LATIN SMALL LETTER E WITH OGONEK */ ++#define XKB_KEY_ecaron 0x01ec /* U+011B LATIN SMALL LETTER E WITH CARON */ ++#define XKB_KEY_dcaron 0x01ef /* U+010F LATIN SMALL LETTER D WITH CARON */ ++#define XKB_KEY_dstroke 0x01f0 /* U+0111 LATIN SMALL LETTER D WITH STROKE */ ++#define XKB_KEY_nacute 0x01f1 /* U+0144 LATIN SMALL LETTER N WITH ACUTE */ ++#define XKB_KEY_ncaron 0x01f2 /* U+0148 LATIN SMALL LETTER N WITH CARON */ ++#define XKB_KEY_odoubleacute 0x01f5 /* U+0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE */ ++#define XKB_KEY_rcaron 0x01f8 /* U+0159 LATIN SMALL LETTER R WITH CARON */ ++#define XKB_KEY_uring 0x01f9 /* U+016F LATIN SMALL LETTER U WITH RING ABOVE */ ++#define XKB_KEY_udoubleacute 0x01fb /* U+0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE */ ++#define XKB_KEY_tcedilla 0x01fe /* U+0163 LATIN SMALL LETTER T WITH CEDILLA */ ++#define XKB_KEY_abovedot 0x01ff /* U+02D9 DOT ABOVE */ ++ ++/* ++ * Latin 3 ++ * Byte 3 = 2 ++ */ ++ ++#define XKB_KEY_Hstroke 0x02a1 /* U+0126 LATIN CAPITAL LETTER H WITH STROKE */ ++#define XKB_KEY_Hcircumflex 0x02a6 /* U+0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX */ ++#define XKB_KEY_Iabovedot 0x02a9 /* U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE */ ++#define XKB_KEY_Gbreve 0x02ab /* U+011E LATIN CAPITAL LETTER G WITH BREVE */ ++#define XKB_KEY_Jcircumflex 0x02ac /* U+0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX */ ++#define XKB_KEY_hstroke 0x02b1 /* U+0127 LATIN SMALL LETTER H WITH STROKE */ ++#define XKB_KEY_hcircumflex 0x02b6 /* U+0125 LATIN SMALL LETTER H WITH CIRCUMFLEX */ ++#define XKB_KEY_idotless 0x02b9 /* U+0131 LATIN SMALL LETTER DOTLESS I */ ++#define XKB_KEY_gbreve 0x02bb /* U+011F LATIN SMALL LETTER G WITH BREVE */ ++#define XKB_KEY_jcircumflex 0x02bc /* U+0135 LATIN SMALL LETTER J WITH CIRCUMFLEX */ ++#define XKB_KEY_Cabovedot 0x02c5 /* U+010A LATIN CAPITAL LETTER C WITH DOT ABOVE */ ++#define XKB_KEY_Ccircumflex 0x02c6 /* U+0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX */ ++#define XKB_KEY_Gabovedot 0x02d5 /* U+0120 LATIN CAPITAL LETTER G WITH DOT ABOVE */ ++#define XKB_KEY_Gcircumflex 0x02d8 /* U+011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX */ ++#define XKB_KEY_Ubreve 0x02dd /* U+016C LATIN CAPITAL LETTER U WITH BREVE */ ++#define XKB_KEY_Scircumflex 0x02de /* U+015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX */ ++#define XKB_KEY_cabovedot 0x02e5 /* U+010B LATIN SMALL LETTER C WITH DOT ABOVE */ ++#define XKB_KEY_ccircumflex 0x02e6 /* U+0109 LATIN SMALL LETTER C WITH CIRCUMFLEX */ ++#define XKB_KEY_gabovedot 0x02f5 /* U+0121 LATIN SMALL LETTER G WITH DOT ABOVE */ ++#define XKB_KEY_gcircumflex 0x02f8 /* U+011D LATIN SMALL LETTER G WITH CIRCUMFLEX */ ++#define XKB_KEY_ubreve 0x02fd /* U+016D LATIN SMALL LETTER U WITH BREVE */ ++#define XKB_KEY_scircumflex 0x02fe /* U+015D LATIN SMALL LETTER S WITH CIRCUMFLEX */ ++ ++ ++/* ++ * Latin 4 ++ * Byte 3 = 3 ++ */ ++ ++#define XKB_KEY_kra 0x03a2 /* U+0138 LATIN SMALL LETTER KRA */ ++#define XKB_KEY_kappa 0x03a2 /* deprecated */ ++#define XKB_KEY_Rcedilla 0x03a3 /* U+0156 LATIN CAPITAL LETTER R WITH CEDILLA */ ++#define XKB_KEY_Itilde 0x03a5 /* U+0128 LATIN CAPITAL LETTER I WITH TILDE */ ++#define XKB_KEY_Lcedilla 0x03a6 /* U+013B LATIN CAPITAL LETTER L WITH CEDILLA */ ++#define XKB_KEY_Emacron 0x03aa /* U+0112 LATIN CAPITAL LETTER E WITH MACRON */ ++#define XKB_KEY_Gcedilla 0x03ab /* U+0122 LATIN CAPITAL LETTER G WITH CEDILLA */ ++#define XKB_KEY_Tslash 0x03ac /* U+0166 LATIN CAPITAL LETTER T WITH STROKE */ ++#define XKB_KEY_rcedilla 0x03b3 /* U+0157 LATIN SMALL LETTER R WITH CEDILLA */ ++#define XKB_KEY_itilde 0x03b5 /* U+0129 LATIN SMALL LETTER I WITH TILDE */ ++#define XKB_KEY_lcedilla 0x03b6 /* U+013C LATIN SMALL LETTER L WITH CEDILLA */ ++#define XKB_KEY_emacron 0x03ba /* U+0113 LATIN SMALL LETTER E WITH MACRON */ ++#define XKB_KEY_gcedilla 0x03bb /* U+0123 LATIN SMALL LETTER G WITH CEDILLA */ ++#define XKB_KEY_tslash 0x03bc /* U+0167 LATIN SMALL LETTER T WITH STROKE */ ++#define XKB_KEY_ENG 0x03bd /* U+014A LATIN CAPITAL LETTER ENG */ ++#define XKB_KEY_eng 0x03bf /* U+014B LATIN SMALL LETTER ENG */ ++#define XKB_KEY_Amacron 0x03c0 /* U+0100 LATIN CAPITAL LETTER A WITH MACRON */ ++#define XKB_KEY_Iogonek 0x03c7 /* U+012E LATIN CAPITAL LETTER I WITH OGONEK */ ++#define XKB_KEY_Eabovedot 0x03cc /* U+0116 LATIN CAPITAL LETTER E WITH DOT ABOVE */ ++#define XKB_KEY_Imacron 0x03cf /* U+012A LATIN CAPITAL LETTER I WITH MACRON */ ++#define XKB_KEY_Ncedilla 0x03d1 /* U+0145 LATIN CAPITAL LETTER N WITH CEDILLA */ ++#define XKB_KEY_Omacron 0x03d2 /* U+014C LATIN CAPITAL LETTER O WITH MACRON */ ++#define XKB_KEY_Kcedilla 0x03d3 /* U+0136 LATIN CAPITAL LETTER K WITH CEDILLA */ ++#define XKB_KEY_Uogonek 0x03d9 /* U+0172 LATIN CAPITAL LETTER U WITH OGONEK */ ++#define XKB_KEY_Utilde 0x03dd /* U+0168 LATIN CAPITAL LETTER U WITH TILDE */ ++#define XKB_KEY_Umacron 0x03de /* U+016A LATIN CAPITAL LETTER U WITH MACRON */ ++#define XKB_KEY_amacron 0x03e0 /* U+0101 LATIN SMALL LETTER A WITH MACRON */ ++#define XKB_KEY_iogonek 0x03e7 /* U+012F LATIN SMALL LETTER I WITH OGONEK */ ++#define XKB_KEY_eabovedot 0x03ec /* U+0117 LATIN SMALL LETTER E WITH DOT ABOVE */ ++#define XKB_KEY_imacron 0x03ef /* U+012B LATIN SMALL LETTER I WITH MACRON */ ++#define XKB_KEY_ncedilla 0x03f1 /* U+0146 LATIN SMALL LETTER N WITH CEDILLA */ ++#define XKB_KEY_omacron 0x03f2 /* U+014D LATIN SMALL LETTER O WITH MACRON */ ++#define XKB_KEY_kcedilla 0x03f3 /* U+0137 LATIN SMALL LETTER K WITH CEDILLA */ ++#define XKB_KEY_uogonek 0x03f9 /* U+0173 LATIN SMALL LETTER U WITH OGONEK */ ++#define XKB_KEY_utilde 0x03fd /* U+0169 LATIN SMALL LETTER U WITH TILDE */ ++#define XKB_KEY_umacron 0x03fe /* U+016B LATIN SMALL LETTER U WITH MACRON */ ++ ++/* ++ * Latin 8 ++ */ ++#define XKB_KEY_Wcircumflex 0x1000174 /* U+0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX */ ++#define XKB_KEY_wcircumflex 0x1000175 /* U+0175 LATIN SMALL LETTER W WITH CIRCUMFLEX */ ++#define XKB_KEY_Ycircumflex 0x1000176 /* U+0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX */ ++#define XKB_KEY_ycircumflex 0x1000177 /* U+0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX */ ++#define XKB_KEY_Babovedot 0x1001e02 /* U+1E02 LATIN CAPITAL LETTER B WITH DOT ABOVE */ ++#define XKB_KEY_babovedot 0x1001e03 /* U+1E03 LATIN SMALL LETTER B WITH DOT ABOVE */ ++#define XKB_KEY_Dabovedot 0x1001e0a /* U+1E0A LATIN CAPITAL LETTER D WITH DOT ABOVE */ ++#define XKB_KEY_dabovedot 0x1001e0b /* U+1E0B LATIN SMALL LETTER D WITH DOT ABOVE */ ++#define XKB_KEY_Fabovedot 0x1001e1e /* U+1E1E LATIN CAPITAL LETTER F WITH DOT ABOVE */ ++#define XKB_KEY_fabovedot 0x1001e1f /* U+1E1F LATIN SMALL LETTER F WITH DOT ABOVE */ ++#define XKB_KEY_Mabovedot 0x1001e40 /* U+1E40 LATIN CAPITAL LETTER M WITH DOT ABOVE */ ++#define XKB_KEY_mabovedot 0x1001e41 /* U+1E41 LATIN SMALL LETTER M WITH DOT ABOVE */ ++#define XKB_KEY_Pabovedot 0x1001e56 /* U+1E56 LATIN CAPITAL LETTER P WITH DOT ABOVE */ ++#define XKB_KEY_pabovedot 0x1001e57 /* U+1E57 LATIN SMALL LETTER P WITH DOT ABOVE */ ++#define XKB_KEY_Sabovedot 0x1001e60 /* U+1E60 LATIN CAPITAL LETTER S WITH DOT ABOVE */ ++#define XKB_KEY_sabovedot 0x1001e61 /* U+1E61 LATIN SMALL LETTER S WITH DOT ABOVE */ ++#define XKB_KEY_Tabovedot 0x1001e6a /* U+1E6A LATIN CAPITAL LETTER T WITH DOT ABOVE */ ++#define XKB_KEY_tabovedot 0x1001e6b /* U+1E6B LATIN SMALL LETTER T WITH DOT ABOVE */ ++#define XKB_KEY_Wgrave 0x1001e80 /* U+1E80 LATIN CAPITAL LETTER W WITH GRAVE */ ++#define XKB_KEY_wgrave 0x1001e81 /* U+1E81 LATIN SMALL LETTER W WITH GRAVE */ ++#define XKB_KEY_Wacute 0x1001e82 /* U+1E82 LATIN CAPITAL LETTER W WITH ACUTE */ ++#define XKB_KEY_wacute 0x1001e83 /* U+1E83 LATIN SMALL LETTER W WITH ACUTE */ ++#define XKB_KEY_Wdiaeresis 0x1001e84 /* U+1E84 LATIN CAPITAL LETTER W WITH DIAERESIS */ ++#define XKB_KEY_wdiaeresis 0x1001e85 /* U+1E85 LATIN SMALL LETTER W WITH DIAERESIS */ ++#define XKB_KEY_Ygrave 0x1001ef2 /* U+1EF2 LATIN CAPITAL LETTER Y WITH GRAVE */ ++#define XKB_KEY_ygrave 0x1001ef3 /* U+1EF3 LATIN SMALL LETTER Y WITH GRAVE */ ++ ++/* ++ * Latin 9 ++ * Byte 3 = 0x13 ++ */ ++ ++#define XKB_KEY_OE 0x13bc /* U+0152 LATIN CAPITAL LIGATURE OE */ ++#define XKB_KEY_oe 0x13bd /* U+0153 LATIN SMALL LIGATURE OE */ ++#define XKB_KEY_Ydiaeresis 0x13be /* U+0178 LATIN CAPITAL LETTER Y WITH DIAERESIS */ ++ ++/* ++ * Katakana ++ * Byte 3 = 4 ++ */ ++ ++#define XKB_KEY_overline 0x047e /* U+203E OVERLINE */ ++#define XKB_KEY_kana_fullstop 0x04a1 /* U+3002 IDEOGRAPHIC FULL STOP */ ++#define XKB_KEY_kana_openingbracket 0x04a2 /* U+300C LEFT CORNER BRACKET */ ++#define XKB_KEY_kana_closingbracket 0x04a3 /* U+300D RIGHT CORNER BRACKET */ ++#define XKB_KEY_kana_comma 0x04a4 /* U+3001 IDEOGRAPHIC COMMA */ ++#define XKB_KEY_kana_conjunctive 0x04a5 /* U+30FB KATAKANA MIDDLE DOT */ ++#define XKB_KEY_kana_middledot 0x04a5 /* deprecated */ ++#define XKB_KEY_kana_WO 0x04a6 /* U+30F2 KATAKANA LETTER WO */ ++#define XKB_KEY_kana_a 0x04a7 /* U+30A1 KATAKANA LETTER SMALL A */ ++#define XKB_KEY_kana_i 0x04a8 /* U+30A3 KATAKANA LETTER SMALL I */ ++#define XKB_KEY_kana_u 0x04a9 /* U+30A5 KATAKANA LETTER SMALL U */ ++#define XKB_KEY_kana_e 0x04aa /* U+30A7 KATAKANA LETTER SMALL E */ ++#define XKB_KEY_kana_o 0x04ab /* U+30A9 KATAKANA LETTER SMALL O */ ++#define XKB_KEY_kana_ya 0x04ac /* U+30E3 KATAKANA LETTER SMALL YA */ ++#define XKB_KEY_kana_yu 0x04ad /* U+30E5 KATAKANA LETTER SMALL YU */ ++#define XKB_KEY_kana_yo 0x04ae /* U+30E7 KATAKANA LETTER SMALL YO */ ++#define XKB_KEY_kana_tsu 0x04af /* U+30C3 KATAKANA LETTER SMALL TU */ ++#define XKB_KEY_kana_tu 0x04af /* deprecated */ ++#define XKB_KEY_prolongedsound 0x04b0 /* U+30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK */ ++#define XKB_KEY_kana_A 0x04b1 /* U+30A2 KATAKANA LETTER A */ ++#define XKB_KEY_kana_I 0x04b2 /* U+30A4 KATAKANA LETTER I */ ++#define XKB_KEY_kana_U 0x04b3 /* U+30A6 KATAKANA LETTER U */ ++#define XKB_KEY_kana_E 0x04b4 /* U+30A8 KATAKANA LETTER E */ ++#define XKB_KEY_kana_O 0x04b5 /* U+30AA KATAKANA LETTER O */ ++#define XKB_KEY_kana_KA 0x04b6 /* U+30AB KATAKANA LETTER KA */ ++#define XKB_KEY_kana_KI 0x04b7 /* U+30AD KATAKANA LETTER KI */ ++#define XKB_KEY_kana_KU 0x04b8 /* U+30AF KATAKANA LETTER KU */ ++#define XKB_KEY_kana_KE 0x04b9 /* U+30B1 KATAKANA LETTER KE */ ++#define XKB_KEY_kana_KO 0x04ba /* U+30B3 KATAKANA LETTER KO */ ++#define XKB_KEY_kana_SA 0x04bb /* U+30B5 KATAKANA LETTER SA */ ++#define XKB_KEY_kana_SHI 0x04bc /* U+30B7 KATAKANA LETTER SI */ ++#define XKB_KEY_kana_SU 0x04bd /* U+30B9 KATAKANA LETTER SU */ ++#define XKB_KEY_kana_SE 0x04be /* U+30BB KATAKANA LETTER SE */ ++#define XKB_KEY_kana_SO 0x04bf /* U+30BD KATAKANA LETTER SO */ ++#define XKB_KEY_kana_TA 0x04c0 /* U+30BF KATAKANA LETTER TA */ ++#define XKB_KEY_kana_CHI 0x04c1 /* U+30C1 KATAKANA LETTER TI */ ++#define XKB_KEY_kana_TI 0x04c1 /* deprecated */ ++#define XKB_KEY_kana_TSU 0x04c2 /* U+30C4 KATAKANA LETTER TU */ ++#define XKB_KEY_kana_TU 0x04c2 /* deprecated */ ++#define XKB_KEY_kana_TE 0x04c3 /* U+30C6 KATAKANA LETTER TE */ ++#define XKB_KEY_kana_TO 0x04c4 /* U+30C8 KATAKANA LETTER TO */ ++#define XKB_KEY_kana_NA 0x04c5 /* U+30CA KATAKANA LETTER NA */ ++#define XKB_KEY_kana_NI 0x04c6 /* U+30CB KATAKANA LETTER NI */ ++#define XKB_KEY_kana_NU 0x04c7 /* U+30CC KATAKANA LETTER NU */ ++#define XKB_KEY_kana_NE 0x04c8 /* U+30CD KATAKANA LETTER NE */ ++#define XKB_KEY_kana_NO 0x04c9 /* U+30CE KATAKANA LETTER NO */ ++#define XKB_KEY_kana_HA 0x04ca /* U+30CF KATAKANA LETTER HA */ ++#define XKB_KEY_kana_HI 0x04cb /* U+30D2 KATAKANA LETTER HI */ ++#define XKB_KEY_kana_FU 0x04cc /* U+30D5 KATAKANA LETTER HU */ ++#define XKB_KEY_kana_HU 0x04cc /* deprecated */ ++#define XKB_KEY_kana_HE 0x04cd /* U+30D8 KATAKANA LETTER HE */ ++#define XKB_KEY_kana_HO 0x04ce /* U+30DB KATAKANA LETTER HO */ ++#define XKB_KEY_kana_MA 0x04cf /* U+30DE KATAKANA LETTER MA */ ++#define XKB_KEY_kana_MI 0x04d0 /* U+30DF KATAKANA LETTER MI */ ++#define XKB_KEY_kana_MU 0x04d1 /* U+30E0 KATAKANA LETTER MU */ ++#define XKB_KEY_kana_ME 0x04d2 /* U+30E1 KATAKANA LETTER ME */ ++#define XKB_KEY_kana_MO 0x04d3 /* U+30E2 KATAKANA LETTER MO */ ++#define XKB_KEY_kana_YA 0x04d4 /* U+30E4 KATAKANA LETTER YA */ ++#define XKB_KEY_kana_YU 0x04d5 /* U+30E6 KATAKANA LETTER YU */ ++#define XKB_KEY_kana_YO 0x04d6 /* U+30E8 KATAKANA LETTER YO */ ++#define XKB_KEY_kana_RA 0x04d7 /* U+30E9 KATAKANA LETTER RA */ ++#define XKB_KEY_kana_RI 0x04d8 /* U+30EA KATAKANA LETTER RI */ ++#define XKB_KEY_kana_RU 0x04d9 /* U+30EB KATAKANA LETTER RU */ ++#define XKB_KEY_kana_RE 0x04da /* U+30EC KATAKANA LETTER RE */ ++#define XKB_KEY_kana_RO 0x04db /* U+30ED KATAKANA LETTER RO */ ++#define XKB_KEY_kana_WA 0x04dc /* U+30EF KATAKANA LETTER WA */ ++#define XKB_KEY_kana_N 0x04dd /* U+30F3 KATAKANA LETTER N */ ++#define XKB_KEY_voicedsound 0x04de /* U+309B KATAKANA-HIRAGANA VOICED SOUND MARK */ ++#define XKB_KEY_semivoicedsound 0x04df /* U+309C KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */ ++#define XKB_KEY_kana_switch 0xff7e /* Alias for mode_switch */ ++ ++/* ++ * Arabic ++ * Byte 3 = 5 ++ */ ++ ++#define XKB_KEY_Farsi_0 0x10006f0 /* U+06F0 EXTENDED ARABIC-INDIC DIGIT ZERO */ ++#define XKB_KEY_Farsi_1 0x10006f1 /* U+06F1 EXTENDED ARABIC-INDIC DIGIT ONE */ ++#define XKB_KEY_Farsi_2 0x10006f2 /* U+06F2 EXTENDED ARABIC-INDIC DIGIT TWO */ ++#define XKB_KEY_Farsi_3 0x10006f3 /* U+06F3 EXTENDED ARABIC-INDIC DIGIT THREE */ ++#define XKB_KEY_Farsi_4 0x10006f4 /* U+06F4 EXTENDED ARABIC-INDIC DIGIT FOUR */ ++#define XKB_KEY_Farsi_5 0x10006f5 /* U+06F5 EXTENDED ARABIC-INDIC DIGIT FIVE */ ++#define XKB_KEY_Farsi_6 0x10006f6 /* U+06F6 EXTENDED ARABIC-INDIC DIGIT SIX */ ++#define XKB_KEY_Farsi_7 0x10006f7 /* U+06F7 EXTENDED ARABIC-INDIC DIGIT SEVEN */ ++#define XKB_KEY_Farsi_8 0x10006f8 /* U+06F8 EXTENDED ARABIC-INDIC DIGIT EIGHT */ ++#define XKB_KEY_Farsi_9 0x10006f9 /* U+06F9 EXTENDED ARABIC-INDIC DIGIT NINE */ ++#define XKB_KEY_Arabic_percent 0x100066a /* U+066A ARABIC PERCENT SIGN */ ++#define XKB_KEY_Arabic_superscript_alef 0x1000670 /* U+0670 ARABIC LETTER SUPERSCRIPT ALEF */ ++#define XKB_KEY_Arabic_tteh 0x1000679 /* U+0679 ARABIC LETTER TTEH */ ++#define XKB_KEY_Arabic_peh 0x100067e /* U+067E ARABIC LETTER PEH */ ++#define XKB_KEY_Arabic_tcheh 0x1000686 /* U+0686 ARABIC LETTER TCHEH */ ++#define XKB_KEY_Arabic_ddal 0x1000688 /* U+0688 ARABIC LETTER DDAL */ ++#define XKB_KEY_Arabic_rreh 0x1000691 /* U+0691 ARABIC LETTER RREH */ ++#define XKB_KEY_Arabic_comma 0x05ac /* U+060C ARABIC COMMA */ ++#define XKB_KEY_Arabic_fullstop 0x10006d4 /* U+06D4 ARABIC FULL STOP */ ++#define XKB_KEY_Arabic_0 0x1000660 /* U+0660 ARABIC-INDIC DIGIT ZERO */ ++#define XKB_KEY_Arabic_1 0x1000661 /* U+0661 ARABIC-INDIC DIGIT ONE */ ++#define XKB_KEY_Arabic_2 0x1000662 /* U+0662 ARABIC-INDIC DIGIT TWO */ ++#define XKB_KEY_Arabic_3 0x1000663 /* U+0663 ARABIC-INDIC DIGIT THREE */ ++#define XKB_KEY_Arabic_4 0x1000664 /* U+0664 ARABIC-INDIC DIGIT FOUR */ ++#define XKB_KEY_Arabic_5 0x1000665 /* U+0665 ARABIC-INDIC DIGIT FIVE */ ++#define XKB_KEY_Arabic_6 0x1000666 /* U+0666 ARABIC-INDIC DIGIT SIX */ ++#define XKB_KEY_Arabic_7 0x1000667 /* U+0667 ARABIC-INDIC DIGIT SEVEN */ ++#define XKB_KEY_Arabic_8 0x1000668 /* U+0668 ARABIC-INDIC DIGIT EIGHT */ ++#define XKB_KEY_Arabic_9 0x1000669 /* U+0669 ARABIC-INDIC DIGIT NINE */ ++#define XKB_KEY_Arabic_semicolon 0x05bb /* U+061B ARABIC SEMICOLON */ ++#define XKB_KEY_Arabic_question_mark 0x05bf /* U+061F ARABIC QUESTION MARK */ ++#define XKB_KEY_Arabic_hamza 0x05c1 /* U+0621 ARABIC LETTER HAMZA */ ++#define XKB_KEY_Arabic_maddaonalef 0x05c2 /* U+0622 ARABIC LETTER ALEF WITH MADDA ABOVE */ ++#define XKB_KEY_Arabic_hamzaonalef 0x05c3 /* U+0623 ARABIC LETTER ALEF WITH HAMZA ABOVE */ ++#define XKB_KEY_Arabic_hamzaonwaw 0x05c4 /* U+0624 ARABIC LETTER WAW WITH HAMZA ABOVE */ ++#define XKB_KEY_Arabic_hamzaunderalef 0x05c5 /* U+0625 ARABIC LETTER ALEF WITH HAMZA BELOW */ ++#define XKB_KEY_Arabic_hamzaonyeh 0x05c6 /* U+0626 ARABIC LETTER YEH WITH HAMZA ABOVE */ ++#define XKB_KEY_Arabic_alef 0x05c7 /* U+0627 ARABIC LETTER ALEF */ ++#define XKB_KEY_Arabic_beh 0x05c8 /* U+0628 ARABIC LETTER BEH */ ++#define XKB_KEY_Arabic_tehmarbuta 0x05c9 /* U+0629 ARABIC LETTER TEH MARBUTA */ ++#define XKB_KEY_Arabic_teh 0x05ca /* U+062A ARABIC LETTER TEH */ ++#define XKB_KEY_Arabic_theh 0x05cb /* U+062B ARABIC LETTER THEH */ ++#define XKB_KEY_Arabic_jeem 0x05cc /* U+062C ARABIC LETTER JEEM */ ++#define XKB_KEY_Arabic_hah 0x05cd /* U+062D ARABIC LETTER HAH */ ++#define XKB_KEY_Arabic_khah 0x05ce /* U+062E ARABIC LETTER KHAH */ ++#define XKB_KEY_Arabic_dal 0x05cf /* U+062F ARABIC LETTER DAL */ ++#define XKB_KEY_Arabic_thal 0x05d0 /* U+0630 ARABIC LETTER THAL */ ++#define XKB_KEY_Arabic_ra 0x05d1 /* U+0631 ARABIC LETTER REH */ ++#define XKB_KEY_Arabic_zain 0x05d2 /* U+0632 ARABIC LETTER ZAIN */ ++#define XKB_KEY_Arabic_seen 0x05d3 /* U+0633 ARABIC LETTER SEEN */ ++#define XKB_KEY_Arabic_sheen 0x05d4 /* U+0634 ARABIC LETTER SHEEN */ ++#define XKB_KEY_Arabic_sad 0x05d5 /* U+0635 ARABIC LETTER SAD */ ++#define XKB_KEY_Arabic_dad 0x05d6 /* U+0636 ARABIC LETTER DAD */ ++#define XKB_KEY_Arabic_tah 0x05d7 /* U+0637 ARABIC LETTER TAH */ ++#define XKB_KEY_Arabic_zah 0x05d8 /* U+0638 ARABIC LETTER ZAH */ ++#define XKB_KEY_Arabic_ain 0x05d9 /* U+0639 ARABIC LETTER AIN */ ++#define XKB_KEY_Arabic_ghain 0x05da /* U+063A ARABIC LETTER GHAIN */ ++#define XKB_KEY_Arabic_tatweel 0x05e0 /* U+0640 ARABIC TATWEEL */ ++#define XKB_KEY_Arabic_feh 0x05e1 /* U+0641 ARABIC LETTER FEH */ ++#define XKB_KEY_Arabic_qaf 0x05e2 /* U+0642 ARABIC LETTER QAF */ ++#define XKB_KEY_Arabic_kaf 0x05e3 /* U+0643 ARABIC LETTER KAF */ ++#define XKB_KEY_Arabic_lam 0x05e4 /* U+0644 ARABIC LETTER LAM */ ++#define XKB_KEY_Arabic_meem 0x05e5 /* U+0645 ARABIC LETTER MEEM */ ++#define XKB_KEY_Arabic_noon 0x05e6 /* U+0646 ARABIC LETTER NOON */ ++#define XKB_KEY_Arabic_ha 0x05e7 /* U+0647 ARABIC LETTER HEH */ ++#define XKB_KEY_Arabic_heh 0x05e7 /* deprecated */ ++#define XKB_KEY_Arabic_waw 0x05e8 /* U+0648 ARABIC LETTER WAW */ ++#define XKB_KEY_Arabic_alefmaksura 0x05e9 /* U+0649 ARABIC LETTER ALEF MAKSURA */ ++#define XKB_KEY_Arabic_yeh 0x05ea /* U+064A ARABIC LETTER YEH */ ++#define XKB_KEY_Arabic_fathatan 0x05eb /* U+064B ARABIC FATHATAN */ ++#define XKB_KEY_Arabic_dammatan 0x05ec /* U+064C ARABIC DAMMATAN */ ++#define XKB_KEY_Arabic_kasratan 0x05ed /* U+064D ARABIC KASRATAN */ ++#define XKB_KEY_Arabic_fatha 0x05ee /* U+064E ARABIC FATHA */ ++#define XKB_KEY_Arabic_damma 0x05ef /* U+064F ARABIC DAMMA */ ++#define XKB_KEY_Arabic_kasra 0x05f0 /* U+0650 ARABIC KASRA */ ++#define XKB_KEY_Arabic_shadda 0x05f1 /* U+0651 ARABIC SHADDA */ ++#define XKB_KEY_Arabic_sukun 0x05f2 /* U+0652 ARABIC SUKUN */ ++#define XKB_KEY_Arabic_madda_above 0x1000653 /* U+0653 ARABIC MADDAH ABOVE */ ++#define XKB_KEY_Arabic_hamza_above 0x1000654 /* U+0654 ARABIC HAMZA ABOVE */ ++#define XKB_KEY_Arabic_hamza_below 0x1000655 /* U+0655 ARABIC HAMZA BELOW */ ++#define XKB_KEY_Arabic_jeh 0x1000698 /* U+0698 ARABIC LETTER JEH */ ++#define XKB_KEY_Arabic_veh 0x10006a4 /* U+06A4 ARABIC LETTER VEH */ ++#define XKB_KEY_Arabic_keheh 0x10006a9 /* U+06A9 ARABIC LETTER KEHEH */ ++#define XKB_KEY_Arabic_gaf 0x10006af /* U+06AF ARABIC LETTER GAF */ ++#define XKB_KEY_Arabic_noon_ghunna 0x10006ba /* U+06BA ARABIC LETTER NOON GHUNNA */ ++#define XKB_KEY_Arabic_heh_doachashmee 0x10006be /* U+06BE ARABIC LETTER HEH DOACHASHMEE */ ++#define XKB_KEY_Farsi_yeh 0x10006cc /* U+06CC ARABIC LETTER FARSI YEH */ ++#define XKB_KEY_Arabic_farsi_yeh 0x10006cc /* U+06CC ARABIC LETTER FARSI YEH */ ++#define XKB_KEY_Arabic_yeh_baree 0x10006d2 /* U+06D2 ARABIC LETTER YEH BARREE */ ++#define XKB_KEY_Arabic_heh_goal 0x10006c1 /* U+06C1 ARABIC LETTER HEH GOAL */ ++#define XKB_KEY_Arabic_switch 0xff7e /* Alias for mode_switch */ ++ ++/* ++ * Cyrillic ++ * Byte 3 = 6 ++ */ ++#define XKB_KEY_Cyrillic_GHE_bar 0x1000492 /* U+0492 CYRILLIC CAPITAL LETTER GHE WITH STROKE */ ++#define XKB_KEY_Cyrillic_ghe_bar 0x1000493 /* U+0493 CYRILLIC SMALL LETTER GHE WITH STROKE */ ++#define XKB_KEY_Cyrillic_ZHE_descender 0x1000496 /* U+0496 CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER */ ++#define XKB_KEY_Cyrillic_zhe_descender 0x1000497 /* U+0497 CYRILLIC SMALL LETTER ZHE WITH DESCENDER */ ++#define XKB_KEY_Cyrillic_KA_descender 0x100049a /* U+049A CYRILLIC CAPITAL LETTER KA WITH DESCENDER */ ++#define XKB_KEY_Cyrillic_ka_descender 0x100049b /* U+049B CYRILLIC SMALL LETTER KA WITH DESCENDER */ ++#define XKB_KEY_Cyrillic_KA_vertstroke 0x100049c /* U+049C CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE */ ++#define XKB_KEY_Cyrillic_ka_vertstroke 0x100049d /* U+049D CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE */ ++#define XKB_KEY_Cyrillic_EN_descender 0x10004a2 /* U+04A2 CYRILLIC CAPITAL LETTER EN WITH DESCENDER */ ++#define XKB_KEY_Cyrillic_en_descender 0x10004a3 /* U+04A3 CYRILLIC SMALL LETTER EN WITH DESCENDER */ ++#define XKB_KEY_Cyrillic_U_straight 0x10004ae /* U+04AE CYRILLIC CAPITAL LETTER STRAIGHT U */ ++#define XKB_KEY_Cyrillic_u_straight 0x10004af /* U+04AF CYRILLIC SMALL LETTER STRAIGHT U */ ++#define XKB_KEY_Cyrillic_U_straight_bar 0x10004b0 /* U+04B0 CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE */ ++#define XKB_KEY_Cyrillic_u_straight_bar 0x10004b1 /* U+04B1 CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE */ ++#define XKB_KEY_Cyrillic_HA_descender 0x10004b2 /* U+04B2 CYRILLIC CAPITAL LETTER HA WITH DESCENDER */ ++#define XKB_KEY_Cyrillic_ha_descender 0x10004b3 /* U+04B3 CYRILLIC SMALL LETTER HA WITH DESCENDER */ ++#define XKB_KEY_Cyrillic_CHE_descender 0x10004b6 /* U+04B6 CYRILLIC CAPITAL LETTER CHE WITH DESCENDER */ ++#define XKB_KEY_Cyrillic_che_descender 0x10004b7 /* U+04B7 CYRILLIC SMALL LETTER CHE WITH DESCENDER */ ++#define XKB_KEY_Cyrillic_CHE_vertstroke 0x10004b8 /* U+04B8 CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE */ ++#define XKB_KEY_Cyrillic_che_vertstroke 0x10004b9 /* U+04B9 CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE */ ++#define XKB_KEY_Cyrillic_SHHA 0x10004ba /* U+04BA CYRILLIC CAPITAL LETTER SHHA */ ++#define XKB_KEY_Cyrillic_shha 0x10004bb /* U+04BB CYRILLIC SMALL LETTER SHHA */ ++ ++#define XKB_KEY_Cyrillic_SCHWA 0x10004d8 /* U+04D8 CYRILLIC CAPITAL LETTER SCHWA */ ++#define XKB_KEY_Cyrillic_schwa 0x10004d9 /* U+04D9 CYRILLIC SMALL LETTER SCHWA */ ++#define XKB_KEY_Cyrillic_I_macron 0x10004e2 /* U+04E2 CYRILLIC CAPITAL LETTER I WITH MACRON */ ++#define XKB_KEY_Cyrillic_i_macron 0x10004e3 /* U+04E3 CYRILLIC SMALL LETTER I WITH MACRON */ ++#define XKB_KEY_Cyrillic_O_bar 0x10004e8 /* U+04E8 CYRILLIC CAPITAL LETTER BARRED O */ ++#define XKB_KEY_Cyrillic_o_bar 0x10004e9 /* U+04E9 CYRILLIC SMALL LETTER BARRED O */ ++#define XKB_KEY_Cyrillic_U_macron 0x10004ee /* U+04EE CYRILLIC CAPITAL LETTER U WITH MACRON */ ++#define XKB_KEY_Cyrillic_u_macron 0x10004ef /* U+04EF CYRILLIC SMALL LETTER U WITH MACRON */ ++ ++#define XKB_KEY_Serbian_dje 0x06a1 /* U+0452 CYRILLIC SMALL LETTER DJE */ ++#define XKB_KEY_Macedonia_gje 0x06a2 /* U+0453 CYRILLIC SMALL LETTER GJE */ ++#define XKB_KEY_Cyrillic_io 0x06a3 /* U+0451 CYRILLIC SMALL LETTER IO */ ++#define XKB_KEY_Ukrainian_ie 0x06a4 /* U+0454 CYRILLIC SMALL LETTER UKRAINIAN IE */ ++#define XKB_KEY_Ukranian_je 0x06a4 /* deprecated */ ++#define XKB_KEY_Macedonia_dse 0x06a5 /* U+0455 CYRILLIC SMALL LETTER DZE */ ++#define XKB_KEY_Ukrainian_i 0x06a6 /* U+0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */ ++#define XKB_KEY_Ukranian_i 0x06a6 /* deprecated */ ++#define XKB_KEY_Ukrainian_yi 0x06a7 /* U+0457 CYRILLIC SMALL LETTER YI */ ++#define XKB_KEY_Ukranian_yi 0x06a7 /* deprecated */ ++#define XKB_KEY_Cyrillic_je 0x06a8 /* U+0458 CYRILLIC SMALL LETTER JE */ ++#define XKB_KEY_Serbian_je 0x06a8 /* deprecated */ ++#define XKB_KEY_Cyrillic_lje 0x06a9 /* U+0459 CYRILLIC SMALL LETTER LJE */ ++#define XKB_KEY_Serbian_lje 0x06a9 /* deprecated */ ++#define XKB_KEY_Cyrillic_nje 0x06aa /* U+045A CYRILLIC SMALL LETTER NJE */ ++#define XKB_KEY_Serbian_nje 0x06aa /* deprecated */ ++#define XKB_KEY_Serbian_tshe 0x06ab /* U+045B CYRILLIC SMALL LETTER TSHE */ ++#define XKB_KEY_Macedonia_kje 0x06ac /* U+045C CYRILLIC SMALL LETTER KJE */ ++#define XKB_KEY_Ukrainian_ghe_with_upturn 0x06ad /* U+0491 CYRILLIC SMALL LETTER GHE WITH UPTURN */ ++#define XKB_KEY_Byelorussian_shortu 0x06ae /* U+045E CYRILLIC SMALL LETTER SHORT U */ ++#define XKB_KEY_Cyrillic_dzhe 0x06af /* U+045F CYRILLIC SMALL LETTER DZHE */ ++#define XKB_KEY_Serbian_dze 0x06af /* deprecated */ ++#define XKB_KEY_numerosign 0x06b0 /* U+2116 NUMERO SIGN */ ++#define XKB_KEY_Serbian_DJE 0x06b1 /* U+0402 CYRILLIC CAPITAL LETTER DJE */ ++#define XKB_KEY_Macedonia_GJE 0x06b2 /* U+0403 CYRILLIC CAPITAL LETTER GJE */ ++#define XKB_KEY_Cyrillic_IO 0x06b3 /* U+0401 CYRILLIC CAPITAL LETTER IO */ ++#define XKB_KEY_Ukrainian_IE 0x06b4 /* U+0404 CYRILLIC CAPITAL LETTER UKRAINIAN IE */ ++#define XKB_KEY_Ukranian_JE 0x06b4 /* deprecated */ ++#define XKB_KEY_Macedonia_DSE 0x06b5 /* U+0405 CYRILLIC CAPITAL LETTER DZE */ ++#define XKB_KEY_Ukrainian_I 0x06b6 /* U+0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */ ++#define XKB_KEY_Ukranian_I 0x06b6 /* deprecated */ ++#define XKB_KEY_Ukrainian_YI 0x06b7 /* U+0407 CYRILLIC CAPITAL LETTER YI */ ++#define XKB_KEY_Ukranian_YI 0x06b7 /* deprecated */ ++#define XKB_KEY_Cyrillic_JE 0x06b8 /* U+0408 CYRILLIC CAPITAL LETTER JE */ ++#define XKB_KEY_Serbian_JE 0x06b8 /* deprecated */ ++#define XKB_KEY_Cyrillic_LJE 0x06b9 /* U+0409 CYRILLIC CAPITAL LETTER LJE */ ++#define XKB_KEY_Serbian_LJE 0x06b9 /* deprecated */ ++#define XKB_KEY_Cyrillic_NJE 0x06ba /* U+040A CYRILLIC CAPITAL LETTER NJE */ ++#define XKB_KEY_Serbian_NJE 0x06ba /* deprecated */ ++#define XKB_KEY_Serbian_TSHE 0x06bb /* U+040B CYRILLIC CAPITAL LETTER TSHE */ ++#define XKB_KEY_Macedonia_KJE 0x06bc /* U+040C CYRILLIC CAPITAL LETTER KJE */ ++#define XKB_KEY_Ukrainian_GHE_WITH_UPTURN 0x06bd /* U+0490 CYRILLIC CAPITAL LETTER GHE WITH UPTURN */ ++#define XKB_KEY_Byelorussian_SHORTU 0x06be /* U+040E CYRILLIC CAPITAL LETTER SHORT U */ ++#define XKB_KEY_Cyrillic_DZHE 0x06bf /* U+040F CYRILLIC CAPITAL LETTER DZHE */ ++#define XKB_KEY_Serbian_DZE 0x06bf /* deprecated */ ++#define XKB_KEY_Cyrillic_yu 0x06c0 /* U+044E CYRILLIC SMALL LETTER YU */ ++#define XKB_KEY_Cyrillic_a 0x06c1 /* U+0430 CYRILLIC SMALL LETTER A */ ++#define XKB_KEY_Cyrillic_be 0x06c2 /* U+0431 CYRILLIC SMALL LETTER BE */ ++#define XKB_KEY_Cyrillic_tse 0x06c3 /* U+0446 CYRILLIC SMALL LETTER TSE */ ++#define XKB_KEY_Cyrillic_de 0x06c4 /* U+0434 CYRILLIC SMALL LETTER DE */ ++#define XKB_KEY_Cyrillic_ie 0x06c5 /* U+0435 CYRILLIC SMALL LETTER IE */ ++#define XKB_KEY_Cyrillic_ef 0x06c6 /* U+0444 CYRILLIC SMALL LETTER EF */ ++#define XKB_KEY_Cyrillic_ghe 0x06c7 /* U+0433 CYRILLIC SMALL LETTER GHE */ ++#define XKB_KEY_Cyrillic_ha 0x06c8 /* U+0445 CYRILLIC SMALL LETTER HA */ ++#define XKB_KEY_Cyrillic_i 0x06c9 /* U+0438 CYRILLIC SMALL LETTER I */ ++#define XKB_KEY_Cyrillic_shorti 0x06ca /* U+0439 CYRILLIC SMALL LETTER SHORT I */ ++#define XKB_KEY_Cyrillic_ka 0x06cb /* U+043A CYRILLIC SMALL LETTER KA */ ++#define XKB_KEY_Cyrillic_el 0x06cc /* U+043B CYRILLIC SMALL LETTER EL */ ++#define XKB_KEY_Cyrillic_em 0x06cd /* U+043C CYRILLIC SMALL LETTER EM */ ++#define XKB_KEY_Cyrillic_en 0x06ce /* U+043D CYRILLIC SMALL LETTER EN */ ++#define XKB_KEY_Cyrillic_o 0x06cf /* U+043E CYRILLIC SMALL LETTER O */ ++#define XKB_KEY_Cyrillic_pe 0x06d0 /* U+043F CYRILLIC SMALL LETTER PE */ ++#define XKB_KEY_Cyrillic_ya 0x06d1 /* U+044F CYRILLIC SMALL LETTER YA */ ++#define XKB_KEY_Cyrillic_er 0x06d2 /* U+0440 CYRILLIC SMALL LETTER ER */ ++#define XKB_KEY_Cyrillic_es 0x06d3 /* U+0441 CYRILLIC SMALL LETTER ES */ ++#define XKB_KEY_Cyrillic_te 0x06d4 /* U+0442 CYRILLIC SMALL LETTER TE */ ++#define XKB_KEY_Cyrillic_u 0x06d5 /* U+0443 CYRILLIC SMALL LETTER U */ ++#define XKB_KEY_Cyrillic_zhe 0x06d6 /* U+0436 CYRILLIC SMALL LETTER ZHE */ ++#define XKB_KEY_Cyrillic_ve 0x06d7 /* U+0432 CYRILLIC SMALL LETTER VE */ ++#define XKB_KEY_Cyrillic_softsign 0x06d8 /* U+044C CYRILLIC SMALL LETTER SOFT SIGN */ ++#define XKB_KEY_Cyrillic_yeru 0x06d9 /* U+044B CYRILLIC SMALL LETTER YERU */ ++#define XKB_KEY_Cyrillic_ze 0x06da /* U+0437 CYRILLIC SMALL LETTER ZE */ ++#define XKB_KEY_Cyrillic_sha 0x06db /* U+0448 CYRILLIC SMALL LETTER SHA */ ++#define XKB_KEY_Cyrillic_e 0x06dc /* U+044D CYRILLIC SMALL LETTER E */ ++#define XKB_KEY_Cyrillic_shcha 0x06dd /* U+0449 CYRILLIC SMALL LETTER SHCHA */ ++#define XKB_KEY_Cyrillic_che 0x06de /* U+0447 CYRILLIC SMALL LETTER CHE */ ++#define XKB_KEY_Cyrillic_hardsign 0x06df /* U+044A CYRILLIC SMALL LETTER HARD SIGN */ ++#define XKB_KEY_Cyrillic_YU 0x06e0 /* U+042E CYRILLIC CAPITAL LETTER YU */ ++#define XKB_KEY_Cyrillic_A 0x06e1 /* U+0410 CYRILLIC CAPITAL LETTER A */ ++#define XKB_KEY_Cyrillic_BE 0x06e2 /* U+0411 CYRILLIC CAPITAL LETTER BE */ ++#define XKB_KEY_Cyrillic_TSE 0x06e3 /* U+0426 CYRILLIC CAPITAL LETTER TSE */ ++#define XKB_KEY_Cyrillic_DE 0x06e4 /* U+0414 CYRILLIC CAPITAL LETTER DE */ ++#define XKB_KEY_Cyrillic_IE 0x06e5 /* U+0415 CYRILLIC CAPITAL LETTER IE */ ++#define XKB_KEY_Cyrillic_EF 0x06e6 /* U+0424 CYRILLIC CAPITAL LETTER EF */ ++#define XKB_KEY_Cyrillic_GHE 0x06e7 /* U+0413 CYRILLIC CAPITAL LETTER GHE */ ++#define XKB_KEY_Cyrillic_HA 0x06e8 /* U+0425 CYRILLIC CAPITAL LETTER HA */ ++#define XKB_KEY_Cyrillic_I 0x06e9 /* U+0418 CYRILLIC CAPITAL LETTER I */ ++#define XKB_KEY_Cyrillic_SHORTI 0x06ea /* U+0419 CYRILLIC CAPITAL LETTER SHORT I */ ++#define XKB_KEY_Cyrillic_KA 0x06eb /* U+041A CYRILLIC CAPITAL LETTER KA */ ++#define XKB_KEY_Cyrillic_EL 0x06ec /* U+041B CYRILLIC CAPITAL LETTER EL */ ++#define XKB_KEY_Cyrillic_EM 0x06ed /* U+041C CYRILLIC CAPITAL LETTER EM */ ++#define XKB_KEY_Cyrillic_EN 0x06ee /* U+041D CYRILLIC CAPITAL LETTER EN */ ++#define XKB_KEY_Cyrillic_O 0x06ef /* U+041E CYRILLIC CAPITAL LETTER O */ ++#define XKB_KEY_Cyrillic_PE 0x06f0 /* U+041F CYRILLIC CAPITAL LETTER PE */ ++#define XKB_KEY_Cyrillic_YA 0x06f1 /* U+042F CYRILLIC CAPITAL LETTER YA */ ++#define XKB_KEY_Cyrillic_ER 0x06f2 /* U+0420 CYRILLIC CAPITAL LETTER ER */ ++#define XKB_KEY_Cyrillic_ES 0x06f3 /* U+0421 CYRILLIC CAPITAL LETTER ES */ ++#define XKB_KEY_Cyrillic_TE 0x06f4 /* U+0422 CYRILLIC CAPITAL LETTER TE */ ++#define XKB_KEY_Cyrillic_U 0x06f5 /* U+0423 CYRILLIC CAPITAL LETTER U */ ++#define XKB_KEY_Cyrillic_ZHE 0x06f6 /* U+0416 CYRILLIC CAPITAL LETTER ZHE */ ++#define XKB_KEY_Cyrillic_VE 0x06f7 /* U+0412 CYRILLIC CAPITAL LETTER VE */ ++#define XKB_KEY_Cyrillic_SOFTSIGN 0x06f8 /* U+042C CYRILLIC CAPITAL LETTER SOFT SIGN */ ++#define XKB_KEY_Cyrillic_YERU 0x06f9 /* U+042B CYRILLIC CAPITAL LETTER YERU */ ++#define XKB_KEY_Cyrillic_ZE 0x06fa /* U+0417 CYRILLIC CAPITAL LETTER ZE */ ++#define XKB_KEY_Cyrillic_SHA 0x06fb /* U+0428 CYRILLIC CAPITAL LETTER SHA */ ++#define XKB_KEY_Cyrillic_E 0x06fc /* U+042D CYRILLIC CAPITAL LETTER E */ ++#define XKB_KEY_Cyrillic_SHCHA 0x06fd /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ ++#define XKB_KEY_Cyrillic_CHE 0x06fe /* U+0427 CYRILLIC CAPITAL LETTER CHE */ ++#define XKB_KEY_Cyrillic_HARDSIGN 0x06ff /* U+042A CYRILLIC CAPITAL LETTER HARD SIGN */ ++ ++/* ++ * Greek ++ * (based on an early draft of, and not quite identical to, ISO/IEC 8859-7) ++ * Byte 3 = 7 ++ */ ++ ++#define XKB_KEY_Greek_ALPHAaccent 0x07a1 /* U+0386 GREEK CAPITAL LETTER ALPHA WITH TONOS */ ++#define XKB_KEY_Greek_EPSILONaccent 0x07a2 /* U+0388 GREEK CAPITAL LETTER EPSILON WITH TONOS */ ++#define XKB_KEY_Greek_ETAaccent 0x07a3 /* U+0389 GREEK CAPITAL LETTER ETA WITH TONOS */ ++#define XKB_KEY_Greek_IOTAaccent 0x07a4 /* U+038A GREEK CAPITAL LETTER IOTA WITH TONOS */ ++#define XKB_KEY_Greek_IOTAdieresis 0x07a5 /* U+03AA GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */ ++#define XKB_KEY_Greek_IOTAdiaeresis 0x07a5 /* old typo */ ++#define XKB_KEY_Greek_OMICRONaccent 0x07a7 /* U+038C GREEK CAPITAL LETTER OMICRON WITH TONOS */ ++#define XKB_KEY_Greek_UPSILONaccent 0x07a8 /* U+038E GREEK CAPITAL LETTER UPSILON WITH TONOS */ ++#define XKB_KEY_Greek_UPSILONdieresis 0x07a9 /* U+03AB GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */ ++#define XKB_KEY_Greek_OMEGAaccent 0x07ab /* U+038F GREEK CAPITAL LETTER OMEGA WITH TONOS */ ++#define XKB_KEY_Greek_accentdieresis 0x07ae /* U+0385 GREEK DIALYTIKA TONOS */ ++#define XKB_KEY_Greek_horizbar 0x07af /* U+2015 HORIZONTAL BAR */ ++#define XKB_KEY_Greek_alphaaccent 0x07b1 /* U+03AC GREEK SMALL LETTER ALPHA WITH TONOS */ ++#define XKB_KEY_Greek_epsilonaccent 0x07b2 /* U+03AD GREEK SMALL LETTER EPSILON WITH TONOS */ ++#define XKB_KEY_Greek_etaaccent 0x07b3 /* U+03AE GREEK SMALL LETTER ETA WITH TONOS */ ++#define XKB_KEY_Greek_iotaaccent 0x07b4 /* U+03AF GREEK SMALL LETTER IOTA WITH TONOS */ ++#define XKB_KEY_Greek_iotadieresis 0x07b5 /* U+03CA GREEK SMALL LETTER IOTA WITH DIALYTIKA */ ++#define XKB_KEY_Greek_iotaaccentdieresis 0x07b6 /* U+0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ ++#define XKB_KEY_Greek_omicronaccent 0x07b7 /* U+03CC GREEK SMALL LETTER OMICRON WITH TONOS */ ++#define XKB_KEY_Greek_upsilonaccent 0x07b8 /* U+03CD GREEK SMALL LETTER UPSILON WITH TONOS */ ++#define XKB_KEY_Greek_upsilondieresis 0x07b9 /* U+03CB GREEK SMALL LETTER UPSILON WITH DIALYTIKA */ ++#define XKB_KEY_Greek_upsilonaccentdieresis 0x07ba /* U+03B0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */ ++#define XKB_KEY_Greek_omegaaccent 0x07bb /* U+03CE GREEK SMALL LETTER OMEGA WITH TONOS */ ++#define XKB_KEY_Greek_ALPHA 0x07c1 /* U+0391 GREEK CAPITAL LETTER ALPHA */ ++#define XKB_KEY_Greek_BETA 0x07c2 /* U+0392 GREEK CAPITAL LETTER BETA */ ++#define XKB_KEY_Greek_GAMMA 0x07c3 /* U+0393 GREEK CAPITAL LETTER GAMMA */ ++#define XKB_KEY_Greek_DELTA 0x07c4 /* U+0394 GREEK CAPITAL LETTER DELTA */ ++#define XKB_KEY_Greek_EPSILON 0x07c5 /* U+0395 GREEK CAPITAL LETTER EPSILON */ ++#define XKB_KEY_Greek_ZETA 0x07c6 /* U+0396 GREEK CAPITAL LETTER ZETA */ ++#define XKB_KEY_Greek_ETA 0x07c7 /* U+0397 GREEK CAPITAL LETTER ETA */ ++#define XKB_KEY_Greek_THETA 0x07c8 /* U+0398 GREEK CAPITAL LETTER THETA */ ++#define XKB_KEY_Greek_IOTA 0x07c9 /* U+0399 GREEK CAPITAL LETTER IOTA */ ++#define XKB_KEY_Greek_KAPPA 0x07ca /* U+039A GREEK CAPITAL LETTER KAPPA */ ++#define XKB_KEY_Greek_LAMDA 0x07cb /* U+039B GREEK CAPITAL LETTER LAMDA */ ++#define XKB_KEY_Greek_LAMBDA 0x07cb /* U+039B GREEK CAPITAL LETTER LAMDA */ ++#define XKB_KEY_Greek_MU 0x07cc /* U+039C GREEK CAPITAL LETTER MU */ ++#define XKB_KEY_Greek_NU 0x07cd /* U+039D GREEK CAPITAL LETTER NU */ ++#define XKB_KEY_Greek_XI 0x07ce /* U+039E GREEK CAPITAL LETTER XI */ ++#define XKB_KEY_Greek_OMICRON 0x07cf /* U+039F GREEK CAPITAL LETTER OMICRON */ ++#define XKB_KEY_Greek_PI 0x07d0 /* U+03A0 GREEK CAPITAL LETTER PI */ ++#define XKB_KEY_Greek_RHO 0x07d1 /* U+03A1 GREEK CAPITAL LETTER RHO */ ++#define XKB_KEY_Greek_SIGMA 0x07d2 /* U+03A3 GREEK CAPITAL LETTER SIGMA */ ++#define XKB_KEY_Greek_TAU 0x07d4 /* U+03A4 GREEK CAPITAL LETTER TAU */ ++#define XKB_KEY_Greek_UPSILON 0x07d5 /* U+03A5 GREEK CAPITAL LETTER UPSILON */ ++#define XKB_KEY_Greek_PHI 0x07d6 /* U+03A6 GREEK CAPITAL LETTER PHI */ ++#define XKB_KEY_Greek_CHI 0x07d7 /* U+03A7 GREEK CAPITAL LETTER CHI */ ++#define XKB_KEY_Greek_PSI 0x07d8 /* U+03A8 GREEK CAPITAL LETTER PSI */ ++#define XKB_KEY_Greek_OMEGA 0x07d9 /* U+03A9 GREEK CAPITAL LETTER OMEGA */ ++#define XKB_KEY_Greek_alpha 0x07e1 /* U+03B1 GREEK SMALL LETTER ALPHA */ ++#define XKB_KEY_Greek_beta 0x07e2 /* U+03B2 GREEK SMALL LETTER BETA */ ++#define XKB_KEY_Greek_gamma 0x07e3 /* U+03B3 GREEK SMALL LETTER GAMMA */ ++#define XKB_KEY_Greek_delta 0x07e4 /* U+03B4 GREEK SMALL LETTER DELTA */ ++#define XKB_KEY_Greek_epsilon 0x07e5 /* U+03B5 GREEK SMALL LETTER EPSILON */ ++#define XKB_KEY_Greek_zeta 0x07e6 /* U+03B6 GREEK SMALL LETTER ZETA */ ++#define XKB_KEY_Greek_eta 0x07e7 /* U+03B7 GREEK SMALL LETTER ETA */ ++#define XKB_KEY_Greek_theta 0x07e8 /* U+03B8 GREEK SMALL LETTER THETA */ ++#define XKB_KEY_Greek_iota 0x07e9 /* U+03B9 GREEK SMALL LETTER IOTA */ ++#define XKB_KEY_Greek_kappa 0x07ea /* U+03BA GREEK SMALL LETTER KAPPA */ ++#define XKB_KEY_Greek_lamda 0x07eb /* U+03BB GREEK SMALL LETTER LAMDA */ ++#define XKB_KEY_Greek_lambda 0x07eb /* U+03BB GREEK SMALL LETTER LAMDA */ ++#define XKB_KEY_Greek_mu 0x07ec /* U+03BC GREEK SMALL LETTER MU */ ++#define XKB_KEY_Greek_nu 0x07ed /* U+03BD GREEK SMALL LETTER NU */ ++#define XKB_KEY_Greek_xi 0x07ee /* U+03BE GREEK SMALL LETTER XI */ ++#define XKB_KEY_Greek_omicron 0x07ef /* U+03BF GREEK SMALL LETTER OMICRON */ ++#define XKB_KEY_Greek_pi 0x07f0 /* U+03C0 GREEK SMALL LETTER PI */ ++#define XKB_KEY_Greek_rho 0x07f1 /* U+03C1 GREEK SMALL LETTER RHO */ ++#define XKB_KEY_Greek_sigma 0x07f2 /* U+03C3 GREEK SMALL LETTER SIGMA */ ++#define XKB_KEY_Greek_finalsmallsigma 0x07f3 /* U+03C2 GREEK SMALL LETTER FINAL SIGMA */ ++#define XKB_KEY_Greek_tau 0x07f4 /* U+03C4 GREEK SMALL LETTER TAU */ ++#define XKB_KEY_Greek_upsilon 0x07f5 /* U+03C5 GREEK SMALL LETTER UPSILON */ ++#define XKB_KEY_Greek_phi 0x07f6 /* U+03C6 GREEK SMALL LETTER PHI */ ++#define XKB_KEY_Greek_chi 0x07f7 /* U+03C7 GREEK SMALL LETTER CHI */ ++#define XKB_KEY_Greek_psi 0x07f8 /* U+03C8 GREEK SMALL LETTER PSI */ ++#define XKB_KEY_Greek_omega 0x07f9 /* U+03C9 GREEK SMALL LETTER OMEGA */ ++#define XKB_KEY_Greek_switch 0xff7e /* Alias for mode_switch */ ++ ++/* ++ * Technical ++ * (from the DEC VT330/VT420 Technical Character Set, http://vt100.net/charsets/technical.html) ++ * Byte 3 = 8 ++ */ ++ ++#define XKB_KEY_leftradical 0x08a1 /* U+23B7 RADICAL SYMBOL BOTTOM */ ++#define XKB_KEY_topleftradical 0x08a2 /*(U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT)*/ ++#define XKB_KEY_horizconnector 0x08a3 /*(U+2500 BOX DRAWINGS LIGHT HORIZONTAL)*/ ++#define XKB_KEY_topintegral 0x08a4 /* U+2320 TOP HALF INTEGRAL */ ++#define XKB_KEY_botintegral 0x08a5 /* U+2321 BOTTOM HALF INTEGRAL */ ++#define XKB_KEY_vertconnector 0x08a6 /*(U+2502 BOX DRAWINGS LIGHT VERTICAL)*/ ++#define XKB_KEY_topleftsqbracket 0x08a7 /* U+23A1 LEFT SQUARE BRACKET UPPER CORNER */ ++#define XKB_KEY_botleftsqbracket 0x08a8 /* U+23A3 LEFT SQUARE BRACKET LOWER CORNER */ ++#define XKB_KEY_toprightsqbracket 0x08a9 /* U+23A4 RIGHT SQUARE BRACKET UPPER CORNER */ ++#define XKB_KEY_botrightsqbracket 0x08aa /* U+23A6 RIGHT SQUARE BRACKET LOWER CORNER */ ++#define XKB_KEY_topleftparens 0x08ab /* U+239B LEFT PARENTHESIS UPPER HOOK */ ++#define XKB_KEY_botleftparens 0x08ac /* U+239D LEFT PARENTHESIS LOWER HOOK */ ++#define XKB_KEY_toprightparens 0x08ad /* U+239E RIGHT PARENTHESIS UPPER HOOK */ ++#define XKB_KEY_botrightparens 0x08ae /* U+23A0 RIGHT PARENTHESIS LOWER HOOK */ ++#define XKB_KEY_leftmiddlecurlybrace 0x08af /* U+23A8 LEFT CURLY BRACKET MIDDLE PIECE */ ++#define XKB_KEY_rightmiddlecurlybrace 0x08b0 /* U+23AC RIGHT CURLY BRACKET MIDDLE PIECE */ ++#define XKB_KEY_topleftsummation 0x08b1 ++#define XKB_KEY_botleftsummation 0x08b2 ++#define XKB_KEY_topvertsummationconnector 0x08b3 ++#define XKB_KEY_botvertsummationconnector 0x08b4 ++#define XKB_KEY_toprightsummation 0x08b5 ++#define XKB_KEY_botrightsummation 0x08b6 ++#define XKB_KEY_rightmiddlesummation 0x08b7 ++#define XKB_KEY_lessthanequal 0x08bc /* U+2264 LESS-THAN OR EQUAL TO */ ++#define XKB_KEY_notequal 0x08bd /* U+2260 NOT EQUAL TO */ ++#define XKB_KEY_greaterthanequal 0x08be /* U+2265 GREATER-THAN OR EQUAL TO */ ++#define XKB_KEY_integral 0x08bf /* U+222B INTEGRAL */ ++#define XKB_KEY_therefore 0x08c0 /* U+2234 THEREFORE */ ++#define XKB_KEY_variation 0x08c1 /* U+221D PROPORTIONAL TO */ ++#define XKB_KEY_infinity 0x08c2 /* U+221E INFINITY */ ++#define XKB_KEY_nabla 0x08c5 /* U+2207 NABLA */ ++#define XKB_KEY_approximate 0x08c8 /* U+223C TILDE OPERATOR */ ++#define XKB_KEY_similarequal 0x08c9 /* U+2243 ASYMPTOTICALLY EQUAL TO */ ++#define XKB_KEY_ifonlyif 0x08cd /* U+21D4 LEFT RIGHT DOUBLE ARROW */ ++#define XKB_KEY_implies 0x08ce /* U+21D2 RIGHTWARDS DOUBLE ARROW */ ++#define XKB_KEY_identical 0x08cf /* U+2261 IDENTICAL TO */ ++#define XKB_KEY_radical 0x08d6 /* U+221A SQUARE ROOT */ ++#define XKB_KEY_includedin 0x08da /* U+2282 SUBSET OF */ ++#define XKB_KEY_includes 0x08db /* U+2283 SUPERSET OF */ ++#define XKB_KEY_intersection 0x08dc /* U+2229 INTERSECTION */ ++#define XKB_KEY_union 0x08dd /* U+222A UNION */ ++#define XKB_KEY_logicaland 0x08de /* U+2227 LOGICAL AND */ ++#define XKB_KEY_logicalor 0x08df /* U+2228 LOGICAL OR */ ++#define XKB_KEY_partialderivative 0x08ef /* U+2202 PARTIAL DIFFERENTIAL */ ++#define XKB_KEY_function 0x08f6 /* U+0192 LATIN SMALL LETTER F WITH HOOK */ ++#define XKB_KEY_leftarrow 0x08fb /* U+2190 LEFTWARDS ARROW */ ++#define XKB_KEY_uparrow 0x08fc /* U+2191 UPWARDS ARROW */ ++#define XKB_KEY_rightarrow 0x08fd /* U+2192 RIGHTWARDS ARROW */ ++#define XKB_KEY_downarrow 0x08fe /* U+2193 DOWNWARDS ARROW */ ++ ++/* ++ * Special ++ * (from the DEC VT100 Special Graphics Character Set) ++ * Byte 3 = 9 ++ */ ++ ++#define XKB_KEY_blank 0x09df ++#define XKB_KEY_soliddiamond 0x09e0 /* U+25C6 BLACK DIAMOND */ ++#define XKB_KEY_checkerboard 0x09e1 /* U+2592 MEDIUM SHADE */ ++#define XKB_KEY_ht 0x09e2 /* U+2409 SYMBOL FOR HORIZONTAL TABULATION */ ++#define XKB_KEY_ff 0x09e3 /* U+240C SYMBOL FOR FORM FEED */ ++#define XKB_KEY_cr 0x09e4 /* U+240D SYMBOL FOR CARRIAGE RETURN */ ++#define XKB_KEY_lf 0x09e5 /* U+240A SYMBOL FOR LINE FEED */ ++#define XKB_KEY_nl 0x09e8 /* U+2424 SYMBOL FOR NEWLINE */ ++#define XKB_KEY_vt 0x09e9 /* U+240B SYMBOL FOR VERTICAL TABULATION */ ++#define XKB_KEY_lowrightcorner 0x09ea /* U+2518 BOX DRAWINGS LIGHT UP AND LEFT */ ++#define XKB_KEY_uprightcorner 0x09eb /* U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT */ ++#define XKB_KEY_upleftcorner 0x09ec /* U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT */ ++#define XKB_KEY_lowleftcorner 0x09ed /* U+2514 BOX DRAWINGS LIGHT UP AND RIGHT */ ++#define XKB_KEY_crossinglines 0x09ee /* U+253C BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */ ++#define XKB_KEY_horizlinescan1 0x09ef /* U+23BA HORIZONTAL SCAN LINE-1 */ ++#define XKB_KEY_horizlinescan3 0x09f0 /* U+23BB HORIZONTAL SCAN LINE-3 */ ++#define XKB_KEY_horizlinescan5 0x09f1 /* U+2500 BOX DRAWINGS LIGHT HORIZONTAL */ ++#define XKB_KEY_horizlinescan7 0x09f2 /* U+23BC HORIZONTAL SCAN LINE-7 */ ++#define XKB_KEY_horizlinescan9 0x09f3 /* U+23BD HORIZONTAL SCAN LINE-9 */ ++#define XKB_KEY_leftt 0x09f4 /* U+251C BOX DRAWINGS LIGHT VERTICAL AND RIGHT */ ++#define XKB_KEY_rightt 0x09f5 /* U+2524 BOX DRAWINGS LIGHT VERTICAL AND LEFT */ ++#define XKB_KEY_bott 0x09f6 /* U+2534 BOX DRAWINGS LIGHT UP AND HORIZONTAL */ ++#define XKB_KEY_topt 0x09f7 /* U+252C BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */ ++#define XKB_KEY_vertbar 0x09f8 /* U+2502 BOX DRAWINGS LIGHT VERTICAL */ ++ ++/* ++ * Publishing ++ * (these are probably from a long forgotten DEC Publishing ++ * font that once shipped with DECwrite) ++ * Byte 3 = 0x0a ++ */ ++ ++#define XKB_KEY_emspace 0x0aa1 /* U+2003 EM SPACE */ ++#define XKB_KEY_enspace 0x0aa2 /* U+2002 EN SPACE */ ++#define XKB_KEY_em3space 0x0aa3 /* U+2004 THREE-PER-EM SPACE */ ++#define XKB_KEY_em4space 0x0aa4 /* U+2005 FOUR-PER-EM SPACE */ ++#define XKB_KEY_digitspace 0x0aa5 /* U+2007 FIGURE SPACE */ ++#define XKB_KEY_punctspace 0x0aa6 /* U+2008 PUNCTUATION SPACE */ ++#define XKB_KEY_thinspace 0x0aa7 /* U+2009 THIN SPACE */ ++#define XKB_KEY_hairspace 0x0aa8 /* U+200A HAIR SPACE */ ++#define XKB_KEY_emdash 0x0aa9 /* U+2014 EM DASH */ ++#define XKB_KEY_endash 0x0aaa /* U+2013 EN DASH */ ++#define XKB_KEY_signifblank 0x0aac /*(U+2423 OPEN BOX)*/ ++#define XKB_KEY_ellipsis 0x0aae /* U+2026 HORIZONTAL ELLIPSIS */ ++#define XKB_KEY_doubbaselinedot 0x0aaf /* U+2025 TWO DOT LEADER */ ++#define XKB_KEY_onethird 0x0ab0 /* U+2153 VULGAR FRACTION ONE THIRD */ ++#define XKB_KEY_twothirds 0x0ab1 /* U+2154 VULGAR FRACTION TWO THIRDS */ ++#define XKB_KEY_onefifth 0x0ab2 /* U+2155 VULGAR FRACTION ONE FIFTH */ ++#define XKB_KEY_twofifths 0x0ab3 /* U+2156 VULGAR FRACTION TWO FIFTHS */ ++#define XKB_KEY_threefifths 0x0ab4 /* U+2157 VULGAR FRACTION THREE FIFTHS */ ++#define XKB_KEY_fourfifths 0x0ab5 /* U+2158 VULGAR FRACTION FOUR FIFTHS */ ++#define XKB_KEY_onesixth 0x0ab6 /* U+2159 VULGAR FRACTION ONE SIXTH */ ++#define XKB_KEY_fivesixths 0x0ab7 /* U+215A VULGAR FRACTION FIVE SIXTHS */ ++#define XKB_KEY_careof 0x0ab8 /* U+2105 CARE OF */ ++#define XKB_KEY_figdash 0x0abb /* U+2012 FIGURE DASH */ ++#define XKB_KEY_leftanglebracket 0x0abc /*(U+27E8 MATHEMATICAL LEFT ANGLE BRACKET)*/ ++#define XKB_KEY_decimalpoint 0x0abd /*(U+002E FULL STOP)*/ ++#define XKB_KEY_rightanglebracket 0x0abe /*(U+27E9 MATHEMATICAL RIGHT ANGLE BRACKET)*/ ++#define XKB_KEY_marker 0x0abf ++#define XKB_KEY_oneeighth 0x0ac3 /* U+215B VULGAR FRACTION ONE EIGHTH */ ++#define XKB_KEY_threeeighths 0x0ac4 /* U+215C VULGAR FRACTION THREE EIGHTHS */ ++#define XKB_KEY_fiveeighths 0x0ac5 /* U+215D VULGAR FRACTION FIVE EIGHTHS */ ++#define XKB_KEY_seveneighths 0x0ac6 /* U+215E VULGAR FRACTION SEVEN EIGHTHS */ ++#define XKB_KEY_trademark 0x0ac9 /* U+2122 TRADE MARK SIGN */ ++#define XKB_KEY_signaturemark 0x0aca /*(U+2613 SALTIRE)*/ ++#define XKB_KEY_trademarkincircle 0x0acb ++#define XKB_KEY_leftopentriangle 0x0acc /*(U+25C1 WHITE LEFT-POINTING TRIANGLE)*/ ++#define XKB_KEY_rightopentriangle 0x0acd /*(U+25B7 WHITE RIGHT-POINTING TRIANGLE)*/ ++#define XKB_KEY_emopencircle 0x0ace /*(U+25CB WHITE CIRCLE)*/ ++#define XKB_KEY_emopenrectangle 0x0acf /*(U+25AF WHITE VERTICAL RECTANGLE)*/ ++#define XKB_KEY_leftsinglequotemark 0x0ad0 /* U+2018 LEFT SINGLE QUOTATION MARK */ ++#define XKB_KEY_rightsinglequotemark 0x0ad1 /* U+2019 RIGHT SINGLE QUOTATION MARK */ ++#define XKB_KEY_leftdoublequotemark 0x0ad2 /* U+201C LEFT DOUBLE QUOTATION MARK */ ++#define XKB_KEY_rightdoublequotemark 0x0ad3 /* U+201D RIGHT DOUBLE QUOTATION MARK */ ++#define XKB_KEY_prescription 0x0ad4 /* U+211E PRESCRIPTION TAKE */ ++#define XKB_KEY_permille 0x0ad5 /* U+2030 PER MILLE SIGN */ ++#define XKB_KEY_minutes 0x0ad6 /* U+2032 PRIME */ ++#define XKB_KEY_seconds 0x0ad7 /* U+2033 DOUBLE PRIME */ ++#define XKB_KEY_latincross 0x0ad9 /* U+271D LATIN CROSS */ ++#define XKB_KEY_hexagram 0x0ada ++#define XKB_KEY_filledrectbullet 0x0adb /*(U+25AC BLACK RECTANGLE)*/ ++#define XKB_KEY_filledlefttribullet 0x0adc /*(U+25C0 BLACK LEFT-POINTING TRIANGLE)*/ ++#define XKB_KEY_filledrighttribullet 0x0add /*(U+25B6 BLACK RIGHT-POINTING TRIANGLE)*/ ++#define XKB_KEY_emfilledcircle 0x0ade /*(U+25CF BLACK CIRCLE)*/ ++#define XKB_KEY_emfilledrect 0x0adf /*(U+25AE BLACK VERTICAL RECTANGLE)*/ ++#define XKB_KEY_enopencircbullet 0x0ae0 /*(U+25E6 WHITE BULLET)*/ ++#define XKB_KEY_enopensquarebullet 0x0ae1 /*(U+25AB WHITE SMALL SQUARE)*/ ++#define XKB_KEY_openrectbullet 0x0ae2 /*(U+25AD WHITE RECTANGLE)*/ ++#define XKB_KEY_opentribulletup 0x0ae3 /*(U+25B3 WHITE UP-POINTING TRIANGLE)*/ ++#define XKB_KEY_opentribulletdown 0x0ae4 /*(U+25BD WHITE DOWN-POINTING TRIANGLE)*/ ++#define XKB_KEY_openstar 0x0ae5 /*(U+2606 WHITE STAR)*/ ++#define XKB_KEY_enfilledcircbullet 0x0ae6 /*(U+2022 BULLET)*/ ++#define XKB_KEY_enfilledsqbullet 0x0ae7 /*(U+25AA BLACK SMALL SQUARE)*/ ++#define XKB_KEY_filledtribulletup 0x0ae8 /*(U+25B2 BLACK UP-POINTING TRIANGLE)*/ ++#define XKB_KEY_filledtribulletdown 0x0ae9 /*(U+25BC BLACK DOWN-POINTING TRIANGLE)*/ ++#define XKB_KEY_leftpointer 0x0aea /*(U+261C WHITE LEFT POINTING INDEX)*/ ++#define XKB_KEY_rightpointer 0x0aeb /*(U+261E WHITE RIGHT POINTING INDEX)*/ ++#define XKB_KEY_club 0x0aec /* U+2663 BLACK CLUB SUIT */ ++#define XKB_KEY_diamond 0x0aed /* U+2666 BLACK DIAMOND SUIT */ ++#define XKB_KEY_heart 0x0aee /* U+2665 BLACK HEART SUIT */ ++#define XKB_KEY_maltesecross 0x0af0 /* U+2720 MALTESE CROSS */ ++#define XKB_KEY_dagger 0x0af1 /* U+2020 DAGGER */ ++#define XKB_KEY_doubledagger 0x0af2 /* U+2021 DOUBLE DAGGER */ ++#define XKB_KEY_checkmark 0x0af3 /* U+2713 CHECK MARK */ ++#define XKB_KEY_ballotcross 0x0af4 /* U+2717 BALLOT X */ ++#define XKB_KEY_musicalsharp 0x0af5 /* U+266F MUSIC SHARP SIGN */ ++#define XKB_KEY_musicalflat 0x0af6 /* U+266D MUSIC FLAT SIGN */ ++#define XKB_KEY_malesymbol 0x0af7 /* U+2642 MALE SIGN */ ++#define XKB_KEY_femalesymbol 0x0af8 /* U+2640 FEMALE SIGN */ ++#define XKB_KEY_telephone 0x0af9 /* U+260E BLACK TELEPHONE */ ++#define XKB_KEY_telephonerecorder 0x0afa /* U+2315 TELEPHONE RECORDER */ ++#define XKB_KEY_phonographcopyright 0x0afb /* U+2117 SOUND RECORDING COPYRIGHT */ ++#define XKB_KEY_caret 0x0afc /* U+2038 CARET */ ++#define XKB_KEY_singlelowquotemark 0x0afd /* U+201A SINGLE LOW-9 QUOTATION MARK */ ++#define XKB_KEY_doublelowquotemark 0x0afe /* U+201E DOUBLE LOW-9 QUOTATION MARK */ ++#define XKB_KEY_cursor 0x0aff ++ ++/* ++ * APL ++ * Byte 3 = 0x0b ++ */ ++ ++#define XKB_KEY_leftcaret 0x0ba3 /*(U+003C LESS-THAN SIGN)*/ ++#define XKB_KEY_rightcaret 0x0ba6 /*(U+003E GREATER-THAN SIGN)*/ ++#define XKB_KEY_downcaret 0x0ba8 /*(U+2228 LOGICAL OR)*/ ++#define XKB_KEY_upcaret 0x0ba9 /*(U+2227 LOGICAL AND)*/ ++#define XKB_KEY_overbar 0x0bc0 /*(U+00AF MACRON)*/ ++#define XKB_KEY_downtack 0x0bc2 /* U+22A4 DOWN TACK */ ++#define XKB_KEY_upshoe 0x0bc3 /*(U+2229 INTERSECTION)*/ ++#define XKB_KEY_downstile 0x0bc4 /* U+230A LEFT FLOOR */ ++#define XKB_KEY_underbar 0x0bc6 /*(U+005F LOW LINE)*/ ++#define XKB_KEY_jot 0x0bca /* U+2218 RING OPERATOR */ ++#define XKB_KEY_quad 0x0bcc /* U+2395 APL FUNCTIONAL SYMBOL QUAD */ ++#define XKB_KEY_uptack 0x0bce /* U+22A5 UP TACK */ ++#define XKB_KEY_circle 0x0bcf /* U+25CB WHITE CIRCLE */ ++#define XKB_KEY_upstile 0x0bd3 /* U+2308 LEFT CEILING */ ++#define XKB_KEY_downshoe 0x0bd6 /*(U+222A UNION)*/ ++#define XKB_KEY_rightshoe 0x0bd8 /*(U+2283 SUPERSET OF)*/ ++#define XKB_KEY_leftshoe 0x0bda /*(U+2282 SUBSET OF)*/ ++#define XKB_KEY_lefttack 0x0bdc /* U+22A3 LEFT TACK */ ++#define XKB_KEY_righttack 0x0bfc /* U+22A2 RIGHT TACK */ ++ ++/* ++ * Hebrew ++ * Byte 3 = 0x0c ++ */ ++ ++#define XKB_KEY_hebrew_doublelowline 0x0cdf /* U+2017 DOUBLE LOW LINE */ ++#define XKB_KEY_hebrew_aleph 0x0ce0 /* U+05D0 HEBREW LETTER ALEF */ ++#define XKB_KEY_hebrew_bet 0x0ce1 /* U+05D1 HEBREW LETTER BET */ ++#define XKB_KEY_hebrew_beth 0x0ce1 /* deprecated */ ++#define XKB_KEY_hebrew_gimel 0x0ce2 /* U+05D2 HEBREW LETTER GIMEL */ ++#define XKB_KEY_hebrew_gimmel 0x0ce2 /* deprecated */ ++#define XKB_KEY_hebrew_dalet 0x0ce3 /* U+05D3 HEBREW LETTER DALET */ ++#define XKB_KEY_hebrew_daleth 0x0ce3 /* deprecated */ ++#define XKB_KEY_hebrew_he 0x0ce4 /* U+05D4 HEBREW LETTER HE */ ++#define XKB_KEY_hebrew_waw 0x0ce5 /* U+05D5 HEBREW LETTER VAV */ ++#define XKB_KEY_hebrew_zain 0x0ce6 /* U+05D6 HEBREW LETTER ZAYIN */ ++#define XKB_KEY_hebrew_zayin 0x0ce6 /* deprecated */ ++#define XKB_KEY_hebrew_chet 0x0ce7 /* U+05D7 HEBREW LETTER HET */ ++#define XKB_KEY_hebrew_het 0x0ce7 /* deprecated */ ++#define XKB_KEY_hebrew_tet 0x0ce8 /* U+05D8 HEBREW LETTER TET */ ++#define XKB_KEY_hebrew_teth 0x0ce8 /* deprecated */ ++#define XKB_KEY_hebrew_yod 0x0ce9 /* U+05D9 HEBREW LETTER YOD */ ++#define XKB_KEY_hebrew_finalkaph 0x0cea /* U+05DA HEBREW LETTER FINAL KAF */ ++#define XKB_KEY_hebrew_kaph 0x0ceb /* U+05DB HEBREW LETTER KAF */ ++#define XKB_KEY_hebrew_lamed 0x0cec /* U+05DC HEBREW LETTER LAMED */ ++#define XKB_KEY_hebrew_finalmem 0x0ced /* U+05DD HEBREW LETTER FINAL MEM */ ++#define XKB_KEY_hebrew_mem 0x0cee /* U+05DE HEBREW LETTER MEM */ ++#define XKB_KEY_hebrew_finalnun 0x0cef /* U+05DF HEBREW LETTER FINAL NUN */ ++#define XKB_KEY_hebrew_nun 0x0cf0 /* U+05E0 HEBREW LETTER NUN */ ++#define XKB_KEY_hebrew_samech 0x0cf1 /* U+05E1 HEBREW LETTER SAMEKH */ ++#define XKB_KEY_hebrew_samekh 0x0cf1 /* deprecated */ ++#define XKB_KEY_hebrew_ayin 0x0cf2 /* U+05E2 HEBREW LETTER AYIN */ ++#define XKB_KEY_hebrew_finalpe 0x0cf3 /* U+05E3 HEBREW LETTER FINAL PE */ ++#define XKB_KEY_hebrew_pe 0x0cf4 /* U+05E4 HEBREW LETTER PE */ ++#define XKB_KEY_hebrew_finalzade 0x0cf5 /* U+05E5 HEBREW LETTER FINAL TSADI */ ++#define XKB_KEY_hebrew_finalzadi 0x0cf5 /* deprecated */ ++#define XKB_KEY_hebrew_zade 0x0cf6 /* U+05E6 HEBREW LETTER TSADI */ ++#define XKB_KEY_hebrew_zadi 0x0cf6 /* deprecated */ ++#define XKB_KEY_hebrew_qoph 0x0cf7 /* U+05E7 HEBREW LETTER QOF */ ++#define XKB_KEY_hebrew_kuf 0x0cf7 /* deprecated */ ++#define XKB_KEY_hebrew_resh 0x0cf8 /* U+05E8 HEBREW LETTER RESH */ ++#define XKB_KEY_hebrew_shin 0x0cf9 /* U+05E9 HEBREW LETTER SHIN */ ++#define XKB_KEY_hebrew_taw 0x0cfa /* U+05EA HEBREW LETTER TAV */ ++#define XKB_KEY_hebrew_taf 0x0cfa /* deprecated */ ++#define XKB_KEY_Hebrew_switch 0xff7e /* Alias for mode_switch */ ++ ++/* ++ * Thai ++ * Byte 3 = 0x0d ++ */ ++ ++#define XKB_KEY_Thai_kokai 0x0da1 /* U+0E01 THAI CHARACTER KO KAI */ ++#define XKB_KEY_Thai_khokhai 0x0da2 /* U+0E02 THAI CHARACTER KHO KHAI */ ++#define XKB_KEY_Thai_khokhuat 0x0da3 /* U+0E03 THAI CHARACTER KHO KHUAT */ ++#define XKB_KEY_Thai_khokhwai 0x0da4 /* U+0E04 THAI CHARACTER KHO KHWAI */ ++#define XKB_KEY_Thai_khokhon 0x0da5 /* U+0E05 THAI CHARACTER KHO KHON */ ++#define XKB_KEY_Thai_khorakhang 0x0da6 /* U+0E06 THAI CHARACTER KHO RAKHANG */ ++#define XKB_KEY_Thai_ngongu 0x0da7 /* U+0E07 THAI CHARACTER NGO NGU */ ++#define XKB_KEY_Thai_chochan 0x0da8 /* U+0E08 THAI CHARACTER CHO CHAN */ ++#define XKB_KEY_Thai_choching 0x0da9 /* U+0E09 THAI CHARACTER CHO CHING */ ++#define XKB_KEY_Thai_chochang 0x0daa /* U+0E0A THAI CHARACTER CHO CHANG */ ++#define XKB_KEY_Thai_soso 0x0dab /* U+0E0B THAI CHARACTER SO SO */ ++#define XKB_KEY_Thai_chochoe 0x0dac /* U+0E0C THAI CHARACTER CHO CHOE */ ++#define XKB_KEY_Thai_yoying 0x0dad /* U+0E0D THAI CHARACTER YO YING */ ++#define XKB_KEY_Thai_dochada 0x0dae /* U+0E0E THAI CHARACTER DO CHADA */ ++#define XKB_KEY_Thai_topatak 0x0daf /* U+0E0F THAI CHARACTER TO PATAK */ ++#define XKB_KEY_Thai_thothan 0x0db0 /* U+0E10 THAI CHARACTER THO THAN */ ++#define XKB_KEY_Thai_thonangmontho 0x0db1 /* U+0E11 THAI CHARACTER THO NANGMONTHO */ ++#define XKB_KEY_Thai_thophuthao 0x0db2 /* U+0E12 THAI CHARACTER THO PHUTHAO */ ++#define XKB_KEY_Thai_nonen 0x0db3 /* U+0E13 THAI CHARACTER NO NEN */ ++#define XKB_KEY_Thai_dodek 0x0db4 /* U+0E14 THAI CHARACTER DO DEK */ ++#define XKB_KEY_Thai_totao 0x0db5 /* U+0E15 THAI CHARACTER TO TAO */ ++#define XKB_KEY_Thai_thothung 0x0db6 /* U+0E16 THAI CHARACTER THO THUNG */ ++#define XKB_KEY_Thai_thothahan 0x0db7 /* U+0E17 THAI CHARACTER THO THAHAN */ ++#define XKB_KEY_Thai_thothong 0x0db8 /* U+0E18 THAI CHARACTER THO THONG */ ++#define XKB_KEY_Thai_nonu 0x0db9 /* U+0E19 THAI CHARACTER NO NU */ ++#define XKB_KEY_Thai_bobaimai 0x0dba /* U+0E1A THAI CHARACTER BO BAIMAI */ ++#define XKB_KEY_Thai_popla 0x0dbb /* U+0E1B THAI CHARACTER PO PLA */ ++#define XKB_KEY_Thai_phophung 0x0dbc /* U+0E1C THAI CHARACTER PHO PHUNG */ ++#define XKB_KEY_Thai_fofa 0x0dbd /* U+0E1D THAI CHARACTER FO FA */ ++#define XKB_KEY_Thai_phophan 0x0dbe /* U+0E1E THAI CHARACTER PHO PHAN */ ++#define XKB_KEY_Thai_fofan 0x0dbf /* U+0E1F THAI CHARACTER FO FAN */ ++#define XKB_KEY_Thai_phosamphao 0x0dc0 /* U+0E20 THAI CHARACTER PHO SAMPHAO */ ++#define XKB_KEY_Thai_moma 0x0dc1 /* U+0E21 THAI CHARACTER MO MA */ ++#define XKB_KEY_Thai_yoyak 0x0dc2 /* U+0E22 THAI CHARACTER YO YAK */ ++#define XKB_KEY_Thai_rorua 0x0dc3 /* U+0E23 THAI CHARACTER RO RUA */ ++#define XKB_KEY_Thai_ru 0x0dc4 /* U+0E24 THAI CHARACTER RU */ ++#define XKB_KEY_Thai_loling 0x0dc5 /* U+0E25 THAI CHARACTER LO LING */ ++#define XKB_KEY_Thai_lu 0x0dc6 /* U+0E26 THAI CHARACTER LU */ ++#define XKB_KEY_Thai_wowaen 0x0dc7 /* U+0E27 THAI CHARACTER WO WAEN */ ++#define XKB_KEY_Thai_sosala 0x0dc8 /* U+0E28 THAI CHARACTER SO SALA */ ++#define XKB_KEY_Thai_sorusi 0x0dc9 /* U+0E29 THAI CHARACTER SO RUSI */ ++#define XKB_KEY_Thai_sosua 0x0dca /* U+0E2A THAI CHARACTER SO SUA */ ++#define XKB_KEY_Thai_hohip 0x0dcb /* U+0E2B THAI CHARACTER HO HIP */ ++#define XKB_KEY_Thai_lochula 0x0dcc /* U+0E2C THAI CHARACTER LO CHULA */ ++#define XKB_KEY_Thai_oang 0x0dcd /* U+0E2D THAI CHARACTER O ANG */ ++#define XKB_KEY_Thai_honokhuk 0x0dce /* U+0E2E THAI CHARACTER HO NOKHUK */ ++#define XKB_KEY_Thai_paiyannoi 0x0dcf /* U+0E2F THAI CHARACTER PAIYANNOI */ ++#define XKB_KEY_Thai_saraa 0x0dd0 /* U+0E30 THAI CHARACTER SARA A */ ++#define XKB_KEY_Thai_maihanakat 0x0dd1 /* U+0E31 THAI CHARACTER MAI HAN-AKAT */ ++#define XKB_KEY_Thai_saraaa 0x0dd2 /* U+0E32 THAI CHARACTER SARA AA */ ++#define XKB_KEY_Thai_saraam 0x0dd3 /* U+0E33 THAI CHARACTER SARA AM */ ++#define XKB_KEY_Thai_sarai 0x0dd4 /* U+0E34 THAI CHARACTER SARA I */ ++#define XKB_KEY_Thai_saraii 0x0dd5 /* U+0E35 THAI CHARACTER SARA II */ ++#define XKB_KEY_Thai_saraue 0x0dd6 /* U+0E36 THAI CHARACTER SARA UE */ ++#define XKB_KEY_Thai_sarauee 0x0dd7 /* U+0E37 THAI CHARACTER SARA UEE */ ++#define XKB_KEY_Thai_sarau 0x0dd8 /* U+0E38 THAI CHARACTER SARA U */ ++#define XKB_KEY_Thai_sarauu 0x0dd9 /* U+0E39 THAI CHARACTER SARA UU */ ++#define XKB_KEY_Thai_phinthu 0x0dda /* U+0E3A THAI CHARACTER PHINTHU */ ++#define XKB_KEY_Thai_maihanakat_maitho 0x0dde ++#define XKB_KEY_Thai_baht 0x0ddf /* U+0E3F THAI CURRENCY SYMBOL BAHT */ ++#define XKB_KEY_Thai_sarae 0x0de0 /* U+0E40 THAI CHARACTER SARA E */ ++#define XKB_KEY_Thai_saraae 0x0de1 /* U+0E41 THAI CHARACTER SARA AE */ ++#define XKB_KEY_Thai_sarao 0x0de2 /* U+0E42 THAI CHARACTER SARA O */ ++#define XKB_KEY_Thai_saraaimaimuan 0x0de3 /* U+0E43 THAI CHARACTER SARA AI MAIMUAN */ ++#define XKB_KEY_Thai_saraaimaimalai 0x0de4 /* U+0E44 THAI CHARACTER SARA AI MAIMALAI */ ++#define XKB_KEY_Thai_lakkhangyao 0x0de5 /* U+0E45 THAI CHARACTER LAKKHANGYAO */ ++#define XKB_KEY_Thai_maiyamok 0x0de6 /* U+0E46 THAI CHARACTER MAIYAMOK */ ++#define XKB_KEY_Thai_maitaikhu 0x0de7 /* U+0E47 THAI CHARACTER MAITAIKHU */ ++#define XKB_KEY_Thai_maiek 0x0de8 /* U+0E48 THAI CHARACTER MAI EK */ ++#define XKB_KEY_Thai_maitho 0x0de9 /* U+0E49 THAI CHARACTER MAI THO */ ++#define XKB_KEY_Thai_maitri 0x0dea /* U+0E4A THAI CHARACTER MAI TRI */ ++#define XKB_KEY_Thai_maichattawa 0x0deb /* U+0E4B THAI CHARACTER MAI CHATTAWA */ ++#define XKB_KEY_Thai_thanthakhat 0x0dec /* U+0E4C THAI CHARACTER THANTHAKHAT */ ++#define XKB_KEY_Thai_nikhahit 0x0ded /* U+0E4D THAI CHARACTER NIKHAHIT */ ++#define XKB_KEY_Thai_leksun 0x0df0 /* U+0E50 THAI DIGIT ZERO */ ++#define XKB_KEY_Thai_leknung 0x0df1 /* U+0E51 THAI DIGIT ONE */ ++#define XKB_KEY_Thai_leksong 0x0df2 /* U+0E52 THAI DIGIT TWO */ ++#define XKB_KEY_Thai_leksam 0x0df3 /* U+0E53 THAI DIGIT THREE */ ++#define XKB_KEY_Thai_leksi 0x0df4 /* U+0E54 THAI DIGIT FOUR */ ++#define XKB_KEY_Thai_lekha 0x0df5 /* U+0E55 THAI DIGIT FIVE */ ++#define XKB_KEY_Thai_lekhok 0x0df6 /* U+0E56 THAI DIGIT SIX */ ++#define XKB_KEY_Thai_lekchet 0x0df7 /* U+0E57 THAI DIGIT SEVEN */ ++#define XKB_KEY_Thai_lekpaet 0x0df8 /* U+0E58 THAI DIGIT EIGHT */ ++#define XKB_KEY_Thai_lekkao 0x0df9 /* U+0E59 THAI DIGIT NINE */ ++ ++/* ++ * Korean ++ * Byte 3 = 0x0e ++ */ ++ ++ ++#define XKB_KEY_Hangul 0xff31 /* Hangul start/stop(toggle) */ ++#define XKB_KEY_Hangul_Start 0xff32 /* Hangul start */ ++#define XKB_KEY_Hangul_End 0xff33 /* Hangul end, English start */ ++#define XKB_KEY_Hangul_Hanja 0xff34 /* Start Hangul->Hanja Conversion */ ++#define XKB_KEY_Hangul_Jamo 0xff35 /* Hangul Jamo mode */ ++#define XKB_KEY_Hangul_Romaja 0xff36 /* Hangul Romaja mode */ ++#define XKB_KEY_Hangul_Codeinput 0xff37 /* Hangul code input mode */ ++#define XKB_KEY_Hangul_Jeonja 0xff38 /* Jeonja mode */ ++#define XKB_KEY_Hangul_Banja 0xff39 /* Banja mode */ ++#define XKB_KEY_Hangul_PreHanja 0xff3a /* Pre Hanja conversion */ ++#define XKB_KEY_Hangul_PostHanja 0xff3b /* Post Hanja conversion */ ++#define XKB_KEY_Hangul_SingleCandidate 0xff3c /* Single candidate */ ++#define XKB_KEY_Hangul_MultipleCandidate 0xff3d /* Multiple candidate */ ++#define XKB_KEY_Hangul_PreviousCandidate 0xff3e /* Previous candidate */ ++#define XKB_KEY_Hangul_Special 0xff3f /* Special symbols */ ++#define XKB_KEY_Hangul_switch 0xff7e /* Alias for mode_switch */ ++ ++/* Hangul Consonant Characters */ ++#define XKB_KEY_Hangul_Kiyeog 0x0ea1 ++#define XKB_KEY_Hangul_SsangKiyeog 0x0ea2 ++#define XKB_KEY_Hangul_KiyeogSios 0x0ea3 ++#define XKB_KEY_Hangul_Nieun 0x0ea4 ++#define XKB_KEY_Hangul_NieunJieuj 0x0ea5 ++#define XKB_KEY_Hangul_NieunHieuh 0x0ea6 ++#define XKB_KEY_Hangul_Dikeud 0x0ea7 ++#define XKB_KEY_Hangul_SsangDikeud 0x0ea8 ++#define XKB_KEY_Hangul_Rieul 0x0ea9 ++#define XKB_KEY_Hangul_RieulKiyeog 0x0eaa ++#define XKB_KEY_Hangul_RieulMieum 0x0eab ++#define XKB_KEY_Hangul_RieulPieub 0x0eac ++#define XKB_KEY_Hangul_RieulSios 0x0ead ++#define XKB_KEY_Hangul_RieulTieut 0x0eae ++#define XKB_KEY_Hangul_RieulPhieuf 0x0eaf ++#define XKB_KEY_Hangul_RieulHieuh 0x0eb0 ++#define XKB_KEY_Hangul_Mieum 0x0eb1 ++#define XKB_KEY_Hangul_Pieub 0x0eb2 ++#define XKB_KEY_Hangul_SsangPieub 0x0eb3 ++#define XKB_KEY_Hangul_PieubSios 0x0eb4 ++#define XKB_KEY_Hangul_Sios 0x0eb5 ++#define XKB_KEY_Hangul_SsangSios 0x0eb6 ++#define XKB_KEY_Hangul_Ieung 0x0eb7 ++#define XKB_KEY_Hangul_Jieuj 0x0eb8 ++#define XKB_KEY_Hangul_SsangJieuj 0x0eb9 ++#define XKB_KEY_Hangul_Cieuc 0x0eba ++#define XKB_KEY_Hangul_Khieuq 0x0ebb ++#define XKB_KEY_Hangul_Tieut 0x0ebc ++#define XKB_KEY_Hangul_Phieuf 0x0ebd ++#define XKB_KEY_Hangul_Hieuh 0x0ebe ++ ++/* Hangul Vowel Characters */ ++#define XKB_KEY_Hangul_A 0x0ebf ++#define XKB_KEY_Hangul_AE 0x0ec0 ++#define XKB_KEY_Hangul_YA 0x0ec1 ++#define XKB_KEY_Hangul_YAE 0x0ec2 ++#define XKB_KEY_Hangul_EO 0x0ec3 ++#define XKB_KEY_Hangul_E 0x0ec4 ++#define XKB_KEY_Hangul_YEO 0x0ec5 ++#define XKB_KEY_Hangul_YE 0x0ec6 ++#define XKB_KEY_Hangul_O 0x0ec7 ++#define XKB_KEY_Hangul_WA 0x0ec8 ++#define XKB_KEY_Hangul_WAE 0x0ec9 ++#define XKB_KEY_Hangul_OE 0x0eca ++#define XKB_KEY_Hangul_YO 0x0ecb ++#define XKB_KEY_Hangul_U 0x0ecc ++#define XKB_KEY_Hangul_WEO 0x0ecd ++#define XKB_KEY_Hangul_WE 0x0ece ++#define XKB_KEY_Hangul_WI 0x0ecf ++#define XKB_KEY_Hangul_YU 0x0ed0 ++#define XKB_KEY_Hangul_EU 0x0ed1 ++#define XKB_KEY_Hangul_YI 0x0ed2 ++#define XKB_KEY_Hangul_I 0x0ed3 ++ ++/* Hangul syllable-final (JongSeong) Characters */ ++#define XKB_KEY_Hangul_J_Kiyeog 0x0ed4 ++#define XKB_KEY_Hangul_J_SsangKiyeog 0x0ed5 ++#define XKB_KEY_Hangul_J_KiyeogSios 0x0ed6 ++#define XKB_KEY_Hangul_J_Nieun 0x0ed7 ++#define XKB_KEY_Hangul_J_NieunJieuj 0x0ed8 ++#define XKB_KEY_Hangul_J_NieunHieuh 0x0ed9 ++#define XKB_KEY_Hangul_J_Dikeud 0x0eda ++#define XKB_KEY_Hangul_J_Rieul 0x0edb ++#define XKB_KEY_Hangul_J_RieulKiyeog 0x0edc ++#define XKB_KEY_Hangul_J_RieulMieum 0x0edd ++#define XKB_KEY_Hangul_J_RieulPieub 0x0ede ++#define XKB_KEY_Hangul_J_RieulSios 0x0edf ++#define XKB_KEY_Hangul_J_RieulTieut 0x0ee0 ++#define XKB_KEY_Hangul_J_RieulPhieuf 0x0ee1 ++#define XKB_KEY_Hangul_J_RieulHieuh 0x0ee2 ++#define XKB_KEY_Hangul_J_Mieum 0x0ee3 ++#define XKB_KEY_Hangul_J_Pieub 0x0ee4 ++#define XKB_KEY_Hangul_J_PieubSios 0x0ee5 ++#define XKB_KEY_Hangul_J_Sios 0x0ee6 ++#define XKB_KEY_Hangul_J_SsangSios 0x0ee7 ++#define XKB_KEY_Hangul_J_Ieung 0x0ee8 ++#define XKB_KEY_Hangul_J_Jieuj 0x0ee9 ++#define XKB_KEY_Hangul_J_Cieuc 0x0eea ++#define XKB_KEY_Hangul_J_Khieuq 0x0eeb ++#define XKB_KEY_Hangul_J_Tieut 0x0eec ++#define XKB_KEY_Hangul_J_Phieuf 0x0eed ++#define XKB_KEY_Hangul_J_Hieuh 0x0eee ++ ++/* Ancient Hangul Consonant Characters */ ++#define XKB_KEY_Hangul_RieulYeorinHieuh 0x0eef ++#define XKB_KEY_Hangul_SunkyeongeumMieum 0x0ef0 ++#define XKB_KEY_Hangul_SunkyeongeumPieub 0x0ef1 ++#define XKB_KEY_Hangul_PanSios 0x0ef2 ++#define XKB_KEY_Hangul_KkogjiDalrinIeung 0x0ef3 ++#define XKB_KEY_Hangul_SunkyeongeumPhieuf 0x0ef4 ++#define XKB_KEY_Hangul_YeorinHieuh 0x0ef5 ++ ++/* Ancient Hangul Vowel Characters */ ++#define XKB_KEY_Hangul_AraeA 0x0ef6 ++#define XKB_KEY_Hangul_AraeAE 0x0ef7 ++ ++/* Ancient Hangul syllable-final (JongSeong) Characters */ ++#define XKB_KEY_Hangul_J_PanSios 0x0ef8 ++#define XKB_KEY_Hangul_J_KkogjiDalrinIeung 0x0ef9 ++#define XKB_KEY_Hangul_J_YeorinHieuh 0x0efa ++ ++/* Korean currency symbol */ ++#define XKB_KEY_Korean_Won 0x0eff /*(U+20A9 WON SIGN)*/ ++ ++ ++/* ++ * Armenian ++ */ ++ ++#define XKB_KEY_Armenian_ligature_ew 0x1000587 /* U+0587 ARMENIAN SMALL LIGATURE ECH YIWN */ ++#define XKB_KEY_Armenian_full_stop 0x1000589 /* U+0589 ARMENIAN FULL STOP */ ++#define XKB_KEY_Armenian_verjaket 0x1000589 /* U+0589 ARMENIAN FULL STOP */ ++#define XKB_KEY_Armenian_separation_mark 0x100055d /* U+055D ARMENIAN COMMA */ ++#define XKB_KEY_Armenian_but 0x100055d /* U+055D ARMENIAN COMMA */ ++#define XKB_KEY_Armenian_hyphen 0x100058a /* U+058A ARMENIAN HYPHEN */ ++#define XKB_KEY_Armenian_yentamna 0x100058a /* U+058A ARMENIAN HYPHEN */ ++#define XKB_KEY_Armenian_exclam 0x100055c /* U+055C ARMENIAN EXCLAMATION MARK */ ++#define XKB_KEY_Armenian_amanak 0x100055c /* U+055C ARMENIAN EXCLAMATION MARK */ ++#define XKB_KEY_Armenian_accent 0x100055b /* U+055B ARMENIAN EMPHASIS MARK */ ++#define XKB_KEY_Armenian_shesht 0x100055b /* U+055B ARMENIAN EMPHASIS MARK */ ++#define XKB_KEY_Armenian_question 0x100055e /* U+055E ARMENIAN QUESTION MARK */ ++#define XKB_KEY_Armenian_paruyk 0x100055e /* U+055E ARMENIAN QUESTION MARK */ ++#define XKB_KEY_Armenian_AYB 0x1000531 /* U+0531 ARMENIAN CAPITAL LETTER AYB */ ++#define XKB_KEY_Armenian_ayb 0x1000561 /* U+0561 ARMENIAN SMALL LETTER AYB */ ++#define XKB_KEY_Armenian_BEN 0x1000532 /* U+0532 ARMENIAN CAPITAL LETTER BEN */ ++#define XKB_KEY_Armenian_ben 0x1000562 /* U+0562 ARMENIAN SMALL LETTER BEN */ ++#define XKB_KEY_Armenian_GIM 0x1000533 /* U+0533 ARMENIAN CAPITAL LETTER GIM */ ++#define XKB_KEY_Armenian_gim 0x1000563 /* U+0563 ARMENIAN SMALL LETTER GIM */ ++#define XKB_KEY_Armenian_DA 0x1000534 /* U+0534 ARMENIAN CAPITAL LETTER DA */ ++#define XKB_KEY_Armenian_da 0x1000564 /* U+0564 ARMENIAN SMALL LETTER DA */ ++#define XKB_KEY_Armenian_YECH 0x1000535 /* U+0535 ARMENIAN CAPITAL LETTER ECH */ ++#define XKB_KEY_Armenian_yech 0x1000565 /* U+0565 ARMENIAN SMALL LETTER ECH */ ++#define XKB_KEY_Armenian_ZA 0x1000536 /* U+0536 ARMENIAN CAPITAL LETTER ZA */ ++#define XKB_KEY_Armenian_za 0x1000566 /* U+0566 ARMENIAN SMALL LETTER ZA */ ++#define XKB_KEY_Armenian_E 0x1000537 /* U+0537 ARMENIAN CAPITAL LETTER EH */ ++#define XKB_KEY_Armenian_e 0x1000567 /* U+0567 ARMENIAN SMALL LETTER EH */ ++#define XKB_KEY_Armenian_AT 0x1000538 /* U+0538 ARMENIAN CAPITAL LETTER ET */ ++#define XKB_KEY_Armenian_at 0x1000568 /* U+0568 ARMENIAN SMALL LETTER ET */ ++#define XKB_KEY_Armenian_TO 0x1000539 /* U+0539 ARMENIAN CAPITAL LETTER TO */ ++#define XKB_KEY_Armenian_to 0x1000569 /* U+0569 ARMENIAN SMALL LETTER TO */ ++#define XKB_KEY_Armenian_ZHE 0x100053a /* U+053A ARMENIAN CAPITAL LETTER ZHE */ ++#define XKB_KEY_Armenian_zhe 0x100056a /* U+056A ARMENIAN SMALL LETTER ZHE */ ++#define XKB_KEY_Armenian_INI 0x100053b /* U+053B ARMENIAN CAPITAL LETTER INI */ ++#define XKB_KEY_Armenian_ini 0x100056b /* U+056B ARMENIAN SMALL LETTER INI */ ++#define XKB_KEY_Armenian_LYUN 0x100053c /* U+053C ARMENIAN CAPITAL LETTER LIWN */ ++#define XKB_KEY_Armenian_lyun 0x100056c /* U+056C ARMENIAN SMALL LETTER LIWN */ ++#define XKB_KEY_Armenian_KHE 0x100053d /* U+053D ARMENIAN CAPITAL LETTER XEH */ ++#define XKB_KEY_Armenian_khe 0x100056d /* U+056D ARMENIAN SMALL LETTER XEH */ ++#define XKB_KEY_Armenian_TSA 0x100053e /* U+053E ARMENIAN CAPITAL LETTER CA */ ++#define XKB_KEY_Armenian_tsa 0x100056e /* U+056E ARMENIAN SMALL LETTER CA */ ++#define XKB_KEY_Armenian_KEN 0x100053f /* U+053F ARMENIAN CAPITAL LETTER KEN */ ++#define XKB_KEY_Armenian_ken 0x100056f /* U+056F ARMENIAN SMALL LETTER KEN */ ++#define XKB_KEY_Armenian_HO 0x1000540 /* U+0540 ARMENIAN CAPITAL LETTER HO */ ++#define XKB_KEY_Armenian_ho 0x1000570 /* U+0570 ARMENIAN SMALL LETTER HO */ ++#define XKB_KEY_Armenian_DZA 0x1000541 /* U+0541 ARMENIAN CAPITAL LETTER JA */ ++#define XKB_KEY_Armenian_dza 0x1000571 /* U+0571 ARMENIAN SMALL LETTER JA */ ++#define XKB_KEY_Armenian_GHAT 0x1000542 /* U+0542 ARMENIAN CAPITAL LETTER GHAD */ ++#define XKB_KEY_Armenian_ghat 0x1000572 /* U+0572 ARMENIAN SMALL LETTER GHAD */ ++#define XKB_KEY_Armenian_TCHE 0x1000543 /* U+0543 ARMENIAN CAPITAL LETTER CHEH */ ++#define XKB_KEY_Armenian_tche 0x1000573 /* U+0573 ARMENIAN SMALL LETTER CHEH */ ++#define XKB_KEY_Armenian_MEN 0x1000544 /* U+0544 ARMENIAN CAPITAL LETTER MEN */ ++#define XKB_KEY_Armenian_men 0x1000574 /* U+0574 ARMENIAN SMALL LETTER MEN */ ++#define XKB_KEY_Armenian_HI 0x1000545 /* U+0545 ARMENIAN CAPITAL LETTER YI */ ++#define XKB_KEY_Armenian_hi 0x1000575 /* U+0575 ARMENIAN SMALL LETTER YI */ ++#define XKB_KEY_Armenian_NU 0x1000546 /* U+0546 ARMENIAN CAPITAL LETTER NOW */ ++#define XKB_KEY_Armenian_nu 0x1000576 /* U+0576 ARMENIAN SMALL LETTER NOW */ ++#define XKB_KEY_Armenian_SHA 0x1000547 /* U+0547 ARMENIAN CAPITAL LETTER SHA */ ++#define XKB_KEY_Armenian_sha 0x1000577 /* U+0577 ARMENIAN SMALL LETTER SHA */ ++#define XKB_KEY_Armenian_VO 0x1000548 /* U+0548 ARMENIAN CAPITAL LETTER VO */ ++#define XKB_KEY_Armenian_vo 0x1000578 /* U+0578 ARMENIAN SMALL LETTER VO */ ++#define XKB_KEY_Armenian_CHA 0x1000549 /* U+0549 ARMENIAN CAPITAL LETTER CHA */ ++#define XKB_KEY_Armenian_cha 0x1000579 /* U+0579 ARMENIAN SMALL LETTER CHA */ ++#define XKB_KEY_Armenian_PE 0x100054a /* U+054A ARMENIAN CAPITAL LETTER PEH */ ++#define XKB_KEY_Armenian_pe 0x100057a /* U+057A ARMENIAN SMALL LETTER PEH */ ++#define XKB_KEY_Armenian_JE 0x100054b /* U+054B ARMENIAN CAPITAL LETTER JHEH */ ++#define XKB_KEY_Armenian_je 0x100057b /* U+057B ARMENIAN SMALL LETTER JHEH */ ++#define XKB_KEY_Armenian_RA 0x100054c /* U+054C ARMENIAN CAPITAL LETTER RA */ ++#define XKB_KEY_Armenian_ra 0x100057c /* U+057C ARMENIAN SMALL LETTER RA */ ++#define XKB_KEY_Armenian_SE 0x100054d /* U+054D ARMENIAN CAPITAL LETTER SEH */ ++#define XKB_KEY_Armenian_se 0x100057d /* U+057D ARMENIAN SMALL LETTER SEH */ ++#define XKB_KEY_Armenian_VEV 0x100054e /* U+054E ARMENIAN CAPITAL LETTER VEW */ ++#define XKB_KEY_Armenian_vev 0x100057e /* U+057E ARMENIAN SMALL LETTER VEW */ ++#define XKB_KEY_Armenian_TYUN 0x100054f /* U+054F ARMENIAN CAPITAL LETTER TIWN */ ++#define XKB_KEY_Armenian_tyun 0x100057f /* U+057F ARMENIAN SMALL LETTER TIWN */ ++#define XKB_KEY_Armenian_RE 0x1000550 /* U+0550 ARMENIAN CAPITAL LETTER REH */ ++#define XKB_KEY_Armenian_re 0x1000580 /* U+0580 ARMENIAN SMALL LETTER REH */ ++#define XKB_KEY_Armenian_TSO 0x1000551 /* U+0551 ARMENIAN CAPITAL LETTER CO */ ++#define XKB_KEY_Armenian_tso 0x1000581 /* U+0581 ARMENIAN SMALL LETTER CO */ ++#define XKB_KEY_Armenian_VYUN 0x1000552 /* U+0552 ARMENIAN CAPITAL LETTER YIWN */ ++#define XKB_KEY_Armenian_vyun 0x1000582 /* U+0582 ARMENIAN SMALL LETTER YIWN */ ++#define XKB_KEY_Armenian_PYUR 0x1000553 /* U+0553 ARMENIAN CAPITAL LETTER PIWR */ ++#define XKB_KEY_Armenian_pyur 0x1000583 /* U+0583 ARMENIAN SMALL LETTER PIWR */ ++#define XKB_KEY_Armenian_KE 0x1000554 /* U+0554 ARMENIAN CAPITAL LETTER KEH */ ++#define XKB_KEY_Armenian_ke 0x1000584 /* U+0584 ARMENIAN SMALL LETTER KEH */ ++#define XKB_KEY_Armenian_O 0x1000555 /* U+0555 ARMENIAN CAPITAL LETTER OH */ ++#define XKB_KEY_Armenian_o 0x1000585 /* U+0585 ARMENIAN SMALL LETTER OH */ ++#define XKB_KEY_Armenian_FE 0x1000556 /* U+0556 ARMENIAN CAPITAL LETTER FEH */ ++#define XKB_KEY_Armenian_fe 0x1000586 /* U+0586 ARMENIAN SMALL LETTER FEH */ ++#define XKB_KEY_Armenian_apostrophe 0x100055a /* U+055A ARMENIAN APOSTROPHE */ ++ ++/* ++ * Georgian ++ */ ++ ++#define XKB_KEY_Georgian_an 0x10010d0 /* U+10D0 GEORGIAN LETTER AN */ ++#define XKB_KEY_Georgian_ban 0x10010d1 /* U+10D1 GEORGIAN LETTER BAN */ ++#define XKB_KEY_Georgian_gan 0x10010d2 /* U+10D2 GEORGIAN LETTER GAN */ ++#define XKB_KEY_Georgian_don 0x10010d3 /* U+10D3 GEORGIAN LETTER DON */ ++#define XKB_KEY_Georgian_en 0x10010d4 /* U+10D4 GEORGIAN LETTER EN */ ++#define XKB_KEY_Georgian_vin 0x10010d5 /* U+10D5 GEORGIAN LETTER VIN */ ++#define XKB_KEY_Georgian_zen 0x10010d6 /* U+10D6 GEORGIAN LETTER ZEN */ ++#define XKB_KEY_Georgian_tan 0x10010d7 /* U+10D7 GEORGIAN LETTER TAN */ ++#define XKB_KEY_Georgian_in 0x10010d8 /* U+10D8 GEORGIAN LETTER IN */ ++#define XKB_KEY_Georgian_kan 0x10010d9 /* U+10D9 GEORGIAN LETTER KAN */ ++#define XKB_KEY_Georgian_las 0x10010da /* U+10DA GEORGIAN LETTER LAS */ ++#define XKB_KEY_Georgian_man 0x10010db /* U+10DB GEORGIAN LETTER MAN */ ++#define XKB_KEY_Georgian_nar 0x10010dc /* U+10DC GEORGIAN LETTER NAR */ ++#define XKB_KEY_Georgian_on 0x10010dd /* U+10DD GEORGIAN LETTER ON */ ++#define XKB_KEY_Georgian_par 0x10010de /* U+10DE GEORGIAN LETTER PAR */ ++#define XKB_KEY_Georgian_zhar 0x10010df /* U+10DF GEORGIAN LETTER ZHAR */ ++#define XKB_KEY_Georgian_rae 0x10010e0 /* U+10E0 GEORGIAN LETTER RAE */ ++#define XKB_KEY_Georgian_san 0x10010e1 /* U+10E1 GEORGIAN LETTER SAN */ ++#define XKB_KEY_Georgian_tar 0x10010e2 /* U+10E2 GEORGIAN LETTER TAR */ ++#define XKB_KEY_Georgian_un 0x10010e3 /* U+10E3 GEORGIAN LETTER UN */ ++#define XKB_KEY_Georgian_phar 0x10010e4 /* U+10E4 GEORGIAN LETTER PHAR */ ++#define XKB_KEY_Georgian_khar 0x10010e5 /* U+10E5 GEORGIAN LETTER KHAR */ ++#define XKB_KEY_Georgian_ghan 0x10010e6 /* U+10E6 GEORGIAN LETTER GHAN */ ++#define XKB_KEY_Georgian_qar 0x10010e7 /* U+10E7 GEORGIAN LETTER QAR */ ++#define XKB_KEY_Georgian_shin 0x10010e8 /* U+10E8 GEORGIAN LETTER SHIN */ ++#define XKB_KEY_Georgian_chin 0x10010e9 /* U+10E9 GEORGIAN LETTER CHIN */ ++#define XKB_KEY_Georgian_can 0x10010ea /* U+10EA GEORGIAN LETTER CAN */ ++#define XKB_KEY_Georgian_jil 0x10010eb /* U+10EB GEORGIAN LETTER JIL */ ++#define XKB_KEY_Georgian_cil 0x10010ec /* U+10EC GEORGIAN LETTER CIL */ ++#define XKB_KEY_Georgian_char 0x10010ed /* U+10ED GEORGIAN LETTER CHAR */ ++#define XKB_KEY_Georgian_xan 0x10010ee /* U+10EE GEORGIAN LETTER XAN */ ++#define XKB_KEY_Georgian_jhan 0x10010ef /* U+10EF GEORGIAN LETTER JHAN */ ++#define XKB_KEY_Georgian_hae 0x10010f0 /* U+10F0 GEORGIAN LETTER HAE */ ++#define XKB_KEY_Georgian_he 0x10010f1 /* U+10F1 GEORGIAN LETTER HE */ ++#define XKB_KEY_Georgian_hie 0x10010f2 /* U+10F2 GEORGIAN LETTER HIE */ ++#define XKB_KEY_Georgian_we 0x10010f3 /* U+10F3 GEORGIAN LETTER WE */ ++#define XKB_KEY_Georgian_har 0x10010f4 /* U+10F4 GEORGIAN LETTER HAR */ ++#define XKB_KEY_Georgian_hoe 0x10010f5 /* U+10F5 GEORGIAN LETTER HOE */ ++#define XKB_KEY_Georgian_fi 0x10010f6 /* U+10F6 GEORGIAN LETTER FI */ ++ ++/* ++ * Azeri (and other Turkic or Caucasian languages) ++ */ ++ ++/* latin */ ++#define XKB_KEY_Xabovedot 0x1001e8a /* U+1E8A LATIN CAPITAL LETTER X WITH DOT ABOVE */ ++#define XKB_KEY_Ibreve 0x100012c /* U+012C LATIN CAPITAL LETTER I WITH BREVE */ ++#define XKB_KEY_Zstroke 0x10001b5 /* U+01B5 LATIN CAPITAL LETTER Z WITH STROKE */ ++#define XKB_KEY_Gcaron 0x10001e6 /* U+01E6 LATIN CAPITAL LETTER G WITH CARON */ ++#define XKB_KEY_Ocaron 0x10001d1 /* U+01D2 LATIN CAPITAL LETTER O WITH CARON */ ++#define XKB_KEY_Obarred 0x100019f /* U+019F LATIN CAPITAL LETTER O WITH MIDDLE TILDE */ ++#define XKB_KEY_xabovedot 0x1001e8b /* U+1E8B LATIN SMALL LETTER X WITH DOT ABOVE */ ++#define XKB_KEY_ibreve 0x100012d /* U+012D LATIN SMALL LETTER I WITH BREVE */ ++#define XKB_KEY_zstroke 0x10001b6 /* U+01B6 LATIN SMALL LETTER Z WITH STROKE */ ++#define XKB_KEY_gcaron 0x10001e7 /* U+01E7 LATIN SMALL LETTER G WITH CARON */ ++#define XKB_KEY_ocaron 0x10001d2 /* U+01D2 LATIN SMALL LETTER O WITH CARON */ ++#define XKB_KEY_obarred 0x1000275 /* U+0275 LATIN SMALL LETTER BARRED O */ ++#define XKB_KEY_SCHWA 0x100018f /* U+018F LATIN CAPITAL LETTER SCHWA */ ++#define XKB_KEY_schwa 0x1000259 /* U+0259 LATIN SMALL LETTER SCHWA */ ++#define XKB_KEY_EZH 0x10001b7 /* U+01B7 LATIN CAPITAL LETTER EZH */ ++#define XKB_KEY_ezh 0x1000292 /* U+0292 LATIN SMALL LETTER EZH */ ++/* those are not really Caucasus */ ++/* For Inupiak */ ++#define XKB_KEY_Lbelowdot 0x1001e36 /* U+1E36 LATIN CAPITAL LETTER L WITH DOT BELOW */ ++#define XKB_KEY_lbelowdot 0x1001e37 /* U+1E37 LATIN SMALL LETTER L WITH DOT BELOW */ ++ ++/* ++ * Vietnamese ++ */ ++ ++#define XKB_KEY_Abelowdot 0x1001ea0 /* U+1EA0 LATIN CAPITAL LETTER A WITH DOT BELOW */ ++#define XKB_KEY_abelowdot 0x1001ea1 /* U+1EA1 LATIN SMALL LETTER A WITH DOT BELOW */ ++#define XKB_KEY_Ahook 0x1001ea2 /* U+1EA2 LATIN CAPITAL LETTER A WITH HOOK ABOVE */ ++#define XKB_KEY_ahook 0x1001ea3 /* U+1EA3 LATIN SMALL LETTER A WITH HOOK ABOVE */ ++#define XKB_KEY_Acircumflexacute 0x1001ea4 /* U+1EA4 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE */ ++#define XKB_KEY_acircumflexacute 0x1001ea5 /* U+1EA5 LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE */ ++#define XKB_KEY_Acircumflexgrave 0x1001ea6 /* U+1EA6 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE */ ++#define XKB_KEY_acircumflexgrave 0x1001ea7 /* U+1EA7 LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE */ ++#define XKB_KEY_Acircumflexhook 0x1001ea8 /* U+1EA8 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */ ++#define XKB_KEY_acircumflexhook 0x1001ea9 /* U+1EA9 LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */ ++#define XKB_KEY_Acircumflextilde 0x1001eaa /* U+1EAA LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE */ ++#define XKB_KEY_acircumflextilde 0x1001eab /* U+1EAB LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE */ ++#define XKB_KEY_Acircumflexbelowdot 0x1001eac /* U+1EAC LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW */ ++#define XKB_KEY_acircumflexbelowdot 0x1001ead /* U+1EAD LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW */ ++#define XKB_KEY_Abreveacute 0x1001eae /* U+1EAE LATIN CAPITAL LETTER A WITH BREVE AND ACUTE */ ++#define XKB_KEY_abreveacute 0x1001eaf /* U+1EAF LATIN SMALL LETTER A WITH BREVE AND ACUTE */ ++#define XKB_KEY_Abrevegrave 0x1001eb0 /* U+1EB0 LATIN CAPITAL LETTER A WITH BREVE AND GRAVE */ ++#define XKB_KEY_abrevegrave 0x1001eb1 /* U+1EB1 LATIN SMALL LETTER A WITH BREVE AND GRAVE */ ++#define XKB_KEY_Abrevehook 0x1001eb2 /* U+1EB2 LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE */ ++#define XKB_KEY_abrevehook 0x1001eb3 /* U+1EB3 LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE */ ++#define XKB_KEY_Abrevetilde 0x1001eb4 /* U+1EB4 LATIN CAPITAL LETTER A WITH BREVE AND TILDE */ ++#define XKB_KEY_abrevetilde 0x1001eb5 /* U+1EB5 LATIN SMALL LETTER A WITH BREVE AND TILDE */ ++#define XKB_KEY_Abrevebelowdot 0x1001eb6 /* U+1EB6 LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW */ ++#define XKB_KEY_abrevebelowdot 0x1001eb7 /* U+1EB7 LATIN SMALL LETTER A WITH BREVE AND DOT BELOW */ ++#define XKB_KEY_Ebelowdot 0x1001eb8 /* U+1EB8 LATIN CAPITAL LETTER E WITH DOT BELOW */ ++#define XKB_KEY_ebelowdot 0x1001eb9 /* U+1EB9 LATIN SMALL LETTER E WITH DOT BELOW */ ++#define XKB_KEY_Ehook 0x1001eba /* U+1EBA LATIN CAPITAL LETTER E WITH HOOK ABOVE */ ++#define XKB_KEY_ehook 0x1001ebb /* U+1EBB LATIN SMALL LETTER E WITH HOOK ABOVE */ ++#define XKB_KEY_Etilde 0x1001ebc /* U+1EBC LATIN CAPITAL LETTER E WITH TILDE */ ++#define XKB_KEY_etilde 0x1001ebd /* U+1EBD LATIN SMALL LETTER E WITH TILDE */ ++#define XKB_KEY_Ecircumflexacute 0x1001ebe /* U+1EBE LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE */ ++#define XKB_KEY_ecircumflexacute 0x1001ebf /* U+1EBF LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE */ ++#define XKB_KEY_Ecircumflexgrave 0x1001ec0 /* U+1EC0 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE */ ++#define XKB_KEY_ecircumflexgrave 0x1001ec1 /* U+1EC1 LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE */ ++#define XKB_KEY_Ecircumflexhook 0x1001ec2 /* U+1EC2 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */ ++#define XKB_KEY_ecircumflexhook 0x1001ec3 /* U+1EC3 LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */ ++#define XKB_KEY_Ecircumflextilde 0x1001ec4 /* U+1EC4 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE */ ++#define XKB_KEY_ecircumflextilde 0x1001ec5 /* U+1EC5 LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE */ ++#define XKB_KEY_Ecircumflexbelowdot 0x1001ec6 /* U+1EC6 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW */ ++#define XKB_KEY_ecircumflexbelowdot 0x1001ec7 /* U+1EC7 LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW */ ++#define XKB_KEY_Ihook 0x1001ec8 /* U+1EC8 LATIN CAPITAL LETTER I WITH HOOK ABOVE */ ++#define XKB_KEY_ihook 0x1001ec9 /* U+1EC9 LATIN SMALL LETTER I WITH HOOK ABOVE */ ++#define XKB_KEY_Ibelowdot 0x1001eca /* U+1ECA LATIN CAPITAL LETTER I WITH DOT BELOW */ ++#define XKB_KEY_ibelowdot 0x1001ecb /* U+1ECB LATIN SMALL LETTER I WITH DOT BELOW */ ++#define XKB_KEY_Obelowdot 0x1001ecc /* U+1ECC LATIN CAPITAL LETTER O WITH DOT BELOW */ ++#define XKB_KEY_obelowdot 0x1001ecd /* U+1ECD LATIN SMALL LETTER O WITH DOT BELOW */ ++#define XKB_KEY_Ohook 0x1001ece /* U+1ECE LATIN CAPITAL LETTER O WITH HOOK ABOVE */ ++#define XKB_KEY_ohook 0x1001ecf /* U+1ECF LATIN SMALL LETTER O WITH HOOK ABOVE */ ++#define XKB_KEY_Ocircumflexacute 0x1001ed0 /* U+1ED0 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE */ ++#define XKB_KEY_ocircumflexacute 0x1001ed1 /* U+1ED1 LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE */ ++#define XKB_KEY_Ocircumflexgrave 0x1001ed2 /* U+1ED2 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE */ ++#define XKB_KEY_ocircumflexgrave 0x1001ed3 /* U+1ED3 LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE */ ++#define XKB_KEY_Ocircumflexhook 0x1001ed4 /* U+1ED4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */ ++#define XKB_KEY_ocircumflexhook 0x1001ed5 /* U+1ED5 LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */ ++#define XKB_KEY_Ocircumflextilde 0x1001ed6 /* U+1ED6 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE */ ++#define XKB_KEY_ocircumflextilde 0x1001ed7 /* U+1ED7 LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE */ ++#define XKB_KEY_Ocircumflexbelowdot 0x1001ed8 /* U+1ED8 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW */ ++#define XKB_KEY_ocircumflexbelowdot 0x1001ed9 /* U+1ED9 LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW */ ++#define XKB_KEY_Ohornacute 0x1001eda /* U+1EDA LATIN CAPITAL LETTER O WITH HORN AND ACUTE */ ++#define XKB_KEY_ohornacute 0x1001edb /* U+1EDB LATIN SMALL LETTER O WITH HORN AND ACUTE */ ++#define XKB_KEY_Ohorngrave 0x1001edc /* U+1EDC LATIN CAPITAL LETTER O WITH HORN AND GRAVE */ ++#define XKB_KEY_ohorngrave 0x1001edd /* U+1EDD LATIN SMALL LETTER O WITH HORN AND GRAVE */ ++#define XKB_KEY_Ohornhook 0x1001ede /* U+1EDE LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE */ ++#define XKB_KEY_ohornhook 0x1001edf /* U+1EDF LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE */ ++#define XKB_KEY_Ohorntilde 0x1001ee0 /* U+1EE0 LATIN CAPITAL LETTER O WITH HORN AND TILDE */ ++#define XKB_KEY_ohorntilde 0x1001ee1 /* U+1EE1 LATIN SMALL LETTER O WITH HORN AND TILDE */ ++#define XKB_KEY_Ohornbelowdot 0x1001ee2 /* U+1EE2 LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW */ ++#define XKB_KEY_ohornbelowdot 0x1001ee3 /* U+1EE3 LATIN SMALL LETTER O WITH HORN AND DOT BELOW */ ++#define XKB_KEY_Ubelowdot 0x1001ee4 /* U+1EE4 LATIN CAPITAL LETTER U WITH DOT BELOW */ ++#define XKB_KEY_ubelowdot 0x1001ee5 /* U+1EE5 LATIN SMALL LETTER U WITH DOT BELOW */ ++#define XKB_KEY_Uhook 0x1001ee6 /* U+1EE6 LATIN CAPITAL LETTER U WITH HOOK ABOVE */ ++#define XKB_KEY_uhook 0x1001ee7 /* U+1EE7 LATIN SMALL LETTER U WITH HOOK ABOVE */ ++#define XKB_KEY_Uhornacute 0x1001ee8 /* U+1EE8 LATIN CAPITAL LETTER U WITH HORN AND ACUTE */ ++#define XKB_KEY_uhornacute 0x1001ee9 /* U+1EE9 LATIN SMALL LETTER U WITH HORN AND ACUTE */ ++#define XKB_KEY_Uhorngrave 0x1001eea /* U+1EEA LATIN CAPITAL LETTER U WITH HORN AND GRAVE */ ++#define XKB_KEY_uhorngrave 0x1001eeb /* U+1EEB LATIN SMALL LETTER U WITH HORN AND GRAVE */ ++#define XKB_KEY_Uhornhook 0x1001eec /* U+1EEC LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE */ ++#define XKB_KEY_uhornhook 0x1001eed /* U+1EED LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE */ ++#define XKB_KEY_Uhorntilde 0x1001eee /* U+1EEE LATIN CAPITAL LETTER U WITH HORN AND TILDE */ ++#define XKB_KEY_uhorntilde 0x1001eef /* U+1EEF LATIN SMALL LETTER U WITH HORN AND TILDE */ ++#define XKB_KEY_Uhornbelowdot 0x1001ef0 /* U+1EF0 LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW */ ++#define XKB_KEY_uhornbelowdot 0x1001ef1 /* U+1EF1 LATIN SMALL LETTER U WITH HORN AND DOT BELOW */ ++#define XKB_KEY_Ybelowdot 0x1001ef4 /* U+1EF4 LATIN CAPITAL LETTER Y WITH DOT BELOW */ ++#define XKB_KEY_ybelowdot 0x1001ef5 /* U+1EF5 LATIN SMALL LETTER Y WITH DOT BELOW */ ++#define XKB_KEY_Yhook 0x1001ef6 /* U+1EF6 LATIN CAPITAL LETTER Y WITH HOOK ABOVE */ ++#define XKB_KEY_yhook 0x1001ef7 /* U+1EF7 LATIN SMALL LETTER Y WITH HOOK ABOVE */ ++#define XKB_KEY_Ytilde 0x1001ef8 /* U+1EF8 LATIN CAPITAL LETTER Y WITH TILDE */ ++#define XKB_KEY_ytilde 0x1001ef9 /* U+1EF9 LATIN SMALL LETTER Y WITH TILDE */ ++#define XKB_KEY_Ohorn 0x10001a0 /* U+01A0 LATIN CAPITAL LETTER O WITH HORN */ ++#define XKB_KEY_ohorn 0x10001a1 /* U+01A1 LATIN SMALL LETTER O WITH HORN */ ++#define XKB_KEY_Uhorn 0x10001af /* U+01AF LATIN CAPITAL LETTER U WITH HORN */ ++#define XKB_KEY_uhorn 0x10001b0 /* U+01B0 LATIN SMALL LETTER U WITH HORN */ ++ ++ ++#define XKB_KEY_EcuSign 0x10020a0 /* U+20A0 EURO-CURRENCY SIGN */ ++#define XKB_KEY_ColonSign 0x10020a1 /* U+20A1 COLON SIGN */ ++#define XKB_KEY_CruzeiroSign 0x10020a2 /* U+20A2 CRUZEIRO SIGN */ ++#define XKB_KEY_FFrancSign 0x10020a3 /* U+20A3 FRENCH FRANC SIGN */ ++#define XKB_KEY_LiraSign 0x10020a4 /* U+20A4 LIRA SIGN */ ++#define XKB_KEY_MillSign 0x10020a5 /* U+20A5 MILL SIGN */ ++#define XKB_KEY_NairaSign 0x10020a6 /* U+20A6 NAIRA SIGN */ ++#define XKB_KEY_PesetaSign 0x10020a7 /* U+20A7 PESETA SIGN */ ++#define XKB_KEY_RupeeSign 0x10020a8 /* U+20A8 RUPEE SIGN */ ++#define XKB_KEY_WonSign 0x10020a9 /* U+20A9 WON SIGN */ ++#define XKB_KEY_NewSheqelSign 0x10020aa /* U+20AA NEW SHEQEL SIGN */ ++#define XKB_KEY_DongSign 0x10020ab /* U+20AB DONG SIGN */ ++#define XKB_KEY_EuroSign 0x20ac /* U+20AC EURO SIGN */ ++ ++/* one, two and three are defined above. */ ++#define XKB_KEY_zerosuperior 0x1002070 /* U+2070 SUPERSCRIPT ZERO */ ++#define XKB_KEY_foursuperior 0x1002074 /* U+2074 SUPERSCRIPT FOUR */ ++#define XKB_KEY_fivesuperior 0x1002075 /* U+2075 SUPERSCRIPT FIVE */ ++#define XKB_KEY_sixsuperior 0x1002076 /* U+2076 SUPERSCRIPT SIX */ ++#define XKB_KEY_sevensuperior 0x1002077 /* U+2077 SUPERSCRIPT SEVEN */ ++#define XKB_KEY_eightsuperior 0x1002078 /* U+2078 SUPERSCRIPT EIGHT */ ++#define XKB_KEY_ninesuperior 0x1002079 /* U+2079 SUPERSCRIPT NINE */ ++#define XKB_KEY_zerosubscript 0x1002080 /* U+2080 SUBSCRIPT ZERO */ ++#define XKB_KEY_onesubscript 0x1002081 /* U+2081 SUBSCRIPT ONE */ ++#define XKB_KEY_twosubscript 0x1002082 /* U+2082 SUBSCRIPT TWO */ ++#define XKB_KEY_threesubscript 0x1002083 /* U+2083 SUBSCRIPT THREE */ ++#define XKB_KEY_foursubscript 0x1002084 /* U+2084 SUBSCRIPT FOUR */ ++#define XKB_KEY_fivesubscript 0x1002085 /* U+2085 SUBSCRIPT FIVE */ ++#define XKB_KEY_sixsubscript 0x1002086 /* U+2086 SUBSCRIPT SIX */ ++#define XKB_KEY_sevensubscript 0x1002087 /* U+2087 SUBSCRIPT SEVEN */ ++#define XKB_KEY_eightsubscript 0x1002088 /* U+2088 SUBSCRIPT EIGHT */ ++#define XKB_KEY_ninesubscript 0x1002089 /* U+2089 SUBSCRIPT NINE */ ++#define XKB_KEY_partdifferential 0x1002202 /* U+2202 PARTIAL DIFFERENTIAL */ ++#define XKB_KEY_emptyset 0x1002205 /* U+2205 NULL SET */ ++#define XKB_KEY_elementof 0x1002208 /* U+2208 ELEMENT OF */ ++#define XKB_KEY_notelementof 0x1002209 /* U+2209 NOT AN ELEMENT OF */ ++#define XKB_KEY_containsas 0x100220B /* U+220B CONTAINS AS MEMBER */ ++#define XKB_KEY_squareroot 0x100221A /* U+221A SQUARE ROOT */ ++#define XKB_KEY_cuberoot 0x100221B /* U+221B CUBE ROOT */ ++#define XKB_KEY_fourthroot 0x100221C /* U+221C FOURTH ROOT */ ++#define XKB_KEY_dintegral 0x100222C /* U+222C DOUBLE INTEGRAL */ ++#define XKB_KEY_tintegral 0x100222D /* U+222D TRIPLE INTEGRAL */ ++#define XKB_KEY_because 0x1002235 /* U+2235 BECAUSE */ ++#define XKB_KEY_approxeq 0x1002248 /* U+2245 ALMOST EQUAL TO */ ++#define XKB_KEY_notapproxeq 0x1002247 /* U+2247 NOT ALMOST EQUAL TO */ ++#define XKB_KEY_notidentical 0x1002262 /* U+2262 NOT IDENTICAL TO */ ++#define XKB_KEY_stricteq 0x1002263 /* U+2263 STRICTLY EQUIVALENT TO */ ++ ++#define XKB_KEY_braille_dot_1 0xfff1 ++#define XKB_KEY_braille_dot_2 0xfff2 ++#define XKB_KEY_braille_dot_3 0xfff3 ++#define XKB_KEY_braille_dot_4 0xfff4 ++#define XKB_KEY_braille_dot_5 0xfff5 ++#define XKB_KEY_braille_dot_6 0xfff6 ++#define XKB_KEY_braille_dot_7 0xfff7 ++#define XKB_KEY_braille_dot_8 0xfff8 ++#define XKB_KEY_braille_dot_9 0xfff9 ++#define XKB_KEY_braille_dot_10 0xfffa ++#define XKB_KEY_braille_blank 0x1002800 /* U+2800 BRAILLE PATTERN BLANK */ ++#define XKB_KEY_braille_dots_1 0x1002801 /* U+2801 BRAILLE PATTERN DOTS-1 */ ++#define XKB_KEY_braille_dots_2 0x1002802 /* U+2802 BRAILLE PATTERN DOTS-2 */ ++#define XKB_KEY_braille_dots_12 0x1002803 /* U+2803 BRAILLE PATTERN DOTS-12 */ ++#define XKB_KEY_braille_dots_3 0x1002804 /* U+2804 BRAILLE PATTERN DOTS-3 */ ++#define XKB_KEY_braille_dots_13 0x1002805 /* U+2805 BRAILLE PATTERN DOTS-13 */ ++#define XKB_KEY_braille_dots_23 0x1002806 /* U+2806 BRAILLE PATTERN DOTS-23 */ ++#define XKB_KEY_braille_dots_123 0x1002807 /* U+2807 BRAILLE PATTERN DOTS-123 */ ++#define XKB_KEY_braille_dots_4 0x1002808 /* U+2808 BRAILLE PATTERN DOTS-4 */ ++#define XKB_KEY_braille_dots_14 0x1002809 /* U+2809 BRAILLE PATTERN DOTS-14 */ ++#define XKB_KEY_braille_dots_24 0x100280a /* U+280a BRAILLE PATTERN DOTS-24 */ ++#define XKB_KEY_braille_dots_124 0x100280b /* U+280b BRAILLE PATTERN DOTS-124 */ ++#define XKB_KEY_braille_dots_34 0x100280c /* U+280c BRAILLE PATTERN DOTS-34 */ ++#define XKB_KEY_braille_dots_134 0x100280d /* U+280d BRAILLE PATTERN DOTS-134 */ ++#define XKB_KEY_braille_dots_234 0x100280e /* U+280e BRAILLE PATTERN DOTS-234 */ ++#define XKB_KEY_braille_dots_1234 0x100280f /* U+280f BRAILLE PATTERN DOTS-1234 */ ++#define XKB_KEY_braille_dots_5 0x1002810 /* U+2810 BRAILLE PATTERN DOTS-5 */ ++#define XKB_KEY_braille_dots_15 0x1002811 /* U+2811 BRAILLE PATTERN DOTS-15 */ ++#define XKB_KEY_braille_dots_25 0x1002812 /* U+2812 BRAILLE PATTERN DOTS-25 */ ++#define XKB_KEY_braille_dots_125 0x1002813 /* U+2813 BRAILLE PATTERN DOTS-125 */ ++#define XKB_KEY_braille_dots_35 0x1002814 /* U+2814 BRAILLE PATTERN DOTS-35 */ ++#define XKB_KEY_braille_dots_135 0x1002815 /* U+2815 BRAILLE PATTERN DOTS-135 */ ++#define XKB_KEY_braille_dots_235 0x1002816 /* U+2816 BRAILLE PATTERN DOTS-235 */ ++#define XKB_KEY_braille_dots_1235 0x1002817 /* U+2817 BRAILLE PATTERN DOTS-1235 */ ++#define XKB_KEY_braille_dots_45 0x1002818 /* U+2818 BRAILLE PATTERN DOTS-45 */ ++#define XKB_KEY_braille_dots_145 0x1002819 /* U+2819 BRAILLE PATTERN DOTS-145 */ ++#define XKB_KEY_braille_dots_245 0x100281a /* U+281a BRAILLE PATTERN DOTS-245 */ ++#define XKB_KEY_braille_dots_1245 0x100281b /* U+281b BRAILLE PATTERN DOTS-1245 */ ++#define XKB_KEY_braille_dots_345 0x100281c /* U+281c BRAILLE PATTERN DOTS-345 */ ++#define XKB_KEY_braille_dots_1345 0x100281d /* U+281d BRAILLE PATTERN DOTS-1345 */ ++#define XKB_KEY_braille_dots_2345 0x100281e /* U+281e BRAILLE PATTERN DOTS-2345 */ ++#define XKB_KEY_braille_dots_12345 0x100281f /* U+281f BRAILLE PATTERN DOTS-12345 */ ++#define XKB_KEY_braille_dots_6 0x1002820 /* U+2820 BRAILLE PATTERN DOTS-6 */ ++#define XKB_KEY_braille_dots_16 0x1002821 /* U+2821 BRAILLE PATTERN DOTS-16 */ ++#define XKB_KEY_braille_dots_26 0x1002822 /* U+2822 BRAILLE PATTERN DOTS-26 */ ++#define XKB_KEY_braille_dots_126 0x1002823 /* U+2823 BRAILLE PATTERN DOTS-126 */ ++#define XKB_KEY_braille_dots_36 0x1002824 /* U+2824 BRAILLE PATTERN DOTS-36 */ ++#define XKB_KEY_braille_dots_136 0x1002825 /* U+2825 BRAILLE PATTERN DOTS-136 */ ++#define XKB_KEY_braille_dots_236 0x1002826 /* U+2826 BRAILLE PATTERN DOTS-236 */ ++#define XKB_KEY_braille_dots_1236 0x1002827 /* U+2827 BRAILLE PATTERN DOTS-1236 */ ++#define XKB_KEY_braille_dots_46 0x1002828 /* U+2828 BRAILLE PATTERN DOTS-46 */ ++#define XKB_KEY_braille_dots_146 0x1002829 /* U+2829 BRAILLE PATTERN DOTS-146 */ ++#define XKB_KEY_braille_dots_246 0x100282a /* U+282a BRAILLE PATTERN DOTS-246 */ ++#define XKB_KEY_braille_dots_1246 0x100282b /* U+282b BRAILLE PATTERN DOTS-1246 */ ++#define XKB_KEY_braille_dots_346 0x100282c /* U+282c BRAILLE PATTERN DOTS-346 */ ++#define XKB_KEY_braille_dots_1346 0x100282d /* U+282d BRAILLE PATTERN DOTS-1346 */ ++#define XKB_KEY_braille_dots_2346 0x100282e /* U+282e BRAILLE PATTERN DOTS-2346 */ ++#define XKB_KEY_braille_dots_12346 0x100282f /* U+282f BRAILLE PATTERN DOTS-12346 */ ++#define XKB_KEY_braille_dots_56 0x1002830 /* U+2830 BRAILLE PATTERN DOTS-56 */ ++#define XKB_KEY_braille_dots_156 0x1002831 /* U+2831 BRAILLE PATTERN DOTS-156 */ ++#define XKB_KEY_braille_dots_256 0x1002832 /* U+2832 BRAILLE PATTERN DOTS-256 */ ++#define XKB_KEY_braille_dots_1256 0x1002833 /* U+2833 BRAILLE PATTERN DOTS-1256 */ ++#define XKB_KEY_braille_dots_356 0x1002834 /* U+2834 BRAILLE PATTERN DOTS-356 */ ++#define XKB_KEY_braille_dots_1356 0x1002835 /* U+2835 BRAILLE PATTERN DOTS-1356 */ ++#define XKB_KEY_braille_dots_2356 0x1002836 /* U+2836 BRAILLE PATTERN DOTS-2356 */ ++#define XKB_KEY_braille_dots_12356 0x1002837 /* U+2837 BRAILLE PATTERN DOTS-12356 */ ++#define XKB_KEY_braille_dots_456 0x1002838 /* U+2838 BRAILLE PATTERN DOTS-456 */ ++#define XKB_KEY_braille_dots_1456 0x1002839 /* U+2839 BRAILLE PATTERN DOTS-1456 */ ++#define XKB_KEY_braille_dots_2456 0x100283a /* U+283a BRAILLE PATTERN DOTS-2456 */ ++#define XKB_KEY_braille_dots_12456 0x100283b /* U+283b BRAILLE PATTERN DOTS-12456 */ ++#define XKB_KEY_braille_dots_3456 0x100283c /* U+283c BRAILLE PATTERN DOTS-3456 */ ++#define XKB_KEY_braille_dots_13456 0x100283d /* U+283d BRAILLE PATTERN DOTS-13456 */ ++#define XKB_KEY_braille_dots_23456 0x100283e /* U+283e BRAILLE PATTERN DOTS-23456 */ ++#define XKB_KEY_braille_dots_123456 0x100283f /* U+283f BRAILLE PATTERN DOTS-123456 */ ++#define XKB_KEY_braille_dots_7 0x1002840 /* U+2840 BRAILLE PATTERN DOTS-7 */ ++#define XKB_KEY_braille_dots_17 0x1002841 /* U+2841 BRAILLE PATTERN DOTS-17 */ ++#define XKB_KEY_braille_dots_27 0x1002842 /* U+2842 BRAILLE PATTERN DOTS-27 */ ++#define XKB_KEY_braille_dots_127 0x1002843 /* U+2843 BRAILLE PATTERN DOTS-127 */ ++#define XKB_KEY_braille_dots_37 0x1002844 /* U+2844 BRAILLE PATTERN DOTS-37 */ ++#define XKB_KEY_braille_dots_137 0x1002845 /* U+2845 BRAILLE PATTERN DOTS-137 */ ++#define XKB_KEY_braille_dots_237 0x1002846 /* U+2846 BRAILLE PATTERN DOTS-237 */ ++#define XKB_KEY_braille_dots_1237 0x1002847 /* U+2847 BRAILLE PATTERN DOTS-1237 */ ++#define XKB_KEY_braille_dots_47 0x1002848 /* U+2848 BRAILLE PATTERN DOTS-47 */ ++#define XKB_KEY_braille_dots_147 0x1002849 /* U+2849 BRAILLE PATTERN DOTS-147 */ ++#define XKB_KEY_braille_dots_247 0x100284a /* U+284a BRAILLE PATTERN DOTS-247 */ ++#define XKB_KEY_braille_dots_1247 0x100284b /* U+284b BRAILLE PATTERN DOTS-1247 */ ++#define XKB_KEY_braille_dots_347 0x100284c /* U+284c BRAILLE PATTERN DOTS-347 */ ++#define XKB_KEY_braille_dots_1347 0x100284d /* U+284d BRAILLE PATTERN DOTS-1347 */ ++#define XKB_KEY_braille_dots_2347 0x100284e /* U+284e BRAILLE PATTERN DOTS-2347 */ ++#define XKB_KEY_braille_dots_12347 0x100284f /* U+284f BRAILLE PATTERN DOTS-12347 */ ++#define XKB_KEY_braille_dots_57 0x1002850 /* U+2850 BRAILLE PATTERN DOTS-57 */ ++#define XKB_KEY_braille_dots_157 0x1002851 /* U+2851 BRAILLE PATTERN DOTS-157 */ ++#define XKB_KEY_braille_dots_257 0x1002852 /* U+2852 BRAILLE PATTERN DOTS-257 */ ++#define XKB_KEY_braille_dots_1257 0x1002853 /* U+2853 BRAILLE PATTERN DOTS-1257 */ ++#define XKB_KEY_braille_dots_357 0x1002854 /* U+2854 BRAILLE PATTERN DOTS-357 */ ++#define XKB_KEY_braille_dots_1357 0x1002855 /* U+2855 BRAILLE PATTERN DOTS-1357 */ ++#define XKB_KEY_braille_dots_2357 0x1002856 /* U+2856 BRAILLE PATTERN DOTS-2357 */ ++#define XKB_KEY_braille_dots_12357 0x1002857 /* U+2857 BRAILLE PATTERN DOTS-12357 */ ++#define XKB_KEY_braille_dots_457 0x1002858 /* U+2858 BRAILLE PATTERN DOTS-457 */ ++#define XKB_KEY_braille_dots_1457 0x1002859 /* U+2859 BRAILLE PATTERN DOTS-1457 */ ++#define XKB_KEY_braille_dots_2457 0x100285a /* U+285a BRAILLE PATTERN DOTS-2457 */ ++#define XKB_KEY_braille_dots_12457 0x100285b /* U+285b BRAILLE PATTERN DOTS-12457 */ ++#define XKB_KEY_braille_dots_3457 0x100285c /* U+285c BRAILLE PATTERN DOTS-3457 */ ++#define XKB_KEY_braille_dots_13457 0x100285d /* U+285d BRAILLE PATTERN DOTS-13457 */ ++#define XKB_KEY_braille_dots_23457 0x100285e /* U+285e BRAILLE PATTERN DOTS-23457 */ ++#define XKB_KEY_braille_dots_123457 0x100285f /* U+285f BRAILLE PATTERN DOTS-123457 */ ++#define XKB_KEY_braille_dots_67 0x1002860 /* U+2860 BRAILLE PATTERN DOTS-67 */ ++#define XKB_KEY_braille_dots_167 0x1002861 /* U+2861 BRAILLE PATTERN DOTS-167 */ ++#define XKB_KEY_braille_dots_267 0x1002862 /* U+2862 BRAILLE PATTERN DOTS-267 */ ++#define XKB_KEY_braille_dots_1267 0x1002863 /* U+2863 BRAILLE PATTERN DOTS-1267 */ ++#define XKB_KEY_braille_dots_367 0x1002864 /* U+2864 BRAILLE PATTERN DOTS-367 */ ++#define XKB_KEY_braille_dots_1367 0x1002865 /* U+2865 BRAILLE PATTERN DOTS-1367 */ ++#define XKB_KEY_braille_dots_2367 0x1002866 /* U+2866 BRAILLE PATTERN DOTS-2367 */ ++#define XKB_KEY_braille_dots_12367 0x1002867 /* U+2867 BRAILLE PATTERN DOTS-12367 */ ++#define XKB_KEY_braille_dots_467 0x1002868 /* U+2868 BRAILLE PATTERN DOTS-467 */ ++#define XKB_KEY_braille_dots_1467 0x1002869 /* U+2869 BRAILLE PATTERN DOTS-1467 */ ++#define XKB_KEY_braille_dots_2467 0x100286a /* U+286a BRAILLE PATTERN DOTS-2467 */ ++#define XKB_KEY_braille_dots_12467 0x100286b /* U+286b BRAILLE PATTERN DOTS-12467 */ ++#define XKB_KEY_braille_dots_3467 0x100286c /* U+286c BRAILLE PATTERN DOTS-3467 */ ++#define XKB_KEY_braille_dots_13467 0x100286d /* U+286d BRAILLE PATTERN DOTS-13467 */ ++#define XKB_KEY_braille_dots_23467 0x100286e /* U+286e BRAILLE PATTERN DOTS-23467 */ ++#define XKB_KEY_braille_dots_123467 0x100286f /* U+286f BRAILLE PATTERN DOTS-123467 */ ++#define XKB_KEY_braille_dots_567 0x1002870 /* U+2870 BRAILLE PATTERN DOTS-567 */ ++#define XKB_KEY_braille_dots_1567 0x1002871 /* U+2871 BRAILLE PATTERN DOTS-1567 */ ++#define XKB_KEY_braille_dots_2567 0x1002872 /* U+2872 BRAILLE PATTERN DOTS-2567 */ ++#define XKB_KEY_braille_dots_12567 0x1002873 /* U+2873 BRAILLE PATTERN DOTS-12567 */ ++#define XKB_KEY_braille_dots_3567 0x1002874 /* U+2874 BRAILLE PATTERN DOTS-3567 */ ++#define XKB_KEY_braille_dots_13567 0x1002875 /* U+2875 BRAILLE PATTERN DOTS-13567 */ ++#define XKB_KEY_braille_dots_23567 0x1002876 /* U+2876 BRAILLE PATTERN DOTS-23567 */ ++#define XKB_KEY_braille_dots_123567 0x1002877 /* U+2877 BRAILLE PATTERN DOTS-123567 */ ++#define XKB_KEY_braille_dots_4567 0x1002878 /* U+2878 BRAILLE PATTERN DOTS-4567 */ ++#define XKB_KEY_braille_dots_14567 0x1002879 /* U+2879 BRAILLE PATTERN DOTS-14567 */ ++#define XKB_KEY_braille_dots_24567 0x100287a /* U+287a BRAILLE PATTERN DOTS-24567 */ ++#define XKB_KEY_braille_dots_124567 0x100287b /* U+287b BRAILLE PATTERN DOTS-124567 */ ++#define XKB_KEY_braille_dots_34567 0x100287c /* U+287c BRAILLE PATTERN DOTS-34567 */ ++#define XKB_KEY_braille_dots_134567 0x100287d /* U+287d BRAILLE PATTERN DOTS-134567 */ ++#define XKB_KEY_braille_dots_234567 0x100287e /* U+287e BRAILLE PATTERN DOTS-234567 */ ++#define XKB_KEY_braille_dots_1234567 0x100287f /* U+287f BRAILLE PATTERN DOTS-1234567 */ ++#define XKB_KEY_braille_dots_8 0x1002880 /* U+2880 BRAILLE PATTERN DOTS-8 */ ++#define XKB_KEY_braille_dots_18 0x1002881 /* U+2881 BRAILLE PATTERN DOTS-18 */ ++#define XKB_KEY_braille_dots_28 0x1002882 /* U+2882 BRAILLE PATTERN DOTS-28 */ ++#define XKB_KEY_braille_dots_128 0x1002883 /* U+2883 BRAILLE PATTERN DOTS-128 */ ++#define XKB_KEY_braille_dots_38 0x1002884 /* U+2884 BRAILLE PATTERN DOTS-38 */ ++#define XKB_KEY_braille_dots_138 0x1002885 /* U+2885 BRAILLE PATTERN DOTS-138 */ ++#define XKB_KEY_braille_dots_238 0x1002886 /* U+2886 BRAILLE PATTERN DOTS-238 */ ++#define XKB_KEY_braille_dots_1238 0x1002887 /* U+2887 BRAILLE PATTERN DOTS-1238 */ ++#define XKB_KEY_braille_dots_48 0x1002888 /* U+2888 BRAILLE PATTERN DOTS-48 */ ++#define XKB_KEY_braille_dots_148 0x1002889 /* U+2889 BRAILLE PATTERN DOTS-148 */ ++#define XKB_KEY_braille_dots_248 0x100288a /* U+288a BRAILLE PATTERN DOTS-248 */ ++#define XKB_KEY_braille_dots_1248 0x100288b /* U+288b BRAILLE PATTERN DOTS-1248 */ ++#define XKB_KEY_braille_dots_348 0x100288c /* U+288c BRAILLE PATTERN DOTS-348 */ ++#define XKB_KEY_braille_dots_1348 0x100288d /* U+288d BRAILLE PATTERN DOTS-1348 */ ++#define XKB_KEY_braille_dots_2348 0x100288e /* U+288e BRAILLE PATTERN DOTS-2348 */ ++#define XKB_KEY_braille_dots_12348 0x100288f /* U+288f BRAILLE PATTERN DOTS-12348 */ ++#define XKB_KEY_braille_dots_58 0x1002890 /* U+2890 BRAILLE PATTERN DOTS-58 */ ++#define XKB_KEY_braille_dots_158 0x1002891 /* U+2891 BRAILLE PATTERN DOTS-158 */ ++#define XKB_KEY_braille_dots_258 0x1002892 /* U+2892 BRAILLE PATTERN DOTS-258 */ ++#define XKB_KEY_braille_dots_1258 0x1002893 /* U+2893 BRAILLE PATTERN DOTS-1258 */ ++#define XKB_KEY_braille_dots_358 0x1002894 /* U+2894 BRAILLE PATTERN DOTS-358 */ ++#define XKB_KEY_braille_dots_1358 0x1002895 /* U+2895 BRAILLE PATTERN DOTS-1358 */ ++#define XKB_KEY_braille_dots_2358 0x1002896 /* U+2896 BRAILLE PATTERN DOTS-2358 */ ++#define XKB_KEY_braille_dots_12358 0x1002897 /* U+2897 BRAILLE PATTERN DOTS-12358 */ ++#define XKB_KEY_braille_dots_458 0x1002898 /* U+2898 BRAILLE PATTERN DOTS-458 */ ++#define XKB_KEY_braille_dots_1458 0x1002899 /* U+2899 BRAILLE PATTERN DOTS-1458 */ ++#define XKB_KEY_braille_dots_2458 0x100289a /* U+289a BRAILLE PATTERN DOTS-2458 */ ++#define XKB_KEY_braille_dots_12458 0x100289b /* U+289b BRAILLE PATTERN DOTS-12458 */ ++#define XKB_KEY_braille_dots_3458 0x100289c /* U+289c BRAILLE PATTERN DOTS-3458 */ ++#define XKB_KEY_braille_dots_13458 0x100289d /* U+289d BRAILLE PATTERN DOTS-13458 */ ++#define XKB_KEY_braille_dots_23458 0x100289e /* U+289e BRAILLE PATTERN DOTS-23458 */ ++#define XKB_KEY_braille_dots_123458 0x100289f /* U+289f BRAILLE PATTERN DOTS-123458 */ ++#define XKB_KEY_braille_dots_68 0x10028a0 /* U+28a0 BRAILLE PATTERN DOTS-68 */ ++#define XKB_KEY_braille_dots_168 0x10028a1 /* U+28a1 BRAILLE PATTERN DOTS-168 */ ++#define XKB_KEY_braille_dots_268 0x10028a2 /* U+28a2 BRAILLE PATTERN DOTS-268 */ ++#define XKB_KEY_braille_dots_1268 0x10028a3 /* U+28a3 BRAILLE PATTERN DOTS-1268 */ ++#define XKB_KEY_braille_dots_368 0x10028a4 /* U+28a4 BRAILLE PATTERN DOTS-368 */ ++#define XKB_KEY_braille_dots_1368 0x10028a5 /* U+28a5 BRAILLE PATTERN DOTS-1368 */ ++#define XKB_KEY_braille_dots_2368 0x10028a6 /* U+28a6 BRAILLE PATTERN DOTS-2368 */ ++#define XKB_KEY_braille_dots_12368 0x10028a7 /* U+28a7 BRAILLE PATTERN DOTS-12368 */ ++#define XKB_KEY_braille_dots_468 0x10028a8 /* U+28a8 BRAILLE PATTERN DOTS-468 */ ++#define XKB_KEY_braille_dots_1468 0x10028a9 /* U+28a9 BRAILLE PATTERN DOTS-1468 */ ++#define XKB_KEY_braille_dots_2468 0x10028aa /* U+28aa BRAILLE PATTERN DOTS-2468 */ ++#define XKB_KEY_braille_dots_12468 0x10028ab /* U+28ab BRAILLE PATTERN DOTS-12468 */ ++#define XKB_KEY_braille_dots_3468 0x10028ac /* U+28ac BRAILLE PATTERN DOTS-3468 */ ++#define XKB_KEY_braille_dots_13468 0x10028ad /* U+28ad BRAILLE PATTERN DOTS-13468 */ ++#define XKB_KEY_braille_dots_23468 0x10028ae /* U+28ae BRAILLE PATTERN DOTS-23468 */ ++#define XKB_KEY_braille_dots_123468 0x10028af /* U+28af BRAILLE PATTERN DOTS-123468 */ ++#define XKB_KEY_braille_dots_568 0x10028b0 /* U+28b0 BRAILLE PATTERN DOTS-568 */ ++#define XKB_KEY_braille_dots_1568 0x10028b1 /* U+28b1 BRAILLE PATTERN DOTS-1568 */ ++#define XKB_KEY_braille_dots_2568 0x10028b2 /* U+28b2 BRAILLE PATTERN DOTS-2568 */ ++#define XKB_KEY_braille_dots_12568 0x10028b3 /* U+28b3 BRAILLE PATTERN DOTS-12568 */ ++#define XKB_KEY_braille_dots_3568 0x10028b4 /* U+28b4 BRAILLE PATTERN DOTS-3568 */ ++#define XKB_KEY_braille_dots_13568 0x10028b5 /* U+28b5 BRAILLE PATTERN DOTS-13568 */ ++#define XKB_KEY_braille_dots_23568 0x10028b6 /* U+28b6 BRAILLE PATTERN DOTS-23568 */ ++#define XKB_KEY_braille_dots_123568 0x10028b7 /* U+28b7 BRAILLE PATTERN DOTS-123568 */ ++#define XKB_KEY_braille_dots_4568 0x10028b8 /* U+28b8 BRAILLE PATTERN DOTS-4568 */ ++#define XKB_KEY_braille_dots_14568 0x10028b9 /* U+28b9 BRAILLE PATTERN DOTS-14568 */ ++#define XKB_KEY_braille_dots_24568 0x10028ba /* U+28ba BRAILLE PATTERN DOTS-24568 */ ++#define XKB_KEY_braille_dots_124568 0x10028bb /* U+28bb BRAILLE PATTERN DOTS-124568 */ ++#define XKB_KEY_braille_dots_34568 0x10028bc /* U+28bc BRAILLE PATTERN DOTS-34568 */ ++#define XKB_KEY_braille_dots_134568 0x10028bd /* U+28bd BRAILLE PATTERN DOTS-134568 */ ++#define XKB_KEY_braille_dots_234568 0x10028be /* U+28be BRAILLE PATTERN DOTS-234568 */ ++#define XKB_KEY_braille_dots_1234568 0x10028bf /* U+28bf BRAILLE PATTERN DOTS-1234568 */ ++#define XKB_KEY_braille_dots_78 0x10028c0 /* U+28c0 BRAILLE PATTERN DOTS-78 */ ++#define XKB_KEY_braille_dots_178 0x10028c1 /* U+28c1 BRAILLE PATTERN DOTS-178 */ ++#define XKB_KEY_braille_dots_278 0x10028c2 /* U+28c2 BRAILLE PATTERN DOTS-278 */ ++#define XKB_KEY_braille_dots_1278 0x10028c3 /* U+28c3 BRAILLE PATTERN DOTS-1278 */ ++#define XKB_KEY_braille_dots_378 0x10028c4 /* U+28c4 BRAILLE PATTERN DOTS-378 */ ++#define XKB_KEY_braille_dots_1378 0x10028c5 /* U+28c5 BRAILLE PATTERN DOTS-1378 */ ++#define XKB_KEY_braille_dots_2378 0x10028c6 /* U+28c6 BRAILLE PATTERN DOTS-2378 */ ++#define XKB_KEY_braille_dots_12378 0x10028c7 /* U+28c7 BRAILLE PATTERN DOTS-12378 */ ++#define XKB_KEY_braille_dots_478 0x10028c8 /* U+28c8 BRAILLE PATTERN DOTS-478 */ ++#define XKB_KEY_braille_dots_1478 0x10028c9 /* U+28c9 BRAILLE PATTERN DOTS-1478 */ ++#define XKB_KEY_braille_dots_2478 0x10028ca /* U+28ca BRAILLE PATTERN DOTS-2478 */ ++#define XKB_KEY_braille_dots_12478 0x10028cb /* U+28cb BRAILLE PATTERN DOTS-12478 */ ++#define XKB_KEY_braille_dots_3478 0x10028cc /* U+28cc BRAILLE PATTERN DOTS-3478 */ ++#define XKB_KEY_braille_dots_13478 0x10028cd /* U+28cd BRAILLE PATTERN DOTS-13478 */ ++#define XKB_KEY_braille_dots_23478 0x10028ce /* U+28ce BRAILLE PATTERN DOTS-23478 */ ++#define XKB_KEY_braille_dots_123478 0x10028cf /* U+28cf BRAILLE PATTERN DOTS-123478 */ ++#define XKB_KEY_braille_dots_578 0x10028d0 /* U+28d0 BRAILLE PATTERN DOTS-578 */ ++#define XKB_KEY_braille_dots_1578 0x10028d1 /* U+28d1 BRAILLE PATTERN DOTS-1578 */ ++#define XKB_KEY_braille_dots_2578 0x10028d2 /* U+28d2 BRAILLE PATTERN DOTS-2578 */ ++#define XKB_KEY_braille_dots_12578 0x10028d3 /* U+28d3 BRAILLE PATTERN DOTS-12578 */ ++#define XKB_KEY_braille_dots_3578 0x10028d4 /* U+28d4 BRAILLE PATTERN DOTS-3578 */ ++#define XKB_KEY_braille_dots_13578 0x10028d5 /* U+28d5 BRAILLE PATTERN DOTS-13578 */ ++#define XKB_KEY_braille_dots_23578 0x10028d6 /* U+28d6 BRAILLE PATTERN DOTS-23578 */ ++#define XKB_KEY_braille_dots_123578 0x10028d7 /* U+28d7 BRAILLE PATTERN DOTS-123578 */ ++#define XKB_KEY_braille_dots_4578 0x10028d8 /* U+28d8 BRAILLE PATTERN DOTS-4578 */ ++#define XKB_KEY_braille_dots_14578 0x10028d9 /* U+28d9 BRAILLE PATTERN DOTS-14578 */ ++#define XKB_KEY_braille_dots_24578 0x10028da /* U+28da BRAILLE PATTERN DOTS-24578 */ ++#define XKB_KEY_braille_dots_124578 0x10028db /* U+28db BRAILLE PATTERN DOTS-124578 */ ++#define XKB_KEY_braille_dots_34578 0x10028dc /* U+28dc BRAILLE PATTERN DOTS-34578 */ ++#define XKB_KEY_braille_dots_134578 0x10028dd /* U+28dd BRAILLE PATTERN DOTS-134578 */ ++#define XKB_KEY_braille_dots_234578 0x10028de /* U+28de BRAILLE PATTERN DOTS-234578 */ ++#define XKB_KEY_braille_dots_1234578 0x10028df /* U+28df BRAILLE PATTERN DOTS-1234578 */ ++#define XKB_KEY_braille_dots_678 0x10028e0 /* U+28e0 BRAILLE PATTERN DOTS-678 */ ++#define XKB_KEY_braille_dots_1678 0x10028e1 /* U+28e1 BRAILLE PATTERN DOTS-1678 */ ++#define XKB_KEY_braille_dots_2678 0x10028e2 /* U+28e2 BRAILLE PATTERN DOTS-2678 */ ++#define XKB_KEY_braille_dots_12678 0x10028e3 /* U+28e3 BRAILLE PATTERN DOTS-12678 */ ++#define XKB_KEY_braille_dots_3678 0x10028e4 /* U+28e4 BRAILLE PATTERN DOTS-3678 */ ++#define XKB_KEY_braille_dots_13678 0x10028e5 /* U+28e5 BRAILLE PATTERN DOTS-13678 */ ++#define XKB_KEY_braille_dots_23678 0x10028e6 /* U+28e6 BRAILLE PATTERN DOTS-23678 */ ++#define XKB_KEY_braille_dots_123678 0x10028e7 /* U+28e7 BRAILLE PATTERN DOTS-123678 */ ++#define XKB_KEY_braille_dots_4678 0x10028e8 /* U+28e8 BRAILLE PATTERN DOTS-4678 */ ++#define XKB_KEY_braille_dots_14678 0x10028e9 /* U+28e9 BRAILLE PATTERN DOTS-14678 */ ++#define XKB_KEY_braille_dots_24678 0x10028ea /* U+28ea BRAILLE PATTERN DOTS-24678 */ ++#define XKB_KEY_braille_dots_124678 0x10028eb /* U+28eb BRAILLE PATTERN DOTS-124678 */ ++#define XKB_KEY_braille_dots_34678 0x10028ec /* U+28ec BRAILLE PATTERN DOTS-34678 */ ++#define XKB_KEY_braille_dots_134678 0x10028ed /* U+28ed BRAILLE PATTERN DOTS-134678 */ ++#define XKB_KEY_braille_dots_234678 0x10028ee /* U+28ee BRAILLE PATTERN DOTS-234678 */ ++#define XKB_KEY_braille_dots_1234678 0x10028ef /* U+28ef BRAILLE PATTERN DOTS-1234678 */ ++#define XKB_KEY_braille_dots_5678 0x10028f0 /* U+28f0 BRAILLE PATTERN DOTS-5678 */ ++#define XKB_KEY_braille_dots_15678 0x10028f1 /* U+28f1 BRAILLE PATTERN DOTS-15678 */ ++#define XKB_KEY_braille_dots_25678 0x10028f2 /* U+28f2 BRAILLE PATTERN DOTS-25678 */ ++#define XKB_KEY_braille_dots_125678 0x10028f3 /* U+28f3 BRAILLE PATTERN DOTS-125678 */ ++#define XKB_KEY_braille_dots_35678 0x10028f4 /* U+28f4 BRAILLE PATTERN DOTS-35678 */ ++#define XKB_KEY_braille_dots_135678 0x10028f5 /* U+28f5 BRAILLE PATTERN DOTS-135678 */ ++#define XKB_KEY_braille_dots_235678 0x10028f6 /* U+28f6 BRAILLE PATTERN DOTS-235678 */ ++#define XKB_KEY_braille_dots_1235678 0x10028f7 /* U+28f7 BRAILLE PATTERN DOTS-1235678 */ ++#define XKB_KEY_braille_dots_45678 0x10028f8 /* U+28f8 BRAILLE PATTERN DOTS-45678 */ ++#define XKB_KEY_braille_dots_145678 0x10028f9 /* U+28f9 BRAILLE PATTERN DOTS-145678 */ ++#define XKB_KEY_braille_dots_245678 0x10028fa /* U+28fa BRAILLE PATTERN DOTS-245678 */ ++#define XKB_KEY_braille_dots_1245678 0x10028fb /* U+28fb BRAILLE PATTERN DOTS-1245678 */ ++#define XKB_KEY_braille_dots_345678 0x10028fc /* U+28fc BRAILLE PATTERN DOTS-345678 */ ++#define XKB_KEY_braille_dots_1345678 0x10028fd /* U+28fd BRAILLE PATTERN DOTS-1345678 */ ++#define XKB_KEY_braille_dots_2345678 0x10028fe /* U+28fe BRAILLE PATTERN DOTS-2345678 */ ++#define XKB_KEY_braille_dots_12345678 0x10028ff /* U+28ff BRAILLE PATTERN DOTS-12345678 */ ++ ++/* ++ * Sinhala (http://unicode.org/charts/PDF/U0D80.pdf) ++ * http://www.nongnu.org/sinhala/doc/transliteration/sinhala-transliteration_6.html ++ */ ++ ++#define XKB_KEY_Sinh_ng 0x1000d82 /* U+0D82 SINHALA ANUSVARAYA */ ++#define XKB_KEY_Sinh_h2 0x1000d83 /* U+0D83 SINHALA VISARGAYA */ ++#define XKB_KEY_Sinh_a 0x1000d85 /* U+0D85 SINHALA AYANNA */ ++#define XKB_KEY_Sinh_aa 0x1000d86 /* U+0D86 SINHALA AAYANNA */ ++#define XKB_KEY_Sinh_ae 0x1000d87 /* U+0D87 SINHALA AEYANNA */ ++#define XKB_KEY_Sinh_aee 0x1000d88 /* U+0D88 SINHALA AEEYANNA */ ++#define XKB_KEY_Sinh_i 0x1000d89 /* U+0D89 SINHALA IYANNA */ ++#define XKB_KEY_Sinh_ii 0x1000d8a /* U+0D8A SINHALA IIYANNA */ ++#define XKB_KEY_Sinh_u 0x1000d8b /* U+0D8B SINHALA UYANNA */ ++#define XKB_KEY_Sinh_uu 0x1000d8c /* U+0D8C SINHALA UUYANNA */ ++#define XKB_KEY_Sinh_ri 0x1000d8d /* U+0D8D SINHALA IRUYANNA */ ++#define XKB_KEY_Sinh_rii 0x1000d8e /* U+0D8E SINHALA IRUUYANNA */ ++#define XKB_KEY_Sinh_lu 0x1000d8f /* U+0D8F SINHALA ILUYANNA */ ++#define XKB_KEY_Sinh_luu 0x1000d90 /* U+0D90 SINHALA ILUUYANNA */ ++#define XKB_KEY_Sinh_e 0x1000d91 /* U+0D91 SINHALA EYANNA */ ++#define XKB_KEY_Sinh_ee 0x1000d92 /* U+0D92 SINHALA EEYANNA */ ++#define XKB_KEY_Sinh_ai 0x1000d93 /* U+0D93 SINHALA AIYANNA */ ++#define XKB_KEY_Sinh_o 0x1000d94 /* U+0D94 SINHALA OYANNA */ ++#define XKB_KEY_Sinh_oo 0x1000d95 /* U+0D95 SINHALA OOYANNA */ ++#define XKB_KEY_Sinh_au 0x1000d96 /* U+0D96 SINHALA AUYANNA */ ++#define XKB_KEY_Sinh_ka 0x1000d9a /* U+0D9A SINHALA KAYANNA */ ++#define XKB_KEY_Sinh_kha 0x1000d9b /* U+0D9B SINHALA MAHA. KAYANNA */ ++#define XKB_KEY_Sinh_ga 0x1000d9c /* U+0D9C SINHALA GAYANNA */ ++#define XKB_KEY_Sinh_gha 0x1000d9d /* U+0D9D SINHALA MAHA. GAYANNA */ ++#define XKB_KEY_Sinh_ng2 0x1000d9e /* U+0D9E SINHALA KANTAJA NAASIKYAYA */ ++#define XKB_KEY_Sinh_nga 0x1000d9f /* U+0D9F SINHALA SANYAKA GAYANNA */ ++#define XKB_KEY_Sinh_ca 0x1000da0 /* U+0DA0 SINHALA CAYANNA */ ++#define XKB_KEY_Sinh_cha 0x1000da1 /* U+0DA1 SINHALA MAHA. CAYANNA */ ++#define XKB_KEY_Sinh_ja 0x1000da2 /* U+0DA2 SINHALA JAYANNA */ ++#define XKB_KEY_Sinh_jha 0x1000da3 /* U+0DA3 SINHALA MAHA. JAYANNA */ ++#define XKB_KEY_Sinh_nya 0x1000da4 /* U+0DA4 SINHALA TAALUJA NAASIKYAYA */ ++#define XKB_KEY_Sinh_jnya 0x1000da5 /* U+0DA5 SINHALA TAALUJA SANYOOGA NAASIKYAYA */ ++#define XKB_KEY_Sinh_nja 0x1000da6 /* U+0DA6 SINHALA SANYAKA JAYANNA */ ++#define XKB_KEY_Sinh_tta 0x1000da7 /* U+0DA7 SINHALA TTAYANNA */ ++#define XKB_KEY_Sinh_ttha 0x1000da8 /* U+0DA8 SINHALA MAHA. TTAYANNA */ ++#define XKB_KEY_Sinh_dda 0x1000da9 /* U+0DA9 SINHALA DDAYANNA */ ++#define XKB_KEY_Sinh_ddha 0x1000daa /* U+0DAA SINHALA MAHA. DDAYANNA */ ++#define XKB_KEY_Sinh_nna 0x1000dab /* U+0DAB SINHALA MUURDHAJA NAYANNA */ ++#define XKB_KEY_Sinh_ndda 0x1000dac /* U+0DAC SINHALA SANYAKA DDAYANNA */ ++#define XKB_KEY_Sinh_tha 0x1000dad /* U+0DAD SINHALA TAYANNA */ ++#define XKB_KEY_Sinh_thha 0x1000dae /* U+0DAE SINHALA MAHA. TAYANNA */ ++#define XKB_KEY_Sinh_dha 0x1000daf /* U+0DAF SINHALA DAYANNA */ ++#define XKB_KEY_Sinh_dhha 0x1000db0 /* U+0DB0 SINHALA MAHA. DAYANNA */ ++#define XKB_KEY_Sinh_na 0x1000db1 /* U+0DB1 SINHALA DANTAJA NAYANNA */ ++#define XKB_KEY_Sinh_ndha 0x1000db3 /* U+0DB3 SINHALA SANYAKA DAYANNA */ ++#define XKB_KEY_Sinh_pa 0x1000db4 /* U+0DB4 SINHALA PAYANNA */ ++#define XKB_KEY_Sinh_pha 0x1000db5 /* U+0DB5 SINHALA MAHA. PAYANNA */ ++#define XKB_KEY_Sinh_ba 0x1000db6 /* U+0DB6 SINHALA BAYANNA */ ++#define XKB_KEY_Sinh_bha 0x1000db7 /* U+0DB7 SINHALA MAHA. BAYANNA */ ++#define XKB_KEY_Sinh_ma 0x1000db8 /* U+0DB8 SINHALA MAYANNA */ ++#define XKB_KEY_Sinh_mba 0x1000db9 /* U+0DB9 SINHALA AMBA BAYANNA */ ++#define XKB_KEY_Sinh_ya 0x1000dba /* U+0DBA SINHALA YAYANNA */ ++#define XKB_KEY_Sinh_ra 0x1000dbb /* U+0DBB SINHALA RAYANNA */ ++#define XKB_KEY_Sinh_la 0x1000dbd /* U+0DBD SINHALA DANTAJA LAYANNA */ ++#define XKB_KEY_Sinh_va 0x1000dc0 /* U+0DC0 SINHALA VAYANNA */ ++#define XKB_KEY_Sinh_sha 0x1000dc1 /* U+0DC1 SINHALA TAALUJA SAYANNA */ ++#define XKB_KEY_Sinh_ssha 0x1000dc2 /* U+0DC2 SINHALA MUURDHAJA SAYANNA */ ++#define XKB_KEY_Sinh_sa 0x1000dc3 /* U+0DC3 SINHALA DANTAJA SAYANNA */ ++#define XKB_KEY_Sinh_ha 0x1000dc4 /* U+0DC4 SINHALA HAYANNA */ ++#define XKB_KEY_Sinh_lla 0x1000dc5 /* U+0DC5 SINHALA MUURDHAJA LAYANNA */ ++#define XKB_KEY_Sinh_fa 0x1000dc6 /* U+0DC6 SINHALA FAYANNA */ ++#define XKB_KEY_Sinh_al 0x1000dca /* U+0DCA SINHALA AL-LAKUNA */ ++#define XKB_KEY_Sinh_aa2 0x1000dcf /* U+0DCF SINHALA AELA-PILLA */ ++#define XKB_KEY_Sinh_ae2 0x1000dd0 /* U+0DD0 SINHALA AEDA-PILLA */ ++#define XKB_KEY_Sinh_aee2 0x1000dd1 /* U+0DD1 SINHALA DIGA AEDA-PILLA */ ++#define XKB_KEY_Sinh_i2 0x1000dd2 /* U+0DD2 SINHALA IS-PILLA */ ++#define XKB_KEY_Sinh_ii2 0x1000dd3 /* U+0DD3 SINHALA DIGA IS-PILLA */ ++#define XKB_KEY_Sinh_u2 0x1000dd4 /* U+0DD4 SINHALA PAA-PILLA */ ++#define XKB_KEY_Sinh_uu2 0x1000dd6 /* U+0DD6 SINHALA DIGA PAA-PILLA */ ++#define XKB_KEY_Sinh_ru2 0x1000dd8 /* U+0DD8 SINHALA GAETTA-PILLA */ ++#define XKB_KEY_Sinh_e2 0x1000dd9 /* U+0DD9 SINHALA KOMBUVA */ ++#define XKB_KEY_Sinh_ee2 0x1000dda /* U+0DDA SINHALA DIGA KOMBUVA */ ++#define XKB_KEY_Sinh_ai2 0x1000ddb /* U+0DDB SINHALA KOMBU DEKA */ ++#define XKB_KEY_Sinh_o2 0x1000ddc /* U+0DDC SINHALA KOMBUVA HAA AELA-PILLA*/ ++#define XKB_KEY_Sinh_oo2 0x1000ddd /* U+0DDD SINHALA KOMBUVA HAA DIGA AELA-PILLA*/ ++#define XKB_KEY_Sinh_au2 0x1000dde /* U+0DDE SINHALA KOMBUVA HAA GAYANUKITTA */ ++#define XKB_KEY_Sinh_lu2 0x1000ddf /* U+0DDF SINHALA GAYANUKITTA */ ++#define XKB_KEY_Sinh_ruu2 0x1000df2 /* U+0DF2 SINHALA DIGA GAETTA-PILLA */ ++#define XKB_KEY_Sinh_luu2 0x1000df3 /* U+0DF3 SINHALA DIGA GAYANUKITTA */ ++#define XKB_KEY_Sinh_kunddaliya 0x1000df4 /* U+0DF4 SINHALA KUNDDALIYA */ ++/* ++ * XFree86 vendor specific keysyms. ++ * ++ * The XFree86 keysym range is 0x10080001 - 0x1008FFFF. ++ * ++ * When adding new entries, the xc/lib/XKeysymDB file should also be ++ * updated to make the new entries visible to Xlib. ++ */ ++ ++/* ++ * ModeLock ++ * ++ * This one is old, and not really used any more since XKB offers this ++ * functionality. ++ */ ++ ++#define XKB_KEY_XF86ModeLock 0x1008FF01 /* Mode Switch Lock */ ++ ++/* ++ * Note, 0x1008FF07 - 0x1008FF0F are free and should be used for misc new ++ * keysyms that don't fit into any of the groups below. ++ * ++ * 0x1008FF64, 0x1008FF6F, 0x1008FF71, 0x1008FF83 are no longer used, ++ * and should be used first for new keysyms. ++ * ++ * Check in keysymdef.h for generic symbols before adding new XFree86-specific ++ * symbols here. ++ * ++ * X.Org will not be adding to the XF86 set of keysyms, though they have ++ * been adopted and are considered a "standard" part of X keysym definitions. ++ * XFree86 never properly commented these keysyms, so we have done our ++ * best to explain the semantic meaning of these keys. ++ * ++ * XFree86 has removed their mail archives of the period, that might have ++ * shed more light on some of these definitions. Until/unless we resurrect ++ * these archives, these are from memory and usage. ++ */ ++ ++ ++/* Backlight controls. */ ++#define XKB_KEY_XF86MonBrightnessUp 0x1008FF02 /* Monitor/panel brightness */ ++#define XKB_KEY_XF86MonBrightnessDown 0x1008FF03 /* Monitor/panel brightness */ ++#define XKB_KEY_XF86KbdLightOnOff 0x1008FF04 /* Keyboards may be lit */ ++#define XKB_KEY_XF86KbdBrightnessUp 0x1008FF05 /* Keyboards may be lit */ ++#define XKB_KEY_XF86KbdBrightnessDown 0x1008FF06 /* Keyboards may be lit */ ++ ++/* ++ * Keys found on some "Internet" keyboards. ++ */ ++#define XKB_KEY_XF86Standby 0x1008FF10 /* System into standby mode */ ++#define XKB_KEY_XF86AudioLowerVolume 0x1008FF11 /* Volume control down */ ++#define XKB_KEY_XF86AudioMute 0x1008FF12 /* Mute sound from the system */ ++#define XKB_KEY_XF86AudioRaiseVolume 0x1008FF13 /* Volume control up */ ++#define XKB_KEY_XF86AudioPlay 0x1008FF14 /* Start playing of audio > */ ++#define XKB_KEY_XF86AudioStop 0x1008FF15 /* Stop playing audio */ ++#define XKB_KEY_XF86AudioPrev 0x1008FF16 /* Previous track */ ++#define XKB_KEY_XF86AudioNext 0x1008FF17 /* Next track */ ++#define XKB_KEY_XF86HomePage 0x1008FF18 /* Display user's home page */ ++#define XKB_KEY_XF86Mail 0x1008FF19 /* Invoke user's mail program */ ++#define XKB_KEY_XF86Start 0x1008FF1A /* Start application */ ++#define XKB_KEY_XF86Search 0x1008FF1B /* Search */ ++#define XKB_KEY_XF86AudioRecord 0x1008FF1C /* Record audio application */ ++ ++/* These are sometimes found on PDA's (e.g. Palm, PocketPC or elsewhere) */ ++#define XKB_KEY_XF86Calculator 0x1008FF1D /* Invoke calculator program */ ++#define XKB_KEY_XF86Memo 0x1008FF1E /* Invoke Memo taking program */ ++#define XKB_KEY_XF86ToDoList 0x1008FF1F /* Invoke To Do List program */ ++#define XKB_KEY_XF86Calendar 0x1008FF20 /* Invoke Calendar program */ ++#define XKB_KEY_XF86PowerDown 0x1008FF21 /* Deep sleep the system */ ++#define XKB_KEY_XF86ContrastAdjust 0x1008FF22 /* Adjust screen contrast */ ++#define XKB_KEY_XF86RockerUp 0x1008FF23 /* Rocker switches exist up */ ++#define XKB_KEY_XF86RockerDown 0x1008FF24 /* and down */ ++#define XKB_KEY_XF86RockerEnter 0x1008FF25 /* and let you press them */ ++ ++/* Some more "Internet" keyboard symbols */ ++#define XKB_KEY_XF86Back 0x1008FF26 /* Like back on a browser */ ++#define XKB_KEY_XF86Forward 0x1008FF27 /* Like forward on a browser */ ++#define XKB_KEY_XF86Stop 0x1008FF28 /* Stop current operation */ ++#define XKB_KEY_XF86Refresh 0x1008FF29 /* Refresh the page */ ++#define XKB_KEY_XF86PowerOff 0x1008FF2A /* Power off system entirely */ ++#define XKB_KEY_XF86WakeUp 0x1008FF2B /* Wake up system from sleep */ ++#define XKB_KEY_XF86Eject 0x1008FF2C /* Eject device (e.g. DVD) */ ++#define XKB_KEY_XF86ScreenSaver 0x1008FF2D /* Invoke screensaver */ ++#define XKB_KEY_XF86WWW 0x1008FF2E /* Invoke web browser */ ++#define XKB_KEY_XF86Sleep 0x1008FF2F /* Put system to sleep */ ++#define XKB_KEY_XF86Favorites 0x1008FF30 /* Show favorite locations */ ++#define XKB_KEY_XF86AudioPause 0x1008FF31 /* Pause audio playing */ ++#define XKB_KEY_XF86AudioMedia 0x1008FF32 /* Launch media collection app */ ++#define XKB_KEY_XF86MyComputer 0x1008FF33 /* Display "My Computer" window */ ++#define XKB_KEY_XF86VendorHome 0x1008FF34 /* Display vendor home web site */ ++#define XKB_KEY_XF86LightBulb 0x1008FF35 /* Light bulb keys exist */ ++#define XKB_KEY_XF86Shop 0x1008FF36 /* Display shopping web site */ ++#define XKB_KEY_XF86History 0x1008FF37 /* Show history of web surfing */ ++#define XKB_KEY_XF86OpenURL 0x1008FF38 /* Open selected URL */ ++#define XKB_KEY_XF86AddFavorite 0x1008FF39 /* Add URL to favorites list */ ++#define XKB_KEY_XF86HotLinks 0x1008FF3A /* Show "hot" links */ ++#define XKB_KEY_XF86BrightnessAdjust 0x1008FF3B /* Invoke brightness adj. UI */ ++#define XKB_KEY_XF86Finance 0x1008FF3C /* Display financial site */ ++#define XKB_KEY_XF86Community 0x1008FF3D /* Display user's community */ ++#define XKB_KEY_XF86AudioRewind 0x1008FF3E /* "rewind" audio track */ ++#define XKB_KEY_XF86BackForward 0x1008FF3F /* ??? */ ++#define XKB_KEY_XF86Launch0 0x1008FF40 /* Launch Application */ ++#define XKB_KEY_XF86Launch1 0x1008FF41 /* Launch Application */ ++#define XKB_KEY_XF86Launch2 0x1008FF42 /* Launch Application */ ++#define XKB_KEY_XF86Launch3 0x1008FF43 /* Launch Application */ ++#define XKB_KEY_XF86Launch4 0x1008FF44 /* Launch Application */ ++#define XKB_KEY_XF86Launch5 0x1008FF45 /* Launch Application */ ++#define XKB_KEY_XF86Launch6 0x1008FF46 /* Launch Application */ ++#define XKB_KEY_XF86Launch7 0x1008FF47 /* Launch Application */ ++#define XKB_KEY_XF86Launch8 0x1008FF48 /* Launch Application */ ++#define XKB_KEY_XF86Launch9 0x1008FF49 /* Launch Application */ ++#define XKB_KEY_XF86LaunchA 0x1008FF4A /* Launch Application */ ++#define XKB_KEY_XF86LaunchB 0x1008FF4B /* Launch Application */ ++#define XKB_KEY_XF86LaunchC 0x1008FF4C /* Launch Application */ ++#define XKB_KEY_XF86LaunchD 0x1008FF4D /* Launch Application */ ++#define XKB_KEY_XF86LaunchE 0x1008FF4E /* Launch Application */ ++#define XKB_KEY_XF86LaunchF 0x1008FF4F /* Launch Application */ ++ ++#define XKB_KEY_XF86ApplicationLeft 0x1008FF50 /* switch to application, left */ ++#define XKB_KEY_XF86ApplicationRight 0x1008FF51 /* switch to application, right*/ ++#define XKB_KEY_XF86Book 0x1008FF52 /* Launch bookreader */ ++#define XKB_KEY_XF86CD 0x1008FF53 /* Launch CD/DVD player */ ++#define XKB_KEY_XF86Calculater 0x1008FF54 /* Launch Calculater */ ++#define XKB_KEY_XF86Clear 0x1008FF55 /* Clear window, screen */ ++#define XKB_KEY_XF86Close 0x1008FF56 /* Close window */ ++#define XKB_KEY_XF86Copy 0x1008FF57 /* Copy selection */ ++#define XKB_KEY_XF86Cut 0x1008FF58 /* Cut selection */ ++#define XKB_KEY_XF86Display 0x1008FF59 /* Output switch key */ ++#define XKB_KEY_XF86DOS 0x1008FF5A /* Launch DOS (emulation) */ ++#define XKB_KEY_XF86Documents 0x1008FF5B /* Open documents window */ ++#define XKB_KEY_XF86Excel 0x1008FF5C /* Launch spread sheet */ ++#define XKB_KEY_XF86Explorer 0x1008FF5D /* Launch file explorer */ ++#define XKB_KEY_XF86Game 0x1008FF5E /* Launch game */ ++#define XKB_KEY_XF86Go 0x1008FF5F /* Go to URL */ ++#define XKB_KEY_XF86iTouch 0x1008FF60 /* Logitch iTouch- don't use */ ++#define XKB_KEY_XF86LogOff 0x1008FF61 /* Log off system */ ++#define XKB_KEY_XF86Market 0x1008FF62 /* ?? */ ++#define XKB_KEY_XF86Meeting 0x1008FF63 /* enter meeting in calendar */ ++#define XKB_KEY_XF86MenuKB 0x1008FF65 /* distingush keyboard from PB */ ++#define XKB_KEY_XF86MenuPB 0x1008FF66 /* distinuish PB from keyboard */ ++#define XKB_KEY_XF86MySites 0x1008FF67 /* Favourites */ ++#define XKB_KEY_XF86New 0x1008FF68 /* New (folder, document... */ ++#define XKB_KEY_XF86News 0x1008FF69 /* News */ ++#define XKB_KEY_XF86OfficeHome 0x1008FF6A /* Office home (old Staroffice)*/ ++#define XKB_KEY_XF86Open 0x1008FF6B /* Open */ ++#define XKB_KEY_XF86Option 0x1008FF6C /* ?? */ ++#define XKB_KEY_XF86Paste 0x1008FF6D /* Paste */ ++#define XKB_KEY_XF86Phone 0x1008FF6E /* Launch phone; dial number */ ++#define XKB_KEY_XF86Q 0x1008FF70 /* Compaq's Q - don't use */ ++#define XKB_KEY_XF86Reply 0x1008FF72 /* Reply e.g., mail */ ++#define XKB_KEY_XF86Reload 0x1008FF73 /* Reload web page, file, etc. */ ++#define XKB_KEY_XF86RotateWindows 0x1008FF74 /* Rotate windows e.g. xrandr */ ++#define XKB_KEY_XF86RotationPB 0x1008FF75 /* don't use */ ++#define XKB_KEY_XF86RotationKB 0x1008FF76 /* don't use */ ++#define XKB_KEY_XF86Save 0x1008FF77 /* Save (file, document, state */ ++#define XKB_KEY_XF86ScrollUp 0x1008FF78 /* Scroll window/contents up */ ++#define XKB_KEY_XF86ScrollDown 0x1008FF79 /* Scrool window/contentd down */ ++#define XKB_KEY_XF86ScrollClick 0x1008FF7A /* Use XKB mousekeys instead */ ++#define XKB_KEY_XF86Send 0x1008FF7B /* Send mail, file, object */ ++#define XKB_KEY_XF86Spell 0x1008FF7C /* Spell checker */ ++#define XKB_KEY_XF86SplitScreen 0x1008FF7D /* Split window or screen */ ++#define XKB_KEY_XF86Support 0x1008FF7E /* Get support (??) */ ++#define XKB_KEY_XF86TaskPane 0x1008FF7F /* Show tasks */ ++#define XKB_KEY_XF86Terminal 0x1008FF80 /* Launch terminal emulator */ ++#define XKB_KEY_XF86Tools 0x1008FF81 /* toolbox of desktop/app. */ ++#define XKB_KEY_XF86Travel 0x1008FF82 /* ?? */ ++#define XKB_KEY_XF86UserPB 0x1008FF84 /* ?? */ ++#define XKB_KEY_XF86User1KB 0x1008FF85 /* ?? */ ++#define XKB_KEY_XF86User2KB 0x1008FF86 /* ?? */ ++#define XKB_KEY_XF86Video 0x1008FF87 /* Launch video player */ ++#define XKB_KEY_XF86WheelButton 0x1008FF88 /* button from a mouse wheel */ ++#define XKB_KEY_XF86Word 0x1008FF89 /* Launch word processor */ ++#define XKB_KEY_XF86Xfer 0x1008FF8A ++#define XKB_KEY_XF86ZoomIn 0x1008FF8B /* zoom in view, map, etc. */ ++#define XKB_KEY_XF86ZoomOut 0x1008FF8C /* zoom out view, map, etc. */ ++ ++#define XKB_KEY_XF86Away 0x1008FF8D /* mark yourself as away */ ++#define XKB_KEY_XF86Messenger 0x1008FF8E /* as in instant messaging */ ++#define XKB_KEY_XF86WebCam 0x1008FF8F /* Launch web camera app. */ ++#define XKB_KEY_XF86MailForward 0x1008FF90 /* Forward in mail */ ++#define XKB_KEY_XF86Pictures 0x1008FF91 /* Show pictures */ ++#define XKB_KEY_XF86Music 0x1008FF92 /* Launch music application */ ++ ++#define XKB_KEY_XF86Battery 0x1008FF93 /* Display battery information */ ++#define XKB_KEY_XF86Bluetooth 0x1008FF94 /* Enable/disable Bluetooth */ ++#define XKB_KEY_XF86WLAN 0x1008FF95 /* Enable/disable WLAN */ ++#define XKB_KEY_XF86UWB 0x1008FF96 /* Enable/disable UWB */ ++ ++#define XKB_KEY_XF86AudioForward 0x1008FF97 /* fast-forward audio track */ ++#define XKB_KEY_XF86AudioRepeat 0x1008FF98 /* toggle repeat mode */ ++#define XKB_KEY_XF86AudioRandomPlay 0x1008FF99 /* toggle shuffle mode */ ++#define XKB_KEY_XF86Subtitle 0x1008FF9A /* cycle through subtitle */ ++#define XKB_KEY_XF86AudioCycleTrack 0x1008FF9B /* cycle through audio tracks */ ++#define XKB_KEY_XF86CycleAngle 0x1008FF9C /* cycle through angles */ ++#define XKB_KEY_XF86FrameBack 0x1008FF9D /* video: go one frame back */ ++#define XKB_KEY_XF86FrameForward 0x1008FF9E /* video: go one frame forward */ ++#define XKB_KEY_XF86Time 0x1008FF9F /* display, or shows an entry for time seeking */ ++#define XKB_KEY_XF86Select 0x1008FFA0 /* Select button on joypads and remotes */ ++#define XKB_KEY_XF86View 0x1008FFA1 /* Show a view options/properties */ ++#define XKB_KEY_XF86TopMenu 0x1008FFA2 /* Go to a top-level menu in a video */ ++ ++#define XKB_KEY_XF86Red 0x1008FFA3 /* Red button */ ++#define XKB_KEY_XF86Green 0x1008FFA4 /* Green button */ ++#define XKB_KEY_XF86Yellow 0x1008FFA5 /* Yellow button */ ++#define XKB_KEY_XF86Blue 0x1008FFA6 /* Blue button */ ++ ++#define XKB_KEY_XF86Suspend 0x1008FFA7 /* Sleep to RAM */ ++#define XKB_KEY_XF86Hibernate 0x1008FFA8 /* Sleep to disk */ ++#define XKB_KEY_XF86TouchpadToggle 0x1008FFA9 /* Toggle between touchpad/trackstick */ ++#define XKB_KEY_XF86TouchpadOn 0x1008FFB0 /* The touchpad got switched on */ ++#define XKB_KEY_XF86TouchpadOff 0x1008FFB1 /* The touchpad got switched off */ ++ ++#define XKB_KEY_XF86AudioMicMute 0x1008FFB2 /* Mute the Mic from the system */ ++ ++/* Keys for special action keys (hot keys) */ ++/* Virtual terminals on some operating systems */ ++#define XKB_KEY_XF86Switch_VT_1 0x1008FE01 ++#define XKB_KEY_XF86Switch_VT_2 0x1008FE02 ++#define XKB_KEY_XF86Switch_VT_3 0x1008FE03 ++#define XKB_KEY_XF86Switch_VT_4 0x1008FE04 ++#define XKB_KEY_XF86Switch_VT_5 0x1008FE05 ++#define XKB_KEY_XF86Switch_VT_6 0x1008FE06 ++#define XKB_KEY_XF86Switch_VT_7 0x1008FE07 ++#define XKB_KEY_XF86Switch_VT_8 0x1008FE08 ++#define XKB_KEY_XF86Switch_VT_9 0x1008FE09 ++#define XKB_KEY_XF86Switch_VT_10 0x1008FE0A ++#define XKB_KEY_XF86Switch_VT_11 0x1008FE0B ++#define XKB_KEY_XF86Switch_VT_12 0x1008FE0C ++ ++#define XKB_KEY_XF86Ungrab 0x1008FE20 /* force ungrab */ ++#define XKB_KEY_XF86ClearGrab 0x1008FE21 /* kill application with grab */ ++#define XKB_KEY_XF86Next_VMode 0x1008FE22 /* next video mode available */ ++#define XKB_KEY_XF86Prev_VMode 0x1008FE23 /* prev. video mode available */ ++#define XKB_KEY_XF86LogWindowTree 0x1008FE24 /* print window tree to log */ ++#define XKB_KEY_XF86LogGrabInfo 0x1008FE25 /* print all active grabs to log */ ++/* ++ * Copyright (c) 1991, Oracle and/or its affiliates. All rights reserved. ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a ++ * copy of this software and associated documentation files (the "Software"), ++ * to deal in the Software without restriction, including without limitation ++ * the rights to use, copy, modify, merge, publish, distribute, sublicense, ++ * and/or sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice (including the next ++ * paragraph) shall be included in all copies or substantial portions of the ++ * Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER ++ * DEALINGS IN THE SOFTWARE. ++ */ ++/************************************************************ ++ ++Copyright 1991, 1998 The Open Group ++ ++Permission to use, copy, modify, distribute, and sell this software and its ++documentation for any purpose is hereby granted without fee, provided that ++the above copyright notice appear in all copies and that both that ++copyright notice and this permission notice appear in supporting ++documentation. ++ ++The above copyright notice and this permission notice shall be included in ++all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ++OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN ++AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ++CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ ++Except as contained in this notice, the name of The Open Group shall not be ++used in advertising or otherwise to promote the sale, use or other dealings ++in this Software without prior written authorization from The Open Group. ++ ++***********************************************************/ ++ ++/* ++ * Floating Accent ++ */ ++ ++#define XKB_KEY_SunFA_Grave 0x1005FF00 ++#define XKB_KEY_SunFA_Circum 0x1005FF01 ++#define XKB_KEY_SunFA_Tilde 0x1005FF02 ++#define XKB_KEY_SunFA_Acute 0x1005FF03 ++#define XKB_KEY_SunFA_Diaeresis 0x1005FF04 ++#define XKB_KEY_SunFA_Cedilla 0x1005FF05 ++ ++/* ++ * Miscellaneous Functions ++ */ ++ ++#define XKB_KEY_SunF36 0x1005FF10 /* Labeled F11 */ ++#define XKB_KEY_SunF37 0x1005FF11 /* Labeled F12 */ ++ ++#define XKB_KEY_SunSys_Req 0x1005FF60 ++#define XKB_KEY_SunPrint_Screen 0x0000FF61 /* Same as XK_Print */ ++ ++/* ++ * International & Multi-Key Character Composition ++ */ ++ ++#define XKB_KEY_SunCompose 0x0000FF20 /* Same as XK_Multi_key */ ++#define XKB_KEY_SunAltGraph 0x0000FF7E /* Same as XK_Mode_switch */ ++ ++/* ++ * Cursor Control ++ */ ++ ++#define XKB_KEY_SunPageUp 0x0000FF55 /* Same as XK_Prior */ ++#define XKB_KEY_SunPageDown 0x0000FF56 /* Same as XK_Next */ ++ ++/* ++ * Open Look Functions ++ */ ++ ++#define XKB_KEY_SunUndo 0x0000FF65 /* Same as XK_Undo */ ++#define XKB_KEY_SunAgain 0x0000FF66 /* Same as XK_Redo */ ++#define XKB_KEY_SunFind 0x0000FF68 /* Same as XK_Find */ ++#define XKB_KEY_SunStop 0x0000FF69 /* Same as XK_Cancel */ ++#define XKB_KEY_SunProps 0x1005FF70 ++#define XKB_KEY_SunFront 0x1005FF71 ++#define XKB_KEY_SunCopy 0x1005FF72 ++#define XKB_KEY_SunOpen 0x1005FF73 ++#define XKB_KEY_SunPaste 0x1005FF74 ++#define XKB_KEY_SunCut 0x1005FF75 ++ ++#define XKB_KEY_SunPowerSwitch 0x1005FF76 ++#define XKB_KEY_SunAudioLowerVolume 0x1005FF77 ++#define XKB_KEY_SunAudioMute 0x1005FF78 ++#define XKB_KEY_SunAudioRaiseVolume 0x1005FF79 ++#define XKB_KEY_SunVideoDegauss 0x1005FF7A ++#define XKB_KEY_SunVideoLowerBrightness 0x1005FF7B ++#define XKB_KEY_SunVideoRaiseBrightness 0x1005FF7C ++#define XKB_KEY_SunPowerSwitchShift 0x1005FF7D ++/*********************************************************** ++ ++Copyright 1988, 1998 The Open Group ++ ++Permission to use, copy, modify, distribute, and sell this software and its ++documentation for any purpose is hereby granted without fee, provided that ++the above copyright notice appear in all copies and that both that ++copyright notice and this permission notice appear in supporting ++documentation. ++ ++The above copyright notice and this permission notice shall be included in ++all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ++OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN ++AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ++CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ ++Except as contained in this notice, the name of The Open Group shall not be ++used in advertising or otherwise to promote the sale, use or other dealings ++in this Software without prior written authorization from The Open Group. ++ ++ ++Copyright 1988 by Digital Equipment Corporation, Maynard, Massachusetts. ++ ++ All Rights Reserved ++ ++Permission to use, copy, modify, and distribute this software and its ++documentation for any purpose and without fee is hereby granted, ++provided that the above copyright notice appear in all copies and that ++both that copyright notice and this permission notice appear in ++supporting documentation, and that the name of Digital not be ++used in advertising or publicity pertaining to distribution of the ++software without specific, written prior permission. ++ ++DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ++ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL ++DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ++ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, ++WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ++ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS ++SOFTWARE. ++ ++******************************************************************/ ++ ++/* ++ * DEC private keysyms ++ * (29th bit set) ++ */ ++ ++/* two-key compose sequence initiators, chosen to map to Latin1 characters */ ++ ++#define XKB_KEY_Dring_accent 0x1000FEB0 ++#define XKB_KEY_Dcircumflex_accent 0x1000FE5E ++#define XKB_KEY_Dcedilla_accent 0x1000FE2C ++#define XKB_KEY_Dacute_accent 0x1000FE27 ++#define XKB_KEY_Dgrave_accent 0x1000FE60 ++#define XKB_KEY_Dtilde 0x1000FE7E ++#define XKB_KEY_Ddiaeresis 0x1000FE22 ++ ++/* special keysym for LK2** "Remove" key on editing keypad */ ++ ++#define XKB_KEY_DRemove 0x1000FF00 /* Remove */ ++/* ++ ++Copyright 1987, 1998 The Open Group ++ ++Permission to use, copy, modify, distribute, and sell this software and its ++documentation for any purpose is hereby granted without fee, provided that ++the above copyright notice appear in all copies and that both that ++copyright notice and this permission notice appear in supporting ++documentation. ++ ++The above copyright notice and this permission notice shall be included ++in all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ++OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ++IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR ++OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ++ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR ++OTHER DEALINGS IN THE SOFTWARE. ++ ++Except as contained in this notice, the name of The Open Group shall ++not be used in advertising or otherwise to promote the sale, use or ++other dealings in this Software without prior written authorization ++from The Open Group. ++ ++Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts, ++ ++ All Rights Reserved ++ ++Permission to use, copy, modify, and distribute this software and its ++documentation for any purpose and without fee is hereby granted, ++provided that the above copyright notice appear in all copies and that ++both that copyright notice and this permission notice appear in ++supporting documentation, and that the names of Hewlett Packard ++or Digital not be ++used in advertising or publicity pertaining to distribution of the ++software without specific, written prior permission. ++ ++DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ++ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL ++DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ++ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, ++WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ++ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS ++SOFTWARE. ++ ++HEWLETT-PACKARD MAKES NO WARRANTY OF ANY KIND WITH REGARD ++TO THIS SOFWARE, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ++PURPOSE. Hewlett-Packard shall not be liable for errors ++contained herein or direct, indirect, special, incidental or ++consequential damages in connection with the furnishing, ++performance, or use of this material. ++ ++*/ ++ ++ ++ ++#define XKB_KEY_hpClearLine 0x1000FF6F ++#define XKB_KEY_hpInsertLine 0x1000FF70 ++#define XKB_KEY_hpDeleteLine 0x1000FF71 ++#define XKB_KEY_hpInsertChar 0x1000FF72 ++#define XKB_KEY_hpDeleteChar 0x1000FF73 ++#define XKB_KEY_hpBackTab 0x1000FF74 ++#define XKB_KEY_hpKP_BackTab 0x1000FF75 ++#define XKB_KEY_hpModelock1 0x1000FF48 ++#define XKB_KEY_hpModelock2 0x1000FF49 ++#define XKB_KEY_hpReset 0x1000FF6C ++#define XKB_KEY_hpSystem 0x1000FF6D ++#define XKB_KEY_hpUser 0x1000FF6E ++#define XKB_KEY_hpmute_acute 0x100000A8 ++#define XKB_KEY_hpmute_grave 0x100000A9 ++#define XKB_KEY_hpmute_asciicircum 0x100000AA ++#define XKB_KEY_hpmute_diaeresis 0x100000AB ++#define XKB_KEY_hpmute_asciitilde 0x100000AC ++#define XKB_KEY_hplira 0x100000AF ++#define XKB_KEY_hpguilder 0x100000BE ++#define XKB_KEY_hpYdiaeresis 0x100000EE ++#define XKB_KEY_hpIO 0x100000EE ++#define XKB_KEY_hplongminus 0x100000F6 ++#define XKB_KEY_hpblock 0x100000FC ++ ++ ++ ++#define XKB_KEY_osfCopy 0x1004FF02 ++#define XKB_KEY_osfCut 0x1004FF03 ++#define XKB_KEY_osfPaste 0x1004FF04 ++#define XKB_KEY_osfBackTab 0x1004FF07 ++#define XKB_KEY_osfBackSpace 0x1004FF08 ++#define XKB_KEY_osfClear 0x1004FF0B ++#define XKB_KEY_osfEscape 0x1004FF1B ++#define XKB_KEY_osfAddMode 0x1004FF31 ++#define XKB_KEY_osfPrimaryPaste 0x1004FF32 ++#define XKB_KEY_osfQuickPaste 0x1004FF33 ++#define XKB_KEY_osfPageLeft 0x1004FF40 ++#define XKB_KEY_osfPageUp 0x1004FF41 ++#define XKB_KEY_osfPageDown 0x1004FF42 ++#define XKB_KEY_osfPageRight 0x1004FF43 ++#define XKB_KEY_osfActivate 0x1004FF44 ++#define XKB_KEY_osfMenuBar 0x1004FF45 ++#define XKB_KEY_osfLeft 0x1004FF51 ++#define XKB_KEY_osfUp 0x1004FF52 ++#define XKB_KEY_osfRight 0x1004FF53 ++#define XKB_KEY_osfDown 0x1004FF54 ++#define XKB_KEY_osfEndLine 0x1004FF57 ++#define XKB_KEY_osfBeginLine 0x1004FF58 ++#define XKB_KEY_osfEndData 0x1004FF59 ++#define XKB_KEY_osfBeginData 0x1004FF5A ++#define XKB_KEY_osfPrevMenu 0x1004FF5B ++#define XKB_KEY_osfNextMenu 0x1004FF5C ++#define XKB_KEY_osfPrevField 0x1004FF5D ++#define XKB_KEY_osfNextField 0x1004FF5E ++#define XKB_KEY_osfSelect 0x1004FF60 ++#define XKB_KEY_osfInsert 0x1004FF63 ++#define XKB_KEY_osfUndo 0x1004FF65 ++#define XKB_KEY_osfMenu 0x1004FF67 ++#define XKB_KEY_osfCancel 0x1004FF69 ++#define XKB_KEY_osfHelp 0x1004FF6A ++#define XKB_KEY_osfSelectAll 0x1004FF71 ++#define XKB_KEY_osfDeselectAll 0x1004FF72 ++#define XKB_KEY_osfReselect 0x1004FF73 ++#define XKB_KEY_osfExtend 0x1004FF74 ++#define XKB_KEY_osfRestore 0x1004FF78 ++#define XKB_KEY_osfDelete 0x1004FFFF ++ ++ ++ ++/************************************************************** ++ * The use of the following macros is deprecated. ++ * They are listed below only for backwards compatibility. ++ */ ++#define XKB_KEY_Reset 0x1000FF6C ++#define XKB_KEY_System 0x1000FF6D ++#define XKB_KEY_User 0x1000FF6E ++#define XKB_KEY_ClearLine 0x1000FF6F ++#define XKB_KEY_InsertLine 0x1000FF70 ++#define XKB_KEY_DeleteLine 0x1000FF71 ++#define XKB_KEY_InsertChar 0x1000FF72 ++#define XKB_KEY_DeleteChar 0x1000FF73 ++#define XKB_KEY_BackTab 0x1000FF74 ++#define XKB_KEY_KP_BackTab 0x1000FF75 ++#define XKB_KEY_Ext16bit_L 0x1000FF76 ++#define XKB_KEY_Ext16bit_R 0x1000FF77 ++#define XKB_KEY_mute_acute 0x100000a8 ++#define XKB_KEY_mute_grave 0x100000a9 ++#define XKB_KEY_mute_asciicircum 0x100000aa ++#define XKB_KEY_mute_diaeresis 0x100000ab ++#define XKB_KEY_mute_asciitilde 0x100000ac ++#define XKB_KEY_lira 0x100000af ++#define XKB_KEY_guilder 0x100000be ++#define XKB_KEY_IO 0x100000ee ++#define XKB_KEY_longminus 0x100000f6 ++#define XKB_KEY_block 0x100000fc ++ ++ ++ ++#endif +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-names.h b/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-names.h +new file mode 100644 +index 0000000..ecb551f +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-names.h +@@ -0,0 +1,45 @@ ++/* ++ * Copyright © 2012 Intel Corporation ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a ++ * copy of this software and associated documentation files (the "Software"), ++ * to deal in the Software without restriction, including without limitation ++ * the rights to use, copy, modify, merge, publish, distribute, sublicense, ++ * and/or sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice (including the next ++ * paragraph) shall be included in all copies or substantial portions of the ++ * Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER ++ * DEALINGS IN THE SOFTWARE. ++ * ++ * Author: Daniel Stone ++ */ ++ ++#ifndef _XKBCOMMON_NAMES_H ++#define _XKBCOMMON_NAMES_H ++ ++/** ++ * @file ++ * @brief Predefined names for common modifiers and LEDs. ++ */ ++ ++#define XKB_MOD_NAME_SHIFT "Shift" ++#define XKB_MOD_NAME_CAPS "Lock" ++#define XKB_MOD_NAME_CTRL "Control" ++#define XKB_MOD_NAME_ALT "Mod1" ++#define XKB_MOD_NAME_NUM "Mod2" ++#define XKB_MOD_NAME_LOGO "Mod4" ++ ++#define XKB_LED_NAME_CAPS "Caps Lock" ++#define XKB_LED_NAME_NUM "Num Lock" ++#define XKB_LED_NAME_SCROLL "Scroll Lock" ++ ++#endif +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-x11.h b/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-x11.h +new file mode 100644 +index 0000000..0158315 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon-x11.h +@@ -0,0 +1,244 @@ ++/* ++ * Copyright © 2013 Ran Benita ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a ++ * copy of this software and associated documentation files (the "Software"), ++ * to deal in the Software without restriction, including without limitation ++ * the rights to use, copy, modify, merge, publish, distribute, sublicense, ++ * and/or sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice (including the next ++ * paragraph) shall be included in all copies or substantial portions of the ++ * Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER ++ * DEALINGS IN THE SOFTWARE. ++ */ ++ ++#ifndef _XKBCOMMON_X11_H ++#define _XKBCOMMON_X11_H ++ ++#include ++#include ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** ++ * @file ++ * libxkbcommon-x11 API - Additional X11 support for xkbcommon. ++ */ ++ ++/** ++ * @defgroup x11 X11 support ++ * Additional X11 support for xkbcommon. ++ * @since 0.4.0 ++ * ++ * @{ ++ */ ++ ++/** ++ * @page x11-overview Overview ++ * @parblock ++ * ++ * The xkbcommon-x11 module provides a means for creating an xkb_keymap ++ * corresponding to the currently active keymap on the X server. To do ++ * so, it queries the XKB X11 extension using the xcb-xkb library. It ++ * can be used as a replacement for Xlib's keyboard handling. ++ * ++ * Following is an example workflow using xkbcommon-x11. A complete ++ * example may be found in the test/interactive-x11.c file in the ++ * xkbcommon source repository. On startup: ++ * ++ * 1. Connect to the X server using xcb_connect(). ++ * 2. Setup the XKB X11 extension. You can do this either by using the ++ * xcb_xkb_use_extension() request directly, or by using the ++ * xkb_x11_setup_xkb_extension() helper function. ++ * ++ * The XKB extension supports using separate keymaps and states for ++ * different keyboard devices. The devices are identified by an integer ++ * device ID and are managed by another X11 extension, XInput (or its ++ * successor, XInput2). The original X11 protocol only had one keyboard ++ * device, called the "core keyboard", which is still supported as a ++ * "virtual device". ++ * ++ * 3. We will use the core keyboard as an example. To get its device ID, ++ * use either the xcb_xkb_get_device_info() request directly, or the ++ * xkb_x11_get_core_keyboard_device_id() helper function. ++ * 4. Create an initial xkb_keymap for this device, using the ++ * xkb_x11_keymap_new_from_device() function. ++ * 5. Create an initial xkb_state for this device, using the ++ * xkb_x11_state_new_from_device() function. ++ * ++ * @note At this point, you may consider setting various XKB controls and ++ * XKB per-client flags. For example, enabling detectable autorepeat: \n ++ * http://www.x.org/releases/current/doc/kbproto/xkbproto.html#Detectable_Autorepeat ++ * ++ * Next, you need to react to state changes (e.g. a modifier was pressed, ++ * the layout was changed) and to keymap changes (e.g. a tool like xkbcomp, ++ * setxkbmap or xmodmap was used): ++ * ++ * 6. Select to listen to at least the following XKB events: ++ * NewKeyboardNotify, MapNotify, StateNotify; using the ++ * xcb_xkb_select_events_aux() request. ++ * 7. When NewKeyboardNotify or MapNotify are received, recreate the ++ * xkb_keymap and xkb_state as described above. ++ * 8. When StateNotify is received, update the xkb_state accordingly ++ * using the xkb_state_update_mask() function. ++ * ++ * @note It is also possible to use the KeyPress/KeyRelease @p state ++ * field to find the effective modifier and layout state, instead of ++ * using XkbStateNotify: \n ++ * http://www.x.org/releases/current/doc/kbproto/xkbproto.html#Computing_A_State_Field_from_an_XKB_State ++ * \n However, XkbStateNotify is more accurate. ++ * ++ * @note There is no need to call xkb_state_update_key(); the state is ++ * already synchronized. ++ * ++ * Finally, when a key event is received, you can use ordinary xkbcommon ++ * functions, like xkb_state_key_get_one_sym() and xkb_state_key_get_utf8(), ++ * as you normally would. ++ * ++ * @endparblock ++ */ ++ ++/** ++ * The minimal compatible major version of the XKB X11 extension which ++ * this library can use. ++ */ ++#define XKB_X11_MIN_MAJOR_XKB_VERSION 1 ++/** ++ * The minimal compatible minor version of the XKB X11 extension which ++ * this library can use (for the minimal major version). ++ */ ++#define XKB_X11_MIN_MINOR_XKB_VERSION 0 ++ ++/** Flags for the xkb_x11_setup_xkb_extension() function. */ ++enum xkb_x11_setup_xkb_extension_flags { ++ /** Do not apply any flags. */ ++ XKB_X11_SETUP_XKB_EXTENSION_NO_FLAGS = 0 ++}; ++ ++/** ++ * Setup the XKB X11 extension for this X client. ++ * ++ * The xkbcommon-x11 library uses various XKB requests. Before doing so, ++ * an X client must notify the server that it will be using the extension. ++ * This function (or an XCB equivalent) must be called before any other ++ * function in this library is used. ++ * ++ * Some X servers may not support or disable the XKB extension. If you ++ * want to support such servers, you need to use a different fallback. ++ * ++ * You may call this function several times; it is idempotent. ++ * ++ * @param connection ++ * An XCB connection to the X server. ++ * @param major_xkb_version ++ * See @p minor_xkb_version. ++ * @param minor_xkb_version ++ * The XKB extension version to request. To operate correctly, you ++ * must have (major_xkb_version, minor_xkb_version) >= ++ * (XKB_X11_MIN_MAJOR_XKB_VERSION, XKB_X11_MIN_MINOR_XKB_VERSION), ++ * though this is not enforced. ++ * @param flags ++ * Optional flags, or 0. ++ * @param[out] major_xkb_version_out ++ * See @p minor_xkb_version_out. ++ * @param[out] minor_xkb_version_out ++ * Backfilled with the compatible XKB extension version numbers picked ++ * by the server. Can be NULL. ++ * @param[out] base_event_out ++ * Backfilled with the XKB base (also known as first) event code, needed ++ * to distinguish XKB events. Can be NULL. ++ * @param[out] base_error_out ++ * Backfilled with the XKB base (also known as first) error code, needed ++ * to distinguish XKB errors. Can be NULL. ++ * ++ * @returns 1 on success, or 0 on failure. ++ */ ++int ++xkb_x11_setup_xkb_extension(xcb_connection_t *connection, ++ uint16_t major_xkb_version, ++ uint16_t minor_xkb_version, ++ enum xkb_x11_setup_xkb_extension_flags flags, ++ uint16_t *major_xkb_version_out, ++ uint16_t *minor_xkb_version_out, ++ uint8_t *base_event_out, ++ uint8_t *base_error_out); ++ ++/** ++ * Get the keyboard device ID of the core X11 keyboard. ++ * ++ * @param connection An XCB connection to the X server. ++ * ++ * @returns A device ID which may be used with other xkb_x11_* functions, ++ * or -1 on failure. ++ */ ++int32_t ++xkb_x11_get_core_keyboard_device_id(xcb_connection_t *connection); ++ ++/** ++ * Create a keymap from an X11 keyboard device. ++ * ++ * This function queries the X server with various requests, fetches the ++ * details of the active keymap on a keyboard device, and creates an ++ * xkb_keymap from these details. ++ * ++ * @param context ++ * The context in which to create the keymap. ++ * @param connection ++ * An XCB connection to the X server. ++ * @param device_id ++ * An XInput 1 device ID (in the range 0-255) with input class KEY. ++ * Passing values outside of this range is an error. ++ * @param flags ++ * Optional flags for the keymap, or 0. ++ * ++ * @returns A keymap retrieved from the X server, or NULL on failure. ++ * ++ * @memberof xkb_keymap ++ */ ++struct xkb_keymap * ++xkb_x11_keymap_new_from_device(struct xkb_context *context, ++ xcb_connection_t *connection, ++ int32_t device_id, ++ enum xkb_keymap_compile_flags flags); ++ ++/** ++ * Create a new keyboard state object from an X11 keyboard device. ++ * ++ * This function is the same as xkb_state_new(), only pre-initialized ++ * with the state of the device at the time this function is called. ++ * ++ * @param keymap ++ * The keymap for which to create the state. ++ * @param connection ++ * An XCB connection to the X server. ++ * @param device_id ++ * An XInput 1 device ID (in the range 0-255) with input class KEY. ++ * Passing values outside of this range is an error. ++ * ++ * @returns A new keyboard state object, or NULL on failure. ++ * ++ * @memberof xkb_state ++ */ ++struct xkb_state * ++xkb_x11_state_new_from_device(struct xkb_keymap *keymap, ++ xcb_connection_t *connection, ++ int32_t device_id); ++ ++/** @} */ ++ ++#ifdef __cplusplus ++} /* extern "C" */ ++#endif ++ ++#endif /* _XKBCOMMON_X11_H */ +diff --git a/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon.h b/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon.h +new file mode 100644 +index 0000000..f0c9202 +--- /dev/null ++++ b/qtbase/src/plugins/platforminputcontexts/fcitx/xkbcommon/xkbcommon.h +@@ -0,0 +1,1723 @@ ++/* ++ * Copyright 1985, 1987, 1990, 1998 The Open Group ++ * Copyright 2008 Dan Nicholson ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a ++ * copy of this software and associated documentation files (the "Software"), ++ * to deal in the Software without restriction, including without limitation ++ * the rights to use, copy, modify, merge, publish, distribute, sublicense, ++ * and/or sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included in ++ * all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ++ * AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ++ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ++ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ * ++ * Except as contained in this notice, the names of the authors or their ++ * institutions shall not be used in advertising or otherwise to promote the ++ * sale, use or other dealings in this Software without prior written ++ * authorization from the authors. ++ */ ++ ++/************************************************************ ++ * Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc. ++ * ++ * Permission to use, copy, modify, and distribute this ++ * software and its documentation for any purpose and without ++ * fee is hereby granted, provided that the above copyright ++ * notice appear in all copies and that both that copyright ++ * notice and this permission notice appear in supporting ++ * documentation, and that the name of Silicon Graphics not be ++ * used in advertising or publicity pertaining to distribution ++ * of the software without specific prior written permission. ++ * Silicon Graphics makes no representation about the suitability ++ * of this software for any purpose. It is provided "as is" ++ * without any express or implied warranty. ++ * ++ * SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS ++ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY ++ * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON ++ * GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL ++ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, ++ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE ++ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH ++ * THE USE OR PERFORMANCE OF THIS SOFTWARE. ++ * ++ ********************************************************/ ++ ++/* ++ * Copyright © 2009-2012 Daniel Stone ++ * Copyright © 2012 Intel Corporation ++ * Copyright © 2012 Ran Benita ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a ++ * copy of this software and associated documentation files (the "Software"), ++ * to deal in the Software without restriction, including without limitation ++ * the rights to use, copy, modify, merge, publish, distribute, sublicense, ++ * and/or sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice (including the next ++ * paragraph) shall be included in all copies or substantial portions of the ++ * Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER ++ * DEALINGS IN THE SOFTWARE. ++ * ++ * Author: Daniel Stone ++ */ ++ ++#ifndef _XKBCOMMON_H_ ++#define _XKBCOMMON_H_ ++ ++#include ++#include ++#include ++ ++#include ++#include ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** ++ * @file ++ * Main libxkbcommon API. ++ */ ++ ++/** ++ * @struct xkb_context ++ * Opaque top level library context object. ++ * ++ * The context contains various general library data and state, like ++ * logging level and include paths. ++ * ++ * Objects are created in a specific context, and multiple contexts may ++ * coexist simultaneously. Objects from different contexts are completely ++ * separated and do not share any memory or state. ++ */ ++struct xkb_context; ++ ++/** ++ * @struct xkb_keymap ++ * Opaque compiled keymap object. ++ * ++ * The keymap object holds all of the static keyboard information obtained ++ * from compiling XKB files. ++ * ++ * A keymap is immutable after it is created (besides reference counts, etc.); ++ * if you need to change it, you must create a new one. ++ */ ++struct xkb_keymap; ++ ++/** ++ * @struct xkb_state ++ * Opaque keyboard state object. ++ * ++ * State objects contain the active state of a keyboard (or keyboards), such ++ * as the currently effective layout and the active modifiers. It acts as a ++ * simple state machine, wherein key presses and releases are the input, and ++ * key symbols (keysyms) are the output. ++ */ ++struct xkb_state; ++ ++/** ++ * A number used to represent a physical key on a keyboard. ++ * ++ * A standard PC-compatible keyboard might have 102 keys. An appropriate ++ * keymap would assign each of them a keycode, by which the user should ++ * refer to the key throughout the library. ++ * ++ * Historically, the X11 protocol, and consequentially the XKB protocol, ++ * assign only 8 bits for keycodes. This limits the number of different ++ * keys that can be used simultaneously in a single keymap to 256 ++ * (disregarding other limitations). This library does not share this limit; ++ * keycodes beyond 255 ('extended keycodes') are not treated specially. ++ * Keymaps and applications which are compatible with X11 should not use ++ * these keycodes. ++ * ++ * The values of specific keycodes are determined by the keymap and the ++ * underlying input system. For example, with an X11-compatible keymap ++ * and Linux evdev scan codes (see linux/input.h), a fixed offset is used: ++ * ++ * @code ++ * xkb_keycode_t keycode_A = KEY_A + 8; ++ * @endcode ++ * ++ * @sa xkb_keycode_is_legal_ext() xkb_keycode_is_legal_x11() ++ */ ++typedef uint32_t xkb_keycode_t; ++ ++/** ++ * A number used to represent the symbols generated from a key on a keyboard. ++ * ++ * A key, represented by a keycode, may generate different symbols according ++ * to keyboard state. For example, on a QWERTY keyboard, pressing the key ++ * labled \ generates the symbol 'a'. If the Shift key is held, it ++ * generates the symbol 'A'. If a different layout is used, say Greek, ++ * it generates the symbol 'α'. And so on. ++ * ++ * Each such symbol is represented by a keysym. Note that keysyms are ++ * somewhat more general, in that they can also represent some "function", ++ * such as "Left" or "Right" for the arrow keys. For more information, ++ * see: ++ * http://www.x.org/releases/X11R7.7/doc/xproto/x11protocol.html#keysym_encoding ++ * ++ * Specifically named keysyms can be found in the ++ * xkbcommon/xkbcommon-keysyms.h header file. Their name does not include ++ * the XKB_KEY_ prefix. ++ * ++ * Besides those, any Unicode/ISO 10646 character in the range U0100 to ++ * U10FFFF can be represented by a keysym value in the range 0x01000100 to ++ * 0x0110FFFF. The name of Unicode keysyms is "U", e.g. "UA1B2". ++ * ++ * The name of other unnamed keysyms is the hexadecimal representation of ++ * their value, e.g. "0xabcd1234". ++ * ++ * Keysym names are case-sensitive. ++ */ ++typedef uint32_t xkb_keysym_t; ++ ++/** ++ * Index of a keyboard layout. ++ * ++ * The layout index is a state component which detemines which keyboard ++ * layout is active. These may be different alphabets, different key ++ * arrangements, etc. ++ * ++ * Layout indices are consecutive. The first layout has index 0. ++ * ++ * Each layout is not required to have a name, and the names are not ++ * guaranteed to be unique (though they are usually provided and unique). ++ * Therefore, it is not safe to use the name as a unique identifier for a ++ * layout. Layout names are case-sensitive. ++ * ++ * Layouts are also called "groups" by XKB. ++ * ++ * @sa xkb_keymap_num_layouts() xkb_keymap_num_layouts_for_key() ++ */ ++typedef uint32_t xkb_layout_index_t; ++/** A mask of layout indices. */ ++typedef uint32_t xkb_layout_mask_t; ++ ++/** ++ * Index of a shift level. ++ * ++ * Any key, in any layout, can have several shift levels. Each ++ * shift level can assign different keysyms to the key. The shift level ++ * to use is chosen according to the current keyboard state; for example, ++ * if no keys are pressed, the first level may be used; if the Left Shift ++ * key is pressed, the second; if Num Lock is pressed, the third; and ++ * many such combinations are possible (see xkb_mod_index_t). ++ * ++ * Level indices are consecutive. The first level has index 0. ++ */ ++typedef uint32_t xkb_level_index_t; ++ ++/** ++ * Index of a modifier. ++ * ++ * A @e modifier is a state component which changes the way keys are ++ * interpreted. A keymap defines a set of modifiers, such as Alt, Shift, ++ * Num Lock or Meta, and specifies which keys may @e activate which ++ * modifiers (in a many-to-many relationship, i.e. a key can activate ++ * several modifiers, and a modifier may be activated by several keys. ++ * Different keymaps do this differently). ++ * ++ * When retrieving the keysyms for a key, the active modifier set is ++ * consulted; this detemines the correct shift level to use within the ++ * currently active layout (see xkb_level_index_t). ++ * ++ * Modifier indices are consecutive. The first modifier has index 0. ++ * ++ * Each modifier must have a name, and the names are unique. Therefore, it ++ * is safe to use the name as a unique identifier for a modifier. The names ++ * of some common modifiers are provided in the xkbcommon/xkbcommon-names.h ++ * header file. Modifier names are case-sensitive. ++ * ++ * @sa xkb_keymap_num_mods() ++ */ ++typedef uint32_t xkb_mod_index_t; ++/** A mask of modifier indices. */ ++typedef uint32_t xkb_mod_mask_t; ++ ++/** ++ * Index of a keyboard LED. ++ * ++ * LEDs are logical objects which may be @e active or @e inactive. They ++ * typically correspond to the lights on the keyboard. Their state is ++ * determined by the current keyboard state. ++ * ++ * LED indices are non-consecutive. The first LED has index 0. ++ * ++ * Each LED must have a name, and the names are unique. Therefore, ++ * it is safe to use the name as a unique identifier for a LED. The names ++ * of some common LEDs are provided in the xkbcommon/xkbcommon-names.h ++ * header file. LED names are case-sensitive. ++ * ++ * @warning A given keymap may specify an exact index for a given LED. ++ * Therefore, LED indexing is not necessarily sequential, as opposed to ++ * modifiers and layouts. This means that when iterating over the LEDs ++ * in a keymap using e.g. xkb_keymap_num_leds(), some indices might be ++ * invalid. Given such an index, functions like xkb_keymap_led_get_name() ++ * will return NULL, and xkb_state_led_index_is_active() will return -1. ++ * ++ * LEDs are also called "indicators" by XKB. ++ * ++ * @sa xkb_keymap_num_leds() ++ */ ++typedef uint32_t xkb_led_index_t; ++/** A mask of LED indices. */ ++typedef uint32_t xkb_led_mask_t; ++ ++#define XKB_KEYCODE_INVALID (0xffffffff) ++#define XKB_LAYOUT_INVALID (0xffffffff) ++#define XKB_LEVEL_INVALID (0xffffffff) ++#define XKB_MOD_INVALID (0xffffffff) ++#define XKB_LED_INVALID (0xffffffff) ++ ++#define XKB_KEYCODE_MAX (0xffffffff - 1) ++ ++/** ++ * Test whether a value is a valid extended keycode. ++ * @sa xkb_keycode_t ++ **/ ++#define xkb_keycode_is_legal_ext(key) (key <= XKB_KEYCODE_MAX) ++ ++/** ++ * Test whether a value is a valid X11 keycode. ++ * @sa xkb_keycode_t ++ */ ++#define xkb_keycode_is_legal_x11(key) (key >= 8 && key <= 255) ++ ++/** ++ * Names to compile a keymap with, also known as RMLVO. ++ * ++ * The names are the common configuration values by which a user picks ++ * a keymap. ++ * ++ * If the entire struct is NULL, then each field is taken to be NULL. ++ * You should prefer passing NULL instead of choosing your own defaults. ++ */ ++struct xkb_rule_names { ++ /** ++ * The rules file to use. The rules file describes how to interpret ++ * the values of the model, layout, variant and options fields. ++ * ++ * If NULL or the empty string "", a default value is used. ++ * If the XKB_DEFAULT_RULES environment variable is set, it is used ++ * as the default. Otherwise the system default is used. ++ */ ++ const char *rules; ++ /** ++ * The keyboard model by which to interpret keycodes and LEDs. ++ * ++ * If NULL or the empty string "", a default value is used. ++ * If the XKB_DEFAULT_MODEL environment variable is set, it is used ++ * as the default. Otherwise the system default is used. ++ */ ++ const char *model; ++ /** ++ * A comma separated list of layouts (languages) to include in the ++ * keymap. ++ * ++ * If NULL or the empty string "", a default value is used. ++ * If the XKB_DEFAULT_LAYOUT environment variable is set, it is used ++ * as the default. Otherwise the system default is used. ++ */ ++ const char *layout; ++ /** ++ * A comma separated list of variants, one per layout, which may ++ * modify or augment the respective layout in various ways. ++ * ++ * If NULL or the empty string "", and a default value is also used ++ * for the layout, a default value is used. Otherwise no variant is ++ * used. ++ * If the XKB_DEFAULT_VARIANT environment variable is set, it is used ++ * as the default. Otherwise the system default is used. ++ */ ++ const char *variant; ++ /** ++ * A comma separated list of options, through which the user specifies ++ * non-layout related preferences, like which key combinations are used ++ * for switching layouts, or which key is the Compose key. ++ * ++ * If NULL, a default value is used. If the empty string "", no ++ * options are used. ++ * If the XKB_DEFAULT_OPTIONS environment variable is set, it is used ++ * as the default. Otherwise the system default is used. ++ */ ++ const char *options; ++}; ++ ++/** ++ * @defgroup keysyms Keysyms ++ * Utility functions related to keysyms. ++ * ++ * @{ ++ */ ++ ++/** ++ * @page keysym-transformations Keysym Transformations ++ * ++ * Keysym translation is subject to several "keysym transformations", ++ * as described in the XKB specification. These are: ++ * ++ * - Capitalization transformation. If the Caps Lock modifier is ++ * active and was not consumed by the translation process, a single ++ * keysym is transformed to its upper-case form (if applicable). ++ * Similarly, the UTF-8/UTF-32 string produced is capitalized. ++ * ++ * This is described in: ++ * http://www.x.org/releases/current/doc/kbproto/xkbproto.html#Interpreting_the_Lock_Modifier ++ * ++ * - Control transformation. If the Control modifier is active and ++ * was not consumed by the translation process, the string produced ++ * is transformed to its matching ASCII control character (if ++ * applicable). Keysyms are not affected. ++ * ++ * This is described in: ++ * http://www.x.org/releases/current/doc/kbproto/xkbproto.html#Interpreting_the_Control_Modifier ++ * ++ * Each relevant function discusses which transformations it performs. ++ * ++ * These transformations are not applicable when a key produces multiple ++ * keysyms. ++ */ ++ ++ ++/** ++ * Get the name of a keysym. ++ * ++ * For a description of how keysyms are named, see @ref xkb_keysym_t. ++ * ++ * @param[in] keysym The keysym. ++ * @param[out] buffer A string buffer to write the name into. ++ * @param[in] size Size of the buffer. ++ * ++ * @warning If the buffer passed is too small, the string is truncated ++ * (though still NUL-terminated); a size of at least 64 bytes is recommended. ++ * ++ * @returns The number of bytes in the name, excluding the NUL byte. If ++ * the keysym is invalid, returns -1. ++ * ++ * You may check if truncation has occurred by comparing the return value ++ * with the length of buffer, similarly to the snprintf(3) function. ++ * ++ * @sa xkb_keysym_t ++ */ ++int ++xkb_keysym_get_name(xkb_keysym_t keysym, char *buffer, size_t size); ++ ++/** Flags for xkb_keysym_from_name(). */ ++enum xkb_keysym_flags { ++ /** Do not apply any flags. */ ++ XKB_KEYSYM_NO_FLAGS = 0, ++ /** Find keysym by case-insensitive search. */ ++ XKB_KEYSYM_CASE_INSENSITIVE = (1 << 0) ++}; ++ ++/** ++ * Get a keysym from its name. ++ * ++ * @param name The name of a keysym. See remarks in xkb_keysym_get_name(); ++ * this function will accept any name returned by that function. ++ * @param flags A set of flags controlling how the search is done. If ++ * invalid flags are passed, this will fail with XKB_KEY_NoSymbol. ++ * ++ * If you use the XKB_KEYSYM_CASE_INSENSITIVE flag and two keysym names ++ * differ only by case, then the lower-case keysym is returned. For ++ * instance, for KEY_a and KEY_A, this function would return KEY_a for the ++ * case-insensitive search. If this functionality is needed, it is ++ * recommended to first call this function without this flag; and if that ++ * fails, only then to try with this flag, while possibly warning the user ++ * he had misspelled the name, and might get wrong results. ++ * ++ * @returns The keysym. If the name is invalid, returns XKB_KEY_NoSymbol. ++ * ++ * @sa xkb_keysym_t ++ */ ++xkb_keysym_t ++xkb_keysym_from_name(const char *name, enum xkb_keysym_flags flags); ++ ++/** ++ * Get the Unicode/UTF-8 representation of a keysym. ++ * ++ * @param[in] keysym The keysym. ++ * @param[out] buffer A buffer to write the UTF-8 string into. ++ * @param[in] size The size of buffer. Must be at least 7. ++ * ++ * @returns The number of bytes written to the buffer (including the ++ * terminating byte). If the keysym does not have a Unicode ++ * representation, returns 0. If the buffer is too small, returns -1. ++ * ++ * This function does not perform any @ref keysym-transformations. ++ * Therefore, prefer to use xkb_state_key_get_utf8() if possible. ++ * ++ * @sa xkb_state_key_get_utf8() ++ */ ++int ++xkb_keysym_to_utf8(xkb_keysym_t keysym, char *buffer, size_t size); ++ ++/** ++ * Get the Unicode/UTF-32 representation of a keysym. ++ * ++ * @returns The Unicode/UTF-32 representation of keysym, which is also ++ * compatible with UCS-4. If the keysym does not have a Unicode ++ * representation, returns 0. ++ * ++ * This function does not perform any @ref keysym-transformations. ++ * Therefore, prefer to use xkb_state_key_get_utf32() if possible. ++ * ++ * @sa xkb_state_key_get_utf32() ++ */ ++uint32_t ++xkb_keysym_to_utf32(xkb_keysym_t keysym); ++ ++/** @} */ ++ ++/** ++ * @defgroup context Library Context ++ * Creating, destroying and using library contexts. ++ * ++ * Every keymap compilation request must have a context associated with ++ * it. The context keeps around state such as the include path. ++ * ++ * @{ ++ */ ++ ++/** Flags for context creation. */ ++enum xkb_context_flags { ++ /** Do not apply any context flags. */ ++ XKB_CONTEXT_NO_FLAGS = 0, ++ /** Create this context with an empty include path. */ ++ XKB_CONTEXT_NO_DEFAULT_INCLUDES = (1 << 0), ++ /** ++ * Don't take RMLVO names from the environment. ++ * @since 0.3.0 ++ */ ++ XKB_CONTEXT_NO_ENVIRONMENT_NAMES = (1 << 1) ++}; ++ ++/** ++ * Create a new context. ++ * ++ * @param flags Optional flags for the context, or 0. ++ * ++ * @returns A new context, or NULL on failure. ++ * ++ * The user may set some environment variables to affect default values in ++ * the context. See e.g. xkb_context_set_log_level() and ++ * xkb_context_set_log_verbosity(). ++ * ++ * @memberof xkb_context ++ */ ++struct xkb_context * ++xkb_context_new(enum xkb_context_flags flags); ++ ++/** ++ * Take a new reference on a context. ++ * ++ * @returns The passed in context. ++ * ++ * @memberof xkb_context ++ */ ++struct xkb_context * ++xkb_context_ref(struct xkb_context *context); ++ ++/** ++ * Release a reference on a context, and possibly free it. ++ * ++ * @param context The context. If it is NULL, this function does nothing. ++ * ++ * @memberof xkb_context ++ */ ++void ++xkb_context_unref(struct xkb_context *context); ++ ++/** ++ * Store custom user data in the context. ++ * ++ * This may be useful in conjunction with xkb_context_set_log_fn() or other ++ * callbacks. ++ * ++ * @memberof xkb_context ++ */ ++void ++xkb_context_set_user_data(struct xkb_context *context, void *user_data); ++ ++/** ++ * Retrieves stored user data from the context. ++ * ++ * @returns The stored user data. If the user data wasn't set, or the ++ * passed in context is NULL, returns NULL. ++ * ++ * This may be useful to access private user data from callbacks like a ++ * custom logging function. ++ * ++ * @memberof xkb_context ++ **/ ++void * ++xkb_context_get_user_data(struct xkb_context *context); ++ ++/** @} */ ++ ++/** ++ * @defgroup include-path Include Paths ++ * Manipulating the include paths in a context. ++ * ++ * The include paths are the file-system paths that are searched when an ++ * include statement is encountered during keymap compilation. ++ * In most cases, the default include paths are sufficient. ++ * ++ * @{ ++ */ ++ ++/** ++ * Append a new entry to the context's include path. ++ * ++ * @returns 1 on success, or 0 if the include path could not be added or is ++ * inaccessible. ++ * ++ * @memberof xkb_context ++ */ ++int ++xkb_context_include_path_append(struct xkb_context *context, const char *path); ++ ++/** ++ * Append the default include paths to the context's include path. ++ * ++ * @returns 1 on success, or 0 if the primary include path could not be added. ++ * ++ * @memberof xkb_context ++ */ ++int ++xkb_context_include_path_append_default(struct xkb_context *context); ++ ++/** ++ * Reset the context's include path to the default. ++ * ++ * Removes all entries from the context's include path, and inserts the ++ * default paths. ++ * ++ * @returns 1 on success, or 0 if the primary include path could not be added. ++ * ++ * @memberof xkb_context ++ */ ++int ++xkb_context_include_path_reset_defaults(struct xkb_context *context); ++ ++/** ++ * Remove all entries from the context's include path. ++ * ++ * @memberof xkb_context ++ */ ++void ++xkb_context_include_path_clear(struct xkb_context *context); ++ ++/** ++ * Get the number of paths in the context's include path. ++ * ++ * @memberof xkb_context ++ */ ++unsigned int ++xkb_context_num_include_paths(struct xkb_context *context); ++ ++/** ++ * Get a specific include path from the context's include path. ++ * ++ * @returns The include path at the specified index. If the index is ++ * invalid, returns NULL. ++ * ++ * @memberof xkb_context ++ */ ++const char * ++xkb_context_include_path_get(struct xkb_context *context, unsigned int index); ++ ++/** @} */ ++ ++/** ++ * @defgroup logging Logging Handling ++ * Manipulating how logging from this library is handled. ++ * ++ * @{ ++ */ ++ ++/** Specifies a logging level. */ ++enum xkb_log_level { ++ XKB_LOG_LEVEL_CRITICAL = 10, /**< Log critical internal errors only. */ ++ XKB_LOG_LEVEL_ERROR = 20, /**< Log all errors. */ ++ XKB_LOG_LEVEL_WARNING = 30, /**< Log warnings and errors. */ ++ XKB_LOG_LEVEL_INFO = 40, /**< Log information, warnings, and errors. */ ++ XKB_LOG_LEVEL_DEBUG = 50 /**< Log everything. */ ++}; ++ ++/** ++ * Set the current logging level. ++ * ++ * @param context The context in which to set the logging level. ++ * @param level The logging level to use. Only messages from this level ++ * and below will be logged. ++ * ++ * The default level is XKB_LOG_LEVEL_ERROR. The environment variable ++ * XKB_LOG_LEVEL, if set in the time the context was created, overrides the ++ * default value. It may be specified as a level number or name. ++ * ++ * @memberof xkb_context ++ */ ++void ++xkb_context_set_log_level(struct xkb_context *context, ++ enum xkb_log_level level); ++ ++/** ++ * Get the current logging level. ++ * ++ * @memberof xkb_context ++ */ ++enum xkb_log_level ++xkb_context_get_log_level(struct xkb_context *context); ++ ++/** ++ * Sets the current logging verbosity. ++ * ++ * The library can generate a number of warnings which are not helpful to ++ * ordinary users of the library. The verbosity may be increased if more ++ * information is desired (e.g. when developing a new keymap). ++ * ++ * The default verbosity is 0. The environment variable XKB_LOG_VERBOSITY, ++ * if set in the time the context was created, overrides the default value. ++ * ++ * @param context The context in which to use the set verbosity. ++ * @param verbosity The verbosity to use. Currently used values are ++ * 1 to 10, higher values being more verbose. 0 would result in no verbose ++ * messages being logged. ++ * ++ * Most verbose messages are of level XKB_LOG_LEVEL_WARNING or lower. ++ * ++ * @memberof xkb_context ++ */ ++void ++xkb_context_set_log_verbosity(struct xkb_context *context, int verbosity); ++ ++/** ++ * Get the current logging verbosity of the context. ++ * ++ * @memberof xkb_context ++ */ ++int ++xkb_context_get_log_verbosity(struct xkb_context *context); ++ ++/** ++ * Set a custom function to handle logging messages. ++ * ++ * @param context The context in which to use the set logging function. ++ * @param log_fn The function that will be called for logging messages. ++ * Passing NULL restores the default function, which logs to stderr. ++ * ++ * By default, log messages from this library are printed to stderr. This ++ * function allows you to replace the default behavior with a custom ++ * handler. The handler is only called with messages which match the ++ * current logging level and verbosity settings for the context. ++ * level is the logging level of the message. @a format and @a args are ++ * the same as in the vprintf(3) function. ++ * ++ * You may use xkb_context_set_user_data() on the context, and then call ++ * xkb_context_get_user_data() from within the logging function to provide ++ * it with additional private context. ++ * ++ * @memberof xkb_context ++ */ ++void ++xkb_context_set_log_fn(struct xkb_context *context, ++ void (*log_fn)(struct xkb_context *context, ++ enum xkb_log_level level, ++ const char *format, va_list args)); ++ ++/** @} */ ++ ++/** ++ * @defgroup keymap Keymap Creation ++ * Creating and destroying keymaps. ++ * ++ * @{ ++ */ ++ ++/** Flags for keymap compilation. */ ++enum xkb_keymap_compile_flags { ++ /** Do not apply any flags. */ ++ XKB_KEYMAP_COMPILE_NO_FLAGS = 0 ++}; ++ ++/** ++ * Create a keymap from RMLVO names. ++ * ++ * The primary keymap entry point: creates a new XKB keymap from a set of ++ * RMLVO (Rules + Model + Layouts + Variants + Options) names. ++ * ++ * @param context The context in which to create the keymap. ++ * @param names The RMLVO names to use. See xkb_rule_names. ++ * @param flags Optional flags for the keymap, or 0. ++ * ++ * @returns A keymap compiled according to the RMLVO names, or NULL if ++ * the compilation failed. ++ * ++ * @sa xkb_rule_names ++ * @memberof xkb_keymap ++ */ ++struct xkb_keymap * ++xkb_keymap_new_from_names(struct xkb_context *context, ++ const struct xkb_rule_names *names, ++ enum xkb_keymap_compile_flags flags); ++ ++/** The possible keymap formats. */ ++enum xkb_keymap_format { ++ /** The current/classic XKB text format, as generated by xkbcomp -xkb. */ ++ XKB_KEYMAP_FORMAT_TEXT_V1 = 1 ++}; ++ ++/** ++ * Create a keymap from a keymap file. ++ * ++ * @param context The context in which to create the keymap. ++ * @param file The keymap file to compile. ++ * @param format The text format of the keymap file to compile. ++ * @param flags Optional flags for the keymap, or 0. ++ * ++ * @returns A keymap compiled from the given XKB keymap file, or NULL if ++ * the compilation failed. ++ * ++ * The file must contain a complete keymap. For example, in the ++ * XKB_KEYMAP_FORMAT_TEXT_V1 format, this means the file must contain one ++ * top level '%xkb_keymap' section, which in turn contains other required ++ * sections. ++ * ++ * @memberof xkb_keymap ++ */ ++struct xkb_keymap * ++xkb_keymap_new_from_file(struct xkb_context *context, FILE *file, ++ enum xkb_keymap_format format, ++ enum xkb_keymap_compile_flags flags); ++ ++/** ++ * Create a keymap from a keymap string. ++ * ++ * This is just like xkb_keymap_new_from_file(), but instead of a file, gets ++ * the keymap as one enormous string. ++ * ++ * @see xkb_keymap_new_from_file() ++ * @memberof xkb_keymap ++ */ ++struct xkb_keymap * ++xkb_keymap_new_from_string(struct xkb_context *context, const char *string, ++ enum xkb_keymap_format format, ++ enum xkb_keymap_compile_flags flags); ++ ++/** ++ * Create a keymap from a memory buffer. ++ * ++ * This is just like xkb_keymap_new_from_string(), but takes a length argument ++ * so the input string does not have to be zero-terminated. ++ * ++ * @see xkb_keymap_new_from_string() ++ * @memberof xkb_keymap ++ * @since 0.3.0 ++ */ ++struct xkb_keymap * ++xkb_keymap_new_from_buffer(struct xkb_context *context, const char *buffer, ++ size_t length, enum xkb_keymap_format format, ++ enum xkb_keymap_compile_flags flags); ++ ++/** ++ * Take a new reference on a keymap. ++ * ++ * @returns The passed in keymap. ++ * ++ * @memberof xkb_keymap ++ */ ++struct xkb_keymap * ++xkb_keymap_ref(struct xkb_keymap *keymap); ++ ++/** ++ * Release a reference on a keymap, and possibly free it. ++ * ++ * @param keymap The keymap. If it is NULL, this function does nothing. ++ * ++ * @memberof xkb_keymap ++ */ ++void ++xkb_keymap_unref(struct xkb_keymap *keymap); ++ ++/** ++ * Get the keymap as a string in the format from which it was created. ++ * @sa xkb_keymap_get_as_string() ++ **/ ++#define XKB_KEYMAP_USE_ORIGINAL_FORMAT ((enum xkb_keymap_format) -1) ++ ++/** ++ * Get the compiled keymap as a string. ++ * ++ * @param keymap The keymap to get as a string. ++ * @param format The keymap format to use for the string. You can pass ++ * in the special value XKB_KEYMAP_USE_ORIGINAL_FORMAT to use the format ++ * from which the keymap was originally created. ++ * ++ * @returns The keymap as a NUL-terminated string, or NULL if unsuccessful. ++ * ++ * The returned string may be fed back into xkb_map_new_from_string() to get ++ * the exact same keymap (possibly in another process, etc.). ++ * ++ * The returned string is dynamically allocated and should be freed by the ++ * caller. ++ * ++ * @memberof xkb_keymap ++ */ ++char * ++xkb_keymap_get_as_string(struct xkb_keymap *keymap, ++ enum xkb_keymap_format format); ++ ++/** @} */ ++ ++/** ++ * @defgroup components Keymap Components ++ * Enumeration of state components in a keymap. ++ * ++ * @{ ++ */ ++ ++/** ++ * Get the minimum keycode in the keymap. ++ * ++ * @sa xkb_keycode_t ++ * @memberof xkb_keymap ++ * @since 0.3.1 ++ */ ++xkb_keycode_t ++xkb_keymap_min_keycode(struct xkb_keymap *keymap); ++ ++/** ++ * Get the maximum keycode in the keymap. ++ * ++ * @sa xkb_keycode_t ++ * @memberof xkb_keymap ++ * @since 0.3.1 ++ */ ++xkb_keycode_t ++xkb_keymap_max_keycode(struct xkb_keymap *keymap); ++ ++/** ++ * The iterator used by xkb_keymap_key_for_each(). ++ * ++ * @sa xkb_keymap_key_for_each ++ * @memberof xkb_keymap ++ * @since 0.3.1 ++ */ ++typedef void ++(*xkb_keymap_key_iter_t)(struct xkb_keymap *keymap, xkb_keycode_t key, ++ void *data); ++ ++/** ++ * Run a specified function for every valid keycode in the keymap. If a ++ * keymap is sparse, this function may be called fewer than ++ * (max_keycode - min_keycode + 1) times. ++ * ++ * @sa xkb_keymap_min_keycode() xkb_keymap_max_keycode() xkb_keycode_t ++ * @memberof xkb_keymap ++ * @since 0.3.1 ++ */ ++void ++xkb_keymap_key_for_each(struct xkb_keymap *keymap, xkb_keymap_key_iter_t iter, ++ void *data); ++ ++/** ++ * Get the number of modifiers in the keymap. ++ * ++ * @sa xkb_mod_index_t ++ * @memberof xkb_keymap ++ */ ++xkb_mod_index_t ++xkb_keymap_num_mods(struct xkb_keymap *keymap); ++ ++/** ++ * Get the name of a modifier by index. ++ * ++ * @returns The name. If the index is invalid, returns NULL. ++ * ++ * @sa xkb_mod_index_t ++ * @memberof xkb_keymap ++ */ ++const char * ++xkb_keymap_mod_get_name(struct xkb_keymap *keymap, xkb_mod_index_t idx); ++ ++/** ++ * Get the index of a modifier by name. ++ * ++ * @returns The index. If no modifier with this name exists, returns ++ * XKB_MOD_INVALID. ++ * ++ * @sa xkb_mod_index_t ++ * @memberof xkb_keymap ++ */ ++xkb_mod_index_t ++xkb_keymap_mod_get_index(struct xkb_keymap *keymap, const char *name); ++ ++/** ++ * Get the number of layouts in the keymap. ++ * ++ * @sa xkb_layout_index_t xkb_rule_names xkb_keymap_num_layouts_for_key() ++ * @memberof xkb_keymap ++ */ ++xkb_layout_index_t ++xkb_keymap_num_layouts(struct xkb_keymap *keymap); ++ ++/** ++ * Get the name of a layout by index. ++ * ++ * @returns The name. If the index is invalid, or the layout does not have ++ * a name, returns NULL. ++ * ++ * @sa xkb_layout_index_t ++ * @memberof xkb_keymap ++ */ ++const char * ++xkb_keymap_layout_get_name(struct xkb_keymap *keymap, xkb_layout_index_t idx); ++ ++/** ++ * Get the index of a layout by name. ++ * ++ * @returns The index. If no layout exists with this name, returns ++ * XKB_LAYOUT_INVALID. If more than one layout in the keymap has this name, ++ * returns the lowest index among them. ++ * ++ * @memberof xkb_keymap ++ */ ++xkb_layout_index_t ++xkb_keymap_layout_get_index(struct xkb_keymap *keymap, const char *name); ++ ++/** ++ * Get the number of LEDs in the keymap. ++ * ++ * @warning The range [ 0...xkb_keymap_num_leds() ) includes all of the LEDs ++ * in the keymap, but may also contain inactive LEDs. When iterating over ++ * this range, you need the handle this case when calling functions such as ++ * xkb_keymap_led_get_name() or xkb_state_led_index_is_active(). ++ * ++ * @sa xkb_led_index_t ++ * @memberof xkb_keymap ++ */ ++xkb_led_index_t ++xkb_keymap_num_leds(struct xkb_keymap *keymap); ++ ++/** ++ * Get the name of a LED by index. ++ * ++ * @returns The name. If the index is invalid, returns NULL. ++ * ++ * @memberof xkb_keymap ++ */ ++const char * ++xkb_keymap_led_get_name(struct xkb_keymap *keymap, xkb_led_index_t idx); ++ ++/** ++ * Get the index of a LED by name. ++ * ++ * @returns The index. If no LED with this name exists, returns ++ * XKB_LED_INVALID. ++ * ++ * @memberof xkb_keymap ++ */ ++xkb_led_index_t ++xkb_keymap_led_get_index(struct xkb_keymap *keymap, const char *name); ++ ++/** ++ * Get the number of layouts for a specific key. ++ * ++ * This number can be different from xkb_keymap_num_layouts(), but is always ++ * smaller. It is the appropriate value to use when iterating over the ++ * layouts of a key. ++ * ++ * @sa xkb_layout_index_t ++ * @memberof xkb_keymap ++ */ ++xkb_layout_index_t ++xkb_keymap_num_layouts_for_key(struct xkb_keymap *keymap, xkb_keycode_t key); ++ ++/** ++ * Get the number of shift levels for a specific key and layout. ++ * ++ * If @c layout is out of range for this key (that is, larger or equal to ++ * the value returned by xkb_keymap_num_layouts_for_key()), it is brought ++ * back into range in a manner consistent with xkb_state_key_get_layout(). ++ * ++ * @sa xkb_level_index_t ++ * @memberof xkb_keymap ++ */ ++xkb_level_index_t ++xkb_keymap_num_levels_for_key(struct xkb_keymap *keymap, xkb_keycode_t key, ++ xkb_layout_index_t layout); ++ ++/** ++ * Get the keysyms obtained from pressing a key in a given layout and ++ * shift level. ++ * ++ * This function is like xkb_state_key_get_syms(), only the layout and ++ * shift level are not derived from the keyboard state but are instead ++ * specified explicitly. ++ * ++ * @param[in] keymap The keymap. ++ * @param[in] key The keycode of the key. ++ * @param[in] layout The layout for which to get the keysyms. ++ * @param[in] level The shift level in the layout for which to get the ++ * keysyms. This must be smaller than: ++ * @code xkb_keymap_num_levels_for_key(keymap, key) @endcode ++ * @param[out] syms_out An immutable array of keysyms corresponding to the ++ * key in the given layout and shift level. ++ * ++ * If @c layout is out of range for this key (that is, larger or equal to ++ * the value returned by xkb_keymap_num_layouts_for_key()), it is brought ++ * back into range in a manner consistent with xkb_state_key_get_layout(). ++ * ++ * @returns The number of keysyms in the syms_out array. If no keysyms ++ * are produced by the key in the given layout and shift level, returns 0 ++ * and sets syms_out to NULL. ++ * ++ * @sa xkb_state_key_get_syms() ++ * @memberof xkb_keymap ++ */ ++int ++xkb_keymap_key_get_syms_by_level(struct xkb_keymap *keymap, ++ xkb_keycode_t key, ++ xkb_layout_index_t layout, ++ xkb_level_index_t level, ++ const xkb_keysym_t **syms_out); ++ ++/** ++ * Determine whether a key should repeat or not. ++ * ++ * A keymap may specify different repeat behaviors for different keys. ++ * Most keys should generally exhibit repeat behavior; for example, holding ++ * the 'a' key down in a text editor should normally insert a single 'a' ++ * character every few milliseconds, until the key is released. However, ++ * there are keys which should not or do not need to be repeated. For ++ * example, repeating modifier keys such as Left/Right Shift or Caps Lock ++ * is not generally useful or desired. ++ * ++ * @returns 1 if the key should repeat, 0 otherwise. ++ * ++ * @memberof xkb_keymap ++ */ ++int ++xkb_keymap_key_repeats(struct xkb_keymap *keymap, xkb_keycode_t key); ++ ++/** @} */ ++ ++/** ++ * @defgroup state Keyboard State ++ * Creating, destroying and manipulating keyboard state objects. ++ * ++ * @{ ++ */ ++ ++/** ++ * Create a new keyboard state object. ++ * ++ * @param keymap The keymap which the state will use. ++ * ++ * @returns A new keyboard state object, or NULL on failure. ++ * ++ * @memberof xkb_state ++ */ ++struct xkb_state * ++xkb_state_new(struct xkb_keymap *keymap); ++ ++/** ++ * Take a new reference on a keyboard state object. ++ * ++ * @returns The passed in object. ++ * ++ * @memberof xkb_state ++ */ ++struct xkb_state * ++xkb_state_ref(struct xkb_state *state); ++ ++/** ++ * Release a reference on a keybaord state object, and possibly free it. ++ * ++ * @param state The state. If it is NULL, this function does nothing. ++ * ++ * @memberof xkb_state ++ */ ++void ++xkb_state_unref(struct xkb_state *state); ++ ++/** ++ * Get the keymap which a keyboard state object is using. ++ * ++ * @returns The keymap which was passed to xkb_state_new() when creating ++ * this state object. ++ * ++ * This function does not take a new reference on the keymap; you must ++ * explicitly reference it yourself if you plan to use it beyond the ++ * lifetime of the state. ++ * ++ * @memberof xkb_state ++ */ ++struct xkb_keymap * ++xkb_state_get_keymap(struct xkb_state *state); ++ ++/** Specifies the direction of the key (press / release). */ ++enum xkb_key_direction { ++ XKB_KEY_UP, /**< The key was released. */ ++ XKB_KEY_DOWN /**< The key was pressed. */ ++}; ++ ++/** ++ * Modifier and layout types for state objects. This enum is bitmaskable, ++ * e.g. (XKB_STATE_MODS_DEPRESSED | XKB_STATE_MODS_LATCHED) is valid to ++ * exclude locked modifiers. ++ * ++ * In XKB, the DEPRESSED components are also known as 'base'. ++ */ ++enum xkb_state_component { ++ /** Depressed modifiers, i.e. a key is physically holding them. */ ++ XKB_STATE_MODS_DEPRESSED = (1 << 0), ++ /** Latched modifiers, i.e. will be unset after the next non-modifier ++ * key press. */ ++ XKB_STATE_MODS_LATCHED = (1 << 1), ++ /** Locked modifiers, i.e. will be unset after the key provoking the ++ * lock has been pressed again. */ ++ XKB_STATE_MODS_LOCKED = (1 << 2), ++ /** Effective modifiers, i.e. currently active and affect key ++ * processing (derived from the other state components). ++ * Use this unless you explictly care how the state came about. */ ++ XKB_STATE_MODS_EFFECTIVE = (1 << 3), ++ /** Depressed layout, i.e. a key is physically holding it. */ ++ XKB_STATE_LAYOUT_DEPRESSED = (1 << 4), ++ /** Latched layout, i.e. will be unset after the next non-modifier ++ * key press. */ ++ XKB_STATE_LAYOUT_LATCHED = (1 << 5), ++ /** Locked layout, i.e. will be unset after the key provoking the lock ++ * has been pressed again. */ ++ XKB_STATE_LAYOUT_LOCKED = (1 << 6), ++ /** Effective layout, i.e. currently active and affects key processing ++ * (derived from the other state components). ++ * Use this unless you explictly care how the state came about. */ ++ XKB_STATE_LAYOUT_EFFECTIVE = (1 << 7), ++ /** LEDs (derived from the other state components). */ ++ XKB_STATE_LEDS = (1 << 8) ++}; ++ ++/** ++ * Update the keyboard state to reflect a given key being pressed or ++ * released. ++ * ++ * This entry point is intended for programs which track the keyboard state ++ * explictly (like an evdev client). If the state is serialized to you by ++ * a master process (like a Wayland compositor) using functions like ++ * xkb_state_serialize_mods(), you should use xkb_state_update_mask() instead. ++ * The two functins should not generally be used together. ++ * ++ * A series of calls to this function should be consistent; that is, a call ++ * with XKB_KEY_DOWN for a key should be matched by an XKB_KEY_UP; if a key ++ * is pressed twice, it should be released twice; etc. Otherwise (e.g. due ++ * to missed input events), situations like "stuck modifiers" may occur. ++ * ++ * This function is often used in conjunction with the function ++ * xkb_state_key_get_syms() (or xkb_state_key_get_one_sym()), for example, ++ * when handling a key event. In this case, you should prefer to get the ++ * keysyms *before* updating the key, such that the keysyms reported for ++ * the key event are not affected by the event itself. This is the ++ * conventional behavior. ++ * ++ * @returns A mask of state components that have changed as a result of ++ * the update. If nothing in the state has changed, returns 0. ++ * ++ * @memberof xkb_state ++ * ++ * @sa xkb_state_update_mask() ++ */ ++enum xkb_state_component ++xkb_state_update_key(struct xkb_state *state, xkb_keycode_t key, ++ enum xkb_key_direction direction); ++ ++/** ++ * Update a keyboard state from a set of explicit masks. ++ * ++ * This entry point is intended for window systems and the like, where a ++ * master process holds an xkb_state, then serializes it over a wire ++ * protocol, and clients then use the serialization to feed in to their own ++ * xkb_state. ++ * ++ * All parameters must always be passed, or the resulting state may be ++ * incoherent. ++ * ++ * The serialization is lossy and will not survive round trips; it must only ++ * be used to feed slave state objects, and must not be used to update the ++ * master state. ++ * ++ * If you do not fit the description above, you should use ++ * xkb_state_update_key() instead. The two functions should not generally be ++ * used together. ++ * ++ * @returns A mask of state components that have changed as a result of ++ * the update. If nothing in the state has changed, returns 0. ++ * ++ * @memberof xkb_state ++ * ++ * @sa xkb_state_component ++ * @sa xkb_state_update_key ++ */ ++enum xkb_state_component ++xkb_state_update_mask(struct xkb_state *state, ++ xkb_mod_mask_t depressed_mods, ++ xkb_mod_mask_t latched_mods, ++ xkb_mod_mask_t locked_mods, ++ xkb_layout_index_t depressed_layout, ++ xkb_layout_index_t latched_layout, ++ xkb_layout_index_t locked_layout); ++ ++/** ++ * Get the keysyms obtained from pressing a particular key in a given ++ * keyboard state. ++ * ++ * Get the keysyms for a key according to the current active layout, ++ * modifiers and shift level for the key, as determined by a keyboard ++ * state. ++ * ++ * @param[in] state The keyboard state object. ++ * @param[in] key The keycode of the key. ++ * @param[out] syms_out An immutable array of keysyms corresponding the ++ * key in the given keyboard state. ++ * ++ * As an extension to XKB, this function can return more than one keysym. ++ * If you do not want to handle this case, you can use ++ * xkb_state_key_get_one_sym() for a simpler interface. ++ * ++ * This function does not perform any @ref keysym-transformations. ++ * (This might change). ++ * ++ * @returns The number of keysyms in the syms_out array. If no keysyms ++ * are produced by the key in the given keyboard state, returns 0 and sets ++ * syms_out to NULL. ++ * ++ * @memberof xkb_state ++ */ ++int ++xkb_state_key_get_syms(struct xkb_state *state, xkb_keycode_t key, ++ const xkb_keysym_t **syms_out); ++ ++/** ++ * Get the Unicode/UTF-8 string obtained from pressing a particular key ++ * in a given keyboard state. ++ * ++ * @param[in] state The keyboard state object. ++ * @param[in] key The keycode of the key. ++ * @param[out] buffer A buffer to write the string into. ++ * @param[in] size Size of the buffer. ++ * ++ * @warning If the buffer passed is too small, the string is truncated ++ * (though still NUL-terminated). ++ * ++ * @returns The number of bytes required for the string, excluding the ++ * NUL byte. If there is nothing to write, returns 0. ++ * ++ * You may check if truncation has occurred by comparing the return value ++ * with the size of @p buffer, similarly to the snprintf(3) function. ++ * You may safely pass NULL and 0 to @p buffer and @p size to find the ++ * required size (without the NUL-byte). ++ * ++ * This function performs Capitalization and Control @ref ++ * keysym-transformations. ++ * ++ * @memberof xkb_state ++ * @since 0.4.1 ++ */ ++int ++xkb_state_key_get_utf8(struct xkb_state *state, xkb_keycode_t key, ++ char *buffer, size_t size); ++ ++/** ++ * Get the Unicode/UTF-32 codepoint obtained from pressing a particular ++ * key in a a given keyboard state. ++ * ++ * @returns The UTF-32 representation for the key, if it consists of only ++ * a single codepoint. Otherwise, returns 0. ++ * ++ * This function performs Capitalization and Control @ref ++ * keysym-transformations. ++ * ++ * @memberof xkb_state ++ * @since 0.4.1 ++ */ ++uint32_t ++xkb_state_key_get_utf32(struct xkb_state *state, xkb_keycode_t key); ++ ++/** ++ * Get the single keysym obtained from pressing a particular key in a ++ * given keyboard state. ++ * ++ * This function is similar to xkb_state_key_get_syms(), but intended ++ * for users which cannot or do not want to handle the case where ++ * multiple keysyms are returned (in which case this function is ++ * preferred). ++ * ++ * @returns The keysym. If the key does not have exactly one keysym, ++ * returns XKB_KEY_NoSymbol ++ * ++ * This function performs Capitalization @ref keysym-transformations. ++ * ++ * @sa xkb_state_key_get_syms() ++ * @memberof xkb_state ++ */ ++xkb_keysym_t ++xkb_state_key_get_one_sym(struct xkb_state *state, xkb_keycode_t key); ++ ++/** ++ * Get the effective layout index for a key in a given keyboard state. ++ * ++ * @returns The layout index for the key in the given keyboard state. If ++ * the given keycode is invalid, or if the key is not included in any ++ * layout at all, returns XKB_LAYOUT_INVALID. ++ * ++ * @invariant If the returned layout is valid, the following always holds: ++ * @code ++ * xkb_state_key_get_layout(state, key) < xkb_keymap_num_layouts_for_key(keymap, key) ++ * @endcode ++ * ++ * @memberof xkb_state ++ */ ++xkb_layout_index_t ++xkb_state_key_get_layout(struct xkb_state *state, xkb_keycode_t key); ++ ++/** ++ * Get the effective shift level for a key in a given keyboard state and ++ * layout. ++ * ++ * @param state The keyboard state. ++ * @param key The keycode of the key. ++ * @param layout The layout for which to get the shift level. This must be ++ * smaller than: ++ * @code xkb_keymap_num_layouts_for_key(keymap, key) @endcode ++ * usually it would be: ++ * @code xkb_state_key_get_layout(state, key) @endcode ++ * ++ * @return The shift level index. If the key or layout are invalid, ++ * returns XKB_LEVEL_INVALID. ++ * ++ * @invariant If the returned level is valid, the following always holds: ++ * @code ++ * xkb_state_key_get_level(state, key, layout) < xkb_keymap_num_levels_for_key(keymap, key, layout) ++ * @endcode ++ * ++ * @memberof xkb_state ++ */ ++xkb_level_index_t ++xkb_state_key_get_level(struct xkb_state *state, xkb_keycode_t key, ++ xkb_layout_index_t layout); ++ ++/** ++ * Match flags for xkb_state_mod_indices_are_active() and ++ * xkb_state_mod_names_are_active(), specifying the conditions for a ++ * successful match. XKB_STATE_MATCH_NON_EXCLUSIVE is bitmaskable with ++ * the other modes. ++ */ ++enum xkb_state_match { ++ /** Returns true if any of the modifiers are active. */ ++ XKB_STATE_MATCH_ANY = (1 << 0), ++ /** Returns true if all of the modifiers are active. */ ++ XKB_STATE_MATCH_ALL = (1 << 1), ++ /** Makes matching non-exclusive, i.e. will not return false if a ++ * modifier not specified in the arguments is active. */ ++ XKB_STATE_MATCH_NON_EXCLUSIVE = (1 << 16) ++}; ++ ++/** ++ * The counterpart to xkb_state_update_mask for modifiers, to be used on ++ * the server side of serialization. ++ * ++ * @param state The keyboard state. ++ * @param components A mask of the modifier state components to serialize. ++ * State components other than XKB_STATE_MODS_* are ignored. ++ * If XKB_STATE_MODS_EFFECTIVE is included, all other state components are ++ * ignored. ++ * ++ * @returns A xkb_mod_mask_t representing the given components of the ++ * modifier state. ++ * ++ * This function should not be used in regular clients; please use the ++ * xkb_state_mod_*_is_active API instead. ++ * ++ * @memberof xkb_state ++ */ ++xkb_mod_mask_t ++xkb_state_serialize_mods(struct xkb_state *state, ++ enum xkb_state_component components); ++ ++/** ++ * The counterpart to xkb_state_update_mask for layouts, to be used on ++ * the server side of serialization. ++ * ++ * @param state The keyboard state. ++ * @param components A mask of the layout state components to serialize. ++ * State components other than XKB_STATE_LAYOUT_* are ignored. ++ * If XKB_STATE_LAYOUT_EFFECTIVE is included, all other state components are ++ * ignored. ++ * ++ * @returns A layout index representing the given components of the ++ * layout state. ++ * ++ * This function should not be used in regular clients; please use the ++ * xkb_state_layout_*_is_active API instead. ++ * ++ * @memberof xkb_state ++ */ ++xkb_layout_index_t ++xkb_state_serialize_layout(struct xkb_state *state, ++ enum xkb_state_component components); ++ ++/** ++ * Test whether a modifier is active in a given keyboard state by name. ++ * ++ * @returns 1 if the modifier is active, 0 if it is not. If the modifier ++ * name does not exist in the keymap, returns -1. ++ * ++ * @memberof xkb_state ++ */ ++int ++xkb_state_mod_name_is_active(struct xkb_state *state, const char *name, ++ enum xkb_state_component type); ++ ++/** ++ * Test whether a set of modifiers are active in a given keyboard state by ++ * name. ++ * ++ * @param state The keyboard state. ++ * @param type The component of the state against which to match the ++ * given modifiers. ++ * @param match The manner by which to match the state against the ++ * given modifiers. ++ * @param ... The set of of modifier names to test, terminated by a NULL ++ * argument (sentinel). ++ * ++ * @returns 1 if the modifiers are active, 0 if they are not. If any of ++ * the modifier names do not exist in the keymap, returns -1. ++ * ++ * @memberof xkb_state ++ */ ++int ++xkb_state_mod_names_are_active(struct xkb_state *state, ++ enum xkb_state_component type, ++ enum xkb_state_match match, ++ ...); ++ ++/** ++ * Test whether a modifier is active in a given keyboard state by index. ++ * ++ * @returns 1 if the modifier is active, 0 if it is not. If the modifier ++ * index is invalid in the keymap, returns -1. ++ * ++ * @memberof xkb_state ++ */ ++int ++xkb_state_mod_index_is_active(struct xkb_state *state, xkb_mod_index_t idx, ++ enum xkb_state_component type); ++ ++/** ++ * Test whether a set of modifiers are active in a given keyboard state by ++ * index. ++ * ++ * @param state The keyboard state. ++ * @param type The component of the state against which to match the ++ * given modifiers. ++ * @param match The manner by which to match the state against the ++ * given modifiers. ++ * @param ... The set of of modifier indices to test, terminated by a ++ * XKB_MOD_INVALID argument (sentinel). ++ * ++ * @returns 1 if the modifiers are active, 0 if they are not. If any of ++ * the modifier indices are invalid in the keymap, returns -1. ++ * ++ * @memberof xkb_state ++ */ ++int ++xkb_state_mod_indices_are_active(struct xkb_state *state, ++ enum xkb_state_component type, ++ enum xkb_state_match match, ++ ...); ++ ++/** ++ * @page consumed-modifiers Consumed Modifiers ++ * @parblock ++ * ++ * Some functions, like xkb_state_key_get_syms(), look at the state of ++ * the modifiers in the keymap and derive from it the correct shift level ++ * to use for the key. For example, in a US layout, pressing the key ++ * labeled \ while the Shift modifier is active, generates the keysym ++ * 'A'. In this case, the Shift modifier is said to be "consumed". ++ * However, the Num Lock modifier does not affect this translation at all, ++ * even if it is active, so it is not consumed by this translation. ++ * ++ * It may be desirable for some application to not reuse consumed modifiers ++ * for further processing, e.g. for hotkeys or keyboard shortcuts. To ++ * understand why, consider some requirements from a standard shortcut ++ * mechanism, and how they are implemented: ++ * ++ * 1. The shortcut's modifiers must match exactly to the state. For ++ * example, it is possible to bind separate actions to \\ ++ * and to \\\. Further, if only \\ is ++ * bound to an action, pressing \\\ should not ++ * trigger the shortcut. ++ * Effectively, this means that the modifiers are compared using the ++ * equality operator (==). ++ * ++ * 2. Only relevant modifiers are considered for the matching. For example, ++ * Caps Lock and Num Lock should not generally affect the matching, e.g. ++ * when matching \\ against the state, it does not matter ++ * whether Num Lock is active or not. These relevant, or "significant", ++ * modifiers usually include Alt, Control, Shift, Super and similar. ++ * Effectively, this means that non-significant modifiers are masked out, ++ * before doing the comparison as described above. ++ * ++ * 3. The matching must be independent of the layout/keymap. For example, ++ * the \ (+) symbol is found on the first level on some layouts, ++ * but requires holding Shift on others. If you simply bind the action ++ * to the \ keysym, it would work for the unshifted kind, but ++ * not for the others, because the match against Shift would fail. If ++ * you bind the action to \\, only the shifted kind would ++ * work. So what is needed is to recognize that Shift is used up in the ++ * translation of the keysym itself, and therefore should not be included ++ * in the matching. ++ * Effectively, this means that consumed modifiers (Shift in this example) ++ * are masked out as well, before doing the comparison. ++ * ++ * In summary, this is how the matching would be performed: ++ * @code ++ * (keysym == shortcut_keysym) && ++ * ((state_mods & ~consumed_mods & significant_mods) == shortcut_mods) ++ * @endcode ++ * ++ * @c state_mods are the modifiers reported by ++ * xkb_state_mod_index_is_active() and similar functions. ++ * @c consumed_mods are the modifiers reported by ++ * xkb_state_mod_index_is_consumed() and similar functions. ++ * @c significant_mods are decided upon by the application/toolkit/user; ++ * it is up to them to decide whether these are configurable or hard-coded. ++ * ++ * @endparblock ++ */ ++ ++/** ++ * Test whether a modifier is consumed by keyboard state translation for ++ * a key. ++ * ++ * @returns 1 if the modifier is consumed, 0 if it is not. If the modifier ++ * index is not valid in the keymap, returns -1. ++ * ++ * @sa xkb_state_mod_mask_remove_consumed() ++ * @sa xkb_state_key_get_consumed_mods() ++ * @memberof xkb_state ++ */ ++int ++xkb_state_mod_index_is_consumed(struct xkb_state *state, xkb_keycode_t key, ++ xkb_mod_index_t idx); ++ ++/** ++ * Remove consumed modifiers from a modifier mask for a key. ++ * ++ * Takes the given modifier mask, and removes all modifiers which are ++ * consumed for that particular key (as in xkb_state_mod_index_is_consumed()). ++ * ++ * @sa xkb_state_mod_index_is_consumed() ++ * @memberof xkb_state ++ */ ++xkb_mod_mask_t ++xkb_state_mod_mask_remove_consumed(struct xkb_state *state, xkb_keycode_t key, ++ xkb_mod_mask_t mask); ++ ++/** ++ * Get the mask of modifiers consumed by translating a given key. ++ * ++ * @returns a mask of the consumed modifiers. ++ * ++ * @sa xkb_state_mod_index_is_consumed() ++ * @memberof xkb_state ++ * @since 0.4.1 ++ */ ++xkb_mod_mask_t ++xkb_state_key_get_consumed_mods(struct xkb_state *state, xkb_keycode_t key); ++ ++/** ++ * Test whether a layout is active in a given keyboard state by name. ++ * ++ * @returns 1 if the layout is active, 0 if it is not. If no layout with ++ * this name exists in the keymap, return -1. ++ * ++ * If multiple layouts in the keymap have this name, the one with the lowest ++ * index is tested. ++ * ++ * @sa xkb_layout_index_t ++ * @memberof xkb_state ++ */ ++int ++xkb_state_layout_name_is_active(struct xkb_state *state, const char *name, ++ enum xkb_state_component type); ++ ++/** ++ * Test whether a layout is active in a given keyboard state by index. ++ * ++ * @returns 1 if the layout is active, 0 if it is not. If the layout index ++ * is not valid in the keymap, returns -1. ++ * ++ * @sa xkb_layout_index_t ++ * @memberof xkb_state ++ */ ++int ++xkb_state_layout_index_is_active(struct xkb_state *state, ++ xkb_layout_index_t idx, ++ enum xkb_state_component type); ++ ++/** ++ * Test whether a LED is active in a given keyboard state by name. ++ * ++ * @returns 1 if the LED is active, 0 if it not. If no LED with this name ++ * exists in the keymap, returns -1. ++ * ++ * @sa xkb_led_index_t ++ * @memberof xkb_state ++ */ ++int ++xkb_state_led_name_is_active(struct xkb_state *state, const char *name); ++ ++/** ++ * Test whether a LED is active in a given keyboard state by index. ++ * ++ * @returns 1 if the LED is active, 0 if it not. If the LED index is not ++ * valid in the keymap, returns -1. ++ * ++ * @sa xkb_led_index_t ++ * @memberof xkb_state ++ */ ++int ++xkb_state_led_index_is_active(struct xkb_state *state, xkb_led_index_t idx); ++ ++/** @} */ ++ ++/* Leave this include last, so it can pick up our types, etc. */ ++#include ++ ++#ifdef __cplusplus ++} /* extern "C" */ ++#endif ++ ++#endif /* _XKBCOMMON_H_ */ +diff --git a/qtbase/src/plugins/platforminputcontexts/platforminputcontexts.pro b/qtbase/src/plugins/platforminputcontexts/platforminputcontexts.pro +index faea54b..0967cb3 100644 +--- a/qtbase/src/plugins/platforminputcontexts/platforminputcontexts.pro ++++ b/qtbase/src/plugins/platforminputcontexts/platforminputcontexts.pro +@@ -1,6 +1,7 @@ + TEMPLATE = subdirs + + qtHaveModule(dbus) { ++!mac:!win32:SUBDIRS += fcitx + !mac:!win32:SUBDIRS += ibus + } + diff --git a/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm b/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm index f3a0216..643ebdd 100644 --- a/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/compose/compose.pro b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/compose/compose.pro index 0f902442d..65183b6fd 100644 --- a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/compose/compose.pro +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/compose/compose.pro @@ -22,7 +22,7 @@ contains(QT_CONFIG, xkbcommon-qt): { QT_CONFIG -= use-xkbcommon-x11support # include(../../../3rdparty/xkbcommon.pri) } else { -# LIBS += $$QMAKE_LIBS_XKBCOMMON + LIBS += $$QMAKE_LIBS_XKBCOMMON QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_XKBCOMMON } diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/Makefile b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/Makefile deleted file mode 100644 index de86b5c3e..000000000 --- a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/Makefile +++ /dev/null @@ -1,6085 +0,0 @@ -############################################################################# -# Makefile for building: libfcitxplatforminputcontextplugin.a -# Generated by qmake (3.0) (Qt 5.5.0) -# Project: fcitx.pro -# Template: lib -# Command: /home/antanubis/TBuild/Libraries/QtStatic/qtbase/bin/qmake -o Makefile fcitx.pro -############################################################################# - -MAKEFILE = Makefile - -####### Compiler, tools and options - -CC = gcc -CXX = g++ -DEFINES = -DQT_NO_MTDEV -DQT_NO_LIBUDEV -DQT_NO_TSLIB -DQT_NO_LIBINPUT -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_STATICPLUGIN -DQT_PLUGIN -DQT_GUI_LIB -DQT_DBUS_LIB -DQT_CORE_LIB -CFLAGS = -pipe -O2 -fPIC -fvisibility=hidden -fno-exceptions -Wall -W -D_REENTRANT -fPIC $(DEFINES) -CXXFLAGS = -pipe -O2 -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -std=c++0x -fno-exceptions -Wall -W -D_REENTRANT -fPIC $(DEFINES) -INCPATH = -I. -I../../../../include/QtGui/5.5.0 -I../../../../include/QtGui/5.5.0/QtGui -I../../../../include -I../../../../include/QtGui -I../../../../include/QtDBus -I../../../../include/QtCore -I.moc -I../../../../mkspecs/linux-g++ -QMAKE = /home/antanubis/TBuild/Libraries/QtStatic/qtbase/bin/qmake -DEL_FILE = rm -f -CHK_DIR_EXISTS= test -d -MKDIR = mkdir -p -COPY = cp -f -COPY_FILE = cp -f -COPY_DIR = cp -f -R -INSTALL_FILE = install -m 644 -p -INSTALL_PROGRAM = install -m 755 -p -INSTALL_DIR = cp -f -R -DEL_FILE = rm -f -SYMLINK = ln -f -s -DEL_DIR = rmdir -MOVE = mv -f -TAR = tar -cf -COMPRESS = gzip -9f -DISTNAME = fcitxplatforminputcontextplugin1.0.0 -DISTDIR = /home/antanubis/TBuild/Libraries/QtStatic/qtbase/src/plugins/platforminputcontexts/fcitx/.obj/fcitxplatforminputcontextplugin1.0.0 -AR = ar cqs -RANLIB = -SED = sed -STRIP = strip - -####### Output directory - -OBJECTS_DIR = .obj/ - -####### Files - -SOURCES = fcitxqtconnection.cpp \ - fcitxqtformattedpreedit.cpp \ - fcitxqtinputcontextproxy.cpp \ - fcitxqtinputmethoditem.cpp \ - fcitxqtinputmethodproxy.cpp \ - fcitxqtkeyboardlayout.cpp \ - fcitxqtkeyboardproxy.cpp \ - keyuni.cpp \ - main.cpp \ - qfcitxplatforminputcontext.cpp \ - utils.cpp .moc/moc_fcitxqtconnection.cpp \ - .moc/moc_fcitxqtconnection_p.cpp \ - .moc/moc_fcitxqtinputcontextproxy.cpp \ - .moc/moc_fcitxqtinputmethodproxy.cpp \ - .moc/moc_fcitxqtkeyboardproxy.cpp \ - .moc/moc_main.cpp \ - .moc/moc_qfcitxplatforminputcontext.cpp -OBJECTS = .obj/fcitxqtconnection.o \ - .obj/fcitxqtformattedpreedit.o \ - .obj/fcitxqtinputcontextproxy.o \ - .obj/fcitxqtinputmethoditem.o \ - .obj/fcitxqtinputmethodproxy.o \ - .obj/fcitxqtkeyboardlayout.o \ - .obj/fcitxqtkeyboardproxy.o \ - .obj/keyuni.o \ - .obj/main.o \ - .obj/qfcitxplatforminputcontext.o \ - .obj/utils.o \ - .obj/moc_fcitxqtconnection.o \ - .obj/moc_fcitxqtconnection_p.o \ - .obj/moc_fcitxqtinputcontextproxy.o \ - .obj/moc_fcitxqtinputmethodproxy.o \ - .obj/moc_fcitxqtkeyboardproxy.o \ - .obj/moc_main.o \ - .obj/moc_qfcitxplatforminputcontext.o -DIST = ../../../../mkspecs/features/spec_pre.prf \ - ../../../../mkspecs/common/unix.conf \ - ../../../../mkspecs/common/linux.conf \ - ../../../../mkspecs/common/sanitize.conf \ - ../../../../mkspecs/common/gcc-base.conf \ - ../../../../mkspecs/common/gcc-base-unix.conf \ - ../../../../mkspecs/common/g++-base.conf \ - ../../../../mkspecs/common/g++-unix.conf \ - ../../../../mkspecs/qconfig.pri \ - ../../../../mkspecs/modules-inst/qt_lib_bootstrap_private.pri \ - ../../../../mkspecs/modules/qt_lib_bootstrap_private.pri \ - ../../../../mkspecs/modules-inst/qt_lib_concurrent.pri \ - ../../../../mkspecs/modules-inst/qt_lib_concurrent_private.pri \ - ../../../../mkspecs/modules/qt_lib_concurrent.pri \ - ../../../../mkspecs/modules-inst/qt_lib_core.pri \ - ../../../../mkspecs/modules-inst/qt_lib_core_private.pri \ - ../../../../mkspecs/modules/qt_lib_core.pri \ - ../../../../mkspecs/modules-inst/qt_lib_dbus.pri \ - ../../../../mkspecs/modules-inst/qt_lib_dbus_private.pri \ - ../../../../mkspecs/modules/qt_lib_dbus.pri \ - ../../../../mkspecs/modules-inst/qt_lib_gui.pri \ - ../../../../mkspecs/modules-inst/qt_lib_gui_private.pri \ - ../../../../mkspecs/modules/qt_lib_gui.pri \ - ../../../../mkspecs/modules-inst/qt_lib_network.pri \ - ../../../../mkspecs/modules-inst/qt_lib_network_private.pri \ - ../../../../mkspecs/modules/qt_lib_network.pri \ - ../../../../mkspecs/modules-inst/qt_lib_platformsupport_private.pri \ - ../../../../mkspecs/modules/qt_lib_platformsupport_private.pri \ - ../../../../mkspecs/modules-inst/qt_lib_printsupport.pri \ - ../../../../mkspecs/modules-inst/qt_lib_printsupport_private.pri \ - ../../../../mkspecs/modules/qt_lib_printsupport.pri \ - ../../../../mkspecs/modules-inst/qt_lib_sql.pri \ - ../../../../mkspecs/modules-inst/qt_lib_sql_private.pri \ - ../../../../mkspecs/modules/qt_lib_sql.pri \ - ../../../../mkspecs/modules-inst/qt_lib_testlib.pri \ - ../../../../mkspecs/modules-inst/qt_lib_testlib_private.pri \ - ../../../../mkspecs/modules/qt_lib_testlib.pri \ - ../../../../mkspecs/modules-inst/qt_lib_widgets.pri \ - ../../../../mkspecs/modules-inst/qt_lib_widgets_private.pri \ - ../../../../mkspecs/modules/qt_lib_widgets.pri \ - ../../../../mkspecs/modules-inst/qt_lib_xcb_qpa_lib_private.pri \ - ../../../../mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \ - ../../../../mkspecs/modules-inst/qt_lib_xml.pri \ - ../../../../mkspecs/modules-inst/qt_lib_xml_private.pri \ - ../../../../mkspecs/modules/qt_lib_xml.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_composeplatforminputcontextplugin.pri \ - ../../../../mkspecs/modules/qt_plugin_composeplatforminputcontextplugin.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_ibusplatforminputcontextplugin.pri \ - ../../../../mkspecs/modules/qt_plugin_ibusplatforminputcontextplugin.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qconnmanbearer.pri \ - ../../../../mkspecs/modules/qt_plugin_qconnmanbearer.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qevdevkeyboardplugin.pri \ - ../../../../mkspecs/modules/qt_plugin_qevdevkeyboardplugin.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qevdevmouseplugin.pri \ - ../../../../mkspecs/modules/qt_plugin_qevdevmouseplugin.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qevdevtabletplugin.pri \ - ../../../../mkspecs/modules/qt_plugin_qevdevtabletplugin.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qevdevtouchplugin.pri \ - ../../../../mkspecs/modules/qt_plugin_qevdevtouchplugin.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qgenericbearer.pri \ - ../../../../mkspecs/modules/qt_plugin_qgenericbearer.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qgtk2.pri \ - ../../../../mkspecs/modules/qt_plugin_qgtk2.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qico.pri \ - ../../../../mkspecs/modules/qt_plugin_qico.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qlinuxfb.pri \ - ../../../../mkspecs/modules/qt_plugin_qlinuxfb.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qminimal.pri \ - ../../../../mkspecs/modules/qt_plugin_qminimal.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qnmbearer.pri \ - ../../../../mkspecs/modules/qt_plugin_qnmbearer.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qoffscreen.pri \ - ../../../../mkspecs/modules/qt_plugin_qoffscreen.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qsqlite.pri \ - ../../../../mkspecs/modules/qt_plugin_qsqlite.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qtuiotouchplugin.pri \ - ../../../../mkspecs/modules/qt_plugin_qtuiotouchplugin.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qxcb.pri \ - ../../../../mkspecs/modules/qt_plugin_qxcb.pri \ - ../../../../mkspecs/modules/qt_tool_moc.pri \ - ../../../../mkspecs/modules/qt_tool_qdbuscpp2xml.pri \ - ../../../../mkspecs/modules/qt_tool_qdbusxml2cpp.pri \ - ../../../../mkspecs/modules/qt_tool_qdoc.pri \ - ../../../../mkspecs/modules/qt_tool_qlalr.pri \ - ../../../../mkspecs/modules/qt_tool_rcc.pri \ - ../../../../mkspecs/modules/qt_tool_syncqt.pri \ - ../../../../mkspecs/modules/qt_tool_uic.pri \ - ../../../../mkspecs/features/qt_functions.prf \ - ../../../../mkspecs/features/qt_config.prf \ - ../../../../mkspecs/linux-g++/qmake.conf \ - ../../../../mkspecs/features/spec_post.prf \ - ../../../../mkspecs/qmodule.pri \ - ../../../../mkspecs/features/qt_build_config.prf \ - ../../../../.qmake.conf \ - ../../../../mkspecs/features/exclusive_builds.prf \ - ../../../../mkspecs/features/default_pre.prf \ - ../../../../mkspecs/features/qt_build_paths.prf \ - ../../../../mkspecs/modules-inst/qt_plugin_fcitxplatforminputcontextplugin.pri \ - ../../../../mkspecs/modules/qt_plugin_fcitxplatforminputcontextplugin.pri \ - ../../../../mkspecs/features/qt_targets.prf \ - ../../../../mkspecs/features/qt_common.prf \ - ../../../../mkspecs/features/qt_plugin.prf \ - ../../../../mkspecs/features/resolve_config.prf \ - ../../../../mkspecs/features/default_post.prf \ - ../../../../mkspecs/features/unix/bsymbolic_functions.prf \ - ../../../../mkspecs/features/unix/hide_symbols.prf \ - ../../../../mkspecs/features/c++11.prf \ - ../../../../mkspecs/features/cmake_functions.prf \ - ../../../../mkspecs/features/create_cmake.prf \ - ../../../../mkspecs/features/qt_example_installs.prf \ - ../../../../mkspecs/features/exceptions_off.prf \ - ../../../../mkspecs/features/qt_docs_targets.prf \ - ../../../../mkspecs/features/precompile_header.prf \ - ../../../../mkspecs/features/unix/largefile.prf \ - ../../../../mkspecs/features/warn_on.prf \ - ../../../../mkspecs/features/qt.prf \ - ../../../../mkspecs/features/resources.prf \ - ../../../../mkspecs/features/moc.prf \ - ../../../../mkspecs/features/dbuscommon.pri \ - ../../../../mkspecs/features/dbusinterfaces.prf \ - ../../../../mkspecs/features/dbusadaptors.prf \ - ../../../../mkspecs/features/unix/thread.prf \ - ../../../../mkspecs/features/testcase_targets.prf \ - ../../../../mkspecs/features/yacc.prf \ - ../../../../mkspecs/features/lex.prf \ - fcitx.pro fcitxqtconnection.h \ - fcitxqtconnection_p.h \ - fcitxqtdbusaddons_export.h \ - fcitxqtdbusaddons_version.h \ - fcitxqtformattedpreedit.h \ - fcitxqtinputcontextproxy.h \ - fcitxqtinputmethoditem.h \ - fcitxqtinputmethodproxy.h \ - fcitxqtkeyboardlayout.h \ - fcitxqtkeyboardproxy.h \ - keydata.h \ - keyserver_x11.h \ - keyuni.h \ - main.h \ - qfcitxplatforminputcontext.h \ - utils.h fcitxqtconnection.cpp \ - fcitxqtformattedpreedit.cpp \ - fcitxqtinputcontextproxy.cpp \ - fcitxqtinputmethoditem.cpp \ - fcitxqtinputmethodproxy.cpp \ - fcitxqtkeyboardlayout.cpp \ - fcitxqtkeyboardproxy.cpp \ - keyuni.cpp \ - main.cpp \ - qfcitxplatforminputcontext.cpp \ - utils.cpp -QMAKE_TARGET = fcitxplatforminputcontextplugin -DESTDIR = ../../../../plugins/platforminputcontexts/#avoid trailing-slash linebreak -TARGET = libfcitxplatforminputcontextplugin.a -TARGETD = libfcitxplatforminputcontextplugin.a - - -first: all -####### Implicit rules - -.SUFFIXES: .o .c .cpp .cc .cxx .C - -.cpp.o: - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" - -.cc.o: - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" - -.cxx.o: - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" - -.C.o: - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" - -.c.o: - $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<" - -####### Build rules - -staticlib: ../../../../plugins/platforminputcontexts/$(TARGET) - -../../../../plugins/platforminputcontexts/$(TARGET): /home/antanubis/TBuild/Libraries/QtStatic/qtbase/lib/libQt5Gui.a /home/antanubis/TBuild/Libraries/QtStatic/qtbase/lib/libQt5DBus.a /home/antanubis/TBuild/Libraries/QtStatic/qtbase/lib/libQt5Core.a $(OBJECTS) $(OBJCOMP) - @test -d ../../../../plugins/platforminputcontexts/ || mkdir -p ../../../../plugins/platforminputcontexts/ - -$(DEL_FILE) $(TARGET) - $(AR) $(TARGET) $(OBJECTS) - -$(DEL_FILE) ../../../../plugins/platforminputcontexts/$(TARGET) - -$(MOVE) $(TARGET) ../../../../plugins/platforminputcontexts/ - - -../../../../plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.prl: - @$(QMAKE) -prl fcitx.pro -Makefile: fcitx.pro ../../../../.qmake.conf ../../../../.qmake.cache ../../../../mkspecs/linux-g++/qmake.conf ../../../../mkspecs/features/spec_pre.prf \ - ../../../../mkspecs/common/unix.conf \ - ../../../../mkspecs/common/linux.conf \ - ../../../../mkspecs/common/sanitize.conf \ - ../../../../mkspecs/common/gcc-base.conf \ - ../../../../mkspecs/common/gcc-base-unix.conf \ - ../../../../mkspecs/common/g++-base.conf \ - ../../../../mkspecs/common/g++-unix.conf \ - ../../../../mkspecs/qconfig.pri \ - /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qdds.pri \ - /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qdds.pri \ - /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qicns.pri \ - /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qicns.pri \ - /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qjp2.pri \ - /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qjp2.pri \ - /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qmng.pri \ - /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qmng.pri \ - /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qtga.pri \ - /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qtga.pri \ - /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qtiff.pri \ - /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qtiff.pri \ - /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qwbmp.pri \ - /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qwbmp.pri \ - /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qwebp.pri \ - /home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qwebp.pri \ - ../../../../mkspecs/modules-inst/qt_lib_bootstrap_private.pri \ - ../../../../mkspecs/modules/qt_lib_bootstrap_private.pri \ - ../../../../mkspecs/modules-inst/qt_lib_concurrent.pri \ - ../../../../mkspecs/modules-inst/qt_lib_concurrent_private.pri \ - ../../../../mkspecs/modules/qt_lib_concurrent.pri \ - ../../../../mkspecs/modules-inst/qt_lib_core.pri \ - ../../../../mkspecs/modules-inst/qt_lib_core_private.pri \ - ../../../../mkspecs/modules/qt_lib_core.pri \ - ../../../../mkspecs/modules-inst/qt_lib_dbus.pri \ - ../../../../mkspecs/modules-inst/qt_lib_dbus_private.pri \ - ../../../../mkspecs/modules/qt_lib_dbus.pri \ - ../../../../mkspecs/modules-inst/qt_lib_gui.pri \ - ../../../../mkspecs/modules-inst/qt_lib_gui_private.pri \ - ../../../../mkspecs/modules/qt_lib_gui.pri \ - ../../../../mkspecs/modules-inst/qt_lib_network.pri \ - ../../../../mkspecs/modules-inst/qt_lib_network_private.pri \ - ../../../../mkspecs/modules/qt_lib_network.pri \ - ../../../../mkspecs/modules-inst/qt_lib_platformsupport_private.pri \ - ../../../../mkspecs/modules/qt_lib_platformsupport_private.pri \ - ../../../../mkspecs/modules-inst/qt_lib_printsupport.pri \ - ../../../../mkspecs/modules-inst/qt_lib_printsupport_private.pri \ - ../../../../mkspecs/modules/qt_lib_printsupport.pri \ - ../../../../mkspecs/modules-inst/qt_lib_sql.pri \ - ../../../../mkspecs/modules-inst/qt_lib_sql_private.pri \ - ../../../../mkspecs/modules/qt_lib_sql.pri \ - ../../../../mkspecs/modules-inst/qt_lib_testlib.pri \ - ../../../../mkspecs/modules-inst/qt_lib_testlib_private.pri \ - ../../../../mkspecs/modules/qt_lib_testlib.pri \ - ../../../../mkspecs/modules-inst/qt_lib_widgets.pri \ - ../../../../mkspecs/modules-inst/qt_lib_widgets_private.pri \ - ../../../../mkspecs/modules/qt_lib_widgets.pri \ - ../../../../mkspecs/modules-inst/qt_lib_xcb_qpa_lib_private.pri \ - ../../../../mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \ - ../../../../mkspecs/modules-inst/qt_lib_xml.pri \ - ../../../../mkspecs/modules-inst/qt_lib_xml_private.pri \ - ../../../../mkspecs/modules/qt_lib_xml.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_composeplatforminputcontextplugin.pri \ - ../../../../mkspecs/modules/qt_plugin_composeplatforminputcontextplugin.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_ibusplatforminputcontextplugin.pri \ - ../../../../mkspecs/modules/qt_plugin_ibusplatforminputcontextplugin.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qconnmanbearer.pri \ - ../../../../mkspecs/modules/qt_plugin_qconnmanbearer.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qevdevkeyboardplugin.pri \ - ../../../../mkspecs/modules/qt_plugin_qevdevkeyboardplugin.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qevdevmouseplugin.pri \ - ../../../../mkspecs/modules/qt_plugin_qevdevmouseplugin.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qevdevtabletplugin.pri \ - ../../../../mkspecs/modules/qt_plugin_qevdevtabletplugin.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qevdevtouchplugin.pri \ - ../../../../mkspecs/modules/qt_plugin_qevdevtouchplugin.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qgenericbearer.pri \ - ../../../../mkspecs/modules/qt_plugin_qgenericbearer.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qgtk2.pri \ - ../../../../mkspecs/modules/qt_plugin_qgtk2.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qico.pri \ - ../../../../mkspecs/modules/qt_plugin_qico.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qlinuxfb.pri \ - ../../../../mkspecs/modules/qt_plugin_qlinuxfb.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qminimal.pri \ - ../../../../mkspecs/modules/qt_plugin_qminimal.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qnmbearer.pri \ - ../../../../mkspecs/modules/qt_plugin_qnmbearer.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qoffscreen.pri \ - ../../../../mkspecs/modules/qt_plugin_qoffscreen.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qsqlite.pri \ - ../../../../mkspecs/modules/qt_plugin_qsqlite.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qtuiotouchplugin.pri \ - ../../../../mkspecs/modules/qt_plugin_qtuiotouchplugin.pri \ - ../../../../mkspecs/modules-inst/qt_plugin_qxcb.pri \ - ../../../../mkspecs/modules/qt_plugin_qxcb.pri \ - ../../../../mkspecs/modules/qt_tool_moc.pri \ - ../../../../mkspecs/modules/qt_tool_qdbuscpp2xml.pri \ - ../../../../mkspecs/modules/qt_tool_qdbusxml2cpp.pri \ - ../../../../mkspecs/modules/qt_tool_qdoc.pri \ - ../../../../mkspecs/modules/qt_tool_qlalr.pri \ - ../../../../mkspecs/modules/qt_tool_rcc.pri \ - ../../../../mkspecs/modules/qt_tool_syncqt.pri \ - ../../../../mkspecs/modules/qt_tool_uic.pri \ - ../../../../mkspecs/features/qt_functions.prf \ - ../../../../mkspecs/features/qt_config.prf \ - ../../../../mkspecs/linux-g++/qmake.conf \ - ../../../../mkspecs/features/spec_post.prf \ - ../../../../mkspecs/qmodule.pri \ - ../../../../mkspecs/features/qt_build_config.prf \ - ../../../../.qmake.conf \ - ../../../../.qmake.cache \ - ../../../../mkspecs/features/exclusive_builds.prf \ - ../../../../mkspecs/features/default_pre.prf \ - ../../../../mkspecs/features/qt_build_paths.prf \ - ../../../../mkspecs/modules-inst/qt_plugin_fcitxplatforminputcontextplugin.pri \ - ../../../../mkspecs/modules/qt_plugin_fcitxplatforminputcontextplugin.pri \ - ../../../../mkspecs/features/qt_targets.prf \ - ../../../../mkspecs/features/qt_common.prf \ - ../../../../mkspecs/features/qt_plugin.prf \ - ../../../../mkspecs/features/resolve_config.prf \ - ../../../../mkspecs/features/default_post.prf \ - ../../../../mkspecs/features/unix/bsymbolic_functions.prf \ - ../../../../mkspecs/features/unix/hide_symbols.prf \ - ../../../../mkspecs/features/c++11.prf \ - ../../../../mkspecs/features/cmake_functions.prf \ - ../../../../mkspecs/features/create_cmake.prf \ - ../../../../mkspecs/features/qt_example_installs.prf \ - ../../../../mkspecs/features/exceptions_off.prf \ - ../../../../mkspecs/features/qt_docs_targets.prf \ - ../../../../mkspecs/features/precompile_header.prf \ - ../../../../mkspecs/features/unix/largefile.prf \ - ../../../../mkspecs/features/warn_on.prf \ - ../../../../mkspecs/features/qt.prf \ - ../../../../mkspecs/features/resources.prf \ - ../../../../mkspecs/features/moc.prf \ - ../../../../mkspecs/features/dbuscommon.pri \ - ../../../../mkspecs/features/dbusinterfaces.prf \ - ../../../../mkspecs/features/dbusadaptors.prf \ - ../../../../mkspecs/features/unix/thread.prf \ - ../../../../mkspecs/features/testcase_targets.prf \ - ../../../../mkspecs/features/yacc.prf \ - ../../../../mkspecs/features/lex.prf \ - fcitx.pro \ - ../../../../mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in \ - /home/antanubis/TBuild/Libraries/QtStatic/qtbase/lib/libQt5Gui.prl \ - /home/antanubis/TBuild/Libraries/QtStatic/qtbase/lib/libQt5DBus.prl \ - /home/antanubis/TBuild/Libraries/QtStatic/qtbase/lib/libQt5Core.prl - $(QMAKE) -o Makefile fcitx.pro -../../../../mkspecs/features/spec_pre.prf: -../../../../mkspecs/common/unix.conf: -../../../../mkspecs/common/linux.conf: -../../../../mkspecs/common/sanitize.conf: -../../../../mkspecs/common/gcc-base.conf: -../../../../mkspecs/common/gcc-base-unix.conf: -../../../../mkspecs/common/g++-base.conf: -../../../../mkspecs/common/g++-unix.conf: -../../../../mkspecs/qconfig.pri: -/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qdds.pri: -/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qdds.pri: -/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qicns.pri: -/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qicns.pri: -/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qjp2.pri: -/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qjp2.pri: -/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qmng.pri: -/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qmng.pri: -/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qtga.pri: -/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qtga.pri: -/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qtiff.pri: -/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qtiff.pri: -/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qwbmp.pri: -/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qwbmp.pri: -/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules-inst/qt_plugin_qwebp.pri: -/home/antanubis/TBuild/Libraries/QtStatic/qtimageformats/mkspecs/modules/qt_plugin_qwebp.pri: -../../../../mkspecs/modules-inst/qt_lib_bootstrap_private.pri: -../../../../mkspecs/modules/qt_lib_bootstrap_private.pri: -../../../../mkspecs/modules-inst/qt_lib_concurrent.pri: -../../../../mkspecs/modules-inst/qt_lib_concurrent_private.pri: -../../../../mkspecs/modules/qt_lib_concurrent.pri: -../../../../mkspecs/modules-inst/qt_lib_core.pri: -../../../../mkspecs/modules-inst/qt_lib_core_private.pri: -../../../../mkspecs/modules/qt_lib_core.pri: -../../../../mkspecs/modules-inst/qt_lib_dbus.pri: -../../../../mkspecs/modules-inst/qt_lib_dbus_private.pri: -../../../../mkspecs/modules/qt_lib_dbus.pri: -../../../../mkspecs/modules-inst/qt_lib_gui.pri: -../../../../mkspecs/modules-inst/qt_lib_gui_private.pri: -../../../../mkspecs/modules/qt_lib_gui.pri: -../../../../mkspecs/modules-inst/qt_lib_network.pri: -../../../../mkspecs/modules-inst/qt_lib_network_private.pri: -../../../../mkspecs/modules/qt_lib_network.pri: -../../../../mkspecs/modules-inst/qt_lib_platformsupport_private.pri: -../../../../mkspecs/modules/qt_lib_platformsupport_private.pri: -../../../../mkspecs/modules-inst/qt_lib_printsupport.pri: -../../../../mkspecs/modules-inst/qt_lib_printsupport_private.pri: -../../../../mkspecs/modules/qt_lib_printsupport.pri: -../../../../mkspecs/modules-inst/qt_lib_sql.pri: -../../../../mkspecs/modules-inst/qt_lib_sql_private.pri: -../../../../mkspecs/modules/qt_lib_sql.pri: -../../../../mkspecs/modules-inst/qt_lib_testlib.pri: -../../../../mkspecs/modules-inst/qt_lib_testlib_private.pri: -../../../../mkspecs/modules/qt_lib_testlib.pri: -../../../../mkspecs/modules-inst/qt_lib_widgets.pri: -../../../../mkspecs/modules-inst/qt_lib_widgets_private.pri: -../../../../mkspecs/modules/qt_lib_widgets.pri: -../../../../mkspecs/modules-inst/qt_lib_xcb_qpa_lib_private.pri: -../../../../mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri: -../../../../mkspecs/modules-inst/qt_lib_xml.pri: -../../../../mkspecs/modules-inst/qt_lib_xml_private.pri: -../../../../mkspecs/modules/qt_lib_xml.pri: -../../../../mkspecs/modules-inst/qt_plugin_composeplatforminputcontextplugin.pri: -../../../../mkspecs/modules/qt_plugin_composeplatforminputcontextplugin.pri: -../../../../mkspecs/modules-inst/qt_plugin_ibusplatforminputcontextplugin.pri: -../../../../mkspecs/modules/qt_plugin_ibusplatforminputcontextplugin.pri: -../../../../mkspecs/modules-inst/qt_plugin_qconnmanbearer.pri: -../../../../mkspecs/modules/qt_plugin_qconnmanbearer.pri: -../../../../mkspecs/modules-inst/qt_plugin_qevdevkeyboardplugin.pri: -../../../../mkspecs/modules/qt_plugin_qevdevkeyboardplugin.pri: -../../../../mkspecs/modules-inst/qt_plugin_qevdevmouseplugin.pri: -../../../../mkspecs/modules/qt_plugin_qevdevmouseplugin.pri: -../../../../mkspecs/modules-inst/qt_plugin_qevdevtabletplugin.pri: -../../../../mkspecs/modules/qt_plugin_qevdevtabletplugin.pri: -../../../../mkspecs/modules-inst/qt_plugin_qevdevtouchplugin.pri: -../../../../mkspecs/modules/qt_plugin_qevdevtouchplugin.pri: -../../../../mkspecs/modules-inst/qt_plugin_qgenericbearer.pri: -../../../../mkspecs/modules/qt_plugin_qgenericbearer.pri: -../../../../mkspecs/modules-inst/qt_plugin_qgtk2.pri: -../../../../mkspecs/modules/qt_plugin_qgtk2.pri: -../../../../mkspecs/modules-inst/qt_plugin_qico.pri: -../../../../mkspecs/modules/qt_plugin_qico.pri: -../../../../mkspecs/modules-inst/qt_plugin_qlinuxfb.pri: -../../../../mkspecs/modules/qt_plugin_qlinuxfb.pri: -../../../../mkspecs/modules-inst/qt_plugin_qminimal.pri: -../../../../mkspecs/modules/qt_plugin_qminimal.pri: -../../../../mkspecs/modules-inst/qt_plugin_qnmbearer.pri: -../../../../mkspecs/modules/qt_plugin_qnmbearer.pri: -../../../../mkspecs/modules-inst/qt_plugin_qoffscreen.pri: -../../../../mkspecs/modules/qt_plugin_qoffscreen.pri: -../../../../mkspecs/modules-inst/qt_plugin_qsqlite.pri: -../../../../mkspecs/modules/qt_plugin_qsqlite.pri: -../../../../mkspecs/modules-inst/qt_plugin_qtuiotouchplugin.pri: -../../../../mkspecs/modules/qt_plugin_qtuiotouchplugin.pri: -../../../../mkspecs/modules-inst/qt_plugin_qxcb.pri: -../../../../mkspecs/modules/qt_plugin_qxcb.pri: -../../../../mkspecs/modules/qt_tool_moc.pri: -../../../../mkspecs/modules/qt_tool_qdbuscpp2xml.pri: -../../../../mkspecs/modules/qt_tool_qdbusxml2cpp.pri: -../../../../mkspecs/modules/qt_tool_qdoc.pri: -../../../../mkspecs/modules/qt_tool_qlalr.pri: -../../../../mkspecs/modules/qt_tool_rcc.pri: -../../../../mkspecs/modules/qt_tool_syncqt.pri: -../../../../mkspecs/modules/qt_tool_uic.pri: -../../../../mkspecs/features/qt_functions.prf: -../../../../mkspecs/features/qt_config.prf: -../../../../mkspecs/linux-g++/qmake.conf: -../../../../mkspecs/features/spec_post.prf: -../../../../mkspecs/qmodule.pri: -../../../../mkspecs/features/qt_build_config.prf: -../../../../.qmake.conf: -../../../../.qmake.cache: -../../../../mkspecs/features/exclusive_builds.prf: -../../../../mkspecs/features/default_pre.prf: -../../../../mkspecs/features/qt_build_paths.prf: -../../../../mkspecs/modules-inst/qt_plugin_fcitxplatforminputcontextplugin.pri: -../../../../mkspecs/modules/qt_plugin_fcitxplatforminputcontextplugin.pri: -../../../../mkspecs/features/qt_targets.prf: -../../../../mkspecs/features/qt_common.prf: -../../../../mkspecs/features/qt_plugin.prf: -../../../../mkspecs/features/resolve_config.prf: -../../../../mkspecs/features/default_post.prf: -../../../../mkspecs/features/unix/bsymbolic_functions.prf: -../../../../mkspecs/features/unix/hide_symbols.prf: -../../../../mkspecs/features/c++11.prf: -../../../../mkspecs/features/cmake_functions.prf: -../../../../mkspecs/features/create_cmake.prf: -../../../../mkspecs/features/qt_example_installs.prf: -../../../../mkspecs/features/exceptions_off.prf: -../../../../mkspecs/features/qt_docs_targets.prf: -../../../../mkspecs/features/precompile_header.prf: -../../../../mkspecs/features/unix/largefile.prf: -../../../../mkspecs/features/warn_on.prf: -../../../../mkspecs/features/qt.prf: -../../../../mkspecs/features/resources.prf: -../../../../mkspecs/features/moc.prf: -../../../../mkspecs/features/dbuscommon.pri: -../../../../mkspecs/features/dbusinterfaces.prf: -../../../../mkspecs/features/dbusadaptors.prf: -../../../../mkspecs/features/unix/thread.prf: -../../../../mkspecs/features/testcase_targets.prf: -../../../../mkspecs/features/yacc.prf: -../../../../mkspecs/features/lex.prf: -fcitx.pro: -../../../../mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in: -/home/antanubis/TBuild/Libraries/QtStatic/qtbase/lib/libQt5Gui.prl: -/home/antanubis/TBuild/Libraries/QtStatic/qtbase/lib/libQt5DBus.prl: -/home/antanubis/TBuild/Libraries/QtStatic/qtbase/lib/libQt5Core.prl: -qmake: FORCE - @$(QMAKE) -o Makefile fcitx.pro - -qmake_all: FORCE - - -all: Makefile \ - ../../../../plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.prl ../../../../plugins/platforminputcontexts/$(TARGET) - -dist: distdir FORCE - (cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR) - -distdir: FORCE - @test -d $(DISTDIR) || mkdir -p $(DISTDIR) - $(COPY_FILE) --parents $(DIST) $(DISTDIR)/ - $(COPY_FILE) --parents fcitxqtconnection.h fcitxqtconnection_p.h fcitxqtdbusaddons_export.h fcitxqtdbusaddons_version.h fcitxqtformattedpreedit.h fcitxqtinputcontextproxy.h fcitxqtinputmethoditem.h fcitxqtinputmethodproxy.h fcitxqtkeyboardlayout.h fcitxqtkeyboardproxy.h keydata.h keyserver_x11.h keyuni.h main.h qfcitxplatforminputcontext.h utils.h $(DISTDIR)/ - $(COPY_FILE) --parents fcitxqtconnection.cpp fcitxqtformattedpreedit.cpp fcitxqtinputcontextproxy.cpp fcitxqtinputmethoditem.cpp fcitxqtinputmethodproxy.cpp fcitxqtkeyboardlayout.cpp fcitxqtkeyboardproxy.cpp keyuni.cpp main.cpp qfcitxplatforminputcontext.cpp utils.cpp $(DISTDIR)/ - - -clean: compiler_clean - -$(DEL_FILE) $(OBJECTS) - -$(DEL_FILE) *~ core *.core - - -distclean: clean - -$(DEL_FILE) ../../../../plugins/platforminputcontexts/$(TARGET) - -$(DEL_FILE) /home/antanubis/TBuild/Libraries/QtStatic/qtbase/lib/cmake/Qt5Gui/Qt5Gui_QFcitxPlatformInputContextPlugin.cmake ../../../../plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.prl - -$(DEL_FILE) Makefile - - -####### Sub-libraries - -html_docs: - $(MAKE) -f $(MAKEFILE) prepare_docs && $(MAKE) -f $(MAKEFILE) generate_docs - -docs: - $(MAKE) -f $(MAKEFILE) html_docs && $(MAKE) -f $(MAKEFILE) qch_docs - -install_html_docs: - -uninstall_html_docs: - -install_qch_docs: - -uninstall_qch_docs: - -install_docs: - -uninstall_docs: - -qch_docs: - -prepare_docs: - -generate_docs: - -mocclean: compiler_moc_header_clean compiler_moc_source_clean - -mocables: compiler_moc_header_make_all compiler_moc_source_make_all - -check: first - -compiler_no_pch_compiler_make_all: -compiler_no_pch_compiler_clean: -compiler_rcc_make_all: -compiler_rcc_clean: -compiler_moc_header_make_all: .moc/moc_fcitxqtconnection.cpp .moc/moc_fcitxqtconnection_p.cpp .moc/moc_fcitxqtinputcontextproxy.cpp .moc/moc_fcitxqtinputmethodproxy.cpp .moc/moc_fcitxqtkeyboardproxy.cpp .moc/moc_main.cpp .moc/moc_qfcitxplatforminputcontext.cpp -compiler_moc_header_clean: - -$(DEL_FILE) .moc/moc_fcitxqtconnection.cpp .moc/moc_fcitxqtconnection_p.cpp .moc/moc_fcitxqtinputcontextproxy.cpp .moc/moc_fcitxqtinputmethodproxy.cpp .moc/moc_fcitxqtkeyboardproxy.cpp .moc/moc_main.cpp .moc/moc_qfcitxplatforminputcontext.cpp -.moc/moc_fcitxqtconnection.cpp: fcitxqtdbusaddons_export.h \ - ../../../../include/QtCore/QObject \ - ../../../../include/QtCore/qobject.h \ - ../../../corelib/kernel/qobject.h \ - ../../../../include/QtCore/qobjectdefs.h \ - ../../../corelib/kernel/qobjectdefs.h \ - ../../../../include/QtCore/qnamespace.h \ - ../../../corelib/global/qnamespace.h \ - ../../../../include/QtCore/qglobal.h \ - ../../../corelib/global/qglobal.h \ - ../../../../include/QtCore/qconfig.h \ - ../../../corelib/global/qconfig.h \ - ../../../../include/QtCore/qfeatures.h \ - ../../../corelib/global/qfeatures.h \ - ../../../../include/QtCore/qsystemdetection.h \ - ../../../corelib/global/qsystemdetection.h \ - ../../../../include/QtCore/qprocessordetection.h \ - ../../../corelib/global/qprocessordetection.h \ - ../../../../include/QtCore/qcompilerdetection.h \ - ../../../corelib/global/qcompilerdetection.h \ - ../../../../include/QtCore/qtypeinfo.h \ - ../../../corelib/global/qtypeinfo.h \ - ../../../../include/QtCore/qtypetraits.h \ - ../../../corelib/global/qtypetraits.h \ - ../../../../include/QtCore/qsysinfo.h \ - ../../../corelib/global/qsysinfo.h \ - ../../../../include/QtCore/qlogging.h \ - ../../../corelib/global/qlogging.h \ - ../../../../include/QtCore/qflags.h \ - ../../../corelib/global/qflags.h \ - ../../../../include/QtCore/qatomic.h \ - ../../../corelib/thread/qatomic.h \ - ../../../../include/QtCore/qbasicatomic.h \ - ../../../corelib/thread/qbasicatomic.h \ - ../../../../include/QtCore/qatomic_bootstrap.h \ - ../../../corelib/arch/qatomic_bootstrap.h \ - ../../../../include/QtCore/qgenericatomic.h \ - ../../../corelib/thread/qgenericatomic.h \ - ../../../../include/QtCore/qatomic_cxx11.h \ - ../../../corelib/arch/qatomic_cxx11.h \ - ../../../../include/QtCore/qatomic_gcc.h \ - ../../../corelib/arch/qatomic_gcc.h \ - ../../../../include/QtCore/qatomic_msvc.h \ - ../../../corelib/arch/qatomic_msvc.h \ - ../../../../include/QtCore/qatomic_armv7.h \ - ../../../corelib/arch/qatomic_armv7.h \ - ../../../../include/QtCore/qatomic_armv6.h \ - ../../../corelib/arch/qatomic_armv6.h \ - ../../../../include/QtCore/qatomic_armv5.h \ - ../../../corelib/arch/qatomic_armv5.h \ - ../../../../include/QtCore/qatomic_ia64.h \ - ../../../corelib/arch/qatomic_ia64.h \ - ../../../../include/QtCore/qatomic_mips.h \ - ../../../corelib/arch/qatomic_mips.h \ - ../../../../include/QtCore/qatomic_x86.h \ - ../../../corelib/arch/qatomic_x86.h \ - ../../../../include/QtCore/qatomic_unix.h \ - ../../../corelib/arch/qatomic_unix.h \ - ../../../../include/QtCore/qglobalstatic.h \ - ../../../corelib/global/qglobalstatic.h \ - ../../../../include/QtCore/qmutex.h \ - ../../../corelib/thread/qmutex.h \ - ../../../../include/QtCore/qnumeric.h \ - ../../../corelib/global/qnumeric.h \ - ../../../../include/QtCore/qobjectdefs_impl.h \ - ../../../corelib/kernel/qobjectdefs_impl.h \ - ../../../../include/QtCore/qstring.h \ - ../../../corelib/tools/qstring.h \ - ../../../../include/QtCore/qchar.h \ - ../../../corelib/tools/qchar.h \ - ../../../../include/QtCore/qbytearray.h \ - ../../../corelib/tools/qbytearray.h \ - ../../../../include/QtCore/qrefcount.h \ - ../../../corelib/tools/qrefcount.h \ - ../../../../include/QtCore/qarraydata.h \ - ../../../corelib/tools/qarraydata.h \ - ../../../../include/QtCore/qstringbuilder.h \ - ../../../corelib/tools/qstringbuilder.h \ - ../../../../include/QtCore/qlist.h \ - ../../../corelib/tools/qlist.h \ - ../../../../include/QtCore/qalgorithms.h \ - ../../../corelib/tools/qalgorithms.h \ - ../../../../include/QtCore/qiterator.h \ - ../../../corelib/tools/qiterator.h \ - ../../../../include/QtCore/qbytearraylist.h \ - ../../../corelib/tools/qbytearraylist.h \ - ../../../../include/QtCore/qstringlist.h \ - ../../../corelib/tools/qstringlist.h \ - ../../../../include/QtCore/qregexp.h \ - ../../../corelib/tools/qregexp.h \ - ../../../../include/QtCore/qstringmatcher.h \ - ../../../corelib/tools/qstringmatcher.h \ - ../../../../include/QtCore/qcoreevent.h \ - ../../../corelib/kernel/qcoreevent.h \ - ../../../../include/QtCore/qscopedpointer.h \ - ../../../corelib/tools/qscopedpointer.h \ - ../../../../include/QtCore/qmetatype.h \ - ../../../corelib/kernel/qmetatype.h \ - ../../../../include/QtCore/qvarlengtharray.h \ - ../../../corelib/tools/qvarlengtharray.h \ - ../../../../include/QtCore/qcontainerfwd.h \ - ../../../corelib/tools/qcontainerfwd.h \ - ../../../../include/QtCore/qisenum.h \ - ../../../corelib/global/qisenum.h \ - ../../../../include/QtCore/qobject_impl.h \ - ../../../corelib/kernel/qobject_impl.h \ - fcitxqtconnection.h - /home/antanubis/TBuild/Libraries/QtStatic/qtbase/bin/moc $(DEFINES) -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/mkspecs/linux-g++ -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/src/plugins/platforminputcontexts/fcitx -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0 -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtDBus -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtCore -I/usr/include/c++/4.8 -I/usr/include/x86_64-linux-gnu/c++/4.8 -I/usr/include/c++/4.8/backward -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include fcitxqtconnection.h -o .moc/moc_fcitxqtconnection.cpp - -.moc/moc_fcitxqtconnection_p.cpp: fcitxqtconnection.h \ - fcitxqtdbusaddons_export.h \ - ../../../../include/QtCore/QObject \ - ../../../../include/QtCore/qobject.h \ - ../../../corelib/kernel/qobject.h \ - ../../../../include/QtCore/qobjectdefs.h \ - ../../../corelib/kernel/qobjectdefs.h \ - ../../../../include/QtCore/qnamespace.h \ - ../../../corelib/global/qnamespace.h \ - ../../../../include/QtCore/qglobal.h \ - ../../../corelib/global/qglobal.h \ - ../../../../include/QtCore/qconfig.h \ - ../../../corelib/global/qconfig.h \ - ../../../../include/QtCore/qfeatures.h \ - ../../../corelib/global/qfeatures.h \ - ../../../../include/QtCore/qsystemdetection.h \ - ../../../corelib/global/qsystemdetection.h \ - ../../../../include/QtCore/qprocessordetection.h \ - ../../../corelib/global/qprocessordetection.h \ - ../../../../include/QtCore/qcompilerdetection.h \ - ../../../corelib/global/qcompilerdetection.h \ - ../../../../include/QtCore/qtypeinfo.h \ - ../../../corelib/global/qtypeinfo.h \ - ../../../../include/QtCore/qtypetraits.h \ - ../../../corelib/global/qtypetraits.h \ - ../../../../include/QtCore/qsysinfo.h \ - ../../../corelib/global/qsysinfo.h \ - ../../../../include/QtCore/qlogging.h \ - ../../../corelib/global/qlogging.h \ - ../../../../include/QtCore/qflags.h \ - ../../../corelib/global/qflags.h \ - ../../../../include/QtCore/qatomic.h \ - ../../../corelib/thread/qatomic.h \ - ../../../../include/QtCore/qbasicatomic.h \ - ../../../corelib/thread/qbasicatomic.h \ - ../../../../include/QtCore/qatomic_bootstrap.h \ - ../../../corelib/arch/qatomic_bootstrap.h \ - ../../../../include/QtCore/qgenericatomic.h \ - ../../../corelib/thread/qgenericatomic.h \ - ../../../../include/QtCore/qatomic_cxx11.h \ - ../../../corelib/arch/qatomic_cxx11.h \ - ../../../../include/QtCore/qatomic_gcc.h \ - ../../../corelib/arch/qatomic_gcc.h \ - ../../../../include/QtCore/qatomic_msvc.h \ - ../../../corelib/arch/qatomic_msvc.h \ - ../../../../include/QtCore/qatomic_armv7.h \ - ../../../corelib/arch/qatomic_armv7.h \ - ../../../../include/QtCore/qatomic_armv6.h \ - ../../../corelib/arch/qatomic_armv6.h \ - ../../../../include/QtCore/qatomic_armv5.h \ - ../../../corelib/arch/qatomic_armv5.h \ - ../../../../include/QtCore/qatomic_ia64.h \ - ../../../corelib/arch/qatomic_ia64.h \ - ../../../../include/QtCore/qatomic_mips.h \ - ../../../corelib/arch/qatomic_mips.h \ - ../../../../include/QtCore/qatomic_x86.h \ - ../../../corelib/arch/qatomic_x86.h \ - ../../../../include/QtCore/qatomic_unix.h \ - ../../../corelib/arch/qatomic_unix.h \ - ../../../../include/QtCore/qglobalstatic.h \ - ../../../corelib/global/qglobalstatic.h \ - ../../../../include/QtCore/qmutex.h \ - ../../../corelib/thread/qmutex.h \ - ../../../../include/QtCore/qnumeric.h \ - ../../../corelib/global/qnumeric.h \ - ../../../../include/QtCore/qobjectdefs_impl.h \ - ../../../corelib/kernel/qobjectdefs_impl.h \ - ../../../../include/QtCore/qstring.h \ - ../../../corelib/tools/qstring.h \ - ../../../../include/QtCore/qchar.h \ - ../../../corelib/tools/qchar.h \ - ../../../../include/QtCore/qbytearray.h \ - ../../../corelib/tools/qbytearray.h \ - ../../../../include/QtCore/qrefcount.h \ - ../../../corelib/tools/qrefcount.h \ - ../../../../include/QtCore/qarraydata.h \ - ../../../corelib/tools/qarraydata.h \ - ../../../../include/QtCore/qstringbuilder.h \ - ../../../corelib/tools/qstringbuilder.h \ - ../../../../include/QtCore/qlist.h \ - ../../../corelib/tools/qlist.h \ - ../../../../include/QtCore/qalgorithms.h \ - ../../../corelib/tools/qalgorithms.h \ - ../../../../include/QtCore/qiterator.h \ - ../../../corelib/tools/qiterator.h \ - ../../../../include/QtCore/qbytearraylist.h \ - ../../../corelib/tools/qbytearraylist.h \ - ../../../../include/QtCore/qstringlist.h \ - ../../../corelib/tools/qstringlist.h \ - ../../../../include/QtCore/qregexp.h \ - ../../../corelib/tools/qregexp.h \ - ../../../../include/QtCore/qstringmatcher.h \ - ../../../corelib/tools/qstringmatcher.h \ - ../../../../include/QtCore/qcoreevent.h \ - ../../../corelib/kernel/qcoreevent.h \ - ../../../../include/QtCore/qscopedpointer.h \ - ../../../corelib/tools/qscopedpointer.h \ - ../../../../include/QtCore/qmetatype.h \ - ../../../corelib/kernel/qmetatype.h \ - ../../../../include/QtCore/qvarlengtharray.h \ - ../../../corelib/tools/qvarlengtharray.h \ - ../../../../include/QtCore/qcontainerfwd.h \ - ../../../corelib/tools/qcontainerfwd.h \ - ../../../../include/QtCore/qisenum.h \ - ../../../corelib/global/qisenum.h \ - ../../../../include/QtCore/qobject_impl.h \ - ../../../corelib/kernel/qobject_impl.h \ - ../../../../include/QtCore/QWeakPointer \ - ../../../../include/QtCore/qsharedpointer.h \ - ../../../corelib/tools/qsharedpointer.h \ - ../../../../include/QtCore/qshareddata.h \ - ../../../corelib/tools/qshareddata.h \ - ../../../../include/QtCore/qhash.h \ - ../../../corelib/tools/qhash.h \ - ../../../../include/QtCore/qpair.h \ - ../../../corelib/tools/qpair.h \ - ../../../../include/QtCore/qsharedpointer_impl.h \ - ../../../corelib/tools/qsharedpointer_impl.h \ - ../../../../include/QtCore/QFileSystemWatcher \ - ../../../../include/QtCore/qfilesystemwatcher.h \ - ../../../corelib/io/qfilesystemwatcher.h \ - fcitxqtconnection_p.h - /home/antanubis/TBuild/Libraries/QtStatic/qtbase/bin/moc $(DEFINES) -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/mkspecs/linux-g++ -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/src/plugins/platforminputcontexts/fcitx -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0 -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtDBus -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtCore -I/usr/include/c++/4.8 -I/usr/include/x86_64-linux-gnu/c++/4.8 -I/usr/include/c++/4.8/backward -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include fcitxqtconnection_p.h -o .moc/moc_fcitxqtconnection_p.cpp - -.moc/moc_fcitxqtinputcontextproxy.cpp: ../../../../include/QtCore/QObject \ - ../../../../include/QtCore/qobject.h \ - ../../../corelib/kernel/qobject.h \ - ../../../../include/QtCore/qobjectdefs.h \ - ../../../corelib/kernel/qobjectdefs.h \ - ../../../../include/QtCore/qnamespace.h \ - ../../../corelib/global/qnamespace.h \ - ../../../../include/QtCore/qglobal.h \ - ../../../corelib/global/qglobal.h \ - ../../../../include/QtCore/qconfig.h \ - ../../../corelib/global/qconfig.h \ - ../../../../include/QtCore/qfeatures.h \ - ../../../corelib/global/qfeatures.h \ - ../../../../include/QtCore/qsystemdetection.h \ - ../../../corelib/global/qsystemdetection.h \ - ../../../../include/QtCore/qprocessordetection.h \ - ../../../corelib/global/qprocessordetection.h \ - ../../../../include/QtCore/qcompilerdetection.h \ - ../../../corelib/global/qcompilerdetection.h \ - ../../../../include/QtCore/qtypeinfo.h \ - ../../../corelib/global/qtypeinfo.h \ - ../../../../include/QtCore/qtypetraits.h \ - ../../../corelib/global/qtypetraits.h \ - ../../../../include/QtCore/qsysinfo.h \ - ../../../corelib/global/qsysinfo.h \ - ../../../../include/QtCore/qlogging.h \ - ../../../corelib/global/qlogging.h \ - ../../../../include/QtCore/qflags.h \ - ../../../corelib/global/qflags.h \ - ../../../../include/QtCore/qatomic.h \ - ../../../corelib/thread/qatomic.h \ - ../../../../include/QtCore/qbasicatomic.h \ - ../../../corelib/thread/qbasicatomic.h \ - ../../../../include/QtCore/qatomic_bootstrap.h \ - ../../../corelib/arch/qatomic_bootstrap.h \ - ../../../../include/QtCore/qgenericatomic.h \ - ../../../corelib/thread/qgenericatomic.h \ - ../../../../include/QtCore/qatomic_cxx11.h \ - ../../../corelib/arch/qatomic_cxx11.h \ - ../../../../include/QtCore/qatomic_gcc.h \ - ../../../corelib/arch/qatomic_gcc.h \ - ../../../../include/QtCore/qatomic_msvc.h \ - ../../../corelib/arch/qatomic_msvc.h \ - ../../../../include/QtCore/qatomic_armv7.h \ - ../../../corelib/arch/qatomic_armv7.h \ - ../../../../include/QtCore/qatomic_armv6.h \ - ../../../corelib/arch/qatomic_armv6.h \ - ../../../../include/QtCore/qatomic_armv5.h \ - ../../../corelib/arch/qatomic_armv5.h \ - ../../../../include/QtCore/qatomic_ia64.h \ - ../../../corelib/arch/qatomic_ia64.h \ - ../../../../include/QtCore/qatomic_mips.h \ - ../../../corelib/arch/qatomic_mips.h \ - ../../../../include/QtCore/qatomic_x86.h \ - ../../../corelib/arch/qatomic_x86.h \ - ../../../../include/QtCore/qatomic_unix.h \ - ../../../corelib/arch/qatomic_unix.h \ - ../../../../include/QtCore/qglobalstatic.h \ - ../../../corelib/global/qglobalstatic.h \ - ../../../../include/QtCore/qmutex.h \ - ../../../corelib/thread/qmutex.h \ - ../../../../include/QtCore/qnumeric.h \ - ../../../corelib/global/qnumeric.h \ - ../../../../include/QtCore/qobjectdefs_impl.h \ - ../../../corelib/kernel/qobjectdefs_impl.h \ - ../../../../include/QtCore/qstring.h \ - ../../../corelib/tools/qstring.h \ - ../../../../include/QtCore/qchar.h \ - ../../../corelib/tools/qchar.h \ - ../../../../include/QtCore/qbytearray.h \ - ../../../corelib/tools/qbytearray.h \ - ../../../../include/QtCore/qrefcount.h \ - ../../../corelib/tools/qrefcount.h \ - ../../../../include/QtCore/qarraydata.h \ - ../../../corelib/tools/qarraydata.h \ - ../../../../include/QtCore/qstringbuilder.h \ - ../../../corelib/tools/qstringbuilder.h \ - ../../../../include/QtCore/qlist.h \ - ../../../corelib/tools/qlist.h \ - ../../../../include/QtCore/qalgorithms.h \ - ../../../corelib/tools/qalgorithms.h \ - ../../../../include/QtCore/qiterator.h \ - ../../../corelib/tools/qiterator.h \ - ../../../../include/QtCore/qbytearraylist.h \ - ../../../corelib/tools/qbytearraylist.h \ - ../../../../include/QtCore/qstringlist.h \ - ../../../corelib/tools/qstringlist.h \ - ../../../../include/QtCore/qregexp.h \ - ../../../corelib/tools/qregexp.h \ - ../../../../include/QtCore/qstringmatcher.h \ - ../../../corelib/tools/qstringmatcher.h \ - ../../../../include/QtCore/qcoreevent.h \ - ../../../corelib/kernel/qcoreevent.h \ - ../../../../include/QtCore/qscopedpointer.h \ - ../../../corelib/tools/qscopedpointer.h \ - ../../../../include/QtCore/qmetatype.h \ - ../../../corelib/kernel/qmetatype.h \ - ../../../../include/QtCore/qvarlengtharray.h \ - ../../../corelib/tools/qvarlengtharray.h \ - ../../../../include/QtCore/qcontainerfwd.h \ - ../../../corelib/tools/qcontainerfwd.h \ - ../../../../include/QtCore/qisenum.h \ - ../../../corelib/global/qisenum.h \ - ../../../../include/QtCore/qobject_impl.h \ - ../../../corelib/kernel/qobject_impl.h \ - ../../../../include/QtCore/QByteArray \ - ../../../../include/QtCore/QList \ - ../../../../include/QtCore/QMap \ - ../../../../include/QtCore/qmap.h \ - ../../../corelib/tools/qmap.h \ - ../../../../include/QtCore/qpair.h \ - ../../../corelib/tools/qpair.h \ - ../../../../include/QtCore/qdebug.h \ - ../../../corelib/io/qdebug.h \ - ../../../../include/QtCore/qhash.h \ - ../../../corelib/tools/qhash.h \ - ../../../../include/QtCore/qtextstream.h \ - ../../../corelib/io/qtextstream.h \ - ../../../../include/QtCore/qiodevice.h \ - ../../../corelib/io/qiodevice.h \ - ../../../../include/QtCore/qlocale.h \ - ../../../corelib/tools/qlocale.h \ - ../../../../include/QtCore/qvariant.h \ - ../../../corelib/kernel/qvariant.h \ - ../../../../include/QtCore/qshareddata.h \ - ../../../corelib/tools/qshareddata.h \ - ../../../../include/QtCore/qvector.h \ - ../../../corelib/tools/qvector.h \ - ../../../../include/QtCore/qpoint.h \ - ../../../corelib/tools/qpoint.h \ - ../../../../include/QtCore/qset.h \ - ../../../corelib/tools/qset.h \ - ../../../../include/QtCore/qcontiguouscache.h \ - ../../../corelib/tools/qcontiguouscache.h \ - ../../../../include/QtCore/QString \ - ../../../../include/QtCore/QStringList \ - ../../../../include/QtCore/QVariant \ - ../../../../include/QtDBus/QtDBus \ - ../../../../include/QtDBus/QtDBusDepends \ - ../../../../include/QtCore/QtCore \ - ../../../../include/QtCore/QtCoreDepends \ - ../../../../include/QtCore/qabstractanimation.h \ - ../../../corelib/animation/qabstractanimation.h \ - ../../../../include/QtCore/qanimationgroup.h \ - ../../../corelib/animation/qanimationgroup.h \ - ../../../../include/QtCore/qparallelanimationgroup.h \ - ../../../corelib/animation/qparallelanimationgroup.h \ - ../../../../include/QtCore/qpauseanimation.h \ - ../../../corelib/animation/qpauseanimation.h \ - ../../../../include/QtCore/qpropertyanimation.h \ - ../../../corelib/animation/qpropertyanimation.h \ - ../../../../include/QtCore/qvariantanimation.h \ - ../../../corelib/animation/qvariantanimation.h \ - ../../../../include/QtCore/qeasingcurve.h \ - ../../../corelib/tools/qeasingcurve.h \ - ../../../../include/QtCore/qsequentialanimationgroup.h \ - ../../../corelib/animation/qsequentialanimationgroup.h \ - ../../../../include/QtCore/qtextcodec.h \ - ../../../corelib/codecs/qtextcodec.h \ - ../../../../include/QtCore/qendian.h \ - ../../../corelib/global/qendian.h \ - ../../../../include/QtCore/qlibraryinfo.h \ - ../../../corelib/global/qlibraryinfo.h \ - ../../../../include/QtCore/qdatetime.h \ - ../../../corelib/tools/qdatetime.h \ - ../../../../include/QtCore/qbuffer.h \ - ../../../corelib/io/qbuffer.h \ - ../../../../include/QtCore/qdatastream.h \ - ../../../corelib/io/qdatastream.h \ - ../../../../include/QtCore/qdir.h \ - ../../../corelib/io/qdir.h \ - ../../../../include/QtCore/qfileinfo.h \ - ../../../corelib/io/qfileinfo.h \ - ../../../../include/QtCore/qfile.h \ - ../../../corelib/io/qfile.h \ - ../../../../include/QtCore/qfiledevice.h \ - ../../../corelib/io/qfiledevice.h \ - ../../../../include/QtCore/qdiriterator.h \ - ../../../corelib/io/qdiriterator.h \ - ../../../../include/QtCore/qfileselector.h \ - ../../../corelib/io/qfileselector.h \ - ../../../../include/QtCore/qfilesystemwatcher.h \ - ../../../corelib/io/qfilesystemwatcher.h \ - ../../../../include/QtCore/qlockfile.h \ - ../../../corelib/io/qlockfile.h \ - ../../../../include/QtCore/qloggingcategory.h \ - ../../../corelib/io/qloggingcategory.h \ - ../../../../include/QtCore/qprocess.h \ - ../../../corelib/io/qprocess.h \ - ../../../../include/QtCore/qresource.h \ - ../../../corelib/io/qresource.h \ - ../../../../include/QtCore/qsavefile.h \ - ../../../corelib/io/qsavefile.h \ - ../../../../include/QtCore/qsettings.h \ - ../../../corelib/io/qsettings.h \ - ../../../../include/QtCore/qstandardpaths.h \ - ../../../corelib/io/qstandardpaths.h \ - ../../../../include/QtCore/qstorageinfo.h \ - ../../../corelib/io/qstorageinfo.h \ - ../../../../include/QtCore/qtemporarydir.h \ - ../../../corelib/io/qtemporarydir.h \ - ../../../../include/QtCore/QScopedPointer \ - ../../../../include/QtCore/qtemporaryfile.h \ - ../../../corelib/io/qtemporaryfile.h \ - ../../../../include/QtCore/qurl.h \ - ../../../corelib/io/qurl.h \ - ../../../../include/QtCore/qurlquery.h \ - ../../../corelib/io/qurlquery.h \ - ../../../../include/QtCore/qabstractitemmodel.h \ - ../../../corelib/itemmodels/qabstractitemmodel.h \ - ../../../../include/QtCore/qabstractproxymodel.h \ - ../../../corelib/itemmodels/qabstractproxymodel.h \ - ../../../../include/QtCore/qidentityproxymodel.h \ - ../../../corelib/itemmodels/qidentityproxymodel.h \ - ../../../../include/QtCore/qitemselectionmodel.h \ - ../../../corelib/itemmodels/qitemselectionmodel.h \ - ../../../../include/QtCore/qsortfilterproxymodel.h \ - ../../../corelib/itemmodels/qsortfilterproxymodel.h \ - ../../../../include/QtCore/qstringlistmodel.h \ - ../../../corelib/itemmodels/qstringlistmodel.h \ - ../../../../include/QtCore/qjsonarray.h \ - ../../../corelib/json/qjsonarray.h \ - ../../../../include/QtCore/qjsonvalue.h \ - ../../../corelib/json/qjsonvalue.h \ - ../../../../include/QtCore/qjsondocument.h \ - ../../../corelib/json/qjsondocument.h \ - ../../../../include/QtCore/qjsonobject.h \ - ../../../corelib/json/qjsonobject.h \ - ../../../../include/QtCore/qabstracteventdispatcher.h \ - ../../../corelib/kernel/qabstracteventdispatcher.h \ - ../../../../include/QtCore/qeventloop.h \ - ../../../corelib/kernel/qeventloop.h \ - ../../../../include/QtCore/qabstractnativeeventfilter.h \ - ../../../corelib/kernel/qabstractnativeeventfilter.h \ - ../../../../include/QtCore/qbasictimer.h \ - ../../../corelib/kernel/qbasictimer.h \ - ../../../../include/QtCore/qcoreapplication.h \ - ../../../corelib/kernel/qcoreapplication.h \ - ../../../../include/QtCore/qmath.h \ - ../../../corelib/kernel/qmath.h \ - ../../../../include/QtCore/qmetaobject.h \ - ../../../corelib/kernel/qmetaobject.h \ - ../../../../include/QtCore/qmimedata.h \ - ../../../corelib/kernel/qmimedata.h \ - ../../../../include/QtCore/qobjectcleanuphandler.h \ - ../../../corelib/kernel/qobjectcleanuphandler.h \ - ../../../../include/QtCore/qpointer.h \ - ../../../corelib/kernel/qpointer.h \ - ../../../../include/QtCore/qsharedpointer.h \ - ../../../corelib/tools/qsharedpointer.h \ - ../../../../include/QtCore/qsharedpointer_impl.h \ - ../../../corelib/tools/qsharedpointer_impl.h \ - ../../../../include/QtCore/qsharedmemory.h \ - ../../../corelib/kernel/qsharedmemory.h \ - ../../../../include/QtCore/qsignalmapper.h \ - ../../../corelib/kernel/qsignalmapper.h \ - ../../../../include/QtCore/qsocketnotifier.h \ - ../../../corelib/kernel/qsocketnotifier.h \ - ../../../../include/QtCore/qsystemsemaphore.h \ - ../../../corelib/kernel/qsystemsemaphore.h \ - ../../../../include/QtCore/qtimer.h \ - ../../../corelib/kernel/qtimer.h \ - ../../../../include/QtCore/qtranslator.h \ - ../../../corelib/kernel/qtranslator.h \ - ../../../../include/QtCore/qwineventnotifier.h \ - ../../../corelib/kernel/qwineventnotifier.h \ - ../../../../include/QtCore/qmimedatabase.h \ - ../../../corelib/mimetypes/qmimedatabase.h \ - ../../../../include/QtCore/qmimetype.h \ - ../../../corelib/mimetypes/qmimetype.h \ - ../../../../include/QtCore/qfactoryinterface.h \ - ../../../corelib/plugin/qfactoryinterface.h \ - ../../../../include/QtCore/qlibrary.h \ - ../../../corelib/plugin/qlibrary.h \ - ../../../../include/QtCore/qplugin.h \ - ../../../corelib/plugin/qplugin.h \ - ../../../../include/QtCore/qpluginloader.h \ - ../../../corelib/plugin/qpluginloader.h \ - ../../../../include/QtCore/quuid.h \ - ../../../corelib/plugin/quuid.h \ - ../../../../include/QtCore/qabstractstate.h \ - ../../../corelib/statemachine/qabstractstate.h \ - ../../../../include/QtCore/qabstracttransition.h \ - ../../../corelib/statemachine/qabstracttransition.h \ - ../../../../include/QtCore/qeventtransition.h \ - ../../../corelib/statemachine/qeventtransition.h \ - ../../../../include/QtCore/qfinalstate.h \ - ../../../corelib/statemachine/qfinalstate.h \ - ../../../../include/QtCore/qhistorystate.h \ - ../../../corelib/statemachine/qhistorystate.h \ - ../../../../include/QtCore/qsignaltransition.h \ - ../../../corelib/statemachine/qsignaltransition.h \ - ../../../../include/QtCore/qstate.h \ - ../../../corelib/statemachine/qstate.h \ - ../../../../include/QtCore/qstatemachine.h \ - ../../../corelib/statemachine/qstatemachine.h \ - ../../../../include/QtCore/qexception.h \ - ../../../corelib/thread/qexception.h \ - ../../../../include/QtCore/qfuture.h \ - ../../../corelib/thread/qfuture.h \ - ../../../../include/QtCore/qfutureinterface.h \ - ../../../corelib/thread/qfutureinterface.h \ - ../../../../include/QtCore/qrunnable.h \ - ../../../corelib/thread/qrunnable.h \ - ../../../../include/QtCore/qresultstore.h \ - ../../../corelib/thread/qresultstore.h \ - ../../../../include/QtCore/qfuturesynchronizer.h \ - ../../../corelib/thread/qfuturesynchronizer.h \ - ../../../../include/QtCore/qfuturewatcher.h \ - ../../../corelib/thread/qfuturewatcher.h \ - ../../../../include/QtCore/qreadwritelock.h \ - ../../../corelib/thread/qreadwritelock.h \ - ../../../../include/QtCore/qsemaphore.h \ - ../../../corelib/thread/qsemaphore.h \ - ../../../../include/QtCore/qthread.h \ - ../../../corelib/thread/qthread.h \ - ../../../../include/QtCore/qthreadpool.h \ - ../../../corelib/thread/qthreadpool.h \ - ../../../../include/QtCore/qthreadstorage.h \ - ../../../corelib/thread/qthreadstorage.h \ - ../../../../include/QtCore/qwaitcondition.h \ - ../../../corelib/thread/qwaitcondition.h \ - ../../../../include/QtCore/qarraydataops.h \ - ../../../corelib/tools/qarraydataops.h \ - ../../../../include/QtCore/qarraydatapointer.h \ - ../../../corelib/tools/qarraydatapointer.h \ - ../../../../include/QtCore/qbitarray.h \ - ../../../corelib/tools/qbitarray.h \ - ../../../../include/QtCore/qbytearraymatcher.h \ - ../../../corelib/tools/qbytearraymatcher.h \ - ../../../../include/QtCore/qcache.h \ - ../../../corelib/tools/qcache.h \ - ../../../../include/QtCore/qcollator.h \ - ../../../corelib/tools/qcollator.h \ - ../../../../include/QtCore/qcommandlineoption.h \ - ../../../corelib/tools/qcommandlineoption.h \ - ../../../../include/QtCore/qcommandlineparser.h \ - ../../../corelib/tools/qcommandlineparser.h \ - ../../../../include/QtCore/qcryptographichash.h \ - ../../../corelib/tools/qcryptographichash.h \ - ../../../../include/QtCore/qelapsedtimer.h \ - ../../../corelib/tools/qelapsedtimer.h \ - ../../../../include/QtCore/qline.h \ - ../../../corelib/tools/qline.h \ - ../../../../include/QtCore/qlinkedlist.h \ - ../../../corelib/tools/qlinkedlist.h \ - ../../../../include/QtCore/qmargins.h \ - ../../../corelib/tools/qmargins.h \ - ../../../../include/QtCore/qmessageauthenticationcode.h \ - ../../../corelib/tools/qmessageauthenticationcode.h \ - ../../../../include/QtCore/qqueue.h \ - ../../../corelib/tools/qqueue.h \ - ../../../../include/QtCore/qrect.h \ - ../../../corelib/tools/qrect.h \ - ../../../../include/QtCore/qsize.h \ - ../../../corelib/tools/qsize.h \ - ../../../../include/QtCore/qregularexpression.h \ - ../../../corelib/tools/qregularexpression.h \ - ../../../../include/QtCore/qscopedvaluerollback.h \ - ../../../corelib/tools/qscopedvaluerollback.h \ - ../../../../include/QtCore/qstack.h \ - ../../../corelib/tools/qstack.h \ - ../../../../include/QtCore/qtextboundaryfinder.h \ - ../../../corelib/tools/qtextboundaryfinder.h \ - ../../../../include/QtCore/qtimeline.h \ - ../../../corelib/tools/qtimeline.h \ - ../../../../include/QtCore/qtimezone.h \ - ../../../corelib/tools/qtimezone.h \ - ../../../../include/QtCore/qxmlstream.h \ - ../../../corelib/xml/qxmlstream.h \ - ../../../../include/QtCore/qtcoreversion.h \ - ../../../../include/QtDBus/qdbusabstractadaptor.h \ - ../../../dbus/qdbusabstractadaptor.h \ - ../../../../include/QtDBus/qdbusmacros.h \ - ../../../dbus/qdbusmacros.h \ - ../../../../include/QtDBus/qdbusabstractinterface.h \ - ../../../dbus/qdbusabstractinterface.h \ - ../../../../include/QtDBus/qdbusmessage.h \ - ../../../dbus/qdbusmessage.h \ - ../../../../include/QtDBus/qdbuserror.h \ - ../../../dbus/qdbuserror.h \ - ../../../../include/QtDBus/qdbusextratypes.h \ - ../../../dbus/qdbusextratypes.h \ - ../../../../include/QtDBus/qdbusconnection.h \ - ../../../dbus/qdbusconnection.h \ - ../../../../include/QtDBus/qdbusargument.h \ - ../../../dbus/qdbusargument.h \ - ../../../../include/QtDBus/qdbusconnectioninterface.h \ - ../../../dbus/qdbusconnectioninterface.h \ - ../../../../include/QtDBus/qdbusreply.h \ - ../../../dbus/qdbusreply.h \ - ../../../../include/QtDBus/qdbuspendingreply.h \ - ../../../dbus/qdbuspendingreply.h \ - ../../../../include/QtDBus/qdbuspendingcall.h \ - ../../../dbus/qdbuspendingcall.h \ - ../../../../include/QtDBus/qdbuscontext.h \ - ../../../dbus/qdbuscontext.h \ - ../../../../include/QtDBus/qdbusinterface.h \ - ../../../dbus/qdbusinterface.h \ - ../../../../include/QtDBus/qdbusmetatype.h \ - ../../../dbus/qdbusmetatype.h \ - ../../../../include/QtDBus/qdbusserver.h \ - ../../../dbus/qdbusserver.h \ - ../../../../include/QtDBus/qdbusservicewatcher.h \ - ../../../dbus/qdbusservicewatcher.h \ - ../../../../include/QtDBus/qdbusunixfiledescriptor.h \ - ../../../dbus/qdbusunixfiledescriptor.h \ - ../../../../include/QtDBus/qdbusvirtualobject.h \ - ../../../dbus/qdbusvirtualobject.h \ - ../../../../include/QtDBus/qtdbusversion.h \ - fcitxqtformattedpreedit.h \ - fcitxqtdbusaddons_export.h \ - ../../../../include/QtCore/QMetaType \ - ../../../../include/QtDBus/QDBusArgument \ - fcitxqtinputcontextproxy.h - /home/antanubis/TBuild/Libraries/QtStatic/qtbase/bin/moc $(DEFINES) -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/mkspecs/linux-g++ -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/src/plugins/platforminputcontexts/fcitx -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0 -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtDBus -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtCore -I/usr/include/c++/4.8 -I/usr/include/x86_64-linux-gnu/c++/4.8 -I/usr/include/c++/4.8/backward -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include fcitxqtinputcontextproxy.h -o .moc/moc_fcitxqtinputcontextproxy.cpp - -.moc/moc_fcitxqtinputmethodproxy.cpp: ../../../../include/QtCore/QObject \ - ../../../../include/QtCore/qobject.h \ - ../../../corelib/kernel/qobject.h \ - ../../../../include/QtCore/qobjectdefs.h \ - ../../../corelib/kernel/qobjectdefs.h \ - ../../../../include/QtCore/qnamespace.h \ - ../../../corelib/global/qnamespace.h \ - ../../../../include/QtCore/qglobal.h \ - ../../../corelib/global/qglobal.h \ - ../../../../include/QtCore/qconfig.h \ - ../../../corelib/global/qconfig.h \ - ../../../../include/QtCore/qfeatures.h \ - ../../../corelib/global/qfeatures.h \ - ../../../../include/QtCore/qsystemdetection.h \ - ../../../corelib/global/qsystemdetection.h \ - ../../../../include/QtCore/qprocessordetection.h \ - ../../../corelib/global/qprocessordetection.h \ - ../../../../include/QtCore/qcompilerdetection.h \ - ../../../corelib/global/qcompilerdetection.h \ - ../../../../include/QtCore/qtypeinfo.h \ - ../../../corelib/global/qtypeinfo.h \ - ../../../../include/QtCore/qtypetraits.h \ - ../../../corelib/global/qtypetraits.h \ - ../../../../include/QtCore/qsysinfo.h \ - ../../../corelib/global/qsysinfo.h \ - ../../../../include/QtCore/qlogging.h \ - ../../../corelib/global/qlogging.h \ - ../../../../include/QtCore/qflags.h \ - ../../../corelib/global/qflags.h \ - ../../../../include/QtCore/qatomic.h \ - ../../../corelib/thread/qatomic.h \ - ../../../../include/QtCore/qbasicatomic.h \ - ../../../corelib/thread/qbasicatomic.h \ - ../../../../include/QtCore/qatomic_bootstrap.h \ - ../../../corelib/arch/qatomic_bootstrap.h \ - ../../../../include/QtCore/qgenericatomic.h \ - ../../../corelib/thread/qgenericatomic.h \ - ../../../../include/QtCore/qatomic_cxx11.h \ - ../../../corelib/arch/qatomic_cxx11.h \ - ../../../../include/QtCore/qatomic_gcc.h \ - ../../../corelib/arch/qatomic_gcc.h \ - ../../../../include/QtCore/qatomic_msvc.h \ - ../../../corelib/arch/qatomic_msvc.h \ - ../../../../include/QtCore/qatomic_armv7.h \ - ../../../corelib/arch/qatomic_armv7.h \ - ../../../../include/QtCore/qatomic_armv6.h \ - ../../../corelib/arch/qatomic_armv6.h \ - ../../../../include/QtCore/qatomic_armv5.h \ - ../../../corelib/arch/qatomic_armv5.h \ - ../../../../include/QtCore/qatomic_ia64.h \ - ../../../corelib/arch/qatomic_ia64.h \ - ../../../../include/QtCore/qatomic_mips.h \ - ../../../corelib/arch/qatomic_mips.h \ - ../../../../include/QtCore/qatomic_x86.h \ - ../../../corelib/arch/qatomic_x86.h \ - ../../../../include/QtCore/qatomic_unix.h \ - ../../../corelib/arch/qatomic_unix.h \ - ../../../../include/QtCore/qglobalstatic.h \ - ../../../corelib/global/qglobalstatic.h \ - ../../../../include/QtCore/qmutex.h \ - ../../../corelib/thread/qmutex.h \ - ../../../../include/QtCore/qnumeric.h \ - ../../../corelib/global/qnumeric.h \ - ../../../../include/QtCore/qobjectdefs_impl.h \ - ../../../corelib/kernel/qobjectdefs_impl.h \ - ../../../../include/QtCore/qstring.h \ - ../../../corelib/tools/qstring.h \ - ../../../../include/QtCore/qchar.h \ - ../../../corelib/tools/qchar.h \ - ../../../../include/QtCore/qbytearray.h \ - ../../../corelib/tools/qbytearray.h \ - ../../../../include/QtCore/qrefcount.h \ - ../../../corelib/tools/qrefcount.h \ - ../../../../include/QtCore/qarraydata.h \ - ../../../corelib/tools/qarraydata.h \ - ../../../../include/QtCore/qstringbuilder.h \ - ../../../corelib/tools/qstringbuilder.h \ - ../../../../include/QtCore/qlist.h \ - ../../../corelib/tools/qlist.h \ - ../../../../include/QtCore/qalgorithms.h \ - ../../../corelib/tools/qalgorithms.h \ - ../../../../include/QtCore/qiterator.h \ - ../../../corelib/tools/qiterator.h \ - ../../../../include/QtCore/qbytearraylist.h \ - ../../../corelib/tools/qbytearraylist.h \ - ../../../../include/QtCore/qstringlist.h \ - ../../../corelib/tools/qstringlist.h \ - ../../../../include/QtCore/qregexp.h \ - ../../../corelib/tools/qregexp.h \ - ../../../../include/QtCore/qstringmatcher.h \ - ../../../corelib/tools/qstringmatcher.h \ - ../../../../include/QtCore/qcoreevent.h \ - ../../../corelib/kernel/qcoreevent.h \ - ../../../../include/QtCore/qscopedpointer.h \ - ../../../corelib/tools/qscopedpointer.h \ - ../../../../include/QtCore/qmetatype.h \ - ../../../corelib/kernel/qmetatype.h \ - ../../../../include/QtCore/qvarlengtharray.h \ - ../../../corelib/tools/qvarlengtharray.h \ - ../../../../include/QtCore/qcontainerfwd.h \ - ../../../corelib/tools/qcontainerfwd.h \ - ../../../../include/QtCore/qisenum.h \ - ../../../corelib/global/qisenum.h \ - ../../../../include/QtCore/qobject_impl.h \ - ../../../corelib/kernel/qobject_impl.h \ - ../../../../include/QtCore/QByteArray \ - ../../../../include/QtCore/QList \ - ../../../../include/QtCore/QMap \ - ../../../../include/QtCore/qmap.h \ - ../../../corelib/tools/qmap.h \ - ../../../../include/QtCore/qpair.h \ - ../../../corelib/tools/qpair.h \ - ../../../../include/QtCore/qdebug.h \ - ../../../corelib/io/qdebug.h \ - ../../../../include/QtCore/qhash.h \ - ../../../corelib/tools/qhash.h \ - ../../../../include/QtCore/qtextstream.h \ - ../../../corelib/io/qtextstream.h \ - ../../../../include/QtCore/qiodevice.h \ - ../../../corelib/io/qiodevice.h \ - ../../../../include/QtCore/qlocale.h \ - ../../../corelib/tools/qlocale.h \ - ../../../../include/QtCore/qvariant.h \ - ../../../corelib/kernel/qvariant.h \ - ../../../../include/QtCore/qshareddata.h \ - ../../../corelib/tools/qshareddata.h \ - ../../../../include/QtCore/qvector.h \ - ../../../corelib/tools/qvector.h \ - ../../../../include/QtCore/qpoint.h \ - ../../../corelib/tools/qpoint.h \ - ../../../../include/QtCore/qset.h \ - ../../../corelib/tools/qset.h \ - ../../../../include/QtCore/qcontiguouscache.h \ - ../../../corelib/tools/qcontiguouscache.h \ - ../../../../include/QtCore/QString \ - ../../../../include/QtCore/QStringList \ - ../../../../include/QtCore/QVariant \ - ../../../../include/QtDBus/QtDBus \ - ../../../../include/QtDBus/QtDBusDepends \ - ../../../../include/QtCore/QtCore \ - ../../../../include/QtCore/QtCoreDepends \ - ../../../../include/QtCore/qabstractanimation.h \ - ../../../corelib/animation/qabstractanimation.h \ - ../../../../include/QtCore/qanimationgroup.h \ - ../../../corelib/animation/qanimationgroup.h \ - ../../../../include/QtCore/qparallelanimationgroup.h \ - ../../../corelib/animation/qparallelanimationgroup.h \ - ../../../../include/QtCore/qpauseanimation.h \ - ../../../corelib/animation/qpauseanimation.h \ - ../../../../include/QtCore/qpropertyanimation.h \ - ../../../corelib/animation/qpropertyanimation.h \ - ../../../../include/QtCore/qvariantanimation.h \ - ../../../corelib/animation/qvariantanimation.h \ - ../../../../include/QtCore/qeasingcurve.h \ - ../../../corelib/tools/qeasingcurve.h \ - ../../../../include/QtCore/qsequentialanimationgroup.h \ - ../../../corelib/animation/qsequentialanimationgroup.h \ - ../../../../include/QtCore/qtextcodec.h \ - ../../../corelib/codecs/qtextcodec.h \ - ../../../../include/QtCore/qendian.h \ - ../../../corelib/global/qendian.h \ - ../../../../include/QtCore/qlibraryinfo.h \ - ../../../corelib/global/qlibraryinfo.h \ - ../../../../include/QtCore/qdatetime.h \ - ../../../corelib/tools/qdatetime.h \ - ../../../../include/QtCore/qbuffer.h \ - ../../../corelib/io/qbuffer.h \ - ../../../../include/QtCore/qdatastream.h \ - ../../../corelib/io/qdatastream.h \ - ../../../../include/QtCore/qdir.h \ - ../../../corelib/io/qdir.h \ - ../../../../include/QtCore/qfileinfo.h \ - ../../../corelib/io/qfileinfo.h \ - ../../../../include/QtCore/qfile.h \ - ../../../corelib/io/qfile.h \ - ../../../../include/QtCore/qfiledevice.h \ - ../../../corelib/io/qfiledevice.h \ - ../../../../include/QtCore/qdiriterator.h \ - ../../../corelib/io/qdiriterator.h \ - ../../../../include/QtCore/qfileselector.h \ - ../../../corelib/io/qfileselector.h \ - ../../../../include/QtCore/qfilesystemwatcher.h \ - ../../../corelib/io/qfilesystemwatcher.h \ - ../../../../include/QtCore/qlockfile.h \ - ../../../corelib/io/qlockfile.h \ - ../../../../include/QtCore/qloggingcategory.h \ - ../../../corelib/io/qloggingcategory.h \ - ../../../../include/QtCore/qprocess.h \ - ../../../corelib/io/qprocess.h \ - ../../../../include/QtCore/qresource.h \ - ../../../corelib/io/qresource.h \ - ../../../../include/QtCore/qsavefile.h \ - ../../../corelib/io/qsavefile.h \ - ../../../../include/QtCore/qsettings.h \ - ../../../corelib/io/qsettings.h \ - ../../../../include/QtCore/qstandardpaths.h \ - ../../../corelib/io/qstandardpaths.h \ - ../../../../include/QtCore/qstorageinfo.h \ - ../../../corelib/io/qstorageinfo.h \ - ../../../../include/QtCore/qtemporarydir.h \ - ../../../corelib/io/qtemporarydir.h \ - ../../../../include/QtCore/QScopedPointer \ - ../../../../include/QtCore/qtemporaryfile.h \ - ../../../corelib/io/qtemporaryfile.h \ - ../../../../include/QtCore/qurl.h \ - ../../../corelib/io/qurl.h \ - ../../../../include/QtCore/qurlquery.h \ - ../../../corelib/io/qurlquery.h \ - ../../../../include/QtCore/qabstractitemmodel.h \ - ../../../corelib/itemmodels/qabstractitemmodel.h \ - ../../../../include/QtCore/qabstractproxymodel.h \ - ../../../corelib/itemmodels/qabstractproxymodel.h \ - ../../../../include/QtCore/qidentityproxymodel.h \ - ../../../corelib/itemmodels/qidentityproxymodel.h \ - ../../../../include/QtCore/qitemselectionmodel.h \ - ../../../corelib/itemmodels/qitemselectionmodel.h \ - ../../../../include/QtCore/qsortfilterproxymodel.h \ - ../../../corelib/itemmodels/qsortfilterproxymodel.h \ - ../../../../include/QtCore/qstringlistmodel.h \ - ../../../corelib/itemmodels/qstringlistmodel.h \ - ../../../../include/QtCore/qjsonarray.h \ - ../../../corelib/json/qjsonarray.h \ - ../../../../include/QtCore/qjsonvalue.h \ - ../../../corelib/json/qjsonvalue.h \ - ../../../../include/QtCore/qjsondocument.h \ - ../../../corelib/json/qjsondocument.h \ - ../../../../include/QtCore/qjsonobject.h \ - ../../../corelib/json/qjsonobject.h \ - ../../../../include/QtCore/qabstracteventdispatcher.h \ - ../../../corelib/kernel/qabstracteventdispatcher.h \ - ../../../../include/QtCore/qeventloop.h \ - ../../../corelib/kernel/qeventloop.h \ - ../../../../include/QtCore/qabstractnativeeventfilter.h \ - ../../../corelib/kernel/qabstractnativeeventfilter.h \ - ../../../../include/QtCore/qbasictimer.h \ - ../../../corelib/kernel/qbasictimer.h \ - ../../../../include/QtCore/qcoreapplication.h \ - ../../../corelib/kernel/qcoreapplication.h \ - ../../../../include/QtCore/qmath.h \ - ../../../corelib/kernel/qmath.h \ - ../../../../include/QtCore/qmetaobject.h \ - ../../../corelib/kernel/qmetaobject.h \ - ../../../../include/QtCore/qmimedata.h \ - ../../../corelib/kernel/qmimedata.h \ - ../../../../include/QtCore/qobjectcleanuphandler.h \ - ../../../corelib/kernel/qobjectcleanuphandler.h \ - ../../../../include/QtCore/qpointer.h \ - ../../../corelib/kernel/qpointer.h \ - ../../../../include/QtCore/qsharedpointer.h \ - ../../../corelib/tools/qsharedpointer.h \ - ../../../../include/QtCore/qsharedpointer_impl.h \ - ../../../corelib/tools/qsharedpointer_impl.h \ - ../../../../include/QtCore/qsharedmemory.h \ - ../../../corelib/kernel/qsharedmemory.h \ - ../../../../include/QtCore/qsignalmapper.h \ - ../../../corelib/kernel/qsignalmapper.h \ - ../../../../include/QtCore/qsocketnotifier.h \ - ../../../corelib/kernel/qsocketnotifier.h \ - ../../../../include/QtCore/qsystemsemaphore.h \ - ../../../corelib/kernel/qsystemsemaphore.h \ - ../../../../include/QtCore/qtimer.h \ - ../../../corelib/kernel/qtimer.h \ - ../../../../include/QtCore/qtranslator.h \ - ../../../corelib/kernel/qtranslator.h \ - ../../../../include/QtCore/qwineventnotifier.h \ - ../../../corelib/kernel/qwineventnotifier.h \ - ../../../../include/QtCore/qmimedatabase.h \ - ../../../corelib/mimetypes/qmimedatabase.h \ - ../../../../include/QtCore/qmimetype.h \ - ../../../corelib/mimetypes/qmimetype.h \ - ../../../../include/QtCore/qfactoryinterface.h \ - ../../../corelib/plugin/qfactoryinterface.h \ - ../../../../include/QtCore/qlibrary.h \ - ../../../corelib/plugin/qlibrary.h \ - ../../../../include/QtCore/qplugin.h \ - ../../../corelib/plugin/qplugin.h \ - ../../../../include/QtCore/qpluginloader.h \ - ../../../corelib/plugin/qpluginloader.h \ - ../../../../include/QtCore/quuid.h \ - ../../../corelib/plugin/quuid.h \ - ../../../../include/QtCore/qabstractstate.h \ - ../../../corelib/statemachine/qabstractstate.h \ - ../../../../include/QtCore/qabstracttransition.h \ - ../../../corelib/statemachine/qabstracttransition.h \ - ../../../../include/QtCore/qeventtransition.h \ - ../../../corelib/statemachine/qeventtransition.h \ - ../../../../include/QtCore/qfinalstate.h \ - ../../../corelib/statemachine/qfinalstate.h \ - ../../../../include/QtCore/qhistorystate.h \ - ../../../corelib/statemachine/qhistorystate.h \ - ../../../../include/QtCore/qsignaltransition.h \ - ../../../corelib/statemachine/qsignaltransition.h \ - ../../../../include/QtCore/qstate.h \ - ../../../corelib/statemachine/qstate.h \ - ../../../../include/QtCore/qstatemachine.h \ - ../../../corelib/statemachine/qstatemachine.h \ - ../../../../include/QtCore/qexception.h \ - ../../../corelib/thread/qexception.h \ - ../../../../include/QtCore/qfuture.h \ - ../../../corelib/thread/qfuture.h \ - ../../../../include/QtCore/qfutureinterface.h \ - ../../../corelib/thread/qfutureinterface.h \ - ../../../../include/QtCore/qrunnable.h \ - ../../../corelib/thread/qrunnable.h \ - ../../../../include/QtCore/qresultstore.h \ - ../../../corelib/thread/qresultstore.h \ - ../../../../include/QtCore/qfuturesynchronizer.h \ - ../../../corelib/thread/qfuturesynchronizer.h \ - ../../../../include/QtCore/qfuturewatcher.h \ - ../../../corelib/thread/qfuturewatcher.h \ - ../../../../include/QtCore/qreadwritelock.h \ - ../../../corelib/thread/qreadwritelock.h \ - ../../../../include/QtCore/qsemaphore.h \ - ../../../corelib/thread/qsemaphore.h \ - ../../../../include/QtCore/qthread.h \ - ../../../corelib/thread/qthread.h \ - ../../../../include/QtCore/qthreadpool.h \ - ../../../corelib/thread/qthreadpool.h \ - ../../../../include/QtCore/qthreadstorage.h \ - ../../../corelib/thread/qthreadstorage.h \ - ../../../../include/QtCore/qwaitcondition.h \ - ../../../corelib/thread/qwaitcondition.h \ - ../../../../include/QtCore/qarraydataops.h \ - ../../../corelib/tools/qarraydataops.h \ - ../../../../include/QtCore/qarraydatapointer.h \ - ../../../corelib/tools/qarraydatapointer.h \ - ../../../../include/QtCore/qbitarray.h \ - ../../../corelib/tools/qbitarray.h \ - ../../../../include/QtCore/qbytearraymatcher.h \ - ../../../corelib/tools/qbytearraymatcher.h \ - ../../../../include/QtCore/qcache.h \ - ../../../corelib/tools/qcache.h \ - ../../../../include/QtCore/qcollator.h \ - ../../../corelib/tools/qcollator.h \ - ../../../../include/QtCore/qcommandlineoption.h \ - ../../../corelib/tools/qcommandlineoption.h \ - ../../../../include/QtCore/qcommandlineparser.h \ - ../../../corelib/tools/qcommandlineparser.h \ - ../../../../include/QtCore/qcryptographichash.h \ - ../../../corelib/tools/qcryptographichash.h \ - ../../../../include/QtCore/qelapsedtimer.h \ - ../../../corelib/tools/qelapsedtimer.h \ - ../../../../include/QtCore/qline.h \ - ../../../corelib/tools/qline.h \ - ../../../../include/QtCore/qlinkedlist.h \ - ../../../corelib/tools/qlinkedlist.h \ - ../../../../include/QtCore/qmargins.h \ - ../../../corelib/tools/qmargins.h \ - ../../../../include/QtCore/qmessageauthenticationcode.h \ - ../../../corelib/tools/qmessageauthenticationcode.h \ - ../../../../include/QtCore/qqueue.h \ - ../../../corelib/tools/qqueue.h \ - ../../../../include/QtCore/qrect.h \ - ../../../corelib/tools/qrect.h \ - ../../../../include/QtCore/qsize.h \ - ../../../corelib/tools/qsize.h \ - ../../../../include/QtCore/qregularexpression.h \ - ../../../corelib/tools/qregularexpression.h \ - ../../../../include/QtCore/qscopedvaluerollback.h \ - ../../../corelib/tools/qscopedvaluerollback.h \ - ../../../../include/QtCore/qstack.h \ - ../../../corelib/tools/qstack.h \ - ../../../../include/QtCore/qtextboundaryfinder.h \ - ../../../corelib/tools/qtextboundaryfinder.h \ - ../../../../include/QtCore/qtimeline.h \ - ../../../corelib/tools/qtimeline.h \ - ../../../../include/QtCore/qtimezone.h \ - ../../../corelib/tools/qtimezone.h \ - ../../../../include/QtCore/qxmlstream.h \ - ../../../corelib/xml/qxmlstream.h \ - ../../../../include/QtCore/qtcoreversion.h \ - ../../../../include/QtDBus/qdbusabstractadaptor.h \ - ../../../dbus/qdbusabstractadaptor.h \ - ../../../../include/QtDBus/qdbusmacros.h \ - ../../../dbus/qdbusmacros.h \ - ../../../../include/QtDBus/qdbusabstractinterface.h \ - ../../../dbus/qdbusabstractinterface.h \ - ../../../../include/QtDBus/qdbusmessage.h \ - ../../../dbus/qdbusmessage.h \ - ../../../../include/QtDBus/qdbuserror.h \ - ../../../dbus/qdbuserror.h \ - ../../../../include/QtDBus/qdbusextratypes.h \ - ../../../dbus/qdbusextratypes.h \ - ../../../../include/QtDBus/qdbusconnection.h \ - ../../../dbus/qdbusconnection.h \ - ../../../../include/QtDBus/qdbusargument.h \ - ../../../dbus/qdbusargument.h \ - ../../../../include/QtDBus/qdbusconnectioninterface.h \ - ../../../dbus/qdbusconnectioninterface.h \ - ../../../../include/QtDBus/qdbusreply.h \ - ../../../dbus/qdbusreply.h \ - ../../../../include/QtDBus/qdbuspendingreply.h \ - ../../../dbus/qdbuspendingreply.h \ - ../../../../include/QtDBus/qdbuspendingcall.h \ - ../../../dbus/qdbuspendingcall.h \ - ../../../../include/QtDBus/qdbuscontext.h \ - ../../../dbus/qdbuscontext.h \ - ../../../../include/QtDBus/qdbusinterface.h \ - ../../../dbus/qdbusinterface.h \ - ../../../../include/QtDBus/qdbusmetatype.h \ - ../../../dbus/qdbusmetatype.h \ - ../../../../include/QtDBus/qdbusserver.h \ - ../../../dbus/qdbusserver.h \ - ../../../../include/QtDBus/qdbusservicewatcher.h \ - ../../../dbus/qdbusservicewatcher.h \ - ../../../../include/QtDBus/qdbusunixfiledescriptor.h \ - ../../../dbus/qdbusunixfiledescriptor.h \ - ../../../../include/QtDBus/qdbusvirtualobject.h \ - ../../../dbus/qdbusvirtualobject.h \ - ../../../../include/QtDBus/qtdbusversion.h \ - fcitxqtinputmethoditem.h \ - fcitxqtdbusaddons_export.h \ - ../../../../include/QtCore/QMetaType \ - ../../../../include/QtDBus/QDBusArgument \ - fcitxqtinputmethodproxy.h - /home/antanubis/TBuild/Libraries/QtStatic/qtbase/bin/moc $(DEFINES) -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/mkspecs/linux-g++ -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/src/plugins/platforminputcontexts/fcitx -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0 -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtDBus -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtCore -I/usr/include/c++/4.8 -I/usr/include/x86_64-linux-gnu/c++/4.8 -I/usr/include/c++/4.8/backward -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include fcitxqtinputmethodproxy.h -o .moc/moc_fcitxqtinputmethodproxy.cpp - -.moc/moc_fcitxqtkeyboardproxy.cpp: ../../../../include/QtCore/QObject \ - ../../../../include/QtCore/qobject.h \ - ../../../corelib/kernel/qobject.h \ - ../../../../include/QtCore/qobjectdefs.h \ - ../../../corelib/kernel/qobjectdefs.h \ - ../../../../include/QtCore/qnamespace.h \ - ../../../corelib/global/qnamespace.h \ - ../../../../include/QtCore/qglobal.h \ - ../../../corelib/global/qglobal.h \ - ../../../../include/QtCore/qconfig.h \ - ../../../corelib/global/qconfig.h \ - ../../../../include/QtCore/qfeatures.h \ - ../../../corelib/global/qfeatures.h \ - ../../../../include/QtCore/qsystemdetection.h \ - ../../../corelib/global/qsystemdetection.h \ - ../../../../include/QtCore/qprocessordetection.h \ - ../../../corelib/global/qprocessordetection.h \ - ../../../../include/QtCore/qcompilerdetection.h \ - ../../../corelib/global/qcompilerdetection.h \ - ../../../../include/QtCore/qtypeinfo.h \ - ../../../corelib/global/qtypeinfo.h \ - ../../../../include/QtCore/qtypetraits.h \ - ../../../corelib/global/qtypetraits.h \ - ../../../../include/QtCore/qsysinfo.h \ - ../../../corelib/global/qsysinfo.h \ - ../../../../include/QtCore/qlogging.h \ - ../../../corelib/global/qlogging.h \ - ../../../../include/QtCore/qflags.h \ - ../../../corelib/global/qflags.h \ - ../../../../include/QtCore/qatomic.h \ - ../../../corelib/thread/qatomic.h \ - ../../../../include/QtCore/qbasicatomic.h \ - ../../../corelib/thread/qbasicatomic.h \ - ../../../../include/QtCore/qatomic_bootstrap.h \ - ../../../corelib/arch/qatomic_bootstrap.h \ - ../../../../include/QtCore/qgenericatomic.h \ - ../../../corelib/thread/qgenericatomic.h \ - ../../../../include/QtCore/qatomic_cxx11.h \ - ../../../corelib/arch/qatomic_cxx11.h \ - ../../../../include/QtCore/qatomic_gcc.h \ - ../../../corelib/arch/qatomic_gcc.h \ - ../../../../include/QtCore/qatomic_msvc.h \ - ../../../corelib/arch/qatomic_msvc.h \ - ../../../../include/QtCore/qatomic_armv7.h \ - ../../../corelib/arch/qatomic_armv7.h \ - ../../../../include/QtCore/qatomic_armv6.h \ - ../../../corelib/arch/qatomic_armv6.h \ - ../../../../include/QtCore/qatomic_armv5.h \ - ../../../corelib/arch/qatomic_armv5.h \ - ../../../../include/QtCore/qatomic_ia64.h \ - ../../../corelib/arch/qatomic_ia64.h \ - ../../../../include/QtCore/qatomic_mips.h \ - ../../../corelib/arch/qatomic_mips.h \ - ../../../../include/QtCore/qatomic_x86.h \ - ../../../corelib/arch/qatomic_x86.h \ - ../../../../include/QtCore/qatomic_unix.h \ - ../../../corelib/arch/qatomic_unix.h \ - ../../../../include/QtCore/qglobalstatic.h \ - ../../../corelib/global/qglobalstatic.h \ - ../../../../include/QtCore/qmutex.h \ - ../../../corelib/thread/qmutex.h \ - ../../../../include/QtCore/qnumeric.h \ - ../../../corelib/global/qnumeric.h \ - ../../../../include/QtCore/qobjectdefs_impl.h \ - ../../../corelib/kernel/qobjectdefs_impl.h \ - ../../../../include/QtCore/qstring.h \ - ../../../corelib/tools/qstring.h \ - ../../../../include/QtCore/qchar.h \ - ../../../corelib/tools/qchar.h \ - ../../../../include/QtCore/qbytearray.h \ - ../../../corelib/tools/qbytearray.h \ - ../../../../include/QtCore/qrefcount.h \ - ../../../corelib/tools/qrefcount.h \ - ../../../../include/QtCore/qarraydata.h \ - ../../../corelib/tools/qarraydata.h \ - ../../../../include/QtCore/qstringbuilder.h \ - ../../../corelib/tools/qstringbuilder.h \ - ../../../../include/QtCore/qlist.h \ - ../../../corelib/tools/qlist.h \ - ../../../../include/QtCore/qalgorithms.h \ - ../../../corelib/tools/qalgorithms.h \ - ../../../../include/QtCore/qiterator.h \ - ../../../corelib/tools/qiterator.h \ - ../../../../include/QtCore/qbytearraylist.h \ - ../../../corelib/tools/qbytearraylist.h \ - ../../../../include/QtCore/qstringlist.h \ - ../../../corelib/tools/qstringlist.h \ - ../../../../include/QtCore/qregexp.h \ - ../../../corelib/tools/qregexp.h \ - ../../../../include/QtCore/qstringmatcher.h \ - ../../../corelib/tools/qstringmatcher.h \ - ../../../../include/QtCore/qcoreevent.h \ - ../../../corelib/kernel/qcoreevent.h \ - ../../../../include/QtCore/qscopedpointer.h \ - ../../../corelib/tools/qscopedpointer.h \ - ../../../../include/QtCore/qmetatype.h \ - ../../../corelib/kernel/qmetatype.h \ - ../../../../include/QtCore/qvarlengtharray.h \ - ../../../corelib/tools/qvarlengtharray.h \ - ../../../../include/QtCore/qcontainerfwd.h \ - ../../../corelib/tools/qcontainerfwd.h \ - ../../../../include/QtCore/qisenum.h \ - ../../../corelib/global/qisenum.h \ - ../../../../include/QtCore/qobject_impl.h \ - ../../../corelib/kernel/qobject_impl.h \ - ../../../../include/QtCore/QByteArray \ - ../../../../include/QtCore/QList \ - ../../../../include/QtCore/QMap \ - ../../../../include/QtCore/qmap.h \ - ../../../corelib/tools/qmap.h \ - ../../../../include/QtCore/qpair.h \ - ../../../corelib/tools/qpair.h \ - ../../../../include/QtCore/qdebug.h \ - ../../../corelib/io/qdebug.h \ - ../../../../include/QtCore/qhash.h \ - ../../../corelib/tools/qhash.h \ - ../../../../include/QtCore/qtextstream.h \ - ../../../corelib/io/qtextstream.h \ - ../../../../include/QtCore/qiodevice.h \ - ../../../corelib/io/qiodevice.h \ - ../../../../include/QtCore/qlocale.h \ - ../../../corelib/tools/qlocale.h \ - ../../../../include/QtCore/qvariant.h \ - ../../../corelib/kernel/qvariant.h \ - ../../../../include/QtCore/qshareddata.h \ - ../../../corelib/tools/qshareddata.h \ - ../../../../include/QtCore/qvector.h \ - ../../../corelib/tools/qvector.h \ - ../../../../include/QtCore/qpoint.h \ - ../../../corelib/tools/qpoint.h \ - ../../../../include/QtCore/qset.h \ - ../../../corelib/tools/qset.h \ - ../../../../include/QtCore/qcontiguouscache.h \ - ../../../corelib/tools/qcontiguouscache.h \ - ../../../../include/QtCore/QString \ - ../../../../include/QtCore/QStringList \ - ../../../../include/QtCore/QVariant \ - ../../../../include/QtDBus/QtDBus \ - ../../../../include/QtDBus/QtDBusDepends \ - ../../../../include/QtCore/QtCore \ - ../../../../include/QtCore/QtCoreDepends \ - ../../../../include/QtCore/qabstractanimation.h \ - ../../../corelib/animation/qabstractanimation.h \ - ../../../../include/QtCore/qanimationgroup.h \ - ../../../corelib/animation/qanimationgroup.h \ - ../../../../include/QtCore/qparallelanimationgroup.h \ - ../../../corelib/animation/qparallelanimationgroup.h \ - ../../../../include/QtCore/qpauseanimation.h \ - ../../../corelib/animation/qpauseanimation.h \ - ../../../../include/QtCore/qpropertyanimation.h \ - ../../../corelib/animation/qpropertyanimation.h \ - ../../../../include/QtCore/qvariantanimation.h \ - ../../../corelib/animation/qvariantanimation.h \ - ../../../../include/QtCore/qeasingcurve.h \ - ../../../corelib/tools/qeasingcurve.h \ - ../../../../include/QtCore/qsequentialanimationgroup.h \ - ../../../corelib/animation/qsequentialanimationgroup.h \ - ../../../../include/QtCore/qtextcodec.h \ - ../../../corelib/codecs/qtextcodec.h \ - ../../../../include/QtCore/qendian.h \ - ../../../corelib/global/qendian.h \ - ../../../../include/QtCore/qlibraryinfo.h \ - ../../../corelib/global/qlibraryinfo.h \ - ../../../../include/QtCore/qdatetime.h \ - ../../../corelib/tools/qdatetime.h \ - ../../../../include/QtCore/qbuffer.h \ - ../../../corelib/io/qbuffer.h \ - ../../../../include/QtCore/qdatastream.h \ - ../../../corelib/io/qdatastream.h \ - ../../../../include/QtCore/qdir.h \ - ../../../corelib/io/qdir.h \ - ../../../../include/QtCore/qfileinfo.h \ - ../../../corelib/io/qfileinfo.h \ - ../../../../include/QtCore/qfile.h \ - ../../../corelib/io/qfile.h \ - ../../../../include/QtCore/qfiledevice.h \ - ../../../corelib/io/qfiledevice.h \ - ../../../../include/QtCore/qdiriterator.h \ - ../../../corelib/io/qdiriterator.h \ - ../../../../include/QtCore/qfileselector.h \ - ../../../corelib/io/qfileselector.h \ - ../../../../include/QtCore/qfilesystemwatcher.h \ - ../../../corelib/io/qfilesystemwatcher.h \ - ../../../../include/QtCore/qlockfile.h \ - ../../../corelib/io/qlockfile.h \ - ../../../../include/QtCore/qloggingcategory.h \ - ../../../corelib/io/qloggingcategory.h \ - ../../../../include/QtCore/qprocess.h \ - ../../../corelib/io/qprocess.h \ - ../../../../include/QtCore/qresource.h \ - ../../../corelib/io/qresource.h \ - ../../../../include/QtCore/qsavefile.h \ - ../../../corelib/io/qsavefile.h \ - ../../../../include/QtCore/qsettings.h \ - ../../../corelib/io/qsettings.h \ - ../../../../include/QtCore/qstandardpaths.h \ - ../../../corelib/io/qstandardpaths.h \ - ../../../../include/QtCore/qstorageinfo.h \ - ../../../corelib/io/qstorageinfo.h \ - ../../../../include/QtCore/qtemporarydir.h \ - ../../../corelib/io/qtemporarydir.h \ - ../../../../include/QtCore/QScopedPointer \ - ../../../../include/QtCore/qtemporaryfile.h \ - ../../../corelib/io/qtemporaryfile.h \ - ../../../../include/QtCore/qurl.h \ - ../../../corelib/io/qurl.h \ - ../../../../include/QtCore/qurlquery.h \ - ../../../corelib/io/qurlquery.h \ - ../../../../include/QtCore/qabstractitemmodel.h \ - ../../../corelib/itemmodels/qabstractitemmodel.h \ - ../../../../include/QtCore/qabstractproxymodel.h \ - ../../../corelib/itemmodels/qabstractproxymodel.h \ - ../../../../include/QtCore/qidentityproxymodel.h \ - ../../../corelib/itemmodels/qidentityproxymodel.h \ - ../../../../include/QtCore/qitemselectionmodel.h \ - ../../../corelib/itemmodels/qitemselectionmodel.h \ - ../../../../include/QtCore/qsortfilterproxymodel.h \ - ../../../corelib/itemmodels/qsortfilterproxymodel.h \ - ../../../../include/QtCore/qstringlistmodel.h \ - ../../../corelib/itemmodels/qstringlistmodel.h \ - ../../../../include/QtCore/qjsonarray.h \ - ../../../corelib/json/qjsonarray.h \ - ../../../../include/QtCore/qjsonvalue.h \ - ../../../corelib/json/qjsonvalue.h \ - ../../../../include/QtCore/qjsondocument.h \ - ../../../corelib/json/qjsondocument.h \ - ../../../../include/QtCore/qjsonobject.h \ - ../../../corelib/json/qjsonobject.h \ - ../../../../include/QtCore/qabstracteventdispatcher.h \ - ../../../corelib/kernel/qabstracteventdispatcher.h \ - ../../../../include/QtCore/qeventloop.h \ - ../../../corelib/kernel/qeventloop.h \ - ../../../../include/QtCore/qabstractnativeeventfilter.h \ - ../../../corelib/kernel/qabstractnativeeventfilter.h \ - ../../../../include/QtCore/qbasictimer.h \ - ../../../corelib/kernel/qbasictimer.h \ - ../../../../include/QtCore/qcoreapplication.h \ - ../../../corelib/kernel/qcoreapplication.h \ - ../../../../include/QtCore/qmath.h \ - ../../../corelib/kernel/qmath.h \ - ../../../../include/QtCore/qmetaobject.h \ - ../../../corelib/kernel/qmetaobject.h \ - ../../../../include/QtCore/qmimedata.h \ - ../../../corelib/kernel/qmimedata.h \ - ../../../../include/QtCore/qobjectcleanuphandler.h \ - ../../../corelib/kernel/qobjectcleanuphandler.h \ - ../../../../include/QtCore/qpointer.h \ - ../../../corelib/kernel/qpointer.h \ - ../../../../include/QtCore/qsharedpointer.h \ - ../../../corelib/tools/qsharedpointer.h \ - ../../../../include/QtCore/qsharedpointer_impl.h \ - ../../../corelib/tools/qsharedpointer_impl.h \ - ../../../../include/QtCore/qsharedmemory.h \ - ../../../corelib/kernel/qsharedmemory.h \ - ../../../../include/QtCore/qsignalmapper.h \ - ../../../corelib/kernel/qsignalmapper.h \ - ../../../../include/QtCore/qsocketnotifier.h \ - ../../../corelib/kernel/qsocketnotifier.h \ - ../../../../include/QtCore/qsystemsemaphore.h \ - ../../../corelib/kernel/qsystemsemaphore.h \ - ../../../../include/QtCore/qtimer.h \ - ../../../corelib/kernel/qtimer.h \ - ../../../../include/QtCore/qtranslator.h \ - ../../../corelib/kernel/qtranslator.h \ - ../../../../include/QtCore/qwineventnotifier.h \ - ../../../corelib/kernel/qwineventnotifier.h \ - ../../../../include/QtCore/qmimedatabase.h \ - ../../../corelib/mimetypes/qmimedatabase.h \ - ../../../../include/QtCore/qmimetype.h \ - ../../../corelib/mimetypes/qmimetype.h \ - ../../../../include/QtCore/qfactoryinterface.h \ - ../../../corelib/plugin/qfactoryinterface.h \ - ../../../../include/QtCore/qlibrary.h \ - ../../../corelib/plugin/qlibrary.h \ - ../../../../include/QtCore/qplugin.h \ - ../../../corelib/plugin/qplugin.h \ - ../../../../include/QtCore/qpluginloader.h \ - ../../../corelib/plugin/qpluginloader.h \ - ../../../../include/QtCore/quuid.h \ - ../../../corelib/plugin/quuid.h \ - ../../../../include/QtCore/qabstractstate.h \ - ../../../corelib/statemachine/qabstractstate.h \ - ../../../../include/QtCore/qabstracttransition.h \ - ../../../corelib/statemachine/qabstracttransition.h \ - ../../../../include/QtCore/qeventtransition.h \ - ../../../corelib/statemachine/qeventtransition.h \ - ../../../../include/QtCore/qfinalstate.h \ - ../../../corelib/statemachine/qfinalstate.h \ - ../../../../include/QtCore/qhistorystate.h \ - ../../../corelib/statemachine/qhistorystate.h \ - ../../../../include/QtCore/qsignaltransition.h \ - ../../../corelib/statemachine/qsignaltransition.h \ - ../../../../include/QtCore/qstate.h \ - ../../../corelib/statemachine/qstate.h \ - ../../../../include/QtCore/qstatemachine.h \ - ../../../corelib/statemachine/qstatemachine.h \ - ../../../../include/QtCore/qexception.h \ - ../../../corelib/thread/qexception.h \ - ../../../../include/QtCore/qfuture.h \ - ../../../corelib/thread/qfuture.h \ - ../../../../include/QtCore/qfutureinterface.h \ - ../../../corelib/thread/qfutureinterface.h \ - ../../../../include/QtCore/qrunnable.h \ - ../../../corelib/thread/qrunnable.h \ - ../../../../include/QtCore/qresultstore.h \ - ../../../corelib/thread/qresultstore.h \ - ../../../../include/QtCore/qfuturesynchronizer.h \ - ../../../corelib/thread/qfuturesynchronizer.h \ - ../../../../include/QtCore/qfuturewatcher.h \ - ../../../corelib/thread/qfuturewatcher.h \ - ../../../../include/QtCore/qreadwritelock.h \ - ../../../corelib/thread/qreadwritelock.h \ - ../../../../include/QtCore/qsemaphore.h \ - ../../../corelib/thread/qsemaphore.h \ - ../../../../include/QtCore/qthread.h \ - ../../../corelib/thread/qthread.h \ - ../../../../include/QtCore/qthreadpool.h \ - ../../../corelib/thread/qthreadpool.h \ - ../../../../include/QtCore/qthreadstorage.h \ - ../../../corelib/thread/qthreadstorage.h \ - ../../../../include/QtCore/qwaitcondition.h \ - ../../../corelib/thread/qwaitcondition.h \ - ../../../../include/QtCore/qarraydataops.h \ - ../../../corelib/tools/qarraydataops.h \ - ../../../../include/QtCore/qarraydatapointer.h \ - ../../../corelib/tools/qarraydatapointer.h \ - ../../../../include/QtCore/qbitarray.h \ - ../../../corelib/tools/qbitarray.h \ - ../../../../include/QtCore/qbytearraymatcher.h \ - ../../../corelib/tools/qbytearraymatcher.h \ - ../../../../include/QtCore/qcache.h \ - ../../../corelib/tools/qcache.h \ - ../../../../include/QtCore/qcollator.h \ - ../../../corelib/tools/qcollator.h \ - ../../../../include/QtCore/qcommandlineoption.h \ - ../../../corelib/tools/qcommandlineoption.h \ - ../../../../include/QtCore/qcommandlineparser.h \ - ../../../corelib/tools/qcommandlineparser.h \ - ../../../../include/QtCore/qcryptographichash.h \ - ../../../corelib/tools/qcryptographichash.h \ - ../../../../include/QtCore/qelapsedtimer.h \ - ../../../corelib/tools/qelapsedtimer.h \ - ../../../../include/QtCore/qline.h \ - ../../../corelib/tools/qline.h \ - ../../../../include/QtCore/qlinkedlist.h \ - ../../../corelib/tools/qlinkedlist.h \ - ../../../../include/QtCore/qmargins.h \ - ../../../corelib/tools/qmargins.h \ - ../../../../include/QtCore/qmessageauthenticationcode.h \ - ../../../corelib/tools/qmessageauthenticationcode.h \ - ../../../../include/QtCore/qqueue.h \ - ../../../corelib/tools/qqueue.h \ - ../../../../include/QtCore/qrect.h \ - ../../../corelib/tools/qrect.h \ - ../../../../include/QtCore/qsize.h \ - ../../../corelib/tools/qsize.h \ - ../../../../include/QtCore/qregularexpression.h \ - ../../../corelib/tools/qregularexpression.h \ - ../../../../include/QtCore/qscopedvaluerollback.h \ - ../../../corelib/tools/qscopedvaluerollback.h \ - ../../../../include/QtCore/qstack.h \ - ../../../corelib/tools/qstack.h \ - ../../../../include/QtCore/qtextboundaryfinder.h \ - ../../../corelib/tools/qtextboundaryfinder.h \ - ../../../../include/QtCore/qtimeline.h \ - ../../../corelib/tools/qtimeline.h \ - ../../../../include/QtCore/qtimezone.h \ - ../../../corelib/tools/qtimezone.h \ - ../../../../include/QtCore/qxmlstream.h \ - ../../../corelib/xml/qxmlstream.h \ - ../../../../include/QtCore/qtcoreversion.h \ - ../../../../include/QtDBus/qdbusabstractadaptor.h \ - ../../../dbus/qdbusabstractadaptor.h \ - ../../../../include/QtDBus/qdbusmacros.h \ - ../../../dbus/qdbusmacros.h \ - ../../../../include/QtDBus/qdbusabstractinterface.h \ - ../../../dbus/qdbusabstractinterface.h \ - ../../../../include/QtDBus/qdbusmessage.h \ - ../../../dbus/qdbusmessage.h \ - ../../../../include/QtDBus/qdbuserror.h \ - ../../../dbus/qdbuserror.h \ - ../../../../include/QtDBus/qdbusextratypes.h \ - ../../../dbus/qdbusextratypes.h \ - ../../../../include/QtDBus/qdbusconnection.h \ - ../../../dbus/qdbusconnection.h \ - ../../../../include/QtDBus/qdbusargument.h \ - ../../../dbus/qdbusargument.h \ - ../../../../include/QtDBus/qdbusconnectioninterface.h \ - ../../../dbus/qdbusconnectioninterface.h \ - ../../../../include/QtDBus/qdbusreply.h \ - ../../../dbus/qdbusreply.h \ - ../../../../include/QtDBus/qdbuspendingreply.h \ - ../../../dbus/qdbuspendingreply.h \ - ../../../../include/QtDBus/qdbuspendingcall.h \ - ../../../dbus/qdbuspendingcall.h \ - ../../../../include/QtDBus/qdbuscontext.h \ - ../../../dbus/qdbuscontext.h \ - ../../../../include/QtDBus/qdbusinterface.h \ - ../../../dbus/qdbusinterface.h \ - ../../../../include/QtDBus/qdbusmetatype.h \ - ../../../dbus/qdbusmetatype.h \ - ../../../../include/QtDBus/qdbusserver.h \ - ../../../dbus/qdbusserver.h \ - ../../../../include/QtDBus/qdbusservicewatcher.h \ - ../../../dbus/qdbusservicewatcher.h \ - ../../../../include/QtDBus/qdbusunixfiledescriptor.h \ - ../../../dbus/qdbusunixfiledescriptor.h \ - ../../../../include/QtDBus/qdbusvirtualobject.h \ - ../../../dbus/qdbusvirtualobject.h \ - ../../../../include/QtDBus/qtdbusversion.h \ - fcitxqtkeyboardlayout.h \ - fcitxqtdbusaddons_export.h \ - ../../../../include/QtCore/QMetaType \ - ../../../../include/QtDBus/QDBusArgument \ - fcitxqtkeyboardproxy.h - /home/antanubis/TBuild/Libraries/QtStatic/qtbase/bin/moc $(DEFINES) -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/mkspecs/linux-g++ -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/src/plugins/platforminputcontexts/fcitx -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0 -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtDBus -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtCore -I/usr/include/c++/4.8 -I/usr/include/x86_64-linux-gnu/c++/4.8 -I/usr/include/c++/4.8/backward -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include fcitxqtkeyboardproxy.h -o .moc/moc_fcitxqtkeyboardproxy.cpp - -.moc/moc_main.cpp: ../../../../include/QtGui/5.5.0/QtGui/qpa/qplatforminputcontextplugin_p.h \ - ../../../gui/kernel/qplatforminputcontextplugin_p.h \ - ../../../../include/QtCore/qplugin.h \ - ../../../corelib/plugin/qplugin.h \ - ../../../../include/QtCore/qobject.h \ - ../../../corelib/kernel/qobject.h \ - ../../../../include/QtCore/qobjectdefs.h \ - ../../../corelib/kernel/qobjectdefs.h \ - ../../../../include/QtCore/qnamespace.h \ - ../../../corelib/global/qnamespace.h \ - ../../../../include/QtCore/qglobal.h \ - ../../../corelib/global/qglobal.h \ - ../../../../include/QtCore/qconfig.h \ - ../../../corelib/global/qconfig.h \ - ../../../../include/QtCore/qfeatures.h \ - ../../../corelib/global/qfeatures.h \ - ../../../../include/QtCore/qsystemdetection.h \ - ../../../corelib/global/qsystemdetection.h \ - ../../../../include/QtCore/qprocessordetection.h \ - ../../../corelib/global/qprocessordetection.h \ - ../../../../include/QtCore/qcompilerdetection.h \ - ../../../corelib/global/qcompilerdetection.h \ - ../../../../include/QtCore/qtypeinfo.h \ - ../../../corelib/global/qtypeinfo.h \ - ../../../../include/QtCore/qtypetraits.h \ - ../../../corelib/global/qtypetraits.h \ - ../../../../include/QtCore/qsysinfo.h \ - ../../../corelib/global/qsysinfo.h \ - ../../../../include/QtCore/qlogging.h \ - ../../../corelib/global/qlogging.h \ - ../../../../include/QtCore/qflags.h \ - ../../../corelib/global/qflags.h \ - ../../../../include/QtCore/qatomic.h \ - ../../../corelib/thread/qatomic.h \ - ../../../../include/QtCore/qbasicatomic.h \ - ../../../corelib/thread/qbasicatomic.h \ - ../../../../include/QtCore/qatomic_bootstrap.h \ - ../../../corelib/arch/qatomic_bootstrap.h \ - ../../../../include/QtCore/qgenericatomic.h \ - ../../../corelib/thread/qgenericatomic.h \ - ../../../../include/QtCore/qatomic_cxx11.h \ - ../../../corelib/arch/qatomic_cxx11.h \ - ../../../../include/QtCore/qatomic_gcc.h \ - ../../../corelib/arch/qatomic_gcc.h \ - ../../../../include/QtCore/qatomic_msvc.h \ - ../../../corelib/arch/qatomic_msvc.h \ - ../../../../include/QtCore/qatomic_armv7.h \ - ../../../corelib/arch/qatomic_armv7.h \ - ../../../../include/QtCore/qatomic_armv6.h \ - ../../../corelib/arch/qatomic_armv6.h \ - ../../../../include/QtCore/qatomic_armv5.h \ - ../../../corelib/arch/qatomic_armv5.h \ - ../../../../include/QtCore/qatomic_ia64.h \ - ../../../corelib/arch/qatomic_ia64.h \ - ../../../../include/QtCore/qatomic_mips.h \ - ../../../corelib/arch/qatomic_mips.h \ - ../../../../include/QtCore/qatomic_x86.h \ - ../../../corelib/arch/qatomic_x86.h \ - ../../../../include/QtCore/qatomic_unix.h \ - ../../../corelib/arch/qatomic_unix.h \ - ../../../../include/QtCore/qglobalstatic.h \ - ../../../corelib/global/qglobalstatic.h \ - ../../../../include/QtCore/qmutex.h \ - ../../../corelib/thread/qmutex.h \ - ../../../../include/QtCore/qnumeric.h \ - ../../../corelib/global/qnumeric.h \ - ../../../../include/QtCore/qobjectdefs_impl.h \ - ../../../corelib/kernel/qobjectdefs_impl.h \ - ../../../../include/QtCore/qstring.h \ - ../../../corelib/tools/qstring.h \ - ../../../../include/QtCore/qchar.h \ - ../../../corelib/tools/qchar.h \ - ../../../../include/QtCore/qbytearray.h \ - ../../../corelib/tools/qbytearray.h \ - ../../../../include/QtCore/qrefcount.h \ - ../../../corelib/tools/qrefcount.h \ - ../../../../include/QtCore/qarraydata.h \ - ../../../corelib/tools/qarraydata.h \ - ../../../../include/QtCore/qstringbuilder.h \ - ../../../corelib/tools/qstringbuilder.h \ - ../../../../include/QtCore/qlist.h \ - ../../../corelib/tools/qlist.h \ - ../../../../include/QtCore/qalgorithms.h \ - ../../../corelib/tools/qalgorithms.h \ - ../../../../include/QtCore/qiterator.h \ - ../../../corelib/tools/qiterator.h \ - ../../../../include/QtCore/qbytearraylist.h \ - ../../../corelib/tools/qbytearraylist.h \ - ../../../../include/QtCore/qstringlist.h \ - ../../../corelib/tools/qstringlist.h \ - ../../../../include/QtCore/qregexp.h \ - ../../../corelib/tools/qregexp.h \ - ../../../../include/QtCore/qstringmatcher.h \ - ../../../corelib/tools/qstringmatcher.h \ - ../../../../include/QtCore/qcoreevent.h \ - ../../../corelib/kernel/qcoreevent.h \ - ../../../../include/QtCore/qscopedpointer.h \ - ../../../corelib/tools/qscopedpointer.h \ - ../../../../include/QtCore/qmetatype.h \ - ../../../corelib/kernel/qmetatype.h \ - ../../../../include/QtCore/qvarlengtharray.h \ - ../../../corelib/tools/qvarlengtharray.h \ - ../../../../include/QtCore/qcontainerfwd.h \ - ../../../corelib/tools/qcontainerfwd.h \ - ../../../../include/QtCore/qisenum.h \ - ../../../corelib/global/qisenum.h \ - ../../../../include/QtCore/qobject_impl.h \ - ../../../corelib/kernel/qobject_impl.h \ - ../../../../include/QtCore/qpointer.h \ - ../../../corelib/kernel/qpointer.h \ - ../../../../include/QtCore/qsharedpointer.h \ - ../../../corelib/tools/qsharedpointer.h \ - ../../../../include/QtCore/qshareddata.h \ - ../../../corelib/tools/qshareddata.h \ - ../../../../include/QtCore/qhash.h \ - ../../../corelib/tools/qhash.h \ - ../../../../include/QtCore/qpair.h \ - ../../../corelib/tools/qpair.h \ - ../../../../include/QtCore/qsharedpointer_impl.h \ - ../../../corelib/tools/qsharedpointer_impl.h \ - ../../../../include/QtCore/qjsonobject.h \ - ../../../corelib/json/qjsonobject.h \ - ../../../../include/QtCore/qjsonvalue.h \ - ../../../corelib/json/qjsonvalue.h \ - ../../../../include/QtCore/qfactoryinterface.h \ - ../../../corelib/plugin/qfactoryinterface.h \ - ../../../../include/QtCore/QStringList \ - qfcitxplatforminputcontext.h \ - ../../../../include/QtGui/5.5.0/QtGui/qpa/qplatforminputcontext.h \ - ../../../gui/kernel/qplatforminputcontext.h \ - ../../../../include/QtGui/qinputmethod.h \ - ../../../gui/kernel/qinputmethod.h \ - ../../../../include/QtGui/QWindow \ - ../../../../include/QtGui/qwindow.h \ - ../../../gui/kernel/qwindow.h \ - ../../../../include/QtCore/QObject \ - ../../../../include/QtCore/QEvent \ - ../../../../include/QtCore/QMargins \ - ../../../../include/QtCore/qmargins.h \ - ../../../corelib/tools/qmargins.h \ - ../../../../include/QtCore/QRect \ - ../../../../include/QtCore/qrect.h \ - ../../../corelib/tools/qrect.h \ - ../../../../include/QtCore/qsize.h \ - ../../../corelib/tools/qsize.h \ - ../../../../include/QtCore/qpoint.h \ - ../../../corelib/tools/qpoint.h \ - ../../../../include/QtGui/qsurface.h \ - ../../../gui/kernel/qsurface.h \ - ../../../../include/QtGui/qsurfaceformat.h \ - ../../../gui/kernel/qsurfaceformat.h \ - ../../../../include/QtGui/qwindowdefs.h \ - ../../../gui/kernel/qwindowdefs.h \ - ../../../../include/QtGui/qwindowdefs_win.h \ - ../../../gui/kernel/qwindowdefs_win.h \ - ../../../../include/QtGui/qicon.h \ - ../../../gui/image/qicon.h \ - ../../../../include/QtGui/qpixmap.h \ - ../../../gui/image/qpixmap.h \ - ../../../../include/QtGui/qpaintdevice.h \ - ../../../gui/painting/qpaintdevice.h \ - ../../../../include/QtGui/qcolor.h \ - ../../../gui/painting/qcolor.h \ - ../../../../include/QtGui/qrgb.h \ - ../../../gui/painting/qrgb.h \ - ../../../../include/QtGui/qimage.h \ - ../../../gui/image/qimage.h \ - ../../../../include/QtGui/qtransform.h \ - ../../../gui/painting/qtransform.h \ - ../../../../include/QtGui/qmatrix.h \ - ../../../gui/painting/qmatrix.h \ - ../../../../include/QtGui/qpolygon.h \ - ../../../gui/painting/qpolygon.h \ - ../../../../include/QtCore/qvector.h \ - ../../../corelib/tools/qvector.h \ - ../../../../include/QtGui/qregion.h \ - ../../../gui/painting/qregion.h \ - ../../../../include/QtCore/qdatastream.h \ - ../../../corelib/io/qdatastream.h \ - ../../../../include/QtCore/qiodevice.h \ - ../../../corelib/io/qiodevice.h \ - ../../../../include/QtCore/qline.h \ - ../../../corelib/tools/qline.h \ - ../../../../include/QtGui/qpainterpath.h \ - ../../../gui/painting/qpainterpath.h \ - ../../../../include/QtGui/qpixelformat.h \ - ../../../gui/kernel/qpixelformat.h \ - ../../../../include/QtGui/qcursor.h \ - ../../../gui/kernel/qcursor.h \ - ../../../../include/QtGui/QKeyEvent \ - ../../../../include/QtGui/qevent.h \ - ../../../gui/kernel/qevent.h \ - ../../../../include/QtGui/qkeysequence.h \ - ../../../gui/kernel/qkeysequence.h \ - ../../../../include/QtCore/qvariant.h \ - ../../../corelib/kernel/qvariant.h \ - ../../../../include/QtCore/qmap.h \ - ../../../corelib/tools/qmap.h \ - ../../../../include/QtCore/qdebug.h \ - ../../../corelib/io/qdebug.h \ - ../../../../include/QtCore/qtextstream.h \ - ../../../corelib/io/qtextstream.h \ - ../../../../include/QtCore/qlocale.h \ - ../../../corelib/tools/qlocale.h \ - ../../../../include/QtCore/qset.h \ - ../../../corelib/tools/qset.h \ - ../../../../include/QtCore/qcontiguouscache.h \ - ../../../corelib/tools/qcontiguouscache.h \ - ../../../../include/QtCore/qurl.h \ - ../../../corelib/io/qurl.h \ - ../../../../include/QtCore/qurlquery.h \ - ../../../corelib/io/qurlquery.h \ - ../../../../include/QtCore/qfile.h \ - ../../../corelib/io/qfile.h \ - ../../../../include/QtCore/qfiledevice.h \ - ../../../corelib/io/qfiledevice.h \ - ../../../../include/QtGui/qvector2d.h \ - ../../../gui/math3d/qvector2d.h \ - ../../../../include/QtGui/qtouchdevice.h \ - ../../../gui/kernel/qtouchdevice.h \ - ../../../../include/QtDBus/QDBusConnection \ - ../../../../include/QtDBus/qdbusconnection.h \ - ../../../dbus/qdbusconnection.h \ - ../../../../include/QtDBus/qdbusmacros.h \ - ../../../dbus/qdbusmacros.h \ - ../../../../include/QtDBus/QDBusServiceWatcher \ - ../../../../include/QtDBus/qdbusservicewatcher.h \ - ../../../dbus/qdbusservicewatcher.h \ - ../../../../include/QtCore/QPointer \ - ../../../../include/QtCore/QFileSystemWatcher \ - ../../../../include/QtCore/qfilesystemwatcher.h \ - ../../../corelib/io/qfilesystemwatcher.h \ - fcitxqtformattedpreedit.h \ - fcitxqtdbusaddons_export.h \ - ../../../../include/QtCore/QMetaType \ - ../../../../include/QtDBus/QDBusArgument \ - ../../../../include/QtDBus/qdbusargument.h \ - ../../../dbus/qdbusargument.h \ - ../../../../include/QtDBus/qdbusextratypes.h \ - ../../../dbus/qdbusextratypes.h \ - fcitxqtinputcontextproxy.h \ - ../../../../include/QtCore/QByteArray \ - ../../../../include/QtCore/QList \ - ../../../../include/QtCore/QMap \ - ../../../../include/QtCore/QString \ - ../../../../include/QtCore/QVariant \ - ../../../../include/QtDBus/QtDBus \ - ../../../../include/QtDBus/QtDBusDepends \ - ../../../../include/QtCore/QtCore \ - ../../../../include/QtCore/QtCoreDepends \ - ../../../../include/QtCore/qabstractanimation.h \ - ../../../corelib/animation/qabstractanimation.h \ - ../../../../include/QtCore/qanimationgroup.h \ - ../../../corelib/animation/qanimationgroup.h \ - ../../../../include/QtCore/qparallelanimationgroup.h \ - ../../../corelib/animation/qparallelanimationgroup.h \ - ../../../../include/QtCore/qpauseanimation.h \ - ../../../corelib/animation/qpauseanimation.h \ - ../../../../include/QtCore/qpropertyanimation.h \ - ../../../corelib/animation/qpropertyanimation.h \ - ../../../../include/QtCore/qvariantanimation.h \ - ../../../corelib/animation/qvariantanimation.h \ - ../../../../include/QtCore/qeasingcurve.h \ - ../../../corelib/tools/qeasingcurve.h \ - ../../../../include/QtCore/qsequentialanimationgroup.h \ - ../../../corelib/animation/qsequentialanimationgroup.h \ - ../../../../include/QtCore/qtextcodec.h \ - ../../../corelib/codecs/qtextcodec.h \ - ../../../../include/QtCore/qendian.h \ - ../../../corelib/global/qendian.h \ - ../../../../include/QtCore/qlibraryinfo.h \ - ../../../corelib/global/qlibraryinfo.h \ - ../../../../include/QtCore/qdatetime.h \ - ../../../corelib/tools/qdatetime.h \ - ../../../../include/QtCore/qbuffer.h \ - ../../../corelib/io/qbuffer.h \ - ../../../../include/QtCore/qdir.h \ - ../../../corelib/io/qdir.h \ - ../../../../include/QtCore/qfileinfo.h \ - ../../../corelib/io/qfileinfo.h \ - ../../../../include/QtCore/qdiriterator.h \ - ../../../corelib/io/qdiriterator.h \ - ../../../../include/QtCore/qfileselector.h \ - ../../../corelib/io/qfileselector.h \ - ../../../../include/QtCore/qlockfile.h \ - ../../../corelib/io/qlockfile.h \ - ../../../../include/QtCore/qloggingcategory.h \ - ../../../corelib/io/qloggingcategory.h \ - ../../../../include/QtCore/qprocess.h \ - ../../../corelib/io/qprocess.h \ - ../../../../include/QtCore/qresource.h \ - ../../../corelib/io/qresource.h \ - ../../../../include/QtCore/qsavefile.h \ - ../../../corelib/io/qsavefile.h \ - ../../../../include/QtCore/qsettings.h \ - ../../../corelib/io/qsettings.h \ - ../../../../include/QtCore/qstandardpaths.h \ - ../../../corelib/io/qstandardpaths.h \ - ../../../../include/QtCore/qstorageinfo.h \ - ../../../corelib/io/qstorageinfo.h \ - ../../../../include/QtCore/qtemporarydir.h \ - ../../../corelib/io/qtemporarydir.h \ - ../../../../include/QtCore/QScopedPointer \ - ../../../../include/QtCore/qtemporaryfile.h \ - ../../../corelib/io/qtemporaryfile.h \ - ../../../../include/QtCore/qabstractitemmodel.h \ - ../../../corelib/itemmodels/qabstractitemmodel.h \ - ../../../../include/QtCore/qabstractproxymodel.h \ - ../../../corelib/itemmodels/qabstractproxymodel.h \ - ../../../../include/QtCore/qidentityproxymodel.h \ - ../../../corelib/itemmodels/qidentityproxymodel.h \ - ../../../../include/QtCore/qitemselectionmodel.h \ - ../../../corelib/itemmodels/qitemselectionmodel.h \ - ../../../../include/QtCore/qsortfilterproxymodel.h \ - ../../../corelib/itemmodels/qsortfilterproxymodel.h \ - ../../../../include/QtCore/qstringlistmodel.h \ - ../../../corelib/itemmodels/qstringlistmodel.h \ - ../../../../include/QtCore/qjsonarray.h \ - ../../../corelib/json/qjsonarray.h \ - ../../../../include/QtCore/qjsondocument.h \ - ../../../corelib/json/qjsondocument.h \ - ../../../../include/QtCore/qabstracteventdispatcher.h \ - ../../../corelib/kernel/qabstracteventdispatcher.h \ - ../../../../include/QtCore/qeventloop.h \ - ../../../corelib/kernel/qeventloop.h \ - ../../../../include/QtCore/qabstractnativeeventfilter.h \ - ../../../corelib/kernel/qabstractnativeeventfilter.h \ - ../../../../include/QtCore/qbasictimer.h \ - ../../../corelib/kernel/qbasictimer.h \ - ../../../../include/QtCore/qcoreapplication.h \ - ../../../corelib/kernel/qcoreapplication.h \ - ../../../../include/QtCore/qmath.h \ - ../../../corelib/kernel/qmath.h \ - ../../../../include/QtCore/qmetaobject.h \ - ../../../corelib/kernel/qmetaobject.h \ - ../../../../include/QtCore/qmimedata.h \ - ../../../corelib/kernel/qmimedata.h \ - ../../../../include/QtCore/qobjectcleanuphandler.h \ - ../../../corelib/kernel/qobjectcleanuphandler.h \ - ../../../../include/QtCore/qsharedmemory.h \ - ../../../corelib/kernel/qsharedmemory.h \ - ../../../../include/QtCore/qsignalmapper.h \ - ../../../corelib/kernel/qsignalmapper.h \ - ../../../../include/QtCore/qsocketnotifier.h \ - ../../../corelib/kernel/qsocketnotifier.h \ - ../../../../include/QtCore/qsystemsemaphore.h \ - ../../../corelib/kernel/qsystemsemaphore.h \ - ../../../../include/QtCore/qtimer.h \ - ../../../corelib/kernel/qtimer.h \ - ../../../../include/QtCore/qtranslator.h \ - ../../../corelib/kernel/qtranslator.h \ - ../../../../include/QtCore/qwineventnotifier.h \ - ../../../corelib/kernel/qwineventnotifier.h \ - ../../../../include/QtCore/qmimedatabase.h \ - ../../../corelib/mimetypes/qmimedatabase.h \ - ../../../../include/QtCore/qmimetype.h \ - ../../../corelib/mimetypes/qmimetype.h \ - ../../../../include/QtCore/qlibrary.h \ - ../../../corelib/plugin/qlibrary.h \ - ../../../../include/QtCore/qpluginloader.h \ - ../../../corelib/plugin/qpluginloader.h \ - ../../../../include/QtCore/quuid.h \ - ../../../corelib/plugin/quuid.h \ - ../../../../include/QtCore/qabstractstate.h \ - ../../../corelib/statemachine/qabstractstate.h \ - ../../../../include/QtCore/qabstracttransition.h \ - ../../../corelib/statemachine/qabstracttransition.h \ - ../../../../include/QtCore/qeventtransition.h \ - ../../../corelib/statemachine/qeventtransition.h \ - ../../../../include/QtCore/qfinalstate.h \ - ../../../corelib/statemachine/qfinalstate.h \ - ../../../../include/QtCore/qhistorystate.h \ - ../../../corelib/statemachine/qhistorystate.h \ - ../../../../include/QtCore/qsignaltransition.h \ - ../../../corelib/statemachine/qsignaltransition.h \ - ../../../../include/QtCore/qstate.h \ - ../../../corelib/statemachine/qstate.h \ - ../../../../include/QtCore/qstatemachine.h \ - ../../../corelib/statemachine/qstatemachine.h \ - ../../../../include/QtCore/qexception.h \ - ../../../corelib/thread/qexception.h \ - ../../../../include/QtCore/qfuture.h \ - ../../../corelib/thread/qfuture.h \ - ../../../../include/QtCore/qfutureinterface.h \ - ../../../corelib/thread/qfutureinterface.h \ - ../../../../include/QtCore/qrunnable.h \ - ../../../corelib/thread/qrunnable.h \ - ../../../../include/QtCore/qresultstore.h \ - ../../../corelib/thread/qresultstore.h \ - ../../../../include/QtCore/qfuturesynchronizer.h \ - ../../../corelib/thread/qfuturesynchronizer.h \ - ../../../../include/QtCore/qfuturewatcher.h \ - ../../../corelib/thread/qfuturewatcher.h \ - ../../../../include/QtCore/qreadwritelock.h \ - ../../../corelib/thread/qreadwritelock.h \ - ../../../../include/QtCore/qsemaphore.h \ - ../../../corelib/thread/qsemaphore.h \ - ../../../../include/QtCore/qthread.h \ - ../../../corelib/thread/qthread.h \ - ../../../../include/QtCore/qthreadpool.h \ - ../../../corelib/thread/qthreadpool.h \ - ../../../../include/QtCore/qthreadstorage.h \ - ../../../corelib/thread/qthreadstorage.h \ - ../../../../include/QtCore/qwaitcondition.h \ - ../../../corelib/thread/qwaitcondition.h \ - ../../../../include/QtCore/qarraydataops.h \ - ../../../corelib/tools/qarraydataops.h \ - ../../../../include/QtCore/qarraydatapointer.h \ - ../../../corelib/tools/qarraydatapointer.h \ - ../../../../include/QtCore/qbitarray.h \ - ../../../corelib/tools/qbitarray.h \ - ../../../../include/QtCore/qbytearraymatcher.h \ - ../../../corelib/tools/qbytearraymatcher.h \ - ../../../../include/QtCore/qcache.h \ - ../../../corelib/tools/qcache.h \ - ../../../../include/QtCore/qcollator.h \ - ../../../corelib/tools/qcollator.h \ - ../../../../include/QtCore/qcommandlineoption.h \ - ../../../corelib/tools/qcommandlineoption.h \ - ../../../../include/QtCore/qcommandlineparser.h \ - ../../../corelib/tools/qcommandlineparser.h \ - ../../../../include/QtCore/qcryptographichash.h \ - ../../../corelib/tools/qcryptographichash.h \ - ../../../../include/QtCore/qelapsedtimer.h \ - ../../../corelib/tools/qelapsedtimer.h \ - ../../../../include/QtCore/qlinkedlist.h \ - ../../../corelib/tools/qlinkedlist.h \ - ../../../../include/QtCore/qmessageauthenticationcode.h \ - ../../../corelib/tools/qmessageauthenticationcode.h \ - ../../../../include/QtCore/qqueue.h \ - ../../../corelib/tools/qqueue.h \ - ../../../../include/QtCore/qregularexpression.h \ - ../../../corelib/tools/qregularexpression.h \ - ../../../../include/QtCore/qscopedvaluerollback.h \ - ../../../corelib/tools/qscopedvaluerollback.h \ - ../../../../include/QtCore/qstack.h \ - ../../../corelib/tools/qstack.h \ - ../../../../include/QtCore/qtextboundaryfinder.h \ - ../../../corelib/tools/qtextboundaryfinder.h \ - ../../../../include/QtCore/qtimeline.h \ - ../../../corelib/tools/qtimeline.h \ - ../../../../include/QtCore/qtimezone.h \ - ../../../corelib/tools/qtimezone.h \ - ../../../../include/QtCore/qxmlstream.h \ - ../../../corelib/xml/qxmlstream.h \ - ../../../../include/QtCore/qtcoreversion.h \ - ../../../../include/QtDBus/qdbusabstractadaptor.h \ - ../../../dbus/qdbusabstractadaptor.h \ - ../../../../include/QtDBus/qdbusabstractinterface.h \ - ../../../dbus/qdbusabstractinterface.h \ - ../../../../include/QtDBus/qdbusmessage.h \ - ../../../dbus/qdbusmessage.h \ - ../../../../include/QtDBus/qdbuserror.h \ - ../../../dbus/qdbuserror.h \ - ../../../../include/QtDBus/qdbusconnectioninterface.h \ - ../../../dbus/qdbusconnectioninterface.h \ - ../../../../include/QtDBus/qdbusreply.h \ - ../../../dbus/qdbusreply.h \ - ../../../../include/QtDBus/qdbuspendingreply.h \ - ../../../dbus/qdbuspendingreply.h \ - ../../../../include/QtDBus/qdbuspendingcall.h \ - ../../../dbus/qdbuspendingcall.h \ - ../../../../include/QtDBus/qdbuscontext.h \ - ../../../dbus/qdbuscontext.h \ - ../../../../include/QtDBus/qdbusinterface.h \ - ../../../dbus/qdbusinterface.h \ - ../../../../include/QtDBus/qdbusmetatype.h \ - ../../../dbus/qdbusmetatype.h \ - ../../../../include/QtDBus/qdbusserver.h \ - ../../../dbus/qdbusserver.h \ - ../../../../include/QtDBus/qdbusunixfiledescriptor.h \ - ../../../dbus/qdbusunixfiledescriptor.h \ - ../../../../include/QtDBus/qdbusvirtualobject.h \ - ../../../dbus/qdbusvirtualobject.h \ - ../../../../include/QtDBus/qtdbusversion.h \ - main.h - /home/antanubis/TBuild/Libraries/QtStatic/qtbase/bin/moc $(DEFINES) -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/mkspecs/linux-g++ -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/src/plugins/platforminputcontexts/fcitx -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0 -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtDBus -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtCore -I/usr/include/c++/4.8 -I/usr/include/x86_64-linux-gnu/c++/4.8 -I/usr/include/c++/4.8/backward -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include main.h -o .moc/moc_main.cpp - -.moc/moc_qfcitxplatforminputcontext.cpp: ../../../../include/QtGui/5.5.0/QtGui/qpa/qplatforminputcontext.h \ - ../../../gui/kernel/qplatforminputcontext.h \ - ../../../../include/QtGui/qinputmethod.h \ - ../../../gui/kernel/qinputmethod.h \ - ../../../../include/QtCore/qobject.h \ - ../../../corelib/kernel/qobject.h \ - ../../../../include/QtCore/qobjectdefs.h \ - ../../../corelib/kernel/qobjectdefs.h \ - ../../../../include/QtCore/qnamespace.h \ - ../../../corelib/global/qnamespace.h \ - ../../../../include/QtCore/qglobal.h \ - ../../../corelib/global/qglobal.h \ - ../../../../include/QtCore/qconfig.h \ - ../../../corelib/global/qconfig.h \ - ../../../../include/QtCore/qfeatures.h \ - ../../../corelib/global/qfeatures.h \ - ../../../../include/QtCore/qsystemdetection.h \ - ../../../corelib/global/qsystemdetection.h \ - ../../../../include/QtCore/qprocessordetection.h \ - ../../../corelib/global/qprocessordetection.h \ - ../../../../include/QtCore/qcompilerdetection.h \ - ../../../corelib/global/qcompilerdetection.h \ - ../../../../include/QtCore/qtypeinfo.h \ - ../../../corelib/global/qtypeinfo.h \ - ../../../../include/QtCore/qtypetraits.h \ - ../../../corelib/global/qtypetraits.h \ - ../../../../include/QtCore/qsysinfo.h \ - ../../../corelib/global/qsysinfo.h \ - ../../../../include/QtCore/qlogging.h \ - ../../../corelib/global/qlogging.h \ - ../../../../include/QtCore/qflags.h \ - ../../../corelib/global/qflags.h \ - ../../../../include/QtCore/qatomic.h \ - ../../../corelib/thread/qatomic.h \ - ../../../../include/QtCore/qbasicatomic.h \ - ../../../corelib/thread/qbasicatomic.h \ - ../../../../include/QtCore/qatomic_bootstrap.h \ - ../../../corelib/arch/qatomic_bootstrap.h \ - ../../../../include/QtCore/qgenericatomic.h \ - ../../../corelib/thread/qgenericatomic.h \ - ../../../../include/QtCore/qatomic_cxx11.h \ - ../../../corelib/arch/qatomic_cxx11.h \ - ../../../../include/QtCore/qatomic_gcc.h \ - ../../../corelib/arch/qatomic_gcc.h \ - ../../../../include/QtCore/qatomic_msvc.h \ - ../../../corelib/arch/qatomic_msvc.h \ - ../../../../include/QtCore/qatomic_armv7.h \ - ../../../corelib/arch/qatomic_armv7.h \ - ../../../../include/QtCore/qatomic_armv6.h \ - ../../../corelib/arch/qatomic_armv6.h \ - ../../../../include/QtCore/qatomic_armv5.h \ - ../../../corelib/arch/qatomic_armv5.h \ - ../../../../include/QtCore/qatomic_ia64.h \ - ../../../corelib/arch/qatomic_ia64.h \ - ../../../../include/QtCore/qatomic_mips.h \ - ../../../corelib/arch/qatomic_mips.h \ - ../../../../include/QtCore/qatomic_x86.h \ - ../../../corelib/arch/qatomic_x86.h \ - ../../../../include/QtCore/qatomic_unix.h \ - ../../../corelib/arch/qatomic_unix.h \ - ../../../../include/QtCore/qglobalstatic.h \ - ../../../corelib/global/qglobalstatic.h \ - ../../../../include/QtCore/qmutex.h \ - ../../../corelib/thread/qmutex.h \ - ../../../../include/QtCore/qnumeric.h \ - ../../../corelib/global/qnumeric.h \ - ../../../../include/QtCore/qobjectdefs_impl.h \ - ../../../corelib/kernel/qobjectdefs_impl.h \ - ../../../../include/QtCore/qstring.h \ - ../../../corelib/tools/qstring.h \ - ../../../../include/QtCore/qchar.h \ - ../../../corelib/tools/qchar.h \ - ../../../../include/QtCore/qbytearray.h \ - ../../../corelib/tools/qbytearray.h \ - ../../../../include/QtCore/qrefcount.h \ - ../../../corelib/tools/qrefcount.h \ - ../../../../include/QtCore/qarraydata.h \ - ../../../corelib/tools/qarraydata.h \ - ../../../../include/QtCore/qstringbuilder.h \ - ../../../corelib/tools/qstringbuilder.h \ - ../../../../include/QtCore/qlist.h \ - ../../../corelib/tools/qlist.h \ - ../../../../include/QtCore/qalgorithms.h \ - ../../../corelib/tools/qalgorithms.h \ - ../../../../include/QtCore/qiterator.h \ - ../../../corelib/tools/qiterator.h \ - ../../../../include/QtCore/qbytearraylist.h \ - ../../../corelib/tools/qbytearraylist.h \ - ../../../../include/QtCore/qstringlist.h \ - ../../../corelib/tools/qstringlist.h \ - ../../../../include/QtCore/qregexp.h \ - ../../../corelib/tools/qregexp.h \ - ../../../../include/QtCore/qstringmatcher.h \ - ../../../corelib/tools/qstringmatcher.h \ - ../../../../include/QtCore/qcoreevent.h \ - ../../../corelib/kernel/qcoreevent.h \ - ../../../../include/QtCore/qscopedpointer.h \ - ../../../corelib/tools/qscopedpointer.h \ - ../../../../include/QtCore/qmetatype.h \ - ../../../corelib/kernel/qmetatype.h \ - ../../../../include/QtCore/qvarlengtharray.h \ - ../../../corelib/tools/qvarlengtharray.h \ - ../../../../include/QtCore/qcontainerfwd.h \ - ../../../corelib/tools/qcontainerfwd.h \ - ../../../../include/QtCore/qisenum.h \ - ../../../corelib/global/qisenum.h \ - ../../../../include/QtCore/qobject_impl.h \ - ../../../corelib/kernel/qobject_impl.h \ - ../../../../include/QtGui/QWindow \ - ../../../../include/QtGui/qwindow.h \ - ../../../gui/kernel/qwindow.h \ - ../../../../include/QtCore/QObject \ - ../../../../include/QtCore/QEvent \ - ../../../../include/QtCore/QMargins \ - ../../../../include/QtCore/qmargins.h \ - ../../../corelib/tools/qmargins.h \ - ../../../../include/QtCore/QRect \ - ../../../../include/QtCore/qrect.h \ - ../../../corelib/tools/qrect.h \ - ../../../../include/QtCore/qsize.h \ - ../../../corelib/tools/qsize.h \ - ../../../../include/QtCore/qpoint.h \ - ../../../corelib/tools/qpoint.h \ - ../../../../include/QtGui/qsurface.h \ - ../../../gui/kernel/qsurface.h \ - ../../../../include/QtGui/qsurfaceformat.h \ - ../../../gui/kernel/qsurfaceformat.h \ - ../../../../include/QtCore/qpair.h \ - ../../../corelib/tools/qpair.h \ - ../../../../include/QtGui/qwindowdefs.h \ - ../../../gui/kernel/qwindowdefs.h \ - ../../../../include/QtGui/qwindowdefs_win.h \ - ../../../gui/kernel/qwindowdefs_win.h \ - ../../../../include/QtGui/qicon.h \ - ../../../gui/image/qicon.h \ - ../../../../include/QtGui/qpixmap.h \ - ../../../gui/image/qpixmap.h \ - ../../../../include/QtGui/qpaintdevice.h \ - ../../../gui/painting/qpaintdevice.h \ - ../../../../include/QtGui/qcolor.h \ - ../../../gui/painting/qcolor.h \ - ../../../../include/QtGui/qrgb.h \ - ../../../gui/painting/qrgb.h \ - ../../../../include/QtCore/qsharedpointer.h \ - ../../../corelib/tools/qsharedpointer.h \ - ../../../../include/QtCore/qshareddata.h \ - ../../../corelib/tools/qshareddata.h \ - ../../../../include/QtCore/qhash.h \ - ../../../corelib/tools/qhash.h \ - ../../../../include/QtCore/qsharedpointer_impl.h \ - ../../../corelib/tools/qsharedpointer_impl.h \ - ../../../../include/QtGui/qimage.h \ - ../../../gui/image/qimage.h \ - ../../../../include/QtGui/qtransform.h \ - ../../../gui/painting/qtransform.h \ - ../../../../include/QtGui/qmatrix.h \ - ../../../gui/painting/qmatrix.h \ - ../../../../include/QtGui/qpolygon.h \ - ../../../gui/painting/qpolygon.h \ - ../../../../include/QtCore/qvector.h \ - ../../../corelib/tools/qvector.h \ - ../../../../include/QtGui/qregion.h \ - ../../../gui/painting/qregion.h \ - ../../../../include/QtCore/qdatastream.h \ - ../../../corelib/io/qdatastream.h \ - ../../../../include/QtCore/qiodevice.h \ - ../../../corelib/io/qiodevice.h \ - ../../../../include/QtCore/qline.h \ - ../../../corelib/tools/qline.h \ - ../../../../include/QtGui/qpainterpath.h \ - ../../../gui/painting/qpainterpath.h \ - ../../../../include/QtGui/qpixelformat.h \ - ../../../gui/kernel/qpixelformat.h \ - ../../../../include/QtGui/qcursor.h \ - ../../../gui/kernel/qcursor.h \ - ../../../../include/QtGui/QKeyEvent \ - ../../../../include/QtGui/qevent.h \ - ../../../gui/kernel/qevent.h \ - ../../../../include/QtGui/qkeysequence.h \ - ../../../gui/kernel/qkeysequence.h \ - ../../../../include/QtCore/qvariant.h \ - ../../../corelib/kernel/qvariant.h \ - ../../../../include/QtCore/qmap.h \ - ../../../corelib/tools/qmap.h \ - ../../../../include/QtCore/qdebug.h \ - ../../../corelib/io/qdebug.h \ - ../../../../include/QtCore/qtextstream.h \ - ../../../corelib/io/qtextstream.h \ - ../../../../include/QtCore/qlocale.h \ - ../../../corelib/tools/qlocale.h \ - ../../../../include/QtCore/qset.h \ - ../../../corelib/tools/qset.h \ - ../../../../include/QtCore/qcontiguouscache.h \ - ../../../corelib/tools/qcontiguouscache.h \ - ../../../../include/QtCore/qurl.h \ - ../../../corelib/io/qurl.h \ - ../../../../include/QtCore/qurlquery.h \ - ../../../corelib/io/qurlquery.h \ - ../../../../include/QtCore/qfile.h \ - ../../../corelib/io/qfile.h \ - ../../../../include/QtCore/qfiledevice.h \ - ../../../corelib/io/qfiledevice.h \ - ../../../../include/QtGui/qvector2d.h \ - ../../../gui/math3d/qvector2d.h \ - ../../../../include/QtGui/qtouchdevice.h \ - ../../../gui/kernel/qtouchdevice.h \ - ../../../../include/QtDBus/QDBusConnection \ - ../../../../include/QtDBus/qdbusconnection.h \ - ../../../dbus/qdbusconnection.h \ - ../../../../include/QtDBus/qdbusmacros.h \ - ../../../dbus/qdbusmacros.h \ - ../../../../include/QtDBus/QDBusServiceWatcher \ - ../../../../include/QtDBus/qdbusservicewatcher.h \ - ../../../dbus/qdbusservicewatcher.h \ - ../../../../include/QtCore/QPointer \ - ../../../../include/QtCore/qpointer.h \ - ../../../corelib/kernel/qpointer.h \ - ../../../../include/QtCore/QFileSystemWatcher \ - ../../../../include/QtCore/qfilesystemwatcher.h \ - ../../../corelib/io/qfilesystemwatcher.h \ - fcitxqtformattedpreedit.h \ - fcitxqtdbusaddons_export.h \ - ../../../../include/QtCore/QMetaType \ - ../../../../include/QtDBus/QDBusArgument \ - ../../../../include/QtDBus/qdbusargument.h \ - ../../../dbus/qdbusargument.h \ - ../../../../include/QtDBus/qdbusextratypes.h \ - ../../../dbus/qdbusextratypes.h \ - fcitxqtinputcontextproxy.h \ - ../../../../include/QtCore/QByteArray \ - ../../../../include/QtCore/QList \ - ../../../../include/QtCore/QMap \ - ../../../../include/QtCore/QString \ - ../../../../include/QtCore/QStringList \ - ../../../../include/QtCore/QVariant \ - ../../../../include/QtDBus/QtDBus \ - ../../../../include/QtDBus/QtDBusDepends \ - ../../../../include/QtCore/QtCore \ - ../../../../include/QtCore/QtCoreDepends \ - ../../../../include/QtCore/qabstractanimation.h \ - ../../../corelib/animation/qabstractanimation.h \ - ../../../../include/QtCore/qanimationgroup.h \ - ../../../corelib/animation/qanimationgroup.h \ - ../../../../include/QtCore/qparallelanimationgroup.h \ - ../../../corelib/animation/qparallelanimationgroup.h \ - ../../../../include/QtCore/qpauseanimation.h \ - ../../../corelib/animation/qpauseanimation.h \ - ../../../../include/QtCore/qpropertyanimation.h \ - ../../../corelib/animation/qpropertyanimation.h \ - ../../../../include/QtCore/qvariantanimation.h \ - ../../../corelib/animation/qvariantanimation.h \ - ../../../../include/QtCore/qeasingcurve.h \ - ../../../corelib/tools/qeasingcurve.h \ - ../../../../include/QtCore/qsequentialanimationgroup.h \ - ../../../corelib/animation/qsequentialanimationgroup.h \ - ../../../../include/QtCore/qtextcodec.h \ - ../../../corelib/codecs/qtextcodec.h \ - ../../../../include/QtCore/qendian.h \ - ../../../corelib/global/qendian.h \ - ../../../../include/QtCore/qlibraryinfo.h \ - ../../../corelib/global/qlibraryinfo.h \ - ../../../../include/QtCore/qdatetime.h \ - ../../../corelib/tools/qdatetime.h \ - ../../../../include/QtCore/qbuffer.h \ - ../../../corelib/io/qbuffer.h \ - ../../../../include/QtCore/qdir.h \ - ../../../corelib/io/qdir.h \ - ../../../../include/QtCore/qfileinfo.h \ - ../../../corelib/io/qfileinfo.h \ - ../../../../include/QtCore/qdiriterator.h \ - ../../../corelib/io/qdiriterator.h \ - ../../../../include/QtCore/qfileselector.h \ - ../../../corelib/io/qfileselector.h \ - ../../../../include/QtCore/qlockfile.h \ - ../../../corelib/io/qlockfile.h \ - ../../../../include/QtCore/qloggingcategory.h \ - ../../../corelib/io/qloggingcategory.h \ - ../../../../include/QtCore/qprocess.h \ - ../../../corelib/io/qprocess.h \ - ../../../../include/QtCore/qresource.h \ - ../../../corelib/io/qresource.h \ - ../../../../include/QtCore/qsavefile.h \ - ../../../corelib/io/qsavefile.h \ - ../../../../include/QtCore/qsettings.h \ - ../../../corelib/io/qsettings.h \ - ../../../../include/QtCore/qstandardpaths.h \ - ../../../corelib/io/qstandardpaths.h \ - ../../../../include/QtCore/qstorageinfo.h \ - ../../../corelib/io/qstorageinfo.h \ - ../../../../include/QtCore/qtemporarydir.h \ - ../../../corelib/io/qtemporarydir.h \ - ../../../../include/QtCore/QScopedPointer \ - ../../../../include/QtCore/qtemporaryfile.h \ - ../../../corelib/io/qtemporaryfile.h \ - ../../../../include/QtCore/qabstractitemmodel.h \ - ../../../corelib/itemmodels/qabstractitemmodel.h \ - ../../../../include/QtCore/qabstractproxymodel.h \ - ../../../corelib/itemmodels/qabstractproxymodel.h \ - ../../../../include/QtCore/qidentityproxymodel.h \ - ../../../corelib/itemmodels/qidentityproxymodel.h \ - ../../../../include/QtCore/qitemselectionmodel.h \ - ../../../corelib/itemmodels/qitemselectionmodel.h \ - ../../../../include/QtCore/qsortfilterproxymodel.h \ - ../../../corelib/itemmodels/qsortfilterproxymodel.h \ - ../../../../include/QtCore/qstringlistmodel.h \ - ../../../corelib/itemmodels/qstringlistmodel.h \ - ../../../../include/QtCore/qjsonarray.h \ - ../../../corelib/json/qjsonarray.h \ - ../../../../include/QtCore/qjsonvalue.h \ - ../../../corelib/json/qjsonvalue.h \ - ../../../../include/QtCore/qjsondocument.h \ - ../../../corelib/json/qjsondocument.h \ - ../../../../include/QtCore/qjsonobject.h \ - ../../../corelib/json/qjsonobject.h \ - ../../../../include/QtCore/qabstracteventdispatcher.h \ - ../../../corelib/kernel/qabstracteventdispatcher.h \ - ../../../../include/QtCore/qeventloop.h \ - ../../../corelib/kernel/qeventloop.h \ - ../../../../include/QtCore/qabstractnativeeventfilter.h \ - ../../../corelib/kernel/qabstractnativeeventfilter.h \ - ../../../../include/QtCore/qbasictimer.h \ - ../../../corelib/kernel/qbasictimer.h \ - ../../../../include/QtCore/qcoreapplication.h \ - ../../../corelib/kernel/qcoreapplication.h \ - ../../../../include/QtCore/qmath.h \ - ../../../corelib/kernel/qmath.h \ - ../../../../include/QtCore/qmetaobject.h \ - ../../../corelib/kernel/qmetaobject.h \ - ../../../../include/QtCore/qmimedata.h \ - ../../../corelib/kernel/qmimedata.h \ - ../../../../include/QtCore/qobjectcleanuphandler.h \ - ../../../corelib/kernel/qobjectcleanuphandler.h \ - ../../../../include/QtCore/qsharedmemory.h \ - ../../../corelib/kernel/qsharedmemory.h \ - ../../../../include/QtCore/qsignalmapper.h \ - ../../../corelib/kernel/qsignalmapper.h \ - ../../../../include/QtCore/qsocketnotifier.h \ - ../../../corelib/kernel/qsocketnotifier.h \ - ../../../../include/QtCore/qsystemsemaphore.h \ - ../../../corelib/kernel/qsystemsemaphore.h \ - ../../../../include/QtCore/qtimer.h \ - ../../../corelib/kernel/qtimer.h \ - ../../../../include/QtCore/qtranslator.h \ - ../../../corelib/kernel/qtranslator.h \ - ../../../../include/QtCore/qwineventnotifier.h \ - ../../../corelib/kernel/qwineventnotifier.h \ - ../../../../include/QtCore/qmimedatabase.h \ - ../../../corelib/mimetypes/qmimedatabase.h \ - ../../../../include/QtCore/qmimetype.h \ - ../../../corelib/mimetypes/qmimetype.h \ - ../../../../include/QtCore/qfactoryinterface.h \ - ../../../corelib/plugin/qfactoryinterface.h \ - ../../../../include/QtCore/qlibrary.h \ - ../../../corelib/plugin/qlibrary.h \ - ../../../../include/QtCore/qplugin.h \ - ../../../corelib/plugin/qplugin.h \ - ../../../../include/QtCore/qpluginloader.h \ - ../../../corelib/plugin/qpluginloader.h \ - ../../../../include/QtCore/quuid.h \ - ../../../corelib/plugin/quuid.h \ - ../../../../include/QtCore/qabstractstate.h \ - ../../../corelib/statemachine/qabstractstate.h \ - ../../../../include/QtCore/qabstracttransition.h \ - ../../../corelib/statemachine/qabstracttransition.h \ - ../../../../include/QtCore/qeventtransition.h \ - ../../../corelib/statemachine/qeventtransition.h \ - ../../../../include/QtCore/qfinalstate.h \ - ../../../corelib/statemachine/qfinalstate.h \ - ../../../../include/QtCore/qhistorystate.h \ - ../../../corelib/statemachine/qhistorystate.h \ - ../../../../include/QtCore/qsignaltransition.h \ - ../../../corelib/statemachine/qsignaltransition.h \ - ../../../../include/QtCore/qstate.h \ - ../../../corelib/statemachine/qstate.h \ - ../../../../include/QtCore/qstatemachine.h \ - ../../../corelib/statemachine/qstatemachine.h \ - ../../../../include/QtCore/qexception.h \ - ../../../corelib/thread/qexception.h \ - ../../../../include/QtCore/qfuture.h \ - ../../../corelib/thread/qfuture.h \ - ../../../../include/QtCore/qfutureinterface.h \ - ../../../corelib/thread/qfutureinterface.h \ - ../../../../include/QtCore/qrunnable.h \ - ../../../corelib/thread/qrunnable.h \ - ../../../../include/QtCore/qresultstore.h \ - ../../../corelib/thread/qresultstore.h \ - ../../../../include/QtCore/qfuturesynchronizer.h \ - ../../../corelib/thread/qfuturesynchronizer.h \ - ../../../../include/QtCore/qfuturewatcher.h \ - ../../../corelib/thread/qfuturewatcher.h \ - ../../../../include/QtCore/qreadwritelock.h \ - ../../../corelib/thread/qreadwritelock.h \ - ../../../../include/QtCore/qsemaphore.h \ - ../../../corelib/thread/qsemaphore.h \ - ../../../../include/QtCore/qthread.h \ - ../../../corelib/thread/qthread.h \ - ../../../../include/QtCore/qthreadpool.h \ - ../../../corelib/thread/qthreadpool.h \ - ../../../../include/QtCore/qthreadstorage.h \ - ../../../corelib/thread/qthreadstorage.h \ - ../../../../include/QtCore/qwaitcondition.h \ - ../../../corelib/thread/qwaitcondition.h \ - ../../../../include/QtCore/qarraydataops.h \ - ../../../corelib/tools/qarraydataops.h \ - ../../../../include/QtCore/qarraydatapointer.h \ - ../../../corelib/tools/qarraydatapointer.h \ - ../../../../include/QtCore/qbitarray.h \ - ../../../corelib/tools/qbitarray.h \ - ../../../../include/QtCore/qbytearraymatcher.h \ - ../../../corelib/tools/qbytearraymatcher.h \ - ../../../../include/QtCore/qcache.h \ - ../../../corelib/tools/qcache.h \ - ../../../../include/QtCore/qcollator.h \ - ../../../corelib/tools/qcollator.h \ - ../../../../include/QtCore/qcommandlineoption.h \ - ../../../corelib/tools/qcommandlineoption.h \ - ../../../../include/QtCore/qcommandlineparser.h \ - ../../../corelib/tools/qcommandlineparser.h \ - ../../../../include/QtCore/qcryptographichash.h \ - ../../../corelib/tools/qcryptographichash.h \ - ../../../../include/QtCore/qelapsedtimer.h \ - ../../../corelib/tools/qelapsedtimer.h \ - ../../../../include/QtCore/qlinkedlist.h \ - ../../../corelib/tools/qlinkedlist.h \ - ../../../../include/QtCore/qmessageauthenticationcode.h \ - ../../../corelib/tools/qmessageauthenticationcode.h \ - ../../../../include/QtCore/qqueue.h \ - ../../../corelib/tools/qqueue.h \ - ../../../../include/QtCore/qregularexpression.h \ - ../../../corelib/tools/qregularexpression.h \ - ../../../../include/QtCore/qscopedvaluerollback.h \ - ../../../corelib/tools/qscopedvaluerollback.h \ - ../../../../include/QtCore/qstack.h \ - ../../../corelib/tools/qstack.h \ - ../../../../include/QtCore/qtextboundaryfinder.h \ - ../../../corelib/tools/qtextboundaryfinder.h \ - ../../../../include/QtCore/qtimeline.h \ - ../../../corelib/tools/qtimeline.h \ - ../../../../include/QtCore/qtimezone.h \ - ../../../corelib/tools/qtimezone.h \ - ../../../../include/QtCore/qxmlstream.h \ - ../../../corelib/xml/qxmlstream.h \ - ../../../../include/QtCore/qtcoreversion.h \ - ../../../../include/QtDBus/qdbusabstractadaptor.h \ - ../../../dbus/qdbusabstractadaptor.h \ - ../../../../include/QtDBus/qdbusabstractinterface.h \ - ../../../dbus/qdbusabstractinterface.h \ - ../../../../include/QtDBus/qdbusmessage.h \ - ../../../dbus/qdbusmessage.h \ - ../../../../include/QtDBus/qdbuserror.h \ - ../../../dbus/qdbuserror.h \ - ../../../../include/QtDBus/qdbusconnectioninterface.h \ - ../../../dbus/qdbusconnectioninterface.h \ - ../../../../include/QtDBus/qdbusreply.h \ - ../../../dbus/qdbusreply.h \ - ../../../../include/QtDBus/qdbuspendingreply.h \ - ../../../dbus/qdbuspendingreply.h \ - ../../../../include/QtDBus/qdbuspendingcall.h \ - ../../../dbus/qdbuspendingcall.h \ - ../../../../include/QtDBus/qdbuscontext.h \ - ../../../dbus/qdbuscontext.h \ - ../../../../include/QtDBus/qdbusinterface.h \ - ../../../dbus/qdbusinterface.h \ - ../../../../include/QtDBus/qdbusmetatype.h \ - ../../../dbus/qdbusmetatype.h \ - ../../../../include/QtDBus/qdbusserver.h \ - ../../../dbus/qdbusserver.h \ - ../../../../include/QtDBus/qdbusunixfiledescriptor.h \ - ../../../dbus/qdbusunixfiledescriptor.h \ - ../../../../include/QtDBus/qdbusvirtualobject.h \ - ../../../dbus/qdbusvirtualobject.h \ - ../../../../include/QtDBus/qtdbusversion.h \ - qfcitxplatforminputcontext.h - /home/antanubis/TBuild/Libraries/QtStatic/qtbase/bin/moc $(DEFINES) -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/mkspecs/linux-g++ -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/src/plugins/platforminputcontexts/fcitx -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0 -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui/5.5.0/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtGui -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtDBus -I/home/antanubis/TBuild/Libraries/QtStatic/qtbase/include/QtCore -I/usr/include/c++/4.8 -I/usr/include/x86_64-linux-gnu/c++/4.8 -I/usr/include/c++/4.8/backward -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include qfcitxplatforminputcontext.h -o .moc/moc_qfcitxplatforminputcontext.cpp - -compiler_moc_source_make_all: -compiler_moc_source_clean: -compiler_yacc_decl_make_all: -compiler_yacc_decl_clean: -compiler_yacc_impl_make_all: -compiler_yacc_impl_clean: -compiler_lex_make_all: -compiler_lex_clean: -compiler_clean: compiler_moc_header_clean - -####### Compile - -.obj/fcitxqtconnection.o: fcitxqtconnection.cpp fcitxqtconnection_p.h \ - fcitxqtconnection.h \ - fcitxqtdbusaddons_export.h \ - ../../../../include/QtCore/QObject \ - ../../../../include/QtCore/qobject.h \ - ../../../corelib/kernel/qobject.h \ - ../../../../include/QtCore/qobjectdefs.h \ - ../../../corelib/kernel/qobjectdefs.h \ - ../../../../include/QtCore/qnamespace.h \ - ../../../corelib/global/qnamespace.h \ - ../../../../include/QtCore/qglobal.h \ - ../../../corelib/global/qglobal.h \ - ../../../../include/QtCore/qconfig.h \ - ../../../corelib/global/qconfig.h \ - ../../../../include/QtCore/qfeatures.h \ - ../../../corelib/global/qfeatures.h \ - ../../../../include/QtCore/qsystemdetection.h \ - ../../../corelib/global/qsystemdetection.h \ - ../../../../include/QtCore/qprocessordetection.h \ - ../../../corelib/global/qprocessordetection.h \ - ../../../../include/QtCore/qcompilerdetection.h \ - ../../../corelib/global/qcompilerdetection.h \ - ../../../../include/QtCore/qtypeinfo.h \ - ../../../corelib/global/qtypeinfo.h \ - ../../../../include/QtCore/qtypetraits.h \ - ../../../corelib/global/qtypetraits.h \ - ../../../../include/QtCore/qsysinfo.h \ - ../../../corelib/global/qsysinfo.h \ - ../../../../include/QtCore/qlogging.h \ - ../../../corelib/global/qlogging.h \ - ../../../../include/QtCore/qflags.h \ - ../../../corelib/global/qflags.h \ - ../../../../include/QtCore/qatomic.h \ - ../../../corelib/thread/qatomic.h \ - ../../../../include/QtCore/qbasicatomic.h \ - ../../../corelib/thread/qbasicatomic.h \ - ../../../../include/QtCore/qatomic_bootstrap.h \ - ../../../corelib/arch/qatomic_bootstrap.h \ - ../../../../include/QtCore/qgenericatomic.h \ - ../../../corelib/thread/qgenericatomic.h \ - ../../../../include/QtCore/qatomic_cxx11.h \ - ../../../corelib/arch/qatomic_cxx11.h \ - ../../../../include/QtCore/qatomic_gcc.h \ - ../../../corelib/arch/qatomic_gcc.h \ - ../../../../include/QtCore/qatomic_msvc.h \ - ../../../corelib/arch/qatomic_msvc.h \ - ../../../../include/QtCore/qatomic_armv7.h \ - ../../../corelib/arch/qatomic_armv7.h \ - ../../../../include/QtCore/qatomic_armv6.h \ - ../../../corelib/arch/qatomic_armv6.h \ - ../../../../include/QtCore/qatomic_armv5.h \ - ../../../corelib/arch/qatomic_armv5.h \ - ../../../../include/QtCore/qatomic_ia64.h \ - ../../../corelib/arch/qatomic_ia64.h \ - ../../../../include/QtCore/qatomic_mips.h \ - ../../../corelib/arch/qatomic_mips.h \ - ../../../../include/QtCore/qatomic_x86.h \ - ../../../corelib/arch/qatomic_x86.h \ - ../../../../include/QtCore/qatomic_unix.h \ - ../../../corelib/arch/qatomic_unix.h \ - ../../../../include/QtCore/qglobalstatic.h \ - ../../../corelib/global/qglobalstatic.h \ - ../../../../include/QtCore/qmutex.h \ - ../../../corelib/thread/qmutex.h \ - ../../../../include/QtCore/qnumeric.h \ - ../../../corelib/global/qnumeric.h \ - ../../../../include/QtCore/qobjectdefs_impl.h \ - ../../../corelib/kernel/qobjectdefs_impl.h \ - ../../../../include/QtCore/qstring.h \ - ../../../corelib/tools/qstring.h \ - ../../../../include/QtCore/qchar.h \ - ../../../corelib/tools/qchar.h \ - ../../../../include/QtCore/qbytearray.h \ - ../../../corelib/tools/qbytearray.h \ - ../../../../include/QtCore/qrefcount.h \ - ../../../corelib/tools/qrefcount.h \ - ../../../../include/QtCore/qarraydata.h \ - ../../../corelib/tools/qarraydata.h \ - ../../../../include/QtCore/qstringbuilder.h \ - ../../../corelib/tools/qstringbuilder.h \ - ../../../../include/QtCore/qlist.h \ - ../../../corelib/tools/qlist.h \ - ../../../../include/QtCore/qalgorithms.h \ - ../../../corelib/tools/qalgorithms.h \ - ../../../../include/QtCore/qiterator.h \ - ../../../corelib/tools/qiterator.h \ - ../../../../include/QtCore/qbytearraylist.h \ - ../../../corelib/tools/qbytearraylist.h \ - ../../../../include/QtCore/qstringlist.h \ - ../../../corelib/tools/qstringlist.h \ - ../../../../include/QtCore/qregexp.h \ - ../../../corelib/tools/qregexp.h \ - ../../../../include/QtCore/qstringmatcher.h \ - ../../../corelib/tools/qstringmatcher.h \ - ../../../../include/QtCore/qcoreevent.h \ - ../../../corelib/kernel/qcoreevent.h \ - ../../../../include/QtCore/qscopedpointer.h \ - ../../../corelib/tools/qscopedpointer.h \ - ../../../../include/QtCore/qmetatype.h \ - ../../../corelib/kernel/qmetatype.h \ - ../../../../include/QtCore/qvarlengtharray.h \ - ../../../corelib/tools/qvarlengtharray.h \ - ../../../../include/QtCore/qcontainerfwd.h \ - ../../../corelib/tools/qcontainerfwd.h \ - ../../../../include/QtCore/qisenum.h \ - ../../../corelib/global/qisenum.h \ - ../../../../include/QtCore/qobject_impl.h \ - ../../../corelib/kernel/qobject_impl.h \ - ../../../../include/QtCore/QWeakPointer \ - ../../../../include/QtCore/qsharedpointer.h \ - ../../../corelib/tools/qsharedpointer.h \ - ../../../../include/QtCore/qshareddata.h \ - ../../../corelib/tools/qshareddata.h \ - ../../../../include/QtCore/qhash.h \ - ../../../corelib/tools/qhash.h \ - ../../../../include/QtCore/qpair.h \ - ../../../corelib/tools/qpair.h \ - ../../../../include/QtCore/qsharedpointer_impl.h \ - ../../../corelib/tools/qsharedpointer_impl.h \ - ../../../../include/QtCore/QFileSystemWatcher \ - ../../../../include/QtCore/qfilesystemwatcher.h \ - ../../../corelib/io/qfilesystemwatcher.h \ - ../../../../include/QtDBus/QDBusConnection \ - ../../../../include/QtDBus/qdbusconnection.h \ - ../../../dbus/qdbusconnection.h \ - ../../../../include/QtDBus/qdbusmacros.h \ - ../../../dbus/qdbusmacros.h \ - ../../../../include/QtCore/qvariant.h \ - ../../../corelib/kernel/qvariant.h \ - ../../../../include/QtCore/qmap.h \ - ../../../corelib/tools/qmap.h \ - ../../../../include/QtCore/qdebug.h \ - ../../../corelib/io/qdebug.h \ - ../../../../include/QtCore/qtextstream.h \ - ../../../corelib/io/qtextstream.h \ - ../../../../include/QtCore/qiodevice.h \ - ../../../corelib/io/qiodevice.h \ - ../../../../include/QtCore/qlocale.h \ - ../../../corelib/tools/qlocale.h \ - ../../../../include/QtCore/qvector.h \ - ../../../corelib/tools/qvector.h \ - ../../../../include/QtCore/qpoint.h \ - ../../../corelib/tools/qpoint.h \ - ../../../../include/QtCore/qset.h \ - ../../../corelib/tools/qset.h \ - ../../../../include/QtCore/qcontiguouscache.h \ - ../../../corelib/tools/qcontiguouscache.h \ - ../../../../include/QtDBus/QDBusServiceWatcher \ - ../../../../include/QtDBus/qdbusservicewatcher.h \ - ../../../dbus/qdbusservicewatcher.h \ - ../../../../include/QtDBus/QDBusReply \ - ../../../../include/QtDBus/qdbusreply.h \ - ../../../dbus/qdbusreply.h \ - ../../../../include/QtDBus/qdbusmessage.h \ - ../../../dbus/qdbusmessage.h \ - ../../../../include/QtDBus/qdbuserror.h \ - ../../../dbus/qdbuserror.h \ - ../../../../include/QtDBus/qdbusextratypes.h \ - ../../../dbus/qdbusextratypes.h \ - ../../../../include/QtDBus/qdbuspendingreply.h \ - ../../../dbus/qdbuspendingreply.h \ - ../../../../include/QtDBus/qdbusargument.h \ - ../../../dbus/qdbusargument.h \ - ../../../../include/QtDBus/qdbuspendingcall.h \ - ../../../dbus/qdbuspendingcall.h \ - ../../../../include/QtDBus/QDBusConnectionInterface \ - ../../../../include/QtDBus/qdbusconnectioninterface.h \ - ../../../dbus/qdbusconnectioninterface.h \ - ../../../../include/QtDBus/qdbusabstractinterface.h \ - ../../../dbus/qdbusabstractinterface.h \ - ../../../../include/QtCore/QDebug \ - ../../../../include/QtCore/QFile \ - ../../../../include/QtCore/qfile.h \ - ../../../corelib/io/qfile.h \ - ../../../../include/QtCore/qfiledevice.h \ - ../../../corelib/io/qfiledevice.h \ - ../../../../include/QtCore/QTimer \ - ../../../../include/QtCore/qtimer.h \ - ../../../corelib/kernel/qtimer.h \ - ../../../../include/QtCore/qbasictimer.h \ - ../../../corelib/kernel/qbasictimer.h \ - ../../../../include/QtCore/QDir \ - ../../../../include/QtCore/qdir.h \ - ../../../corelib/io/qdir.h \ - ../../../../include/QtCore/qfileinfo.h \ - ../../../corelib/io/qfileinfo.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/fcitxqtconnection.o fcitxqtconnection.cpp - -.obj/fcitxqtformattedpreedit.o: fcitxqtformattedpreedit.cpp ../../../../include/QtDBus/QDBusMetaType \ - ../../../../include/QtDBus/qdbusmetatype.h \ - ../../../dbus/qdbusmetatype.h \ - ../../../../include/QtCore/qmetatype.h \ - ../../../corelib/kernel/qmetatype.h \ - ../../../../include/QtCore/qglobal.h \ - ../../../corelib/global/qglobal.h \ - ../../../../include/QtCore/qconfig.h \ - ../../../corelib/global/qconfig.h \ - ../../../../include/QtCore/qfeatures.h \ - ../../../corelib/global/qfeatures.h \ - ../../../../include/QtCore/qsystemdetection.h \ - ../../../corelib/global/qsystemdetection.h \ - ../../../../include/QtCore/qprocessordetection.h \ - ../../../corelib/global/qprocessordetection.h \ - ../../../../include/QtCore/qcompilerdetection.h \ - ../../../corelib/global/qcompilerdetection.h \ - ../../../../include/QtCore/qtypeinfo.h \ - ../../../corelib/global/qtypeinfo.h \ - ../../../../include/QtCore/qtypetraits.h \ - ../../../corelib/global/qtypetraits.h \ - ../../../../include/QtCore/qsysinfo.h \ - ../../../corelib/global/qsysinfo.h \ - ../../../../include/QtCore/qlogging.h \ - ../../../corelib/global/qlogging.h \ - ../../../../include/QtCore/qflags.h \ - ../../../corelib/global/qflags.h \ - ../../../../include/QtCore/qatomic.h \ - ../../../corelib/thread/qatomic.h \ - ../../../../include/QtCore/qbasicatomic.h \ - ../../../corelib/thread/qbasicatomic.h \ - ../../../../include/QtCore/qatomic_bootstrap.h \ - ../../../corelib/arch/qatomic_bootstrap.h \ - ../../../../include/QtCore/qgenericatomic.h \ - ../../../corelib/thread/qgenericatomic.h \ - ../../../../include/QtCore/qatomic_cxx11.h \ - ../../../corelib/arch/qatomic_cxx11.h \ - ../../../../include/QtCore/qatomic_gcc.h \ - ../../../corelib/arch/qatomic_gcc.h \ - ../../../../include/QtCore/qatomic_msvc.h \ - ../../../corelib/arch/qatomic_msvc.h \ - ../../../../include/QtCore/qatomic_armv7.h \ - ../../../corelib/arch/qatomic_armv7.h \ - ../../../../include/QtCore/qatomic_armv6.h \ - ../../../corelib/arch/qatomic_armv6.h \ - ../../../../include/QtCore/qatomic_armv5.h \ - ../../../corelib/arch/qatomic_armv5.h \ - ../../../../include/QtCore/qatomic_ia64.h \ - ../../../corelib/arch/qatomic_ia64.h \ - ../../../../include/QtCore/qatomic_mips.h \ - ../../../corelib/arch/qatomic_mips.h \ - ../../../../include/QtCore/qatomic_x86.h \ - ../../../corelib/arch/qatomic_x86.h \ - ../../../../include/QtCore/qatomic_unix.h \ - ../../../corelib/arch/qatomic_unix.h \ - ../../../../include/QtCore/qglobalstatic.h \ - ../../../corelib/global/qglobalstatic.h \ - ../../../../include/QtCore/qmutex.h \ - ../../../corelib/thread/qmutex.h \ - ../../../../include/QtCore/qnumeric.h \ - ../../../corelib/global/qnumeric.h \ - ../../../../include/QtCore/qbytearray.h \ - ../../../corelib/tools/qbytearray.h \ - ../../../../include/QtCore/qrefcount.h \ - ../../../corelib/tools/qrefcount.h \ - ../../../../include/QtCore/qnamespace.h \ - ../../../corelib/global/qnamespace.h \ - ../../../../include/QtCore/qarraydata.h \ - ../../../corelib/tools/qarraydata.h \ - ../../../../include/QtCore/qstring.h \ - ../../../corelib/tools/qstring.h \ - ../../../../include/QtCore/qchar.h \ - ../../../corelib/tools/qchar.h \ - ../../../../include/QtCore/qstringbuilder.h \ - ../../../corelib/tools/qstringbuilder.h \ - ../../../../include/QtCore/qvarlengtharray.h \ - ../../../corelib/tools/qvarlengtharray.h \ - ../../../../include/QtCore/qcontainerfwd.h \ - ../../../corelib/tools/qcontainerfwd.h \ - ../../../../include/QtCore/qalgorithms.h \ - ../../../corelib/tools/qalgorithms.h \ - ../../../../include/QtCore/qisenum.h \ - ../../../corelib/global/qisenum.h \ - ../../../../include/QtCore/qobjectdefs.h \ - ../../../corelib/kernel/qobjectdefs.h \ - ../../../../include/QtCore/qobjectdefs_impl.h \ - ../../../corelib/kernel/qobjectdefs_impl.h \ - ../../../../include/QtDBus/qdbusargument.h \ - ../../../dbus/qdbusargument.h \ - ../../../../include/QtCore/qhash.h \ - ../../../corelib/tools/qhash.h \ - ../../../../include/QtCore/qiterator.h \ - ../../../corelib/tools/qiterator.h \ - ../../../../include/QtCore/qlist.h \ - ../../../corelib/tools/qlist.h \ - ../../../../include/QtCore/qbytearraylist.h \ - ../../../corelib/tools/qbytearraylist.h \ - ../../../../include/QtCore/qstringlist.h \ - ../../../corelib/tools/qstringlist.h \ - ../../../../include/QtCore/qregexp.h \ - ../../../corelib/tools/qregexp.h \ - ../../../../include/QtCore/qstringmatcher.h \ - ../../../corelib/tools/qstringmatcher.h \ - ../../../../include/QtCore/qpair.h \ - ../../../corelib/tools/qpair.h \ - ../../../../include/QtCore/qmap.h \ - ../../../corelib/tools/qmap.h \ - ../../../../include/QtCore/qdebug.h \ - ../../../corelib/io/qdebug.h \ - ../../../../include/QtCore/qtextstream.h \ - ../../../corelib/io/qtextstream.h \ - ../../../../include/QtCore/qiodevice.h \ - ../../../corelib/io/qiodevice.h \ - ../../../../include/QtCore/qobject.h \ - ../../../corelib/kernel/qobject.h \ - ../../../../include/QtCore/qcoreevent.h \ - ../../../corelib/kernel/qcoreevent.h \ - ../../../../include/QtCore/qscopedpointer.h \ - ../../../corelib/tools/qscopedpointer.h \ - ../../../../include/QtCore/qobject_impl.h \ - ../../../corelib/kernel/qobject_impl.h \ - ../../../../include/QtCore/qlocale.h \ - ../../../corelib/tools/qlocale.h \ - ../../../../include/QtCore/qvariant.h \ - ../../../corelib/kernel/qvariant.h \ - ../../../../include/QtCore/qshareddata.h \ - ../../../corelib/tools/qshareddata.h \ - ../../../../include/QtCore/qvector.h \ - ../../../corelib/tools/qvector.h \ - ../../../../include/QtCore/qpoint.h \ - ../../../corelib/tools/qpoint.h \ - ../../../../include/QtCore/qset.h \ - ../../../corelib/tools/qset.h \ - ../../../../include/QtCore/qcontiguouscache.h \ - ../../../corelib/tools/qcontiguouscache.h \ - ../../../../include/QtDBus/qdbusextratypes.h \ - ../../../dbus/qdbusextratypes.h \ - ../../../../include/QtDBus/qdbusmacros.h \ - ../../../dbus/qdbusmacros.h \ - fcitxqtformattedpreedit.h \ - fcitxqtdbusaddons_export.h \ - ../../../../include/QtCore/QMetaType \ - ../../../../include/QtDBus/QDBusArgument - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/fcitxqtformattedpreedit.o fcitxqtformattedpreedit.cpp - -.obj/fcitxqtinputcontextproxy.o: fcitxqtinputcontextproxy.cpp fcitxqtinputcontextproxy.h \ - ../../../../include/QtCore/QObject \ - ../../../../include/QtCore/qobject.h \ - ../../../corelib/kernel/qobject.h \ - ../../../../include/QtCore/qobjectdefs.h \ - ../../../corelib/kernel/qobjectdefs.h \ - ../../../../include/QtCore/qnamespace.h \ - ../../../corelib/global/qnamespace.h \ - ../../../../include/QtCore/qglobal.h \ - ../../../corelib/global/qglobal.h \ - ../../../../include/QtCore/qconfig.h \ - ../../../corelib/global/qconfig.h \ - ../../../../include/QtCore/qfeatures.h \ - ../../../corelib/global/qfeatures.h \ - ../../../../include/QtCore/qsystemdetection.h \ - ../../../corelib/global/qsystemdetection.h \ - ../../../../include/QtCore/qprocessordetection.h \ - ../../../corelib/global/qprocessordetection.h \ - ../../../../include/QtCore/qcompilerdetection.h \ - ../../../corelib/global/qcompilerdetection.h \ - ../../../../include/QtCore/qtypeinfo.h \ - ../../../corelib/global/qtypeinfo.h \ - ../../../../include/QtCore/qtypetraits.h \ - ../../../corelib/global/qtypetraits.h \ - ../../../../include/QtCore/qsysinfo.h \ - ../../../corelib/global/qsysinfo.h \ - ../../../../include/QtCore/qlogging.h \ - ../../../corelib/global/qlogging.h \ - ../../../../include/QtCore/qflags.h \ - ../../../corelib/global/qflags.h \ - ../../../../include/QtCore/qatomic.h \ - ../../../corelib/thread/qatomic.h \ - ../../../../include/QtCore/qbasicatomic.h \ - ../../../corelib/thread/qbasicatomic.h \ - ../../../../include/QtCore/qatomic_bootstrap.h \ - ../../../corelib/arch/qatomic_bootstrap.h \ - ../../../../include/QtCore/qgenericatomic.h \ - ../../../corelib/thread/qgenericatomic.h \ - ../../../../include/QtCore/qatomic_cxx11.h \ - ../../../corelib/arch/qatomic_cxx11.h \ - ../../../../include/QtCore/qatomic_gcc.h \ - ../../../corelib/arch/qatomic_gcc.h \ - ../../../../include/QtCore/qatomic_msvc.h \ - ../../../corelib/arch/qatomic_msvc.h \ - ../../../../include/QtCore/qatomic_armv7.h \ - ../../../corelib/arch/qatomic_armv7.h \ - ../../../../include/QtCore/qatomic_armv6.h \ - ../../../corelib/arch/qatomic_armv6.h \ - ../../../../include/QtCore/qatomic_armv5.h \ - ../../../corelib/arch/qatomic_armv5.h \ - ../../../../include/QtCore/qatomic_ia64.h \ - ../../../corelib/arch/qatomic_ia64.h \ - ../../../../include/QtCore/qatomic_mips.h \ - ../../../corelib/arch/qatomic_mips.h \ - ../../../../include/QtCore/qatomic_x86.h \ - ../../../corelib/arch/qatomic_x86.h \ - ../../../../include/QtCore/qatomic_unix.h \ - ../../../corelib/arch/qatomic_unix.h \ - ../../../../include/QtCore/qglobalstatic.h \ - ../../../corelib/global/qglobalstatic.h \ - ../../../../include/QtCore/qmutex.h \ - ../../../corelib/thread/qmutex.h \ - ../../../../include/QtCore/qnumeric.h \ - ../../../corelib/global/qnumeric.h \ - ../../../../include/QtCore/qobjectdefs_impl.h \ - ../../../corelib/kernel/qobjectdefs_impl.h \ - ../../../../include/QtCore/qstring.h \ - ../../../corelib/tools/qstring.h \ - ../../../../include/QtCore/qchar.h \ - ../../../corelib/tools/qchar.h \ - ../../../../include/QtCore/qbytearray.h \ - ../../../corelib/tools/qbytearray.h \ - ../../../../include/QtCore/qrefcount.h \ - ../../../corelib/tools/qrefcount.h \ - ../../../../include/QtCore/qarraydata.h \ - ../../../corelib/tools/qarraydata.h \ - ../../../../include/QtCore/qstringbuilder.h \ - ../../../corelib/tools/qstringbuilder.h \ - ../../../../include/QtCore/qlist.h \ - ../../../corelib/tools/qlist.h \ - ../../../../include/QtCore/qalgorithms.h \ - ../../../corelib/tools/qalgorithms.h \ - ../../../../include/QtCore/qiterator.h \ - ../../../corelib/tools/qiterator.h \ - ../../../../include/QtCore/qbytearraylist.h \ - ../../../corelib/tools/qbytearraylist.h \ - ../../../../include/QtCore/qstringlist.h \ - ../../../corelib/tools/qstringlist.h \ - ../../../../include/QtCore/qregexp.h \ - ../../../corelib/tools/qregexp.h \ - ../../../../include/QtCore/qstringmatcher.h \ - ../../../corelib/tools/qstringmatcher.h \ - ../../../../include/QtCore/qcoreevent.h \ - ../../../corelib/kernel/qcoreevent.h \ - ../../../../include/QtCore/qscopedpointer.h \ - ../../../corelib/tools/qscopedpointer.h \ - ../../../../include/QtCore/qmetatype.h \ - ../../../corelib/kernel/qmetatype.h \ - ../../../../include/QtCore/qvarlengtharray.h \ - ../../../corelib/tools/qvarlengtharray.h \ - ../../../../include/QtCore/qcontainerfwd.h \ - ../../../corelib/tools/qcontainerfwd.h \ - ../../../../include/QtCore/qisenum.h \ - ../../../corelib/global/qisenum.h \ - ../../../../include/QtCore/qobject_impl.h \ - ../../../corelib/kernel/qobject_impl.h \ - ../../../../include/QtCore/QByteArray \ - ../../../../include/QtCore/QList \ - ../../../../include/QtCore/QMap \ - ../../../../include/QtCore/qmap.h \ - ../../../corelib/tools/qmap.h \ - ../../../../include/QtCore/qpair.h \ - ../../../corelib/tools/qpair.h \ - ../../../../include/QtCore/qdebug.h \ - ../../../corelib/io/qdebug.h \ - ../../../../include/QtCore/qhash.h \ - ../../../corelib/tools/qhash.h \ - ../../../../include/QtCore/qtextstream.h \ - ../../../corelib/io/qtextstream.h \ - ../../../../include/QtCore/qiodevice.h \ - ../../../corelib/io/qiodevice.h \ - ../../../../include/QtCore/qlocale.h \ - ../../../corelib/tools/qlocale.h \ - ../../../../include/QtCore/qvariant.h \ - ../../../corelib/kernel/qvariant.h \ - ../../../../include/QtCore/qshareddata.h \ - ../../../corelib/tools/qshareddata.h \ - ../../../../include/QtCore/qvector.h \ - ../../../corelib/tools/qvector.h \ - ../../../../include/QtCore/qpoint.h \ - ../../../corelib/tools/qpoint.h \ - ../../../../include/QtCore/qset.h \ - ../../../corelib/tools/qset.h \ - ../../../../include/QtCore/qcontiguouscache.h \ - ../../../corelib/tools/qcontiguouscache.h \ - ../../../../include/QtCore/QString \ - ../../../../include/QtCore/QStringList \ - ../../../../include/QtCore/QVariant \ - ../../../../include/QtDBus/QtDBus \ - ../../../../include/QtDBus/QtDBusDepends \ - ../../../../include/QtCore/QtCore \ - ../../../../include/QtCore/QtCoreDepends \ - ../../../../include/QtCore/qabstractanimation.h \ - ../../../corelib/animation/qabstractanimation.h \ - ../../../../include/QtCore/qanimationgroup.h \ - ../../../corelib/animation/qanimationgroup.h \ - ../../../../include/QtCore/qparallelanimationgroup.h \ - ../../../corelib/animation/qparallelanimationgroup.h \ - ../../../../include/QtCore/qpauseanimation.h \ - ../../../corelib/animation/qpauseanimation.h \ - ../../../../include/QtCore/qpropertyanimation.h \ - ../../../corelib/animation/qpropertyanimation.h \ - ../../../../include/QtCore/qvariantanimation.h \ - ../../../corelib/animation/qvariantanimation.h \ - ../../../../include/QtCore/qeasingcurve.h \ - ../../../corelib/tools/qeasingcurve.h \ - ../../../../include/QtCore/qsequentialanimationgroup.h \ - ../../../corelib/animation/qsequentialanimationgroup.h \ - ../../../../include/QtCore/qtextcodec.h \ - ../../../corelib/codecs/qtextcodec.h \ - ../../../../include/QtCore/qendian.h \ - ../../../corelib/global/qendian.h \ - ../../../../include/QtCore/qlibraryinfo.h \ - ../../../corelib/global/qlibraryinfo.h \ - ../../../../include/QtCore/qdatetime.h \ - ../../../corelib/tools/qdatetime.h \ - ../../../../include/QtCore/qbuffer.h \ - ../../../corelib/io/qbuffer.h \ - ../../../../include/QtCore/qdatastream.h \ - ../../../corelib/io/qdatastream.h \ - ../../../../include/QtCore/qdir.h \ - ../../../corelib/io/qdir.h \ - ../../../../include/QtCore/qfileinfo.h \ - ../../../corelib/io/qfileinfo.h \ - ../../../../include/QtCore/qfile.h \ - ../../../corelib/io/qfile.h \ - ../../../../include/QtCore/qfiledevice.h \ - ../../../corelib/io/qfiledevice.h \ - ../../../../include/QtCore/qdiriterator.h \ - ../../../corelib/io/qdiriterator.h \ - ../../../../include/QtCore/qfileselector.h \ - ../../../corelib/io/qfileselector.h \ - ../../../../include/QtCore/qfilesystemwatcher.h \ - ../../../corelib/io/qfilesystemwatcher.h \ - ../../../../include/QtCore/qlockfile.h \ - ../../../corelib/io/qlockfile.h \ - ../../../../include/QtCore/qloggingcategory.h \ - ../../../corelib/io/qloggingcategory.h \ - ../../../../include/QtCore/qprocess.h \ - ../../../corelib/io/qprocess.h \ - ../../../../include/QtCore/qresource.h \ - ../../../corelib/io/qresource.h \ - ../../../../include/QtCore/qsavefile.h \ - ../../../corelib/io/qsavefile.h \ - ../../../../include/QtCore/qsettings.h \ - ../../../corelib/io/qsettings.h \ - ../../../../include/QtCore/qstandardpaths.h \ - ../../../corelib/io/qstandardpaths.h \ - ../../../../include/QtCore/qstorageinfo.h \ - ../../../corelib/io/qstorageinfo.h \ - ../../../../include/QtCore/qtemporarydir.h \ - ../../../corelib/io/qtemporarydir.h \ - ../../../../include/QtCore/QScopedPointer \ - ../../../../include/QtCore/qtemporaryfile.h \ - ../../../corelib/io/qtemporaryfile.h \ - ../../../../include/QtCore/qurl.h \ - ../../../corelib/io/qurl.h \ - ../../../../include/QtCore/qurlquery.h \ - ../../../corelib/io/qurlquery.h \ - ../../../../include/QtCore/qabstractitemmodel.h \ - ../../../corelib/itemmodels/qabstractitemmodel.h \ - ../../../../include/QtCore/qabstractproxymodel.h \ - ../../../corelib/itemmodels/qabstractproxymodel.h \ - ../../../../include/QtCore/qidentityproxymodel.h \ - ../../../corelib/itemmodels/qidentityproxymodel.h \ - ../../../../include/QtCore/qitemselectionmodel.h \ - ../../../corelib/itemmodels/qitemselectionmodel.h \ - ../../../../include/QtCore/qsortfilterproxymodel.h \ - ../../../corelib/itemmodels/qsortfilterproxymodel.h \ - ../../../../include/QtCore/qstringlistmodel.h \ - ../../../corelib/itemmodels/qstringlistmodel.h \ - ../../../../include/QtCore/qjsonarray.h \ - ../../../corelib/json/qjsonarray.h \ - ../../../../include/QtCore/qjsonvalue.h \ - ../../../corelib/json/qjsonvalue.h \ - ../../../../include/QtCore/qjsondocument.h \ - ../../../corelib/json/qjsondocument.h \ - ../../../../include/QtCore/qjsonobject.h \ - ../../../corelib/json/qjsonobject.h \ - ../../../../include/QtCore/qabstracteventdispatcher.h \ - ../../../corelib/kernel/qabstracteventdispatcher.h \ - ../../../../include/QtCore/qeventloop.h \ - ../../../corelib/kernel/qeventloop.h \ - ../../../../include/QtCore/qabstractnativeeventfilter.h \ - ../../../corelib/kernel/qabstractnativeeventfilter.h \ - ../../../../include/QtCore/qbasictimer.h \ - ../../../corelib/kernel/qbasictimer.h \ - ../../../../include/QtCore/qcoreapplication.h \ - ../../../corelib/kernel/qcoreapplication.h \ - ../../../../include/QtCore/qmath.h \ - ../../../corelib/kernel/qmath.h \ - ../../../../include/QtCore/qmetaobject.h \ - ../../../corelib/kernel/qmetaobject.h \ - ../../../../include/QtCore/qmimedata.h \ - ../../../corelib/kernel/qmimedata.h \ - ../../../../include/QtCore/qobjectcleanuphandler.h \ - ../../../corelib/kernel/qobjectcleanuphandler.h \ - ../../../../include/QtCore/qpointer.h \ - ../../../corelib/kernel/qpointer.h \ - ../../../../include/QtCore/qsharedpointer.h \ - ../../../corelib/tools/qsharedpointer.h \ - ../../../../include/QtCore/qsharedpointer_impl.h \ - ../../../corelib/tools/qsharedpointer_impl.h \ - ../../../../include/QtCore/qsharedmemory.h \ - ../../../corelib/kernel/qsharedmemory.h \ - ../../../../include/QtCore/qsignalmapper.h \ - ../../../corelib/kernel/qsignalmapper.h \ - ../../../../include/QtCore/qsocketnotifier.h \ - ../../../corelib/kernel/qsocketnotifier.h \ - ../../../../include/QtCore/qsystemsemaphore.h \ - ../../../corelib/kernel/qsystemsemaphore.h \ - ../../../../include/QtCore/qtimer.h \ - ../../../corelib/kernel/qtimer.h \ - ../../../../include/QtCore/qtranslator.h \ - ../../../corelib/kernel/qtranslator.h \ - ../../../../include/QtCore/qwineventnotifier.h \ - ../../../corelib/kernel/qwineventnotifier.h \ - ../../../../include/QtCore/qmimedatabase.h \ - ../../../corelib/mimetypes/qmimedatabase.h \ - ../../../../include/QtCore/qmimetype.h \ - ../../../corelib/mimetypes/qmimetype.h \ - ../../../../include/QtCore/qfactoryinterface.h \ - ../../../corelib/plugin/qfactoryinterface.h \ - ../../../../include/QtCore/qlibrary.h \ - ../../../corelib/plugin/qlibrary.h \ - ../../../../include/QtCore/qplugin.h \ - ../../../corelib/plugin/qplugin.h \ - ../../../../include/QtCore/qpluginloader.h \ - ../../../corelib/plugin/qpluginloader.h \ - ../../../../include/QtCore/quuid.h \ - ../../../corelib/plugin/quuid.h \ - ../../../../include/QtCore/qabstractstate.h \ - ../../../corelib/statemachine/qabstractstate.h \ - ../../../../include/QtCore/qabstracttransition.h \ - ../../../corelib/statemachine/qabstracttransition.h \ - ../../../../include/QtCore/qeventtransition.h \ - ../../../corelib/statemachine/qeventtransition.h \ - ../../../../include/QtCore/qfinalstate.h \ - ../../../corelib/statemachine/qfinalstate.h \ - ../../../../include/QtCore/qhistorystate.h \ - ../../../corelib/statemachine/qhistorystate.h \ - ../../../../include/QtCore/qsignaltransition.h \ - ../../../corelib/statemachine/qsignaltransition.h \ - ../../../../include/QtCore/qstate.h \ - ../../../corelib/statemachine/qstate.h \ - ../../../../include/QtCore/qstatemachine.h \ - ../../../corelib/statemachine/qstatemachine.h \ - ../../../../include/QtCore/qexception.h \ - ../../../corelib/thread/qexception.h \ - ../../../../include/QtCore/qfuture.h \ - ../../../corelib/thread/qfuture.h \ - ../../../../include/QtCore/qfutureinterface.h \ - ../../../corelib/thread/qfutureinterface.h \ - ../../../../include/QtCore/qrunnable.h \ - ../../../corelib/thread/qrunnable.h \ - ../../../../include/QtCore/qresultstore.h \ - ../../../corelib/thread/qresultstore.h \ - ../../../../include/QtCore/qfuturesynchronizer.h \ - ../../../corelib/thread/qfuturesynchronizer.h \ - ../../../../include/QtCore/qfuturewatcher.h \ - ../../../corelib/thread/qfuturewatcher.h \ - ../../../../include/QtCore/qreadwritelock.h \ - ../../../corelib/thread/qreadwritelock.h \ - ../../../../include/QtCore/qsemaphore.h \ - ../../../corelib/thread/qsemaphore.h \ - ../../../../include/QtCore/qthread.h \ - ../../../corelib/thread/qthread.h \ - ../../../../include/QtCore/qthreadpool.h \ - ../../../corelib/thread/qthreadpool.h \ - ../../../../include/QtCore/qthreadstorage.h \ - ../../../corelib/thread/qthreadstorage.h \ - ../../../../include/QtCore/qwaitcondition.h \ - ../../../corelib/thread/qwaitcondition.h \ - ../../../../include/QtCore/qarraydataops.h \ - ../../../corelib/tools/qarraydataops.h \ - ../../../../include/QtCore/qarraydatapointer.h \ - ../../../corelib/tools/qarraydatapointer.h \ - ../../../../include/QtCore/qbitarray.h \ - ../../../corelib/tools/qbitarray.h \ - ../../../../include/QtCore/qbytearraymatcher.h \ - ../../../corelib/tools/qbytearraymatcher.h \ - ../../../../include/QtCore/qcache.h \ - ../../../corelib/tools/qcache.h \ - ../../../../include/QtCore/qcollator.h \ - ../../../corelib/tools/qcollator.h \ - ../../../../include/QtCore/qcommandlineoption.h \ - ../../../corelib/tools/qcommandlineoption.h \ - ../../../../include/QtCore/qcommandlineparser.h \ - ../../../corelib/tools/qcommandlineparser.h \ - ../../../../include/QtCore/qcryptographichash.h \ - ../../../corelib/tools/qcryptographichash.h \ - ../../../../include/QtCore/qelapsedtimer.h \ - ../../../corelib/tools/qelapsedtimer.h \ - ../../../../include/QtCore/qline.h \ - ../../../corelib/tools/qline.h \ - ../../../../include/QtCore/qlinkedlist.h \ - ../../../corelib/tools/qlinkedlist.h \ - ../../../../include/QtCore/qmargins.h \ - ../../../corelib/tools/qmargins.h \ - ../../../../include/QtCore/qmessageauthenticationcode.h \ - ../../../corelib/tools/qmessageauthenticationcode.h \ - ../../../../include/QtCore/qqueue.h \ - ../../../corelib/tools/qqueue.h \ - ../../../../include/QtCore/qrect.h \ - ../../../corelib/tools/qrect.h \ - ../../../../include/QtCore/qsize.h \ - ../../../corelib/tools/qsize.h \ - ../../../../include/QtCore/qregularexpression.h \ - ../../../corelib/tools/qregularexpression.h \ - ../../../../include/QtCore/qscopedvaluerollback.h \ - ../../../corelib/tools/qscopedvaluerollback.h \ - ../../../../include/QtCore/qstack.h \ - ../../../corelib/tools/qstack.h \ - ../../../../include/QtCore/qtextboundaryfinder.h \ - ../../../corelib/tools/qtextboundaryfinder.h \ - ../../../../include/QtCore/qtimeline.h \ - ../../../corelib/tools/qtimeline.h \ - ../../../../include/QtCore/qtimezone.h \ - ../../../corelib/tools/qtimezone.h \ - ../../../../include/QtCore/qxmlstream.h \ - ../../../corelib/xml/qxmlstream.h \ - ../../../../include/QtCore/qtcoreversion.h \ - ../../../../include/QtDBus/qdbusabstractadaptor.h \ - ../../../dbus/qdbusabstractadaptor.h \ - ../../../../include/QtDBus/qdbusmacros.h \ - ../../../dbus/qdbusmacros.h \ - ../../../../include/QtDBus/qdbusabstractinterface.h \ - ../../../dbus/qdbusabstractinterface.h \ - ../../../../include/QtDBus/qdbusmessage.h \ - ../../../dbus/qdbusmessage.h \ - ../../../../include/QtDBus/qdbuserror.h \ - ../../../dbus/qdbuserror.h \ - ../../../../include/QtDBus/qdbusextratypes.h \ - ../../../dbus/qdbusextratypes.h \ - ../../../../include/QtDBus/qdbusconnection.h \ - ../../../dbus/qdbusconnection.h \ - ../../../../include/QtDBus/qdbusargument.h \ - ../../../dbus/qdbusargument.h \ - ../../../../include/QtDBus/qdbusconnectioninterface.h \ - ../../../dbus/qdbusconnectioninterface.h \ - ../../../../include/QtDBus/qdbusreply.h \ - ../../../dbus/qdbusreply.h \ - ../../../../include/QtDBus/qdbuspendingreply.h \ - ../../../dbus/qdbuspendingreply.h \ - ../../../../include/QtDBus/qdbuspendingcall.h \ - ../../../dbus/qdbuspendingcall.h \ - ../../../../include/QtDBus/qdbuscontext.h \ - ../../../dbus/qdbuscontext.h \ - ../../../../include/QtDBus/qdbusinterface.h \ - ../../../dbus/qdbusinterface.h \ - ../../../../include/QtDBus/qdbusmetatype.h \ - ../../../dbus/qdbusmetatype.h \ - ../../../../include/QtDBus/qdbusserver.h \ - ../../../dbus/qdbusserver.h \ - ../../../../include/QtDBus/qdbusservicewatcher.h \ - ../../../dbus/qdbusservicewatcher.h \ - ../../../../include/QtDBus/qdbusunixfiledescriptor.h \ - ../../../dbus/qdbusunixfiledescriptor.h \ - ../../../../include/QtDBus/qdbusvirtualobject.h \ - ../../../dbus/qdbusvirtualobject.h \ - ../../../../include/QtDBus/qtdbusversion.h \ - fcitxqtformattedpreedit.h \ - fcitxqtdbusaddons_export.h \ - ../../../../include/QtCore/QMetaType \ - ../../../../include/QtDBus/QDBusArgument - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/fcitxqtinputcontextproxy.o fcitxqtinputcontextproxy.cpp - -.obj/fcitxqtinputmethoditem.o: fcitxqtinputmethoditem.cpp ../../../../include/QtDBus/QDBusArgument \ - ../../../../include/QtDBus/qdbusargument.h \ - ../../../dbus/qdbusargument.h \ - ../../../../include/QtCore/qbytearray.h \ - ../../../corelib/tools/qbytearray.h \ - ../../../../include/QtCore/qrefcount.h \ - ../../../corelib/tools/qrefcount.h \ - ../../../../include/QtCore/qatomic.h \ - ../../../corelib/thread/qatomic.h \ - ../../../../include/QtCore/qglobal.h \ - ../../../corelib/global/qglobal.h \ - ../../../../include/QtCore/qconfig.h \ - ../../../corelib/global/qconfig.h \ - ../../../../include/QtCore/qfeatures.h \ - ../../../corelib/global/qfeatures.h \ - ../../../../include/QtCore/qsystemdetection.h \ - ../../../corelib/global/qsystemdetection.h \ - ../../../../include/QtCore/qprocessordetection.h \ - ../../../corelib/global/qprocessordetection.h \ - ../../../../include/QtCore/qcompilerdetection.h \ - ../../../corelib/global/qcompilerdetection.h \ - ../../../../include/QtCore/qtypeinfo.h \ - ../../../corelib/global/qtypeinfo.h \ - ../../../../include/QtCore/qtypetraits.h \ - ../../../corelib/global/qtypetraits.h \ - ../../../../include/QtCore/qsysinfo.h \ - ../../../corelib/global/qsysinfo.h \ - ../../../../include/QtCore/qlogging.h \ - ../../../corelib/global/qlogging.h \ - ../../../../include/QtCore/qflags.h \ - ../../../corelib/global/qflags.h \ - ../../../../include/QtCore/qglobalstatic.h \ - ../../../corelib/global/qglobalstatic.h \ - ../../../../include/QtCore/qmutex.h \ - ../../../corelib/thread/qmutex.h \ - ../../../../include/QtCore/qnumeric.h \ - ../../../corelib/global/qnumeric.h \ - ../../../../include/QtCore/qbasicatomic.h \ - ../../../corelib/thread/qbasicatomic.h \ - ../../../../include/QtCore/qatomic_bootstrap.h \ - ../../../corelib/arch/qatomic_bootstrap.h \ - ../../../../include/QtCore/qgenericatomic.h \ - ../../../corelib/thread/qgenericatomic.h \ - ../../../../include/QtCore/qatomic_cxx11.h \ - ../../../corelib/arch/qatomic_cxx11.h \ - ../../../../include/QtCore/qatomic_gcc.h \ - ../../../corelib/arch/qatomic_gcc.h \ - ../../../../include/QtCore/qatomic_msvc.h \ - ../../../corelib/arch/qatomic_msvc.h \ - ../../../../include/QtCore/qatomic_armv7.h \ - ../../../corelib/arch/qatomic_armv7.h \ - ../../../../include/QtCore/qatomic_armv6.h \ - ../../../corelib/arch/qatomic_armv6.h \ - ../../../../include/QtCore/qatomic_armv5.h \ - ../../../corelib/arch/qatomic_armv5.h \ - ../../../../include/QtCore/qatomic_ia64.h \ - ../../../corelib/arch/qatomic_ia64.h \ - ../../../../include/QtCore/qatomic_mips.h \ - ../../../corelib/arch/qatomic_mips.h \ - ../../../../include/QtCore/qatomic_x86.h \ - ../../../corelib/arch/qatomic_x86.h \ - ../../../../include/QtCore/qatomic_unix.h \ - ../../../corelib/arch/qatomic_unix.h \ - ../../../../include/QtCore/qnamespace.h \ - ../../../corelib/global/qnamespace.h \ - ../../../../include/QtCore/qarraydata.h \ - ../../../corelib/tools/qarraydata.h \ - ../../../../include/QtCore/qstring.h \ - ../../../corelib/tools/qstring.h \ - ../../../../include/QtCore/qchar.h \ - ../../../corelib/tools/qchar.h \ - ../../../../include/QtCore/qstringbuilder.h \ - ../../../corelib/tools/qstringbuilder.h \ - ../../../../include/QtCore/qhash.h \ - ../../../corelib/tools/qhash.h \ - ../../../../include/QtCore/qiterator.h \ - ../../../corelib/tools/qiterator.h \ - ../../../../include/QtCore/qlist.h \ - ../../../corelib/tools/qlist.h \ - ../../../../include/QtCore/qalgorithms.h \ - ../../../corelib/tools/qalgorithms.h \ - ../../../../include/QtCore/qbytearraylist.h \ - ../../../corelib/tools/qbytearraylist.h \ - ../../../../include/QtCore/qstringlist.h \ - ../../../corelib/tools/qstringlist.h \ - ../../../../include/QtCore/qregexp.h \ - ../../../corelib/tools/qregexp.h \ - ../../../../include/QtCore/qstringmatcher.h \ - ../../../corelib/tools/qstringmatcher.h \ - ../../../../include/QtCore/qpair.h \ - ../../../corelib/tools/qpair.h \ - ../../../../include/QtCore/qmap.h \ - ../../../corelib/tools/qmap.h \ - ../../../../include/QtCore/qdebug.h \ - ../../../corelib/io/qdebug.h \ - ../../../../include/QtCore/qtextstream.h \ - ../../../corelib/io/qtextstream.h \ - ../../../../include/QtCore/qiodevice.h \ - ../../../corelib/io/qiodevice.h \ - ../../../../include/QtCore/qobject.h \ - ../../../corelib/kernel/qobject.h \ - ../../../../include/QtCore/qobjectdefs.h \ - ../../../corelib/kernel/qobjectdefs.h \ - ../../../../include/QtCore/qobjectdefs_impl.h \ - ../../../corelib/kernel/qobjectdefs_impl.h \ - ../../../../include/QtCore/qcoreevent.h \ - ../../../corelib/kernel/qcoreevent.h \ - ../../../../include/QtCore/qscopedpointer.h \ - ../../../corelib/tools/qscopedpointer.h \ - ../../../../include/QtCore/qmetatype.h \ - ../../../corelib/kernel/qmetatype.h \ - ../../../../include/QtCore/qvarlengtharray.h \ - ../../../corelib/tools/qvarlengtharray.h \ - ../../../../include/QtCore/qcontainerfwd.h \ - ../../../corelib/tools/qcontainerfwd.h \ - ../../../../include/QtCore/qisenum.h \ - ../../../corelib/global/qisenum.h \ - ../../../../include/QtCore/qobject_impl.h \ - ../../../corelib/kernel/qobject_impl.h \ - ../../../../include/QtCore/qlocale.h \ - ../../../corelib/tools/qlocale.h \ - ../../../../include/QtCore/qvariant.h \ - ../../../corelib/kernel/qvariant.h \ - ../../../../include/QtCore/qshareddata.h \ - ../../../corelib/tools/qshareddata.h \ - ../../../../include/QtCore/qvector.h \ - ../../../corelib/tools/qvector.h \ - ../../../../include/QtCore/qpoint.h \ - ../../../corelib/tools/qpoint.h \ - ../../../../include/QtCore/qset.h \ - ../../../corelib/tools/qset.h \ - ../../../../include/QtCore/qcontiguouscache.h \ - ../../../corelib/tools/qcontiguouscache.h \ - ../../../../include/QtDBus/qdbusextratypes.h \ - ../../../dbus/qdbusextratypes.h \ - ../../../../include/QtDBus/qdbusmacros.h \ - ../../../dbus/qdbusmacros.h \ - ../../../../include/QtDBus/QDBusMetaType \ - ../../../../include/QtDBus/qdbusmetatype.h \ - ../../../dbus/qdbusmetatype.h \ - fcitxqtinputmethoditem.h \ - fcitxqtdbusaddons_export.h \ - ../../../../include/QtCore/QString \ - ../../../../include/QtCore/QMetaType - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/fcitxqtinputmethoditem.o fcitxqtinputmethoditem.cpp - -.obj/fcitxqtinputmethodproxy.o: fcitxqtinputmethodproxy.cpp fcitxqtinputmethodproxy.h \ - ../../../../include/QtCore/QObject \ - ../../../../include/QtCore/qobject.h \ - ../../../corelib/kernel/qobject.h \ - ../../../../include/QtCore/qobjectdefs.h \ - ../../../corelib/kernel/qobjectdefs.h \ - ../../../../include/QtCore/qnamespace.h \ - ../../../corelib/global/qnamespace.h \ - ../../../../include/QtCore/qglobal.h \ - ../../../corelib/global/qglobal.h \ - ../../../../include/QtCore/qconfig.h \ - ../../../corelib/global/qconfig.h \ - ../../../../include/QtCore/qfeatures.h \ - ../../../corelib/global/qfeatures.h \ - ../../../../include/QtCore/qsystemdetection.h \ - ../../../corelib/global/qsystemdetection.h \ - ../../../../include/QtCore/qprocessordetection.h \ - ../../../corelib/global/qprocessordetection.h \ - ../../../../include/QtCore/qcompilerdetection.h \ - ../../../corelib/global/qcompilerdetection.h \ - ../../../../include/QtCore/qtypeinfo.h \ - ../../../corelib/global/qtypeinfo.h \ - ../../../../include/QtCore/qtypetraits.h \ - ../../../corelib/global/qtypetraits.h \ - ../../../../include/QtCore/qsysinfo.h \ - ../../../corelib/global/qsysinfo.h \ - ../../../../include/QtCore/qlogging.h \ - ../../../corelib/global/qlogging.h \ - ../../../../include/QtCore/qflags.h \ - ../../../corelib/global/qflags.h \ - ../../../../include/QtCore/qatomic.h \ - ../../../corelib/thread/qatomic.h \ - ../../../../include/QtCore/qbasicatomic.h \ - ../../../corelib/thread/qbasicatomic.h \ - ../../../../include/QtCore/qatomic_bootstrap.h \ - ../../../corelib/arch/qatomic_bootstrap.h \ - ../../../../include/QtCore/qgenericatomic.h \ - ../../../corelib/thread/qgenericatomic.h \ - ../../../../include/QtCore/qatomic_cxx11.h \ - ../../../corelib/arch/qatomic_cxx11.h \ - ../../../../include/QtCore/qatomic_gcc.h \ - ../../../corelib/arch/qatomic_gcc.h \ - ../../../../include/QtCore/qatomic_msvc.h \ - ../../../corelib/arch/qatomic_msvc.h \ - ../../../../include/QtCore/qatomic_armv7.h \ - ../../../corelib/arch/qatomic_armv7.h \ - ../../../../include/QtCore/qatomic_armv6.h \ - ../../../corelib/arch/qatomic_armv6.h \ - ../../../../include/QtCore/qatomic_armv5.h \ - ../../../corelib/arch/qatomic_armv5.h \ - ../../../../include/QtCore/qatomic_ia64.h \ - ../../../corelib/arch/qatomic_ia64.h \ - ../../../../include/QtCore/qatomic_mips.h \ - ../../../corelib/arch/qatomic_mips.h \ - ../../../../include/QtCore/qatomic_x86.h \ - ../../../corelib/arch/qatomic_x86.h \ - ../../../../include/QtCore/qatomic_unix.h \ - ../../../corelib/arch/qatomic_unix.h \ - ../../../../include/QtCore/qglobalstatic.h \ - ../../../corelib/global/qglobalstatic.h \ - ../../../../include/QtCore/qmutex.h \ - ../../../corelib/thread/qmutex.h \ - ../../../../include/QtCore/qnumeric.h \ - ../../../corelib/global/qnumeric.h \ - ../../../../include/QtCore/qobjectdefs_impl.h \ - ../../../corelib/kernel/qobjectdefs_impl.h \ - ../../../../include/QtCore/qstring.h \ - ../../../corelib/tools/qstring.h \ - ../../../../include/QtCore/qchar.h \ - ../../../corelib/tools/qchar.h \ - ../../../../include/QtCore/qbytearray.h \ - ../../../corelib/tools/qbytearray.h \ - ../../../../include/QtCore/qrefcount.h \ - ../../../corelib/tools/qrefcount.h \ - ../../../../include/QtCore/qarraydata.h \ - ../../../corelib/tools/qarraydata.h \ - ../../../../include/QtCore/qstringbuilder.h \ - ../../../corelib/tools/qstringbuilder.h \ - ../../../../include/QtCore/qlist.h \ - ../../../corelib/tools/qlist.h \ - ../../../../include/QtCore/qalgorithms.h \ - ../../../corelib/tools/qalgorithms.h \ - ../../../../include/QtCore/qiterator.h \ - ../../../corelib/tools/qiterator.h \ - ../../../../include/QtCore/qbytearraylist.h \ - ../../../corelib/tools/qbytearraylist.h \ - ../../../../include/QtCore/qstringlist.h \ - ../../../corelib/tools/qstringlist.h \ - ../../../../include/QtCore/qregexp.h \ - ../../../corelib/tools/qregexp.h \ - ../../../../include/QtCore/qstringmatcher.h \ - ../../../corelib/tools/qstringmatcher.h \ - ../../../../include/QtCore/qcoreevent.h \ - ../../../corelib/kernel/qcoreevent.h \ - ../../../../include/QtCore/qscopedpointer.h \ - ../../../corelib/tools/qscopedpointer.h \ - ../../../../include/QtCore/qmetatype.h \ - ../../../corelib/kernel/qmetatype.h \ - ../../../../include/QtCore/qvarlengtharray.h \ - ../../../corelib/tools/qvarlengtharray.h \ - ../../../../include/QtCore/qcontainerfwd.h \ - ../../../corelib/tools/qcontainerfwd.h \ - ../../../../include/QtCore/qisenum.h \ - ../../../corelib/global/qisenum.h \ - ../../../../include/QtCore/qobject_impl.h \ - ../../../corelib/kernel/qobject_impl.h \ - ../../../../include/QtCore/QByteArray \ - ../../../../include/QtCore/QList \ - ../../../../include/QtCore/QMap \ - ../../../../include/QtCore/qmap.h \ - ../../../corelib/tools/qmap.h \ - ../../../../include/QtCore/qpair.h \ - ../../../corelib/tools/qpair.h \ - ../../../../include/QtCore/qdebug.h \ - ../../../corelib/io/qdebug.h \ - ../../../../include/QtCore/qhash.h \ - ../../../corelib/tools/qhash.h \ - ../../../../include/QtCore/qtextstream.h \ - ../../../corelib/io/qtextstream.h \ - ../../../../include/QtCore/qiodevice.h \ - ../../../corelib/io/qiodevice.h \ - ../../../../include/QtCore/qlocale.h \ - ../../../corelib/tools/qlocale.h \ - ../../../../include/QtCore/qvariant.h \ - ../../../corelib/kernel/qvariant.h \ - ../../../../include/QtCore/qshareddata.h \ - ../../../corelib/tools/qshareddata.h \ - ../../../../include/QtCore/qvector.h \ - ../../../corelib/tools/qvector.h \ - ../../../../include/QtCore/qpoint.h \ - ../../../corelib/tools/qpoint.h \ - ../../../../include/QtCore/qset.h \ - ../../../corelib/tools/qset.h \ - ../../../../include/QtCore/qcontiguouscache.h \ - ../../../corelib/tools/qcontiguouscache.h \ - ../../../../include/QtCore/QString \ - ../../../../include/QtCore/QStringList \ - ../../../../include/QtCore/QVariant \ - ../../../../include/QtDBus/QtDBus \ - ../../../../include/QtDBus/QtDBusDepends \ - ../../../../include/QtCore/QtCore \ - ../../../../include/QtCore/QtCoreDepends \ - ../../../../include/QtCore/qabstractanimation.h \ - ../../../corelib/animation/qabstractanimation.h \ - ../../../../include/QtCore/qanimationgroup.h \ - ../../../corelib/animation/qanimationgroup.h \ - ../../../../include/QtCore/qparallelanimationgroup.h \ - ../../../corelib/animation/qparallelanimationgroup.h \ - ../../../../include/QtCore/qpauseanimation.h \ - ../../../corelib/animation/qpauseanimation.h \ - ../../../../include/QtCore/qpropertyanimation.h \ - ../../../corelib/animation/qpropertyanimation.h \ - ../../../../include/QtCore/qvariantanimation.h \ - ../../../corelib/animation/qvariantanimation.h \ - ../../../../include/QtCore/qeasingcurve.h \ - ../../../corelib/tools/qeasingcurve.h \ - ../../../../include/QtCore/qsequentialanimationgroup.h \ - ../../../corelib/animation/qsequentialanimationgroup.h \ - ../../../../include/QtCore/qtextcodec.h \ - ../../../corelib/codecs/qtextcodec.h \ - ../../../../include/QtCore/qendian.h \ - ../../../corelib/global/qendian.h \ - ../../../../include/QtCore/qlibraryinfo.h \ - ../../../corelib/global/qlibraryinfo.h \ - ../../../../include/QtCore/qdatetime.h \ - ../../../corelib/tools/qdatetime.h \ - ../../../../include/QtCore/qbuffer.h \ - ../../../corelib/io/qbuffer.h \ - ../../../../include/QtCore/qdatastream.h \ - ../../../corelib/io/qdatastream.h \ - ../../../../include/QtCore/qdir.h \ - ../../../corelib/io/qdir.h \ - ../../../../include/QtCore/qfileinfo.h \ - ../../../corelib/io/qfileinfo.h \ - ../../../../include/QtCore/qfile.h \ - ../../../corelib/io/qfile.h \ - ../../../../include/QtCore/qfiledevice.h \ - ../../../corelib/io/qfiledevice.h \ - ../../../../include/QtCore/qdiriterator.h \ - ../../../corelib/io/qdiriterator.h \ - ../../../../include/QtCore/qfileselector.h \ - ../../../corelib/io/qfileselector.h \ - ../../../../include/QtCore/qfilesystemwatcher.h \ - ../../../corelib/io/qfilesystemwatcher.h \ - ../../../../include/QtCore/qlockfile.h \ - ../../../corelib/io/qlockfile.h \ - ../../../../include/QtCore/qloggingcategory.h \ - ../../../corelib/io/qloggingcategory.h \ - ../../../../include/QtCore/qprocess.h \ - ../../../corelib/io/qprocess.h \ - ../../../../include/QtCore/qresource.h \ - ../../../corelib/io/qresource.h \ - ../../../../include/QtCore/qsavefile.h \ - ../../../corelib/io/qsavefile.h \ - ../../../../include/QtCore/qsettings.h \ - ../../../corelib/io/qsettings.h \ - ../../../../include/QtCore/qstandardpaths.h \ - ../../../corelib/io/qstandardpaths.h \ - ../../../../include/QtCore/qstorageinfo.h \ - ../../../corelib/io/qstorageinfo.h \ - ../../../../include/QtCore/qtemporarydir.h \ - ../../../corelib/io/qtemporarydir.h \ - ../../../../include/QtCore/QScopedPointer \ - ../../../../include/QtCore/qtemporaryfile.h \ - ../../../corelib/io/qtemporaryfile.h \ - ../../../../include/QtCore/qurl.h \ - ../../../corelib/io/qurl.h \ - ../../../../include/QtCore/qurlquery.h \ - ../../../corelib/io/qurlquery.h \ - ../../../../include/QtCore/qabstractitemmodel.h \ - ../../../corelib/itemmodels/qabstractitemmodel.h \ - ../../../../include/QtCore/qabstractproxymodel.h \ - ../../../corelib/itemmodels/qabstractproxymodel.h \ - ../../../../include/QtCore/qidentityproxymodel.h \ - ../../../corelib/itemmodels/qidentityproxymodel.h \ - ../../../../include/QtCore/qitemselectionmodel.h \ - ../../../corelib/itemmodels/qitemselectionmodel.h \ - ../../../../include/QtCore/qsortfilterproxymodel.h \ - ../../../corelib/itemmodels/qsortfilterproxymodel.h \ - ../../../../include/QtCore/qstringlistmodel.h \ - ../../../corelib/itemmodels/qstringlistmodel.h \ - ../../../../include/QtCore/qjsonarray.h \ - ../../../corelib/json/qjsonarray.h \ - ../../../../include/QtCore/qjsonvalue.h \ - ../../../corelib/json/qjsonvalue.h \ - ../../../../include/QtCore/qjsondocument.h \ - ../../../corelib/json/qjsondocument.h \ - ../../../../include/QtCore/qjsonobject.h \ - ../../../corelib/json/qjsonobject.h \ - ../../../../include/QtCore/qabstracteventdispatcher.h \ - ../../../corelib/kernel/qabstracteventdispatcher.h \ - ../../../../include/QtCore/qeventloop.h \ - ../../../corelib/kernel/qeventloop.h \ - ../../../../include/QtCore/qabstractnativeeventfilter.h \ - ../../../corelib/kernel/qabstractnativeeventfilter.h \ - ../../../../include/QtCore/qbasictimer.h \ - ../../../corelib/kernel/qbasictimer.h \ - ../../../../include/QtCore/qcoreapplication.h \ - ../../../corelib/kernel/qcoreapplication.h \ - ../../../../include/QtCore/qmath.h \ - ../../../corelib/kernel/qmath.h \ - ../../../../include/QtCore/qmetaobject.h \ - ../../../corelib/kernel/qmetaobject.h \ - ../../../../include/QtCore/qmimedata.h \ - ../../../corelib/kernel/qmimedata.h \ - ../../../../include/QtCore/qobjectcleanuphandler.h \ - ../../../corelib/kernel/qobjectcleanuphandler.h \ - ../../../../include/QtCore/qpointer.h \ - ../../../corelib/kernel/qpointer.h \ - ../../../../include/QtCore/qsharedpointer.h \ - ../../../corelib/tools/qsharedpointer.h \ - ../../../../include/QtCore/qsharedpointer_impl.h \ - ../../../corelib/tools/qsharedpointer_impl.h \ - ../../../../include/QtCore/qsharedmemory.h \ - ../../../corelib/kernel/qsharedmemory.h \ - ../../../../include/QtCore/qsignalmapper.h \ - ../../../corelib/kernel/qsignalmapper.h \ - ../../../../include/QtCore/qsocketnotifier.h \ - ../../../corelib/kernel/qsocketnotifier.h \ - ../../../../include/QtCore/qsystemsemaphore.h \ - ../../../corelib/kernel/qsystemsemaphore.h \ - ../../../../include/QtCore/qtimer.h \ - ../../../corelib/kernel/qtimer.h \ - ../../../../include/QtCore/qtranslator.h \ - ../../../corelib/kernel/qtranslator.h \ - ../../../../include/QtCore/qwineventnotifier.h \ - ../../../corelib/kernel/qwineventnotifier.h \ - ../../../../include/QtCore/qmimedatabase.h \ - ../../../corelib/mimetypes/qmimedatabase.h \ - ../../../../include/QtCore/qmimetype.h \ - ../../../corelib/mimetypes/qmimetype.h \ - ../../../../include/QtCore/qfactoryinterface.h \ - ../../../corelib/plugin/qfactoryinterface.h \ - ../../../../include/QtCore/qlibrary.h \ - ../../../corelib/plugin/qlibrary.h \ - ../../../../include/QtCore/qplugin.h \ - ../../../corelib/plugin/qplugin.h \ - ../../../../include/QtCore/qpluginloader.h \ - ../../../corelib/plugin/qpluginloader.h \ - ../../../../include/QtCore/quuid.h \ - ../../../corelib/plugin/quuid.h \ - ../../../../include/QtCore/qabstractstate.h \ - ../../../corelib/statemachine/qabstractstate.h \ - ../../../../include/QtCore/qabstracttransition.h \ - ../../../corelib/statemachine/qabstracttransition.h \ - ../../../../include/QtCore/qeventtransition.h \ - ../../../corelib/statemachine/qeventtransition.h \ - ../../../../include/QtCore/qfinalstate.h \ - ../../../corelib/statemachine/qfinalstate.h \ - ../../../../include/QtCore/qhistorystate.h \ - ../../../corelib/statemachine/qhistorystate.h \ - ../../../../include/QtCore/qsignaltransition.h \ - ../../../corelib/statemachine/qsignaltransition.h \ - ../../../../include/QtCore/qstate.h \ - ../../../corelib/statemachine/qstate.h \ - ../../../../include/QtCore/qstatemachine.h \ - ../../../corelib/statemachine/qstatemachine.h \ - ../../../../include/QtCore/qexception.h \ - ../../../corelib/thread/qexception.h \ - ../../../../include/QtCore/qfuture.h \ - ../../../corelib/thread/qfuture.h \ - ../../../../include/QtCore/qfutureinterface.h \ - ../../../corelib/thread/qfutureinterface.h \ - ../../../../include/QtCore/qrunnable.h \ - ../../../corelib/thread/qrunnable.h \ - ../../../../include/QtCore/qresultstore.h \ - ../../../corelib/thread/qresultstore.h \ - ../../../../include/QtCore/qfuturesynchronizer.h \ - ../../../corelib/thread/qfuturesynchronizer.h \ - ../../../../include/QtCore/qfuturewatcher.h \ - ../../../corelib/thread/qfuturewatcher.h \ - ../../../../include/QtCore/qreadwritelock.h \ - ../../../corelib/thread/qreadwritelock.h \ - ../../../../include/QtCore/qsemaphore.h \ - ../../../corelib/thread/qsemaphore.h \ - ../../../../include/QtCore/qthread.h \ - ../../../corelib/thread/qthread.h \ - ../../../../include/QtCore/qthreadpool.h \ - ../../../corelib/thread/qthreadpool.h \ - ../../../../include/QtCore/qthreadstorage.h \ - ../../../corelib/thread/qthreadstorage.h \ - ../../../../include/QtCore/qwaitcondition.h \ - ../../../corelib/thread/qwaitcondition.h \ - ../../../../include/QtCore/qarraydataops.h \ - ../../../corelib/tools/qarraydataops.h \ - ../../../../include/QtCore/qarraydatapointer.h \ - ../../../corelib/tools/qarraydatapointer.h \ - ../../../../include/QtCore/qbitarray.h \ - ../../../corelib/tools/qbitarray.h \ - ../../../../include/QtCore/qbytearraymatcher.h \ - ../../../corelib/tools/qbytearraymatcher.h \ - ../../../../include/QtCore/qcache.h \ - ../../../corelib/tools/qcache.h \ - ../../../../include/QtCore/qcollator.h \ - ../../../corelib/tools/qcollator.h \ - ../../../../include/QtCore/qcommandlineoption.h \ - ../../../corelib/tools/qcommandlineoption.h \ - ../../../../include/QtCore/qcommandlineparser.h \ - ../../../corelib/tools/qcommandlineparser.h \ - ../../../../include/QtCore/qcryptographichash.h \ - ../../../corelib/tools/qcryptographichash.h \ - ../../../../include/QtCore/qelapsedtimer.h \ - ../../../corelib/tools/qelapsedtimer.h \ - ../../../../include/QtCore/qline.h \ - ../../../corelib/tools/qline.h \ - ../../../../include/QtCore/qlinkedlist.h \ - ../../../corelib/tools/qlinkedlist.h \ - ../../../../include/QtCore/qmargins.h \ - ../../../corelib/tools/qmargins.h \ - ../../../../include/QtCore/qmessageauthenticationcode.h \ - ../../../corelib/tools/qmessageauthenticationcode.h \ - ../../../../include/QtCore/qqueue.h \ - ../../../corelib/tools/qqueue.h \ - ../../../../include/QtCore/qrect.h \ - ../../../corelib/tools/qrect.h \ - ../../../../include/QtCore/qsize.h \ - ../../../corelib/tools/qsize.h \ - ../../../../include/QtCore/qregularexpression.h \ - ../../../corelib/tools/qregularexpression.h \ - ../../../../include/QtCore/qscopedvaluerollback.h \ - ../../../corelib/tools/qscopedvaluerollback.h \ - ../../../../include/QtCore/qstack.h \ - ../../../corelib/tools/qstack.h \ - ../../../../include/QtCore/qtextboundaryfinder.h \ - ../../../corelib/tools/qtextboundaryfinder.h \ - ../../../../include/QtCore/qtimeline.h \ - ../../../corelib/tools/qtimeline.h \ - ../../../../include/QtCore/qtimezone.h \ - ../../../corelib/tools/qtimezone.h \ - ../../../../include/QtCore/qxmlstream.h \ - ../../../corelib/xml/qxmlstream.h \ - ../../../../include/QtCore/qtcoreversion.h \ - ../../../../include/QtDBus/qdbusabstractadaptor.h \ - ../../../dbus/qdbusabstractadaptor.h \ - ../../../../include/QtDBus/qdbusmacros.h \ - ../../../dbus/qdbusmacros.h \ - ../../../../include/QtDBus/qdbusabstractinterface.h \ - ../../../dbus/qdbusabstractinterface.h \ - ../../../../include/QtDBus/qdbusmessage.h \ - ../../../dbus/qdbusmessage.h \ - ../../../../include/QtDBus/qdbuserror.h \ - ../../../dbus/qdbuserror.h \ - ../../../../include/QtDBus/qdbusextratypes.h \ - ../../../dbus/qdbusextratypes.h \ - ../../../../include/QtDBus/qdbusconnection.h \ - ../../../dbus/qdbusconnection.h \ - ../../../../include/QtDBus/qdbusargument.h \ - ../../../dbus/qdbusargument.h \ - ../../../../include/QtDBus/qdbusconnectioninterface.h \ - ../../../dbus/qdbusconnectioninterface.h \ - ../../../../include/QtDBus/qdbusreply.h \ - ../../../dbus/qdbusreply.h \ - ../../../../include/QtDBus/qdbuspendingreply.h \ - ../../../dbus/qdbuspendingreply.h \ - ../../../../include/QtDBus/qdbuspendingcall.h \ - ../../../dbus/qdbuspendingcall.h \ - ../../../../include/QtDBus/qdbuscontext.h \ - ../../../dbus/qdbuscontext.h \ - ../../../../include/QtDBus/qdbusinterface.h \ - ../../../dbus/qdbusinterface.h \ - ../../../../include/QtDBus/qdbusmetatype.h \ - ../../../dbus/qdbusmetatype.h \ - ../../../../include/QtDBus/qdbusserver.h \ - ../../../dbus/qdbusserver.h \ - ../../../../include/QtDBus/qdbusservicewatcher.h \ - ../../../dbus/qdbusservicewatcher.h \ - ../../../../include/QtDBus/qdbusunixfiledescriptor.h \ - ../../../dbus/qdbusunixfiledescriptor.h \ - ../../../../include/QtDBus/qdbusvirtualobject.h \ - ../../../dbus/qdbusvirtualobject.h \ - ../../../../include/QtDBus/qtdbusversion.h \ - fcitxqtinputmethoditem.h \ - fcitxqtdbusaddons_export.h \ - ../../../../include/QtCore/QMetaType \ - ../../../../include/QtDBus/QDBusArgument - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/fcitxqtinputmethodproxy.o fcitxqtinputmethodproxy.cpp - -.obj/fcitxqtkeyboardlayout.o: fcitxqtkeyboardlayout.cpp ../../../../include/QtDBus/QDBusArgument \ - ../../../../include/QtDBus/qdbusargument.h \ - ../../../dbus/qdbusargument.h \ - ../../../../include/QtCore/qbytearray.h \ - ../../../corelib/tools/qbytearray.h \ - ../../../../include/QtCore/qrefcount.h \ - ../../../corelib/tools/qrefcount.h \ - ../../../../include/QtCore/qatomic.h \ - ../../../corelib/thread/qatomic.h \ - ../../../../include/QtCore/qglobal.h \ - ../../../corelib/global/qglobal.h \ - ../../../../include/QtCore/qconfig.h \ - ../../../corelib/global/qconfig.h \ - ../../../../include/QtCore/qfeatures.h \ - ../../../corelib/global/qfeatures.h \ - ../../../../include/QtCore/qsystemdetection.h \ - ../../../corelib/global/qsystemdetection.h \ - ../../../../include/QtCore/qprocessordetection.h \ - ../../../corelib/global/qprocessordetection.h \ - ../../../../include/QtCore/qcompilerdetection.h \ - ../../../corelib/global/qcompilerdetection.h \ - ../../../../include/QtCore/qtypeinfo.h \ - ../../../corelib/global/qtypeinfo.h \ - ../../../../include/QtCore/qtypetraits.h \ - ../../../corelib/global/qtypetraits.h \ - ../../../../include/QtCore/qsysinfo.h \ - ../../../corelib/global/qsysinfo.h \ - ../../../../include/QtCore/qlogging.h \ - ../../../corelib/global/qlogging.h \ - ../../../../include/QtCore/qflags.h \ - ../../../corelib/global/qflags.h \ - ../../../../include/QtCore/qglobalstatic.h \ - ../../../corelib/global/qglobalstatic.h \ - ../../../../include/QtCore/qmutex.h \ - ../../../corelib/thread/qmutex.h \ - ../../../../include/QtCore/qnumeric.h \ - ../../../corelib/global/qnumeric.h \ - ../../../../include/QtCore/qbasicatomic.h \ - ../../../corelib/thread/qbasicatomic.h \ - ../../../../include/QtCore/qatomic_bootstrap.h \ - ../../../corelib/arch/qatomic_bootstrap.h \ - ../../../../include/QtCore/qgenericatomic.h \ - ../../../corelib/thread/qgenericatomic.h \ - ../../../../include/QtCore/qatomic_cxx11.h \ - ../../../corelib/arch/qatomic_cxx11.h \ - ../../../../include/QtCore/qatomic_gcc.h \ - ../../../corelib/arch/qatomic_gcc.h \ - ../../../../include/QtCore/qatomic_msvc.h \ - ../../../corelib/arch/qatomic_msvc.h \ - ../../../../include/QtCore/qatomic_armv7.h \ - ../../../corelib/arch/qatomic_armv7.h \ - ../../../../include/QtCore/qatomic_armv6.h \ - ../../../corelib/arch/qatomic_armv6.h \ - ../../../../include/QtCore/qatomic_armv5.h \ - ../../../corelib/arch/qatomic_armv5.h \ - ../../../../include/QtCore/qatomic_ia64.h \ - ../../../corelib/arch/qatomic_ia64.h \ - ../../../../include/QtCore/qatomic_mips.h \ - ../../../corelib/arch/qatomic_mips.h \ - ../../../../include/QtCore/qatomic_x86.h \ - ../../../corelib/arch/qatomic_x86.h \ - ../../../../include/QtCore/qatomic_unix.h \ - ../../../corelib/arch/qatomic_unix.h \ - ../../../../include/QtCore/qnamespace.h \ - ../../../corelib/global/qnamespace.h \ - ../../../../include/QtCore/qarraydata.h \ - ../../../corelib/tools/qarraydata.h \ - ../../../../include/QtCore/qstring.h \ - ../../../corelib/tools/qstring.h \ - ../../../../include/QtCore/qchar.h \ - ../../../corelib/tools/qchar.h \ - ../../../../include/QtCore/qstringbuilder.h \ - ../../../corelib/tools/qstringbuilder.h \ - ../../../../include/QtCore/qhash.h \ - ../../../corelib/tools/qhash.h \ - ../../../../include/QtCore/qiterator.h \ - ../../../corelib/tools/qiterator.h \ - ../../../../include/QtCore/qlist.h \ - ../../../corelib/tools/qlist.h \ - ../../../../include/QtCore/qalgorithms.h \ - ../../../corelib/tools/qalgorithms.h \ - ../../../../include/QtCore/qbytearraylist.h \ - ../../../corelib/tools/qbytearraylist.h \ - ../../../../include/QtCore/qstringlist.h \ - ../../../corelib/tools/qstringlist.h \ - ../../../../include/QtCore/qregexp.h \ - ../../../corelib/tools/qregexp.h \ - ../../../../include/QtCore/qstringmatcher.h \ - ../../../corelib/tools/qstringmatcher.h \ - ../../../../include/QtCore/qpair.h \ - ../../../corelib/tools/qpair.h \ - ../../../../include/QtCore/qmap.h \ - ../../../corelib/tools/qmap.h \ - ../../../../include/QtCore/qdebug.h \ - ../../../corelib/io/qdebug.h \ - ../../../../include/QtCore/qtextstream.h \ - ../../../corelib/io/qtextstream.h \ - ../../../../include/QtCore/qiodevice.h \ - ../../../corelib/io/qiodevice.h \ - ../../../../include/QtCore/qobject.h \ - ../../../corelib/kernel/qobject.h \ - ../../../../include/QtCore/qobjectdefs.h \ - ../../../corelib/kernel/qobjectdefs.h \ - ../../../../include/QtCore/qobjectdefs_impl.h \ - ../../../corelib/kernel/qobjectdefs_impl.h \ - ../../../../include/QtCore/qcoreevent.h \ - ../../../corelib/kernel/qcoreevent.h \ - ../../../../include/QtCore/qscopedpointer.h \ - ../../../corelib/tools/qscopedpointer.h \ - ../../../../include/QtCore/qmetatype.h \ - ../../../corelib/kernel/qmetatype.h \ - ../../../../include/QtCore/qvarlengtharray.h \ - ../../../corelib/tools/qvarlengtharray.h \ - ../../../../include/QtCore/qcontainerfwd.h \ - ../../../corelib/tools/qcontainerfwd.h \ - ../../../../include/QtCore/qisenum.h \ - ../../../corelib/global/qisenum.h \ - ../../../../include/QtCore/qobject_impl.h \ - ../../../corelib/kernel/qobject_impl.h \ - ../../../../include/QtCore/qlocale.h \ - ../../../corelib/tools/qlocale.h \ - ../../../../include/QtCore/qvariant.h \ - ../../../corelib/kernel/qvariant.h \ - ../../../../include/QtCore/qshareddata.h \ - ../../../corelib/tools/qshareddata.h \ - ../../../../include/QtCore/qvector.h \ - ../../../corelib/tools/qvector.h \ - ../../../../include/QtCore/qpoint.h \ - ../../../corelib/tools/qpoint.h \ - ../../../../include/QtCore/qset.h \ - ../../../corelib/tools/qset.h \ - ../../../../include/QtCore/qcontiguouscache.h \ - ../../../corelib/tools/qcontiguouscache.h \ - ../../../../include/QtDBus/qdbusextratypes.h \ - ../../../dbus/qdbusextratypes.h \ - ../../../../include/QtDBus/qdbusmacros.h \ - ../../../dbus/qdbusmacros.h \ - ../../../../include/QtDBus/QDBusMetaType \ - ../../../../include/QtDBus/qdbusmetatype.h \ - ../../../dbus/qdbusmetatype.h \ - fcitxqtkeyboardlayout.h \ - fcitxqtdbusaddons_export.h \ - ../../../../include/QtCore/QString \ - ../../../../include/QtCore/QMetaType - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/fcitxqtkeyboardlayout.o fcitxqtkeyboardlayout.cpp - -.obj/fcitxqtkeyboardproxy.o: fcitxqtkeyboardproxy.cpp fcitxqtkeyboardproxy.h \ - ../../../../include/QtCore/QObject \ - ../../../../include/QtCore/qobject.h \ - ../../../corelib/kernel/qobject.h \ - ../../../../include/QtCore/qobjectdefs.h \ - ../../../corelib/kernel/qobjectdefs.h \ - ../../../../include/QtCore/qnamespace.h \ - ../../../corelib/global/qnamespace.h \ - ../../../../include/QtCore/qglobal.h \ - ../../../corelib/global/qglobal.h \ - ../../../../include/QtCore/qconfig.h \ - ../../../corelib/global/qconfig.h \ - ../../../../include/QtCore/qfeatures.h \ - ../../../corelib/global/qfeatures.h \ - ../../../../include/QtCore/qsystemdetection.h \ - ../../../corelib/global/qsystemdetection.h \ - ../../../../include/QtCore/qprocessordetection.h \ - ../../../corelib/global/qprocessordetection.h \ - ../../../../include/QtCore/qcompilerdetection.h \ - ../../../corelib/global/qcompilerdetection.h \ - ../../../../include/QtCore/qtypeinfo.h \ - ../../../corelib/global/qtypeinfo.h \ - ../../../../include/QtCore/qtypetraits.h \ - ../../../corelib/global/qtypetraits.h \ - ../../../../include/QtCore/qsysinfo.h \ - ../../../corelib/global/qsysinfo.h \ - ../../../../include/QtCore/qlogging.h \ - ../../../corelib/global/qlogging.h \ - ../../../../include/QtCore/qflags.h \ - ../../../corelib/global/qflags.h \ - ../../../../include/QtCore/qatomic.h \ - ../../../corelib/thread/qatomic.h \ - ../../../../include/QtCore/qbasicatomic.h \ - ../../../corelib/thread/qbasicatomic.h \ - ../../../../include/QtCore/qatomic_bootstrap.h \ - ../../../corelib/arch/qatomic_bootstrap.h \ - ../../../../include/QtCore/qgenericatomic.h \ - ../../../corelib/thread/qgenericatomic.h \ - ../../../../include/QtCore/qatomic_cxx11.h \ - ../../../corelib/arch/qatomic_cxx11.h \ - ../../../../include/QtCore/qatomic_gcc.h \ - ../../../corelib/arch/qatomic_gcc.h \ - ../../../../include/QtCore/qatomic_msvc.h \ - ../../../corelib/arch/qatomic_msvc.h \ - ../../../../include/QtCore/qatomic_armv7.h \ - ../../../corelib/arch/qatomic_armv7.h \ - ../../../../include/QtCore/qatomic_armv6.h \ - ../../../corelib/arch/qatomic_armv6.h \ - ../../../../include/QtCore/qatomic_armv5.h \ - ../../../corelib/arch/qatomic_armv5.h \ - ../../../../include/QtCore/qatomic_ia64.h \ - ../../../corelib/arch/qatomic_ia64.h \ - ../../../../include/QtCore/qatomic_mips.h \ - ../../../corelib/arch/qatomic_mips.h \ - ../../../../include/QtCore/qatomic_x86.h \ - ../../../corelib/arch/qatomic_x86.h \ - ../../../../include/QtCore/qatomic_unix.h \ - ../../../corelib/arch/qatomic_unix.h \ - ../../../../include/QtCore/qglobalstatic.h \ - ../../../corelib/global/qglobalstatic.h \ - ../../../../include/QtCore/qmutex.h \ - ../../../corelib/thread/qmutex.h \ - ../../../../include/QtCore/qnumeric.h \ - ../../../corelib/global/qnumeric.h \ - ../../../../include/QtCore/qobjectdefs_impl.h \ - ../../../corelib/kernel/qobjectdefs_impl.h \ - ../../../../include/QtCore/qstring.h \ - ../../../corelib/tools/qstring.h \ - ../../../../include/QtCore/qchar.h \ - ../../../corelib/tools/qchar.h \ - ../../../../include/QtCore/qbytearray.h \ - ../../../corelib/tools/qbytearray.h \ - ../../../../include/QtCore/qrefcount.h \ - ../../../corelib/tools/qrefcount.h \ - ../../../../include/QtCore/qarraydata.h \ - ../../../corelib/tools/qarraydata.h \ - ../../../../include/QtCore/qstringbuilder.h \ - ../../../corelib/tools/qstringbuilder.h \ - ../../../../include/QtCore/qlist.h \ - ../../../corelib/tools/qlist.h \ - ../../../../include/QtCore/qalgorithms.h \ - ../../../corelib/tools/qalgorithms.h \ - ../../../../include/QtCore/qiterator.h \ - ../../../corelib/tools/qiterator.h \ - ../../../../include/QtCore/qbytearraylist.h \ - ../../../corelib/tools/qbytearraylist.h \ - ../../../../include/QtCore/qstringlist.h \ - ../../../corelib/tools/qstringlist.h \ - ../../../../include/QtCore/qregexp.h \ - ../../../corelib/tools/qregexp.h \ - ../../../../include/QtCore/qstringmatcher.h \ - ../../../corelib/tools/qstringmatcher.h \ - ../../../../include/QtCore/qcoreevent.h \ - ../../../corelib/kernel/qcoreevent.h \ - ../../../../include/QtCore/qscopedpointer.h \ - ../../../corelib/tools/qscopedpointer.h \ - ../../../../include/QtCore/qmetatype.h \ - ../../../corelib/kernel/qmetatype.h \ - ../../../../include/QtCore/qvarlengtharray.h \ - ../../../corelib/tools/qvarlengtharray.h \ - ../../../../include/QtCore/qcontainerfwd.h \ - ../../../corelib/tools/qcontainerfwd.h \ - ../../../../include/QtCore/qisenum.h \ - ../../../corelib/global/qisenum.h \ - ../../../../include/QtCore/qobject_impl.h \ - ../../../corelib/kernel/qobject_impl.h \ - ../../../../include/QtCore/QByteArray \ - ../../../../include/QtCore/QList \ - ../../../../include/QtCore/QMap \ - ../../../../include/QtCore/qmap.h \ - ../../../corelib/tools/qmap.h \ - ../../../../include/QtCore/qpair.h \ - ../../../corelib/tools/qpair.h \ - ../../../../include/QtCore/qdebug.h \ - ../../../corelib/io/qdebug.h \ - ../../../../include/QtCore/qhash.h \ - ../../../corelib/tools/qhash.h \ - ../../../../include/QtCore/qtextstream.h \ - ../../../corelib/io/qtextstream.h \ - ../../../../include/QtCore/qiodevice.h \ - ../../../corelib/io/qiodevice.h \ - ../../../../include/QtCore/qlocale.h \ - ../../../corelib/tools/qlocale.h \ - ../../../../include/QtCore/qvariant.h \ - ../../../corelib/kernel/qvariant.h \ - ../../../../include/QtCore/qshareddata.h \ - ../../../corelib/tools/qshareddata.h \ - ../../../../include/QtCore/qvector.h \ - ../../../corelib/tools/qvector.h \ - ../../../../include/QtCore/qpoint.h \ - ../../../corelib/tools/qpoint.h \ - ../../../../include/QtCore/qset.h \ - ../../../corelib/tools/qset.h \ - ../../../../include/QtCore/qcontiguouscache.h \ - ../../../corelib/tools/qcontiguouscache.h \ - ../../../../include/QtCore/QString \ - ../../../../include/QtCore/QStringList \ - ../../../../include/QtCore/QVariant \ - ../../../../include/QtDBus/QtDBus \ - ../../../../include/QtDBus/QtDBusDepends \ - ../../../../include/QtCore/QtCore \ - ../../../../include/QtCore/QtCoreDepends \ - ../../../../include/QtCore/qabstractanimation.h \ - ../../../corelib/animation/qabstractanimation.h \ - ../../../../include/QtCore/qanimationgroup.h \ - ../../../corelib/animation/qanimationgroup.h \ - ../../../../include/QtCore/qparallelanimationgroup.h \ - ../../../corelib/animation/qparallelanimationgroup.h \ - ../../../../include/QtCore/qpauseanimation.h \ - ../../../corelib/animation/qpauseanimation.h \ - ../../../../include/QtCore/qpropertyanimation.h \ - ../../../corelib/animation/qpropertyanimation.h \ - ../../../../include/QtCore/qvariantanimation.h \ - ../../../corelib/animation/qvariantanimation.h \ - ../../../../include/QtCore/qeasingcurve.h \ - ../../../corelib/tools/qeasingcurve.h \ - ../../../../include/QtCore/qsequentialanimationgroup.h \ - ../../../corelib/animation/qsequentialanimationgroup.h \ - ../../../../include/QtCore/qtextcodec.h \ - ../../../corelib/codecs/qtextcodec.h \ - ../../../../include/QtCore/qendian.h \ - ../../../corelib/global/qendian.h \ - ../../../../include/QtCore/qlibraryinfo.h \ - ../../../corelib/global/qlibraryinfo.h \ - ../../../../include/QtCore/qdatetime.h \ - ../../../corelib/tools/qdatetime.h \ - ../../../../include/QtCore/qbuffer.h \ - ../../../corelib/io/qbuffer.h \ - ../../../../include/QtCore/qdatastream.h \ - ../../../corelib/io/qdatastream.h \ - ../../../../include/QtCore/qdir.h \ - ../../../corelib/io/qdir.h \ - ../../../../include/QtCore/qfileinfo.h \ - ../../../corelib/io/qfileinfo.h \ - ../../../../include/QtCore/qfile.h \ - ../../../corelib/io/qfile.h \ - ../../../../include/QtCore/qfiledevice.h \ - ../../../corelib/io/qfiledevice.h \ - ../../../../include/QtCore/qdiriterator.h \ - ../../../corelib/io/qdiriterator.h \ - ../../../../include/QtCore/qfileselector.h \ - ../../../corelib/io/qfileselector.h \ - ../../../../include/QtCore/qfilesystemwatcher.h \ - ../../../corelib/io/qfilesystemwatcher.h \ - ../../../../include/QtCore/qlockfile.h \ - ../../../corelib/io/qlockfile.h \ - ../../../../include/QtCore/qloggingcategory.h \ - ../../../corelib/io/qloggingcategory.h \ - ../../../../include/QtCore/qprocess.h \ - ../../../corelib/io/qprocess.h \ - ../../../../include/QtCore/qresource.h \ - ../../../corelib/io/qresource.h \ - ../../../../include/QtCore/qsavefile.h \ - ../../../corelib/io/qsavefile.h \ - ../../../../include/QtCore/qsettings.h \ - ../../../corelib/io/qsettings.h \ - ../../../../include/QtCore/qstandardpaths.h \ - ../../../corelib/io/qstandardpaths.h \ - ../../../../include/QtCore/qstorageinfo.h \ - ../../../corelib/io/qstorageinfo.h \ - ../../../../include/QtCore/qtemporarydir.h \ - ../../../corelib/io/qtemporarydir.h \ - ../../../../include/QtCore/QScopedPointer \ - ../../../../include/QtCore/qtemporaryfile.h \ - ../../../corelib/io/qtemporaryfile.h \ - ../../../../include/QtCore/qurl.h \ - ../../../corelib/io/qurl.h \ - ../../../../include/QtCore/qurlquery.h \ - ../../../corelib/io/qurlquery.h \ - ../../../../include/QtCore/qabstractitemmodel.h \ - ../../../corelib/itemmodels/qabstractitemmodel.h \ - ../../../../include/QtCore/qabstractproxymodel.h \ - ../../../corelib/itemmodels/qabstractproxymodel.h \ - ../../../../include/QtCore/qidentityproxymodel.h \ - ../../../corelib/itemmodels/qidentityproxymodel.h \ - ../../../../include/QtCore/qitemselectionmodel.h \ - ../../../corelib/itemmodels/qitemselectionmodel.h \ - ../../../../include/QtCore/qsortfilterproxymodel.h \ - ../../../corelib/itemmodels/qsortfilterproxymodel.h \ - ../../../../include/QtCore/qstringlistmodel.h \ - ../../../corelib/itemmodels/qstringlistmodel.h \ - ../../../../include/QtCore/qjsonarray.h \ - ../../../corelib/json/qjsonarray.h \ - ../../../../include/QtCore/qjsonvalue.h \ - ../../../corelib/json/qjsonvalue.h \ - ../../../../include/QtCore/qjsondocument.h \ - ../../../corelib/json/qjsondocument.h \ - ../../../../include/QtCore/qjsonobject.h \ - ../../../corelib/json/qjsonobject.h \ - ../../../../include/QtCore/qabstracteventdispatcher.h \ - ../../../corelib/kernel/qabstracteventdispatcher.h \ - ../../../../include/QtCore/qeventloop.h \ - ../../../corelib/kernel/qeventloop.h \ - ../../../../include/QtCore/qabstractnativeeventfilter.h \ - ../../../corelib/kernel/qabstractnativeeventfilter.h \ - ../../../../include/QtCore/qbasictimer.h \ - ../../../corelib/kernel/qbasictimer.h \ - ../../../../include/QtCore/qcoreapplication.h \ - ../../../corelib/kernel/qcoreapplication.h \ - ../../../../include/QtCore/qmath.h \ - ../../../corelib/kernel/qmath.h \ - ../../../../include/QtCore/qmetaobject.h \ - ../../../corelib/kernel/qmetaobject.h \ - ../../../../include/QtCore/qmimedata.h \ - ../../../corelib/kernel/qmimedata.h \ - ../../../../include/QtCore/qobjectcleanuphandler.h \ - ../../../corelib/kernel/qobjectcleanuphandler.h \ - ../../../../include/QtCore/qpointer.h \ - ../../../corelib/kernel/qpointer.h \ - ../../../../include/QtCore/qsharedpointer.h \ - ../../../corelib/tools/qsharedpointer.h \ - ../../../../include/QtCore/qsharedpointer_impl.h \ - ../../../corelib/tools/qsharedpointer_impl.h \ - ../../../../include/QtCore/qsharedmemory.h \ - ../../../corelib/kernel/qsharedmemory.h \ - ../../../../include/QtCore/qsignalmapper.h \ - ../../../corelib/kernel/qsignalmapper.h \ - ../../../../include/QtCore/qsocketnotifier.h \ - ../../../corelib/kernel/qsocketnotifier.h \ - ../../../../include/QtCore/qsystemsemaphore.h \ - ../../../corelib/kernel/qsystemsemaphore.h \ - ../../../../include/QtCore/qtimer.h \ - ../../../corelib/kernel/qtimer.h \ - ../../../../include/QtCore/qtranslator.h \ - ../../../corelib/kernel/qtranslator.h \ - ../../../../include/QtCore/qwineventnotifier.h \ - ../../../corelib/kernel/qwineventnotifier.h \ - ../../../../include/QtCore/qmimedatabase.h \ - ../../../corelib/mimetypes/qmimedatabase.h \ - ../../../../include/QtCore/qmimetype.h \ - ../../../corelib/mimetypes/qmimetype.h \ - ../../../../include/QtCore/qfactoryinterface.h \ - ../../../corelib/plugin/qfactoryinterface.h \ - ../../../../include/QtCore/qlibrary.h \ - ../../../corelib/plugin/qlibrary.h \ - ../../../../include/QtCore/qplugin.h \ - ../../../corelib/plugin/qplugin.h \ - ../../../../include/QtCore/qpluginloader.h \ - ../../../corelib/plugin/qpluginloader.h \ - ../../../../include/QtCore/quuid.h \ - ../../../corelib/plugin/quuid.h \ - ../../../../include/QtCore/qabstractstate.h \ - ../../../corelib/statemachine/qabstractstate.h \ - ../../../../include/QtCore/qabstracttransition.h \ - ../../../corelib/statemachine/qabstracttransition.h \ - ../../../../include/QtCore/qeventtransition.h \ - ../../../corelib/statemachine/qeventtransition.h \ - ../../../../include/QtCore/qfinalstate.h \ - ../../../corelib/statemachine/qfinalstate.h \ - ../../../../include/QtCore/qhistorystate.h \ - ../../../corelib/statemachine/qhistorystate.h \ - ../../../../include/QtCore/qsignaltransition.h \ - ../../../corelib/statemachine/qsignaltransition.h \ - ../../../../include/QtCore/qstate.h \ - ../../../corelib/statemachine/qstate.h \ - ../../../../include/QtCore/qstatemachine.h \ - ../../../corelib/statemachine/qstatemachine.h \ - ../../../../include/QtCore/qexception.h \ - ../../../corelib/thread/qexception.h \ - ../../../../include/QtCore/qfuture.h \ - ../../../corelib/thread/qfuture.h \ - ../../../../include/QtCore/qfutureinterface.h \ - ../../../corelib/thread/qfutureinterface.h \ - ../../../../include/QtCore/qrunnable.h \ - ../../../corelib/thread/qrunnable.h \ - ../../../../include/QtCore/qresultstore.h \ - ../../../corelib/thread/qresultstore.h \ - ../../../../include/QtCore/qfuturesynchronizer.h \ - ../../../corelib/thread/qfuturesynchronizer.h \ - ../../../../include/QtCore/qfuturewatcher.h \ - ../../../corelib/thread/qfuturewatcher.h \ - ../../../../include/QtCore/qreadwritelock.h \ - ../../../corelib/thread/qreadwritelock.h \ - ../../../../include/QtCore/qsemaphore.h \ - ../../../corelib/thread/qsemaphore.h \ - ../../../../include/QtCore/qthread.h \ - ../../../corelib/thread/qthread.h \ - ../../../../include/QtCore/qthreadpool.h \ - ../../../corelib/thread/qthreadpool.h \ - ../../../../include/QtCore/qthreadstorage.h \ - ../../../corelib/thread/qthreadstorage.h \ - ../../../../include/QtCore/qwaitcondition.h \ - ../../../corelib/thread/qwaitcondition.h \ - ../../../../include/QtCore/qarraydataops.h \ - ../../../corelib/tools/qarraydataops.h \ - ../../../../include/QtCore/qarraydatapointer.h \ - ../../../corelib/tools/qarraydatapointer.h \ - ../../../../include/QtCore/qbitarray.h \ - ../../../corelib/tools/qbitarray.h \ - ../../../../include/QtCore/qbytearraymatcher.h \ - ../../../corelib/tools/qbytearraymatcher.h \ - ../../../../include/QtCore/qcache.h \ - ../../../corelib/tools/qcache.h \ - ../../../../include/QtCore/qcollator.h \ - ../../../corelib/tools/qcollator.h \ - ../../../../include/QtCore/qcommandlineoption.h \ - ../../../corelib/tools/qcommandlineoption.h \ - ../../../../include/QtCore/qcommandlineparser.h \ - ../../../corelib/tools/qcommandlineparser.h \ - ../../../../include/QtCore/qcryptographichash.h \ - ../../../corelib/tools/qcryptographichash.h \ - ../../../../include/QtCore/qelapsedtimer.h \ - ../../../corelib/tools/qelapsedtimer.h \ - ../../../../include/QtCore/qline.h \ - ../../../corelib/tools/qline.h \ - ../../../../include/QtCore/qlinkedlist.h \ - ../../../corelib/tools/qlinkedlist.h \ - ../../../../include/QtCore/qmargins.h \ - ../../../corelib/tools/qmargins.h \ - ../../../../include/QtCore/qmessageauthenticationcode.h \ - ../../../corelib/tools/qmessageauthenticationcode.h \ - ../../../../include/QtCore/qqueue.h \ - ../../../corelib/tools/qqueue.h \ - ../../../../include/QtCore/qrect.h \ - ../../../corelib/tools/qrect.h \ - ../../../../include/QtCore/qsize.h \ - ../../../corelib/tools/qsize.h \ - ../../../../include/QtCore/qregularexpression.h \ - ../../../corelib/tools/qregularexpression.h \ - ../../../../include/QtCore/qscopedvaluerollback.h \ - ../../../corelib/tools/qscopedvaluerollback.h \ - ../../../../include/QtCore/qstack.h \ - ../../../corelib/tools/qstack.h \ - ../../../../include/QtCore/qtextboundaryfinder.h \ - ../../../corelib/tools/qtextboundaryfinder.h \ - ../../../../include/QtCore/qtimeline.h \ - ../../../corelib/tools/qtimeline.h \ - ../../../../include/QtCore/qtimezone.h \ - ../../../corelib/tools/qtimezone.h \ - ../../../../include/QtCore/qxmlstream.h \ - ../../../corelib/xml/qxmlstream.h \ - ../../../../include/QtCore/qtcoreversion.h \ - ../../../../include/QtDBus/qdbusabstractadaptor.h \ - ../../../dbus/qdbusabstractadaptor.h \ - ../../../../include/QtDBus/qdbusmacros.h \ - ../../../dbus/qdbusmacros.h \ - ../../../../include/QtDBus/qdbusabstractinterface.h \ - ../../../dbus/qdbusabstractinterface.h \ - ../../../../include/QtDBus/qdbusmessage.h \ - ../../../dbus/qdbusmessage.h \ - ../../../../include/QtDBus/qdbuserror.h \ - ../../../dbus/qdbuserror.h \ - ../../../../include/QtDBus/qdbusextratypes.h \ - ../../../dbus/qdbusextratypes.h \ - ../../../../include/QtDBus/qdbusconnection.h \ - ../../../dbus/qdbusconnection.h \ - ../../../../include/QtDBus/qdbusargument.h \ - ../../../dbus/qdbusargument.h \ - ../../../../include/QtDBus/qdbusconnectioninterface.h \ - ../../../dbus/qdbusconnectioninterface.h \ - ../../../../include/QtDBus/qdbusreply.h \ - ../../../dbus/qdbusreply.h \ - ../../../../include/QtDBus/qdbuspendingreply.h \ - ../../../dbus/qdbuspendingreply.h \ - ../../../../include/QtDBus/qdbuspendingcall.h \ - ../../../dbus/qdbuspendingcall.h \ - ../../../../include/QtDBus/qdbuscontext.h \ - ../../../dbus/qdbuscontext.h \ - ../../../../include/QtDBus/qdbusinterface.h \ - ../../../dbus/qdbusinterface.h \ - ../../../../include/QtDBus/qdbusmetatype.h \ - ../../../dbus/qdbusmetatype.h \ - ../../../../include/QtDBus/qdbusserver.h \ - ../../../dbus/qdbusserver.h \ - ../../../../include/QtDBus/qdbusservicewatcher.h \ - ../../../dbus/qdbusservicewatcher.h \ - ../../../../include/QtDBus/qdbusunixfiledescriptor.h \ - ../../../dbus/qdbusunixfiledescriptor.h \ - ../../../../include/QtDBus/qdbusvirtualobject.h \ - ../../../dbus/qdbusvirtualobject.h \ - ../../../../include/QtDBus/qtdbusversion.h \ - fcitxqtkeyboardlayout.h \ - fcitxqtdbusaddons_export.h \ - ../../../../include/QtCore/QMetaType \ - ../../../../include/QtDBus/QDBusArgument - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/fcitxqtkeyboardproxy.o fcitxqtkeyboardproxy.cpp - -.obj/keyuni.o: keyuni.cpp keyuni.h \ - ../../../../include/QtCore/qglobal.h \ - ../../../corelib/global/qglobal.h \ - ../../../../include/QtCore/qconfig.h \ - ../../../corelib/global/qconfig.h \ - ../../../../include/QtCore/qfeatures.h \ - ../../../corelib/global/qfeatures.h \ - ../../../../include/QtCore/qsystemdetection.h \ - ../../../corelib/global/qsystemdetection.h \ - ../../../../include/QtCore/qprocessordetection.h \ - ../../../corelib/global/qprocessordetection.h \ - ../../../../include/QtCore/qcompilerdetection.h \ - ../../../corelib/global/qcompilerdetection.h \ - ../../../../include/QtCore/qtypeinfo.h \ - ../../../corelib/global/qtypeinfo.h \ - ../../../../include/QtCore/qtypetraits.h \ - ../../../corelib/global/qtypetraits.h \ - ../../../../include/QtCore/qsysinfo.h \ - ../../../corelib/global/qsysinfo.h \ - ../../../../include/QtCore/qlogging.h \ - ../../../corelib/global/qlogging.h \ - ../../../../include/QtCore/qflags.h \ - ../../../corelib/global/qflags.h \ - ../../../../include/QtCore/qatomic.h \ - ../../../corelib/thread/qatomic.h \ - ../../../../include/QtCore/qbasicatomic.h \ - ../../../corelib/thread/qbasicatomic.h \ - ../../../../include/QtCore/qatomic_bootstrap.h \ - ../../../corelib/arch/qatomic_bootstrap.h \ - ../../../../include/QtCore/qgenericatomic.h \ - ../../../corelib/thread/qgenericatomic.h \ - ../../../../include/QtCore/qatomic_cxx11.h \ - ../../../corelib/arch/qatomic_cxx11.h \ - ../../../../include/QtCore/qatomic_gcc.h \ - ../../../corelib/arch/qatomic_gcc.h \ - ../../../../include/QtCore/qatomic_msvc.h \ - ../../../corelib/arch/qatomic_msvc.h \ - ../../../../include/QtCore/qatomic_armv7.h \ - ../../../corelib/arch/qatomic_armv7.h \ - ../../../../include/QtCore/qatomic_armv6.h \ - ../../../corelib/arch/qatomic_armv6.h \ - ../../../../include/QtCore/qatomic_armv5.h \ - ../../../corelib/arch/qatomic_armv5.h \ - ../../../../include/QtCore/qatomic_ia64.h \ - ../../../corelib/arch/qatomic_ia64.h \ - ../../../../include/QtCore/qatomic_mips.h \ - ../../../corelib/arch/qatomic_mips.h \ - ../../../../include/QtCore/qatomic_x86.h \ - ../../../corelib/arch/qatomic_x86.h \ - ../../../../include/QtCore/qatomic_unix.h \ - ../../../corelib/arch/qatomic_unix.h \ - ../../../../include/QtCore/qglobalstatic.h \ - ../../../corelib/global/qglobalstatic.h \ - ../../../../include/QtCore/qmutex.h \ - ../../../corelib/thread/qmutex.h \ - ../../../../include/QtCore/qnumeric.h \ - ../../../corelib/global/qnumeric.h \ - keydata.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/keyuni.o keyuni.cpp - -.obj/main.o: main.cpp main.h \ - ../../../../include/QtGui/5.5.0/QtGui/qpa/qplatforminputcontextplugin_p.h \ - ../../../gui/kernel/qplatforminputcontextplugin_p.h \ - ../../../../include/QtCore/qplugin.h \ - ../../../corelib/plugin/qplugin.h \ - ../../../../include/QtCore/qobject.h \ - ../../../corelib/kernel/qobject.h \ - ../../../../include/QtCore/qobjectdefs.h \ - ../../../corelib/kernel/qobjectdefs.h \ - ../../../../include/QtCore/qnamespace.h \ - ../../../corelib/global/qnamespace.h \ - ../../../../include/QtCore/qglobal.h \ - ../../../corelib/global/qglobal.h \ - ../../../../include/QtCore/qconfig.h \ - ../../../corelib/global/qconfig.h \ - ../../../../include/QtCore/qfeatures.h \ - ../../../corelib/global/qfeatures.h \ - ../../../../include/QtCore/qsystemdetection.h \ - ../../../corelib/global/qsystemdetection.h \ - ../../../../include/QtCore/qprocessordetection.h \ - ../../../corelib/global/qprocessordetection.h \ - ../../../../include/QtCore/qcompilerdetection.h \ - ../../../corelib/global/qcompilerdetection.h \ - ../../../../include/QtCore/qtypeinfo.h \ - ../../../corelib/global/qtypeinfo.h \ - ../../../../include/QtCore/qtypetraits.h \ - ../../../corelib/global/qtypetraits.h \ - ../../../../include/QtCore/qsysinfo.h \ - ../../../corelib/global/qsysinfo.h \ - ../../../../include/QtCore/qlogging.h \ - ../../../corelib/global/qlogging.h \ - ../../../../include/QtCore/qflags.h \ - ../../../corelib/global/qflags.h \ - ../../../../include/QtCore/qatomic.h \ - ../../../corelib/thread/qatomic.h \ - ../../../../include/QtCore/qbasicatomic.h \ - ../../../corelib/thread/qbasicatomic.h \ - ../../../../include/QtCore/qatomic_bootstrap.h \ - ../../../corelib/arch/qatomic_bootstrap.h \ - ../../../../include/QtCore/qgenericatomic.h \ - ../../../corelib/thread/qgenericatomic.h \ - ../../../../include/QtCore/qatomic_cxx11.h \ - ../../../corelib/arch/qatomic_cxx11.h \ - ../../../../include/QtCore/qatomic_gcc.h \ - ../../../corelib/arch/qatomic_gcc.h \ - ../../../../include/QtCore/qatomic_msvc.h \ - ../../../corelib/arch/qatomic_msvc.h \ - ../../../../include/QtCore/qatomic_armv7.h \ - ../../../corelib/arch/qatomic_armv7.h \ - ../../../../include/QtCore/qatomic_armv6.h \ - ../../../corelib/arch/qatomic_armv6.h \ - ../../../../include/QtCore/qatomic_armv5.h \ - ../../../corelib/arch/qatomic_armv5.h \ - ../../../../include/QtCore/qatomic_ia64.h \ - ../../../corelib/arch/qatomic_ia64.h \ - ../../../../include/QtCore/qatomic_mips.h \ - ../../../corelib/arch/qatomic_mips.h \ - ../../../../include/QtCore/qatomic_x86.h \ - ../../../corelib/arch/qatomic_x86.h \ - ../../../../include/QtCore/qatomic_unix.h \ - ../../../corelib/arch/qatomic_unix.h \ - ../../../../include/QtCore/qglobalstatic.h \ - ../../../corelib/global/qglobalstatic.h \ - ../../../../include/QtCore/qmutex.h \ - ../../../corelib/thread/qmutex.h \ - ../../../../include/QtCore/qnumeric.h \ - ../../../corelib/global/qnumeric.h \ - ../../../../include/QtCore/qobjectdefs_impl.h \ - ../../../corelib/kernel/qobjectdefs_impl.h \ - ../../../../include/QtCore/qstring.h \ - ../../../corelib/tools/qstring.h \ - ../../../../include/QtCore/qchar.h \ - ../../../corelib/tools/qchar.h \ - ../../../../include/QtCore/qbytearray.h \ - ../../../corelib/tools/qbytearray.h \ - ../../../../include/QtCore/qrefcount.h \ - ../../../corelib/tools/qrefcount.h \ - ../../../../include/QtCore/qarraydata.h \ - ../../../corelib/tools/qarraydata.h \ - ../../../../include/QtCore/qstringbuilder.h \ - ../../../corelib/tools/qstringbuilder.h \ - ../../../../include/QtCore/qlist.h \ - ../../../corelib/tools/qlist.h \ - ../../../../include/QtCore/qalgorithms.h \ - ../../../corelib/tools/qalgorithms.h \ - ../../../../include/QtCore/qiterator.h \ - ../../../corelib/tools/qiterator.h \ - ../../../../include/QtCore/qbytearraylist.h \ - ../../../corelib/tools/qbytearraylist.h \ - ../../../../include/QtCore/qstringlist.h \ - ../../../corelib/tools/qstringlist.h \ - ../../../../include/QtCore/qregexp.h \ - ../../../corelib/tools/qregexp.h \ - ../../../../include/QtCore/qstringmatcher.h \ - ../../../corelib/tools/qstringmatcher.h \ - ../../../../include/QtCore/qcoreevent.h \ - ../../../corelib/kernel/qcoreevent.h \ - ../../../../include/QtCore/qscopedpointer.h \ - ../../../corelib/tools/qscopedpointer.h \ - ../../../../include/QtCore/qmetatype.h \ - ../../../corelib/kernel/qmetatype.h \ - ../../../../include/QtCore/qvarlengtharray.h \ - ../../../corelib/tools/qvarlengtharray.h \ - ../../../../include/QtCore/qcontainerfwd.h \ - ../../../corelib/tools/qcontainerfwd.h \ - ../../../../include/QtCore/qisenum.h \ - ../../../corelib/global/qisenum.h \ - ../../../../include/QtCore/qobject_impl.h \ - ../../../corelib/kernel/qobject_impl.h \ - ../../../../include/QtCore/qpointer.h \ - ../../../corelib/kernel/qpointer.h \ - ../../../../include/QtCore/qsharedpointer.h \ - ../../../corelib/tools/qsharedpointer.h \ - ../../../../include/QtCore/qshareddata.h \ - ../../../corelib/tools/qshareddata.h \ - ../../../../include/QtCore/qhash.h \ - ../../../corelib/tools/qhash.h \ - ../../../../include/QtCore/qpair.h \ - ../../../corelib/tools/qpair.h \ - ../../../../include/QtCore/qsharedpointer_impl.h \ - ../../../corelib/tools/qsharedpointer_impl.h \ - ../../../../include/QtCore/qjsonobject.h \ - ../../../corelib/json/qjsonobject.h \ - ../../../../include/QtCore/qjsonvalue.h \ - ../../../corelib/json/qjsonvalue.h \ - ../../../../include/QtCore/qfactoryinterface.h \ - ../../../corelib/plugin/qfactoryinterface.h \ - ../../../../include/QtCore/QStringList \ - qfcitxplatforminputcontext.h \ - ../../../../include/QtGui/5.5.0/QtGui/qpa/qplatforminputcontext.h \ - ../../../gui/kernel/qplatforminputcontext.h \ - ../../../../include/QtGui/qinputmethod.h \ - ../../../gui/kernel/qinputmethod.h \ - ../../../../include/QtGui/QWindow \ - ../../../../include/QtGui/qwindow.h \ - ../../../gui/kernel/qwindow.h \ - ../../../../include/QtCore/QObject \ - ../../../../include/QtCore/QEvent \ - ../../../../include/QtCore/QMargins \ - ../../../../include/QtCore/qmargins.h \ - ../../../corelib/tools/qmargins.h \ - ../../../../include/QtCore/QRect \ - ../../../../include/QtCore/qrect.h \ - ../../../corelib/tools/qrect.h \ - ../../../../include/QtCore/qsize.h \ - ../../../corelib/tools/qsize.h \ - ../../../../include/QtCore/qpoint.h \ - ../../../corelib/tools/qpoint.h \ - ../../../../include/QtGui/qsurface.h \ - ../../../gui/kernel/qsurface.h \ - ../../../../include/QtGui/qsurfaceformat.h \ - ../../../gui/kernel/qsurfaceformat.h \ - ../../../../include/QtGui/qwindowdefs.h \ - ../../../gui/kernel/qwindowdefs.h \ - ../../../../include/QtGui/qwindowdefs_win.h \ - ../../../gui/kernel/qwindowdefs_win.h \ - ../../../../include/QtGui/qicon.h \ - ../../../gui/image/qicon.h \ - ../../../../include/QtGui/qpixmap.h \ - ../../../gui/image/qpixmap.h \ - ../../../../include/QtGui/qpaintdevice.h \ - ../../../gui/painting/qpaintdevice.h \ - ../../../../include/QtGui/qcolor.h \ - ../../../gui/painting/qcolor.h \ - ../../../../include/QtGui/qrgb.h \ - ../../../gui/painting/qrgb.h \ - ../../../../include/QtGui/qimage.h \ - ../../../gui/image/qimage.h \ - ../../../../include/QtGui/qtransform.h \ - ../../../gui/painting/qtransform.h \ - ../../../../include/QtGui/qmatrix.h \ - ../../../gui/painting/qmatrix.h \ - ../../../../include/QtGui/qpolygon.h \ - ../../../gui/painting/qpolygon.h \ - ../../../../include/QtCore/qvector.h \ - ../../../corelib/tools/qvector.h \ - ../../../../include/QtGui/qregion.h \ - ../../../gui/painting/qregion.h \ - ../../../../include/QtCore/qdatastream.h \ - ../../../corelib/io/qdatastream.h \ - ../../../../include/QtCore/qiodevice.h \ - ../../../corelib/io/qiodevice.h \ - ../../../../include/QtCore/qline.h \ - ../../../corelib/tools/qline.h \ - ../../../../include/QtGui/qpainterpath.h \ - ../../../gui/painting/qpainterpath.h \ - ../../../../include/QtGui/qpixelformat.h \ - ../../../gui/kernel/qpixelformat.h \ - ../../../../include/QtGui/qcursor.h \ - ../../../gui/kernel/qcursor.h \ - ../../../../include/QtGui/QKeyEvent \ - ../../../../include/QtGui/qevent.h \ - ../../../gui/kernel/qevent.h \ - ../../../../include/QtGui/qkeysequence.h \ - ../../../gui/kernel/qkeysequence.h \ - ../../../../include/QtCore/qvariant.h \ - ../../../corelib/kernel/qvariant.h \ - ../../../../include/QtCore/qmap.h \ - ../../../corelib/tools/qmap.h \ - ../../../../include/QtCore/qdebug.h \ - ../../../corelib/io/qdebug.h \ - ../../../../include/QtCore/qtextstream.h \ - ../../../corelib/io/qtextstream.h \ - ../../../../include/QtCore/qlocale.h \ - ../../../corelib/tools/qlocale.h \ - ../../../../include/QtCore/qset.h \ - ../../../corelib/tools/qset.h \ - ../../../../include/QtCore/qcontiguouscache.h \ - ../../../corelib/tools/qcontiguouscache.h \ - ../../../../include/QtCore/qurl.h \ - ../../../corelib/io/qurl.h \ - ../../../../include/QtCore/qurlquery.h \ - ../../../corelib/io/qurlquery.h \ - ../../../../include/QtCore/qfile.h \ - ../../../corelib/io/qfile.h \ - ../../../../include/QtCore/qfiledevice.h \ - ../../../corelib/io/qfiledevice.h \ - ../../../../include/QtGui/qvector2d.h \ - ../../../gui/math3d/qvector2d.h \ - ../../../../include/QtGui/qtouchdevice.h \ - ../../../gui/kernel/qtouchdevice.h \ - ../../../../include/QtDBus/QDBusConnection \ - ../../../../include/QtDBus/qdbusconnection.h \ - ../../../dbus/qdbusconnection.h \ - ../../../../include/QtDBus/qdbusmacros.h \ - ../../../dbus/qdbusmacros.h \ - ../../../../include/QtDBus/QDBusServiceWatcher \ - ../../../../include/QtDBus/qdbusservicewatcher.h \ - ../../../dbus/qdbusservicewatcher.h \ - ../../../../include/QtCore/QPointer \ - ../../../../include/QtCore/QFileSystemWatcher \ - ../../../../include/QtCore/qfilesystemwatcher.h \ - ../../../corelib/io/qfilesystemwatcher.h \ - fcitxqtformattedpreedit.h \ - fcitxqtdbusaddons_export.h \ - ../../../../include/QtCore/QMetaType \ - ../../../../include/QtDBus/QDBusArgument \ - ../../../../include/QtDBus/qdbusargument.h \ - ../../../dbus/qdbusargument.h \ - ../../../../include/QtDBus/qdbusextratypes.h \ - ../../../dbus/qdbusextratypes.h \ - fcitxqtinputcontextproxy.h \ - ../../../../include/QtCore/QByteArray \ - ../../../../include/QtCore/QList \ - ../../../../include/QtCore/QMap \ - ../../../../include/QtCore/QString \ - ../../../../include/QtCore/QVariant \ - ../../../../include/QtDBus/QtDBus \ - ../../../../include/QtDBus/QtDBusDepends \ - ../../../../include/QtCore/QtCore \ - ../../../../include/QtCore/QtCoreDepends \ - ../../../../include/QtCore/qabstractanimation.h \ - ../../../corelib/animation/qabstractanimation.h \ - ../../../../include/QtCore/qanimationgroup.h \ - ../../../corelib/animation/qanimationgroup.h \ - ../../../../include/QtCore/qparallelanimationgroup.h \ - ../../../corelib/animation/qparallelanimationgroup.h \ - ../../../../include/QtCore/qpauseanimation.h \ - ../../../corelib/animation/qpauseanimation.h \ - ../../../../include/QtCore/qpropertyanimation.h \ - ../../../corelib/animation/qpropertyanimation.h \ - ../../../../include/QtCore/qvariantanimation.h \ - ../../../corelib/animation/qvariantanimation.h \ - ../../../../include/QtCore/qeasingcurve.h \ - ../../../corelib/tools/qeasingcurve.h \ - ../../../../include/QtCore/qsequentialanimationgroup.h \ - ../../../corelib/animation/qsequentialanimationgroup.h \ - ../../../../include/QtCore/qtextcodec.h \ - ../../../corelib/codecs/qtextcodec.h \ - ../../../../include/QtCore/qendian.h \ - ../../../corelib/global/qendian.h \ - ../../../../include/QtCore/qlibraryinfo.h \ - ../../../corelib/global/qlibraryinfo.h \ - ../../../../include/QtCore/qdatetime.h \ - ../../../corelib/tools/qdatetime.h \ - ../../../../include/QtCore/qbuffer.h \ - ../../../corelib/io/qbuffer.h \ - ../../../../include/QtCore/qdir.h \ - ../../../corelib/io/qdir.h \ - ../../../../include/QtCore/qfileinfo.h \ - ../../../corelib/io/qfileinfo.h \ - ../../../../include/QtCore/qdiriterator.h \ - ../../../corelib/io/qdiriterator.h \ - ../../../../include/QtCore/qfileselector.h \ - ../../../corelib/io/qfileselector.h \ - ../../../../include/QtCore/qlockfile.h \ - ../../../corelib/io/qlockfile.h \ - ../../../../include/QtCore/qloggingcategory.h \ - ../../../corelib/io/qloggingcategory.h \ - ../../../../include/QtCore/qprocess.h \ - ../../../corelib/io/qprocess.h \ - ../../../../include/QtCore/qresource.h \ - ../../../corelib/io/qresource.h \ - ../../../../include/QtCore/qsavefile.h \ - ../../../corelib/io/qsavefile.h \ - ../../../../include/QtCore/qsettings.h \ - ../../../corelib/io/qsettings.h \ - ../../../../include/QtCore/qstandardpaths.h \ - ../../../corelib/io/qstandardpaths.h \ - ../../../../include/QtCore/qstorageinfo.h \ - ../../../corelib/io/qstorageinfo.h \ - ../../../../include/QtCore/qtemporarydir.h \ - ../../../corelib/io/qtemporarydir.h \ - ../../../../include/QtCore/QScopedPointer \ - ../../../../include/QtCore/qtemporaryfile.h \ - ../../../corelib/io/qtemporaryfile.h \ - ../../../../include/QtCore/qabstractitemmodel.h \ - ../../../corelib/itemmodels/qabstractitemmodel.h \ - ../../../../include/QtCore/qabstractproxymodel.h \ - ../../../corelib/itemmodels/qabstractproxymodel.h \ - ../../../../include/QtCore/qidentityproxymodel.h \ - ../../../corelib/itemmodels/qidentityproxymodel.h \ - ../../../../include/QtCore/qitemselectionmodel.h \ - ../../../corelib/itemmodels/qitemselectionmodel.h \ - ../../../../include/QtCore/qsortfilterproxymodel.h \ - ../../../corelib/itemmodels/qsortfilterproxymodel.h \ - ../../../../include/QtCore/qstringlistmodel.h \ - ../../../corelib/itemmodels/qstringlistmodel.h \ - ../../../../include/QtCore/qjsonarray.h \ - ../../../corelib/json/qjsonarray.h \ - ../../../../include/QtCore/qjsondocument.h \ - ../../../corelib/json/qjsondocument.h \ - ../../../../include/QtCore/qabstracteventdispatcher.h \ - ../../../corelib/kernel/qabstracteventdispatcher.h \ - ../../../../include/QtCore/qeventloop.h \ - ../../../corelib/kernel/qeventloop.h \ - ../../../../include/QtCore/qabstractnativeeventfilter.h \ - ../../../corelib/kernel/qabstractnativeeventfilter.h \ - ../../../../include/QtCore/qbasictimer.h \ - ../../../corelib/kernel/qbasictimer.h \ - ../../../../include/QtCore/qcoreapplication.h \ - ../../../corelib/kernel/qcoreapplication.h \ - ../../../../include/QtCore/qmath.h \ - ../../../corelib/kernel/qmath.h \ - ../../../../include/QtCore/qmetaobject.h \ - ../../../corelib/kernel/qmetaobject.h \ - ../../../../include/QtCore/qmimedata.h \ - ../../../corelib/kernel/qmimedata.h \ - ../../../../include/QtCore/qobjectcleanuphandler.h \ - ../../../corelib/kernel/qobjectcleanuphandler.h \ - ../../../../include/QtCore/qsharedmemory.h \ - ../../../corelib/kernel/qsharedmemory.h \ - ../../../../include/QtCore/qsignalmapper.h \ - ../../../corelib/kernel/qsignalmapper.h \ - ../../../../include/QtCore/qsocketnotifier.h \ - ../../../corelib/kernel/qsocketnotifier.h \ - ../../../../include/QtCore/qsystemsemaphore.h \ - ../../../corelib/kernel/qsystemsemaphore.h \ - ../../../../include/QtCore/qtimer.h \ - ../../../corelib/kernel/qtimer.h \ - ../../../../include/QtCore/qtranslator.h \ - ../../../corelib/kernel/qtranslator.h \ - ../../../../include/QtCore/qwineventnotifier.h \ - ../../../corelib/kernel/qwineventnotifier.h \ - ../../../../include/QtCore/qmimedatabase.h \ - ../../../corelib/mimetypes/qmimedatabase.h \ - ../../../../include/QtCore/qmimetype.h \ - ../../../corelib/mimetypes/qmimetype.h \ - ../../../../include/QtCore/qlibrary.h \ - ../../../corelib/plugin/qlibrary.h \ - ../../../../include/QtCore/qpluginloader.h \ - ../../../corelib/plugin/qpluginloader.h \ - ../../../../include/QtCore/quuid.h \ - ../../../corelib/plugin/quuid.h \ - ../../../../include/QtCore/qabstractstate.h \ - ../../../corelib/statemachine/qabstractstate.h \ - ../../../../include/QtCore/qabstracttransition.h \ - ../../../corelib/statemachine/qabstracttransition.h \ - ../../../../include/QtCore/qeventtransition.h \ - ../../../corelib/statemachine/qeventtransition.h \ - ../../../../include/QtCore/qfinalstate.h \ - ../../../corelib/statemachine/qfinalstate.h \ - ../../../../include/QtCore/qhistorystate.h \ - ../../../corelib/statemachine/qhistorystate.h \ - ../../../../include/QtCore/qsignaltransition.h \ - ../../../corelib/statemachine/qsignaltransition.h \ - ../../../../include/QtCore/qstate.h \ - ../../../corelib/statemachine/qstate.h \ - ../../../../include/QtCore/qstatemachine.h \ - ../../../corelib/statemachine/qstatemachine.h \ - ../../../../include/QtCore/qexception.h \ - ../../../corelib/thread/qexception.h \ - ../../../../include/QtCore/qfuture.h \ - ../../../corelib/thread/qfuture.h \ - ../../../../include/QtCore/qfutureinterface.h \ - ../../../corelib/thread/qfutureinterface.h \ - ../../../../include/QtCore/qrunnable.h \ - ../../../corelib/thread/qrunnable.h \ - ../../../../include/QtCore/qresultstore.h \ - ../../../corelib/thread/qresultstore.h \ - ../../../../include/QtCore/qfuturesynchronizer.h \ - ../../../corelib/thread/qfuturesynchronizer.h \ - ../../../../include/QtCore/qfuturewatcher.h \ - ../../../corelib/thread/qfuturewatcher.h \ - ../../../../include/QtCore/qreadwritelock.h \ - ../../../corelib/thread/qreadwritelock.h \ - ../../../../include/QtCore/qsemaphore.h \ - ../../../corelib/thread/qsemaphore.h \ - ../../../../include/QtCore/qthread.h \ - ../../../corelib/thread/qthread.h \ - ../../../../include/QtCore/qthreadpool.h \ - ../../../corelib/thread/qthreadpool.h \ - ../../../../include/QtCore/qthreadstorage.h \ - ../../../corelib/thread/qthreadstorage.h \ - ../../../../include/QtCore/qwaitcondition.h \ - ../../../corelib/thread/qwaitcondition.h \ - ../../../../include/QtCore/qarraydataops.h \ - ../../../corelib/tools/qarraydataops.h \ - ../../../../include/QtCore/qarraydatapointer.h \ - ../../../corelib/tools/qarraydatapointer.h \ - ../../../../include/QtCore/qbitarray.h \ - ../../../corelib/tools/qbitarray.h \ - ../../../../include/QtCore/qbytearraymatcher.h \ - ../../../corelib/tools/qbytearraymatcher.h \ - ../../../../include/QtCore/qcache.h \ - ../../../corelib/tools/qcache.h \ - ../../../../include/QtCore/qcollator.h \ - ../../../corelib/tools/qcollator.h \ - ../../../../include/QtCore/qcommandlineoption.h \ - ../../../corelib/tools/qcommandlineoption.h \ - ../../../../include/QtCore/qcommandlineparser.h \ - ../../../corelib/tools/qcommandlineparser.h \ - ../../../../include/QtCore/qcryptographichash.h \ - ../../../corelib/tools/qcryptographichash.h \ - ../../../../include/QtCore/qelapsedtimer.h \ - ../../../corelib/tools/qelapsedtimer.h \ - ../../../../include/QtCore/qlinkedlist.h \ - ../../../corelib/tools/qlinkedlist.h \ - ../../../../include/QtCore/qmessageauthenticationcode.h \ - ../../../corelib/tools/qmessageauthenticationcode.h \ - ../../../../include/QtCore/qqueue.h \ - ../../../corelib/tools/qqueue.h \ - ../../../../include/QtCore/qregularexpression.h \ - ../../../corelib/tools/qregularexpression.h \ - ../../../../include/QtCore/qscopedvaluerollback.h \ - ../../../corelib/tools/qscopedvaluerollback.h \ - ../../../../include/QtCore/qstack.h \ - ../../../corelib/tools/qstack.h \ - ../../../../include/QtCore/qtextboundaryfinder.h \ - ../../../corelib/tools/qtextboundaryfinder.h \ - ../../../../include/QtCore/qtimeline.h \ - ../../../corelib/tools/qtimeline.h \ - ../../../../include/QtCore/qtimezone.h \ - ../../../corelib/tools/qtimezone.h \ - ../../../../include/QtCore/qxmlstream.h \ - ../../../corelib/xml/qxmlstream.h \ - ../../../../include/QtCore/qtcoreversion.h \ - ../../../../include/QtDBus/qdbusabstractadaptor.h \ - ../../../dbus/qdbusabstractadaptor.h \ - ../../../../include/QtDBus/qdbusabstractinterface.h \ - ../../../dbus/qdbusabstractinterface.h \ - ../../../../include/QtDBus/qdbusmessage.h \ - ../../../dbus/qdbusmessage.h \ - ../../../../include/QtDBus/qdbuserror.h \ - ../../../dbus/qdbuserror.h \ - ../../../../include/QtDBus/qdbusconnectioninterface.h \ - ../../../dbus/qdbusconnectioninterface.h \ - ../../../../include/QtDBus/qdbusreply.h \ - ../../../dbus/qdbusreply.h \ - ../../../../include/QtDBus/qdbuspendingreply.h \ - ../../../dbus/qdbuspendingreply.h \ - ../../../../include/QtDBus/qdbuspendingcall.h \ - ../../../dbus/qdbuspendingcall.h \ - ../../../../include/QtDBus/qdbuscontext.h \ - ../../../dbus/qdbuscontext.h \ - ../../../../include/QtDBus/qdbusinterface.h \ - ../../../dbus/qdbusinterface.h \ - ../../../../include/QtDBus/qdbusmetatype.h \ - ../../../dbus/qdbusmetatype.h \ - ../../../../include/QtDBus/qdbusserver.h \ - ../../../dbus/qdbusserver.h \ - ../../../../include/QtDBus/qdbusunixfiledescriptor.h \ - ../../../dbus/qdbusunixfiledescriptor.h \ - ../../../../include/QtDBus/qdbusvirtualobject.h \ - ../../../dbus/qdbusvirtualobject.h \ - ../../../../include/QtDBus/qtdbusversion.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/main.o main.cpp - -.obj/qfcitxplatforminputcontext.o: qfcitxplatforminputcontext.cpp ../../../../include/QtGui/QKeyEvent \ - ../../../../include/QtGui/qevent.h \ - ../../../gui/kernel/qevent.h \ - ../../../../include/QtGui/qwindowdefs.h \ - ../../../gui/kernel/qwindowdefs.h \ - ../../../../include/QtCore/qglobal.h \ - ../../../corelib/global/qglobal.h \ - ../../../../include/QtCore/qconfig.h \ - ../../../corelib/global/qconfig.h \ - ../../../../include/QtCore/qfeatures.h \ - ../../../corelib/global/qfeatures.h \ - ../../../../include/QtCore/qsystemdetection.h \ - ../../../corelib/global/qsystemdetection.h \ - ../../../../include/QtCore/qprocessordetection.h \ - ../../../corelib/global/qprocessordetection.h \ - ../../../../include/QtCore/qcompilerdetection.h \ - ../../../corelib/global/qcompilerdetection.h \ - ../../../../include/QtCore/qtypeinfo.h \ - ../../../corelib/global/qtypeinfo.h \ - ../../../../include/QtCore/qtypetraits.h \ - ../../../corelib/global/qtypetraits.h \ - ../../../../include/QtCore/qsysinfo.h \ - ../../../corelib/global/qsysinfo.h \ - ../../../../include/QtCore/qlogging.h \ - ../../../corelib/global/qlogging.h \ - ../../../../include/QtCore/qflags.h \ - ../../../corelib/global/qflags.h \ - ../../../../include/QtCore/qatomic.h \ - ../../../corelib/thread/qatomic.h \ - ../../../../include/QtCore/qbasicatomic.h \ - ../../../corelib/thread/qbasicatomic.h \ - ../../../../include/QtCore/qatomic_bootstrap.h \ - ../../../corelib/arch/qatomic_bootstrap.h \ - ../../../../include/QtCore/qgenericatomic.h \ - ../../../corelib/thread/qgenericatomic.h \ - ../../../../include/QtCore/qatomic_cxx11.h \ - ../../../corelib/arch/qatomic_cxx11.h \ - ../../../../include/QtCore/qatomic_gcc.h \ - ../../../corelib/arch/qatomic_gcc.h \ - ../../../../include/QtCore/qatomic_msvc.h \ - ../../../corelib/arch/qatomic_msvc.h \ - ../../../../include/QtCore/qatomic_armv7.h \ - ../../../corelib/arch/qatomic_armv7.h \ - ../../../../include/QtCore/qatomic_armv6.h \ - ../../../corelib/arch/qatomic_armv6.h \ - ../../../../include/QtCore/qatomic_armv5.h \ - ../../../corelib/arch/qatomic_armv5.h \ - ../../../../include/QtCore/qatomic_ia64.h \ - ../../../corelib/arch/qatomic_ia64.h \ - ../../../../include/QtCore/qatomic_mips.h \ - ../../../corelib/arch/qatomic_mips.h \ - ../../../../include/QtCore/qatomic_x86.h \ - ../../../corelib/arch/qatomic_x86.h \ - ../../../../include/QtCore/qatomic_unix.h \ - ../../../corelib/arch/qatomic_unix.h \ - ../../../../include/QtCore/qglobalstatic.h \ - ../../../corelib/global/qglobalstatic.h \ - ../../../../include/QtCore/qmutex.h \ - ../../../corelib/thread/qmutex.h \ - ../../../../include/QtCore/qnumeric.h \ - ../../../corelib/global/qnumeric.h \ - ../../../../include/QtCore/qobjectdefs.h \ - ../../../corelib/kernel/qobjectdefs.h \ - ../../../../include/QtCore/qnamespace.h \ - ../../../corelib/global/qnamespace.h \ - ../../../../include/QtCore/qobjectdefs_impl.h \ - ../../../corelib/kernel/qobjectdefs_impl.h \ - ../../../../include/QtGui/qwindowdefs_win.h \ - ../../../gui/kernel/qwindowdefs_win.h \ - ../../../../include/QtCore/qobject.h \ - ../../../corelib/kernel/qobject.h \ - ../../../../include/QtCore/qstring.h \ - ../../../corelib/tools/qstring.h \ - ../../../../include/QtCore/qchar.h \ - ../../../corelib/tools/qchar.h \ - ../../../../include/QtCore/qbytearray.h \ - ../../../corelib/tools/qbytearray.h \ - ../../../../include/QtCore/qrefcount.h \ - ../../../corelib/tools/qrefcount.h \ - ../../../../include/QtCore/qarraydata.h \ - ../../../corelib/tools/qarraydata.h \ - ../../../../include/QtCore/qstringbuilder.h \ - ../../../corelib/tools/qstringbuilder.h \ - ../../../../include/QtCore/qlist.h \ - ../../../corelib/tools/qlist.h \ - ../../../../include/QtCore/qalgorithms.h \ - ../../../corelib/tools/qalgorithms.h \ - ../../../../include/QtCore/qiterator.h \ - ../../../corelib/tools/qiterator.h \ - ../../../../include/QtCore/qbytearraylist.h \ - ../../../corelib/tools/qbytearraylist.h \ - ../../../../include/QtCore/qstringlist.h \ - ../../../corelib/tools/qstringlist.h \ - ../../../../include/QtCore/qregexp.h \ - ../../../corelib/tools/qregexp.h \ - ../../../../include/QtCore/qstringmatcher.h \ - ../../../corelib/tools/qstringmatcher.h \ - ../../../../include/QtCore/qcoreevent.h \ - ../../../corelib/kernel/qcoreevent.h \ - ../../../../include/QtCore/qscopedpointer.h \ - ../../../corelib/tools/qscopedpointer.h \ - ../../../../include/QtCore/qmetatype.h \ - ../../../corelib/kernel/qmetatype.h \ - ../../../../include/QtCore/qvarlengtharray.h \ - ../../../corelib/tools/qvarlengtharray.h \ - ../../../../include/QtCore/qcontainerfwd.h \ - ../../../corelib/tools/qcontainerfwd.h \ - ../../../../include/QtCore/qisenum.h \ - ../../../corelib/global/qisenum.h \ - ../../../../include/QtCore/qobject_impl.h \ - ../../../corelib/kernel/qobject_impl.h \ - ../../../../include/QtGui/qregion.h \ - ../../../gui/painting/qregion.h \ - ../../../../include/QtCore/qrect.h \ - ../../../corelib/tools/qrect.h \ - ../../../../include/QtCore/qmargins.h \ - ../../../corelib/tools/qmargins.h \ - ../../../../include/QtCore/qsize.h \ - ../../../corelib/tools/qsize.h \ - ../../../../include/QtCore/qpoint.h \ - ../../../corelib/tools/qpoint.h \ - ../../../../include/QtCore/qdatastream.h \ - ../../../corelib/io/qdatastream.h \ - ../../../../include/QtCore/qiodevice.h \ - ../../../corelib/io/qiodevice.h \ - ../../../../include/QtCore/qpair.h \ - ../../../corelib/tools/qpair.h \ - ../../../../include/QtGui/qkeysequence.h \ - ../../../gui/kernel/qkeysequence.h \ - ../../../../include/QtCore/qvariant.h \ - ../../../corelib/kernel/qvariant.h \ - ../../../../include/QtCore/qmap.h \ - ../../../corelib/tools/qmap.h \ - ../../../../include/QtCore/qdebug.h \ - ../../../corelib/io/qdebug.h \ - ../../../../include/QtCore/qhash.h \ - ../../../corelib/tools/qhash.h \ - ../../../../include/QtCore/qtextstream.h \ - ../../../corelib/io/qtextstream.h \ - ../../../../include/QtCore/qlocale.h \ - ../../../corelib/tools/qlocale.h \ - ../../../../include/QtCore/qshareddata.h \ - ../../../corelib/tools/qshareddata.h \ - ../../../../include/QtCore/qvector.h \ - ../../../corelib/tools/qvector.h \ - ../../../../include/QtCore/qset.h \ - ../../../corelib/tools/qset.h \ - ../../../../include/QtCore/qcontiguouscache.h \ - ../../../corelib/tools/qcontiguouscache.h \ - ../../../../include/QtCore/qurl.h \ - ../../../corelib/io/qurl.h \ - ../../../../include/QtCore/qurlquery.h \ - ../../../corelib/io/qurlquery.h \ - ../../../../include/QtCore/qfile.h \ - ../../../corelib/io/qfile.h \ - ../../../../include/QtCore/qfiledevice.h \ - ../../../corelib/io/qfiledevice.h \ - ../../../../include/QtGui/qvector2d.h \ - ../../../gui/math3d/qvector2d.h \ - ../../../../include/QtGui/qtouchdevice.h \ - ../../../gui/kernel/qtouchdevice.h \ - ../../../../include/QtDBus/QDBusConnection \ - ../../../../include/QtDBus/qdbusconnection.h \ - ../../../dbus/qdbusconnection.h \ - ../../../../include/QtDBus/qdbusmacros.h \ - ../../../dbus/qdbusmacros.h \ - ../../../../include/QtGui/QGuiApplication \ - ../../../../include/QtGui/qguiapplication.h \ - ../../../gui/kernel/qguiapplication.h \ - ../../../../include/QtCore/qcoreapplication.h \ - ../../../corelib/kernel/qcoreapplication.h \ - ../../../../include/QtCore/qeventloop.h \ - ../../../corelib/kernel/qeventloop.h \ - ../../../../include/QtGui/qinputmethod.h \ - ../../../gui/kernel/qinputmethod.h \ - ../../../../include/QtGui/QInputMethod \ - ../../../../include/QtGui/QTextCharFormat \ - ../../../../include/QtGui/qtextformat.h \ - ../../../gui/text/qtextformat.h \ - ../../../../include/QtGui/qcolor.h \ - ../../../gui/painting/qcolor.h \ - ../../../../include/QtGui/qrgb.h \ - ../../../gui/painting/qrgb.h \ - ../../../../include/QtGui/qfont.h \ - ../../../gui/text/qfont.h \ - ../../../../include/QtCore/qsharedpointer.h \ - ../../../corelib/tools/qsharedpointer.h \ - ../../../../include/QtCore/qsharedpointer_impl.h \ - ../../../corelib/tools/qsharedpointer_impl.h \ - ../../../../include/QtGui/qpen.h \ - ../../../gui/painting/qpen.h \ - ../../../../include/QtGui/qbrush.h \ - ../../../gui/painting/qbrush.h \ - ../../../../include/QtGui/qmatrix.h \ - ../../../gui/painting/qmatrix.h \ - ../../../../include/QtGui/qpolygon.h \ - ../../../gui/painting/qpolygon.h \ - ../../../../include/QtCore/qline.h \ - ../../../corelib/tools/qline.h \ - ../../../../include/QtGui/qtransform.h \ - ../../../gui/painting/qtransform.h \ - ../../../../include/QtGui/qpainterpath.h \ - ../../../gui/painting/qpainterpath.h \ - ../../../../include/QtGui/qimage.h \ - ../../../gui/image/qimage.h \ - ../../../../include/QtGui/qpaintdevice.h \ - ../../../gui/painting/qpaintdevice.h \ - ../../../../include/QtGui/qpixelformat.h \ - ../../../gui/kernel/qpixelformat.h \ - ../../../../include/QtGui/qpixmap.h \ - ../../../gui/image/qpixmap.h \ - ../../../../include/QtGui/qtextoption.h \ - ../../../gui/text/qtextoption.h \ - ../../../../include/QtGui/QPalette \ - ../../../../include/QtGui/qpalette.h \ - ../../../gui/kernel/qpalette.h \ - ../../../../include/QtGui/QWindow \ - ../../../../include/QtGui/qwindow.h \ - ../../../gui/kernel/qwindow.h \ - ../../../../include/QtCore/QObject \ - ../../../../include/QtCore/QEvent \ - ../../../../include/QtCore/QMargins \ - ../../../../include/QtCore/QRect \ - ../../../../include/QtGui/qsurface.h \ - ../../../gui/kernel/qsurface.h \ - ../../../../include/QtGui/qsurfaceformat.h \ - ../../../gui/kernel/qsurfaceformat.h \ - ../../../../include/QtGui/qicon.h \ - ../../../gui/image/qicon.h \ - ../../../../include/QtGui/qcursor.h \ - ../../../gui/kernel/qcursor.h \ - ../../../../include/QtGui/5.5.0/QtGui/qpa/qplatformscreen.h \ - ../../../gui/kernel/qplatformscreen.h \ - ../../../../include/QtGui/5.5.0/QtGui/qpa/qplatformpixmap.h \ - ../../../gui/image/qplatformpixmap.h \ - ../../../../include/QtGui/5.5.0/QtGui/qpa/qplatformcursor.h \ - ../../../gui/kernel/qplatformcursor.h \ - ../../../../include/QtCore/QList \ - ../../../../include/QtGui/QImage \ - ../../../../include/QtGui/QMouseEvent \ - ../../../../include/QtCore/QWeakPointer \ - ../../../../include/QtGui/QCursor \ - ../../../../include/QtGui/5.5.0/QtGui/qpa/qwindowsysteminterface.h \ - ../../../gui/kernel/qwindowsysteminterface.h \ - ../../../../include/QtCore/QTime \ - ../../../../include/QtCore/qdatetime.h \ - ../../../corelib/tools/qdatetime.h \ - ../../../../include/QtCore/QAbstractEventDispatcher \ - ../../../../include/QtCore/qabstracteventdispatcher.h \ - ../../../corelib/kernel/qabstracteventdispatcher.h \ - ../../../../include/QtGui/QScreen \ - ../../../../include/QtGui/qscreen.h \ - ../../../gui/kernel/qscreen.h \ - ../../../../include/QtCore/QSize \ - ../../../../include/QtCore/QSizeF \ - ../../../../include/QtGui/QTransform \ - ../../../../include/QtCore/QMutex \ - ../../../../include/QtGui/QTouchEvent \ - ../../../../include/QtCore/QEventLoop \ - ../../../../include/QtGui/QVector2D \ - keyserver_x11.h \ - qfcitxplatforminputcontext.h \ - ../../../../include/QtGui/5.5.0/QtGui/qpa/qplatforminputcontext.h \ - ../../../gui/kernel/qplatforminputcontext.h \ - ../../../../include/QtDBus/QDBusServiceWatcher \ - ../../../../include/QtDBus/qdbusservicewatcher.h \ - ../../../dbus/qdbusservicewatcher.h \ - ../../../../include/QtCore/QPointer \ - ../../../../include/QtCore/qpointer.h \ - ../../../corelib/kernel/qpointer.h \ - ../../../../include/QtCore/QFileSystemWatcher \ - ../../../../include/QtCore/qfilesystemwatcher.h \ - ../../../corelib/io/qfilesystemwatcher.h \ - fcitxqtformattedpreedit.h \ - fcitxqtdbusaddons_export.h \ - ../../../../include/QtCore/QMetaType \ - ../../../../include/QtDBus/QDBusArgument \ - ../../../../include/QtDBus/qdbusargument.h \ - ../../../dbus/qdbusargument.h \ - ../../../../include/QtDBus/qdbusextratypes.h \ - ../../../dbus/qdbusextratypes.h \ - fcitxqtinputcontextproxy.h \ - ../../../../include/QtCore/QByteArray \ - ../../../../include/QtCore/QMap \ - ../../../../include/QtCore/QString \ - ../../../../include/QtCore/QStringList \ - ../../../../include/QtCore/QVariant \ - ../../../../include/QtDBus/QtDBus \ - ../../../../include/QtDBus/QtDBusDepends \ - ../../../../include/QtCore/QtCore \ - ../../../../include/QtCore/QtCoreDepends \ - ../../../../include/QtCore/qabstractanimation.h \ - ../../../corelib/animation/qabstractanimation.h \ - ../../../../include/QtCore/qanimationgroup.h \ - ../../../corelib/animation/qanimationgroup.h \ - ../../../../include/QtCore/qparallelanimationgroup.h \ - ../../../corelib/animation/qparallelanimationgroup.h \ - ../../../../include/QtCore/qpauseanimation.h \ - ../../../corelib/animation/qpauseanimation.h \ - ../../../../include/QtCore/qpropertyanimation.h \ - ../../../corelib/animation/qpropertyanimation.h \ - ../../../../include/QtCore/qvariantanimation.h \ - ../../../corelib/animation/qvariantanimation.h \ - ../../../../include/QtCore/qeasingcurve.h \ - ../../../corelib/tools/qeasingcurve.h \ - ../../../../include/QtCore/qsequentialanimationgroup.h \ - ../../../corelib/animation/qsequentialanimationgroup.h \ - ../../../../include/QtCore/qtextcodec.h \ - ../../../corelib/codecs/qtextcodec.h \ - ../../../../include/QtCore/qendian.h \ - ../../../corelib/global/qendian.h \ - ../../../../include/QtCore/qlibraryinfo.h \ - ../../../corelib/global/qlibraryinfo.h \ - ../../../../include/QtCore/qbuffer.h \ - ../../../corelib/io/qbuffer.h \ - ../../../../include/QtCore/qdir.h \ - ../../../corelib/io/qdir.h \ - ../../../../include/QtCore/qfileinfo.h \ - ../../../corelib/io/qfileinfo.h \ - ../../../../include/QtCore/qdiriterator.h \ - ../../../corelib/io/qdiriterator.h \ - ../../../../include/QtCore/qfileselector.h \ - ../../../corelib/io/qfileselector.h \ - ../../../../include/QtCore/qlockfile.h \ - ../../../corelib/io/qlockfile.h \ - ../../../../include/QtCore/qloggingcategory.h \ - ../../../corelib/io/qloggingcategory.h \ - ../../../../include/QtCore/qprocess.h \ - ../../../corelib/io/qprocess.h \ - ../../../../include/QtCore/qresource.h \ - ../../../corelib/io/qresource.h \ - ../../../../include/QtCore/qsavefile.h \ - ../../../corelib/io/qsavefile.h \ - ../../../../include/QtCore/qsettings.h \ - ../../../corelib/io/qsettings.h \ - ../../../../include/QtCore/qstandardpaths.h \ - ../../../corelib/io/qstandardpaths.h \ - ../../../../include/QtCore/qstorageinfo.h \ - ../../../corelib/io/qstorageinfo.h \ - ../../../../include/QtCore/qtemporarydir.h \ - ../../../corelib/io/qtemporarydir.h \ - ../../../../include/QtCore/QScopedPointer \ - ../../../../include/QtCore/qtemporaryfile.h \ - ../../../corelib/io/qtemporaryfile.h \ - ../../../../include/QtCore/qabstractitemmodel.h \ - ../../../corelib/itemmodels/qabstractitemmodel.h \ - ../../../../include/QtCore/qabstractproxymodel.h \ - ../../../corelib/itemmodels/qabstractproxymodel.h \ - ../../../../include/QtCore/qidentityproxymodel.h \ - ../../../corelib/itemmodels/qidentityproxymodel.h \ - ../../../../include/QtCore/qitemselectionmodel.h \ - ../../../corelib/itemmodels/qitemselectionmodel.h \ - ../../../../include/QtCore/qsortfilterproxymodel.h \ - ../../../corelib/itemmodels/qsortfilterproxymodel.h \ - ../../../../include/QtCore/qstringlistmodel.h \ - ../../../corelib/itemmodels/qstringlistmodel.h \ - ../../../../include/QtCore/qjsonarray.h \ - ../../../corelib/json/qjsonarray.h \ - ../../../../include/QtCore/qjsonvalue.h \ - ../../../corelib/json/qjsonvalue.h \ - ../../../../include/QtCore/qjsondocument.h \ - ../../../corelib/json/qjsondocument.h \ - ../../../../include/QtCore/qjsonobject.h \ - ../../../corelib/json/qjsonobject.h \ - ../../../../include/QtCore/qabstractnativeeventfilter.h \ - ../../../corelib/kernel/qabstractnativeeventfilter.h \ - ../../../../include/QtCore/qbasictimer.h \ - ../../../corelib/kernel/qbasictimer.h \ - ../../../../include/QtCore/qmath.h \ - ../../../corelib/kernel/qmath.h \ - ../../../../include/QtCore/qmetaobject.h \ - ../../../corelib/kernel/qmetaobject.h \ - ../../../../include/QtCore/qmimedata.h \ - ../../../corelib/kernel/qmimedata.h \ - ../../../../include/QtCore/qobjectcleanuphandler.h \ - ../../../corelib/kernel/qobjectcleanuphandler.h \ - ../../../../include/QtCore/qsharedmemory.h \ - ../../../corelib/kernel/qsharedmemory.h \ - ../../../../include/QtCore/qsignalmapper.h \ - ../../../corelib/kernel/qsignalmapper.h \ - ../../../../include/QtCore/qsocketnotifier.h \ - ../../../corelib/kernel/qsocketnotifier.h \ - ../../../../include/QtCore/qsystemsemaphore.h \ - ../../../corelib/kernel/qsystemsemaphore.h \ - ../../../../include/QtCore/qtimer.h \ - ../../../corelib/kernel/qtimer.h \ - ../../../../include/QtCore/qtranslator.h \ - ../../../corelib/kernel/qtranslator.h \ - ../../../../include/QtCore/qwineventnotifier.h \ - ../../../corelib/kernel/qwineventnotifier.h \ - ../../../../include/QtCore/qmimedatabase.h \ - ../../../corelib/mimetypes/qmimedatabase.h \ - ../../../../include/QtCore/qmimetype.h \ - ../../../corelib/mimetypes/qmimetype.h \ - ../../../../include/QtCore/qfactoryinterface.h \ - ../../../corelib/plugin/qfactoryinterface.h \ - ../../../../include/QtCore/qlibrary.h \ - ../../../corelib/plugin/qlibrary.h \ - ../../../../include/QtCore/qplugin.h \ - ../../../corelib/plugin/qplugin.h \ - ../../../../include/QtCore/qpluginloader.h \ - ../../../corelib/plugin/qpluginloader.h \ - ../../../../include/QtCore/quuid.h \ - ../../../corelib/plugin/quuid.h \ - ../../../../include/QtCore/qabstractstate.h \ - ../../../corelib/statemachine/qabstractstate.h \ - ../../../../include/QtCore/qabstracttransition.h \ - ../../../corelib/statemachine/qabstracttransition.h \ - ../../../../include/QtCore/qeventtransition.h \ - ../../../corelib/statemachine/qeventtransition.h \ - ../../../../include/QtCore/qfinalstate.h \ - ../../../corelib/statemachine/qfinalstate.h \ - ../../../../include/QtCore/qhistorystate.h \ - ../../../corelib/statemachine/qhistorystate.h \ - ../../../../include/QtCore/qsignaltransition.h \ - ../../../corelib/statemachine/qsignaltransition.h \ - ../../../../include/QtCore/qstate.h \ - ../../../corelib/statemachine/qstate.h \ - ../../../../include/QtCore/qstatemachine.h \ - ../../../corelib/statemachine/qstatemachine.h \ - ../../../../include/QtCore/qexception.h \ - ../../../corelib/thread/qexception.h \ - ../../../../include/QtCore/qfuture.h \ - ../../../corelib/thread/qfuture.h \ - ../../../../include/QtCore/qfutureinterface.h \ - ../../../corelib/thread/qfutureinterface.h \ - ../../../../include/QtCore/qrunnable.h \ - ../../../corelib/thread/qrunnable.h \ - ../../../../include/QtCore/qresultstore.h \ - ../../../corelib/thread/qresultstore.h \ - ../../../../include/QtCore/qfuturesynchronizer.h \ - ../../../corelib/thread/qfuturesynchronizer.h \ - ../../../../include/QtCore/qfuturewatcher.h \ - ../../../corelib/thread/qfuturewatcher.h \ - ../../../../include/QtCore/qreadwritelock.h \ - ../../../corelib/thread/qreadwritelock.h \ - ../../../../include/QtCore/qsemaphore.h \ - ../../../corelib/thread/qsemaphore.h \ - ../../../../include/QtCore/qthread.h \ - ../../../corelib/thread/qthread.h \ - ../../../../include/QtCore/qthreadpool.h \ - ../../../corelib/thread/qthreadpool.h \ - ../../../../include/QtCore/qthreadstorage.h \ - ../../../corelib/thread/qthreadstorage.h \ - ../../../../include/QtCore/qwaitcondition.h \ - ../../../corelib/thread/qwaitcondition.h \ - ../../../../include/QtCore/qarraydataops.h \ - ../../../corelib/tools/qarraydataops.h \ - ../../../../include/QtCore/qarraydatapointer.h \ - ../../../corelib/tools/qarraydatapointer.h \ - ../../../../include/QtCore/qbitarray.h \ - ../../../corelib/tools/qbitarray.h \ - ../../../../include/QtCore/qbytearraymatcher.h \ - ../../../corelib/tools/qbytearraymatcher.h \ - ../../../../include/QtCore/qcache.h \ - ../../../corelib/tools/qcache.h \ - ../../../../include/QtCore/qcollator.h \ - ../../../corelib/tools/qcollator.h \ - ../../../../include/QtCore/qcommandlineoption.h \ - ../../../corelib/tools/qcommandlineoption.h \ - ../../../../include/QtCore/qcommandlineparser.h \ - ../../../corelib/tools/qcommandlineparser.h \ - ../../../../include/QtCore/qcryptographichash.h \ - ../../../corelib/tools/qcryptographichash.h \ - ../../../../include/QtCore/qelapsedtimer.h \ - ../../../corelib/tools/qelapsedtimer.h \ - ../../../../include/QtCore/qlinkedlist.h \ - ../../../corelib/tools/qlinkedlist.h \ - ../../../../include/QtCore/qmessageauthenticationcode.h \ - ../../../corelib/tools/qmessageauthenticationcode.h \ - ../../../../include/QtCore/qqueue.h \ - ../../../corelib/tools/qqueue.h \ - ../../../../include/QtCore/qregularexpression.h \ - ../../../corelib/tools/qregularexpression.h \ - ../../../../include/QtCore/qscopedvaluerollback.h \ - ../../../corelib/tools/qscopedvaluerollback.h \ - ../../../../include/QtCore/qstack.h \ - ../../../corelib/tools/qstack.h \ - ../../../../include/QtCore/qtextboundaryfinder.h \ - ../../../corelib/tools/qtextboundaryfinder.h \ - ../../../../include/QtCore/qtimeline.h \ - ../../../corelib/tools/qtimeline.h \ - ../../../../include/QtCore/qtimezone.h \ - ../../../corelib/tools/qtimezone.h \ - ../../../../include/QtCore/qxmlstream.h \ - ../../../corelib/xml/qxmlstream.h \ - ../../../../include/QtCore/qtcoreversion.h \ - ../../../../include/QtDBus/qdbusabstractadaptor.h \ - ../../../dbus/qdbusabstractadaptor.h \ - ../../../../include/QtDBus/qdbusabstractinterface.h \ - ../../../dbus/qdbusabstractinterface.h \ - ../../../../include/QtDBus/qdbusmessage.h \ - ../../../dbus/qdbusmessage.h \ - ../../../../include/QtDBus/qdbuserror.h \ - ../../../dbus/qdbuserror.h \ - ../../../../include/QtDBus/qdbusconnectioninterface.h \ - ../../../dbus/qdbusconnectioninterface.h \ - ../../../../include/QtDBus/qdbusreply.h \ - ../../../dbus/qdbusreply.h \ - ../../../../include/QtDBus/qdbuspendingreply.h \ - ../../../dbus/qdbuspendingreply.h \ - ../../../../include/QtDBus/qdbuspendingcall.h \ - ../../../dbus/qdbuspendingcall.h \ - ../../../../include/QtDBus/qdbuscontext.h \ - ../../../dbus/qdbuscontext.h \ - ../../../../include/QtDBus/qdbusinterface.h \ - ../../../dbus/qdbusinterface.h \ - ../../../../include/QtDBus/qdbusmetatype.h \ - ../../../dbus/qdbusmetatype.h \ - ../../../../include/QtDBus/qdbusserver.h \ - ../../../dbus/qdbusserver.h \ - ../../../../include/QtDBus/qdbusunixfiledescriptor.h \ - ../../../dbus/qdbusunixfiledescriptor.h \ - ../../../../include/QtDBus/qdbusvirtualobject.h \ - ../../../dbus/qdbusvirtualobject.h \ - ../../../../include/QtDBus/qtdbusversion.h \ - fcitxqtinputmethodproxy.h \ - fcitxqtinputmethoditem.h \ - fcitxqtconnection.h \ - keyuni.h \ - utils.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/qfcitxplatforminputcontext.o qfcitxplatforminputcontext.cpp - -.obj/utils.o: utils.cpp utils.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/utils.o utils.cpp - -.obj/moc_fcitxqtconnection.o: .moc/moc_fcitxqtconnection.cpp - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_fcitxqtconnection.o .moc/moc_fcitxqtconnection.cpp - -.obj/moc_fcitxqtconnection_p.o: .moc/moc_fcitxqtconnection_p.cpp - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_fcitxqtconnection_p.o .moc/moc_fcitxqtconnection_p.cpp - -.obj/moc_fcitxqtinputcontextproxy.o: .moc/moc_fcitxqtinputcontextproxy.cpp - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_fcitxqtinputcontextproxy.o .moc/moc_fcitxqtinputcontextproxy.cpp - -.obj/moc_fcitxqtinputmethodproxy.o: .moc/moc_fcitxqtinputmethodproxy.cpp - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_fcitxqtinputmethodproxy.o .moc/moc_fcitxqtinputmethodproxy.cpp - -.obj/moc_fcitxqtkeyboardproxy.o: .moc/moc_fcitxqtkeyboardproxy.cpp - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_fcitxqtkeyboardproxy.o .moc/moc_fcitxqtkeyboardproxy.cpp - -.obj/moc_main.o: .moc/moc_main.cpp - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_main.o .moc/moc_main.cpp - -.obj/moc_qfcitxplatforminputcontext.o: .moc/moc_qfcitxplatforminputcontext.cpp - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/moc_qfcitxplatforminputcontext.o .moc/moc_qfcitxplatforminputcontext.cpp - -####### Install - -install_pritarget: first FORCE - @test -d $(INSTALL_ROOT)/usr/local/Qt-5.5.0/mkspecs/modules || mkdir -p $(INSTALL_ROOT)/usr/local/Qt-5.5.0/mkspecs/modules - -$(INSTALL_FILE) /home/antanubis/TBuild/Libraries/QtStatic/qtbase/mkspecs/modules-inst/qt_plugin_fcitxplatforminputcontextplugin.pri $(INSTALL_ROOT)/usr/local/Qt-5.5.0/mkspecs/modules/ - -uninstall_pritarget: FORCE - -$(DEL_FILE) -r $(INSTALL_ROOT)/usr/local/Qt-5.5.0/mkspecs/modules/qt_plugin_fcitxplatforminputcontextplugin.pri - -$(DEL_DIR) $(INSTALL_ROOT)/usr/local/Qt-5.5.0/mkspecs/modules/ - - -install_target: first FORCE - @test -d $(INSTALL_ROOT)/usr/local/Qt-5.5.0/plugins/platforminputcontexts || mkdir -p $(INSTALL_ROOT)/usr/local/Qt-5.5.0/plugins/platforminputcontexts - -$(INSTALL_FILE) ../../../../plugins/platforminputcontexts/$(TARGET) $(INSTALL_ROOT)/usr/local/Qt-5.5.0/plugins/platforminputcontexts/$(TARGET) - @test -d $(INSTALL_ROOT)/usr/local/Qt-5.5.0/plugins/platforminputcontexts || mkdir -p $(INSTALL_ROOT)/usr/local/Qt-5.5.0/plugins/platforminputcontexts - -$(SED) -e 's,/home/antanubis/TBuild/Libraries/QtStatic/[^/][^/]*/lib,$$$$[QT_INSTALL_LIBS],g' ../../../../plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.prl > $(INSTALL_ROOT)/usr/local/Qt-5.5.0/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.prl - -uninstall_target: FORCE - -$(DEL_FILE) $(INSTALL_ROOT)/usr/local/Qt-5.5.0/plugins/platforminputcontexts/$(TARGET) - -$(DEL_FILE) $(INSTALL_ROOT)/usr/local/Qt-5.5.0/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.prl - -$(DEL_DIR) $(INSTALL_ROOT)/usr/local/Qt-5.5.0/plugins/platforminputcontexts/ - - -install_cmake_qt5_plugin_file: first FORCE - @test -d $(INSTALL_ROOT)/usr/local/Qt-5.5.0/lib/cmake/Qt5Gui || mkdir -p $(INSTALL_ROOT)/usr/local/Qt-5.5.0/lib/cmake/Qt5Gui - -$(INSTALL_FILE) /home/antanubis/TBuild/Libraries/QtStatic/qtbase/lib/cmake/Qt5Gui/Qt5Gui_QFcitxPlatformInputContextPlugin.cmake $(INSTALL_ROOT)/usr/local/Qt-5.5.0/lib/cmake/Qt5Gui/ - -uninstall_cmake_qt5_plugin_file: FORCE - -$(DEL_FILE) -r $(INSTALL_ROOT)/usr/local/Qt-5.5.0/lib/cmake/Qt5Gui/Qt5Gui_QFcitxPlatformInputContextPlugin.cmake - -$(DEL_DIR) $(INSTALL_ROOT)/usr/local/Qt-5.5.0/lib/cmake/Qt5Gui/ - - -install: install_pritarget install_target install_cmake_qt5_plugin_file FORCE - -uninstall: uninstall_pritarget uninstall_target uninstall_cmake_qt5_plugin_file FORCE - -FORCE: - diff --git a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.pro b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.pro index 4a2783cd8..cbd3ab76e 100644 --- a/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.pro +++ b/Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforminputcontexts/fcitx/fcitx.pro @@ -35,4 +35,4 @@ HEADERS += $$PWD/fcitxqtconnection.h \ $$PWD/qfcitxplatforminputcontext.h \ $$PWD/utils.h -OTHER_FILES += $$PWD/fcitx.jsn +OTHER_FILES += $$PWD/fcitx.json From fa501b18e4f4b5d05e8982957e774f49fb1274b9 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 14 Aug 2015 18:24:40 +0300 Subject: [PATCH 097/121] crashfix in sending audio files --- Telegram/SourceFiles/audio.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Telegram/SourceFiles/audio.cpp b/Telegram/SourceFiles/audio.cpp index 407d3a1af..f9cc5c1a9 100644 --- a/Telegram/SourceFiles/audio.cpp +++ b/Telegram/SourceFiles/audio.cpp @@ -2221,7 +2221,9 @@ public: int res = 0; char err[AV_ERROR_MAX_STRING_SIZE] = { 0 }; if ((res = avformat_open_input(&fmtContext, 0, 0, 0)) < 0) { - DEBUG_LOG(("Audio Read Error: Unable to avformat_open_input for file '%1', data size '%2', error %3, %4").arg(fname).arg(data.size()).arg(res).arg(av_make_error_string(err, sizeof(err), res))); + ioBuffer = 0; + + DEBUG_LOG(("Audio Read Error: Unable to avformat_open_input for file '%1', data size '%2', error %3, %4").arg(fname).arg(data.size()).arg(res).arg(av_make_error_string(err, sizeof(err), res))); return false; } _opened = true; From a95822b2eceaa2818d231c8c47e6badc86403dad Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 14 Aug 2015 18:47:56 +0300 Subject: [PATCH 098/121] version 0.8.50.dev - fixes in Windows toast notifications support, fixes in linux input methods --- QTCREATOR.md | 10 + Telegram/PrepareWin.bat | 8 +- Telegram/SourceFiles/application.cpp | 4 +- Telegram/SourceFiles/audio.cpp | 12 +- Telegram/SourceFiles/config.h | 4 +- Telegram/SourceFiles/historywidget.cpp | 8 +- Telegram/SourceFiles/localimageloader.cpp | 9 +- Telegram/SourceFiles/mainwidget.cpp | 10 +- Telegram/SourceFiles/mtproto/generate.py | 7 + Telegram/SourceFiles/mtproto/mtpConnection.h | 1 + Telegram/SourceFiles/mtproto/mtpCoreTypes.h | 2 +- Telegram/SourceFiles/mtproto/mtpScheme.cpp | 169 ++++- Telegram/SourceFiles/mtproto/mtpScheme.h | 703 +++++++++++++++++-- Telegram/SourceFiles/mtproto/scheme.tl | 24 +- Telegram/SourceFiles/pspecific_wnd.cpp | 2 +- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 +- Telegram/Version.sh | 2 +- 19 files changed, 877 insertions(+), 112 deletions(-) diff --git a/QTCREATOR.md b/QTCREATOR.md index 20d7a9fb0..c4d05c691 100644 --- a/QTCREATOR.md +++ b/QTCREATOR.md @@ -76,6 +76,16 @@ then go to **/home/user/TBuild/Libraries/openal-soft/build** and run make sudo make install +####libxkbcommon (required for Fcitx Qt plugin) + +In Terminal go to **/home/user/TBuild/Libraries** and run + + sudo apt-get install xutils-dev bison python-xcbgen + git clone https://github.com/xkbcommon/libxkbcommon.git + ./autogen.sh --disable-x11 + make + sudo make install + ####Qt 5.5.0, slightly patched http://download.qt-project.org/official_releases/qt/5.5/5.5.0/single/qt-everywhere-opensource-src-5.5.0.tar.gz diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index 868329c42..0697c6daa 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,10 +1,10 @@ @echo OFF set "AppVersionStrMajor=0.8" -set "AppVersion=8049" -set "AppVersionStrSmall=0.8.49" -set "AppVersionStr=0.8.49" -set "AppVersionStrFull=0.8.49.0" +set "AppVersion=8050" +set "AppVersionStrSmall=0.8.50" +set "AppVersionStr=0.8.50" +set "AppVersionStrFull=0.8.50.0" set "DevChannel=1" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index a7a0eb029..da51a09eb 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -656,8 +656,8 @@ void Application::checkMapVersion() { if (Local::oldMapVersion() < AppVersion) { if (Local::oldMapVersion()) { QString versionFeatures; - if (cDevVersion() && Local::oldMapVersion() < 8049) { - versionFeatures = QString::fromUtf8("\xe2\x80\x94 Block users from user profile\n\xe2\x80\x94 Ask support team a question from Settings\n\xe2\x80\x94 Windows toast notifications support added");// .replace('@', qsl("@") + QChar(0x200D)); + if (cDevVersion() && Local::oldMapVersion() < 8050) { + versionFeatures = QString::fromUtf8("\xe2\x80\x94 Bug fixes in Windows notifications\n\xe2\x80\x94 Fixed input methods on Linux (Fcitx and IBus)");// .replace('@', qsl("@") + QChar(0x200D)); } else if (!cDevVersion() && Local::oldMapVersion() < 8048) { versionFeatures = lang(lng_new_version_text).trimmed(); } diff --git a/Telegram/SourceFiles/audio.cpp b/Telegram/SourceFiles/audio.cpp index 407d3a1af..2d12b177f 100644 --- a/Telegram/SourceFiles/audio.cpp +++ b/Telegram/SourceFiles/audio.cpp @@ -1099,7 +1099,11 @@ public: } freq = fmtContext->streams[streamId]->codec->sample_rate; - len = (fmtContext->streams[streamId]->duration * freq * fmtContext->streams[streamId]->time_base.num) / fmtContext->streams[streamId]->time_base.den; + if (fmtContext->streams[streamId]->duration == AV_NOPTS_VALUE) { + len = (fmtContext->duration * freq) / AV_TIME_BASE; + } else { + len = (fmtContext->streams[streamId]->duration * freq * fmtContext->streams[streamId]->time_base.num) / fmtContext->streams[streamId]->time_base.den; + } uint64_t layout = fmtContext->streams[streamId]->codec->channel_layout; inputFormat = fmtContext->streams[streamId]->codec->sample_fmt; switch (layout) { @@ -2244,7 +2248,11 @@ public: } freq = fmtContext->streams[streamId]->codec->sample_rate; - len = (fmtContext->streams[streamId]->duration * freq) / fmtContext->streams[streamId]->time_base.den; + if (fmtContext->streams[streamId]->duration == AV_NOPTS_VALUE) { + len = (fmtContext->duration * freq) / AV_TIME_BASE; + } else { + len = (fmtContext->streams[streamId]->duration * freq * fmtContext->streams[streamId]->time_base.num) / fmtContext->streams[streamId]->time_base.den; + } for (int32 i = 0, l = fmtContext->nb_streams; i < l; ++i) { AVStream *stream = fmtContext->streams[i]; diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 7caebfc95..01a097edf 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,8 +17,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8049; -static const wchar_t *AppVersionStr = L"0.8.49"; +static const int32 AppVersion = 8050; +static const wchar_t *AppVersionStr = L"0.8.50"; static const bool DevVersion = true; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index a26a190f0..2398b60bf 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -3425,7 +3425,7 @@ void HistoryWidget::shareContact(const PeerId &peer, const QString &phone, const flags |= MTPDmessage::flag_reply_to_msg_id; sendFlags |= MTPmessages_SendMedia::flag_reply_to_msg_id; } - h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(peer), MTPint(), MTPint(), MTP_int(replyToId()), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaContact(MTP_string(phone), MTP_string(fname), MTP_string(lname), MTP_int(userId)), MTPnullMarkup)); + h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(peer), MTPint(), MTPint(), MTP_int(replyToId()), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaContact(MTP_string(phone), MTP_string(fname), MTP_string(lname), MTP_int(userId)), MTPnullMarkup, MTPnullEntities)); h->sendRequestId = MTP::send(MTPmessages_SendMedia(MTP_int(sendFlags), p->input, MTP_int(replyTo), MTP_inputMediaContact(MTP_string(phone), MTP_string(fname), MTP_string(lname)), MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), RPCFailHandlerPtr(), 0, 0, h->sendRequestId); App::historyRegRandom(randomId, newId); @@ -4299,11 +4299,11 @@ void HistoryWidget::confirmSendImage(const ReadyLocalMedia &img) { int32 flags = newMessageFlags(h->peer); // unread, out if (img.replyTo) flags |= MTPDmessage::flag_reply_to_msg_id; if (img.type == ToPreparePhoto) { - h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(img.peer), MTPint(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaPhoto(img.photo, MTP_string("")), MTPnullMarkup)); + h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(img.peer), MTPint(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaPhoto(img.photo, MTP_string("")), MTPnullMarkup, MTPnullEntities)); } else if (img.type == ToPrepareDocument) { - h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(img.peer), MTPint(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaDocument(img.document), MTPnullMarkup)); + h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(img.peer), MTPint(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaDocument(img.document), MTPnullMarkup, MTPnullEntities)); } else if (img.type == ToPrepareAudio) { - h->addToBack(MTP_message(MTP_int(flags | MTPDmessage_flag_media_unread), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(img.peer), MTPint(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaAudio(img.audio), MTPnullMarkup)); + h->addToBack(MTP_message(MTP_int(flags | MTPDmessage_flag_media_unread), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(img.peer), MTPint(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaAudio(img.audio), MTPnullMarkup, MTPnullEntities)); } if (_peer && img.peer == _peer->id) { diff --git a/Telegram/SourceFiles/localimageloader.cpp b/Telegram/SourceFiles/localimageloader.cpp index 4d7edf177..75d2fde67 100644 --- a/Telegram/SourceFiles/localimageloader.cpp +++ b/Telegram/SourceFiles/localimageloader.cpp @@ -78,12 +78,15 @@ void LocalImageLoaderPrivate::prepareImages() { type = ToPrepareDocument; } } - if (type == ToPrepareDocument) { - mime = mimeTypeForFile(info).name(); - } if (type != ToPrepareAuto && info.size() < MaxUploadPhotoSize) { bool opaque = (mime != stickerMime); img = App::readImage(file, 0, opaque, &animated); + if (animated) { + type = ToPrepareDocument; + } + } + if (type == ToPrepareDocument) { + mime = mimeTypeForFile(info).name(); } filename = info.fileName(); filesize = info.size(); diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 0b0760725..3a75d23cb 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -1006,8 +1006,8 @@ void MainWidget::sendPreparedText(History *hist, const QString &text, MsgId repl WebPageData *page = App::webPage(webPageId); media = MTP_messageMediaWebPage(MTP_webPagePending(MTP_long(page->id), MTP_int(page->pendingTill))); } - hist->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(hist->peer->id), MTPint(), MTPint(), MTP_int(replyTo), MTP_int(unixtime()), msgText, media, MTPnullMarkup)); - hist->sendRequestId = MTP::send(MTPmessages_SendMessage(MTP_int(sendFlags), hist->peer->input, MTP_int(replyTo), msgText, MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentDataReceived, randomId), RPCFailHandlerPtr(), 0, 0, hist->sendRequestId); + hist->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(hist->peer->id), MTPint(), MTPint(), MTP_int(replyTo), MTP_int(unixtime()), msgText, media, MTPnullMarkup, MTPnullEntities)); + hist->sendRequestId = MTP::send(MTPmessages_SendMessage(MTP_int(sendFlags), hist->peer->input, MTP_int(replyTo), msgText, MTP_long(randomId), MTPnullMarkup, MTPnullEntities), App::main()->rpcDone(&MainWidget::sentDataReceived, randomId), RPCFailHandlerPtr(), 0, 0, hist->sendRequestId); } finishForwarding(hist); @@ -1734,7 +1734,7 @@ void MainWidget::serviceNotification(const QString &msg, const MTPMessageMedia & QString sendingText, leftText = msg; HistoryItem *item = 0; while (textSplit(sendingText, leftText, MaxMessageSize)) { - item = App::histories().addToBack(MTP_message(MTP_int(flags), MTP_int(clientMsgId()), MTP_int(ServiceUserId), MTP_peerUser(MTP_int(MTP::authedId())), MTPint(), MTPint(), MTPint(), MTP_int(unixtime()), MTP_string(sendingText), media, MTPnullMarkup), unread ? 1 : 2); + item = App::histories().addToBack(MTP_message(MTP_int(flags), MTP_int(clientMsgId()), MTP_int(ServiceUserId), MTP_peerUser(MTP_int(MTP::authedId())), MTPint(), MTPint(), MTPint(), MTP_int(unixtime()), MTP_string(sendingText), media, MTPnullMarkup, MTPnullEntities), unread ? 1 : 2); } if (item) { history.peerMessagesUpdated(item->history()->peer->id); @@ -3349,7 +3349,7 @@ void MainWidget::handleUpdates(const MTPUpdates &updates) { return; } bool out = (d.vflags.v & MTPDmessage_flag_out); - HistoryItem *item = App::histories().addToBack(MTP_message(d.vflags, d.vid, out ? MTP_int(MTP::authedId()) : d.vuser_id, MTP_peerUser(out ? d.vuser_id : MTP_int(MTP::authedId())), d.vfwd_from_id, d.vfwd_date, d.vreply_to_msg_id, d.vdate, d.vmessage, MTP_messageMediaEmpty(), MTPnullMarkup)); + HistoryItem *item = App::histories().addToBack(MTP_message(d.vflags, d.vid, out ? MTP_int(MTP::authedId()) : d.vuser_id, MTP_peerUser(out ? d.vuser_id : MTP_int(MTP::authedId())), d.vfwd_from_id, d.vfwd_date, d.vreply_to_msg_id, d.vdate, d.vmessage, MTP_messageMediaEmpty(), MTPnullMarkup, MTPnullEntities)); if (item) { history.peerMessagesUpdated(item->history()->peer->id); } @@ -3369,7 +3369,7 @@ void MainWidget::handleUpdates(const MTPUpdates &updates) { _byPtsUpdates.insert(ptsKey(SkippedUpdates), updates); return; } - HistoryItem *item = App::histories().addToBack(MTP_message(d.vflags, d.vid, d.vfrom_id, MTP_peerChat(d.vchat_id), d.vfwd_from_id, d.vfwd_date, d.vreply_to_msg_id, d.vdate, d.vmessage, MTP_messageMediaEmpty(), MTPnullMarkup)); + HistoryItem *item = App::histories().addToBack(MTP_message(d.vflags, d.vid, d.vfrom_id, MTP_peerChat(d.vchat_id), d.vfwd_from_id, d.vfwd_date, d.vreply_to_msg_id, d.vdate, d.vmessage, MTP_messageMediaEmpty(), MTPnullMarkup, MTPnullEntities)); if (item) { history.peerMessagesUpdated(item->history()->peer->id); } diff --git a/Telegram/SourceFiles/mtproto/generate.py b/Telegram/SourceFiles/mtproto/generate.py index 3967d19be..9108ce2b5 100644 --- a/Telegram/SourceFiles/mtproto/generate.py +++ b/Telegram/SourceFiles/mtproto/generate.py @@ -150,6 +150,13 @@ with open('scheme.tl') as f: print('Bad param found: "' + param + '" in line: ' + line); continue; ptype = pmasktype.group(3); + if (ptype.find('<') >= 0): + templ = re.match(r'^([vV]ector<)([A-Za-z0-9\._]+)>$', ptype); + if (templ): + ptype = templ.group(1) + 'MTP' + templ.group(2).replace('.', '_') + '>'; + else: + print('Bad template type: ' + ptype); + continue; if (not pname in conditions): conditionsList.append(pname); conditions[pname] = pmasktype.group(2); diff --git a/Telegram/SourceFiles/mtproto/mtpConnection.h b/Telegram/SourceFiles/mtproto/mtpConnection.h index 2e0bc96ee..2b600b60f 100644 --- a/Telegram/SourceFiles/mtproto/mtpConnection.h +++ b/Telegram/SourceFiles/mtproto/mtpConnection.h @@ -52,6 +52,7 @@ enum { }; static const MTPReplyMarkup MTPnullMarkup = MTP_replyKeyboardMarkup(MTP_int(0), MTP_vector(0)); +static const MTPVector MTPnullEntities = MTP_vector(0); #include "mtproto/mtpPublicRSA.h" #include "mtproto/mtpAuthKey.h" diff --git a/Telegram/SourceFiles/mtproto/mtpCoreTypes.h b/Telegram/SourceFiles/mtproto/mtpCoreTypes.h index 63b6c1fad..e9e479134 100644 --- a/Telegram/SourceFiles/mtproto/mtpCoreTypes.h +++ b/Telegram/SourceFiles/mtproto/mtpCoreTypes.h @@ -366,7 +366,7 @@ static const mtpTypeId mtpLayers[] = { mtpc_invokeWithLayer17, mtpc_invokeWithLayer18, }, mtpLayerMaxSingle = sizeof(mtpLayers) / sizeof(mtpLayers[0]); -static const mtpPrime mtpCurrentLayer = 33; +static const mtpPrime mtpCurrentLayer = 34; template class MTPBoxed : public bareT { diff --git a/Telegram/SourceFiles/mtproto/mtpScheme.cpp b/Telegram/SourceFiles/mtproto/mtpScheme.cpp index 457cd9470..48cf2b3f0 100644 --- a/Telegram/SourceFiles/mtproto/mtpScheme.cpp +++ b/Telegram/SourceFiles/mtproto/mtpScheme.cpp @@ -1348,6 +1348,7 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP case 8: to.add(" message: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 9: to.add(" media: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 10: to.add(" reply_markup: "); ++stages.back(); if (flag & MTPDmessage::flag_reply_markup) { types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 6 IN FIELD flags ]"); } break; + case 11: to.add(" entities: "); ++stages.back(); if (flag & MTPDmessage::flag_entities) { types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 7 IN FIELD flags ]"); } break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; @@ -2193,10 +2194,6 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; - case mtpc_messages_messageEmpty: - to.add("{ messages_messageEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); - break; - case mtpc_messages_sentMessage: if (stage) { to.add(",\n").addSpaces(lev); @@ -2208,8 +2205,9 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 1: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 2: to.add(" media: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 3: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; - case 4: to.add(" pts_count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 3: to.add(" entities: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 4: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 5: to.add(" pts_count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; @@ -2823,6 +2821,7 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP case 7: to.add(" fwd_from_id: "); ++stages.back(); if (flag & MTPDupdateShortMessage::flag_fwd_from_id) { types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 2 IN FIELD flags ]"); } break; case 8: to.add(" fwd_date: "); ++stages.back(); if (flag & MTPDupdateShortMessage::flag_fwd_date) { types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 2 IN FIELD flags ]"); } break; case 9: to.add(" reply_to_msg_id: "); ++stages.back(); if (flag & MTPDupdateShortMessage::flag_reply_to_msg_id) { types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 3 IN FIELD flags ]"); } break; + case 10: to.add(" entities: "); ++stages.back(); if (flag & MTPDupdateShortMessage::flag_entities) { types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 7 IN FIELD flags ]"); } break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; @@ -2846,6 +2845,7 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP case 8: to.add(" fwd_from_id: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::flag_fwd_from_id) { types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 2 IN FIELD flags ]"); } break; case 9: to.add(" fwd_date: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::flag_fwd_date) { types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 2 IN FIELD flags ]"); } break; case 10: to.add(" reply_to_msg_id: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::flag_reply_to_msg_id) { types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 3 IN FIELD flags ]"); } break; + case 11: to.add(" entities: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::flag_entities) { types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 7 IN FIELD flags ]"); } break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; @@ -4381,6 +4381,162 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; + case mtpc_messageEntityUnknown: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageEntityUnknown"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" length: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + + case mtpc_messageEntityMention: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageEntityMention"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" length: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + + case mtpc_messageEntityHashtag: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageEntityHashtag"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" length: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + + case mtpc_messageEntityBotCommand: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageEntityBotCommand"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" length: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + + case mtpc_messageEntityUrl: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageEntityUrl"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" length: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + + case mtpc_messageEntityEmail: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageEntityEmail"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" length: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + + case mtpc_messageEntityBold: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageEntityBold"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" length: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + + case mtpc_messageEntityItalic: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageEntityItalic"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" length: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + + case mtpc_messageEntityCode: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageEntityCode"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" length: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + + case mtpc_messageEntityPre: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageEntityPre"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" length: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 2: to.add(" language: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + + case mtpc_messageEntityTextUrl: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageEntityTextUrl"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 1: to.add(" length: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + case 2: to.add(" url: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; + } + break; + case mtpc_req_pq: if (stage) { to.add(",\n").addSpaces(lev); @@ -5434,6 +5590,7 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP case 3: to.add(" message: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 4: to.add(" random_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break; case 5: to.add(" reply_markup: "); ++stages.back(); if (flag & MTPmessages_sendMessage::flag_reply_markup) { types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 2 IN FIELD flags ]"); } break; + case 6: to.add(" entities: "); ++stages.back(); if (flag & MTPmessages_sendMessage::flag_entities) { types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 3 IN FIELD flags ]"); } break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break; } break; diff --git a/Telegram/SourceFiles/mtproto/mtpScheme.h b/Telegram/SourceFiles/mtproto/mtpScheme.h index 17d3f4a6f..6ee83d88c 100644 --- a/Telegram/SourceFiles/mtproto/mtpScheme.h +++ b/Telegram/SourceFiles/mtproto/mtpScheme.h @@ -124,7 +124,7 @@ enum { mtpc_chatPhotoEmpty = 0x37c1011c, mtpc_chatPhoto = 0x6153276a, mtpc_messageEmpty = 0x83e5de54, - mtpc_message = 0xc3060325, + mtpc_message = 0xf07814c8, mtpc_messageService = 0x1d86f70e, mtpc_messageMediaEmpty = 0x3ded6320, mtpc_messageMediaPhoto = 0x3d8ce53d, @@ -183,8 +183,7 @@ enum { mtpc_messages_dialogsSlice = 0x71e094f3, mtpc_messages_messages = 0x8c718e87, mtpc_messages_messagesSlice = 0xb446ae3, - mtpc_messages_messageEmpty = 0x3f4e0648, - mtpc_messages_sentMessage = 0x4c3d47f3, + mtpc_messages_sentMessage = 0x8a99d8e0, mtpc_messages_chats = 0x64ff9fd5, mtpc_messages_chatFull = 0xe5d7d19c, mtpc_messages_affectedHistory = 0xb45c69d1, @@ -214,8 +213,8 @@ enum { mtpc_updates_difference = 0xf49ca0, mtpc_updates_differenceSlice = 0xa8fb1981, mtpc_updatesTooLong = 0xe317af7e, - mtpc_updateShortMessage = 0xed5c2127, - mtpc_updateShortChatMessage = 0x52238b3c, + mtpc_updateShortMessage = 0x3f32d858, + mtpc_updateShortChatMessage = 0xf9409b3d, mtpc_updateShort = 0x78d4dec1, mtpc_updatesCombined = 0x725b04c3, mtpc_updates = 0x74ae4240, @@ -389,6 +388,17 @@ enum { mtpc_inputUser = 0xd8292816, mtpc_help_appChangelogEmpty = 0xaf7e0394, mtpc_help_appChangelog = 0x4668e6bd, + mtpc_messageEntityUnknown = 0xbb92ba95, + mtpc_messageEntityMention = 0xfa04579d, + mtpc_messageEntityHashtag = 0x6f635b0d, + mtpc_messageEntityBotCommand = 0x6cef8ac7, + mtpc_messageEntityUrl = 0x6ed02538, + mtpc_messageEntityEmail = 0x64e475c2, + mtpc_messageEntityBold = 0xbd610bc9, + mtpc_messageEntityItalic = 0x826f8b60, + mtpc_messageEntityCode = 0x28a20571, + mtpc_messageEntityPre = 0x73924be0, + mtpc_messageEntityTextUrl = 0x76a6d327, mtpc_invokeAfterMsg = 0xcb9f372d, mtpc_invokeAfterMsgs = 0x3dc4b4f0, mtpc_auth_checkPhone = 0x6fe51dfb, @@ -432,7 +442,7 @@ enum { mtpc_messages_deleteMessages = 0xa5f18925, mtpc_messages_receivedMessages = 0x5a954c0, mtpc_messages_setTyping = 0xa3825e50, - mtpc_messages_sendMessage = 0xfc55e6b5, + mtpc_messages_sendMessage = 0xdf12390, mtpc_messages_sendMedia = 0xc8f16791, mtpc_messages_forwardMessages = 0x55e1728d, mtpc_messages_getChats = 0x3c6aa187, @@ -809,8 +819,6 @@ class MTPmessages_messages; class MTPDmessages_messages; class MTPDmessages_messagesSlice; -class MTPmessages_message; - class MTPmessages_sentMessage; class MTPDmessages_sentMessage; class MTPDmessages_sentMessageLink; @@ -1086,6 +1094,19 @@ class MTPDreplyKeyboardMarkup; class MTPhelp_appChangelog; class MTPDhelp_appChangelog; +class MTPmessageEntity; +class MTPDmessageEntityUnknown; +class MTPDmessageEntityMention; +class MTPDmessageEntityHashtag; +class MTPDmessageEntityBotCommand; +class MTPDmessageEntityUrl; +class MTPDmessageEntityEmail; +class MTPDmessageEntityBold; +class MTPDmessageEntityItalic; +class MTPDmessageEntityCode; +class MTPDmessageEntityPre; +class MTPDmessageEntityTextUrl; + // Boxed types definitions typedef MTPBoxed MTPResPQ; @@ -1166,7 +1187,6 @@ typedef MTPBoxed MTPcontacts_Blocked; typedef MTPBoxed MTPcontacts_Suggested; typedef MTPBoxed MTPmessages_Dialogs; typedef MTPBoxed MTPmessages_Messages; -typedef MTPBoxed MTPmessages_Message; typedef MTPBoxed MTPmessages_SentMessage; typedef MTPBoxed MTPmessages_Chats; typedef MTPBoxed MTPmessages_ChatFull; @@ -1238,6 +1258,7 @@ typedef MTPBoxed MTPKeyboardButton; typedef MTPBoxed MTPKeyboardButtonRow; typedef MTPBoxed MTPReplyMarkup; typedef MTPBoxed MTPhelp_AppChangelog; +typedef MTPBoxed MTPMessageEntity; // Type classes definitions @@ -3341,7 +3362,7 @@ private: explicit MTPmessage(MTPDmessageService *_data); friend MTPmessage MTP_messageEmpty(MTPint _id); - friend MTPmessage MTP_message(MTPint _flags, MTPint _id, MTPint _from_id, const MTPPeer &_to_id, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, MTPint _date, const MTPstring &_message, const MTPMessageMedia &_media, const MTPReplyMarkup &_reply_markup); + friend MTPmessage MTP_message(MTPint _flags, MTPint _id, MTPint _from_id, const MTPPeer &_to_id, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, MTPint _date, const MTPstring &_message, const MTPMessageMedia &_media, const MTPReplyMarkup &_reply_markup, const MTPVector &_entities); friend MTPmessage MTP_messageService(MTPint _flags, MTPint _id, MTPint _from_id, const MTPPeer &_to_id, MTPint _date, const MTPMessageAction &_action); mtpTypeId _type; @@ -4714,27 +4735,6 @@ private: }; typedef MTPBoxed MTPmessages_Messages; -class MTPmessages_message { -public: - MTPmessages_message() { - } - MTPmessages_message(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_messageEmpty) { - read(from, end, cons); - } - - uint32 innerLength() const; - mtpTypeId type() const; - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_messageEmpty); - void write(mtpBuffer &to) const; - - typedef void ResponseType; - -private: - - friend MTPmessages_message MTP_messages_messageEmpty(); -}; -typedef MTPBoxed MTPmessages_Message; - class MTPmessages_sentMessage : private mtpDataOwner { public: MTPmessages_sentMessage() : mtpDataOwner(0), _type(0) { @@ -4779,7 +4779,7 @@ private: explicit MTPmessages_sentMessage(MTPDmessages_sentMessage *_data); explicit MTPmessages_sentMessage(MTPDmessages_sentMessageLink *_data); - friend MTPmessages_sentMessage MTP_messages_sentMessage(MTPint _id, MTPint _date, const MTPMessageMedia &_media, MTPint _pts, MTPint _pts_count); + friend MTPmessages_sentMessage MTP_messages_sentMessage(MTPint _id, MTPint _date, const MTPMessageMedia &_media, const MTPVector &_entities, MTPint _pts, MTPint _pts_count); friend MTPmessages_sentMessage MTP_messages_sentMessageLink(MTPint _id, MTPint _date, const MTPMessageMedia &_media, MTPint _pts, MTPint _pts_count, const MTPVector &_links, MTPint _seq); mtpTypeId _type; @@ -5520,8 +5520,8 @@ private: explicit MTPupdates(MTPDupdates *_data); friend MTPupdates MTP_updatesTooLong(); - friend MTPupdates MTP_updateShortMessage(MTPint _flags, MTPint _id, MTPint _user_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id); - friend MTPupdates MTP_updateShortChatMessage(MTPint _flags, MTPint _id, MTPint _from_id, MTPint _chat_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id); + friend MTPupdates MTP_updateShortMessage(MTPint _flags, MTPint _id, MTPint _user_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, const MTPVector &_entities); + friend MTPupdates MTP_updateShortChatMessage(MTPint _flags, MTPint _id, MTPint _from_id, MTPint _chat_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, const MTPVector &_entities); friend MTPupdates MTP_updateShort(const MTPUpdate &_update, MTPint _date); friend MTPupdates MTP_updatesCombined(const MTPVector &_updates, const MTPVector &_users, const MTPVector &_chats, MTPint _date, MTPint _seq_start, MTPint _seq); friend MTPupdates MTP_updates(const MTPVector &_updates, const MTPVector &_users, const MTPVector &_chats, MTPint _date, MTPint _seq); @@ -8065,6 +8065,183 @@ private: }; typedef MTPBoxed MTPhelp_AppChangelog; +class MTPmessageEntity : private mtpDataOwner { +public: + MTPmessageEntity() : mtpDataOwner(0), _type(0) { + } + MTPmessageEntity(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) : mtpDataOwner(0), _type(0) { + read(from, end, cons); + } + + MTPDmessageEntityUnknown &_messageEntityUnknown() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityUnknown) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityUnknown); + split(); + return *(MTPDmessageEntityUnknown*)data; + } + const MTPDmessageEntityUnknown &c_messageEntityUnknown() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityUnknown) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityUnknown); + return *(const MTPDmessageEntityUnknown*)data; + } + + MTPDmessageEntityMention &_messageEntityMention() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityMention) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityMention); + split(); + return *(MTPDmessageEntityMention*)data; + } + const MTPDmessageEntityMention &c_messageEntityMention() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityMention) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityMention); + return *(const MTPDmessageEntityMention*)data; + } + + MTPDmessageEntityHashtag &_messageEntityHashtag() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityHashtag) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityHashtag); + split(); + return *(MTPDmessageEntityHashtag*)data; + } + const MTPDmessageEntityHashtag &c_messageEntityHashtag() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityHashtag) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityHashtag); + return *(const MTPDmessageEntityHashtag*)data; + } + + MTPDmessageEntityBotCommand &_messageEntityBotCommand() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityBotCommand) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityBotCommand); + split(); + return *(MTPDmessageEntityBotCommand*)data; + } + const MTPDmessageEntityBotCommand &c_messageEntityBotCommand() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityBotCommand) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityBotCommand); + return *(const MTPDmessageEntityBotCommand*)data; + } + + MTPDmessageEntityUrl &_messageEntityUrl() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityUrl) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityUrl); + split(); + return *(MTPDmessageEntityUrl*)data; + } + const MTPDmessageEntityUrl &c_messageEntityUrl() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityUrl) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityUrl); + return *(const MTPDmessageEntityUrl*)data; + } + + MTPDmessageEntityEmail &_messageEntityEmail() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityEmail) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityEmail); + split(); + return *(MTPDmessageEntityEmail*)data; + } + const MTPDmessageEntityEmail &c_messageEntityEmail() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityEmail) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityEmail); + return *(const MTPDmessageEntityEmail*)data; + } + + MTPDmessageEntityBold &_messageEntityBold() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityBold) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityBold); + split(); + return *(MTPDmessageEntityBold*)data; + } + const MTPDmessageEntityBold &c_messageEntityBold() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityBold) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityBold); + return *(const MTPDmessageEntityBold*)data; + } + + MTPDmessageEntityItalic &_messageEntityItalic() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityItalic) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityItalic); + split(); + return *(MTPDmessageEntityItalic*)data; + } + const MTPDmessageEntityItalic &c_messageEntityItalic() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityItalic) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityItalic); + return *(const MTPDmessageEntityItalic*)data; + } + + MTPDmessageEntityCode &_messageEntityCode() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityCode) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityCode); + split(); + return *(MTPDmessageEntityCode*)data; + } + const MTPDmessageEntityCode &c_messageEntityCode() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityCode) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityCode); + return *(const MTPDmessageEntityCode*)data; + } + + MTPDmessageEntityPre &_messageEntityPre() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityPre) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityPre); + split(); + return *(MTPDmessageEntityPre*)data; + } + const MTPDmessageEntityPre &c_messageEntityPre() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityPre) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityPre); + return *(const MTPDmessageEntityPre*)data; + } + + MTPDmessageEntityTextUrl &_messageEntityTextUrl() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityTextUrl) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityTextUrl); + split(); + return *(MTPDmessageEntityTextUrl*)data; + } + const MTPDmessageEntityTextUrl &c_messageEntityTextUrl() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_messageEntityTextUrl) throw mtpErrorWrongTypeId(_type, mtpc_messageEntityTextUrl); + return *(const MTPDmessageEntityTextUrl*)data; + } + + uint32 innerLength() const; + mtpTypeId type() const; + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); + void write(mtpBuffer &to) const; + + typedef void ResponseType; + +private: + explicit MTPmessageEntity(mtpTypeId type); + explicit MTPmessageEntity(MTPDmessageEntityUnknown *_data); + explicit MTPmessageEntity(MTPDmessageEntityMention *_data); + explicit MTPmessageEntity(MTPDmessageEntityHashtag *_data); + explicit MTPmessageEntity(MTPDmessageEntityBotCommand *_data); + explicit MTPmessageEntity(MTPDmessageEntityUrl *_data); + explicit MTPmessageEntity(MTPDmessageEntityEmail *_data); + explicit MTPmessageEntity(MTPDmessageEntityBold *_data); + explicit MTPmessageEntity(MTPDmessageEntityItalic *_data); + explicit MTPmessageEntity(MTPDmessageEntityCode *_data); + explicit MTPmessageEntity(MTPDmessageEntityPre *_data); + explicit MTPmessageEntity(MTPDmessageEntityTextUrl *_data); + + friend MTPmessageEntity MTP_messageEntityUnknown(MTPint _offset, MTPint _length); + friend MTPmessageEntity MTP_messageEntityMention(MTPint _offset, MTPint _length); + friend MTPmessageEntity MTP_messageEntityHashtag(MTPint _offset, MTPint _length); + friend MTPmessageEntity MTP_messageEntityBotCommand(MTPint _offset, MTPint _length); + friend MTPmessageEntity MTP_messageEntityUrl(MTPint _offset, MTPint _length); + friend MTPmessageEntity MTP_messageEntityEmail(MTPint _offset, MTPint _length); + friend MTPmessageEntity MTP_messageEntityBold(MTPint _offset, MTPint _length); + friend MTPmessageEntity MTP_messageEntityItalic(MTPint _offset, MTPint _length); + friend MTPmessageEntity MTP_messageEntityCode(MTPint _offset, MTPint _length); + friend MTPmessageEntity MTP_messageEntityPre(MTPint _offset, MTPint _length, const MTPstring &_language); + friend MTPmessageEntity MTP_messageEntityTextUrl(MTPint _offset, MTPint _length, const MTPstring &_url); + + mtpTypeId _type; +}; +typedef MTPBoxed MTPMessageEntity; + // Type constructors with data class MTPDresPQ : public mtpDataImpl { @@ -9018,7 +9195,7 @@ class MTPDmessage : public mtpDataImpl { public: MTPDmessage() { } - MTPDmessage(MTPint _flags, MTPint _id, MTPint _from_id, const MTPPeer &_to_id, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, MTPint _date, const MTPstring &_message, const MTPMessageMedia &_media, const MTPReplyMarkup &_reply_markup) : vflags(_flags), vid(_id), vfrom_id(_from_id), vto_id(_to_id), vfwd_from_id(_fwd_from_id), vfwd_date(_fwd_date), vreply_to_msg_id(_reply_to_msg_id), vdate(_date), vmessage(_message), vmedia(_media), vreply_markup(_reply_markup) { + MTPDmessage(MTPint _flags, MTPint _id, MTPint _from_id, const MTPPeer &_to_id, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, MTPint _date, const MTPstring &_message, const MTPMessageMedia &_media, const MTPReplyMarkup &_reply_markup, const MTPVector &_entities) : vflags(_flags), vid(_id), vfrom_id(_from_id), vto_id(_to_id), vfwd_from_id(_fwd_from_id), vfwd_date(_fwd_date), vreply_to_msg_id(_reply_to_msg_id), vdate(_date), vmessage(_message), vmedia(_media), vreply_markup(_reply_markup), ventities(_entities) { } MTPint vflags; @@ -9032,18 +9209,21 @@ public: MTPstring vmessage; MTPMessageMedia vmedia; MTPReplyMarkup vreply_markup; + MTPVector ventities; enum { flag_fwd_from_id = (1 << 2), flag_fwd_date = (1 << 2), flag_reply_to_msg_id = (1 << 3), flag_reply_markup = (1 << 6), + flag_entities = (1 << 7), }; bool has_fwd_from_id() const { return vflags.v & flag_fwd_from_id; } bool has_fwd_date() const { return vflags.v & flag_fwd_date; } bool has_reply_to_msg_id() const { return vflags.v & flag_reply_to_msg_id; } bool has_reply_markup() const { return vflags.v & flag_reply_markup; } + bool has_entities() const { return vflags.v & flag_entities; } }; class MTPDmessageService : public mtpDataImpl { @@ -9672,12 +9852,13 @@ class MTPDmessages_sentMessage : public mtpDataImpl { public: MTPDmessages_sentMessage() { } - MTPDmessages_sentMessage(MTPint _id, MTPint _date, const MTPMessageMedia &_media, MTPint _pts, MTPint _pts_count) : vid(_id), vdate(_date), vmedia(_media), vpts(_pts), vpts_count(_pts_count) { + MTPDmessages_sentMessage(MTPint _id, MTPint _date, const MTPMessageMedia &_media, const MTPVector &_entities, MTPint _pts, MTPint _pts_count) : vid(_id), vdate(_date), vmedia(_media), ventities(_entities), vpts(_pts), vpts_count(_pts_count) { } MTPint vid; MTPint vdate; MTPMessageMedia vmedia; + MTPVector ventities; MTPint vpts; MTPint vpts_count; }; @@ -10126,7 +10307,7 @@ class MTPDupdateShortMessage : public mtpDataImpl { public: MTPDupdateShortMessage() { } - MTPDupdateShortMessage(MTPint _flags, MTPint _id, MTPint _user_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id) : vflags(_flags), vid(_id), vuser_id(_user_id), vmessage(_message), vpts(_pts), vpts_count(_pts_count), vdate(_date), vfwd_from_id(_fwd_from_id), vfwd_date(_fwd_date), vreply_to_msg_id(_reply_to_msg_id) { + MTPDupdateShortMessage(MTPint _flags, MTPint _id, MTPint _user_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, const MTPVector &_entities) : vflags(_flags), vid(_id), vuser_id(_user_id), vmessage(_message), vpts(_pts), vpts_count(_pts_count), vdate(_date), vfwd_from_id(_fwd_from_id), vfwd_date(_fwd_date), vreply_to_msg_id(_reply_to_msg_id), ventities(_entities) { } MTPint vflags; @@ -10139,23 +10320,26 @@ public: MTPint vfwd_from_id; MTPint vfwd_date; MTPint vreply_to_msg_id; + MTPVector ventities; enum { flag_fwd_from_id = (1 << 2), flag_fwd_date = (1 << 2), flag_reply_to_msg_id = (1 << 3), + flag_entities = (1 << 7), }; bool has_fwd_from_id() const { return vflags.v & flag_fwd_from_id; } bool has_fwd_date() const { return vflags.v & flag_fwd_date; } bool has_reply_to_msg_id() const { return vflags.v & flag_reply_to_msg_id; } + bool has_entities() const { return vflags.v & flag_entities; } }; class MTPDupdateShortChatMessage : public mtpDataImpl { public: MTPDupdateShortChatMessage() { } - MTPDupdateShortChatMessage(MTPint _flags, MTPint _id, MTPint _from_id, MTPint _chat_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id) : vflags(_flags), vid(_id), vfrom_id(_from_id), vchat_id(_chat_id), vmessage(_message), vpts(_pts), vpts_count(_pts_count), vdate(_date), vfwd_from_id(_fwd_from_id), vfwd_date(_fwd_date), vreply_to_msg_id(_reply_to_msg_id) { + MTPDupdateShortChatMessage(MTPint _flags, MTPint _id, MTPint _from_id, MTPint _chat_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, const MTPVector &_entities) : vflags(_flags), vid(_id), vfrom_id(_from_id), vchat_id(_chat_id), vmessage(_message), vpts(_pts), vpts_count(_pts_count), vdate(_date), vfwd_from_id(_fwd_from_id), vfwd_date(_fwd_date), vreply_to_msg_id(_reply_to_msg_id), ventities(_entities) { } MTPint vflags; @@ -10169,16 +10353,19 @@ public: MTPint vfwd_from_id; MTPint vfwd_date; MTPint vreply_to_msg_id; + MTPVector ventities; enum { flag_fwd_from_id = (1 << 2), flag_fwd_date = (1 << 2), flag_reply_to_msg_id = (1 << 3), + flag_entities = (1 << 7), }; bool has_fwd_from_id() const { return vflags.v & flag_fwd_from_id; } bool has_fwd_date() const { return vflags.v & flag_fwd_date; } bool has_reply_to_msg_id() const { return vflags.v & flag_reply_to_msg_id; } + bool has_entities() const { return vflags.v & flag_entities; } }; class MTPDupdateShort : public mtpDataImpl { @@ -11331,6 +11518,129 @@ public: MTPstring vtext; }; +class MTPDmessageEntityUnknown : public mtpDataImpl { +public: + MTPDmessageEntityUnknown() { + } + MTPDmessageEntityUnknown(MTPint _offset, MTPint _length) : voffset(_offset), vlength(_length) { + } + + MTPint voffset; + MTPint vlength; +}; + +class MTPDmessageEntityMention : public mtpDataImpl { +public: + MTPDmessageEntityMention() { + } + MTPDmessageEntityMention(MTPint _offset, MTPint _length) : voffset(_offset), vlength(_length) { + } + + MTPint voffset; + MTPint vlength; +}; + +class MTPDmessageEntityHashtag : public mtpDataImpl { +public: + MTPDmessageEntityHashtag() { + } + MTPDmessageEntityHashtag(MTPint _offset, MTPint _length) : voffset(_offset), vlength(_length) { + } + + MTPint voffset; + MTPint vlength; +}; + +class MTPDmessageEntityBotCommand : public mtpDataImpl { +public: + MTPDmessageEntityBotCommand() { + } + MTPDmessageEntityBotCommand(MTPint _offset, MTPint _length) : voffset(_offset), vlength(_length) { + } + + MTPint voffset; + MTPint vlength; +}; + +class MTPDmessageEntityUrl : public mtpDataImpl { +public: + MTPDmessageEntityUrl() { + } + MTPDmessageEntityUrl(MTPint _offset, MTPint _length) : voffset(_offset), vlength(_length) { + } + + MTPint voffset; + MTPint vlength; +}; + +class MTPDmessageEntityEmail : public mtpDataImpl { +public: + MTPDmessageEntityEmail() { + } + MTPDmessageEntityEmail(MTPint _offset, MTPint _length) : voffset(_offset), vlength(_length) { + } + + MTPint voffset; + MTPint vlength; +}; + +class MTPDmessageEntityBold : public mtpDataImpl { +public: + MTPDmessageEntityBold() { + } + MTPDmessageEntityBold(MTPint _offset, MTPint _length) : voffset(_offset), vlength(_length) { + } + + MTPint voffset; + MTPint vlength; +}; + +class MTPDmessageEntityItalic : public mtpDataImpl { +public: + MTPDmessageEntityItalic() { + } + MTPDmessageEntityItalic(MTPint _offset, MTPint _length) : voffset(_offset), vlength(_length) { + } + + MTPint voffset; + MTPint vlength; +}; + +class MTPDmessageEntityCode : public mtpDataImpl { +public: + MTPDmessageEntityCode() { + } + MTPDmessageEntityCode(MTPint _offset, MTPint _length) : voffset(_offset), vlength(_length) { + } + + MTPint voffset; + MTPint vlength; +}; + +class MTPDmessageEntityPre : public mtpDataImpl { +public: + MTPDmessageEntityPre() { + } + MTPDmessageEntityPre(MTPint _offset, MTPint _length, const MTPstring &_language) : voffset(_offset), vlength(_length), vlanguage(_language) { + } + + MTPint voffset; + MTPint vlength; + MTPstring vlanguage; +}; + +class MTPDmessageEntityTextUrl : public mtpDataImpl { +public: + MTPDmessageEntityTextUrl() { + } + MTPDmessageEntityTextUrl(MTPint _offset, MTPint _length, const MTPstring &_url) : voffset(_offset), vlength(_length), vurl(_url) { + } + + MTPint voffset; + MTPint vlength; + MTPstring vurl; +}; + // RPC methods class MTPreq_pq { // RPC method 'req_pq' @@ -13492,25 +13802,28 @@ public: MTPstring vmessage; MTPlong vrandom_id; MTPReplyMarkup vreply_markup; + MTPVector ventities; MTPmessages_sendMessage() { } MTPmessages_sendMessage(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_sendMessage) { read(from, end, cons); } - MTPmessages_sendMessage(MTPint _flags, const MTPInputPeer &_peer, MTPint _reply_to_msg_id, const MTPstring &_message, const MTPlong &_random_id, const MTPReplyMarkup &_reply_markup) : vflags(_flags), vpeer(_peer), vreply_to_msg_id(_reply_to_msg_id), vmessage(_message), vrandom_id(_random_id), vreply_markup(_reply_markup) { + MTPmessages_sendMessage(MTPint _flags, const MTPInputPeer &_peer, MTPint _reply_to_msg_id, const MTPstring &_message, const MTPlong &_random_id, const MTPReplyMarkup &_reply_markup, const MTPVector &_entities) : vflags(_flags), vpeer(_peer), vreply_to_msg_id(_reply_to_msg_id), vmessage(_message), vrandom_id(_random_id), vreply_markup(_reply_markup), ventities(_entities) { } enum { flag_reply_to_msg_id = (1 << 0), flag_reply_markup = (1 << 2), + flag_entities = (1 << 3), }; bool has_reply_to_msg_id() const { return vflags.v & flag_reply_to_msg_id; } bool has_reply_markup() const { return vflags.v & flag_reply_markup; } + bool has_entities() const { return vflags.v & flag_entities; } uint32 innerLength() const { - return vflags.innerLength() + vpeer.innerLength() + (has_reply_to_msg_id() ? vreply_to_msg_id.innerLength() : 0) + vmessage.innerLength() + vrandom_id.innerLength() + (has_reply_markup() ? vreply_markup.innerLength() : 0); + return vflags.innerLength() + vpeer.innerLength() + (has_reply_to_msg_id() ? vreply_to_msg_id.innerLength() : 0) + vmessage.innerLength() + vrandom_id.innerLength() + (has_reply_markup() ? vreply_markup.innerLength() : 0) + (has_entities() ? ventities.innerLength() : 0); } mtpTypeId type() const { return mtpc_messages_sendMessage; @@ -13522,6 +13835,7 @@ public: vmessage.read(from, end); vrandom_id.read(from, end); if (has_reply_markup()) { vreply_markup.read(from, end); } else { vreply_markup = MTPReplyMarkup(); } + if (has_entities()) { ventities.read(from, end); } else { ventities = MTPVector(); } } void write(mtpBuffer &to) const { vflags.write(to); @@ -13530,6 +13844,7 @@ public: vmessage.write(to); vrandom_id.write(to); if (has_reply_markup()) vreply_markup.write(to); + if (has_entities()) ventities.write(to); } typedef MTPmessages_SentMessage ResponseType; @@ -13542,7 +13857,7 @@ public: } MTPmessages_SendMessage(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed(from, end, cons) { } - MTPmessages_SendMessage(MTPint _flags, const MTPInputPeer &_peer, MTPint _reply_to_msg_id, const MTPstring &_message, const MTPlong &_random_id, const MTPReplyMarkup &_reply_markup) : MTPBoxed(MTPmessages_sendMessage(_flags, _peer, _reply_to_msg_id, _message, _random_id, _reply_markup)) { + MTPmessages_SendMessage(MTPint _flags, const MTPInputPeer &_peer, MTPint _reply_to_msg_id, const MTPstring &_message, const MTPlong &_random_id, const MTPReplyMarkup &_reply_markup, const MTPVector &_entities) : MTPBoxed(MTPmessages_sendMessage(_flags, _peer, _reply_to_msg_id, _message, _random_id, _reply_markup, _entities)) { } }; @@ -19802,7 +20117,7 @@ inline uint32 MTPmessage::innerLength() const { } case mtpc_message: { const MTPDmessage &v(c_message()); - return v.vflags.innerLength() + v.vid.innerLength() + v.vfrom_id.innerLength() + v.vto_id.innerLength() + (v.has_fwd_from_id() ? v.vfwd_from_id.innerLength() : 0) + (v.has_fwd_date() ? v.vfwd_date.innerLength() : 0) + (v.has_reply_to_msg_id() ? v.vreply_to_msg_id.innerLength() : 0) + v.vdate.innerLength() + v.vmessage.innerLength() + v.vmedia.innerLength() + (v.has_reply_markup() ? v.vreply_markup.innerLength() : 0); + return v.vflags.innerLength() + v.vid.innerLength() + v.vfrom_id.innerLength() + v.vto_id.innerLength() + (v.has_fwd_from_id() ? v.vfwd_from_id.innerLength() : 0) + (v.has_fwd_date() ? v.vfwd_date.innerLength() : 0) + (v.has_reply_to_msg_id() ? v.vreply_to_msg_id.innerLength() : 0) + v.vdate.innerLength() + v.vmessage.innerLength() + v.vmedia.innerLength() + (v.has_reply_markup() ? v.vreply_markup.innerLength() : 0) + (v.has_entities() ? v.ventities.innerLength() : 0); } case mtpc_messageService: { const MTPDmessageService &v(c_messageService()); @@ -19837,6 +20152,7 @@ inline void MTPmessage::read(const mtpPrime *&from, const mtpPrime *end, mtpType v.vmessage.read(from, end); v.vmedia.read(from, end); if (v.has_reply_markup()) { v.vreply_markup.read(from, end); } else { v.vreply_markup = MTPReplyMarkup(); } + if (v.has_entities()) { v.ventities.read(from, end); } else { v.ventities = MTPVector(); } } break; case mtpc_messageService: _type = cons; { if (!data) setData(new MTPDmessageService()); @@ -19870,6 +20186,7 @@ inline void MTPmessage::write(mtpBuffer &to) const { v.vmessage.write(to); v.vmedia.write(to); if (v.has_reply_markup()) v.vreply_markup.write(to); + if (v.has_entities()) v.ventities.write(to); } break; case mtpc_messageService: { const MTPDmessageService &v(c_messageService()); @@ -19899,8 +20216,8 @@ inline MTPmessage::MTPmessage(MTPDmessageService *_data) : mtpDataOwner(_data), inline MTPmessage MTP_messageEmpty(MTPint _id) { return MTPmessage(new MTPDmessageEmpty(_id)); } -inline MTPmessage MTP_message(MTPint _flags, MTPint _id, MTPint _from_id, const MTPPeer &_to_id, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, MTPint _date, const MTPstring &_message, const MTPMessageMedia &_media, const MTPReplyMarkup &_reply_markup) { - return MTPmessage(new MTPDmessage(_flags, _id, _from_id, _to_id, _fwd_from_id, _fwd_date, _reply_to_msg_id, _date, _message, _media, _reply_markup)); +inline MTPmessage MTP_message(MTPint _flags, MTPint _id, MTPint _from_id, const MTPPeer &_to_id, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, MTPint _date, const MTPstring &_message, const MTPMessageMedia &_media, const MTPReplyMarkup &_reply_markup, const MTPVector &_entities) { + return MTPmessage(new MTPDmessage(_flags, _id, _from_id, _to_id, _fwd_from_id, _fwd_date, _reply_to_msg_id, _date, _message, _media, _reply_markup, _entities)); } inline MTPmessage MTP_messageService(MTPint _flags, MTPint _id, MTPint _from_id, const MTPPeer &_to_id, MTPint _date, const MTPMessageAction &_action) { return MTPmessage(new MTPDmessageService(_flags, _id, _from_id, _to_id, _date, _action)); @@ -21657,25 +21974,11 @@ inline MTPmessages_messages MTP_messages_messagesSlice(MTPint _count, const MTPV return MTPmessages_messages(new MTPDmessages_messagesSlice(_count, _messages, _chats, _users)); } -inline uint32 MTPmessages_message::innerLength() const { - return 0; -} -inline mtpTypeId MTPmessages_message::type() const { - return mtpc_messages_messageEmpty; -} -inline void MTPmessages_message::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) { -} -inline void MTPmessages_message::write(mtpBuffer &to) const { -} -inline MTPmessages_message MTP_messages_messageEmpty() { - return MTPmessages_message(); -} - inline uint32 MTPmessages_sentMessage::innerLength() const { switch (_type) { case mtpc_messages_sentMessage: { const MTPDmessages_sentMessage &v(c_messages_sentMessage()); - return v.vid.innerLength() + v.vdate.innerLength() + v.vmedia.innerLength() + v.vpts.innerLength() + v.vpts_count.innerLength(); + return v.vid.innerLength() + v.vdate.innerLength() + v.vmedia.innerLength() + v.ventities.innerLength() + v.vpts.innerLength() + v.vpts_count.innerLength(); } case mtpc_messages_sentMessageLink: { const MTPDmessages_sentMessageLink &v(c_messages_sentMessageLink()); @@ -21697,6 +22000,7 @@ inline void MTPmessages_sentMessage::read(const mtpPrime *&from, const mtpPrime v.vid.read(from, end); v.vdate.read(from, end); v.vmedia.read(from, end); + v.ventities.read(from, end); v.vpts.read(from, end); v.vpts_count.read(from, end); } break; @@ -21721,6 +22025,7 @@ inline void MTPmessages_sentMessage::write(mtpBuffer &to) const { v.vid.write(to); v.vdate.write(to); v.vmedia.write(to); + v.ventities.write(to); v.vpts.write(to); v.vpts_count.write(to); } break; @@ -21747,8 +22052,8 @@ inline MTPmessages_sentMessage::MTPmessages_sentMessage(MTPDmessages_sentMessage } inline MTPmessages_sentMessage::MTPmessages_sentMessage(MTPDmessages_sentMessageLink *_data) : mtpDataOwner(_data), _type(mtpc_messages_sentMessageLink) { } -inline MTPmessages_sentMessage MTP_messages_sentMessage(MTPint _id, MTPint _date, const MTPMessageMedia &_media, MTPint _pts, MTPint _pts_count) { - return MTPmessages_sentMessage(new MTPDmessages_sentMessage(_id, _date, _media, _pts, _pts_count)); +inline MTPmessages_sentMessage MTP_messages_sentMessage(MTPint _id, MTPint _date, const MTPMessageMedia &_media, const MTPVector &_entities, MTPint _pts, MTPint _pts_count) { + return MTPmessages_sentMessage(new MTPDmessages_sentMessage(_id, _date, _media, _entities, _pts, _pts_count)); } inline MTPmessages_sentMessage MTP_messages_sentMessageLink(MTPint _id, MTPint _date, const MTPMessageMedia &_media, MTPint _pts, MTPint _pts_count, const MTPVector &_links, MTPint _seq) { return MTPmessages_sentMessage(new MTPDmessages_sentMessageLink(_id, _date, _media, _pts, _pts_count, _links, _seq)); @@ -22719,11 +23024,11 @@ inline uint32 MTPupdates::innerLength() const { switch (_type) { case mtpc_updateShortMessage: { const MTPDupdateShortMessage &v(c_updateShortMessage()); - return v.vflags.innerLength() + v.vid.innerLength() + v.vuser_id.innerLength() + v.vmessage.innerLength() + v.vpts.innerLength() + v.vpts_count.innerLength() + v.vdate.innerLength() + (v.has_fwd_from_id() ? v.vfwd_from_id.innerLength() : 0) + (v.has_fwd_date() ? v.vfwd_date.innerLength() : 0) + (v.has_reply_to_msg_id() ? v.vreply_to_msg_id.innerLength() : 0); + return v.vflags.innerLength() + v.vid.innerLength() + v.vuser_id.innerLength() + v.vmessage.innerLength() + v.vpts.innerLength() + v.vpts_count.innerLength() + v.vdate.innerLength() + (v.has_fwd_from_id() ? v.vfwd_from_id.innerLength() : 0) + (v.has_fwd_date() ? v.vfwd_date.innerLength() : 0) + (v.has_reply_to_msg_id() ? v.vreply_to_msg_id.innerLength() : 0) + (v.has_entities() ? v.ventities.innerLength() : 0); } case mtpc_updateShortChatMessage: { const MTPDupdateShortChatMessage &v(c_updateShortChatMessage()); - return v.vflags.innerLength() + v.vid.innerLength() + v.vfrom_id.innerLength() + v.vchat_id.innerLength() + v.vmessage.innerLength() + v.vpts.innerLength() + v.vpts_count.innerLength() + v.vdate.innerLength() + (v.has_fwd_from_id() ? v.vfwd_from_id.innerLength() : 0) + (v.has_fwd_date() ? v.vfwd_date.innerLength() : 0) + (v.has_reply_to_msg_id() ? v.vreply_to_msg_id.innerLength() : 0); + return v.vflags.innerLength() + v.vid.innerLength() + v.vfrom_id.innerLength() + v.vchat_id.innerLength() + v.vmessage.innerLength() + v.vpts.innerLength() + v.vpts_count.innerLength() + v.vdate.innerLength() + (v.has_fwd_from_id() ? v.vfwd_from_id.innerLength() : 0) + (v.has_fwd_date() ? v.vfwd_date.innerLength() : 0) + (v.has_reply_to_msg_id() ? v.vreply_to_msg_id.innerLength() : 0) + (v.has_entities() ? v.ventities.innerLength() : 0); } case mtpc_updateShort: { const MTPDupdateShort &v(c_updateShort()); @@ -22761,6 +23066,7 @@ inline void MTPupdates::read(const mtpPrime *&from, const mtpPrime *end, mtpType if (v.has_fwd_from_id()) { v.vfwd_from_id.read(from, end); } else { v.vfwd_from_id = MTPint(); } if (v.has_fwd_date()) { v.vfwd_date.read(from, end); } else { v.vfwd_date = MTPint(); } if (v.has_reply_to_msg_id()) { v.vreply_to_msg_id.read(from, end); } else { v.vreply_to_msg_id = MTPint(); } + if (v.has_entities()) { v.ventities.read(from, end); } else { v.ventities = MTPVector(); } } break; case mtpc_updateShortChatMessage: _type = cons; { if (!data) setData(new MTPDupdateShortChatMessage()); @@ -22776,6 +23082,7 @@ inline void MTPupdates::read(const mtpPrime *&from, const mtpPrime *end, mtpType if (v.has_fwd_from_id()) { v.vfwd_from_id.read(from, end); } else { v.vfwd_from_id = MTPint(); } if (v.has_fwd_date()) { v.vfwd_date.read(from, end); } else { v.vfwd_date = MTPint(); } if (v.has_reply_to_msg_id()) { v.vreply_to_msg_id.read(from, end); } else { v.vreply_to_msg_id = MTPint(); } + if (v.has_entities()) { v.ventities.read(from, end); } else { v.ventities = MTPVector(); } } break; case mtpc_updateShort: _type = cons; { if (!data) setData(new MTPDupdateShort()); @@ -22819,6 +23126,7 @@ inline void MTPupdates::write(mtpBuffer &to) const { if (v.has_fwd_from_id()) v.vfwd_from_id.write(to); if (v.has_fwd_date()) v.vfwd_date.write(to); if (v.has_reply_to_msg_id()) v.vreply_to_msg_id.write(to); + if (v.has_entities()) v.ventities.write(to); } break; case mtpc_updateShortChatMessage: { const MTPDupdateShortChatMessage &v(c_updateShortChatMessage()); @@ -22833,6 +23141,7 @@ inline void MTPupdates::write(mtpBuffer &to) const { if (v.has_fwd_from_id()) v.vfwd_from_id.write(to); if (v.has_fwd_date()) v.vfwd_date.write(to); if (v.has_reply_to_msg_id()) v.vreply_to_msg_id.write(to); + if (v.has_entities()) v.ventities.write(to); } break; case mtpc_updateShort: { const MTPDupdateShort &v(c_updateShort()); @@ -22882,11 +23191,11 @@ inline MTPupdates::MTPupdates(MTPDupdates *_data) : mtpDataOwner(_data), _type(m inline MTPupdates MTP_updatesTooLong() { return MTPupdates(mtpc_updatesTooLong); } -inline MTPupdates MTP_updateShortMessage(MTPint _flags, MTPint _id, MTPint _user_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id) { - return MTPupdates(new MTPDupdateShortMessage(_flags, _id, _user_id, _message, _pts, _pts_count, _date, _fwd_from_id, _fwd_date, _reply_to_msg_id)); +inline MTPupdates MTP_updateShortMessage(MTPint _flags, MTPint _id, MTPint _user_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, const MTPVector &_entities) { + return MTPupdates(new MTPDupdateShortMessage(_flags, _id, _user_id, _message, _pts, _pts_count, _date, _fwd_from_id, _fwd_date, _reply_to_msg_id, _entities)); } -inline MTPupdates MTP_updateShortChatMessage(MTPint _flags, MTPint _id, MTPint _from_id, MTPint _chat_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id) { - return MTPupdates(new MTPDupdateShortChatMessage(_flags, _id, _from_id, _chat_id, _message, _pts, _pts_count, _date, _fwd_from_id, _fwd_date, _reply_to_msg_id)); +inline MTPupdates MTP_updateShortChatMessage(MTPint _flags, MTPint _id, MTPint _from_id, MTPint _chat_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, const MTPVector &_entities) { + return MTPupdates(new MTPDupdateShortChatMessage(_flags, _id, _from_id, _chat_id, _message, _pts, _pts_count, _date, _fwd_from_id, _fwd_date, _reply_to_msg_id, _entities)); } inline MTPupdates MTP_updateShort(const MTPUpdate &_update, MTPint _date) { return MTPupdates(new MTPDupdateShort(_update, _date)); @@ -26132,6 +26441,266 @@ inline MTPhelp_appChangelog MTP_help_appChangelog(const MTPstring &_text) { return MTPhelp_appChangelog(new MTPDhelp_appChangelog(_text)); } +inline uint32 MTPmessageEntity::innerLength() const { + switch (_type) { + case mtpc_messageEntityUnknown: { + const MTPDmessageEntityUnknown &v(c_messageEntityUnknown()); + return v.voffset.innerLength() + v.vlength.innerLength(); + } + case mtpc_messageEntityMention: { + const MTPDmessageEntityMention &v(c_messageEntityMention()); + return v.voffset.innerLength() + v.vlength.innerLength(); + } + case mtpc_messageEntityHashtag: { + const MTPDmessageEntityHashtag &v(c_messageEntityHashtag()); + return v.voffset.innerLength() + v.vlength.innerLength(); + } + case mtpc_messageEntityBotCommand: { + const MTPDmessageEntityBotCommand &v(c_messageEntityBotCommand()); + return v.voffset.innerLength() + v.vlength.innerLength(); + } + case mtpc_messageEntityUrl: { + const MTPDmessageEntityUrl &v(c_messageEntityUrl()); + return v.voffset.innerLength() + v.vlength.innerLength(); + } + case mtpc_messageEntityEmail: { + const MTPDmessageEntityEmail &v(c_messageEntityEmail()); + return v.voffset.innerLength() + v.vlength.innerLength(); + } + case mtpc_messageEntityBold: { + const MTPDmessageEntityBold &v(c_messageEntityBold()); + return v.voffset.innerLength() + v.vlength.innerLength(); + } + case mtpc_messageEntityItalic: { + const MTPDmessageEntityItalic &v(c_messageEntityItalic()); + return v.voffset.innerLength() + v.vlength.innerLength(); + } + case mtpc_messageEntityCode: { + const MTPDmessageEntityCode &v(c_messageEntityCode()); + return v.voffset.innerLength() + v.vlength.innerLength(); + } + case mtpc_messageEntityPre: { + const MTPDmessageEntityPre &v(c_messageEntityPre()); + return v.voffset.innerLength() + v.vlength.innerLength() + v.vlanguage.innerLength(); + } + case mtpc_messageEntityTextUrl: { + const MTPDmessageEntityTextUrl &v(c_messageEntityTextUrl()); + return v.voffset.innerLength() + v.vlength.innerLength() + v.vurl.innerLength(); + } + } + return 0; +} +inline mtpTypeId MTPmessageEntity::type() const { + if (!_type) throw mtpErrorUninitialized(); + return _type; +} +inline void MTPmessageEntity::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) { + if (cons != _type) setData(0); + switch (cons) { + case mtpc_messageEntityUnknown: _type = cons; { + if (!data) setData(new MTPDmessageEntityUnknown()); + MTPDmessageEntityUnknown &v(_messageEntityUnknown()); + v.voffset.read(from, end); + v.vlength.read(from, end); + } break; + case mtpc_messageEntityMention: _type = cons; { + if (!data) setData(new MTPDmessageEntityMention()); + MTPDmessageEntityMention &v(_messageEntityMention()); + v.voffset.read(from, end); + v.vlength.read(from, end); + } break; + case mtpc_messageEntityHashtag: _type = cons; { + if (!data) setData(new MTPDmessageEntityHashtag()); + MTPDmessageEntityHashtag &v(_messageEntityHashtag()); + v.voffset.read(from, end); + v.vlength.read(from, end); + } break; + case mtpc_messageEntityBotCommand: _type = cons; { + if (!data) setData(new MTPDmessageEntityBotCommand()); + MTPDmessageEntityBotCommand &v(_messageEntityBotCommand()); + v.voffset.read(from, end); + v.vlength.read(from, end); + } break; + case mtpc_messageEntityUrl: _type = cons; { + if (!data) setData(new MTPDmessageEntityUrl()); + MTPDmessageEntityUrl &v(_messageEntityUrl()); + v.voffset.read(from, end); + v.vlength.read(from, end); + } break; + case mtpc_messageEntityEmail: _type = cons; { + if (!data) setData(new MTPDmessageEntityEmail()); + MTPDmessageEntityEmail &v(_messageEntityEmail()); + v.voffset.read(from, end); + v.vlength.read(from, end); + } break; + case mtpc_messageEntityBold: _type = cons; { + if (!data) setData(new MTPDmessageEntityBold()); + MTPDmessageEntityBold &v(_messageEntityBold()); + v.voffset.read(from, end); + v.vlength.read(from, end); + } break; + case mtpc_messageEntityItalic: _type = cons; { + if (!data) setData(new MTPDmessageEntityItalic()); + MTPDmessageEntityItalic &v(_messageEntityItalic()); + v.voffset.read(from, end); + v.vlength.read(from, end); + } break; + case mtpc_messageEntityCode: _type = cons; { + if (!data) setData(new MTPDmessageEntityCode()); + MTPDmessageEntityCode &v(_messageEntityCode()); + v.voffset.read(from, end); + v.vlength.read(from, end); + } break; + case mtpc_messageEntityPre: _type = cons; { + if (!data) setData(new MTPDmessageEntityPre()); + MTPDmessageEntityPre &v(_messageEntityPre()); + v.voffset.read(from, end); + v.vlength.read(from, end); + v.vlanguage.read(from, end); + } break; + case mtpc_messageEntityTextUrl: _type = cons; { + if (!data) setData(new MTPDmessageEntityTextUrl()); + MTPDmessageEntityTextUrl &v(_messageEntityTextUrl()); + v.voffset.read(from, end); + v.vlength.read(from, end); + v.vurl.read(from, end); + } break; + default: throw mtpErrorUnexpected(cons, "MTPmessageEntity"); + } +} +inline void MTPmessageEntity::write(mtpBuffer &to) const { + switch (_type) { + case mtpc_messageEntityUnknown: { + const MTPDmessageEntityUnknown &v(c_messageEntityUnknown()); + v.voffset.write(to); + v.vlength.write(to); + } break; + case mtpc_messageEntityMention: { + const MTPDmessageEntityMention &v(c_messageEntityMention()); + v.voffset.write(to); + v.vlength.write(to); + } break; + case mtpc_messageEntityHashtag: { + const MTPDmessageEntityHashtag &v(c_messageEntityHashtag()); + v.voffset.write(to); + v.vlength.write(to); + } break; + case mtpc_messageEntityBotCommand: { + const MTPDmessageEntityBotCommand &v(c_messageEntityBotCommand()); + v.voffset.write(to); + v.vlength.write(to); + } break; + case mtpc_messageEntityUrl: { + const MTPDmessageEntityUrl &v(c_messageEntityUrl()); + v.voffset.write(to); + v.vlength.write(to); + } break; + case mtpc_messageEntityEmail: { + const MTPDmessageEntityEmail &v(c_messageEntityEmail()); + v.voffset.write(to); + v.vlength.write(to); + } break; + case mtpc_messageEntityBold: { + const MTPDmessageEntityBold &v(c_messageEntityBold()); + v.voffset.write(to); + v.vlength.write(to); + } break; + case mtpc_messageEntityItalic: { + const MTPDmessageEntityItalic &v(c_messageEntityItalic()); + v.voffset.write(to); + v.vlength.write(to); + } break; + case mtpc_messageEntityCode: { + const MTPDmessageEntityCode &v(c_messageEntityCode()); + v.voffset.write(to); + v.vlength.write(to); + } break; + case mtpc_messageEntityPre: { + const MTPDmessageEntityPre &v(c_messageEntityPre()); + v.voffset.write(to); + v.vlength.write(to); + v.vlanguage.write(to); + } break; + case mtpc_messageEntityTextUrl: { + const MTPDmessageEntityTextUrl &v(c_messageEntityTextUrl()); + v.voffset.write(to); + v.vlength.write(to); + v.vurl.write(to); + } break; + } +} +inline MTPmessageEntity::MTPmessageEntity(mtpTypeId type) : mtpDataOwner(0), _type(type) { + switch (type) { + case mtpc_messageEntityUnknown: setData(new MTPDmessageEntityUnknown()); break; + case mtpc_messageEntityMention: setData(new MTPDmessageEntityMention()); break; + case mtpc_messageEntityHashtag: setData(new MTPDmessageEntityHashtag()); break; + case mtpc_messageEntityBotCommand: setData(new MTPDmessageEntityBotCommand()); break; + case mtpc_messageEntityUrl: setData(new MTPDmessageEntityUrl()); break; + case mtpc_messageEntityEmail: setData(new MTPDmessageEntityEmail()); break; + case mtpc_messageEntityBold: setData(new MTPDmessageEntityBold()); break; + case mtpc_messageEntityItalic: setData(new MTPDmessageEntityItalic()); break; + case mtpc_messageEntityCode: setData(new MTPDmessageEntityCode()); break; + case mtpc_messageEntityPre: setData(new MTPDmessageEntityPre()); break; + case mtpc_messageEntityTextUrl: setData(new MTPDmessageEntityTextUrl()); break; + default: throw mtpErrorBadTypeId(type, "MTPmessageEntity"); + } +} +inline MTPmessageEntity::MTPmessageEntity(MTPDmessageEntityUnknown *_data) : mtpDataOwner(_data), _type(mtpc_messageEntityUnknown) { +} +inline MTPmessageEntity::MTPmessageEntity(MTPDmessageEntityMention *_data) : mtpDataOwner(_data), _type(mtpc_messageEntityMention) { +} +inline MTPmessageEntity::MTPmessageEntity(MTPDmessageEntityHashtag *_data) : mtpDataOwner(_data), _type(mtpc_messageEntityHashtag) { +} +inline MTPmessageEntity::MTPmessageEntity(MTPDmessageEntityBotCommand *_data) : mtpDataOwner(_data), _type(mtpc_messageEntityBotCommand) { +} +inline MTPmessageEntity::MTPmessageEntity(MTPDmessageEntityUrl *_data) : mtpDataOwner(_data), _type(mtpc_messageEntityUrl) { +} +inline MTPmessageEntity::MTPmessageEntity(MTPDmessageEntityEmail *_data) : mtpDataOwner(_data), _type(mtpc_messageEntityEmail) { +} +inline MTPmessageEntity::MTPmessageEntity(MTPDmessageEntityBold *_data) : mtpDataOwner(_data), _type(mtpc_messageEntityBold) { +} +inline MTPmessageEntity::MTPmessageEntity(MTPDmessageEntityItalic *_data) : mtpDataOwner(_data), _type(mtpc_messageEntityItalic) { +} +inline MTPmessageEntity::MTPmessageEntity(MTPDmessageEntityCode *_data) : mtpDataOwner(_data), _type(mtpc_messageEntityCode) { +} +inline MTPmessageEntity::MTPmessageEntity(MTPDmessageEntityPre *_data) : mtpDataOwner(_data), _type(mtpc_messageEntityPre) { +} +inline MTPmessageEntity::MTPmessageEntity(MTPDmessageEntityTextUrl *_data) : mtpDataOwner(_data), _type(mtpc_messageEntityTextUrl) { +} +inline MTPmessageEntity MTP_messageEntityUnknown(MTPint _offset, MTPint _length) { + return MTPmessageEntity(new MTPDmessageEntityUnknown(_offset, _length)); +} +inline MTPmessageEntity MTP_messageEntityMention(MTPint _offset, MTPint _length) { + return MTPmessageEntity(new MTPDmessageEntityMention(_offset, _length)); +} +inline MTPmessageEntity MTP_messageEntityHashtag(MTPint _offset, MTPint _length) { + return MTPmessageEntity(new MTPDmessageEntityHashtag(_offset, _length)); +} +inline MTPmessageEntity MTP_messageEntityBotCommand(MTPint _offset, MTPint _length) { + return MTPmessageEntity(new MTPDmessageEntityBotCommand(_offset, _length)); +} +inline MTPmessageEntity MTP_messageEntityUrl(MTPint _offset, MTPint _length) { + return MTPmessageEntity(new MTPDmessageEntityUrl(_offset, _length)); +} +inline MTPmessageEntity MTP_messageEntityEmail(MTPint _offset, MTPint _length) { + return MTPmessageEntity(new MTPDmessageEntityEmail(_offset, _length)); +} +inline MTPmessageEntity MTP_messageEntityBold(MTPint _offset, MTPint _length) { + return MTPmessageEntity(new MTPDmessageEntityBold(_offset, _length)); +} +inline MTPmessageEntity MTP_messageEntityItalic(MTPint _offset, MTPint _length) { + return MTPmessageEntity(new MTPDmessageEntityItalic(_offset, _length)); +} +inline MTPmessageEntity MTP_messageEntityCode(MTPint _offset, MTPint _length) { + return MTPmessageEntity(new MTPDmessageEntityCode(_offset, _length)); +} +inline MTPmessageEntity MTP_messageEntityPre(MTPint _offset, MTPint _length, const MTPstring &_language) { + return MTPmessageEntity(new MTPDmessageEntityPre(_offset, _length, _language)); +} +inline MTPmessageEntity MTP_messageEntityTextUrl(MTPint _offset, MTPint _length, const MTPstring &_url) { + return MTPmessageEntity(new MTPDmessageEntityTextUrl(_offset, _length, _url)); +} + // Human-readable text serialization #if (defined _DEBUG || defined _WITH_DEBUG) diff --git a/Telegram/SourceFiles/mtproto/scheme.tl b/Telegram/SourceFiles/mtproto/scheme.tl index d4167a25b..440d0eb3f 100644 --- a/Telegram/SourceFiles/mtproto/scheme.tl +++ b/Telegram/SourceFiles/mtproto/scheme.tl @@ -212,7 +212,7 @@ chatPhotoEmpty#37c1011c = ChatPhoto; chatPhoto#6153276a photo_small:FileLocation photo_big:FileLocation = ChatPhoto; messageEmpty#83e5de54 id:int = Message; -message#c3060325 flags:# id:int from_id:int to_id:Peer fwd_from_id:flags.2?int fwd_date:flags.2?int reply_to_msg_id:flags.3?int date:int message:string media:MessageMedia reply_markup:flags.6?ReplyMarkup = Message; +message#f07814c8 flags:# id:int from_id:int to_id:Peer fwd_from_id:flags.2?int fwd_date:flags.2?int reply_to_msg_id:flags.3?int date:int message:string media:MessageMedia reply_markup:flags.6?ReplyMarkup entities:flags.7?Vector = Message; messageService#1d86f70e flags:int id:int from_id:int to_id:Peer date:int action:MessageAction = Message; messageMediaEmpty#3ded6320 = MessageMedia; @@ -303,9 +303,7 @@ messages.dialogsSlice#71e094f3 count:int dialogs:Vector

    }O^@IEL1 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